????JFIF??x?x????'
| Server IP : 172.67.174.47 / Your IP : 216.73.216.145 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /././home/./tempvsty/pontiacques.org/wp-content/themes/astra/admin/assets/build/ |
Upload File : |
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/@remix-run/router/dist/router.js":
/*!*******************************************************!*\
!*** ./node_modules/@remix-run/router/dist/router.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ AbortedDeferredError: () => (/* binding */ AbortedDeferredError),
/* harmony export */ Action: () => (/* binding */ Action),
/* harmony export */ IDLE_BLOCKER: () => (/* binding */ IDLE_BLOCKER),
/* harmony export */ IDLE_FETCHER: () => (/* binding */ IDLE_FETCHER),
/* harmony export */ IDLE_NAVIGATION: () => (/* binding */ IDLE_NAVIGATION),
/* harmony export */ UNSAFE_DEFERRED_SYMBOL: () => (/* binding */ UNSAFE_DEFERRED_SYMBOL),
/* harmony export */ UNSAFE_DeferredData: () => (/* binding */ DeferredData),
/* harmony export */ UNSAFE_ErrorResponseImpl: () => (/* binding */ ErrorResponseImpl),
/* harmony export */ UNSAFE_convertRouteMatchToUiMatch: () => (/* binding */ convertRouteMatchToUiMatch),
/* harmony export */ UNSAFE_convertRoutesToDataRoutes: () => (/* binding */ convertRoutesToDataRoutes),
/* harmony export */ UNSAFE_decodePath: () => (/* binding */ decodePath),
/* harmony export */ UNSAFE_getResolveToMatches: () => (/* binding */ getResolveToMatches),
/* harmony export */ UNSAFE_invariant: () => (/* binding */ invariant),
/* harmony export */ UNSAFE_warning: () => (/* binding */ warning),
/* harmony export */ createBrowserHistory: () => (/* binding */ createBrowserHistory),
/* harmony export */ createHashHistory: () => (/* binding */ createHashHistory),
/* harmony export */ createMemoryHistory: () => (/* binding */ createMemoryHistory),
/* harmony export */ createPath: () => (/* binding */ createPath),
/* harmony export */ createRouter: () => (/* binding */ createRouter),
/* harmony export */ createStaticHandler: () => (/* binding */ createStaticHandler),
/* harmony export */ data: () => (/* binding */ data),
/* harmony export */ defer: () => (/* binding */ defer),
/* harmony export */ generatePath: () => (/* binding */ generatePath),
/* harmony export */ getStaticContextFromError: () => (/* binding */ getStaticContextFromError),
/* harmony export */ getToPathname: () => (/* binding */ getToPathname),
/* harmony export */ isDataWithResponseInit: () => (/* binding */ isDataWithResponseInit),
/* harmony export */ isDeferredData: () => (/* binding */ isDeferredData),
/* harmony export */ isRouteErrorResponse: () => (/* binding */ isRouteErrorResponse),
/* harmony export */ joinPaths: () => (/* binding */ joinPaths),
/* harmony export */ json: () => (/* binding */ json),
/* harmony export */ matchPath: () => (/* binding */ matchPath),
/* harmony export */ matchRoutes: () => (/* binding */ matchRoutes),
/* harmony export */ normalizePathname: () => (/* binding */ normalizePathname),
/* harmony export */ parsePath: () => (/* binding */ parsePath),
/* harmony export */ redirect: () => (/* binding */ redirect),
/* harmony export */ redirectDocument: () => (/* binding */ redirectDocument),
/* harmony export */ replace: () => (/* binding */ replace),
/* harmony export */ resolvePath: () => (/* binding */ resolvePath),
/* harmony export */ resolveTo: () => (/* binding */ resolveTo),
/* harmony export */ stripBasename: () => (/* binding */ stripBasename)
/* harmony export */ });
/**
* @remix-run/router v1.21.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
////////////////////////////////////////////////////////////////////////////////
//#region Types and Constants
////////////////////////////////////////////////////////////////////////////////
/**
* Actions represent the type of change to a location value.
*/
var Action;
(function (Action) {
/**
* A POP indicates a change to an arbitrary index in the history stack, such
* as a back or forward navigation. It does not describe the direction of the
* navigation, only that the current index changed.
*
* Note: This is the default action for newly created history objects.
*/
Action["Pop"] = "POP";
/**
* A PUSH indicates a new entry being added to the history stack, such as when
* a link is clicked and a new page loads. When this happens, all subsequent
* entries in the stack are lost.
*/
Action["Push"] = "PUSH";
/**
* A REPLACE indicates the entry at the current index in the history stack
* being replaced by a new one.
*/
Action["Replace"] = "REPLACE";
})(Action || (Action = {}));
const PopStateEventType = "popstate";
/**
* Memory history stores the current location in memory. It is designed for use
* in stateful non-browser environments like tests and React Native.
*/
function createMemoryHistory(options) {
if (options === void 0) {
options = {};
}
let {
initialEntries = ["/"],
initialIndex,
v5Compat = false
} = options;
let entries; // Declare so we can access from createMemoryLocation
entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === "string" ? null : entry.state, index === 0 ? "default" : undefined));
let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);
let action = Action.Pop;
let listener = null;
function clampIndex(n) {
return Math.min(Math.max(n, 0), entries.length - 1);
}
function getCurrentLocation() {
return entries[index];
}
function createMemoryLocation(to, state, key) {
if (state === void 0) {
state = null;
}
let location = createLocation(entries ? getCurrentLocation().pathname : "/", to, state, key);
warning(location.pathname.charAt(0) === "/", "relative pathnames are not supported in memory history: " + JSON.stringify(to));
return location;
}
function createHref(to) {
return typeof to === "string" ? to : createPath(to);
}
let history = {
get index() {
return index;
},
get action() {
return action;
},
get location() {
return getCurrentLocation();
},
createHref,
createURL(to) {
return new URL(createHref(to), "http://localhost");
},
encodeLocation(to) {
let path = typeof to === "string" ? parsePath(to) : to;
return {
pathname: path.pathname || "",
search: path.search || "",
hash: path.hash || ""
};
},
push(to, state) {
action = Action.Push;
let nextLocation = createMemoryLocation(to, state);
index += 1;
entries.splice(index, entries.length, nextLocation);
if (v5Compat && listener) {
listener({
action,
location: nextLocation,
delta: 1
});
}
},
replace(to, state) {
action = Action.Replace;
let nextLocation = createMemoryLocation(to, state);
entries[index] = nextLocation;
if (v5Compat && listener) {
listener({
action,
location: nextLocation,
delta: 0
});
}
},
go(delta) {
action = Action.Pop;
let nextIndex = clampIndex(index + delta);
let nextLocation = entries[nextIndex];
index = nextIndex;
if (listener) {
listener({
action,
location: nextLocation,
delta
});
}
},
listen(fn) {
listener = fn;
return () => {
listener = null;
};
}
};
return history;
}
/**
* Browser history stores the location in regular URLs. This is the standard for
* most web apps, but it requires some configuration on the server to ensure you
* serve the same app at multiple URLs.
*
* @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory
*/
function createBrowserHistory(options) {
if (options === void 0) {
options = {};
}
function createBrowserLocation(window, globalHistory) {
let {
pathname,
search,
hash
} = window.location;
return createLocation("", {
pathname,
search,
hash
},
// state defaults to `null` because `window.history.state` does
globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default");
}
function createBrowserHref(window, to) {
return typeof to === "string" ? to : createPath(to);
}
return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);
}
/**
* Hash history stores the location in window.location.hash. This makes it ideal
* for situations where you don't want to send the location to the server for
* some reason, either because you do cannot configure it or the URL space is
* reserved for something else.
*
* @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory
*/
function createHashHistory(options) {
if (options === void 0) {
options = {};
}
function createHashLocation(window, globalHistory) {
let {
pathname = "/",
search = "",
hash = ""
} = parsePath(window.location.hash.substr(1));
// Hash URL should always have a leading / just like window.location.pathname
// does, so if an app ends up at a route like /#something then we add a
// leading slash so all of our path-matching behaves the same as if it would
// in a browser router. This is particularly important when there exists a
// root splat route (<Route path="*">) since that matches internally against
// "/*" and we'd expect /#something to 404 in a hash router app.
if (!pathname.startsWith("/") && !pathname.startsWith(".")) {
pathname = "/" + pathname;
}
return createLocation("", {
pathname,
search,
hash
},
// state defaults to `null` because `window.history.state` does
globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default");
}
function createHashHref(window, to) {
let base = window.document.querySelector("base");
let href = "";
if (base && base.getAttribute("href")) {
let url = window.location.href;
let hashIndex = url.indexOf("#");
href = hashIndex === -1 ? url : url.slice(0, hashIndex);
}
return href + "#" + (typeof to === "string" ? to : createPath(to));
}
function validateHashLocation(location, to) {
warning(location.pathname.charAt(0) === "/", "relative pathnames are not supported in hash history.push(" + JSON.stringify(to) + ")");
}
return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);
}
function invariant(value, message) {
if (value === false || value === null || typeof value === "undefined") {
throw new Error(message);
}
}
function warning(cond, message) {
if (!cond) {
// eslint-disable-next-line no-console
if (typeof console !== "undefined") console.warn(message);
try {
// Welcome to debugging history!
//
// This error is thrown as a convenience, so you can more easily
// find the source for a warning that appears in the console by
// enabling "pause on exceptions" in your JavaScript debugger.
throw new Error(message);
// eslint-disable-next-line no-empty
} catch (e) {}
}
}
function createKey() {
return Math.random().toString(36).substr(2, 8);
}
/**
* For browser-based histories, we combine the state and key into an object
*/
function getHistoryState(location, index) {
return {
usr: location.state,
key: location.key,
idx: index
};
}
/**
* Creates a Location object with a unique key from the given Path
*/
function createLocation(current, to, state, key) {
if (state === void 0) {
state = null;
}
let location = _extends({
pathname: typeof current === "string" ? current : current.pathname,
search: "",
hash: ""
}, typeof to === "string" ? parsePath(to) : to, {
state,
// TODO: This could be cleaned up. push/replace should probably just take
// full Locations now and avoid the need to run through this flow at all
// But that's a pretty big refactor to the current test suite so going to
// keep as is for the time being and just let any incoming keys take precedence
key: to && to.key || key || createKey()
});
return location;
}
/**
* Creates a string URL path from the given pathname, search, and hash components.
*/
function createPath(_ref) {
let {
pathname = "/",
search = "",
hash = ""
} = _ref;
if (search && search !== "?") pathname += search.charAt(0) === "?" ? search : "?" + search;
if (hash && hash !== "#") pathname += hash.charAt(0) === "#" ? hash : "#" + hash;
return pathname;
}
/**
* Parses a string URL path into its separate pathname, search, and hash components.
*/
function parsePath(path) {
let parsedPath = {};
if (path) {
let hashIndex = path.indexOf("#");
if (hashIndex >= 0) {
parsedPath.hash = path.substr(hashIndex);
path = path.substr(0, hashIndex);
}
let searchIndex = path.indexOf("?");
if (searchIndex >= 0) {
parsedPath.search = path.substr(searchIndex);
path = path.substr(0, searchIndex);
}
if (path) {
parsedPath.pathname = path;
}
}
return parsedPath;
}
function getUrlBasedHistory(getLocation, createHref, validateLocation, options) {
if (options === void 0) {
options = {};
}
let {
window = document.defaultView,
v5Compat = false
} = options;
let globalHistory = window.history;
let action = Action.Pop;
let listener = null;
let index = getIndex();
// Index should only be null when we initialize. If not, it's because the
// user called history.pushState or history.replaceState directly, in which
// case we should log a warning as it will result in bugs.
if (index == null) {
index = 0;
globalHistory.replaceState(_extends({}, globalHistory.state, {
idx: index
}), "");
}
function getIndex() {
let state = globalHistory.state || {
idx: null
};
return state.idx;
}
function handlePop() {
action = Action.Pop;
let nextIndex = getIndex();
let delta = nextIndex == null ? null : nextIndex - index;
index = nextIndex;
if (listener) {
listener({
action,
location: history.location,
delta
});
}
}
function push(to, state) {
action = Action.Push;
let location = createLocation(history.location, to, state);
if (validateLocation) validateLocation(location, to);
index = getIndex() + 1;
let historyState = getHistoryState(location, index);
let url = history.createHref(location);
// try...catch because iOS limits us to 100 pushState calls :/
try {
globalHistory.pushState(historyState, "", url);
} catch (error) {
// If the exception is because `state` can't be serialized, let that throw
// outwards just like a replace call would so the dev knows the cause
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps
// https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal
if (error instanceof DOMException && error.name === "DataCloneError") {
throw error;
}
// They are going to lose state here, but there is no real
// way to warn them about it since the page will refresh...
window.location.assign(url);
}
if (v5Compat && listener) {
listener({
action,
location: history.location,
delta: 1
});
}
}
function replace(to, state) {
action = Action.Replace;
let location = createLocation(history.location, to, state);
if (validateLocation) validateLocation(location, to);
index = getIndex();
let historyState = getHistoryState(location, index);
let url = history.createHref(location);
globalHistory.replaceState(historyState, "", url);
if (v5Compat && listener) {
listener({
action,
location: history.location,
delta: 0
});
}
}
function createURL(to) {
// window.location.origin is "null" (the literal string value) in Firefox
// under certain conditions, notably when serving from a local HTML file
// See https://bugzilla.mozilla.org/show_bug.cgi?id=878297
let base = window.location.origin !== "null" ? window.location.origin : window.location.href;
let href = typeof to === "string" ? to : createPath(to);
// Treating this as a full URL will strip any trailing spaces so we need to
// pre-encode them since they might be part of a matching splat param from
// an ancestor route
href = href.replace(/ $/, "%20");
invariant(base, "No window.location.(origin|href) available to create URL for href: " + href);
return new URL(href, base);
}
let history = {
get action() {
return action;
},
get location() {
return getLocation(window, globalHistory);
},
listen(fn) {
if (listener) {
throw new Error("A history only accepts one active listener");
}
window.addEventListener(PopStateEventType, handlePop);
listener = fn;
return () => {
window.removeEventListener(PopStateEventType, handlePop);
listener = null;
};
},
createHref(to) {
return createHref(window, to);
},
createURL,
encodeLocation(to) {
// Encode a Location the same way window.location would
let url = createURL(to);
return {
pathname: url.pathname,
search: url.search,
hash: url.hash
};
},
push,
replace,
go(n) {
return globalHistory.go(n);
}
};
return history;
}
//#endregion
var ResultType;
(function (ResultType) {
ResultType["data"] = "data";
ResultType["deferred"] = "deferred";
ResultType["redirect"] = "redirect";
ResultType["error"] = "error";
})(ResultType || (ResultType = {}));
const immutableRouteKeys = new Set(["lazy", "caseSensitive", "path", "id", "index", "children"]);
function isIndexRoute(route) {
return route.index === true;
}
// Walk the route tree generating unique IDs where necessary, so we are working
// solely with AgnosticDataRouteObject's within the Router
function convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {
if (parentPath === void 0) {
parentPath = [];
}
if (manifest === void 0) {
manifest = {};
}
return routes.map((route, index) => {
let treePath = [...parentPath, String(index)];
let id = typeof route.id === "string" ? route.id : treePath.join("-");
invariant(route.index !== true || !route.children, "Cannot specify children on an index route");
invariant(!manifest[id], "Found a route id collision on id \"" + id + "\". Route " + "id's must be globally unique within Data Router usages");
if (isIndexRoute(route)) {
let indexRoute = _extends({}, route, mapRouteProperties(route), {
id
});
manifest[id] = indexRoute;
return indexRoute;
} else {
let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {
id,
children: undefined
});
manifest[id] = pathOrLayoutRoute;
if (route.children) {
pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);
}
return pathOrLayoutRoute;
}
});
}
/**
* Matches the given routes to a location and returns the match data.
*
* @see https://reactrouter.com/v6/utils/match-routes
*/
function matchRoutes(routes, locationArg, basename) {
if (basename === void 0) {
basename = "/";
}
return matchRoutesImpl(routes, locationArg, basename, false);
}
function matchRoutesImpl(routes, locationArg, basename, allowPartial) {
let location = typeof locationArg === "string" ? parsePath(locationArg) : locationArg;
let pathname = stripBasename(location.pathname || "/", basename);
if (pathname == null) {
return null;
}
let branches = flattenRoutes(routes);
rankRouteBranches(branches);
let matches = null;
for (let i = 0; matches == null && i < branches.length; ++i) {
// Incoming pathnames are generally encoded from either window.location
// or from router.navigate, but we want to match against the unencoded
// paths in the route definitions. Memory router locations won't be
// encoded here but there also shouldn't be anything to decode so this
// should be a safe operation. This avoids needing matchRoutes to be
// history-aware.
let decoded = decodePath(pathname);
matches = matchRouteBranch(branches[i], decoded, allowPartial);
}
return matches;
}
function convertRouteMatchToUiMatch(match, loaderData) {
let {
route,
pathname,
params
} = match;
return {
id: route.id,
pathname,
params,
data: loaderData[route.id],
handle: route.handle
};
}
function flattenRoutes(routes, branches, parentsMeta, parentPath) {
if (branches === void 0) {
branches = [];
}
if (parentsMeta === void 0) {
parentsMeta = [];
}
if (parentPath === void 0) {
parentPath = "";
}
let flattenRoute = (route, index, relativePath) => {
let meta = {
relativePath: relativePath === undefined ? route.path || "" : relativePath,
caseSensitive: route.caseSensitive === true,
childrenIndex: index,
route
};
if (meta.relativePath.startsWith("/")) {
invariant(meta.relativePath.startsWith(parentPath), "Absolute route path \"" + meta.relativePath + "\" nested under path " + ("\"" + parentPath + "\" is not valid. An absolute child route path ") + "must start with the combined path of all its parent routes.");
meta.relativePath = meta.relativePath.slice(parentPath.length);
}
let path = joinPaths([parentPath, meta.relativePath]);
let routesMeta = parentsMeta.concat(meta);
// Add the children before adding this route to the array, so we traverse the
// route tree depth-first and child routes appear before their parents in
// the "flattened" version.
if (route.children && route.children.length > 0) {
invariant(
// Our types know better, but runtime JS may not!
// @ts-expect-error
route.index !== true, "Index routes must not have child routes. Please remove " + ("all child routes from route path \"" + path + "\"."));
flattenRoutes(route.children, branches, routesMeta, path);
}
// Routes without a path shouldn't ever match by themselves unless they are
// index routes, so don't add them to the list of possible branches.
if (route.path == null && !route.index) {
return;
}
branches.push({
path,
score: computeScore(path, route.index),
routesMeta
});
};
routes.forEach((route, index) => {
var _route$path;
// coarse-grain check for optional params
if (route.path === "" || !((_route$path = route.path) != null && _route$path.includes("?"))) {
flattenRoute(route, index);
} else {
for (let exploded of explodeOptionalSegments(route.path)) {
flattenRoute(route, index, exploded);
}
}
});
return branches;
}
/**
* Computes all combinations of optional path segments for a given path,
* excluding combinations that are ambiguous and of lower priority.
*
* For example, `/one/:two?/three/:four?/:five?` explodes to:
* - `/one/three`
* - `/one/:two/three`
* - `/one/three/:four`
* - `/one/three/:five`
* - `/one/:two/three/:four`
* - `/one/:two/three/:five`
* - `/one/three/:four/:five`
* - `/one/:two/three/:four/:five`
*/
function explodeOptionalSegments(path) {
let segments = path.split("/");
if (segments.length === 0) return [];
let [first, ...rest] = segments;
// Optional path segments are denoted by a trailing `?`
let isOptional = first.endsWith("?");
// Compute the corresponding required segment: `foo?` -> `foo`
let required = first.replace(/\?$/, "");
if (rest.length === 0) {
// Intepret empty string as omitting an optional segment
// `["one", "", "three"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`
return isOptional ? [required, ""] : [required];
}
let restExploded = explodeOptionalSegments(rest.join("/"));
let result = [];
// All child paths with the prefix. Do this for all children before the
// optional version for all children, so we get consistent ordering where the
// parent optional aspect is preferred as required. Otherwise, we can get
// child sections interspersed where deeper optional segments are higher than
// parent optional segments, where for example, /:two would explode _earlier_
// then /:one. By always including the parent as required _for all children_
// first, we avoid this issue
result.push(...restExploded.map(subpath => subpath === "" ? required : [required, subpath].join("/")));
// Then, if this is an optional value, add all child versions without
if (isOptional) {
result.push(...restExploded);
}
// for absolute paths, ensure `/` instead of empty segment
return result.map(exploded => path.startsWith("/") && exploded === "" ? "/" : exploded);
}
function rankRouteBranches(branches) {
branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first
: compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));
}
const paramRe = /^:[\w-]+$/;
const dynamicSegmentValue = 3;
const indexRouteValue = 2;
const emptySegmentValue = 1;
const staticSegmentValue = 10;
const splatPenalty = -2;
const isSplat = s => s === "*";
function computeScore(path, index) {
let segments = path.split("/");
let initialScore = segments.length;
if (segments.some(isSplat)) {
initialScore += splatPenalty;
}
if (index) {
initialScore += indexRouteValue;
}
return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === "" ? emptySegmentValue : staticSegmentValue), initialScore);
}
function compareIndexes(a, b) {
let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);
return siblings ?
// If two routes are siblings, we should try to match the earlier sibling
// first. This allows people to have fine-grained control over the matching
// behavior by simply putting routes with identical paths in the order they
// want them tried.
a[a.length - 1] - b[b.length - 1] :
// Otherwise, it doesn't really make sense to rank non-siblings by index,
// so they sort equally.
0;
}
function matchRouteBranch(branch, pathname, allowPartial) {
if (allowPartial === void 0) {
allowPartial = false;
}
let {
routesMeta
} = branch;
let matchedParams = {};
let matchedPathname = "/";
let matches = [];
for (let i = 0; i < routesMeta.length; ++i) {
let meta = routesMeta[i];
let end = i === routesMeta.length - 1;
let remainingPathname = matchedPathname === "/" ? pathname : pathname.slice(matchedPathname.length) || "/";
let match = matchPath({
path: meta.relativePath,
caseSensitive: meta.caseSensitive,
end
}, remainingPathname);
let route = meta.route;
if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {
match = matchPath({
path: meta.relativePath,
caseSensitive: meta.caseSensitive,
end: false
}, remainingPathname);
}
if (!match) {
return null;
}
Object.assign(matchedParams, match.params);
matches.push({
// TODO: Can this as be avoided?
params: matchedParams,
pathname: joinPaths([matchedPathname, match.pathname]),
pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),
route
});
if (match.pathnameBase !== "/") {
matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);
}
}
return matches;
}
/**
* Returns a path with params interpolated.
*
* @see https://reactrouter.com/v6/utils/generate-path
*/
function generatePath(originalPath, params) {
if (params === void 0) {
params = {};
}
let path = originalPath;
if (path.endsWith("*") && path !== "*" && !path.endsWith("/*")) {
warning(false, "Route path \"" + path + "\" will be treated as if it were " + ("\"" + path.replace(/\*$/, "/*") + "\" because the `*` character must ") + "always follow a `/` in the pattern. To get rid of this warning, " + ("please change the route path to \"" + path.replace(/\*$/, "/*") + "\"."));
path = path.replace(/\*$/, "/*");
}
// ensure `/` is added at the beginning if the path is absolute
const prefix = path.startsWith("/") ? "/" : "";
const stringify = p => p == null ? "" : typeof p === "string" ? p : String(p);
const segments = path.split(/\/+/).map((segment, index, array) => {
const isLastSegment = index === array.length - 1;
// only apply the splat if it's the last segment
if (isLastSegment && segment === "*") {
const star = "*";
// Apply the splat
return stringify(params[star]);
}
const keyMatch = segment.match(/^:([\w-]+)(\??)$/);
if (keyMatch) {
const [, key, optional] = keyMatch;
let param = params[key];
invariant(optional === "?" || param != null, "Missing \":" + key + "\" param");
return stringify(param);
}
// Remove any optional markers from optional static segments
return segment.replace(/\?$/g, "");
})
// Remove empty segments
.filter(segment => !!segment);
return prefix + segments.join("/");
}
/**
* Performs pattern matching on a URL pathname and returns information about
* the match.
*
* @see https://reactrouter.com/v6/utils/match-path
*/
function matchPath(pattern, pathname) {
if (typeof pattern === "string") {
pattern = {
path: pattern,
caseSensitive: false,
end: true
};
}
let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);
let match = pathname.match(matcher);
if (!match) return null;
let matchedPathname = match[0];
let pathnameBase = matchedPathname.replace(/(.)\/+$/, "$1");
let captureGroups = match.slice(1);
let params = compiledParams.reduce((memo, _ref, index) => {
let {
paramName,
isOptional
} = _ref;
// We need to compute the pathnameBase here using the raw splat value
// instead of using params["*"] later because it will be decoded then
if (paramName === "*") {
let splatValue = captureGroups[index] || "";
pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\/+$/, "$1");
}
const value = captureGroups[index];
if (isOptional && !value) {
memo[paramName] = undefined;
} else {
memo[paramName] = (value || "").replace(/%2F/g, "/");
}
return memo;
}, {});
return {
params,
pathname: matchedPathname,
pathnameBase,
pattern
};
}
function compilePath(path, caseSensitive, end) {
if (caseSensitive === void 0) {
caseSensitive = false;
}
if (end === void 0) {
end = true;
}
warning(path === "*" || !path.endsWith("*") || path.endsWith("/*"), "Route path \"" + path + "\" will be treated as if it were " + ("\"" + path.replace(/\*$/, "/*") + "\" because the `*` character must ") + "always follow a `/` in the pattern. To get rid of this warning, " + ("please change the route path to \"" + path.replace(/\*$/, "/*") + "\"."));
let params = [];
let regexpSource = "^" + path.replace(/\/*\*?$/, "") // Ignore trailing / and /*, we'll handle it below
.replace(/^\/*/, "/") // Make sure it has a leading /
.replace(/[\\.*+^${}|()[\]]/g, "\\$&") // Escape special regex chars
.replace(/\/:([\w-]+)(\?)?/g, (_, paramName, isOptional) => {
params.push({
paramName,
isOptional: isOptional != null
});
return isOptional ? "/?([^\\/]+)?" : "/([^\\/]+)";
});
if (path.endsWith("*")) {
params.push({
paramName: "*"
});
regexpSource += path === "*" || path === "/*" ? "(.*)$" // Already matched the initial /, just match the rest
: "(?:\\/(.+)|\\/*)$"; // Don't include the / in params["*"]
} else if (end) {
// When matching to the end, ignore trailing slashes
regexpSource += "\\/*$";
} else if (path !== "" && path !== "/") {
// If our path is non-empty and contains anything beyond an initial slash,
// then we have _some_ form of path in our regex, so we should expect to
// match only if we find the end of this path segment. Look for an optional
// non-captured trailing slash (to match a portion of the URL) or the end
// of the path (if we've matched to the end). We used to do this with a
// word boundary but that gives false positives on routes like
// /user-preferences since `-` counts as a word boundary.
regexpSource += "(?:(?=\\/|$))";
} else ;
let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i");
return [matcher, params];
}
function decodePath(value) {
try {
return value.split("/").map(v => decodeURIComponent(v).replace(/\//g, "%2F")).join("/");
} catch (error) {
warning(false, "The URL path \"" + value + "\" could not be decoded because it is is a " + "malformed URL segment. This is probably due to a bad percent " + ("encoding (" + error + ")."));
return value;
}
}
/**
* @private
*/
function stripBasename(pathname, basename) {
if (basename === "/") return pathname;
if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {
return null;
}
// We want to leave trailing slash behavior in the user's control, so if they
// specify a basename with a trailing slash, we should support it
let startIndex = basename.endsWith("/") ? basename.length - 1 : basename.length;
let nextChar = pathname.charAt(startIndex);
if (nextChar && nextChar !== "/") {
// pathname does not start with basename/
return null;
}
return pathname.slice(startIndex) || "/";
}
/**
* Returns a resolved path object relative to the given pathname.
*
* @see https://reactrouter.com/v6/utils/resolve-path
*/
function resolvePath(to, fromPathname) {
if (fromPathname === void 0) {
fromPathname = "/";
}
let {
pathname: toPathname,
search = "",
hash = ""
} = typeof to === "string" ? parsePath(to) : to;
let pathname = toPathname ? toPathname.startsWith("/") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;
return {
pathname,
search: normalizeSearch(search),
hash: normalizeHash(hash)
};
}
function resolvePathname(relativePath, fromPathname) {
let segments = fromPathname.replace(/\/+$/, "").split("/");
let relativeSegments = relativePath.split("/");
relativeSegments.forEach(segment => {
if (segment === "..") {
// Keep the root "" segment so the pathname starts at /
if (segments.length > 1) segments.pop();
} else if (segment !== ".") {
segments.push(segment);
}
});
return segments.length > 1 ? segments.join("/") : "/";
}
function getInvalidPathError(char, field, dest, path) {
return "Cannot include a '" + char + "' character in a manually specified " + ("`to." + field + "` field [" + JSON.stringify(path) + "]. Please separate it out to the ") + ("`to." + dest + "` field. Alternatively you may provide the full path as ") + "a string in <Link to=\"...\"> and the router will parse it for you.";
}
/**
* @private
*
* When processing relative navigation we want to ignore ancestor routes that
* do not contribute to the path, such that index/pathless layout routes don't
* interfere.
*
* For example, when moving a route element into an index route and/or a
* pathless layout route, relative link behavior contained within should stay
* the same. Both of the following examples should link back to the root:
*
* <Route path="/">
* <Route path="accounts" element={<Link to=".."}>
* </Route>
*
* <Route path="/">
* <Route path="accounts">
* <Route element={<AccountsLayout />}> // <-- Does not contribute
* <Route index element={<Link to=".."} /> // <-- Does not contribute
* </Route
* </Route>
* </Route>
*/
function getPathContributingMatches(matches) {
return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);
}
// Return the array of pathnames for the current route matches - used to
// generate the routePathnames input for resolveTo()
function getResolveToMatches(matches, v7_relativeSplatPath) {
let pathMatches = getPathContributingMatches(matches);
// When v7_relativeSplatPath is enabled, use the full pathname for the leaf
// match so we include splat values for "." links. See:
// https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329
if (v7_relativeSplatPath) {
return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);
}
return pathMatches.map(match => match.pathnameBase);
}
/**
* @private
*/
function resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {
if (isPathRelative === void 0) {
isPathRelative = false;
}
let to;
if (typeof toArg === "string") {
to = parsePath(toArg);
} else {
to = _extends({}, toArg);
invariant(!to.pathname || !to.pathname.includes("?"), getInvalidPathError("?", "pathname", "search", to));
invariant(!to.pathname || !to.pathname.includes("#"), getInvalidPathError("#", "pathname", "hash", to));
invariant(!to.search || !to.search.includes("#"), getInvalidPathError("#", "search", "hash", to));
}
let isEmptyPath = toArg === "" || to.pathname === "";
let toPathname = isEmptyPath ? "/" : to.pathname;
let from;
// Routing is relative to the current pathname if explicitly requested.
//
// If a pathname is explicitly provided in `to`, it should be relative to the
// route context. This is explained in `Note on `<Link to>` values` in our
// migration guide from v5 as a means of disambiguation between `to` values
// that begin with `/` and those that do not. However, this is problematic for
// `to` values that do not provide a pathname. `to` can simply be a search or
// hash string, in which case we should assume that the navigation is relative
// to the current location's pathname and *not* the route pathname.
if (toPathname == null) {
from = locationPathname;
} else {
let routePathnameIndex = routePathnames.length - 1;
// With relative="route" (the default), each leading .. segment means
// "go up one route" instead of "go up one URL segment". This is a key
// difference from how <a href> works and a major reason we call this a
// "to" value instead of a "href".
if (!isPathRelative && toPathname.startsWith("..")) {
let toSegments = toPathname.split("/");
while (toSegments[0] === "..") {
toSegments.shift();
routePathnameIndex -= 1;
}
to.pathname = toSegments.join("/");
}
from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : "/";
}
let path = resolvePath(to, from);
// Ensure the pathname has a trailing slash if the original "to" had one
let hasExplicitTrailingSlash = toPathname && toPathname !== "/" && toPathname.endsWith("/");
// Or if this was a link to the current path which has a trailing slash
let hasCurrentTrailingSlash = (isEmptyPath || toPathname === ".") && locationPathname.endsWith("/");
if (!path.pathname.endsWith("/") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {
path.pathname += "/";
}
return path;
}
/**
* @private
*/
function getToPathname(to) {
// Empty strings should be treated the same as / paths
return to === "" || to.pathname === "" ? "/" : typeof to === "string" ? parsePath(to).pathname : to.pathname;
}
/**
* @private
*/
const joinPaths = paths => paths.join("/").replace(/\/\/+/g, "/");
/**
* @private
*/
const normalizePathname = pathname => pathname.replace(/\/+$/, "").replace(/^\/*/, "/");
/**
* @private
*/
const normalizeSearch = search => !search || search === "?" ? "" : search.startsWith("?") ? search : "?" + search;
/**
* @private
*/
const normalizeHash = hash => !hash || hash === "#" ? "" : hash.startsWith("#") ? hash : "#" + hash;
/**
* This is a shortcut for creating `application/json` responses. Converts `data`
* to JSON and sets the `Content-Type` header.
*
* @deprecated The `json` method is deprecated in favor of returning raw objects.
* This method will be removed in v7.
*/
const json = function json(data, init) {
if (init === void 0) {
init = {};
}
let responseInit = typeof init === "number" ? {
status: init
} : init;
let headers = new Headers(responseInit.headers);
if (!headers.has("Content-Type")) {
headers.set("Content-Type", "application/json; charset=utf-8");
}
return new Response(JSON.stringify(data), _extends({}, responseInit, {
headers
}));
};
class DataWithResponseInit {
constructor(data, init) {
this.type = "DataWithResponseInit";
this.data = data;
this.init = init || null;
}
}
/**
* Create "responses" that contain `status`/`headers` without forcing
* serialization into an actual `Response` - used by Remix single fetch
*/
function data(data, init) {
return new DataWithResponseInit(data, typeof init === "number" ? {
status: init
} : init);
}
class AbortedDeferredError extends Error {}
class DeferredData {
constructor(data, responseInit) {
this.pendingKeysSet = new Set();
this.subscribers = new Set();
this.deferredKeys = [];
invariant(data && typeof data === "object" && !Array.isArray(data), "defer() only accepts plain objects");
// Set up an AbortController + Promise we can race against to exit early
// cancellation
let reject;
this.abortPromise = new Promise((_, r) => reject = r);
this.controller = new AbortController();
let onAbort = () => reject(new AbortedDeferredError("Deferred data aborted"));
this.unlistenAbortSignal = () => this.controller.signal.removeEventListener("abort", onAbort);
this.controller.signal.addEventListener("abort", onAbort);
this.data = Object.entries(data).reduce((acc, _ref2) => {
let [key, value] = _ref2;
return Object.assign(acc, {
[key]: this.trackPromise(key, value)
});
}, {});
if (this.done) {
// All incoming values were resolved
this.unlistenAbortSignal();
}
this.init = responseInit;
}
trackPromise(key, value) {
if (!(value instanceof Promise)) {
return value;
}
this.deferredKeys.push(key);
this.pendingKeysSet.add(key);
// We store a little wrapper promise that will be extended with
// _data/_error props upon resolve/reject
let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));
// Register rejection listeners to avoid uncaught promise rejections on
// errors or aborted deferred values
promise.catch(() => {});
Object.defineProperty(promise, "_tracked", {
get: () => true
});
return promise;
}
onSettle(promise, key, error, data) {
if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {
this.unlistenAbortSignal();
Object.defineProperty(promise, "_error", {
get: () => error
});
return Promise.reject(error);
}
this.pendingKeysSet.delete(key);
if (this.done) {
// Nothing left to abort!
this.unlistenAbortSignal();
}
// If the promise was resolved/rejected with undefined, we'll throw an error as you
// should always resolve with a value or null
if (error === undefined && data === undefined) {
let undefinedError = new Error("Deferred data for key \"" + key + "\" resolved/rejected with `undefined`, " + "you must resolve/reject with a value or `null`.");
Object.defineProperty(promise, "_error", {
get: () => undefinedError
});
this.emit(false, key);
return Promise.reject(undefinedError);
}
if (data === undefined) {
Object.defineProperty(promise, "_error", {
get: () => error
});
this.emit(false, key);
return Promise.reject(error);
}
Object.defineProperty(promise, "_data", {
get: () => data
});
this.emit(false, key);
return data;
}
emit(aborted, settledKey) {
this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));
}
subscribe(fn) {
this.subscribers.add(fn);
return () => this.subscribers.delete(fn);
}
cancel() {
this.controller.abort();
this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));
this.emit(true);
}
async resolveData(signal) {
let aborted = false;
if (!this.done) {
let onAbort = () => this.cancel();
signal.addEventListener("abort", onAbort);
aborted = await new Promise(resolve => {
this.subscribe(aborted => {
signal.removeEventListener("abort", onAbort);
if (aborted || this.done) {
resolve(aborted);
}
});
});
}
return aborted;
}
get done() {
return this.pendingKeysSet.size === 0;
}
get unwrappedData() {
invariant(this.data !== null && this.done, "Can only unwrap data on initialized and settled deferreds");
return Object.entries(this.data).reduce((acc, _ref3) => {
let [key, value] = _ref3;
return Object.assign(acc, {
[key]: unwrapTrackedPromise(value)
});
}, {});
}
get pendingKeys() {
return Array.from(this.pendingKeysSet);
}
}
function isTrackedPromise(value) {
return value instanceof Promise && value._tracked === true;
}
function unwrapTrackedPromise(value) {
if (!isTrackedPromise(value)) {
return value;
}
if (value._error) {
throw value._error;
}
return value._data;
}
/**
* @deprecated The `defer` method is deprecated in favor of returning raw
* objects. This method will be removed in v7.
*/
const defer = function defer(data, init) {
if (init === void 0) {
init = {};
}
let responseInit = typeof init === "number" ? {
status: init
} : init;
return new DeferredData(data, responseInit);
};
/**
* A redirect response. Sets the status code and the `Location` header.
* Defaults to "302 Found".
*/
const redirect = function redirect(url, init) {
if (init === void 0) {
init = 302;
}
let responseInit = init;
if (typeof responseInit === "number") {
responseInit = {
status: responseInit
};
} else if (typeof responseInit.status === "undefined") {
responseInit.status = 302;
}
let headers = new Headers(responseInit.headers);
headers.set("Location", url);
return new Response(null, _extends({}, responseInit, {
headers
}));
};
/**
* A redirect response that will force a document reload to the new location.
* Sets the status code and the `Location` header.
* Defaults to "302 Found".
*/
const redirectDocument = (url, init) => {
let response = redirect(url, init);
response.headers.set("X-Remix-Reload-Document", "true");
return response;
};
/**
* A redirect response that will perform a `history.replaceState` instead of a
* `history.pushState` for client-side navigation redirects.
* Sets the status code and the `Location` header.
* Defaults to "302 Found".
*/
const replace = (url, init) => {
let response = redirect(url, init);
response.headers.set("X-Remix-Replace", "true");
return response;
};
/**
* @private
* Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies
*
* We don't export the class for public use since it's an implementation
* detail, but we export the interface above so folks can build their own
* abstractions around instances via isRouteErrorResponse()
*/
class ErrorResponseImpl {
constructor(status, statusText, data, internal) {
if (internal === void 0) {
internal = false;
}
this.status = status;
this.statusText = statusText || "";
this.internal = internal;
if (data instanceof Error) {
this.data = data.toString();
this.error = data;
} else {
this.data = data;
}
}
}
/**
* Check if the given error is an ErrorResponse generated from a 4xx/5xx
* Response thrown from an action/loader
*/
function isRouteErrorResponse(error) {
return error != null && typeof error.status === "number" && typeof error.statusText === "string" && typeof error.internal === "boolean" && "data" in error;
}
const validMutationMethodsArr = ["post", "put", "patch", "delete"];
const validMutationMethods = new Set(validMutationMethodsArr);
const validRequestMethodsArr = ["get", ...validMutationMethodsArr];
const validRequestMethods = new Set(validRequestMethodsArr);
const redirectStatusCodes = new Set([301, 302, 303, 307, 308]);
const redirectPreserveMethodStatusCodes = new Set([307, 308]);
const IDLE_NAVIGATION = {
state: "idle",
location: undefined,
formMethod: undefined,
formAction: undefined,
formEncType: undefined,
formData: undefined,
json: undefined,
text: undefined
};
const IDLE_FETCHER = {
state: "idle",
data: undefined,
formMethod: undefined,
formAction: undefined,
formEncType: undefined,
formData: undefined,
json: undefined,
text: undefined
};
const IDLE_BLOCKER = {
state: "unblocked",
proceed: undefined,
reset: undefined,
location: undefined
};
const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
const defaultMapRouteProperties = route => ({
hasErrorBoundary: Boolean(route.hasErrorBoundary)
});
const TRANSITIONS_STORAGE_KEY = "remix-router-transitions";
//#endregion
////////////////////////////////////////////////////////////////////////////////
//#region createRouter
////////////////////////////////////////////////////////////////////////////////
/**
* Create a router and listen to history POP navigations
*/
function createRouter(init) {
const routerWindow = init.window ? init.window : typeof window !== "undefined" ? window : undefined;
const isBrowser = typeof routerWindow !== "undefined" && typeof routerWindow.document !== "undefined" && typeof routerWindow.document.createElement !== "undefined";
const isServer = !isBrowser;
invariant(init.routes.length > 0, "You must provide a non-empty routes array to createRouter");
let mapRouteProperties;
if (init.mapRouteProperties) {
mapRouteProperties = init.mapRouteProperties;
} else if (init.detectErrorBoundary) {
// If they are still using the deprecated version, wrap it with the new API
let detectErrorBoundary = init.detectErrorBoundary;
mapRouteProperties = route => ({
hasErrorBoundary: detectErrorBoundary(route)
});
} else {
mapRouteProperties = defaultMapRouteProperties;
}
// Routes keyed by ID
let manifest = {};
// Routes in tree format for matching
let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);
let inFlightDataRoutes;
let basename = init.basename || "/";
let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;
let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;
// Config driven behavior flags
let future = _extends({
v7_fetcherPersist: false,
v7_normalizeFormMethod: false,
v7_partialHydration: false,
v7_prependBasename: false,
v7_relativeSplatPath: false,
v7_skipActionErrorRevalidation: false
}, init.future);
// Cleanup function for history
let unlistenHistory = null;
// Externally-provided functions to call on all state changes
let subscribers = new Set();
// Externally-provided object to hold scroll restoration locations during routing
let savedScrollPositions = null;
// Externally-provided function to get scroll restoration keys
let getScrollRestorationKey = null;
// Externally-provided function to get current scroll position
let getScrollPosition = null;
// One-time flag to control the initial hydration scroll restoration. Because
// we don't get the saved positions from <ScrollRestoration /> until _after_
// the initial render, we need to manually trigger a separate updateState to
// send along the restoreScrollPosition
// Set to true if we have `hydrationData` since we assume we were SSR'd and that
// SSR did the initial scroll restoration.
let initialScrollRestored = init.hydrationData != null;
let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);
let initialErrors = null;
if (initialMatches == null && !patchRoutesOnNavigationImpl) {
// If we do not match a user-provided-route, fall back to the root
// to allow the error boundary to take over
let error = getInternalRouterError(404, {
pathname: init.history.location.pathname
});
let {
matches,
route
} = getShortCircuitMatches(dataRoutes);
initialMatches = matches;
initialErrors = {
[route.id]: error
};
}
// In SPA apps, if the user provided a patchRoutesOnNavigation implementation and
// our initial match is a splat route, clear them out so we run through lazy
// discovery on hydration in case there's a more accurate lazy route match.
// In SSR apps (with `hydrationData`), we expect that the server will send
// up the proper matched routes so we don't want to run lazy discovery on
// initial hydration and want to hydrate into the splat route.
if (initialMatches && !init.hydrationData) {
let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);
if (fogOfWar.active) {
initialMatches = null;
}
}
let initialized;
if (!initialMatches) {
initialized = false;
initialMatches = [];
// If partial hydration and fog of war is enabled, we will be running
// `patchRoutesOnNavigation` during hydration so include any partial matches as
// the initial matches so we can properly render `HydrateFallback`'s
if (future.v7_partialHydration) {
let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);
if (fogOfWar.active && fogOfWar.matches) {
initialMatches = fogOfWar.matches;
}
}
} else if (initialMatches.some(m => m.route.lazy)) {
// All initialMatches need to be loaded before we're ready. If we have lazy
// functions around still then we'll need to run them in initialize()
initialized = false;
} else if (!initialMatches.some(m => m.route.loader)) {
// If we've got no loaders to run, then we're good to go
initialized = true;
} else if (future.v7_partialHydration) {
// If partial hydration is enabled, we're initialized so long as we were
// provided with hydrationData for every route with a loader, and no loaders
// were marked for explicit hydration
let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;
let errors = init.hydrationData ? init.hydrationData.errors : null;
// If errors exist, don't consider routes below the boundary
if (errors) {
let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);
initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));
} else {
initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));
}
} else {
// Without partial hydration - we're initialized if we were provided any
// hydrationData - which is expected to be complete
initialized = init.hydrationData != null;
}
let router;
let state = {
historyAction: init.history.action,
location: init.history.location,
matches: initialMatches,
initialized,
navigation: IDLE_NAVIGATION,
// Don't restore on initial updateState() if we were SSR'd
restoreScrollPosition: init.hydrationData != null ? false : null,
preventScrollReset: false,
revalidation: "idle",
loaderData: init.hydrationData && init.hydrationData.loaderData || {},
actionData: init.hydrationData && init.hydrationData.actionData || null,
errors: init.hydrationData && init.hydrationData.errors || initialErrors,
fetchers: new Map(),
blockers: new Map()
};
// -- Stateful internal variables to manage navigations --
// Current navigation in progress (to be committed in completeNavigation)
let pendingAction = Action.Pop;
// Should the current navigation prevent the scroll reset if scroll cannot
// be restored?
let pendingPreventScrollReset = false;
// AbortController for the active navigation
let pendingNavigationController;
// Should the current navigation enable document.startViewTransition?
let pendingViewTransitionEnabled = false;
// Store applied view transitions so we can apply them on POP
let appliedViewTransitions = new Map();
// Cleanup function for persisting applied transitions to sessionStorage
let removePageHideEventListener = null;
// We use this to avoid touching history in completeNavigation if a
// revalidation is entirely uninterrupted
let isUninterruptedRevalidation = false;
// Use this internal flag to force revalidation of all loaders:
// - submissions (completed or interrupted)
// - useRevalidator()
// - X-Remix-Revalidate (from redirect)
let isRevalidationRequired = false;
// Use this internal array to capture routes that require revalidation due
// to a cancelled deferred on action submission
let cancelledDeferredRoutes = [];
// Use this internal array to capture fetcher loads that were cancelled by an
// action navigation and require revalidation
let cancelledFetcherLoads = new Set();
// AbortControllers for any in-flight fetchers
let fetchControllers = new Map();
// Track loads based on the order in which they started
let incrementingLoadId = 0;
// Track the outstanding pending navigation data load to be compared against
// the globally incrementing load when a fetcher load lands after a completed
// navigation
let pendingNavigationLoadId = -1;
// Fetchers that triggered data reloads as a result of their actions
let fetchReloadIds = new Map();
// Fetchers that triggered redirect navigations
let fetchRedirectIds = new Set();
// Most recent href/match for fetcher.load calls for fetchers
let fetchLoadMatches = new Map();
// Ref-count mounted fetchers so we know when it's ok to clean them up
let activeFetchers = new Map();
// Fetchers that have requested a delete when using v7_fetcherPersist,
// they'll be officially removed after they return to idle
let deletedFetchers = new Set();
// Store DeferredData instances for active route matches. When a
// route loader returns defer() we stick one in here. Then, when a nested
// promise resolves we update loaderData. If a new navigation starts we
// cancel active deferreds for eliminated routes.
let activeDeferreds = new Map();
// Store blocker functions in a separate Map outside of router state since
// we don't need to update UI state if they change
let blockerFunctions = new Map();
// Flag to ignore the next history update, so we can revert the URL change on
// a POP navigation that was blocked by the user without touching router state
let unblockBlockerHistoryUpdate = undefined;
// Initialize the router, all side effects should be kicked off from here.
// Implemented as a Fluent API for ease of:
// let router = createRouter(init).initialize();
function initialize() {
// If history informs us of a POP navigation, start the navigation but do not update
// state. We'll update our own state once the navigation completes
unlistenHistory = init.history.listen(_ref => {
let {
action: historyAction,
location,
delta
} = _ref;
// Ignore this event if it was just us resetting the URL from a
// blocked POP navigation
if (unblockBlockerHistoryUpdate) {
unblockBlockerHistoryUpdate();
unblockBlockerHistoryUpdate = undefined;
return;
}
warning(blockerFunctions.size === 0 || delta != null, "You are trying to use a blocker on a POP navigation to a location " + "that was not created by @remix-run/router. This will fail silently in " + "production. This can happen if you are navigating outside the router " + "via `window.history.pushState`/`window.location.hash` instead of using " + "router navigation APIs. This can also happen if you are using " + "createHashRouter and the user manually changes the URL.");
let blockerKey = shouldBlockNavigation({
currentLocation: state.location,
nextLocation: location,
historyAction
});
if (blockerKey && delta != null) {
// Restore the URL to match the current UI, but don't update router state
let nextHistoryUpdatePromise = new Promise(resolve => {
unblockBlockerHistoryUpdate = resolve;
});
init.history.go(delta * -1);
// Put the blocker into a blocked state
updateBlocker(blockerKey, {
state: "blocked",
location,
proceed() {
updateBlocker(blockerKey, {
state: "proceeding",
proceed: undefined,
reset: undefined,
location
});
// Re-do the same POP navigation we just blocked, after the url
// restoration is also complete. See:
// https://github.com/remix-run/react-router/issues/11613
nextHistoryUpdatePromise.then(() => init.history.go(delta));
},
reset() {
let blockers = new Map(state.blockers);
blockers.set(blockerKey, IDLE_BLOCKER);
updateState({
blockers
});
}
});
return;
}
return startNavigation(historyAction, location);
});
if (isBrowser) {
// FIXME: This feels gross. How can we cleanup the lines between
// scrollRestoration/appliedTransitions persistance?
restoreAppliedTransitions(routerWindow, appliedViewTransitions);
let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);
routerWindow.addEventListener("pagehide", _saveAppliedTransitions);
removePageHideEventListener = () => routerWindow.removeEventListener("pagehide", _saveAppliedTransitions);
}
// Kick off initial data load if needed. Use Pop to avoid modifying history
// Note we don't do any handling of lazy here. For SPA's it'll get handled
// in the normal navigation flow. For SSR it's expected that lazy modules are
// resolved prior to router creation since we can't go into a fallbackElement
// UI for SSR'd apps
if (!state.initialized) {
startNavigation(Action.Pop, state.location, {
initialHydration: true
});
}
return router;
}
// Clean up a router and it's side effects
function dispose() {
if (unlistenHistory) {
unlistenHistory();
}
if (removePageHideEventListener) {
removePageHideEventListener();
}
subscribers.clear();
pendingNavigationController && pendingNavigationController.abort();
state.fetchers.forEach((_, key) => deleteFetcher(key));
state.blockers.forEach((_, key) => deleteBlocker(key));
}
// Subscribe to state updates for the router
function subscribe(fn) {
subscribers.add(fn);
return () => subscribers.delete(fn);
}
// Update our state and notify the calling context of the change
function updateState(newState, opts) {
if (opts === void 0) {
opts = {};
}
state = _extends({}, state, newState);
// Prep fetcher cleanup so we can tell the UI which fetcher data entries
// can be removed
let completedFetchers = [];
let deletedFetchersKeys = [];
if (future.v7_fetcherPersist) {
state.fetchers.forEach((fetcher, key) => {
if (fetcher.state === "idle") {
if (deletedFetchers.has(key)) {
// Unmounted from the UI and can be totally removed
deletedFetchersKeys.push(key);
} else {
// Returned to idle but still mounted in the UI, so semi-remains for
// revalidations and such
completedFetchers.push(key);
}
}
});
}
// Iterate over a local copy so that if flushSync is used and we end up
// removing and adding a new subscriber due to the useCallback dependencies,
// we don't get ourselves into a loop calling the new subscriber immediately
[...subscribers].forEach(subscriber => subscriber(state, {
deletedFetchers: deletedFetchersKeys,
viewTransitionOpts: opts.viewTransitionOpts,
flushSync: opts.flushSync === true
}));
// Remove idle fetchers from state since we only care about in-flight fetchers.
if (future.v7_fetcherPersist) {
completedFetchers.forEach(key => state.fetchers.delete(key));
deletedFetchersKeys.forEach(key => deleteFetcher(key));
}
}
// Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION
// and setting state.[historyAction/location/matches] to the new route.
// - Location is a required param
// - Navigation will always be set to IDLE_NAVIGATION
// - Can pass any other state in newState
function completeNavigation(location, newState, _temp) {
var _location$state, _location$state2;
let {
flushSync
} = _temp === void 0 ? {} : _temp;
// Deduce if we're in a loading/actionReload state:
// - We have committed actionData in the store
// - The current navigation was a mutation submission
// - We're past the submitting state and into the loading state
// - The location being loaded is not the result of a redirect
let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === "loading" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;
let actionData;
if (newState.actionData) {
if (Object.keys(newState.actionData).length > 0) {
actionData = newState.actionData;
} else {
// Empty actionData -> clear prior actionData due to an action error
actionData = null;
}
} else if (isActionReload) {
// Keep the current data if we're wrapping up the action reload
actionData = state.actionData;
} else {
// Clear actionData on any other completed navigations
actionData = null;
}
// Always preserve any existing loaderData from re-used routes
let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;
// On a successful navigation we can assume we got through all blockers
// so we can start fresh
let blockers = state.blockers;
if (blockers.size > 0) {
blockers = new Map(blockers);
blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));
}
// Always respect the user flag. Otherwise don't reset on mutation
// submission navigations unless they redirect
let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;
// Commit any in-flight routes at the end of the HMR revalidation "navigation"
if (inFlightDataRoutes) {
dataRoutes = inFlightDataRoutes;
inFlightDataRoutes = undefined;
}
if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {
init.history.push(location, location.state);
} else if (pendingAction === Action.Replace) {
init.history.replace(location, location.state);
}
let viewTransitionOpts;
// On POP, enable transitions if they were enabled on the original navigation
if (pendingAction === Action.Pop) {
// Forward takes precedence so they behave like the original navigation
let priorPaths = appliedViewTransitions.get(state.location.pathname);
if (priorPaths && priorPaths.has(location.pathname)) {
viewTransitionOpts = {
currentLocation: state.location,
nextLocation: location
};
} else if (appliedViewTransitions.has(location.pathname)) {
// If we don't have a previous forward nav, assume we're popping back to
// the new location and enable if that location previously enabled
viewTransitionOpts = {
currentLocation: location,
nextLocation: state.location
};
}
} else if (pendingViewTransitionEnabled) {
// Store the applied transition on PUSH/REPLACE
let toPaths = appliedViewTransitions.get(state.location.pathname);
if (toPaths) {
toPaths.add(location.pathname);
} else {
toPaths = new Set([location.pathname]);
appliedViewTransitions.set(state.location.pathname, toPaths);
}
viewTransitionOpts = {
currentLocation: state.location,
nextLocation: location
};
}
updateState(_extends({}, newState, {
actionData,
loaderData,
historyAction: pendingAction,
location,
initialized: true,
navigation: IDLE_NAVIGATION,
revalidation: "idle",
restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),
preventScrollReset,
blockers
}), {
viewTransitionOpts,
flushSync: flushSync === true
});
// Reset stateful navigation vars
pendingAction = Action.Pop;
pendingPreventScrollReset = false;
pendingViewTransitionEnabled = false;
isUninterruptedRevalidation = false;
isRevalidationRequired = false;
cancelledDeferredRoutes = [];
}
// Trigger a navigation event, which can either be a numerical POP or a PUSH
// replace with an optional submission
async function navigate(to, opts) {
if (typeof to === "number") {
init.history.go(to);
return;
}
let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);
let {
path,
submission,
error
} = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);
let currentLocation = state.location;
let nextLocation = createLocation(state.location, path, opts && opts.state);
// When using navigate as a PUSH/REPLACE we aren't reading an already-encoded
// URL from window.location, so we need to encode it here so the behavior
// remains the same as POP and non-data-router usages. new URL() does all
// the same encoding we'd get from a history.pushState/window.location read
// without having to touch history
nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));
let userReplace = opts && opts.replace != null ? opts.replace : undefined;
let historyAction = Action.Push;
if (userReplace === true) {
historyAction = Action.Replace;
} else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {
// By default on submissions to the current location we REPLACE so that
// users don't have to double-click the back button to get to the prior
// location. If the user redirects to a different location from the
// action/loader this will be ignored and the redirect will be a PUSH
historyAction = Action.Replace;
}
let preventScrollReset = opts && "preventScrollReset" in opts ? opts.preventScrollReset === true : undefined;
let flushSync = (opts && opts.flushSync) === true;
let blockerKey = shouldBlockNavigation({
currentLocation,
nextLocation,
historyAction
});
if (blockerKey) {
// Put the blocker into a blocked state
updateBlocker(blockerKey, {
state: "blocked",
location: nextLocation,
proceed() {
updateBlocker(blockerKey, {
state: "proceeding",
proceed: undefined,
reset: undefined,
location: nextLocation
});
// Send the same navigation through
navigate(to, opts);
},
reset() {
let blockers = new Map(state.blockers);
blockers.set(blockerKey, IDLE_BLOCKER);
updateState({
blockers
});
}
});
return;
}
return await startNavigation(historyAction, nextLocation, {
submission,
// Send through the formData serialization error if we have one so we can
// render at the right error boundary after we match routes
pendingError: error,
preventScrollReset,
replace: opts && opts.replace,
enableViewTransition: opts && opts.viewTransition,
flushSync
});
}
// Revalidate all current loaders. If a navigation is in progress or if this
// is interrupted by a navigation, allow this to "succeed" by calling all
// loaders during the next loader round
function revalidate() {
interruptActiveLoads();
updateState({
revalidation: "loading"
});
// If we're currently submitting an action, we don't need to start a new
// navigation, we'll just let the follow up loader execution call all loaders
if (state.navigation.state === "submitting") {
return;
}
// If we're currently in an idle state, start a new navigation for the current
// action/location and mark it as uninterrupted, which will skip the history
// update in completeNavigation
if (state.navigation.state === "idle") {
startNavigation(state.historyAction, state.location, {
startUninterruptedRevalidation: true
});
return;
}
// Otherwise, if we're currently in a loading state, just start a new
// navigation to the navigation.location but do not trigger an uninterrupted
// revalidation so that history correctly updates once the navigation completes
startNavigation(pendingAction || state.historyAction, state.navigation.location, {
overrideNavigation: state.navigation,
// Proxy through any rending view transition
enableViewTransition: pendingViewTransitionEnabled === true
});
}
// Start a navigation to the given action/location. Can optionally provide a
// overrideNavigation which will override the normalLoad in the case of a redirect
// navigation
async function startNavigation(historyAction, location, opts) {
// Abort any in-progress navigations and start a new one. Unset any ongoing
// uninterrupted revalidations unless told otherwise, since we want this
// new navigation to update history normally
pendingNavigationController && pendingNavigationController.abort();
pendingNavigationController = null;
pendingAction = historyAction;
isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;
// Save the current scroll position every time we start a new navigation,
// and track whether we should reset scroll on completion
saveScrollPosition(state.location, state.matches);
pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;
pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;
let routesToUse = inFlightDataRoutes || dataRoutes;
let loadingNavigation = opts && opts.overrideNavigation;
let matches = matchRoutes(routesToUse, location, basename);
let flushSync = (opts && opts.flushSync) === true;
let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);
if (fogOfWar.active && fogOfWar.matches) {
matches = fogOfWar.matches;
}
// Short circuit with a 404 on the root error boundary if we match nothing
if (!matches) {
let {
error,
notFoundMatches,
route
} = handleNavigational404(location.pathname);
completeNavigation(location, {
matches: notFoundMatches,
loaderData: {},
errors: {
[route.id]: error
}
}, {
flushSync
});
return;
}
// Short circuit if it's only a hash change and not a revalidation or
// mutation submission.
//
// Ignore on initial page loads because since the initial hydration will always
// be "same hash". For example, on /page#hash and submit a <Form method="post">
// which will default to a navigation to /page
if (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {
completeNavigation(location, {
matches
}, {
flushSync
});
return;
}
// Create a controller/Request for this navigation
pendingNavigationController = new AbortController();
let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);
let pendingActionResult;
if (opts && opts.pendingError) {
// If we have a pendingError, it means the user attempted a GET submission
// with binary FormData so assign here and skip to handleLoaders. That
// way we handle calling loaders above the boundary etc. It's not really
// different from an actionError in that sense.
pendingActionResult = [findNearestBoundary(matches).route.id, {
type: ResultType.error,
error: opts.pendingError
}];
} else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {
// Call action if we received an action submission
let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {
replace: opts.replace,
flushSync
});
if (actionResult.shortCircuited) {
return;
}
// If we received a 404 from handleAction, it's because we couldn't lazily
// discover the destination route so we don't want to call loaders
if (actionResult.pendingActionResult) {
let [routeId, result] = actionResult.pendingActionResult;
if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {
pendingNavigationController = null;
completeNavigation(location, {
matches: actionResult.matches,
loaderData: {},
errors: {
[routeId]: result.error
}
});
return;
}
}
matches = actionResult.matches || matches;
pendingActionResult = actionResult.pendingActionResult;
loadingNavigation = getLoadingNavigation(location, opts.submission);
flushSync = false;
// No need to do fog of war matching again on loader execution
fogOfWar.active = false;
// Create a GET request for the loaders
request = createClientSideRequest(init.history, request.url, request.signal);
}
// Call loaders
let {
shortCircuited,
matches: updatedMatches,
loaderData,
errors
} = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);
if (shortCircuited) {
return;
}
// Clean up now that the action/loaders have completed. Don't clean up if
// we short circuited because pendingNavigationController will have already
// been assigned to a new controller for the next navigation
pendingNavigationController = null;
completeNavigation(location, _extends({
matches: updatedMatches || matches
}, getActionDataForCommit(pendingActionResult), {
loaderData,
errors
}));
}
// Call the action matched by the leaf route for this navigation and handle
// redirects/errors
async function handleAction(request, location, submission, matches, isFogOfWar, opts) {
if (opts === void 0) {
opts = {};
}
interruptActiveLoads();
// Put us in a submitting state
let navigation = getSubmittingNavigation(location, submission);
updateState({
navigation
}, {
flushSync: opts.flushSync === true
});
if (isFogOfWar) {
let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);
if (discoverResult.type === "aborted") {
return {
shortCircuited: true
};
} else if (discoverResult.type === "error") {
let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;
return {
matches: discoverResult.partialMatches,
pendingActionResult: [boundaryId, {
type: ResultType.error,
error: discoverResult.error
}]
};
} else if (!discoverResult.matches) {
let {
notFoundMatches,
error,
route
} = handleNavigational404(location.pathname);
return {
matches: notFoundMatches,
pendingActionResult: [route.id, {
type: ResultType.error,
error
}]
};
} else {
matches = discoverResult.matches;
}
}
// Call our action and get the result
let result;
let actionMatch = getTargetMatch(matches, location);
if (!actionMatch.route.action && !actionMatch.route.lazy) {
result = {
type: ResultType.error,
error: getInternalRouterError(405, {
method: request.method,
pathname: location.pathname,
routeId: actionMatch.route.id
})
};
} else {
let results = await callDataStrategy("action", state, request, [actionMatch], matches, null);
result = results[actionMatch.route.id];
if (request.signal.aborted) {
return {
shortCircuited: true
};
}
}
if (isRedirectResult(result)) {
let replace;
if (opts && opts.replace != null) {
replace = opts.replace;
} else {
// If the user didn't explicity indicate replace behavior, replace if
// we redirected to the exact same location we're currently at to avoid
// double back-buttons
let location = normalizeRedirectLocation(result.response.headers.get("Location"), new URL(request.url), basename);
replace = location === state.location.pathname + state.location.search;
}
await startRedirectNavigation(request, result, true, {
submission,
replace
});
return {
shortCircuited: true
};
}
if (isDeferredResult(result)) {
throw getInternalRouterError(400, {
type: "defer-action"
});
}
if (isErrorResult(result)) {
// Store off the pending error - we use it to determine which loaders
// to call and will commit it when we complete the navigation
let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);
// By default, all submissions to the current location are REPLACE
// navigations, but if the action threw an error that'll be rendered in
// an errorElement, we fall back to PUSH so that the user can use the
// back button to get back to the pre-submission form location to try
// again
if ((opts && opts.replace) !== true) {
pendingAction = Action.Push;
}
return {
matches,
pendingActionResult: [boundaryMatch.route.id, result]
};
}
return {
matches,
pendingActionResult: [actionMatch.route.id, result]
};
}
// Call all applicable loaders for the given matches, handling redirects,
// errors, etc.
async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {
// Figure out the right navigation we want to use for data loading
let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);
// If this was a redirect from an action we don't have a "submission" but
// we have it on the loading navigation so use that if available
let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);
// If this is an uninterrupted revalidation, we remain in our current idle
// state. If not, we need to switch to our loading state and load data,
// preserving any new action data or existing action data (in the case of
// a revalidation interrupting an actionReload)
// If we have partialHydration enabled, then don't update the state for the
// initial data load since it's not a "navigation"
let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);
// When fog of war is enabled, we enter our `loading` state earlier so we
// can discover new routes during the `loading` state. We skip this if
// we've already run actions since we would have done our matching already.
// If the children() function threw then, we want to proceed with the
// partial matches it discovered.
if (isFogOfWar) {
if (shouldUpdateNavigationState) {
let actionData = getUpdatedActionData(pendingActionResult);
updateState(_extends({
navigation: loadingNavigation
}, actionData !== undefined ? {
actionData
} : {}), {
flushSync
});
}
let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);
if (discoverResult.type === "aborted") {
return {
shortCircuited: true
};
} else if (discoverResult.type === "error") {
let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;
return {
matches: discoverResult.partialMatches,
loaderData: {},
errors: {
[boundaryId]: discoverResult.error
}
};
} else if (!discoverResult.matches) {
let {
error,
notFoundMatches,
route
} = handleNavigational404(location.pathname);
return {
matches: notFoundMatches,
loaderData: {},
errors: {
[route.id]: error
}
};
} else {
matches = discoverResult.matches;
}
}
let routesToUse = inFlightDataRoutes || dataRoutes;
let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);
// Cancel pending deferreds for no-longer-matched routes or routes we're
// about to reload. Note that if this is an action reload we would have
// already cancelled all pending deferreds so this would be a no-op
cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));
pendingNavigationLoadId = ++incrementingLoadId;
// Short circuit if we have no loaders to run
if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {
let updatedFetchers = markFetchRedirectsDone();
completeNavigation(location, _extends({
matches,
loaderData: {},
// Commit pending error if we're short circuiting
errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {
[pendingActionResult[0]]: pendingActionResult[1].error
} : null
}, getActionDataForCommit(pendingActionResult), updatedFetchers ? {
fetchers: new Map(state.fetchers)
} : {}), {
flushSync
});
return {
shortCircuited: true
};
}
if (shouldUpdateNavigationState) {
let updates = {};
if (!isFogOfWar) {
// Only update navigation/actionNData if we didn't already do it above
updates.navigation = loadingNavigation;
let actionData = getUpdatedActionData(pendingActionResult);
if (actionData !== undefined) {
updates.actionData = actionData;
}
}
if (revalidatingFetchers.length > 0) {
updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);
}
updateState(updates, {
flushSync
});
}
revalidatingFetchers.forEach(rf => {
abortFetcher(rf.key);
if (rf.controller) {
// Fetchers use an independent AbortController so that aborting a fetcher
// (via deleteFetcher) does not abort the triggering navigation that
// triggered the revalidation
fetchControllers.set(rf.key, rf.controller);
}
});
// Proxy navigation abort through to revalidation fetchers
let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));
if (pendingNavigationController) {
pendingNavigationController.signal.addEventListener("abort", abortPendingFetchRevalidations);
}
let {
loaderResults,
fetcherResults
} = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);
if (request.signal.aborted) {
return {
shortCircuited: true
};
}
// Clean up _after_ loaders have completed. Don't clean up if we short
// circuited because fetchControllers would have been aborted and
// reassigned to new controllers for the next navigation
if (pendingNavigationController) {
pendingNavigationController.signal.removeEventListener("abort", abortPendingFetchRevalidations);
}
revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));
// If any loaders returned a redirect Response, start a new REPLACE navigation
let redirect = findRedirect(loaderResults);
if (redirect) {
await startRedirectNavigation(request, redirect.result, true, {
replace
});
return {
shortCircuited: true
};
}
redirect = findRedirect(fetcherResults);
if (redirect) {
// If this redirect came from a fetcher make sure we mark it in
// fetchRedirectIds so it doesn't get revalidated on the next set of
// loader executions
fetchRedirectIds.add(redirect.key);
await startRedirectNavigation(request, redirect.result, true, {
replace
});
return {
shortCircuited: true
};
}
// Process and commit output from loaders
let {
loaderData,
errors
} = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);
// Wire up subscribers to update loaderData as promises settle
activeDeferreds.forEach((deferredData, routeId) => {
deferredData.subscribe(aborted => {
// Note: No need to updateState here since the TrackedPromise on
// loaderData is stable across resolve/reject
// Remove this instance if we were aborted or if promises have settled
if (aborted || deferredData.done) {
activeDeferreds.delete(routeId);
}
});
});
// Preserve SSR errors during partial hydration
if (future.v7_partialHydration && initialHydration && state.errors) {
errors = _extends({}, state.errors, errors);
}
let updatedFetchers = markFetchRedirectsDone();
let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);
let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;
return _extends({
matches,
loaderData,
errors
}, shouldUpdateFetchers ? {
fetchers: new Map(state.fetchers)
} : {});
}
function getUpdatedActionData(pendingActionResult) {
if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {
// This is cast to `any` currently because `RouteData`uses any and it
// would be a breaking change to use any.
// TODO: v7 - change `RouteData` to use `unknown` instead of `any`
return {
[pendingActionResult[0]]: pendingActionResult[1].data
};
} else if (state.actionData) {
if (Object.keys(state.actionData).length === 0) {
return null;
} else {
return state.actionData;
}
}
}
function getUpdatedRevalidatingFetchers(revalidatingFetchers) {
revalidatingFetchers.forEach(rf => {
let fetcher = state.fetchers.get(rf.key);
let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);
state.fetchers.set(rf.key, revalidatingFetcher);
});
return new Map(state.fetchers);
}
// Trigger a fetcher load/submit for the given fetcher key
function fetch(key, routeId, href, opts) {
if (isServer) {
throw new Error("router.fetch() was called during the server render, but it shouldn't be. " + "You are likely calling a useFetcher() method in the body of your component. " + "Try moving it to a useEffect or a callback.");
}
abortFetcher(key);
let flushSync = (opts && opts.flushSync) === true;
let routesToUse = inFlightDataRoutes || dataRoutes;
let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);
let matches = matchRoutes(routesToUse, normalizedPath, basename);
let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);
if (fogOfWar.active && fogOfWar.matches) {
matches = fogOfWar.matches;
}
if (!matches) {
setFetcherError(key, routeId, getInternalRouterError(404, {
pathname: normalizedPath
}), {
flushSync
});
return;
}
let {
path,
submission,
error
} = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);
if (error) {
setFetcherError(key, routeId, error, {
flushSync
});
return;
}
let match = getTargetMatch(matches, path);
let preventScrollReset = (opts && opts.preventScrollReset) === true;
if (submission && isMutationMethod(submission.formMethod)) {
handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);
return;
}
// Store off the match so we can call it's shouldRevalidate on subsequent
// revalidations
fetchLoadMatches.set(key, {
routeId,
path
});
handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);
}
// Call the action for the matched fetcher.submit(), and then handle redirects,
// errors, and revalidation
async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) {
interruptActiveLoads();
fetchLoadMatches.delete(key);
function detectAndHandle405Error(m) {
if (!m.route.action && !m.route.lazy) {
let error = getInternalRouterError(405, {
method: submission.formMethod,
pathname: path,
routeId: routeId
});
setFetcherError(key, routeId, error, {
flushSync
});
return true;
}
return false;
}
if (!isFogOfWar && detectAndHandle405Error(match)) {
return;
}
// Put this fetcher into it's submitting state
let existingFetcher = state.fetchers.get(key);
updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {
flushSync
});
let abortController = new AbortController();
let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);
if (isFogOfWar) {
let discoverResult = await discoverRoutes(requestMatches, path, fetchRequest.signal);
if (discoverResult.type === "aborted") {
return;
} else if (discoverResult.type === "error") {
setFetcherError(key, routeId, discoverResult.error, {
flushSync
});
return;
} else if (!discoverResult.matches) {
setFetcherError(key, routeId, getInternalRouterError(404, {
pathname: path
}), {
flushSync
});
return;
} else {
requestMatches = discoverResult.matches;
match = getTargetMatch(requestMatches, path);
if (detectAndHandle405Error(match)) {
return;
}
}
}
// Call the action for the fetcher
fetchControllers.set(key, abortController);
let originatingLoadId = incrementingLoadId;
let actionResults = await callDataStrategy("action", state, fetchRequest, [match], requestMatches, key);
let actionResult = actionResults[match.route.id];
if (fetchRequest.signal.aborted) {
// We can delete this so long as we weren't aborted by our own fetcher
// re-submit which would have put _new_ controller is in fetchControllers
if (fetchControllers.get(key) === abortController) {
fetchControllers.delete(key);
}
return;
}
// When using v7_fetcherPersist, we don't want errors bubbling up to the UI
// or redirects processed for unmounted fetchers so we just revert them to
// idle
if (future.v7_fetcherPersist && deletedFetchers.has(key)) {
if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {
updateFetcherState(key, getDoneFetcher(undefined));
return;
}
// Let SuccessResult's fall through for revalidation
} else {
if (isRedirectResult(actionResult)) {
fetchControllers.delete(key);
if (pendingNavigationLoadId > originatingLoadId) {
// A new navigation was kicked off after our action started, so that
// should take precedence over this redirect navigation. We already
// set isRevalidationRequired so all loaders for the new route should
// fire unless opted out via shouldRevalidate
updateFetcherState(key, getDoneFetcher(undefined));
return;
} else {
fetchRedirectIds.add(key);
updateFetcherState(key, getLoadingFetcher(submission));
return startRedirectNavigation(fetchRequest, actionResult, false, {
fetcherSubmission: submission,
preventScrollReset
});
}
}
// Process any non-redirect errors thrown
if (isErrorResult(actionResult)) {
setFetcherError(key, routeId, actionResult.error);
return;
}
}
if (isDeferredResult(actionResult)) {
throw getInternalRouterError(400, {
type: "defer-action"
});
}
// Start the data load for current matches, or the next location if we're
// in the middle of a navigation
let nextLocation = state.navigation.location || state.location;
let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);
let routesToUse = inFlightDataRoutes || dataRoutes;
let matches = state.navigation.state !== "idle" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;
invariant(matches, "Didn't find any matches after fetcher action");
let loadId = ++incrementingLoadId;
fetchReloadIds.set(key, loadId);
let loadFetcher = getLoadingFetcher(submission, actionResult.data);
state.fetchers.set(key, loadFetcher);
let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);
// Put all revalidating fetchers into the loading state, except for the
// current fetcher which we want to keep in it's current loading state which
// contains it's action submission info + action data
revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {
let staleKey = rf.key;
let existingFetcher = state.fetchers.get(staleKey);
let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);
state.fetchers.set(staleKey, revalidatingFetcher);
abortFetcher(staleKey);
if (rf.controller) {
fetchControllers.set(staleKey, rf.controller);
}
});
updateState({
fetchers: new Map(state.fetchers)
});
let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));
abortController.signal.addEventListener("abort", abortPendingFetchRevalidations);
let {
loaderResults,
fetcherResults
} = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);
if (abortController.signal.aborted) {
return;
}
abortController.signal.removeEventListener("abort", abortPendingFetchRevalidations);
fetchReloadIds.delete(key);
fetchControllers.delete(key);
revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));
let redirect = findRedirect(loaderResults);
if (redirect) {
return startRedirectNavigation(revalidationRequest, redirect.result, false, {
preventScrollReset
});
}
redirect = findRedirect(fetcherResults);
if (redirect) {
// If this redirect came from a fetcher make sure we mark it in
// fetchRedirectIds so it doesn't get revalidated on the next set of
// loader executions
fetchRedirectIds.add(redirect.key);
return startRedirectNavigation(revalidationRequest, redirect.result, false, {
preventScrollReset
});
}
// Process and commit output from loaders
let {
loaderData,
errors
} = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);
// Since we let revalidations complete even if the submitting fetcher was
// deleted, only put it back to idle if it hasn't been deleted
if (state.fetchers.has(key)) {
let doneFetcher = getDoneFetcher(actionResult.data);
state.fetchers.set(key, doneFetcher);
}
abortStaleFetchLoads(loadId);
// If we are currently in a navigation loading state and this fetcher is
// more recent than the navigation, we want the newer data so abort the
// navigation and complete it with the fetcher data
if (state.navigation.state === "loading" && loadId > pendingNavigationLoadId) {
invariant(pendingAction, "Expected pending action");
pendingNavigationController && pendingNavigationController.abort();
completeNavigation(state.navigation.location, {
matches,
loaderData,
errors,
fetchers: new Map(state.fetchers)
});
} else {
// otherwise just update with the fetcher data, preserving any existing
// loaderData for loaders that did not need to reload. We have to
// manually merge here since we aren't going through completeNavigation
updateState({
errors,
loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),
fetchers: new Map(state.fetchers)
});
isRevalidationRequired = false;
}
}
// Call the matched loader for fetcher.load(), handling redirects, errors, etc.
async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) {
let existingFetcher = state.fetchers.get(key);
updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {
flushSync
});
let abortController = new AbortController();
let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);
if (isFogOfWar) {
let discoverResult = await discoverRoutes(matches, path, fetchRequest.signal);
if (discoverResult.type === "aborted") {
return;
} else if (discoverResult.type === "error") {
setFetcherError(key, routeId, discoverResult.error, {
flushSync
});
return;
} else if (!discoverResult.matches) {
setFetcherError(key, routeId, getInternalRouterError(404, {
pathname: path
}), {
flushSync
});
return;
} else {
matches = discoverResult.matches;
match = getTargetMatch(matches, path);
}
}
// Call the loader for this fetcher route match
fetchControllers.set(key, abortController);
let originatingLoadId = incrementingLoadId;
let results = await callDataStrategy("loader", state, fetchRequest, [match], matches, key);
let result = results[match.route.id];
// Deferred isn't supported for fetcher loads, await everything and treat it
// as a normal load. resolveDeferredData will return undefined if this
// fetcher gets aborted, so we just leave result untouched and short circuit
// below if that happens
if (isDeferredResult(result)) {
result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;
}
// We can delete this so long as we weren't aborted by our our own fetcher
// re-load which would have put _new_ controller is in fetchControllers
if (fetchControllers.get(key) === abortController) {
fetchControllers.delete(key);
}
if (fetchRequest.signal.aborted) {
return;
}
// We don't want errors bubbling up or redirects followed for unmounted
// fetchers, so short circuit here if it was removed from the UI
if (deletedFetchers.has(key)) {
updateFetcherState(key, getDoneFetcher(undefined));
return;
}
// If the loader threw a redirect Response, start a new REPLACE navigation
if (isRedirectResult(result)) {
if (pendingNavigationLoadId > originatingLoadId) {
// A new navigation was kicked off after our loader started, so that
// should take precedence over this redirect navigation
updateFetcherState(key, getDoneFetcher(undefined));
return;
} else {
fetchRedirectIds.add(key);
await startRedirectNavigation(fetchRequest, result, false, {
preventScrollReset
});
return;
}
}
// Process any non-redirect errors thrown
if (isErrorResult(result)) {
setFetcherError(key, routeId, result.error);
return;
}
invariant(!isDeferredResult(result), "Unhandled fetcher deferred data");
// Put the fetcher back into an idle state
updateFetcherState(key, getDoneFetcher(result.data));
}
/**
* Utility function to handle redirects returned from an action or loader.
* Normally, a redirect "replaces" the navigation that triggered it. So, for
* example:
*
* - user is on /a
* - user clicks a link to /b
* - loader for /b redirects to /c
*
* In a non-JS app the browser would track the in-flight navigation to /b and
* then replace it with /c when it encountered the redirect response. In
* the end it would only ever update the URL bar with /c.
*
* In client-side routing using pushState/replaceState, we aim to emulate
* this behavior and we also do not update history until the end of the
* navigation (including processed redirects). This means that we never
* actually touch history until we've processed redirects, so we just use
* the history action from the original navigation (PUSH or REPLACE).
*/
async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {
let {
submission,
fetcherSubmission,
preventScrollReset,
replace
} = _temp2 === void 0 ? {} : _temp2;
if (redirect.response.headers.has("X-Remix-Revalidate")) {
isRevalidationRequired = true;
}
let location = redirect.response.headers.get("Location");
invariant(location, "Expected a Location header on the redirect Response");
location = normalizeRedirectLocation(location, new URL(request.url), basename);
let redirectLocation = createLocation(state.location, location, {
_isRedirect: true
});
if (isBrowser) {
let isDocumentReload = false;
if (redirect.response.headers.has("X-Remix-Reload-Document")) {
// Hard reload if the response contained X-Remix-Reload-Document
isDocumentReload = true;
} else if (ABSOLUTE_URL_REGEX.test(location)) {
const url = init.history.createURL(location);
isDocumentReload =
// Hard reload if it's an absolute URL to a new origin
url.origin !== routerWindow.location.origin ||
// Hard reload if it's an absolute URL that does not match our basename
stripBasename(url.pathname, basename) == null;
}
if (isDocumentReload) {
if (replace) {
routerWindow.location.replace(location);
} else {
routerWindow.location.assign(location);
}
return;
}
}
// There's no need to abort on redirects, since we don't detect the
// redirect until the action/loaders have settled
pendingNavigationController = null;
let redirectHistoryAction = replace === true || redirect.response.headers.has("X-Remix-Replace") ? Action.Replace : Action.Push;
// Use the incoming submission if provided, fallback on the active one in
// state.navigation
let {
formMethod,
formAction,
formEncType
} = state.navigation;
if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {
submission = getSubmissionFromNavigation(state.navigation);
}
// If this was a 307/308 submission we want to preserve the HTTP method and
// re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the
// redirected location
let activeSubmission = submission || fetcherSubmission;
if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {
await startNavigation(redirectHistoryAction, redirectLocation, {
submission: _extends({}, activeSubmission, {
formAction: location
}),
// Preserve these flags across redirects
preventScrollReset: preventScrollReset || pendingPreventScrollReset,
enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined
});
} else {
// If we have a navigation submission, we will preserve it through the
// redirect navigation
let overrideNavigation = getLoadingNavigation(redirectLocation, submission);
await startNavigation(redirectHistoryAction, redirectLocation, {
overrideNavigation,
// Send fetcher submissions through for shouldRevalidate
fetcherSubmission,
// Preserve these flags across redirects
preventScrollReset: preventScrollReset || pendingPreventScrollReset,
enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined
});
}
}
// Utility wrapper for calling dataStrategy client-side without having to
// pass around the manifest, mapRouteProperties, etc.
async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {
let results;
let dataResults = {};
try {
results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);
} catch (e) {
// If the outer dataStrategy method throws, just return the error for all
// matches - and it'll naturally bubble to the root
matchesToLoad.forEach(m => {
dataResults[m.route.id] = {
type: ResultType.error,
error: e
};
});
return dataResults;
}
for (let [routeId, result] of Object.entries(results)) {
if (isRedirectDataStrategyResultResult(result)) {
let response = result.result;
dataResults[routeId] = {
type: ResultType.redirect,
response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)
};
} else {
dataResults[routeId] = await convertDataStrategyResultToDataResult(result);
}
}
return dataResults;
}
async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {
let currentMatches = state.matches;
// Kick off loaders and fetchers in parallel
let loaderResultsPromise = callDataStrategy("loader", state, request, matchesToLoad, matches, null);
let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {
if (f.matches && f.match && f.controller) {
let results = await callDataStrategy("loader", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);
let result = results[f.match.route.id];
// Fetcher results are keyed by fetcher key from here on out, not routeId
return {
[f.key]: result
};
} else {
return Promise.resolve({
[f.key]: {
type: ResultType.error,
error: getInternalRouterError(404, {
pathname: f.path
})
}
});
}
}));
let loaderResults = await loaderResultsPromise;
let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});
await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);
return {
loaderResults,
fetcherResults
};
}
function interruptActiveLoads() {
// Every interruption triggers a revalidation
isRevalidationRequired = true;
// Cancel pending route-level deferreds and mark cancelled routes for
// revalidation
cancelledDeferredRoutes.push(...cancelActiveDeferreds());
// Abort in-flight fetcher loads
fetchLoadMatches.forEach((_, key) => {
if (fetchControllers.has(key)) {
cancelledFetcherLoads.add(key);
}
abortFetcher(key);
});
}
function updateFetcherState(key, fetcher, opts) {
if (opts === void 0) {
opts = {};
}
state.fetchers.set(key, fetcher);
updateState({
fetchers: new Map(state.fetchers)
}, {
flushSync: (opts && opts.flushSync) === true
});
}
function setFetcherError(key, routeId, error, opts) {
if (opts === void 0) {
opts = {};
}
let boundaryMatch = findNearestBoundary(state.matches, routeId);
deleteFetcher(key);
updateState({
errors: {
[boundaryMatch.route.id]: error
},
fetchers: new Map(state.fetchers)
}, {
flushSync: (opts && opts.flushSync) === true
});
}
function getFetcher(key) {
if (future.v7_fetcherPersist) {
activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);
// If this fetcher was previously marked for deletion, unmark it since we
// have a new instance
if (deletedFetchers.has(key)) {
deletedFetchers.delete(key);
}
}
return state.fetchers.get(key) || IDLE_FETCHER;
}
function deleteFetcher(key) {
let fetcher = state.fetchers.get(key);
// Don't abort the controller if this is a deletion of a fetcher.submit()
// in it's loading phase since - we don't want to abort the corresponding
// revalidation and want them to complete and land
if (fetchControllers.has(key) && !(fetcher && fetcher.state === "loading" && fetchReloadIds.has(key))) {
abortFetcher(key);
}
fetchLoadMatches.delete(key);
fetchReloadIds.delete(key);
fetchRedirectIds.delete(key);
deletedFetchers.delete(key);
cancelledFetcherLoads.delete(key);
state.fetchers.delete(key);
}
function deleteFetcherAndUpdateState(key) {
if (future.v7_fetcherPersist) {
let count = (activeFetchers.get(key) || 0) - 1;
if (count <= 0) {
activeFetchers.delete(key);
deletedFetchers.add(key);
} else {
activeFetchers.set(key, count);
}
} else {
deleteFetcher(key);
}
updateState({
fetchers: new Map(state.fetchers)
});
}
function abortFetcher(key) {
let controller = fetchControllers.get(key);
if (controller) {
controller.abort();
fetchControllers.delete(key);
}
}
function markFetchersDone(keys) {
for (let key of keys) {
let fetcher = getFetcher(key);
let doneFetcher = getDoneFetcher(fetcher.data);
state.fetchers.set(key, doneFetcher);
}
}
function markFetchRedirectsDone() {
let doneKeys = [];
let updatedFetchers = false;
for (let key of fetchRedirectIds) {
let fetcher = state.fetchers.get(key);
invariant(fetcher, "Expected fetcher: " + key);
if (fetcher.state === "loading") {
fetchRedirectIds.delete(key);
doneKeys.push(key);
updatedFetchers = true;
}
}
markFetchersDone(doneKeys);
return updatedFetchers;
}
function abortStaleFetchLoads(landedId) {
let yeetedKeys = [];
for (let [key, id] of fetchReloadIds) {
if (id < landedId) {
let fetcher = state.fetchers.get(key);
invariant(fetcher, "Expected fetcher: " + key);
if (fetcher.state === "loading") {
abortFetcher(key);
fetchReloadIds.delete(key);
yeetedKeys.push(key);
}
}
}
markFetchersDone(yeetedKeys);
return yeetedKeys.length > 0;
}
function getBlocker(key, fn) {
let blocker = state.blockers.get(key) || IDLE_BLOCKER;
if (blockerFunctions.get(key) !== fn) {
blockerFunctions.set(key, fn);
}
return blocker;
}
function deleteBlocker(key) {
state.blockers.delete(key);
blockerFunctions.delete(key);
}
// Utility function to update blockers, ensuring valid state transitions
function updateBlocker(key, newBlocker) {
let blocker = state.blockers.get(key) || IDLE_BLOCKER;
// Poor mans state machine :)
// https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM
invariant(blocker.state === "unblocked" && newBlocker.state === "blocked" || blocker.state === "blocked" && newBlocker.state === "blocked" || blocker.state === "blocked" && newBlocker.state === "proceeding" || blocker.state === "blocked" && newBlocker.state === "unblocked" || blocker.state === "proceeding" && newBlocker.state === "unblocked", "Invalid blocker state transition: " + blocker.state + " -> " + newBlocker.state);
let blockers = new Map(state.blockers);
blockers.set(key, newBlocker);
updateState({
blockers
});
}
function shouldBlockNavigation(_ref2) {
let {
currentLocation,
nextLocation,
historyAction
} = _ref2;
if (blockerFunctions.size === 0) {
return;
}
// We ony support a single active blocker at the moment since we don't have
// any compelling use cases for multi-blocker yet
if (blockerFunctions.size > 1) {
warning(false, "A router only supports one blocker at a time");
}
let entries = Array.from(blockerFunctions.entries());
let [blockerKey, blockerFunction] = entries[entries.length - 1];
let blocker = state.blockers.get(blockerKey);
if (blocker && blocker.state === "proceeding") {
// If the blocker is currently proceeding, we don't need to re-check
// it and can let this navigation continue
return;
}
// At this point, we know we're unblocked/blocked so we need to check the
// user-provided blocker function
if (blockerFunction({
currentLocation,
nextLocation,
historyAction
})) {
return blockerKey;
}
}
function handleNavigational404(pathname) {
let error = getInternalRouterError(404, {
pathname
});
let routesToUse = inFlightDataRoutes || dataRoutes;
let {
matches,
route
} = getShortCircuitMatches(routesToUse);
// Cancel all pending deferred on 404s since we don't keep any routes
cancelActiveDeferreds();
return {
notFoundMatches: matches,
route,
error
};
}
function cancelActiveDeferreds(predicate) {
let cancelledRouteIds = [];
activeDeferreds.forEach((dfd, routeId) => {
if (!predicate || predicate(routeId)) {
// Cancel the deferred - but do not remove from activeDeferreds here -
// we rely on the subscribers to do that so our tests can assert proper
// cleanup via _internalActiveDeferreds
dfd.cancel();
cancelledRouteIds.push(routeId);
activeDeferreds.delete(routeId);
}
});
return cancelledRouteIds;
}
// Opt in to capturing and reporting scroll positions during navigations,
// used by the <ScrollRestoration> component
function enableScrollRestoration(positions, getPosition, getKey) {
savedScrollPositions = positions;
getScrollPosition = getPosition;
getScrollRestorationKey = getKey || null;
// Perform initial hydration scroll restoration, since we miss the boat on
// the initial updateState() because we've not yet rendered <ScrollRestoration/>
// and therefore have no savedScrollPositions available
if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {
initialScrollRestored = true;
let y = getSavedScrollPosition(state.location, state.matches);
if (y != null) {
updateState({
restoreScrollPosition: y
});
}
}
return () => {
savedScrollPositions = null;
getScrollPosition = null;
getScrollRestorationKey = null;
};
}
function getScrollKey(location, matches) {
if (getScrollRestorationKey) {
let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));
return key || location.key;
}
return location.key;
}
function saveScrollPosition(location, matches) {
if (savedScrollPositions && getScrollPosition) {
let key = getScrollKey(location, matches);
savedScrollPositions[key] = getScrollPosition();
}
}
function getSavedScrollPosition(location, matches) {
if (savedScrollPositions) {
let key = getScrollKey(location, matches);
let y = savedScrollPositions[key];
if (typeof y === "number") {
return y;
}
}
return null;
}
function checkFogOfWar(matches, routesToUse, pathname) {
if (patchRoutesOnNavigationImpl) {
if (!matches) {
let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);
return {
active: true,
matches: fogMatches || []
};
} else {
if (Object.keys(matches[0].params).length > 0) {
// If we matched a dynamic param or a splat, it might only be because
// we haven't yet discovered other routes that would match with a
// higher score. Call patchRoutesOnNavigation just to be sure
let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);
return {
active: true,
matches: partialMatches
};
}
}
}
return {
active: false,
matches: null
};
}
async function discoverRoutes(matches, pathname, signal) {
if (!patchRoutesOnNavigationImpl) {
return {
type: "success",
matches
};
}
let partialMatches = matches;
while (true) {
let isNonHMR = inFlightDataRoutes == null;
let routesToUse = inFlightDataRoutes || dataRoutes;
let localManifest = manifest;
try {
await patchRoutesOnNavigationImpl({
path: pathname,
matches: partialMatches,
patch: (routeId, children) => {
if (signal.aborted) return;
patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties);
}
});
} catch (e) {
return {
type: "error",
error: e,
partialMatches
};
} finally {
// If we are not in the middle of an HMR revalidation and we changed the
// routes, provide a new identity so when we `updateState` at the end of
// this navigation/fetch `router.routes` will be a new identity and
// trigger a re-run of memoized `router.routes` dependencies.
// HMR will already update the identity and reflow when it lands
// `inFlightDataRoutes` in `completeNavigation`
if (isNonHMR && !signal.aborted) {
dataRoutes = [...dataRoutes];
}
}
if (signal.aborted) {
return {
type: "aborted"
};
}
let newMatches = matchRoutes(routesToUse, pathname, basename);
if (newMatches) {
return {
type: "success",
matches: newMatches
};
}
let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);
// Avoid loops if the second pass results in the same partial matches
if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {
return {
type: "success",
matches: null
};
}
partialMatches = newPartialMatches;
}
}
function _internalSetRoutes(newRoutes) {
manifest = {};
inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);
}
function patchRoutes(routeId, children) {
let isNonHMR = inFlightDataRoutes == null;
let routesToUse = inFlightDataRoutes || dataRoutes;
patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);
// If we are not in the middle of an HMR revalidation and we changed the
// routes, provide a new identity and trigger a reflow via `updateState`
// to re-run memoized `router.routes` dependencies.
// HMR will already update the identity and reflow when it lands
// `inFlightDataRoutes` in `completeNavigation`
if (isNonHMR) {
dataRoutes = [...dataRoutes];
updateState({});
}
}
router = {
get basename() {
return basename;
},
get future() {
return future;
},
get state() {
return state;
},
get routes() {
return dataRoutes;
},
get window() {
return routerWindow;
},
initialize,
subscribe,
enableScrollRestoration,
navigate,
fetch,
revalidate,
// Passthrough to history-aware createHref used by useHref so we get proper
// hash-aware URLs in DOM paths
createHref: to => init.history.createHref(to),
encodeLocation: to => init.history.encodeLocation(to),
getFetcher,
deleteFetcher: deleteFetcherAndUpdateState,
dispose,
getBlocker,
deleteBlocker,
patchRoutes,
_internalFetchControllers: fetchControllers,
_internalActiveDeferreds: activeDeferreds,
// TODO: Remove setRoutes, it's temporary to avoid dealing with
// updating the tree while validating the update algorithm.
_internalSetRoutes
};
return router;
}
//#endregion
////////////////////////////////////////////////////////////////////////////////
//#region createStaticHandler
////////////////////////////////////////////////////////////////////////////////
const UNSAFE_DEFERRED_SYMBOL = Symbol("deferred");
function createStaticHandler(routes, opts) {
invariant(routes.length > 0, "You must provide a non-empty routes array to createStaticHandler");
let manifest = {};
let basename = (opts ? opts.basename : null) || "/";
let mapRouteProperties;
if (opts != null && opts.mapRouteProperties) {
mapRouteProperties = opts.mapRouteProperties;
} else if (opts != null && opts.detectErrorBoundary) {
// If they are still using the deprecated version, wrap it with the new API
let detectErrorBoundary = opts.detectErrorBoundary;
mapRouteProperties = route => ({
hasErrorBoundary: detectErrorBoundary(route)
});
} else {
mapRouteProperties = defaultMapRouteProperties;
}
// Config driven behavior flags
let future = _extends({
v7_relativeSplatPath: false,
v7_throwAbortReason: false
}, opts ? opts.future : null);
let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);
/**
* The query() method is intended for document requests, in which we want to
* call an optional action and potentially multiple loaders for all nested
* routes. It returns a StaticHandlerContext object, which is very similar
* to the router state (location, loaderData, actionData, errors, etc.) and
* also adds SSR-specific information such as the statusCode and headers
* from action/loaders Responses.
*
* It _should_ never throw and should report all errors through the
* returned context.errors object, properly associating errors to their error
* boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be
* used to emulate React error boundaries during SSr by performing a second
* pass only down to the boundaryId.
*
* The one exception where we do not return a StaticHandlerContext is when a
* redirect response is returned or thrown from any action/loader. We
* propagate that out and return the raw Response so the HTTP server can
* return it directly.
*
* - `opts.requestContext` is an optional server context that will be passed
* to actions/loaders in the `context` parameter
* - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent
* the bubbling of errors which allows single-fetch-type implementations
* where the client will handle the bubbling and we may need to return data
* for the handling route
*/
async function query(request, _temp3) {
let {
requestContext,
skipLoaderErrorBubbling,
dataStrategy
} = _temp3 === void 0 ? {} : _temp3;
let url = new URL(request.url);
let method = request.method;
let location = createLocation("", createPath(url), null, "default");
let matches = matchRoutes(dataRoutes, location, basename);
// SSR supports HEAD requests while SPA doesn't
if (!isValidMethod(method) && method !== "HEAD") {
let error = getInternalRouterError(405, {
method
});
let {
matches: methodNotAllowedMatches,
route
} = getShortCircuitMatches(dataRoutes);
return {
basename,
location,
matches: methodNotAllowedMatches,
loaderData: {},
actionData: null,
errors: {
[route.id]: error
},
statusCode: error.status,
loaderHeaders: {},
actionHeaders: {},
activeDeferreds: null
};
} else if (!matches) {
let error = getInternalRouterError(404, {
pathname: location.pathname
});
let {
matches: notFoundMatches,
route
} = getShortCircuitMatches(dataRoutes);
return {
basename,
location,
matches: notFoundMatches,
loaderData: {},
actionData: null,
errors: {
[route.id]: error
},
statusCode: error.status,
loaderHeaders: {},
actionHeaders: {},
activeDeferreds: null
};
}
let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null);
if (isResponse(result)) {
return result;
}
// When returning StaticHandlerContext, we patch back in the location here
// since we need it for React Context. But this helps keep our submit and
// loadRouteData operating on a Request instead of a Location
return _extends({
location,
basename
}, result);
}
/**
* The queryRoute() method is intended for targeted route requests, either
* for fetch ?_data requests or resource route requests. In this case, we
* are only ever calling a single action or loader, and we are returning the
* returned value directly. In most cases, this will be a Response returned
* from the action/loader, but it may be a primitive or other value as well -
* and in such cases the calling context should handle that accordingly.
*
* We do respect the throw/return differentiation, so if an action/loader
* throws, then this method will throw the value. This is important so we
* can do proper boundary identification in Remix where a thrown Response
* must go to the Catch Boundary but a returned Response is happy-path.
*
* One thing to note is that any Router-initiated Errors that make sense
* to associate with a status code will be thrown as an ErrorResponse
* instance which include the raw Error, such that the calling context can
* serialize the error as they see fit while including the proper response
* code. Examples here are 404 and 405 errors that occur prior to reaching
* any user-defined loaders.
*
* - `opts.routeId` allows you to specify the specific route handler to call.
* If not provided the handler will determine the proper route by matching
* against `request.url`
* - `opts.requestContext` is an optional server context that will be passed
* to actions/loaders in the `context` parameter
*/
async function queryRoute(request, _temp4) {
let {
routeId,
requestContext,
dataStrategy
} = _temp4 === void 0 ? {} : _temp4;
let url = new URL(request.url);
let method = request.method;
let location = createLocation("", createPath(url), null, "default");
let matches = matchRoutes(dataRoutes, location, basename);
// SSR supports HEAD requests while SPA doesn't
if (!isValidMethod(method) && method !== "HEAD" && method !== "OPTIONS") {
throw getInternalRouterError(405, {
method
});
} else if (!matches) {
throw getInternalRouterError(404, {
pathname: location.pathname
});
}
let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);
if (routeId && !match) {
throw getInternalRouterError(403, {
pathname: location.pathname,
routeId
});
} else if (!match) {
// This should never hit I don't think?
throw getInternalRouterError(404, {
pathname: location.pathname
});
}
let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match);
if (isResponse(result)) {
return result;
}
let error = result.errors ? Object.values(result.errors)[0] : undefined;
if (error !== undefined) {
// If we got back result.errors, that means the loader/action threw
// _something_ that wasn't a Response, but it's not guaranteed/required
// to be an `instanceof Error` either, so we have to use throw here to
// preserve the "error" state outside of queryImpl.
throw error;
}
// Pick off the right state value to return
if (result.actionData) {
return Object.values(result.actionData)[0];
}
if (result.loaderData) {
var _result$activeDeferre;
let data = Object.values(result.loaderData)[0];
if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {
data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];
}
return data;
}
return undefined;
}
async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {
invariant(request.signal, "query()/queryRoute() requests must contain an AbortController signal");
try {
if (isMutationMethod(request.method.toLowerCase())) {
let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null);
return result;
}
let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch);
return isResponse(result) ? result : _extends({}, result, {
actionData: null,
actionHeaders: {}
});
} catch (e) {
// If the user threw/returned a Response in callLoaderOrAction for a
// `queryRoute` call, we throw the `DataStrategyResult` to bail out early
// and then return or throw the raw Response here accordingly
if (isDataStrategyResult(e) && isResponse(e.result)) {
if (e.type === ResultType.error) {
throw e.result;
}
return e.result;
}
// Redirects are always returned since they don't propagate to catch
// boundaries
if (isRedirectResponse(e)) {
return e;
}
throw e;
}
}
async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {
let result;
if (!actionMatch.route.action && !actionMatch.route.lazy) {
let error = getInternalRouterError(405, {
method: request.method,
pathname: new URL(request.url).pathname,
routeId: actionMatch.route.id
});
if (isRouteRequest) {
throw error;
}
result = {
type: ResultType.error,
error
};
} else {
let results = await callDataStrategy("action", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy);
result = results[actionMatch.route.id];
if (request.signal.aborted) {
throwStaticHandlerAbortedError(request, isRouteRequest, future);
}
}
if (isRedirectResult(result)) {
// Uhhhh - this should never happen, we should always throw these from
// callLoaderOrAction, but the type narrowing here keeps TS happy and we
// can get back on the "throw all redirect responses" train here should
// this ever happen :/
throw new Response(null, {
status: result.response.status,
headers: {
Location: result.response.headers.get("Location")
}
});
}
if (isDeferredResult(result)) {
let error = getInternalRouterError(400, {
type: "defer-action"
});
if (isRouteRequest) {
throw error;
}
result = {
type: ResultType.error,
error
};
}
if (isRouteRequest) {
// Note: This should only be non-Response values if we get here, since
// isRouteRequest should throw any Response received in callLoaderOrAction
if (isErrorResult(result)) {
throw result.error;
}
return {
matches: [actionMatch],
loaderData: {},
actionData: {
[actionMatch.route.id]: result.data
},
errors: null,
// Note: statusCode + headers are unused here since queryRoute will
// return the raw Response or value
statusCode: 200,
loaderHeaders: {},
actionHeaders: {},
activeDeferreds: null
};
}
// Create a GET request for the loaders
let loaderRequest = new Request(request.url, {
headers: request.headers,
redirect: request.redirect,
signal: request.signal
});
if (isErrorResult(result)) {
// Store off the pending error - we use it to determine which loaders
// to call and will commit it when we complete the navigation
let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);
let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);
// action status codes take precedence over loader status codes
return _extends({}, context, {
statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,
actionData: null,
actionHeaders: _extends({}, result.headers ? {
[actionMatch.route.id]: result.headers
} : {})
});
}
let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null);
return _extends({}, context, {
actionData: {
[actionMatch.route.id]: result.data
}
}, result.statusCode ? {
statusCode: result.statusCode
} : {}, {
actionHeaders: result.headers ? {
[actionMatch.route.id]: result.headers
} : {}
});
}
async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {
let isRouteRequest = routeMatch != null;
// Short circuit if we have no loaders to run (queryRoute())
if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {
throw getInternalRouterError(400, {
method: request.method,
pathname: new URL(request.url).pathname,
routeId: routeMatch == null ? void 0 : routeMatch.route.id
});
}
let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;
let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);
// Short circuit if we have no loaders to run (query())
if (matchesToLoad.length === 0) {
return {
matches,
// Add a null for all matched routes for proper revalidation on the client
loaderData: matches.reduce((acc, m) => Object.assign(acc, {
[m.route.id]: null
}), {}),
errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {
[pendingActionResult[0]]: pendingActionResult[1].error
} : null,
statusCode: 200,
loaderHeaders: {},
activeDeferreds: null
};
}
let results = await callDataStrategy("loader", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy);
if (request.signal.aborted) {
throwStaticHandlerAbortedError(request, isRouteRequest, future);
}
// Process and commit output from loaders
let activeDeferreds = new Map();
let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);
// Add a null for any non-loader matches for proper revalidation on the client
let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));
matches.forEach(match => {
if (!executedLoaders.has(match.route.id)) {
context.loaderData[match.route.id] = null;
}
});
return _extends({}, context, {
matches,
activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null
});
}
// Utility wrapper for calling dataStrategy server-side without having to
// pass around the manifest, mapRouteProperties, etc.
async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {
let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);
let dataResults = {};
await Promise.all(matches.map(async match => {
if (!(match.route.id in results)) {
return;
}
let result = results[match.route.id];
if (isRedirectDataStrategyResultResult(result)) {
let response = result.result;
// Throw redirects and let the server handle them with an HTTP redirect
throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);
}
if (isResponse(result.result) && isRouteRequest) {
// For SSR single-route requests, we want to hand Responses back
// directly without unwrapping
throw result;
}
dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);
}));
return dataResults;
}
return {
dataRoutes,
query,
queryRoute
};
}
//#endregion
////////////////////////////////////////////////////////////////////////////////
//#region Helpers
////////////////////////////////////////////////////////////////////////////////
/**
* Given an existing StaticHandlerContext and an error thrown at render time,
* provide an updated StaticHandlerContext suitable for a second SSR render
*/
function getStaticContextFromError(routes, context, error) {
let newContext = _extends({}, context, {
statusCode: isRouteErrorResponse(error) ? error.status : 500,
errors: {
[context._deepestRenderedBoundaryId || routes[0].id]: error
}
});
return newContext;
}
function throwStaticHandlerAbortedError(request, isRouteRequest, future) {
if (future.v7_throwAbortReason && request.signal.reason !== undefined) {
throw request.signal.reason;
}
let method = isRouteRequest ? "queryRoute" : "query";
throw new Error(method + "() call aborted: " + request.method + " " + request.url);
}
function isSubmissionNavigation(opts) {
return opts != null && ("formData" in opts && opts.formData != null || "body" in opts && opts.body !== undefined);
}
function normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {
let contextualMatches;
let activeRouteMatch;
if (fromRouteId) {
// Grab matches up to the calling route so our route-relative logic is
// relative to the correct source route
contextualMatches = [];
for (let match of matches) {
contextualMatches.push(match);
if (match.route.id === fromRouteId) {
activeRouteMatch = match;
break;
}
}
} else {
contextualMatches = matches;
activeRouteMatch = matches[matches.length - 1];
}
// Resolve the relative path
let path = resolveTo(to ? to : ".", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === "path");
// When `to` is not specified we inherit search/hash from the current
// location, unlike when to="." and we just inherit the path.
// See https://github.com/remix-run/remix/issues/927
if (to == null) {
path.search = location.search;
path.hash = location.hash;
}
// Account for `?index` params when routing to the current location
if ((to == null || to === "" || to === ".") && activeRouteMatch) {
let nakedIndex = hasNakedIndexQuery(path.search);
if (activeRouteMatch.route.index && !nakedIndex) {
// Add one when we're targeting an index route
path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index";
} else if (!activeRouteMatch.route.index && nakedIndex) {
// Remove existing ones when we're not
let params = new URLSearchParams(path.search);
let indexValues = params.getAll("index");
params.delete("index");
indexValues.filter(v => v).forEach(v => params.append("index", v));
let qs = params.toString();
path.search = qs ? "?" + qs : "";
}
}
// If we're operating within a basename, prepend it to the pathname. If
// this is a root navigation, then just use the raw basename which allows
// the basename to have full control over the presence of a trailing slash
// on root actions
if (prependBasename && basename !== "/") {
path.pathname = path.pathname === "/" ? basename : joinPaths([basename, path.pathname]);
}
return createPath(path);
}
// Normalize navigation options by converting formMethod=GET formData objects to
// URLSearchParams so they behave identically to links with query params
function normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {
// Return location verbatim on non-submission navigations
if (!opts || !isSubmissionNavigation(opts)) {
return {
path
};
}
if (opts.formMethod && !isValidMethod(opts.formMethod)) {
return {
path,
error: getInternalRouterError(405, {
method: opts.formMethod
})
};
}
let getInvalidBodyError = () => ({
path,
error: getInternalRouterError(400, {
type: "invalid-body"
})
});
// Create a Submission on non-GET navigations
let rawFormMethod = opts.formMethod || "get";
let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();
let formAction = stripHashFromPath(path);
if (opts.body !== undefined) {
if (opts.formEncType === "text/plain") {
// text only support POST/PUT/PATCH/DELETE submissions
if (!isMutationMethod(formMethod)) {
return getInvalidBodyError();
}
let text = typeof opts.body === "string" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data
Array.from(opts.body.entries()).reduce((acc, _ref3) => {
let [name, value] = _ref3;
return "" + acc + name + "=" + value + "\n";
}, "") : String(opts.body);
return {
path,
submission: {
formMethod,
formAction,
formEncType: opts.formEncType,
formData: undefined,
json: undefined,
text
}
};
} else if (opts.formEncType === "application/json") {
// json only supports POST/PUT/PATCH/DELETE submissions
if (!isMutationMethod(formMethod)) {
return getInvalidBodyError();
}
try {
let json = typeof opts.body === "string" ? JSON.parse(opts.body) : opts.body;
return {
path,
submission: {
formMethod,
formAction,
formEncType: opts.formEncType,
formData: undefined,
json,
text: undefined
}
};
} catch (e) {
return getInvalidBodyError();
}
}
}
invariant(typeof FormData === "function", "FormData is not available in this environment");
let searchParams;
let formData;
if (opts.formData) {
searchParams = convertFormDataToSearchParams(opts.formData);
formData = opts.formData;
} else if (opts.body instanceof FormData) {
searchParams = convertFormDataToSearchParams(opts.body);
formData = opts.body;
} else if (opts.body instanceof URLSearchParams) {
searchParams = opts.body;
formData = convertSearchParamsToFormData(searchParams);
} else if (opts.body == null) {
searchParams = new URLSearchParams();
formData = new FormData();
} else {
try {
searchParams = new URLSearchParams(opts.body);
formData = convertSearchParamsToFormData(searchParams);
} catch (e) {
return getInvalidBodyError();
}
}
let submission = {
formMethod,
formAction,
formEncType: opts && opts.formEncType || "application/x-www-form-urlencoded",
formData,
json: undefined,
text: undefined
};
if (isMutationMethod(submission.formMethod)) {
return {
path,
submission
};
}
// Flatten submission onto URLSearchParams for GET submissions
let parsedPath = parsePath(path);
// On GET navigation submissions we can drop the ?index param from the
// resulting location since all loaders will run. But fetcher GET submissions
// only run a single loader so we need to preserve any incoming ?index params
if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {
searchParams.append("index", "");
}
parsedPath.search = "?" + searchParams;
return {
path: createPath(parsedPath),
submission
};
}
// Filter out all routes at/below any caught error as they aren't going to
// render so we don't need to load them
function getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) {
if (includeBoundary === void 0) {
includeBoundary = false;
}
let index = matches.findIndex(m => m.route.id === boundaryId);
if (index >= 0) {
return matches.slice(0, includeBoundary ? index + 1 : index);
}
return matches;
}
function getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {
let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;
let currentUrl = history.createURL(state.location);
let nextUrl = history.createURL(location);
// Pick navigation matches that are net-new or qualify for revalidation
let boundaryMatches = matches;
if (initialHydration && state.errors) {
// On initial hydration, only consider matches up to _and including_ the boundary.
// This is inclusive to handle cases where a server loader ran successfully,
// a child server loader bubbled up to this route, but this route has
// `clientLoader.hydrate` so we want to still run the `clientLoader` so that
// we have a complete version of `loaderData`
boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true);
} else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {
// If an action threw an error, we call loaders up to, but not including the
// boundary
boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]);
}
// Don't revalidate loaders by default after action 4xx/5xx responses
// when the flag is enabled. They can still opt-into revalidation via
// `shouldRevalidate` via `actionResult`
let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;
let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;
let navigationMatches = boundaryMatches.filter((match, index) => {
let {
route
} = match;
if (route.lazy) {
// We haven't loaded this route yet so we don't know if it's got a loader!
return true;
}
if (route.loader == null) {
return false;
}
if (initialHydration) {
return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);
}
// Always call the loader on new route instances and pending defer cancellations
if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {
return true;
}
// This is the default implementation for when we revalidate. If the route
// provides it's own implementation, then we give them full control but
// provide this value so they can leverage it if needed after they check
// their own specific use cases
let currentRouteMatch = state.matches[index];
let nextRouteMatch = match;
return shouldRevalidateLoader(match, _extends({
currentUrl,
currentParams: currentRouteMatch.params,
nextUrl,
nextParams: nextRouteMatch.params
}, submission, {
actionResult,
actionStatus,
defaultShouldRevalidate: shouldSkipRevalidation ? false :
// Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate
isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||
// Search params affect all loaders
currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)
}));
});
// Pick fetcher.loads that need to be revalidated
let revalidatingFetchers = [];
fetchLoadMatches.forEach((f, key) => {
// Don't revalidate:
// - on initial hydration (shouldn't be any fetchers then anyway)
// - if fetcher won't be present in the subsequent render
// - no longer matches the URL (v7_fetcherPersist=false)
// - was unmounted but persisted due to v7_fetcherPersist=true
if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {
return;
}
let fetcherMatches = matchRoutes(routesToUse, f.path, basename);
// If the fetcher path no longer matches, push it in with null matches so
// we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is
// currently only a use-case for Remix HMR where the route tree can change
// at runtime and remove a route previously loaded via a fetcher
if (!fetcherMatches) {
revalidatingFetchers.push({
key,
routeId: f.routeId,
path: f.path,
matches: null,
match: null,
controller: null
});
return;
}
// Revalidating fetchers are decoupled from the route matches since they
// load from a static href. They revalidate based on explicit revalidation
// (submission, useRevalidator, or X-Remix-Revalidate)
let fetcher = state.fetchers.get(key);
let fetcherMatch = getTargetMatch(fetcherMatches, f.path);
let shouldRevalidate = false;
if (fetchRedirectIds.has(key)) {
// Never trigger a revalidation of an actively redirecting fetcher
shouldRevalidate = false;
} else if (cancelledFetcherLoads.has(key)) {
// Always mark for revalidation if the fetcher was cancelled
cancelledFetcherLoads.delete(key);
shouldRevalidate = true;
} else if (fetcher && fetcher.state !== "idle" && fetcher.data === undefined) {
// If the fetcher hasn't ever completed loading yet, then this isn't a
// revalidation, it would just be a brand new load if an explicit
// revalidation is required
shouldRevalidate = isRevalidationRequired;
} else {
// Otherwise fall back on any user-defined shouldRevalidate, defaulting
// to explicit revalidations only
shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({
currentUrl,
currentParams: state.matches[state.matches.length - 1].params,
nextUrl,
nextParams: matches[matches.length - 1].params
}, submission, {
actionResult,
actionStatus,
defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired
}));
}
if (shouldRevalidate) {
revalidatingFetchers.push({
key,
routeId: f.routeId,
path: f.path,
matches: fetcherMatches,
match: fetcherMatch,
controller: new AbortController()
});
}
});
return [navigationMatches, revalidatingFetchers];
}
function shouldLoadRouteOnHydration(route, loaderData, errors) {
// We dunno if we have a loader - gotta find out!
if (route.lazy) {
return true;
}
// No loader, nothing to initialize
if (!route.loader) {
return false;
}
let hasData = loaderData != null && loaderData[route.id] !== undefined;
let hasError = errors != null && errors[route.id] !== undefined;
// Don't run if we error'd during SSR
if (!hasData && hasError) {
return false;
}
// Explicitly opting-in to running on hydration
if (typeof route.loader === "function" && route.loader.hydrate === true) {
return true;
}
// Otherwise, run if we're not yet initialized with anything
return !hasData && !hasError;
}
function isNewLoader(currentLoaderData, currentMatch, match) {
let isNew =
// [a] -> [a, b]
!currentMatch ||
// [a, b] -> [a, c]
match.route.id !== currentMatch.route.id;
// Handle the case that we don't have data for a re-used route, potentially
// from a prior error or from a cancelled pending deferred
let isMissingData = currentLoaderData[match.route.id] === undefined;
// Always load if this is a net-new route or we don't yet have data
return isNew || isMissingData;
}
function isNewRouteInstance(currentMatch, match) {
let currentPath = currentMatch.route.path;
return (
// param change for this match, /users/123 -> /users/456
currentMatch.pathname !== match.pathname ||
// splat param changed, which is not present in match.path
// e.g. /files/images/avatar.jpg -> files/finances.xls
currentPath != null && currentPath.endsWith("*") && currentMatch.params["*"] !== match.params["*"]
);
}
function shouldRevalidateLoader(loaderMatch, arg) {
if (loaderMatch.route.shouldRevalidate) {
let routeChoice = loaderMatch.route.shouldRevalidate(arg);
if (typeof routeChoice === "boolean") {
return routeChoice;
}
}
return arg.defaultShouldRevalidate;
}
function patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {
var _childrenToPatch;
let childrenToPatch;
if (routeId) {
let route = manifest[routeId];
invariant(route, "No route found to patch children into: routeId = " + routeId);
if (!route.children) {
route.children = [];
}
childrenToPatch = route.children;
} else {
childrenToPatch = routesToUse;
}
// Don't patch in routes we already know about so that `patch` is idempotent
// to simplify user-land code. This is useful because we re-call the
// `patchRoutesOnNavigation` function for matched routes with params.
let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute)));
let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || "_", "patch", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || "0")], manifest);
childrenToPatch.push(...newRoutes);
}
function isSameRoute(newRoute, existingRoute) {
// Most optimal check is by id
if ("id" in newRoute && "id" in existingRoute && newRoute.id === existingRoute.id) {
return true;
}
// Second is by pathing differences
if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {
return false;
}
// Pathless layout routes are trickier since we need to check children.
// If they have no children then they're the same as far as we can tell
if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {
return true;
}
// Otherwise, we look to see if every child in the new route is already
// represented in the existing route's children
return newRoute.children.every((aChild, i) => {
var _existingRoute$childr;
return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild));
});
}
/**
* Execute route.lazy() methods to lazily load route modules (loader, action,
* shouldRevalidate) and update the routeManifest in place which shares objects
* with dataRoutes so those get updated as well.
*/
async function loadLazyRouteModule(route, mapRouteProperties, manifest) {
if (!route.lazy) {
return;
}
let lazyRoute = await route.lazy();
// If the lazy route function was executed and removed by another parallel
// call then we can return - first lazy() to finish wins because the return
// value of lazy is expected to be static
if (!route.lazy) {
return;
}
let routeToUpdate = manifest[route.id];
invariant(routeToUpdate, "No route found in manifest");
// Update the route in place. This should be safe because there's no way
// we could yet be sitting on this route as we can't get there without
// resolving lazy() first.
//
// This is different than the HMR "update" use-case where we may actively be
// on the route being updated. The main concern boils down to "does this
// mutation affect any ongoing navigations or any current state.matches
// values?". If not, it should be safe to update in place.
let routeUpdates = {};
for (let lazyRouteProperty in lazyRoute) {
let staticRouteValue = routeToUpdate[lazyRouteProperty];
let isPropertyStaticallyDefined = staticRouteValue !== undefined &&
// This property isn't static since it should always be updated based
// on the route updates
lazyRouteProperty !== "hasErrorBoundary";
warning(!isPropertyStaticallyDefined, "Route \"" + routeToUpdate.id + "\" has a static property \"" + lazyRouteProperty + "\" " + "defined but its lazy function is also returning a value for this property. " + ("The lazy route property \"" + lazyRouteProperty + "\" will be ignored."));
if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {
routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];
}
}
// Mutate the route with the provided updates. Do this first so we pass
// the updated version to mapRouteProperties
Object.assign(routeToUpdate, routeUpdates);
// Mutate the `hasErrorBoundary` property on the route based on the route
// updates and remove the `lazy` function so we don't resolve the lazy
// route again.
Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {
lazy: undefined
}));
}
// Default implementation of `dataStrategy` which fetches all loaders in parallel
async function defaultDataStrategy(_ref4) {
let {
matches
} = _ref4;
let matchesToLoad = matches.filter(m => m.shouldLoad);
let results = await Promise.all(matchesToLoad.map(m => m.resolve()));
return results.reduce((acc, result, i) => Object.assign(acc, {
[matchesToLoad[i].route.id]: result
}), {});
}
async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {
let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);
let dsMatches = matches.map((match, i) => {
let loadRoutePromise = loadRouteDefinitionsPromises[i];
let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);
// `resolve` encapsulates route.lazy(), executing the loader/action,
// and mapping return values/thrown errors to a `DataStrategyResult`. Users
// can pass a callback to take fine-grained control over the execution
// of the loader/action
let resolve = async handlerOverride => {
if (handlerOverride && request.method === "GET" && (match.route.lazy || match.route.loader)) {
shouldLoad = true;
}
return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({
type: ResultType.data,
result: undefined
});
};
return _extends({}, match, {
shouldLoad,
resolve
});
});
// Send all matches here to allow for a middleware-type implementation.
// handler will be a no-op for unneeded routes and we filter those results
// back out below.
let results = await dataStrategyImpl({
matches: dsMatches,
request,
params: matches[0].params,
fetcherKey,
context: requestContext
});
// Wait for all routes to load here but 'swallow the error since we want
// it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -
// called from `match.resolve()`
try {
await Promise.all(loadRouteDefinitionsPromises);
} catch (e) {
// No-op
}
return results;
}
// Default logic for calling a loader/action is the user has no specified a dataStrategy
async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {
let result;
let onReject;
let runHandler = handler => {
// Setup a promise we can race against so that abort signals short circuit
let reject;
// This will never resolve so safe to type it as Promise<DataStrategyResult> to
// satisfy the function return value
let abortPromise = new Promise((_, r) => reject = r);
onReject = () => reject();
request.signal.addEventListener("abort", onReject);
let actualHandler = ctx => {
if (typeof handler !== "function") {
return Promise.reject(new Error("You cannot call the handler for a route which defines a boolean " + ("\"" + type + "\" [routeId: " + match.route.id + "]")));
}
return handler({
request,
params: match.params,
context: staticContext
}, ...(ctx !== undefined ? [ctx] : []));
};
let handlerPromise = (async () => {
try {
let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());
return {
type: "data",
result: val
};
} catch (e) {
return {
type: "error",
result: e
};
}
})();
return Promise.race([handlerPromise, abortPromise]);
};
try {
let handler = match.route[type];
// If we have a route.lazy promise, await that first
if (loadRoutePromise) {
if (handler) {
// Run statically defined handler in parallel with lazy()
let handlerError;
let [value] = await Promise.all([
// If the handler throws, don't let it immediately bubble out,
// since we need to let the lazy() execution finish so we know if this
// route has a boundary that can handle the error
runHandler(handler).catch(e => {
handlerError = e;
}), loadRoutePromise]);
if (handlerError !== undefined) {
throw handlerError;
}
result = value;
} else {
// Load lazy route module, then run any returned handler
await loadRoutePromise;
handler = match.route[type];
if (handler) {
// Handler still runs even if we got interrupted to maintain consistency
// with un-abortable behavior of handler execution on non-lazy or
// previously-lazy-loaded routes
result = await runHandler(handler);
} else if (type === "action") {
let url = new URL(request.url);
let pathname = url.pathname + url.search;
throw getInternalRouterError(405, {
method: request.method,
pathname,
routeId: match.route.id
});
} else {
// lazy() route has no loader to run. Short circuit here so we don't
// hit the invariant below that errors on returning undefined.
return {
type: ResultType.data,
result: undefined
};
}
}
} else if (!handler) {
let url = new URL(request.url);
let pathname = url.pathname + url.search;
throw getInternalRouterError(404, {
pathname
});
} else {
result = await runHandler(handler);
}
invariant(result.result !== undefined, "You defined " + (type === "action" ? "an action" : "a loader") + " for route " + ("\"" + match.route.id + "\" but didn't return anything from your `" + type + "` ") + "function. Please return a value or `null`.");
} catch (e) {
// We should already be catching and converting normal handler executions to
// DataStrategyResults and returning them, so anything that throws here is an
// unexpected error we still need to wrap
return {
type: ResultType.error,
result: e
};
} finally {
if (onReject) {
request.signal.removeEventListener("abort", onReject);
}
}
return result;
}
async function convertDataStrategyResultToDataResult(dataStrategyResult) {
let {
result,
type
} = dataStrategyResult;
if (isResponse(result)) {
let data;
try {
let contentType = result.headers.get("Content-Type");
// Check between word boundaries instead of startsWith() due to the last
// paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type
if (contentType && /\bapplication\/json\b/.test(contentType)) {
if (result.body == null) {
data = null;
} else {
data = await result.json();
}
} else {
data = await result.text();
}
} catch (e) {
return {
type: ResultType.error,
error: e
};
}
if (type === ResultType.error) {
return {
type: ResultType.error,
error: new ErrorResponseImpl(result.status, result.statusText, data),
statusCode: result.status,
headers: result.headers
};
}
return {
type: ResultType.data,
data,
statusCode: result.status,
headers: result.headers
};
}
if (type === ResultType.error) {
if (isDataWithResponseInit(result)) {
var _result$init2;
if (result.data instanceof Error) {
var _result$init;
return {
type: ResultType.error,
error: result.data,
statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status
};
}
// Convert thrown data() to ErrorResponse instances
result = new ErrorResponseImpl(((_result$init2 = result.init) == null ? void 0 : _result$init2.status) || 500, undefined, result.data);
}
return {
type: ResultType.error,
error: result,
statusCode: isRouteErrorResponse(result) ? result.status : undefined
};
}
if (isDeferredData(result)) {
var _result$init3, _result$init4;
return {
type: ResultType.deferred,
deferredData: result,
statusCode: (_result$init3 = result.init) == null ? void 0 : _result$init3.status,
headers: ((_result$init4 = result.init) == null ? void 0 : _result$init4.headers) && new Headers(result.init.headers)
};
}
if (isDataWithResponseInit(result)) {
var _result$init5, _result$init6;
return {
type: ResultType.data,
data: result.data,
statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,
headers: (_result$init6 = result.init) != null && _result$init6.headers ? new Headers(result.init.headers) : undefined
};
}
return {
type: ResultType.data,
data: result
};
}
// Support relative routing in internal redirects
function normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {
let location = response.headers.get("Location");
invariant(location, "Redirects returned/thrown from loaders/actions must have a Location header");
if (!ABSOLUTE_URL_REGEX.test(location)) {
let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);
location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);
response.headers.set("Location", location);
}
return response;
}
function normalizeRedirectLocation(location, currentUrl, basename) {
if (ABSOLUTE_URL_REGEX.test(location)) {
// Strip off the protocol+origin for same-origin + same-basename absolute redirects
let normalizedLocation = location;
let url = normalizedLocation.startsWith("//") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);
let isSameBasename = stripBasename(url.pathname, basename) != null;
if (url.origin === currentUrl.origin && isSameBasename) {
return url.pathname + url.search + url.hash;
}
}
return location;
}
// Utility method for creating the Request instances for loaders/actions during
// client-side navigations and fetches. During SSR we will always have a
// Request instance from the static handler (query/queryRoute)
function createClientSideRequest(history, location, signal, submission) {
let url = history.createURL(stripHashFromPath(location)).toString();
let init = {
signal
};
if (submission && isMutationMethod(submission.formMethod)) {
let {
formMethod,
formEncType
} = submission;
// Didn't think we needed this but it turns out unlike other methods, patch
// won't be properly normalized to uppercase and results in a 405 error.
// See: https://fetch.spec.whatwg.org/#concept-method
init.method = formMethod.toUpperCase();
if (formEncType === "application/json") {
init.headers = new Headers({
"Content-Type": formEncType
});
init.body = JSON.stringify(submission.json);
} else if (formEncType === "text/plain") {
// Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)
init.body = submission.text;
} else if (formEncType === "application/x-www-form-urlencoded" && submission.formData) {
// Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)
init.body = convertFormDataToSearchParams(submission.formData);
} else {
// Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)
init.body = submission.formData;
}
}
return new Request(url, init);
}
function convertFormDataToSearchParams(formData) {
let searchParams = new URLSearchParams();
for (let [key, value] of formData.entries()) {
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs
searchParams.append(key, typeof value === "string" ? value : value.name);
}
return searchParams;
}
function convertSearchParamsToFormData(searchParams) {
let formData = new FormData();
for (let [key, value] of searchParams.entries()) {
formData.append(key, value);
}
return formData;
}
function processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {
// Fill in loaderData/errors from our loaders
let loaderData = {};
let errors = null;
let statusCode;
let foundError = false;
let loaderHeaders = {};
let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;
// Process loader results into state.loaderData/state.errors
matches.forEach(match => {
if (!(match.route.id in results)) {
return;
}
let id = match.route.id;
let result = results[id];
invariant(!isRedirectResult(result), "Cannot handle redirect results in processLoaderData");
if (isErrorResult(result)) {
let error = result.error;
// If we have a pending action error, we report it at the highest-route
// that throws a loader error, and then clear it out to indicate that
// it was consumed
if (pendingError !== undefined) {
error = pendingError;
pendingError = undefined;
}
errors = errors || {};
if (skipLoaderErrorBubbling) {
errors[id] = error;
} else {
// Look upwards from the matched route for the closest ancestor error
// boundary, defaulting to the root match. Prefer higher error values
// if lower errors bubble to the same boundary
let boundaryMatch = findNearestBoundary(matches, id);
if (errors[boundaryMatch.route.id] == null) {
errors[boundaryMatch.route.id] = error;
}
}
// Clear our any prior loaderData for the throwing route
loaderData[id] = undefined;
// Once we find our first (highest) error, we set the status code and
// prevent deeper status codes from overriding
if (!foundError) {
foundError = true;
statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;
}
if (result.headers) {
loaderHeaders[id] = result.headers;
}
} else {
if (isDeferredResult(result)) {
activeDeferreds.set(id, result.deferredData);
loaderData[id] = result.deferredData.data;
// Error status codes always override success status codes, but if all
// loaders are successful we take the deepest status code.
if (result.statusCode != null && result.statusCode !== 200 && !foundError) {
statusCode = result.statusCode;
}
if (result.headers) {
loaderHeaders[id] = result.headers;
}
} else {
loaderData[id] = result.data;
// Error status codes always override success status codes, but if all
// loaders are successful we take the deepest status code.
if (result.statusCode && result.statusCode !== 200 && !foundError) {
statusCode = result.statusCode;
}
if (result.headers) {
loaderHeaders[id] = result.headers;
}
}
}
});
// If we didn't consume the pending action error (i.e., all loaders
// resolved), then consume it here. Also clear out any loaderData for the
// throwing route
if (pendingError !== undefined && pendingActionResult) {
errors = {
[pendingActionResult[0]]: pendingError
};
loaderData[pendingActionResult[0]] = undefined;
}
return {
loaderData,
errors,
statusCode: statusCode || 200,
loaderHeaders
};
}
function processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {
let {
loaderData,
errors
} = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble
);
// Process results from our revalidating fetchers
revalidatingFetchers.forEach(rf => {
let {
key,
match,
controller
} = rf;
let result = fetcherResults[key];
invariant(result, "Did not find corresponding fetcher result");
// Process fetcher non-redirect errors
if (controller && controller.signal.aborted) {
// Nothing to do for aborted fetchers
return;
} else if (isErrorResult(result)) {
let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);
if (!(errors && errors[boundaryMatch.route.id])) {
errors = _extends({}, errors, {
[boundaryMatch.route.id]: result.error
});
}
state.fetchers.delete(key);
} else if (isRedirectResult(result)) {
// Should never get here, redirects should get processed above, but we
// keep this to type narrow to a success result in the else
invariant(false, "Unhandled fetcher revalidation redirect");
} else if (isDeferredResult(result)) {
// Should never get here, deferred data should be awaited for fetchers
// in resolveDeferredResults
invariant(false, "Unhandled fetcher deferred data");
} else {
let doneFetcher = getDoneFetcher(result.data);
state.fetchers.set(key, doneFetcher);
}
});
return {
loaderData,
errors
};
}
function mergeLoaderData(loaderData, newLoaderData, matches, errors) {
let mergedLoaderData = _extends({}, newLoaderData);
for (let match of matches) {
let id = match.route.id;
if (newLoaderData.hasOwnProperty(id)) {
if (newLoaderData[id] !== undefined) {
mergedLoaderData[id] = newLoaderData[id];
}
} else if (loaderData[id] !== undefined && match.route.loader) {
// Preserve existing keys not included in newLoaderData and where a loader
// wasn't removed by HMR
mergedLoaderData[id] = loaderData[id];
}
if (errors && errors.hasOwnProperty(id)) {
// Don't keep any loader data below the boundary
break;
}
}
return mergedLoaderData;
}
function getActionDataForCommit(pendingActionResult) {
if (!pendingActionResult) {
return {};
}
return isErrorResult(pendingActionResult[1]) ? {
// Clear out prior actionData on errors
actionData: {}
} : {
actionData: {
[pendingActionResult[0]]: pendingActionResult[1].data
}
};
}
// Find the nearest error boundary, looking upwards from the leaf route (or the
// route specified by routeId) for the closest ancestor error boundary,
// defaulting to the root match
function findNearestBoundary(matches, routeId) {
let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];
return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];
}
function getShortCircuitMatches(routes) {
// Prefer a root layout route if present, otherwise shim in a route object
let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === "/") || {
id: "__shim-error-route__"
};
return {
matches: [{
params: {},
pathname: "",
pathnameBase: "",
route
}],
route
};
}
function getInternalRouterError(status, _temp5) {
let {
pathname,
routeId,
method,
type,
message
} = _temp5 === void 0 ? {} : _temp5;
let statusText = "Unknown Server Error";
let errorMessage = "Unknown @remix-run/router error";
if (status === 400) {
statusText = "Bad Request";
if (method && pathname && routeId) {
errorMessage = "You made a " + method + " request to \"" + pathname + "\" but " + ("did not provide a `loader` for route \"" + routeId + "\", ") + "so there is no way to handle the request.";
} else if (type === "defer-action") {
errorMessage = "defer() is not supported in actions";
} else if (type === "invalid-body") {
errorMessage = "Unable to encode submission body";
}
} else if (status === 403) {
statusText = "Forbidden";
errorMessage = "Route \"" + routeId + "\" does not match URL \"" + pathname + "\"";
} else if (status === 404) {
statusText = "Not Found";
errorMessage = "No route matches URL \"" + pathname + "\"";
} else if (status === 405) {
statusText = "Method Not Allowed";
if (method && pathname && routeId) {
errorMessage = "You made a " + method.toUpperCase() + " request to \"" + pathname + "\" but " + ("did not provide an `action` for route \"" + routeId + "\", ") + "so there is no way to handle the request.";
} else if (method) {
errorMessage = "Invalid request method \"" + method.toUpperCase() + "\"";
}
}
return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);
}
// Find any returned redirect errors, starting from the lowest match
function findRedirect(results) {
let entries = Object.entries(results);
for (let i = entries.length - 1; i >= 0; i--) {
let [key, result] = entries[i];
if (isRedirectResult(result)) {
return {
key,
result
};
}
}
}
function stripHashFromPath(path) {
let parsedPath = typeof path === "string" ? parsePath(path) : path;
return createPath(_extends({}, parsedPath, {
hash: ""
}));
}
function isHashChangeOnly(a, b) {
if (a.pathname !== b.pathname || a.search !== b.search) {
return false;
}
if (a.hash === "") {
// /page -> /page#hash
return b.hash !== "";
} else if (a.hash === b.hash) {
// /page#hash -> /page#hash
return true;
} else if (b.hash !== "") {
// /page#hash -> /page#other
return true;
}
// If the hash is removed the browser will re-perform a request to the server
// /page#hash -> /page
return false;
}
function isDataStrategyResult(result) {
return result != null && typeof result === "object" && "type" in result && "result" in result && (result.type === ResultType.data || result.type === ResultType.error);
}
function isRedirectDataStrategyResultResult(result) {
return isResponse(result.result) && redirectStatusCodes.has(result.result.status);
}
function isDeferredResult(result) {
return result.type === ResultType.deferred;
}
function isErrorResult(result) {
return result.type === ResultType.error;
}
function isRedirectResult(result) {
return (result && result.type) === ResultType.redirect;
}
function isDataWithResponseInit(value) {
return typeof value === "object" && value != null && "type" in value && "data" in value && "init" in value && value.type === "DataWithResponseInit";
}
function isDeferredData(value) {
let deferred = value;
return deferred && typeof deferred === "object" && typeof deferred.data === "object" && typeof deferred.subscribe === "function" && typeof deferred.cancel === "function" && typeof deferred.resolveData === "function";
}
function isResponse(value) {
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
}
function isRedirectResponse(result) {
if (!isResponse(result)) {
return false;
}
let status = result.status;
let location = result.headers.get("Location");
return status >= 300 && status <= 399 && location != null;
}
function isValidMethod(method) {
return validRequestMethods.has(method.toLowerCase());
}
function isMutationMethod(method) {
return validMutationMethods.has(method.toLowerCase());
}
async function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {
let entries = Object.entries(results);
for (let index = 0; index < entries.length; index++) {
let [routeId, result] = entries[index];
let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);
// If we don't have a match, then we can have a deferred result to do
// anything with. This is for revalidating fetchers where the route was
// removed during HMR
if (!match) {
continue;
}
let currentMatch = currentMatches.find(m => m.route.id === match.route.id);
let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;
if (isDeferredResult(result) && isRevalidatingLoader) {
// Note: we do not have to touch activeDeferreds here since we race them
// against the signal in resolveDeferredData and they'll get aborted
// there if needed
await resolveDeferredData(result, signal, false).then(result => {
if (result) {
results[routeId] = result;
}
});
}
}
}
async function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {
for (let index = 0; index < revalidatingFetchers.length; index++) {
let {
key,
routeId,
controller
} = revalidatingFetchers[index];
let result = results[key];
let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);
// If we don't have a match, then we can have a deferred result to do
// anything with. This is for revalidating fetchers where the route was
// removed during HMR
if (!match) {
continue;
}
if (isDeferredResult(result)) {
// Note: we do not have to touch activeDeferreds here since we race them
// against the signal in resolveDeferredData and they'll get aborted
// there if needed
invariant(controller, "Expected an AbortController for revalidating fetcher deferred result");
await resolveDeferredData(result, controller.signal, true).then(result => {
if (result) {
results[key] = result;
}
});
}
}
}
async function resolveDeferredData(result, signal, unwrap) {
if (unwrap === void 0) {
unwrap = false;
}
let aborted = await result.deferredData.resolveData(signal);
if (aborted) {
return;
}
if (unwrap) {
try {
return {
type: ResultType.data,
data: result.deferredData.unwrappedData
};
} catch (e) {
// Handle any TrackedPromise._error values encountered while unwrapping
return {
type: ResultType.error,
error: e
};
}
}
return {
type: ResultType.data,
data: result.deferredData.data
};
}
function hasNakedIndexQuery(search) {
return new URLSearchParams(search).getAll("index").some(v => v === "");
}
function getTargetMatch(matches, location) {
let search = typeof location === "string" ? parsePath(location).search : location.search;
if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || "")) {
// Return the leaf index route when index is present
return matches[matches.length - 1];
}
// Otherwise grab the deepest "path contributing" match (ignoring index and
// pathless layout routes)
let pathMatches = getPathContributingMatches(matches);
return pathMatches[pathMatches.length - 1];
}
function getSubmissionFromNavigation(navigation) {
let {
formMethod,
formAction,
formEncType,
text,
formData,
json
} = navigation;
if (!formMethod || !formAction || !formEncType) {
return;
}
if (text != null) {
return {
formMethod,
formAction,
formEncType,
formData: undefined,
json: undefined,
text
};
} else if (formData != null) {
return {
formMethod,
formAction,
formEncType,
formData,
json: undefined,
text: undefined
};
} else if (json !== undefined) {
return {
formMethod,
formAction,
formEncType,
formData: undefined,
json,
text: undefined
};
}
}
function getLoadingNavigation(location, submission) {
if (submission) {
let navigation = {
state: "loading",
location,
formMethod: submission.formMethod,
formAction: submission.formAction,
formEncType: submission.formEncType,
formData: submission.formData,
json: submission.json,
text: submission.text
};
return navigation;
} else {
let navigation = {
state: "loading",
location,
formMethod: undefined,
formAction: undefined,
formEncType: undefined,
formData: undefined,
json: undefined,
text: undefined
};
return navigation;
}
}
function getSubmittingNavigation(location, submission) {
let navigation = {
state: "submitting",
location,
formMethod: submission.formMethod,
formAction: submission.formAction,
formEncType: submission.formEncType,
formData: submission.formData,
json: submission.json,
text: submission.text
};
return navigation;
}
function getLoadingFetcher(submission, data) {
if (submission) {
let fetcher = {
state: "loading",
formMethod: submission.formMethod,
formAction: submission.formAction,
formEncType: submission.formEncType,
formData: submission.formData,
json: submission.json,
text: submission.text,
data
};
return fetcher;
} else {
let fetcher = {
state: "loading",
formMethod: undefined,
formAction: undefined,
formEncType: undefined,
formData: undefined,
json: undefined,
text: undefined,
data
};
return fetcher;
}
}
function getSubmittingFetcher(submission, existingFetcher) {
let fetcher = {
state: "submitting",
formMethod: submission.formMethod,
formAction: submission.formAction,
formEncType: submission.formEncType,
formData: submission.formData,
json: submission.json,
text: submission.text,
data: existingFetcher ? existingFetcher.data : undefined
};
return fetcher;
}
function getDoneFetcher(data) {
let fetcher = {
state: "idle",
formMethod: undefined,
formAction: undefined,
formEncType: undefined,
formData: undefined,
json: undefined,
text: undefined,
data
};
return fetcher;
}
function restoreAppliedTransitions(_window, transitions) {
try {
let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);
if (sessionPositions) {
let json = JSON.parse(sessionPositions);
for (let [k, v] of Object.entries(json || {})) {
if (v && Array.isArray(v)) {
transitions.set(k, new Set(v || []));
}
}
}
} catch (e) {
// no-op, use default empty object
}
}
function persistAppliedTransitions(_window, transitions) {
if (transitions.size > 0) {
let json = {};
for (let [k, v] of transitions) {
json[k] = [...v];
}
try {
_window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));
} catch (error) {
warning(false, "Failed to save applied view transitions in sessionStorage (" + error + ").");
}
}
}
//#endregion
//# sourceMappingURL=router.js.map
/***/ }),
/***/ "./assets/components/ProButton.js":
/*!****************************************!*\
!*** ./assets/components/ProButton.js ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! dompurify */ "./node_modules/dompurify/dist/purify.es.mjs");
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
const ProButton = ({
className,
isLink = false,
url = astra_admin.upgrade_url,
children = (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_5__.getAstraProTitle)(),
disableSpinner = false
}) => {
const onGetAstraPro = e => {
e.preventDefault();
e.stopPropagation();
if (!astra_admin.pro_installed_status) {
window.open(url, "_blank");
}
e.target.innerHTML = dompurify__WEBPACK_IMPORTED_MODULE_4__["default"].sanitize((disableSpinner ? "" : (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_5__.getSpinner)()) + astra_admin.plugin_activating_text);
e.target.disabled = true;
const formData = new window.FormData();
formData.append("action", "astra_recommended_plugin_activate");
formData.append("security", astra_admin.plugin_manager_nonce);
formData.append("init", "astra-addon/astra-addon.php");
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default()({
url: astra_admin.ajax_url,
method: "POST",
body: formData
}).then(data => {
if (data.success) {
window.open(astra_admin.astra_base_url, "_self");
}
}).catch(error => {
e.target.innerText = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Activation failed. Please try again.", "astra");
e.target.disabled = false;
console.error("Error during API request:", error);
// Optionally, notify the user about the error or handle it appropriately.
});
};
const Tag = isLink ? "a" : "button";
const linkProps = isLink && {
role: "button",
href: url,
target: "_blank",
rel: "noreferrer"
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)(Tag, (0,_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_5__.classNames)("inline-flex items-center disabled:pointer-events-none", className),
onClick: onGetAstraPro
}, linkProps), children);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProButton);
/***/ }),
/***/ "./assets/components/PromoCard.js":
/*!****************************************!*\
!*** ./assets/components/PromoCard.js ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
const PromoCard = ({
className = "",
id,
icon,
title,
description,
linkHRef,
linkText,
children
}) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": `section-${id}-title`
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: `section-${id}-title`
}, title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_1__.classNames)("relative box-border rounded-md bg-white shadow-sm overflow-hidden transition hover:shadow-hover", className)
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "p-6"
}, icon && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "inline-block mb-2"
}, icon), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "relative flex items-center text-slate-800 text-base font-semibold pb-2"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "flex-1"
}, title)), !children && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-slate-500 text-sm pb-5"
}, description), children, linkText && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
className: "text-sm text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",
href: linkHRef,
target: "_blank",
rel: "noreferrer"
}, linkText))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PromoCard);
/***/ }),
/***/ "./assets/components/icons/Star.js":
/*!*****************************************!*\
!*** ./assets/components/icons/Star.js ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
const Star = ({
width = 20,
height = 20,
fill = "#000",
className = ""
}) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", {
className: className,
width: width,
height: height,
viewBox: "0 0 20 20",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("g", {
clipPath: "url(#clip0_2358_55923)"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
d: "M9.04894 2.92705C9.3483 2.00574 10.6517 2.00574 10.9511 2.92705L12.0206 6.21885C12.1545 6.63087 12.5385 6.90983 12.9717 6.90983H16.4329C17.4016 6.90983 17.8044 8.14945 17.0207 8.71885L14.2205 10.7533C13.87 11.0079 13.7234 11.4593 13.8572 11.8713L14.9268 15.1631C15.2261 16.0844 14.1717 16.8506 13.388 16.2812L10.5878 14.2467C10.2373 13.9921 9.7627 13.9921 9.41221 14.2467L6.61204 16.2812C5.82833 16.8506 4.77385 16.0844 5.0732 15.1631L6.14277 11.8713C6.27665 11.4593 6.12999 11.0079 5.7795 10.7533L2.97933 8.71885C2.19562 8.14945 2.59839 6.90983 3.56712 6.90983H7.02832C7.46154 6.90983 7.8455 6.63087 7.97937 6.21885L9.04894 2.92705Z",
fill: fill
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("defs", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("clipPath", {
id: "clip0_2358_55923"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("rect", {
width: width,
height: height,
fill: "white"
}))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Star);
/***/ }),
/***/ "./assets/components/icons/index.js":
/*!******************************************!*\
!*** ./assets/components/icons/index.js ***!
\******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Star: () => (/* reexport safe */ _Star__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _Star__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Star */ "./assets/components/icons/Star.js");
/***/ }),
/***/ "./assets/components/index.js":
/*!************************************!*\
!*** ./assets/components/index.js ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ ProButton: () => (/* reexport safe */ _ProButton__WEBPACK_IMPORTED_MODULE_0__["default"]),
/* harmony export */ PromoCard: () => (/* reexport safe */ _PromoCard__WEBPACK_IMPORTED_MODULE_1__["default"])
/* harmony export */ });
/* harmony import */ var _ProButton__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ProButton */ "./assets/components/ProButton.js");
/* harmony import */ var _PromoCard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PromoCard */ "./assets/components/PromoCard.js");
/***/ }),
/***/ "./assets/hooks/index.js":
/*!*******************************!*\
!*** ./assets/hooks/index.js ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useDebounceEffect: () => (/* reexport safe */ _useDebounceEffect__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _useDebounceEffect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useDebounceEffect */ "./assets/hooks/useDebounceEffect.js");
/***/ }),
/***/ "./assets/hooks/useDebounceEffect.js":
/*!*******************************************!*\
!*** ./assets/hooks/useDebounceEffect.js ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
/**
* A hook that wraps a callback function with a debounce effect.
*
* This hook is designed to delay the execution of a function until after a specified delay.
* It's particularly useful for handling events that occur rapidly, such as typing in a text input.
*
* @param {Function} callback - The function to debounce.
* @param {number} delay - The delay in milliseconds before the function is executed.
* @param {Array} dependencies - An array of dependencies that trigger the effect.
*/
function useDebounceEffect(callback, delay, dependencies) {
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
const debouncedCallback = (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_1__.debounce)(callback, delay);
debouncedCallback();
// Cleanup on unmount or when dependencies change.
return () => debouncedCallback.cancel && debouncedCallback.cancel();
}, [callback, delay, ...dependencies]);
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useDebounceEffect);
/***/ }),
/***/ "./assets/src/common/block-icons.js":
/*!******************************************!*\
!*** ./assets/src/common/block-icons.js ***!
\******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/**
* Admin Icons
*
* @package Astra
*/const Astra_Admin_Icons={'close':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:20,height:20,viewBox:'0 0 20 20',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M5 15L15 5M5 5L15 15',stroke:'#9CA3AF',strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),'search':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:20,height:20,viewBox:'0 0 20 20',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M17.5 17.5L12.5 12.5M14.1667 8.33333C14.1667 11.555 11.555 14.1667 8.33333 14.1667C5.11167 14.1667 2.5 11.555 2.5 8.33333C2.5 5.11167 5.11167 2.5 8.33333 2.5C11.555 2.5 14.1667 5.11167 14.1667 8.33333Z',stroke:'#9CA3AF',strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),'popupclose':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:44,height:44,viewBox:'0 0 44 44',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M16 28L28 16M16 16L28 28',stroke:'#334155',strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),'support':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:32,height:32,viewBox:'0 0 32 32',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M27 16C27 22.0751 22.0751 27 16 27V29C23.1797 29 29 23.1797 29 16H27ZM16 27C9.92487 27 5 22.0751 5 16H3C3 23.1797 8.8203 29 16 29V27ZM5 16C5 9.92487 9.92487 5 16 5V3C8.8203 3 3 8.8203 3 16H5ZM16 5C22.0751 5 27 9.92487 27 16H29C29 8.8203 23.1797 3 16 3V5ZM20.3333 16C20.3333 18.3932 18.3932 20.3333 16 20.3333V22.3333C19.4978 22.3333 22.3333 19.4978 22.3333 16H20.3333ZM16 20.3333C13.6068 20.3333 11.6667 18.3932 11.6667 16H9.66667C9.66667 19.4978 12.5022 22.3333 16 22.3333V20.3333ZM11.6667 16C11.6667 13.6068 13.6068 11.6667 16 11.6667V9.66667C12.5022 9.66667 9.66667 12.5022 9.66667 16H11.6667ZM16 11.6667C18.3932 11.6667 20.3333 13.6068 20.3333 16H22.3333C22.3333 12.5022 19.4978 9.66667 16 9.66667V11.6667ZM23.7782 6.80761L19.0641 11.5217L20.4783 12.9359L25.1924 8.22183L23.7782 6.80761ZM19.0641 20.4783L23.7782 25.1924L25.1924 23.7782L20.4783 19.0641L19.0641 20.4783ZM12.9359 11.5217L8.22183 6.80761L6.80761 8.22183L11.5217 12.9359L12.9359 11.5217ZM11.5217 19.0641L6.80761 23.7782L8.22183 25.1924L12.9359 20.4783L11.5217 19.0641Z',fill:'#4B5563'})),'book':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:32,height:32,viewBox:'0 0 32 32',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M16 8.33639V25.6697M16 8.33639C14.4428 7.30183 12.3287 6.66602 10 6.66602C7.67134 6.66602 5.55719 7.30183 4 8.33639V25.6697C5.55719 24.6352 7.67134 23.9993 10 23.9993C12.3287 23.9993 14.4428 24.6352 16 25.6697M16 8.33639C17.5572 7.30183 19.6713 6.66602 22 6.66602C24.3287 6.66602 26.4428 7.30183 28 8.33639V25.6697C26.4428 24.6352 24.3287 23.9993 22 23.9993C19.6713 23.9993 17.5572 24.6352 16 25.6697',stroke:'#4B5563',strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),'checkbadge':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:48,height:48,viewBox:'0 0 48 48',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M17.9993 23.9993L21.9993 27.9993L29.9993 19.9993M15.6687 9.39336C17.1038 9.27884 18.4662 8.71453 19.5619 7.78076C22.1189 5.60172 25.8797 5.60172 28.4366 7.78076C29.5324 8.71453 30.8947 9.27884 32.3298 9.39336C35.6787 9.6606 38.3379 12.3199 38.6052 15.6687C38.7197 17.1038 39.284 18.4662 40.2178 19.5619C42.3968 22.1189 42.3968 25.8797 40.2178 28.4366C39.284 29.5324 38.7197 30.8947 38.6052 32.3298C38.3379 35.6787 35.6787 38.3379 32.3298 38.6052C30.8947 38.7197 29.5324 39.284 28.4366 40.2178C25.8797 42.3968 22.1189 42.3968 19.5619 40.2178C18.4662 39.284 17.1038 38.7197 15.6687 38.6052C12.3199 38.3379 9.6606 35.6787 9.39336 32.3298C9.27884 30.8947 8.71453 29.5324 7.78076 28.4366C5.60172 25.8797 5.60172 22.1189 7.78076 19.5619C8.71453 18.4662 9.27884 17.1038 9.39336 15.6687C9.6606 12.3199 12.3199 9.6606 15.6687 9.39336Z',stroke:'#007ABD',strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),'spectraBackgroundLogo':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:629,height:807,viewBox:'0 0 629 807',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M155.35 384.598C22.04 384.731 -50.5339 218.96 41.6946 124.989L370.474 -210.002L405.115 4.20929L235.903 176.068C222.848 189.37 232.348 212.283 250.911 212.265L473.541 212.041C606.852 211.907 679.425 377.679 587.197 471.65L258.418 806.641L223.777 592.429L392.988 420.571C406.044 407.269 396.544 384.356 377.981 384.374L155.35 384.598Z',fill:'url(#paint0_linear_3240_66110)',fillOpacity:0.48,fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('linearGradient',{id:'paint0_linear_3240_66110',x1:'240.999',y1:'-289',x2:'252.522',y2:'770.375',gradientUnits:'userSpaceOnUse'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('stop',{stopColor:'#F4E3CC'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('stop',{offset:'1',stopColor:'#F4E3CC',stopOpacity:'0'}))),'redirect':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:20,height:20,viewBox:'0 0 20 20',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M8.33301 4.9987H4.99967C4.0792 4.9987 3.33301 5.74489 3.33301 6.66536V14.9987C3.33301 15.9192 4.0792 16.6654 4.99967 16.6654H13.333C14.2535 16.6654 14.9997 15.9192 14.9997 14.9987V11.6654M11.6663 3.33203H16.6663M16.6663 3.33203V8.33203M16.6663 3.33203L8.33301 11.6654',stroke:"currentColor",strokeWidth:1.6,strokeLinecap:"round",strokeLinejoin:"round"})),'download':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:20,height:20,viewBox:'0 0 20 20',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M3.8335 13.3346L3.8335 14.168C3.8335 15.5487 4.95278 16.668 6.3335 16.668L14.6668 16.668C16.0475 16.668 17.1668 15.5487 17.1668 14.168L17.1668 13.3346M13.8335 10.0013L10.5002 13.3346M10.5002 13.3346L7.16683 10.0013M10.5002 13.3346L10.5002 3.33464',stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})),'superfast':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:21,height:21,viewBox:'0 0 21 21',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M13 10V3L4 14H11L11 21L20 10L13 10Z',stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('circle',{cx:8,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),'secure':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:22,height:22,viewBox:'0 0 22 22',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M9 12.001L11 14.001L15 10.001M20.6179 5.98531C20.4132 5.99569 20.2072 6.00095 20 6.00095C16.9265 6.00095 14.123 4.84551 11.9999 2.94531C9.87691 4.84544 7.07339 6.00083 4 6.00083C3.79277 6.00083 3.58678 5.99557 3.38213 5.98519C3.1327 6.94881 3 7.9594 3 9.00099C3 14.5925 6.82432 19.2908 12 20.6229C17.1757 19.2908 21 14.5925 21 9.00099C21 7.95944 20.8673 6.94889 20.6179 5.98531Z',stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('circle',{cx:8.33,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),'nativewp':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:23,height:21,viewBox:'0 0 23 21',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M12 5H7C5.89543 5 5 5.89543 5 7V18C5 19.1046 5.89543 20 7 20H18C19.1046 20 20 19.1046 20 18V13M18.5858 3.58579C19.3668 2.80474 20.6332 2.80474 21.4142 3.58579C22.1953 4.36683 22.1953 5.63316 21.4142 6.41421L12.8284 15H10L10 12.1716L18.5858 3.58579Z',stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('circle',{cx:8.66,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),'googlelove':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:22,height:22,viewBox:'0 0 22 22',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M4 4V3H3V4H4ZM20 4H21V3H20V4ZM6.29289 11.2929C5.90237 11.6834 5.90237 12.3166 6.29289 12.7071C6.68342 13.0976 7.31658 13.0976 7.70711 12.7071L6.29289 11.2929ZM10 9L10.7071 8.29289C10.3166 7.90237 9.68342 7.90237 9.29289 8.29289L10 9ZM13 12L12.2929 12.7071C12.6834 13.0976 13.3166 13.0976 13.7071 12.7071L13 12ZM17.7071 8.70711C18.0976 8.31658 18.0976 7.68342 17.7071 7.29289C17.3166 6.90237 16.6834 6.90237 16.2929 7.29289L17.7071 8.70711ZM7.29289 20.2929C6.90237 20.6834 6.90237 21.3166 7.29289 21.7071C7.68342 22.0976 8.31658 22.0976 8.70711 21.7071L7.29289 20.2929ZM12 17L12.7071 16.2929C12.3166 15.9024 11.6834 15.9024 11.2929 16.2929L12 17ZM15.2929 21.7071C15.6834 22.0976 16.3166 22.0976 16.7071 21.7071C17.0976 21.3166 17.0976 20.6834 16.7071 20.2929L15.2929 21.7071ZM3 3C2.44772 3 2 3.44772 2 4C2 4.55228 2.44772 5 3 5V3ZM21 5C21.5523 5 22 4.55228 22 4C22 3.44772 21.5523 3 21 3V5ZM4 5H20V3H4V5ZM19 4V16H21V4H19ZM19 16H5V18H19V16ZM5 16V4H3V16H5ZM5 16H3C3 17.1046 3.89543 18 5 18V16ZM19 16V18C20.1046 18 21 17.1046 21 16H19ZM7.70711 12.7071L10.7071 9.70711L9.29289 8.29289L6.29289 11.2929L7.70711 12.7071ZM9.29289 9.70711L12.2929 12.7071L13.7071 11.2929L10.7071 8.29289L9.29289 9.70711ZM13.7071 12.7071L17.7071 8.70711L16.2929 7.29289L12.2929 11.2929L13.7071 12.7071ZM8.70711 21.7071L12.7071 17.7071L11.2929 16.2929L7.29289 20.2929L8.70711 21.7071ZM11.2929 17.7071L15.2929 21.7071L16.7071 20.2929L12.7071 16.2929L11.2929 17.7071ZM3 5H21V3H3V5Z',fill:"#334155"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('circle',{cx:8,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),'zerobloat':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:21,height:22,viewBox:'0 0 21 22',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M12 3L12.4472 2.10557C12.1657 1.96481 11.8343 1.96481 11.5528 2.10557L12 3ZM20 7H21C21 6.62123 20.786 6.27496 20.4472 6.10557L20 7ZM4 7L3.55279 6.10557C3.214 6.27496 3 6.62123 3 7H4ZM20 17L20.4472 17.8944C20.786 17.725 21 17.3788 21 17H20ZM12 21L11.5528 21.8944C11.8343 22.0352 12.1657 22.0352 12.4472 21.8944L12 21ZM4 17H3C3 17.3788 3.214 17.725 3.55279 17.8944L4 17ZM11.5528 3.89443L19.5528 7.89443L20.4472 6.10557L12.4472 2.10557L11.5528 3.89443ZM19.5528 6.10557L11.5528 10.1056L12.4472 11.8944L20.4472 7.89443L19.5528 6.10557ZM12.4472 10.1056L4.44721 6.10557L3.55279 7.89443L11.5528 11.8944L12.4472 10.1056ZM4.44721 7.89443L12.4472 3.89443L11.5528 2.10557L3.55279 6.10557L4.44721 7.89443ZM19.5528 16.1056L11.5528 20.1056L12.4472 21.8944L20.4472 17.8944L19.5528 16.1056ZM12.4472 20.1056L4.44721 16.1056L3.55279 17.8944L11.5528 21.8944L12.4472 20.1056ZM5 17V7H3V17H5ZM21 17V7H19V17H21ZM11 11V21H13V11H11Z',fill:"#334155"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('circle',{cx:8.33,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),'compiler':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:23,height:22,viewBox:'0 0 23 22',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M13 8V12L16 15M22 12C22 16.9706 17.9706 21 13 21C8.02944 21 4 16.9706 4 12C4 7.02944 8.02944 3 13 3C17.9706 3 22 7.02944 22 12Z',stroke:"#334155",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('circle',{cx:8.66,cy:8,r:8,fill:"#5733FF",fillOpacity:"0.24"})),'check':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:24,height:24,viewBox:'0 0 24 24',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M18.3602 6.35938L10.2002 14.5194L6.84016 11.1594L5.16016 12.8394L10.2002 17.8794L20.0402 8.03937L18.3602 6.35938Z',fill:"#22C55E"})),'xclose':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:24,height:24,viewBox:'0 0 24 24',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M17.9396 7.75255L13.6916 12.0005L17.9396 16.2485L16.2476 17.9405L11.9996 13.7045L7.76357 17.9405L6.05957 16.2365L10.2956 12.0005L6.05957 7.76455L7.76357 6.06055L11.9996 10.2965L16.2476 6.06055L17.9396 7.75255Z',fill:'#F87171'})),'heart-logo':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:30,height:30,viewBox:'0 0 122.88 107.39',fill:'none',className:'inline-block'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M60.83,17.18c8-8.35,13.62-15.57,26-17C110-2.46,131.27,21.26,119.57,44.61c-3.33,6.65-10.11,14.56-17.61,22.32-8.23,8.52-17.34,16.87-23.72,23.2l-17.4,17.26L46.46,93.55C29.16,76.89,1,55.92,0,29.94-.63,11.74,13.73.08,30.25.29c14.76.2,21,7.54,30.58,16.89Z',fill:'#1e293b',fillRule:'evenodd'})),'astra-logo':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:40,height:40,viewBox:'0 0 40 40',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('rect',{width:40,height:40,fill:'url(#paint0_linear_2971_69719)',rx:'19.9999'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{id:'pattern0',fillRule:'evenodd',clipRule:'evenodd',fill:'white',d:'M21.4952 11.3394C20.9235 10.2236 20.3519 9.1077 19.7647 8C18.8281 9.91771 17.8915 11.8354 16.9549 13.7532C14.6364 18.5003 12.3178 23.2475 10 27.9951C10.5404 27.9966 11.0808 27.9959 11.6214 27.9952C12.475 27.9941 13.3286 27.993 14.182 28.0003C15.6282 25.1883 17.0646 22.3713 18.501 19.5543C19.698 17.2067 20.8951 14.8591 22.0979 12.5143C21.8965 12.1229 21.6959 11.7312 21.4952 11.3394ZM27.9861 23.9851C26.6931 21.4095 25.4001 18.8341 24.1035 16.2602C22.7358 19.0199 21.3667 21.7797 19.9945 24.5372C20.5591 24.5368 21.1236 24.5369 21.6881 24.537C22.4409 24.5371 23.1936 24.5373 23.9466 24.5364C24.1569 24.9967 24.3625 25.4589 24.568 25.9212C24.8774 26.6167 25.1867 27.3123 25.5118 28.0008C26.4201 27.9926 27.3285 27.9938 28.2368 27.995C28.8245 27.9958 29.4121 27.9966 29.9998 27.9948C29.3282 26.6584 28.6572 25.3217 27.9861 23.9851Z'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('linearGradient',{id:'paint0_linear_2971_69719',x1:'39.9998',y1:'-1.19212e-06',x2:'-0.0009992',y2:'39.9998',gradientUnits:'userSpaceOnUse'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('stop',{stopColor:'#E976FD'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('stop',{offset:'1',stopColor:'#583EDE'}))),'starter-canvas':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{viewBox:'0 0 1916 872',fill:'none',x:'0px',y:'0px',enableBackground:'new 0 0 1916 872'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('image',{href:`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB3wAAANoCAMAAAAcVGsfAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAADAFBMVEXt7u/q6uvm5ufFx8rO
z9Hw8PLV1tfy8vT19ff29vj39/l6iYxeXm10dYK4wcP19vvj4+FygYVkYXKytba+wsNnanlscYCI
kJSXnJ+orLCDjZHc3d4eKjaMk5ckM0BLTlrl6OyfoZ9TVGFFS1GbqamSl5olOkiwv780PEyEhok6
RFXQ1ttYWGfc5eU/SV31+fjf6Ojx9fT////09vX//v/+///9/f3n7fD+/Pf5/v799O4+RUdcYWD1
04+UxczXlV5ip7zmvYRSkqPw/Pr36cWdaV1KUWfB3ea/lltkenz86t212eK6gWf24aq/1M2Ed2pJ
c3rSroyFgnlxm6HY6O65sKSTsrTq0rTmxaCUjYKlz9bX49CimYxbX3XRuKCHucHCmHbB09bYzcKp
vL3O4upVWnFbb22Mo6DR3d7TpXjksmKihGNsbGZPVWx8aFdPZWa4po7/wQebuLmXtraiursyMjI3
ODgpLS8lKCobJycgISMZHB4qOTY0Pz9FTGKqqKFYNyxPKRtDIBI7GQ4xEgpQOBNtOx93ZTxnX1Vr
VT1uSzJkURRYQx82LSILBwUMDQ0CAgJnVk4mDAcZCgYnGRE+NygXFhIoKB8OFRikubBePzRfDwlt
HxBfTCpGJhxCPT1XU1ZRMCVANw8OHiEtQ09xWiZKRkdzd3LQN13rDFP+AVExLQtPSA4rMyWjOg7I
uTTwmxmHeBGpnhvfexRqcSPQXg0OXgxMBxC6ShDt9fJ+UUUQJShRQzO90stSTVD8zAm3bSH6v8/O
ETXtkKXbc21fRj2OIw+0ycDX4eFjTUZIPirBu7H3+fVzYw25zsUUM0Lj2M7Qw7bq5eDw9Op2eE5R
TjsNLTGzzJ/A1LB0mk+DjWOJq2iZtnynwo6FnYpcflTM3MFJWltJYkWgs5qBfTV+p645TTEZNjId
YGpYXSyMZEQER1KCZyaTdkqmnHGQTiOWdiuhhC2zfkiZi0r+2jf1ukPPjjiyIyGzUTfIakvYVjDj
fj3zlHXtoj71x2wng5Gk69RSAAAAAWJLR0QyQNJMyAAAAAd0SU1FB+YKDgQPO5c8YJoAAIAASURB
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
gFHxrkavpXjYOZH02s75JqRm7nwX+5kmrCxx7CfJ4cv1csXhm0h6bed8E1Kzdb5ciyoOX66XKw7f
RBJ3vokk7nwTShy+XC9XHL6JJO58E0nc+SaUOHy5Xq44fBNJ3PkmkrjzTShx+HK9XHH4JpK4800k
ceebUOLw5Xq54vBNJHHnm0jizjehxOHL9XLF4ZtI4s43kcSdb0KJw5fr5YrDN5HEnW8iiTvfhBKH
L9fLFYdvIok730QSd74JJQ5frpcrDt9EEne+iSTufBNKHL5cL1ccvokk7nwTSdz5JpQ4fLlerjh8
E0nc+SaSuPNNKHH4cr1ccfgmkrjzTSRx55tQ4vDlerni8E0kceebSOLON6HE4csVJ6mS1yenmUxp
2evfTnvOzTh8l4TmPVrc+b5EzXS0uPNdEor3rjD+4vB9pZSctXLlyiyd/Gf623H4LgXNf7S48315
mvFocee7FBT3XWH8xeH7Ksm4MlZZqmlvyOG7BBSH0eLO96Vp5qPFne8SUPx3hfEXh++rpMIJ77iV
hmlvyOG7BBSH0eLO96Vp5qPFne8SUPx3hfHXUoKvoBVftElFrTDDW76WSp/4jiuc9obxga9ZZxSm
vkYep+kFb7zo6dd0NOMwWjN2voKKSZhyZPBaGgSd/vnjpjUkLfZWWyzNfLTi63yFTJ35RbcRtTi0
ptf3o/Ss4r8rjL+WEnz1y6cPDshSLV+G70TNamPkIrPmhfd6bbTyZcLXnPfWm28W6GM/7UadfE61
XP/cJyrmvBn9Lvq8cX+VRzcOozVj56t5k0k/5cjQtRsNoil3beZzn7LmreeP6yusmY9WPJ2vuL7g
zTffytE+/1aq5TB+b2WppvwoCZqkxd52i6D47wrjryUEX8sM4Ktd/qbeYrLEwte4WrPYA71klEtv
tG3y78KGncWc1dmC1rABxiOiwizZOGlfAN+ktavTle/zzx33V3l04zBas3G+mtXZYI+mgi98njQq
lWFDtkl8gcmymF9bZzXz0Yqj8y3O2JCrErJXL3tBQGK5AcZ3bY4w1UfpRZ/FV1Px3xXGX0sIvpGv
bRZdzkq92ZSUr4Odhj5DhPPp69m7T7V87Wodc74WY2H6OpXJmLNhmV7QGGCvka0X1Pk6Q5Y25g6v
lyZmGaxc0IQrzcZkOBZzl6txw8NAZQv6N94pNJqEjPRcI37gzYaVeUZLZDxNGoNu1Tp254x3MlZT
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
ggAAAABJRU5ErkJggg==`})),'ottokit':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:40,height:45,viewBox:'0 0 137 141',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('g',{clipPath:'url(#clip0_94_39)'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('rect',{width:136,height:136,rx:36.6154,fill:'#D2F059'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('g',{filter:'url(#filter0_dddd_94_39)'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{fillRule:'evenodd',clipRule:'evenodd',d:'M67.9896 95.4199C83.1335 95.4199 95.4077 83.1441 95.4077 68.0011C95.4077 52.8581 83.1335 40.5822 67.9896 40.5822C52.8456 40.5822 40.5714 52.8581 40.5714 68.0011C40.5714 83.1441 52.8456 95.4199 67.9896 95.4199ZM67.9896 116.387C91.1203 116.387 110.46 100.156 115.241 78.4616H128.141V57.5385H115.241C110.459 35.8451 91.1195 19.6148 67.9896 19.6148C44.8596 19.6148 25.5201 35.8451 20.7384 57.5385H7.83594V78.4616H20.738C25.5189 100.156 44.8588 116.387 67.9896 116.387Z',fill:'url(#paint0_linear_94_39)'}))),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{fillRule:'evenodd',clipRule:'evenodd',d:'M196.46 91.2888C208.288 91.2888 217.876 81.7005 217.876 69.8728C217.876 58.045 208.288 48.4567 196.46 48.4567C184.632 48.4567 175.044 58.045 175.044 69.8728C175.044 81.7005 184.632 91.2888 196.46 91.2888ZM196.46 107.666C217.332 107.666 234.253 90.7452 234.253 69.8728C234.253 49.0003 217.332 32.0797 196.46 32.0797C175.587 32.0797 158.667 49.0003 158.667 69.8728C158.667 90.7452 175.587 107.666 196.46 107.666Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{fillRule:'evenodd',clipRule:'evenodd',d:'M243.079 80.4664C243.079 80.5443 243.081 80.6222 243.081 80.7001V75.933V80.0348C243.081 95.2752 255.42 107.634 270.653 107.666C270.658 107.666 270.665 107.666 270.67 107.666C270.684 107.666 270.699 107.666 270.713 107.666C270.727 107.666 270.741 107.666 270.755 107.666C270.761 107.666 270.768 107.666 270.773 107.666C276.29 107.654 281.428 106.025 285.739 103.228L278.076 90.6257C275.989 92.0801 273.45 92.9329 270.713 92.9329C263.59 92.9329 257.815 87.1582 257.815 80.0348V60.0664H281.614V45.3332H257.815V44.1999H257.813V22.6667H243.076V45.3332H235.146V60.0664H243.076L243.079 80.4664Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{fillRule:'evenodd',clipRule:'evenodd',d:'M292.966 80.4664C292.966 80.5443 292.966 80.6222 292.966 80.7001V75.933H292.968V80.0348C292.968 95.277 305.31 107.637 320.545 107.666C320.552 107.666 320.557 107.666 320.564 107.666C320.576 107.666 320.587 107.666 320.599 107.666C320.61 107.666 320.623 107.666 320.633 107.666C320.64 107.666 320.647 107.666 320.653 107.666C326.173 107.656 331.313 106.026 335.624 103.228L327.963 90.6257C325.875 92.0801 323.337 92.9329 320.599 92.9329C313.475 92.9329 307.7 87.1582 307.7 80.0348V60.0665H331.498V45.3332H307.7V44.2V22.6667H292.961V45.3332H285.033V60.0665H292.961L292.966 80.4664Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{fillRule:'evenodd',clipRule:'evenodd',d:'M372.348 91.2888C384.176 91.2888 393.763 81.7005 393.763 69.8728C393.763 58.045 384.176 48.4567 372.348 48.4567C360.519 48.4567 350.932 58.045 350.932 69.8728C350.932 81.7005 360.519 91.2888 372.348 91.2888ZM372.348 107.666C393.22 107.666 410.14 90.7452 410.14 69.8728C410.14 49.0003 393.22 32.0797 372.348 32.0797C351.476 32.0797 334.555 49.0003 334.555 69.8728C334.555 90.7452 351.476 107.666 372.348 107.666Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M415.406 107.585V22.7552H430.74V69.7553C434.364 68.9912 437.807 67.501 441.07 65.2847C444.333 62.9919 447.161 60.0496 449.553 56.4577C451.944 52.8658 453.032 50.0835 453.973 45.4217H470.286C469.125 50.3128 467.822 53.5154 465.212 57.7188C462.675 61.9221 459.703 65.5903 456.294 68.7236C452.886 71.857 449.335 74.1878 445.638 75.7164C448.466 76.557 451.293 78.009 454.12 80.0725C456.948 82.0594 459.593 84.505 462.057 87.4091C464.524 90.2367 466.625 93.37 468.365 96.8092C470.106 100.248 471.266 103.84 471.846 107.585H455.533C454.809 104.069 453.612 100.898 451.944 98.0701C450.277 95.166 448.32 92.644 446.072 90.5042C443.898 88.2879 441.469 86.492 438.786 85.1163C436.177 83.7407 433.495 82.9001 430.74 82.5945V107.585H415.406Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M476.262 22.6667H492.127V23.8C492.127 32.5629 485.024 39.6665 476.262 39.6665V22.6667Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M492.128 45.3333H476.261V107.666H492.128V45.3333Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{fillRule:'evenodd',clipRule:'evenodd',d:'M504.453 80.4664C504.453 80.5443 504.453 80.6222 504.453 80.7001V75.933V80.0348C504.453 95.2752 516.793 107.634 532.025 107.666C532.032 107.666 532.037 107.666 532.042 107.666C532.056 107.666 532.071 107.666 532.085 107.666C532.099 107.666 532.113 107.666 532.127 107.666C532.134 107.666 532.14 107.666 532.145 107.666C537.664 107.654 542.801 106.025 547.111 103.228L539.448 90.6257C537.361 92.0801 534.822 92.9329 532.085 92.9329C524.962 92.9329 519.187 87.1582 519.187 80.0348V60.0664H542.986V45.3332H519.187V44.1999H519.185V22.6667H504.448V45.3332H496.52V60.0664H504.448L504.453 80.4664Z',fill:'#FEFEFE'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('defs',null,(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('filter',{id:'filter0_dddd_94_39',x:-14.4962,y:12.1708,width:164.97,height:141.437,filterUnits:'userSpaceOnUse',colorInterpolationFilters:'sRGB'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feFlood',{floodOpacity:0,result:'BackgroundImageFix'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{in:'SourceAlpha',type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0',result:'hardAlpha'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feOffset',{dy:14.8881}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feGaussianBlur',{stdDeviation:11.1661}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feComposite',{in2:'hardAlpha',operator:'out'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feBlend',{mode:'normal',in2:'BackgroundImageFix',result:'effect1_dropShadow_94_39'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{in:'SourceAlpha',type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0',result:'hardAlpha'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feOffset',{dx:-3.34982,dy:11.1661}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feGaussianBlur',{stdDeviation:6.51353}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feComposite',{in2:'hardAlpha',operator:'out'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.04 0'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feBlend',{mode:'normal',in2:'effect1_dropShadow_94_39',result:'effect2_dropShadow_94_39'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{in:'SourceAlpha',type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0',result:'hardAlpha'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feOffset',{dy:3.72202}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feGaussianBlur',{stdDeviation:3.72202}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feComposite',{in2:'hardAlpha',operator:'out'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feBlend',{mode:'normal',in2:'effect2_dropShadow_94_39',result:'effect3_dropShadow_94_39'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{in:'SourceAlpha',type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0',result:'hardAlpha'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feOffset',{dy:3.72202}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feGaussianBlur',{stdDeviation:1.86101}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feComposite',{in2:'hardAlpha',operator:'out'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feColorMatrix',{type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.08 0'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feBlend',{mode:'normal',in2:'effect3_dropShadow_94_39',result:'effect4_dropShadow_94_39'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('feBlend',{mode:'normal',in:'SourceGraphic',in2:'effect4_dropShadow_94_39',result:'shape'})),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('linearGradient',{id:'paint0_linear_94_39',x1:67.9887,y1:116.387,x2:67.9887,y2:19.6148,gradientUnits:'userSpaceOnUse'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('stop',{stopColor:'#072F50',stopOpacity:0.95}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('stop',{offset:1,stopColor:'#172A39',stopOpacity:0.75})),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('clipPath',{id:'clip0_94_39'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('rect',{width:136,height:136,rx:36.6154,fill:'white'})))),'sureforms':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:40,height:40,viewBox:'0 0 64 64',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('rect',{x:0,y:0,width:64,height:64,fill:'#D54407'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('g',{transform:'translate(2 2) scale(2.0)'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M9.14307 6.85645H22.8574V11.4279H11.4288L9.14307 13.7136V11.4279V6.85645Z',fill:'white'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M9.14307 13.7139H20.5716V18.2853H11.4288L9.14307 20.571V18.2853V13.7139Z',fill:'white'}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M9.14307 20.5713H16.0002V25.1427H9.14307V20.5713Z',fill:'white'}))),'custom-layout':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{viewBox:'0 0 1736 660',fill:'none',x:'0px',y:'0px',enableBackground:'new 0 0 1736 660'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('image',{href:`data:image/png;base64,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
AAAAAAAAUKgQIAMAAAAAAAAAAEChQoAMAAAAAAAAAAAAhQoBMgAAAAAAAAAAABQqBMgAAAAAAAAA
AABQqBAgAwAAAAAAAAAAQKFCgAwAAAAAAAAAAACFCgEyAAAAAAAAAAAAFCoEyAAAAAAAAAAAAFCo
ECADAAAAAAAAAABAoUKADAAAAAAAAAAAAIUKATIAAAAAAAAAAAAUKgTIAAAAAAAAAAAAUKgQIAMA
AAAAAAAAAEChQoAMAAAAAAAAAAAAhQoBMgAAAAAAAAAAABQqBMgAAAAAAAAAAABQqBAgAwAAAAAA
AAAAQKFCgAwAAAAAAAAAAACFCgEyAAAAAAAAAAAAFCoEyAAAAAAAAAAAAFCoECADAAAAAAAAAABA
oUKADAAAAAAAAAAAAIUKATIAAAAAAAAAAAAUKgTIAAAAAAAAAAAAUKgQIAMAAAAAAAAAAEChQoAM
AAAAAAAAAAAAhQoBMgAAAAAAAAAAABQqBMgAAAAAAAAAAABQqBAgAwAAAAAAAAAAQKFCgAwAAAAA
AAAAAACFijWvTmyaZl7XPccMw7hl6pJf0KbXjra7NrRb/pHdteA6FA5X6o8AAAAAAABAbsuzANmu
3XsLxAsy0zRVL6TOLVGX/II2vXa03bWh3fKPK10LrsOtLyf9EQAAAAAAAMhteRYgk6SQurXzuv5X
tHPXnhylK1O6VF4XtcAIO3M2R+lo08vRdteGdss/cnItuA63tpz2RwAAAAAAACA3sQYZAAAAAAAA
AAAAChUCZAAAAAAAAAAAAChUCJABAAAAAAAAAACgUCFABgAAAAAAAAAAgEKFABkAAAAAAAAAAAAK
FQJkAAAAAAAAAAAAKFQIkAEAAAAAAAAAAKBQIUAGAAAAAAAAAACAQoUAGQAAAAAAAAAAAAoVAmQA
AAAAAAAAAAAoVAiQAQAAAAAAAAAAoFAhQAYAAAAAAAAAAIBC5dYMkDlsSkxMULLdTNkgW2KCEpPt
Mq8r41uNKYfdJpvNQbsgb5gO2Ww22R3cgQAAAAAAAACAm6eABshM2ZMTlJiYoCR7Ji/WN3+u0qVL
6/GZ51wbNunz0qVVeugMnbuq8+RmFRyy22yyZRoYMJ377LkduIpS6MT3NGL0Ih3O6/a4AUyHTTbb
5R+CL1fmbDu7Mmsq02F3tmNuNOPhRRox+j19vT4qr5vgxjCdbXV5v04JRrs+V+jbKWmzbfOUZ0i6
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
64a4DhWaq2/IJv26fbq+jG2m9k0qSKc2acXfR+UT1EZdGjjXB2rYvo0WH1utRd99r3MdmimkSIJ2
hS7Vlos+qt+/uWvNIalYsZLysJzQpsULVT7OV2aJjmraqplKHlyvhd9N0rkOzRVS0kcx53Zrc9Kd
Gtalcl63wM1tS0tddWy/QodXLNPYSRHq3ryWfC7t15pl2xVdpK4GtqpwWba+1bromR5h+mTun/pm
frBe7l1NyZt+0Y9hNdSqRgn5JkZo074kefjUUYWAayj3jVakslp3q5x+24UNOr7xH/3jPjL0rg6q
ummh/vrpJyW3b66AMys1d49UsnVrNSwiZ4ArQ99KGbVXrVkX9bnmRZ485e1vkXFmvf5aV0IhRc9r
69atbsuklVDd5jU17+QBzZjwkyLbN1fAxS1adeiiiklKnVSzQmN1rbpJM92ut39ilI7sPq2yPfup
Sf6ZXzEbV35GqkqIWgVs1Ir1P2tcYke1rmro6IbVOmErIemCK5GPQq6hn1fqNFj3nPxWs3bP0cd7
FimoWi1VK2GV4iN04KSX2j/+oO7K4TMqZ/xVPNBDlhPbNH9+abX2NlWyS6Mb9HzPLO+mrEUGAAAA
AACAAqeAjGtJ0LoFk3XIp5KGP9AxfXBMknxaqdezd8on+lvNXRkjWazy8fGRl0fKlFQWWX185OPl
kffrFqUwLLJ6esrTI7MSGfLw9JSnNWUqLquqdfmXht5dU8Gx+7RgznT9MnOFtl4qrSolJclHDXv3
V7NyPjq9br5+m7dL3p36qnMpT3mmrF1UoZOef6SFqhaJ0va/5uu39TGq/0BftSrmluaK55FkeMjT
01NWS75pybRW83DWJfOi+anh/cM0uH01+ZzdpDnTpmvOxggFN+qlZ55qlxr4UoV2eu6JXmpWKV67
/5qvX+as0AFVU6dHhunhemkvqK2122tgwzLyPL9dcxYeUqKPZK3SRS8P7qC6QbHOY6fN0pLt8Spb
qUSBbjvD4ix32q2as7as1OEJPXPPnap2yXkvzVhxUGb1Nhr83H1q6J964nRtUrJJX/Wq5qOEbX/o
540X5Vu6nPwPr9CMadP1y5w1OlXqTvV/oqczsJQfZdavSzTWY090053+EQpdMF0L9koNegzRy50q
ZJNNxjbP4bnSqaAOg+5WXf94bf9run5bG656fbuqvtuzxb9+Xz3To77K2k5pzYJZWnKylPo81FFV
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
zq1Wz7Sp2kybTTE2Q/6epmKSXAmUxXSNpl2XEkxZfaxu53BO8ZhoKYDTv5nnNOPHOWrXpoWmrdiu
V+9slA/ml43U3BE99Venefq6d2BeF6ZAKoj9+DJ2m6KTdHk/NO26lGBXvCklJSUrOt5wTcOoy6Zs
zKyfF7Waiks20+0DAAAAAAAAbn2mbDaHrJYs3ont+kUDxkgfTx8sj6kvaNTiJCnZ0CtPz5LRcbim
PlpL9sQ4bf9xmP6zxvnGzrTdpX9/P0h3+HrK0D79POg9Jb82Qr5ffamFMpWc0ExvTH5IpZaP1fDf
j0lmshKaP6/f/nWnvD1MJcdv05ShX2up1ZBkKrnNy5o+pG6Oa3Q18leALJ3aGjC8kToePyspWCkj
SOze6Udjmcnxikm2uo08y549MUZxiZJXlmuCOUeBJaV+90pda8ktE0XHpaWQ1Uf+3g7FxLmOuxSj
6GjXOSzJuhRjk6e/+yJ2Gc9hla/7fjPlGC/ZY9LSWX3Tj55JqUtqSXNpnbP4+Hh98MEHioyM1PHj
x/XUU09d9nI9MTFR3377rdatW6fFixfr008/VZEiRW58YXLCtGvzthg92rS5AgPj1GbxSc04W00D
yqS03TGNf/eQku6/QzXX7tKnkc5rckfTBvq4Y5CKWA2dX7VG7baV1NzOiXpoVpwzW5uvPh3RWM0y
vpw/v08jxoarxXNt3c7hnOJxSqUmGte2ZN60w7U2X9g6Ld02QM/PriL1+VEzHrxDD5S7zqCBay2+
1CCFryOTJPGKSfszg7T73UzWpZhYxdskW0KsoqO90vWF9P0gs76Udl5ZfXL8rLjVFLh+nJn9m9Xi
Z+mX9zOMLju/X299E6ZVCZJ91hrN8/DUyKdbqVegXZdO7taIyee1yZBS+vmnnYLl46HUfv7fhtF6
ca1Nd7VtqE/bFKz+CgAAAAAAAFwre+Jxhf59Qs07lLpi2hqPTtLUhpPVc2p5ffvB3SopSWaydk16
Wh/4va5pU5wj06KWvKfBo5dowkfdFex6EfvnuF366JdJelQRWj76ZY0atEa+vV3HhC/XB899oikt
/qehd0Ro+ZhPdGbQl5raNUhShJYvici1+uffeefsiTp0aJuKpg6dc65ZlHEtr/ML31TLEYt0PgdZ
msnxWv9lT93d915N2pNVmp36uve96tbX+bm763itv5Qs0y2P6PXfqlNqmn7q9Poind/zo7r1Hanp
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
WyJT+x+/DaY1OR2yXDhqvpN/9oeb+fqY7Y1/9294Ts3GGGY++BDLGsyiv+npfzJ7zgNHTzLbiYm5
jRfvKOK7N9xcX8rsZ+ceXW/PaCU85mhGGvrfzfJnYeIDDes1ixcXxNQOCP6CyRff1ejvhtkeTczn
fzhuqYlZvLJg7nFBZCO28Oj6mZpm+6Kjv9PA6J+/w5O1garz3kZpVQxlZeXBsy/mWIFAgF279zJ+
3OgzOm/tuo2UlZczacJYrFYrJpOpSef5/X48Hg/LVqwmOiqK0aOGn5/eExERERERERERkQtWzSyy
mn+P/vnb9Q/NReT88+W+xw9vLuX+lT9Qyk85xspVa+nXtzdG47kdJNaqxnSPHjWcTz77ipWr19Gn
dy9iops2G6y0rJw9e/fhcrkZfYmCYyIiIiIiIiIiInJ65yI9roicG2nzXiftzqcVHJPzplUFyACu
vvIy1q7byNJlK6l0OJp0TkR4OD26d2Pa1MktXX0RERERERERERERETlD/e45cY1XkebU6gJkUDOT
TGkSRUREREREREREREREpDloVV8RERERERERERERERFpUxQgExERERERERERERERkTZFATIRERER
ERERERERERFpUxQgExERERERERERERERkTZFATIRERERERERERERERFpUxQgExERERERERERERER
kTZFATIRERERERERERERERFpUxQgExERERERERERERERkTZFATIRERERERERERERERFpUxQgExER
ERERERERERERkTbF3JyFe73elm6fiIiIiIiIiIiIiIiIXIAsFkuzld2sAbLNW7Y1Z/EiIiIiIiIi
IiIiIiLyLTVq5PBmK7tZA2QDB/ZvzuJFREREREREREREREREzpjWIBMREREREREREREREZE2RQEy
ERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVMUIBMRERERERER
EREREZE2RQEyERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVMU
IBMREREREREREREREZE2RQEyERERERERERERERERaVPMLV2Bxni9Xnw+P8FgsEnHGwwGzGYTFoul
pasuIiIiIiIiIiIiIiIirVyrC5C53W42b95Gbm4eVc7qJp0TZg8lMbEzQ4cOwmaztXQTRERERERE
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
dJBmhIiIiIiISKunNchERERERERERERERESkTVGATERERERERERERERERNoUBchERERERERERERE
RESkTVGATERERERERERERERERNoUBchERERERERERERERESkTVGATERERERERERERERERNoUBchE
RERERERERERERESkTVGATERERERERERERERERNoUBchERERERERERERERESkTVGATERERERERERE
RERERNoUBchERERERERERERERESkTVGATERERERERERERERERNoUc3MWbjAYWrp9IiIiIiIiIiIi
IiIiIsdo1gBZiM3W0u0TEREREREREREREREROYZSLIqIiIiIiIiIiIiIiEibogCZiIiIiIiIiIiI
iIiItCkKkImIiIiIiIiIiIiIiEibogCZiIiIiIiIiIiIiIiItCkKkImIiIiIiIiIiIiIiEibogCZ
iIiIiIiIiIiIiIiItCkKkImIiIiIiIiIiIiIiEibogCZiIiIiIiIiIiIiIiItCkKkImIiIiIiIiI
iIiIiEibogCZiIiIiIiIiIiIiIiItCkKkImIiIiIiIiIiIiIiEibYm7pCjTG7fbg83kJBIJNOt5o
NGA2W7DZrC1ddREREREREREREREREWnlWl2ArLraycZNW8g5kEtVVTUYTnNCEMLCQklOSmT4sCGE
htpbugknCLhcHHEFCQuzE2lp6dqIiIiIiIg0H7fbg9fnJdjEAY8i0vYYjAYsGugsIiIiLaxVBcjc
bg9fzv2a2NgYJk0YS1hYKAbDqSNkwWCQqqpq9mdk8eXcr7ny8kub9QOW3+miwB0Eg5H4KBtNiXcV
L1/G+Hlu7p59JQ8POM+dKiIiIiIicp5UVzvZvGUb2dm5OKqrWro6ItJKhdrtpCS33oHOIiIi0ja0
qgDZqjXriI2NZvjQQZjNZgwGQ5MCZCEhIURFRbJx81ZWrVnHRZMnNFMN/WTNXcz0lT4MIbG8+9tx
DA853RQ3ERERERGRbz+328NX8xbQs2c3Lrv0YkwmU0tXSURaqYqKSvbtT+eLr+Zx1RUzNZNMRERE
WoSxpSvQ0P70THr36onNZsNqtZ7Rfzabjd69erI/PbP5Kug9xMKdPsLCzES7Snh/SzVKGiIiIiIi
IgKrVq+jZ89upCQlKTgmIqcUGRnB8GFDiImJYdXqdS1dHREREWmjWlWAzOFwEB0dhdlsxmQyYTKZ
MBqNp/yv7jiz2Ux0dBQOh6PZ6ufZncNbZQZuuqwrsyzw+bZsKgLHH+XHXeXiSJmT/DInxVVe/Mcf
EvTjrHJRWHvMkXIX1f6m1UFERERERKQ12p+eSWLnzi1dDRG5gDT7QGcRERGRU2hVKRYBTCZTfWrF
06VXbMhgMDTvKMWgh40bSjhkjmDMgO7Y0tL59/ZDzC/uww3t6uKMAVxlB/nqwz38bb8ft81En66d
mB3TcJ5ZAFdxNh98ksmHB7wcDoDdYuEH35nGzckt0uUiIiIiIiJnzVHl0MwxETkjkZEROKqab6Cz
iIiIyKm0ugAZ8I2CY2dy/DcRcOzn471g79GBEeFWrIMisW8vZ96WUmZdEocJwFfKl69t45eHzYxP
7cStI+0UrT/EH9d6GpRUzsL/7eL3+TZ+PLMHE+Igf3ce+c4W6WoREREREREREREREZE2p9UFyM4m
0NV8QbIAxWsPMSdg4PrBiYQD9GzHFeZy3l+bTtZFcfQwQyAnnVdyIWZQD16+sxdWgP7JJL22kDt2
1M0iqyC3yIAhNIKh/RPpFmJiQN8eaDlaEREREREREREREWluXp8Pv8+H3x8gEAxA8OzLPCUDGA1G
TCYjJrMZi7nVhSWkjdIrsSn8pSzc5gTs9Ekwc6jUCcQzMCGd93OLWZDpo0cvM8XZZewH7h7YMOBl
p1dnK+xw1/6cyKVTMvlgZTkPPLWYIV3bc+NFvRmVGE6ksXlnwYmIiIiIiIiIiIhI2+T2ePB4vOxP
z+RA7kEKioqprKzC5/M163XNZjMREWG0j48jKbELPXt0w2q1YLNq2oi0LAXImsB3IJ13DoHZ5Obp
FxfxdP0eI1Z8vL02m7t69cCIAQPgCgaAo+uSub0NQ/AGUi6exLyBuXy9PJtXdhdy/3NHuPqWiTw+
PLL+LBERERERERERERGRs+UPBHA5XWzcso1tO3bj8XixWMyYTCbs9pDap9rNJ0gQj8dLTm4e6Zk5
rFyznkED+jJ8yCBC7CGYjHoqLi1DAbLT8rF3YzG7MDCkZzzTO1ga7HOzenURy7fnsdHVnbGJ4cQZ
XCzemcmPU1OIsBjwuktZkeZtcI6LymIDhqhOTLuyE1NHb+dHT+Xx4fpcHh7eryZ9o4iIiIiIiIiI
iIjIWfL5/BzIy2Pp8tUUF5cSYrPRvVsy3bqm0DmhPVFRUc2e8tDr81FeXk5efgGZWdkcPJjP+o1b
ycjKYfLEsSR17ozZbGrprpI2SAGy0wi6svhiiw+DJYLv3TSaSyIb7vUwrPJrVm0u5+NNVYwek8h9
Hcp5asde7nKVc2dfC4Vbi9jgMwN1QbI8Xnsui8CoBHqEQUlmAVtsFoalxCg4JiIiIiIiIiIiIiLn
hD8QYF9GJnPnL8ZgMJCU1JnRw4eSnNQFgGAwiNfrpdrpJBCoWYvMYDRgMpowm02Yz1HgzGI2Ex8X
R3xcHIP69yHnwEHWbtxMXt5hPv50LpdOv4jUnt01k0zOOwXITsO7r5gFdjvJvZKYHHn8XitDRycw
JKuEtXsOUD2uL3d8zwvvZfHGkTKeLrJw7fi+PMp+0pZ5iLQARNIn2cJzG/P5KAhWq52rJyRx34xO
Ld1UEREREREREREREfmWOJh3qD44NnhAXy6aPL5+n9vtobSsnP0ZmeTlH6aivAKf30+o3U58fBwp
SV3ompJEiM2GyXRuZ3clJ3UhOakLi5euZOuO3cydv5iwUDvJiV1ausukjWlVATKj0Yjf78disXyj
8/1+P8ZzHGW2DhzNooGnOKDHMN77TYOfo7txx/e7cccxB3VixcS6f7dn2nfaM+2c956IiIiIiIiI
iIiICLg9HhYtXUkgEGDY4AH1wbEg4Kx2snrdRjZt2X7CeZWVVRwpKGLX7jQ6dmzHqGHD6NYtCes3
fGZ/KnV12rR1B4uWruTWG6/FZrW2dNdJG9Kq5izGREdRVFwC1EzvbKq6Y4uKS4iJjmrpZoiIiHxL
eHEUFePwnn1JTb6io5gyV6ClGy4iIiInFcDtqKCioprz+BHh3LehqrYNp3r04KumoqICh1ufTUTk
XAji9zqpqqygrKSY4uJiikvKqHA48fgCNP1JqEjTrNuwmcLCYjp16njMzLHKyko++WJeo8Gx4x0+
XMinX85jy9YdeH2+ZqnnRZPH06lTRwoLi1m3YXNLd5u0Ma1qBlnfPr3ZtXsvsbEx2ENCmjx1MxAI
4HS52LV7L3379G7pZoiIiHxL7OftH/0Vfv0G3xtwfq64972f8Vbnv/GXGe1auvEiItJCAm7H0YCE
xU6k/dyPVpazUcLGt19meXEq1z48i9SWrs43bMOm915mWUlvrvrptfQ92Usscy7Pf5RG/ITvcc/4
+DO+itdZgfP4KKLRRni4rX60ctDnotrlwV/7kjearISEhmA21J0QxOd24nL7CAAYjFhCQrFbGo53
DuB1VuPy1j5gN5qx2e3YTAbAS3WFk7pHmubQSEJb1ZMgkbYgiK+6gvKKSvIzVrJy5T727dtFXrUB
Y2QX+vYdxMgxo+iXFE9kVCQRdjOGs7+otHFer4+t23dhMpkYP3pE/Xa3x8OXcxeSe/DQGZW3dMUa
QkJCGNi/DwbDuX+Fjh89gg8+/oKt23cxZuRwLBa9Wcn50apeaSNHDOXzL+exZu0GUnt2JyqqabPB
ysvLSdufgc/nY+SIoS3dDBEREREREfmGSja8zSsryrBH2DH3uIwfzeh+dgX6PVS73ATNYYTZWlUS
lTMQxOeqxuU1Youwo5DhKTTpfhsJjYgl0hhDWLM9hQ6Q/tVzfLLPiNliOvqwO24Cs2ePJg7A5+TI
7qXMXbmbEo8RUzCALaYv42dMpk9HO2bAV3WEfWsXsWz7IZxBA5gj6TZuJpcM6kSo2QAEcJcfYseS
uazMKicQDBK0dWLIxTMY1zMOm/EAy/77FRk+J5VOH6mzHuHaXi19k0TakIAHR/Ehds39D//6dCsF
lZVUewEMhEQlkNS+kr1L3mbJZ+8QGpPEmBtmc+uUfnSOD8eiKJmchb379uN0ukhJrlnrq86a9Zs4
cIbBsTrLV6+jR7dkwsLCznl9k5O6kNglgeycg+zdt58B/fq0WN9J29KqAmQAV8ycwfoNm1m1Zj2V
jqomnRMRHkb3bl2ZNnVyS1dfRESk+QVclJX4CYsPq39A5nUUU+YPIzYqBNMxx9jxlZfitsUQ5iul
zFV7Qkgk7cKb+ngtgLO8tD7Voj0qjoan1qRFrPsphOjj61W/z0x4bBR240nODYls6Z4VEZFWI5mL
Zl9Od7Pt7Is6vIVP5q3F2+dW7hx75rOAWgcHmUs+YElaBybfP/MCnbV1njTpfscy+PofMLhZK1JB
STlgjqf7kCQi6jaHJRBS+89A9kLe/nIHgfi+jJncl9iy3axcs4Uv3vUR9qMr6GasZt/Xb/FpupGO
3QYxIimMvL3r2b/gXdzWe7h+QCRGXz6r3v8vGyqiSEodQ88OVWRs28GGTz6C22ZzUedkLpr9XSam
f8E/v8po6bsj0rYEPVTmrOSVP/2TldWx9Jt5JwM2PMfnewGsTPjZyzwyMYyq5X9i1j/9XH21hW2f
/pX7F4znwUfvYWRSBFYFyeQbyso+AECvHkcHGjndbjZvPX1axZOprqpm45btTBo/plnq3KtHd7Jz
DpKVfUABMjlvWl2ADGpmkmkmmIiIyEmUrufp+9O44rV7GG4BCLDrrZ/x++xbeP7P0+kEULCMxx8s
5q43p5HztwdZOPhRbq5+kZfXAfhxDriZp24d1qQgmbMih6UvPcvHB8DvLGfgd//JveNqgmBeRzHr
3nuM/26pKcfvHMDsp25mTFQIJrxse+8xXq7fF8OMX/+Ca7vVBPG8jmLWvfUbXttRG9QbdQd3uE5b
HRERaRPM2MLCqB+fHPDgcnrw1OWhOy7NXNDvwely4/PXrOBiMNkIDbMRcFbgLMwip6CK2BQHFRVW
jLZwwk0uKqp9GK0hmH0uPIG61HM16ezcHh+1RWE027DbbZia8pAy6MPtdB1dS8ZgxBoajtVXkzby
mPR2ATcOh5tAgzSSAa8Lp7tBuj2LnTBbgCpHMQdzDlPiDKW6ooIKzNgjQ2sGpAS8uJzuY/rGbLNj
t9bOWvJV17TVFkZI0Em1p+Y4kzWM0BADPmc1Tm/NNqM1lLCQb5DaKxjA43bi8fhr0gBiwGQJwW63
YPS7cFR5CJhDiAy1Hj3HW02F04cpJIIwq+H07Wikv2rWQ3PgDtT0Bye73yfMJDv2vJrSambpOT1+
goDBZCX0rBYE8hLwAlF9mDh1HI2F6sqKCvECXUfOZGxfC4ZgV9wHdzM3q5DCSugW2MiqvW6Mva7g
llkDsAHDB7bj85c/ZOeqLRT0n0T7jHWsK4K4MbO4eXJHAIZ3D+f1V5aybvU+Jl7fD1uYGZu9VT7+
EfkW8+PMW8XzjzzD9qTrefyp2+mT9U+u/F/dfjM2g5vySh9+gw1z8XyKu33Js//ax//++ARP/srD
A//3UyZ2sdO0BWhEjnW4oAiALp0T6rft35+B13N264il7UtnwtjRGI3nPnpbV9e6uoucD/qEJCIi
cqGJ68e4nq+yavt3GD7MAoF8sg+GYM89wCEvdLKAN+8Aub1TaQ/kAJmf/5N9v3qWl28HKGbpnx/h
e2+E8P59g0+bpmnVfz5h0JNP8XIcFC39Oz959m3GjbyH4SYXm954hH/HP8jrz/UEavf/ZRHJT8wk
0ZjNvvCf8HLdvsVPcu8ryxj35+l0CrjY9MZDvFQ1m6efG1/z0GjvHL7zF+h4lpm0RETk28dzZCuL
F20jvcRBIOAnYIik2/iZzBjcmRCDh9L0NSxYvY0j5X4CGDFFDeS62VOoWvwqX+z1AFC6eQ7/2WEg
bsyd3B6zhOc/SiN24HhSineSXhmg+6U/Yka3CrJWLWBV2iHK3H6CAR/WjsOYdukEesWc5h0z4KGq
IJ11i1ewo8BBECNGSxh9r/weg3Pe5pUVRcemtyvdyDsvL6Oo9yweviYVfE7yty9kwfoMSt1BDAYD
IclTuXWSk0/eWMkRN0AOi//zKsvoyeX3X06PgJvyvB2sWLSe/WVuDAQIGiPpNGQSF4/sQZzNWL+O
Vtyo6xnnWcWStCKqXAHaD7qGK8eFkr10PqszS3C5A0T2uZQbZgzgdE1t5AaxbdECtmYWU+UHfyBI
ZLeJzJw+hE5V63nn1ZUUJU7j/ptHYK99nubc8THPz88j8bL7uG2A+fTtOL6/gOPXQzOd7H6Pij2u
wieuo+arPsKe5V+xZFcxPpMNW3wq03p4T2hqo+uK1TlmfbEqKqqAUDeOigqsnBhsjU1JJcFeTF7a
Ng4n9yLMuY+0fAuhHVNJjgIyiikGYuLbUx9atHUnuQPszMjioGMS1uISAGLaN1i/NaY7yRFLyc/N
5iD9SGmOX0oROaWAI50P//Q0m3vex3O/m057E5Rm7+dorqwqvvjTg5RO7sShpauoAlbv3A9j+3H7
n56h/e9/xNN/+pBOT95KaviFmh5YWlJlpQOA6OijSxjlHTp81uWWllVQUVlJdNS5zwBTV9e6uouc
DwqQiYiIXHDiSOoWwosb9/KjYQMgfytrbRdzae95rN91F8MHw66Na+kz9lria8dxWybfxy29j54/
+apJvPCHHey9bzADTnO1XjfdweS4mn/HT76Uyf/6K5v33sPwdsv4YMVw7n4ulsKi4poD+o9j1L/m
sq1gJokde3LL9S7KiorxAnRJJTGrgGKgU8EyPljRg9ufH390RHXva/n5hE95q6W7V0REWh3HwSzK
o/sycVQ7Qr2F7F6xij1ff0xown1cErqVTz9ZxZG4AUy9JJUoKsjcXIITSBg2k8tC1/LR2oOE95zE
Jf0isMVFQu3A5JLdO0m6+k7u61k3V62Y7APQefjFjI02U31gFYs2ruWj+XH87KZBnCrhozd/DW+/
vZpyWwe6DphE36RQqjK2UulvWhsD2Qt57+sdmJPGMmVkJ0Kr89mS5cYb0YOJM01s/Xo+uysSGDJz
NF2IJAHwHlrF+2+vpyIiiX7jBtMtrJrMrWvZtepD5nju5DtTO9cPhHHsWsy2viO5ZHIZG5dvIGfL
Z8zJi8TYri8XT4N9K1eze+fnzEvsxc2DzzC1ZXUemeUx9J04mnahPgp3LWX1nq/5OKwT907rS++4
NazM2ccu5wiGhwJBJ2lpORhsfRjZLwzvocVNbsepnPR+n07QQ9aCt/hib5CoxP6MHZwMB7aycM2B
Ew49sOwN5qafpJyY0dxy6whqwnFe/AErIa5tfPzKJnyBIKGdhzNt+jh6xNUG0doPZ8akXN78egnv
vr4CQ9CH25DIJZcOp70RiIgnxgQleZkUV0UQZjQQ9OaSVwDgwe2ByJg4LIYCCrIzcKQkYjIECVRl
kl8JBFy4z+xOisg5UrHqNd45OJhfPXEJ7WungFkjYmuycNQd5Mpi1bys2h8MxEbWBjJM7bnkgR+x
6s6/8ObaK3j84uiWbo5cgPz+mg8gZtPROYgVlZXnpGxHVVWzBMjq6lpXd5HzQQEyERGRC1DvERdh
f+MAh/x9YeNmQsbex6X+dP6ck49/AGRl92Dc9XFAIQDdOsYdW0C79nQjv0nXSjr+3DqFBWSykVcf
23PsQ6t4aFcG/qhySg6s5Pl/LOKQkZp10Rhz9FxzMl3iEBEROa3Yodcxy+vG5/PjD3YkfnA2exbn
kJ/ngHbFlAKhHbrTPbETIdau9OhtqQlAdOxFr4odANjik+nVs3ZYRm2AzNhtAtN6NlxovhtTb+mM
x+fF5w8S6DCWQ7s+Ytuhg+Qz6BQzcdzsXrGKokAkA6+4lZldawNMPfvWXO7g6dvoKC3Hb4D45FS6
dYzAautOzwEmDEaI7Rng4BKAMDr37EXNJDQX21aspYh2jL/2FibUZNejV+92GJ9/i00bV5M+6Xrq
VvDwdhjLrKk1afq6GQv4vy8yKA6kcveVNen/+lgL2fvBbvIP5cPglNNXuKGoYVx3nRuPz4fPH6Rj
7BBy9iwhJ/8QDoYzdERn1n6Vw749ToYPs4NzJ7uzDYQPG0ov85m141TCTna/T8e1nQ273RjjJ3Dt
TRPoaAT69qVLyEu8tqb4mEOTp3yX2RNOUo7RdjQtKDF0HTKG5KR2UJhDbnY66Xlr+WiOgTu/O4VO
JvAeWsmnX+dg6DSUi0YnY6/OYe3Szcz7dCXt7phKl479GJa8hRUHlvH2+zl0jjbjLckn3wVgwGAA
c8+hDGqXw/adn/BWWTfi7QGqC/IoADAYzjxdpoicE9Hjb+e6OX9k1foDDJmcRITNQFj/sQwNXcm6
6sAJxxtDOzNlcGcAgu5KDmzaQHbCdfxyTHRLN0UuUFarBbfbg9vjIcRW+7nkrFIHN3CuyjmO2+Op
r7vI+aIAmYiIyIWo92Auzn2brYXDYKONCQ/EEl/Qjfw3dnJkFKzM78Y9sac43+/HazadXT57kwkL
o/npP2Yz+ISC/OR++hS//CqO7/35KSbHAoUL+dWP84+emxhFhB+OVsKP/+zSoYuIyLdR0IezMIdt
27ZzsKiQUqcPt6Mm9Y7H7YakIYzqnMHmzHm8kRVBp37DGTs0lY7RoVhOEx2I7ZBwzJfigLuMvD2b
2JFxmKLSapzeaqqcNGEmTj4HDwFhfRjS9QxnX9WK7DuSPjtKydz4Fv/eHkuvIZMY1q8LHSLrUvYd
L4+cA0BUL/p0bLDZmExyF9i0t5SS8gZt7ZRQPwPObKtpdXi3Hkdncse0IxYocp/5nCOf8wg527ew
I6+QwjIPXk9lTRoxlxs3EN9vJD0X5bInbSfOoSNgzz5yjBGMSE0GMs6oHc0iL48cILp3n5rgWK2O
neKBYwNkQb8P38k+r5jMBDDX3q94Bkyt7d2evRg0diI7P3qaz/dtZ1f+FDp18bB31TqK6Mz0a6cx
KAygF50Dh3hu3jpW7p3ATYNiGX71DbBgAZtyizly2ERM6sWMifiYJVl2Qm2AOZlpN1yGef5y9hUc
4UhlKElDp9Bu01ds8YQT2sxdJyInEdaP7/5+No/e/wgv8Udmj+1EdLuLuP36j0j/+CCVDheeQBCD
0UpIeARdrvwVs3r7cVeWcWj1azz6Whl3PvNz+oWdfVWkbYqKiqSgoIjiklI6J9S8wUZGRpx1uQaD
gfDw5nlhFpeU1tdd5HxRgExEROSC1I7k3gfZmZ4N5hHcGgvEDmV6/lIy0iH/4sn0bnC011GJ098O
uwnAiyP9APn9+tD+bKrQMYkBIQvYn+NiQLeQ2jiXH6fDizW8mj1bsxl1z6M1wTH8OCurjqYT6diF
vrmLWJt3CYlJNaPD/M4c9mcDyS3dtyIi0qq49vPVux+TbuvKmLGTGRgbS0LRAp6rS0tl7Mi4W35A
n5ytrF+7kfTtX/PmjjRm3nUjAyPOZP5MgCNr3+fN1eV0HDyF0QPbEdM+yI633mbjaQM0vppBHiFB
OGbwR20VjTUhE7+vwc6A/9gB2GG9uPyOzhzet4lVG3aTsep9duwcxR13XkRna2PXNGEyAQEv3gAc
jaL58fkBgwnTaZatsdmsnD0X+79+i0/2hZAyZhyTBrUjtmMBC5+bS13iMMy9GNI/nL2b9rGrui/B
tBxMcRMZnHwm7TDW7PL7j3ZxMID/XIxiNwQxAUa/jyDUz7ryNRIJO7D8v6dIsTiGW24dTuNjlCzE
xUYDZVS7ACqoKAfCutDBfvSo0PZdCCePysoKIB5sHRl++e0Mr90f9GYy70UwxiXTpe75ZEQvplzX
iym1PwYc63h3oQFL3xQ6IiItpuMlPPxYAX98/Ff8btd3+f7NQ+h87Z94vPN7fPDBGnaVebFE92PM
9ddz4/AOVOXvZss7L/GfTRFc8dijXKJfYDkLnTp2oKCgiJzcvPoAWaeEjmzfueesyo2MCGuW9IoA
Obl59XUXOV8UIBMREbkgxTJobCovPfci5ssf5acA9GTE5L/w6+fMXP3YPcccnTvvY5YO/Q7DIwH2
88Hru7j8wXtoYuKhk1RhPNdf+iFPvDaf/j+tW0usmLXzChhz23iSekfy+rpNFKb0BMrZ+N58cutS
LMb2Z/KQObw6dxOTZ/UEoGzjZ3yVD/ooLCIixzi4h/1OiBk4gVF9O2Dwezi8v+LoflclpX4zYV0G
MfW6AQxe9QavrcliR3o1A4eEgcGIAQh4nLg8bsBCSKMXKiVrXxHQnWFTBtLDFMTn3ENpk9aJT6Br
ipXdGXvZmjGKqEQrVjP4vV6C1nBi4+MxUUB+dibV3ZMx46M67xANiw5UlVFtsBPbcwxX9hjK/q9e
4tM9O9h5+CI6JxkxGAG8uJxuPIDR3o6kJCs7MtLZeWA0UQlWLIYgXlcOWYfAHNWVhCjqsi03owPs
TXND9FAmjOpHB4Mfz5F9VBx3VHKfPkRsWc++9Wtx55hIuHRI7WeHJraDWOJNUHAom6zq7iSZwVeV
R37VcRdq7H5bTxMpjO9MJ9NucjPSODI8ihibCbxu0vcfOuHQJqdY9FRT4QlitVgw4sPrKmBnWgkG
Sxc6xQFYsYZZMBRnkHFkNHFxVowBDyWZGVQYLCSF1AQvfU4HHsyYTAaCPi+Vu9ezxxVClzH9avsv
gKe6Gp/BgtkUxOf1UrB2Cwcs0Qwa2E0PfURaWFjv2/jzs/15829/548/f5PE4ZczcfQYbnvo0vpj
ygp2sui1V/l8Qy6Grlfw8LO3MTj2LC4qAnTvlsy2HbvZn57ByKGDMJvNdOuahNVqwePxfuNye6f2
bJb6+nw+9qdnYDAY6N5No2bl/NFnJRERkQtU/OCxDI0/TNLwox9Q23cdRLv4Lozqfeyx3a67HPvH
T/Dr2qHc3W7/Lff2Pt0VLITHx3HsAmPHbut942+56+AfefqxZfVHTP7RU8QD8Tf+hMt/9CK/fgwg
hVt+dAtD8wpqT41l8s9/C3//Y+1+6Hb9o/zy0gN8Yj+rxI8iIvJtExJNjM1E6c6VrIzsQXhZJulZ
DdIAHlzG26uCDOjXkVCqydlbijU0jsSOtaGKiHbEW9Mo3L6YxfZELLZBTAtv9EJExNixlOSwbtEm
PB19FOxOo8gKOE9XyTAGjBnGusNb2P3ZaxxJHcSABChM349x5N1M75xCUmg6OTvm87ltGCnGfHbv
zqPh46nS7Z8w52ASA7pGYPYWsSc3QEhEUm0wJZKY9nbMxZmsnLcWl9VEu5njGTBmJBsLNrJtzluU
DhpIt9BqMndsJTcYTa8Jo0g2nq7e50IYUTE2TOXbWbUynO7hZWSlZ52YkjJxMIPiNrFi/TowJ3Fp
/dpvYU1sRxdSUkJJz9rK/M9sDEsxkb93J3n+467T2P0eeppFT6P6Mqj7GgozV/POexUMG9yOQM5u
DpSFnnDzzbYwzE3JonlgEa8sriC1ezfiyWPPnmyKvWHEDRjPwJiaezpwbH+2Fu9h3Ycf4Rjeh9jy
PWzYWUlou/6MGVAzOv/AivdYV5VA5442KrIy2JdfjTV5IpcOq3t6XsGOLz8mIySJpGg3BzIyOFAa
IG7AFVzUVY98RFqF2MHc9qf/cePhXSxZ8DlL/vsFb5cdfQewRHel37hLePDJcQxOVE5FOTd6dOtK
VFQkhw8XkrY/g359UokID2fooAGs37SVQCBwxmWG2GwMGtC3Weqbtj+Dw4cLiY6Ooke3ri3dfdKG
6NOSiIjIhSp2PL96bvwxm+In/YSXJzV6MJN//hSTj9/sd1FWWsWJ48fMhMf05Jbnnjpu+/HbTlJu
g2NvabBl8nOnq9NT/Kple1VERFqbxHFcNbqUL3ccJm19GaFJ47hycgTvLsgk3GaEyC50NK5l5/oD
AJgiejBi6jQmJtSe33EE00YcYN6uUrK37iNp0iiwhBIVFVVzfr0wBkyfTt4ny8nM2cz6vBj6T7+c
kas+Yn1ZKKddLj5xCrdfH8OSVRvJyd3J+lwTtugujIwBwgZz2WWlfLlkN8VpmymL6cuUmZ3Z9NVG
SkNrSg5JSCZqTxqb19ckELQl9OeicRcxIAzATJ/xF5NRuooD+TvZGjaYqwASJ3LLrMiaa6ZtZj1g
ikhhxJRpTKwLQDXW1sa2GW2ER0XhDT1dS43YwqOI8tX1SWfGXTma0rk7OJK2nrKwZMZeMZmIdxeQ
Gd5w/bR4Bg+KZ8XCAqy9R9K/4TPgprSDMAZdehklXyxmT8leNlfE0GfKFYzf8AUbG96fxu73adsQ
xoDLb8C9YC6bDhxg5/o8YlIv4uoBGby5wHfc66SJItuTaM3jQNpmDgCm0ET6DxvPhAGd69eCs3W9
lFtmtWPJ4o1kb1lPtsFETLfRTJg+juTag0LD7bizs9iZD5gjSR4xmWljexFZXyULoaFQeXAvm3PB
FNKe/hcdex0RaR0sHftxye39uOT2lq6JtBUjhw1m0dKVrF63iW4pydjtIYweOYzs3FyOHCkiGGx6
nmKr1cqE8aOIiY4+5/V0Ol2sXrcJk8nEyGGDW7rbpI0xlJWVn4uM3ccIBALs2r2X8eNGt3T7RERE
2rhC5v7mQZaN+xt/mdHuxN0lK/nLb+eQecKOFG75w09q1w8TERE5vb8/8zx3zz77p35FK1/mlRVx
XPOra0nFgOFMlhFrTgE3jkoX/kZ2mUIivlkQpZUKuB1UuhptKSER4XyzpgYoWfVvXlrhZvjNP2aa
siedN8FgEPbN4S9z0kid9QjX9mrpGh3r36/9j5/ff19LV0NE5Fvp/Tmfk52TS68eXZl+8RTs9hCO
FBTy5fyFlJZWNLre5vFCQmwMGzKQ8WNGnvP6OZ0u5i9cwr70LFKSE7nh2itausuklVq5ai39+vau
X9v3XNEMMhERkW81E/boOKJPlrawkVloIiIiLc9F2eHDHA6JISEm5OyLOxfKd/D5O+sobWRXzIib
uXnEt2dUSdn2z3h3Q6MtZeTNtzA85kxK8+Nx+Qj4D7NlRzGWmFH0TWzpFrYlLsoOl+IqcbV0RURE
pAVcNHkcH378JfvSa9ZbuPiiicTFxnDtlTNZuWYdWVm5eLxe/H7/MTPKjEYjFosZm83G2FHDz3lq
RZ/Ph8vtZuHi5exLzyIyMoKLJo9r6e6SNkgBMhERkW+1U6VAFBERaX2MtnCiokrZ/PEcNne/lHun
d2vpKtWIGc7N9w5v6VqcF7EjbuHeEeeqtHy2LEmj8PAu9jhjGXD5ODp/eybbXQAOse7juWQCUVFR
nDaDpoiIfKvEx8Zy+aUX8+W8RaRn5lBY/Cmjhw+hW9dkLrloEjm5eaRnZnEo/zBulxcIYjAYiI2N
oWtyIv36pBIWFnrW9QgGgwQCAfx+P16vj8ysHNZu3EJ5eQVRUZHMnDGV+Nhvz2AjuXAoQCYiIiIi
IiKtxrkNzkjL81CatZcDpgj6TL2KGT21Mtb51Y0Z9yp9oYhIW9alUwKzrr6MZSvWcPBgPnMXLKFD
h3i6paTQKaEDI4YNwWo2U+104vP7sYeEYDHXhA38fj8VFZVnXQePz0d5eQWH8o+QmZ3NkSNF2KxW
uqYkMmnCGAXHpMUoQCYiIiIiIiIizUQBGhERkZYWHxvLrKtmsmXbTrbt3E15eSUbNm2tT63YML1i
czAYDBgMBkwmE2azifbt4xnUvy9DBvVv6a6RNk4BMhERERERERERERGRb7khg/ozZFB/0jOzOJCb
R0FRMY7KKrw+X7Ne12I2Ex4RRvv4OJISO9OjW9eW7goRQAEyEREREREREREREZE2o0e3rgpSiQBa
GldERERERERERERERETaFAXIRERERERE5KwZjfp6KSJnJhAI6G+HiIiItBh9ChEREREREZGzFh0V
jdvtbulqiMgFpLi4hOio6JauhoiIiLRRCpCJiIiIiIjIWevfL5XM7Bx8zbzIu4hc+AKBAG63m737
9tO/X2pLV0dERETaKHNLV0BEREREREQufCOGD+XzL+dhNpvo2L49BoOhpaskIq1UZWUV2QcOEAwG
GTF8aEtXR0RERNooBchERERERETknLhi5gw2bNzMilXrcFQ5Wro6ItJKhYeF06N7ioJjIiIi0qIU
IBMREREREZFzZsTwoXroLSIiIiIirZ7WIBMREREREREREREREZE2RQEyERERERERERERERERaVMU
IBMREREREREREREREZE2RQEyERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERER
ERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVMUIBMREREREREREREREZE2
RQEyERERERERERERERERaVMUIBMREREREREREREREZE2RQEyERERERERERERERERaVPMzVl4MBhs
6faJiIiIiIiIiIiIiIjIBchgMDRb2c0aIHO53c1ZvIiIiIiIiIiIiIiIiHxL2UNCmq1spVgUERER
ERERERERERGRNkUBMhEREREREREREREREWlTFCATERERERERERERERGRNkUBMhERERERERERERER
EWlTFCATERERERERERERERGRNkUBMhEREREREREREREREWlTFCATERERERERERERERGRNkUBMhER
EREREREREREREWlTFCATERERERERERERERGRNkUBMhEREREREREREREREWlTFCATERERERERERER
ERGRNsXc0hVojNvtxuv1EggEm3S80WjAYrFgs9lauuoiIiIiIiIiIiIiIiLSyrW6AFlVdTXbt+0k
79BhnE5nk86x2+107tSRgYP6ExYa2tJNaCZeykt8VJpMJERZMbV0dURERERERBpxpgMeRaTt0UBn
ERERaQ1aVYDM7XazaPFy2sfHMXniWEJD7RgMhlOeEwwGqa52kp6RxaLFy5k+bcq5/4DlcXPQESDE
biPeflxWSr+HonI/LquZLuGWZuydXF75Wzqvt0tg6QMDiG/GK4mIiIiIiHwTxwx4dDVtwKOItD32
kLYw0FlERERau1YVIFu/fhPxcTEMHTIQs9mMwWBoUoAsJCSEoZERbNy8lfXrNzFhwthzW7H0rcx4
s5wJFw/nxYtij91XksZvns5nRf8e7LylW0t3oYiIiIiISItwu90sXbqSmNhoJk8cR2RkREtXSURa
qYqKSvZlZLBo0TKmX3KRZpKJiIhIizCefRHnTmZWDr179cRms2G1Ws/oP5vNRu9ePcnMymnpZoiI
iIiIiLQ569dvomfPbgwfMljBMRE5pcjICIYPGUxsbAzr129q6eqIiIhIG9WqZpBVVVcTHR2F2WzG
aDSedvZYnWAwiMFgIDo6iqrq6pZuBhDA6/RQ6griCdbk1g4PtRJprYlHBv1eHFU+HD7wc+J+gIDX
Q1mVn+pAzf7I8OAZX8fvdJHvDBJhNxN0+3AEDMREhRCmBcxEREREROQcy8zKYfiwIS1dDRG5gPTu
1ZMv53597jMBiYiIiDRBqwqQAZhMpvrUik0NkAEYDAZMptYQ+QniqShh9Yp9vL7DRU4AbAYzF03s
zfdHtCPKasCVt5+35hUwryRIuT+AMWhh+pTe3Du6PeEmwOska8tunllUwkafiTh7CNfOiMJxhtcp
XbOWGQs9zBrTmbDcEpZUW/npd0cxI/abtUxERERERORkqqqrW8l3MhG5UERGRrSSgc4iIiLSFrW6
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
B+Xh7gqIiIiIiIjIz9+gQf1ZsmQ5JpOJyIhOGAwGd1dJRNqpyspKMg5kgaOeQYP6u7s6IiIi0kEp
IBMREREREZEzYsqUCWzduoPVa9dTVV3l7uqISDvl7+dPbPdohWMiIiLiVgrIRERERERE5IwZNKi/
LnqLiIiIiEi7pznIREREREREREREREREpENRQCYiIiIiIiIiIiIiIiIdigIyERERERERERERERER
6VAUkImIiIiIiIiIiIiIiEiHooBMREREREREREREREREOhQFZCIiIiIiIiIiIiIiItKhKCATERER
ERERERERERGRDkUBmYiIiIiIiIiIiIiIiHQoCshERERERERERERERESkQ1FAJiIiIiIiIiIiIiIi
Ih2KAjIRERERERERERERERHpUBSQiYiIiIiIiIiIiIiISIfi0ZaFGwwGd7dPRERERERERERERERE
pJk2Dch8vL3d3T4RERERERERERERERGRZjTEooiIiIiIiIiIiIiIiHQoCshERERERERERERERESk
Q1FAJiIiIiIiIiIiIiIiIh2KAjIRERERERERERERERHpUBSQiYiIiIiIiIiIiIiISIeigExERERE
REREREREREQ6FAVkIiIiIiIiIiIiIiIi0qEoIBMREREREREREREREZEORQGZiIiIiIiIiIiIiIiI
dCgKyERERERERERERERERKRD8XB3BVpisViora3D7nC0an2T0YiXlye+vr7urrqIiIiIiIiIiIiI
iIi0c+0uIKuoqGTzlm1kZ+dSZanGcIL16wF/Xz+iorowZPBAAgMD3N0EERERERERERERERERacfa
VUBmsVj4btFSIsLDOH/sSPz8fDEYjh+R1dfXU11tIX1fJt8tWsol06eqJ5mIiIiIiIibWCwWamrr
cLRyRBAR6XiMRiPeGglIRERE3KxdBWRr1q4nPCyUwYP64+HhgcFgaFVA5uPjQ1BQIJu3bGfN2vVM
njT+zFasppr0shZ+3Jk8iA3zweTuAyciIiIiItIOlFdUsGPHLg5k5VBdXe3u6ohIO+Xj40O3qC4M
HjyAoMBAd1dHREREOqh2FZClpWdw6cUX4u3tjclkanVAVl9fj8lkIqlnAl//7/szH5Dt3cTUt0rw
9DAS4NGkPhFRfPe7QYSfwV05aiwUVtrxDAjA7H1mmyEiIiIiItJWqi0WlixdTmJCDy68YCImk24l
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
IiIiInKOmz24E7MHd2JZainrD1SQUmAhv7IOS5399As/Dl9PE50CPEmK8GV4TCCTEkPcfShEAAVk
IiIiIiIiIiIiIiIdxqTEEIVUIoCmxhUREREREREREREREZEORQGZiIiIiIiInDajUT8vReTk2O0O
/d8hIiIibqNvISIiIiIiInLaQs1mrFaru6shIj8jhYWFhJrN7q6GiIiIdFAKyEREREREROS09evb
i32ZmdTW1rq7KiLSztntDqotFvampdOvby93V0dEREQ6KA93V0BERERERER+/oYOGcTC7xaTeSCL
iPAwDBjcXSURaacqq6rIOpiN0Whk6JBB7q6OiIiIdFAKyEREREREROSMmH7RBWzavI0NG7dSVV3l
7uqISDvl7+dPj7juDB0y0N1VERERkQ5MAZmIiIiIiIicMUOHDNRFbxERERERafc0B5mIiIiIiIiI
iIiIiIh0KArIREREREREREREREREpENRQCYiIiIiIiIiIiIiIiIdigIyERERERERERERERER6VAU
kImIiIiIiIiIiIiIiEiHooBMREREREREREREREREOhQFZCIiIiIiIiIiIiIiItKhKCATERERERER
ERERERGRDkUBmYiIiIiIiIiIiIiIiHQoCshERERERERERERERESkQ1FAJiIiIiIiIiIiIiIiIh2K
AjIRERERERERERERERHpUDzasvDq6mp3t09ERERERERERERERER+hvz8/Nqs7DYNyJJT0tqyeBER
ERERERERERERETlHDRk8oM3KbtOArC0rLiIiIiIiIiIiIiIiInIqNAeZiIiIiIiIiIiIiIiIdCgK
yERERERERERERERERKRDUUAmIiIiIiIiIiIiIiIiHYoCMhEREREREREREREREelQFJCJiIiIiIiI
iIiIiIhIh6KATERERERERERERERERDoUBWQiIiIiIiIiIiIiIiLSoSggExERERERERERERERkQ5F
AZmIiIiIiIiIiIiIiIh0KB7urkBLqqqqqamtwWF3tGp9o8mIt5c3/v5+7q66iIiIiIiIiIiIiIiI
tHPtLiArKytn67Yd5OTmYbFYWrWNr68vXbt0ZtDA/gQHB7m7CSIiIiIiIiIiIiIiItKOtauArKqq
msVLfyAiIpzzx4zAz88Pg8Fw3G3q6+uprq4mPWM/i5f+wLQLL1BPMhERERERERERERERETmmdjUH
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
tIyNG7cQF9udwMCAVm1XUVFJRuZ+TEaTwjERERERERERERFplaQ57/HZHHfXQkQA9m9cTuXNjysc
k7OmXQVkABdOncTmLdvYun0nVVVVrdrG39+fuNgYhWMiIiIiIiIiIiIiIj9DSXPe4zN3V0I6lHYX
kIGzJ5nCLhEREREREREREREREWkLZ3bARhEREREREREREREREZF2TgGZiIiIiIiIiIiIiIiIdCgK
yERERERERERERERERKRDUUAmIiIiIiIiIiIiIiIiHYoCMhEREREREREREREREelQFJCJiIiIiIiI
iIiIiIhIh6KATERERERERERERERERDoUBWQiIiIiIiIiIiIiIiLSoSggExERERERERERERERkQ7F
oy0Lr6qqdnf7RERERERERERERERERJpps4DM29uL3XuS3d0+ERERERERERERERER+Zny9vZqk3IN
paVl9We6UIfDgc1mo77e0eYHRkRERERERERERERERM5NBoMRDw8PjMYzO2tYm/QgMxqdlRURERER
ERERERERERE5HWc6HIM2HGKxLSorIiIiIiIiIiIiIiIicrqUYomIiIiIiIiIiIiIiEiHooBMRERE
REREREREREREOhQFZCIiIiIiIiIiIiIiItKhKCATERERERERERERERGRDkUBmYiIiIiIiIiIiIiI
iHQoCshERERERERERERERESkQ1FAJiIiIiIiIiIiIiIiIh2KAjIRERERERERERERERHpUBSQiYiI
iIiIiIiIiIiISIfi0dY7sFqtWK012B0Od7dV2gmT0YiPjzc+Pj4nXLekuo6Sqjrq7Of2+8fTZMTs
74nZz9PdVREREREREREREREROee1aUBmtVrZvWcvBYWF1NTUuLut0k54e3sTER5On949jxuSlVTX
8dH6g2w9UE651ebuarepIB8PBsUEcc3wbgrJRERERERERERERETamKG0tKy+rQrfuGkr1ZZqxowe
Sag5xN1tlXaiuKSU1WvW4efrx3lDBx1zvZeW7SOrtIZ7LkggNtzf3dVuU5mFVfxrcRrRId7cNamH
u6sjIiIiIiIiIiIiInJOa9M5yFLT9ykck6OEmkMYM3okqen7jrve11sPdYhwDCA23J97Lkjg662H
3F0VEREREREREREREZFzXpsGZFVVVQrHpEWh5hCqqqqOu05+RU2HCMcaxIb7k1+hoUhFRERERERE
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
GcmJljWI57K/P310mUcMvxY382lud/372GWdee0mIPMI7kbvmtU8/9TqwwsvfpqPZx8OjULG384f
Lvkt/35qruv5P/Lm/SXcvj64sSG+EUn0bowjPQiJTjocHCXN4s37c7n9tbk8XvXHZmUDEDqOu+/f
xO0vz2UFABfx1NzrWfrnwwFnyPjf8SbPN1kHBv/yn66eX8FMmnU9//7zyzy+Ei7949tcHxFMdK9u
h+cGCx3HQy/D3Huc6+Daz3Pvzzo8JJ/HEdu00BbfiAzmNxwHYPAvX+KhhsCto+rRj09+c+yne140
kk8A2OdaEsX1v4ni+uMU2WnYUD4Z1tIzzm2bsVaRaTEwbmDXVvcEFBERERERERERERGRs89QWlpW
31aFv/7We9z3f3e5u43STj33wkvcdvOx46khf1rOzqentsGe9/Hsw2lw3VTu79PyGoXLljNhWxjL
f9ef8BMVZ7OQlV9H5b5d3LPRiz/cOLR5T7ST0O/hRWx+fEIbtFlERERERERERERERBq0mx5kImdP
S8MjNucRGEjvTr6t+4BUZPPe54Vs4fTCMREREREREREREREROTsUkEkH1MLwiEcIOebQii0wJ/Dw
bxLc3SgREREREREREREREWklo7srICIiIiIiIiIiIiIiInI2KSATERERERERERERERGRDkUBmYiI
iIiIiIiIiIiIiHQobRqQmUwmbDabu9so7ZDNZsNkMh13HU+TEWud3d1VPWusdXY8TcqsRURERERE
RERERETaWptejQ8LDWX/gYMKyaQZm83G/gMHCQsNPe56SZ39WZde3CFCMmudnXXpxSR19nd3VURE
REREREREREREznkebVl4395JbNm6HYfDQXBQoLvbKu1EWXkF27bvpG/vpOOuN3tENxasO4DN7iDK
7Ovuarep7BILn244yOwR3dxdFRERERERERERERGRc56htLSsvi13kJ6ewb6M/VRVV7m7rdJO+Pv5
0yOuO/HxcSdc99sdh/h+Zz75FbXurnab6hToxYX9OjGtf6S7qyIiIiIiIiIiIiIics5r84BMRERE
REREREREREREpD1p0znIRERERERERERERERERNobBWQiIiIiIiIiIiIiIiLSoSggExERERERERER
ERERkQ5FAZmIiIiIiIiIiIiIiIh0KArIREREREREREREREREpENRQCYiIiIiIiIiIiIiIiIdyv8D
w4q4ff0hPhQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMTAtMDNUMDk6NDA6MTMrMDA6MDCkbUOv
AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTEwLTAzVDA5OjQwOjEzKzAwOjAw1TD7EwAAACh0RVh0
ZGF0ZTp0aW1lc3RhbXAAMjAyMi0xMC0wM1QwOTo0MDoxMyswMDowMIIl2swAAAAASUVORK5CYII=`})),'bookmark':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:24,height:24,viewBox:'0 0 24 24',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M5 5C5 3.89543 5.89543 3 7 3H17C18.1046 3 19 3.89543 19 5V21L12 17.5L5 21V5Z',stroke:'#4B5563',strokeWidth:'2',strokeLinecap:'round',strokeLinejoin:'round'})),'caret':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('svg',{width:20,height:20,viewBox:'0 0 20 20',fill:'none'},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)('path',{d:'M8 6L14 10.03L8 14V6Z',fill:'#9CA3AF'})),'star':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path",{d:"M13.9539 6.51343C13.9015 6.34266 13.8041 6.19076 13.6727 6.07517C13.5413 5.95959 13.3813 5.885 13.2111 5.85997L10.1805 5.40055L8.82517 2.53574C8.74921 2.37495 8.63162 2.23954 8.48572 2.14486C8.33981 2.05018 8.17141 2 7.99958 2C7.82774 2 7.65934 2.05018 7.51343 2.14486C7.36753 2.23954 7.24994 2.37495 7.17398 2.53574L5.8186 5.40055L2.78804 5.85997C2.61811 5.88583 2.4585 5.96074 2.32723 6.07624C2.19595 6.19173 2.09825 6.34321 2.04514 6.51357C1.99204 6.68394 1.98565 6.8664 2.0267 7.04035C2.06775 7.2143 2.1546 7.37281 2.27744 7.49799L4.47102 9.72813L3.95322 12.8765C3.9237 13.0532 3.94229 13.235 4.00687 13.4012C4.07145 13.5675 4.17943 13.7115 4.31854 13.8169C4.45766 13.9223 4.62233 13.9849 4.79384 13.9976C4.96536 14.0103 5.13684 13.9725 5.28881 13.8886L7.99958 12.402L10.7103 13.8886C10.8624 13.9717 11.0337 14.0089 11.2049 13.9959C11.3761 13.9829 11.5404 13.9202 11.6793 13.815C11.8182 13.7097 11.9261 13.5661 11.9909 13.4003C12.0557 13.2344 12.0747 13.053 12.0459 12.8765L11.5281 9.72813L13.7217 7.49737C13.8452 7.37272 13.9324 7.21429 13.9735 7.04025C14.0146 6.86621 14.0078 6.68362 13.9539 6.51343Z",fill:"#F59E0B"})),'chart':(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path",{d:"M2.70588 9.33331C2.31553 9.33331 2 9.63198 2 9.99998V13.3333C2 13.7013 2.31553 14 2.70588 14C3.09624 14 3.41176 13.7013 3.41176 13.3333V9.99998C3.41176 9.63198 3.09624 9.33331 2.70588 9.33331Z",fill:"#94A3B8"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path",{d:"M6.23529 6.66663C5.84494 6.66663 5.52941 6.9653 5.52941 7.3333V13.3333C5.52941 13.7013 5.84494 14 6.23529 14C6.62565 14 6.94118 13.7013 6.94118 13.3333V7.3333C6.94118 6.9653 6.62565 6.66663 6.23529 6.66663Z",fill:"#94A3B8"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path",{d:"M9.76471 9.33331C9.37435 9.33331 9.05882 9.63198 9.05882 9.99998V13.3333C9.05882 13.7013 9.37435 14 9.76471 14C10.1551 14 10.4706 13.7013 10.4706 13.3333V9.99998C10.4706 9.63198 10.1551 9.33331 9.76471 9.33331Z",fill:"#94A3B8"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path",{d:"M13.2941 6.66663C12.9038 6.66663 12.5882 6.9653 12.5882 7.3333V13.3333C12.5882 13.7013 12.9038 14 13.2941 14C13.6845 14 14 13.7013 14 13.3333V7.3333C14 6.9653 13.6845 6.66663 13.2941 6.66663Z",fill:"#94A3B8"}),(0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path",{d:"M2.70518 7.3333C2.90776 7.3333 3.10824 7.2513 3.24871 7.0933L6.23529 3.70795L9.22188 7.0933C9.49082 7.3973 10.0379 7.3973 10.3068 7.0933L13.8362 3.09328C14.0861 2.81061 14.0452 2.38994 13.7459 2.15461C13.4452 1.91861 13.0012 1.95727 12.7513 2.23994L9.76471 5.62529L6.77812 2.23994C6.50918 1.93594 5.96212 1.93594 5.69318 2.23994L2.16376 6.23996C1.91388 6.52263 1.95482 6.9433 2.25412 7.17863C2.38612 7.28263 2.54565 7.3333 2.70518 7.3333Z",fill:"#94A3B8"}))};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Astra_Admin_Icons);
/***/ }),
/***/ "./assets/src/common/common.js":
/*!*************************************!*\
!*** ./assets/src/common/common.js ***!
\*************************************/
/***/ (() => {
window.astWpMenuClassChange = function (path) {
const pageSlug = astra_admin.home_slug;
const pathMap = {
"custom-layouts": "custom-layouts",
spectra: "spectra",
woocommerce: "woocommerce"
};
const queryPath = pathMap[path] ? `&path=${pathMap[path]}` : "";
const pageUrl = `admin.php?page=${pageSlug}${queryPath}`;
const bodyClasses = {
settings: "ast-admin-settings-page",
woocommerce: "ast-admin-extensions-page",
"starter-templates": "ast-admin-starter-page"
};
// Remove all possible classes.
document.body.classList.remove(...Object.values(bodyClasses));
// Add the appropriate class if it exists in the map.
if (bodyClasses[path]) {
document.body.classList.add(bodyClasses[path]);
}
// Remove 'current' class from all items.
document.querySelectorAll(".wp-submenu .current").forEach(item => item.classList.remove("current"));
// Add 'current' class to matching items.
document.querySelectorAll(`.wp-submenu-wrap li > a[href$="${pageUrl}"]`).forEach(item => item.parentElement.classList.add("current"));
};
/***/ }),
/***/ "./assets/src/common/skeleton/Rectangle.js":
/*!*************************************************!*\
!*** ./assets/src/common/skeleton/Rectangle.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Rectangle_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Rectangle.scss */ "./assets/src/common/skeleton/Rectangle.scss");
function RectSkeleton(props) {
const {
width,
height,
style
} = props;
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ast-skeleton ast-skeleton--rect ast-skeleton--wave",
style: {
width,
height,
...style
}
});
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RectSkeleton);
/***/ }),
/***/ "./assets/src/common/skeleton/Skeleton.js":
/*!************************************************!*\
!*** ./assets/src/common/skeleton/Skeleton.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Skeleton_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Skeleton.scss */ "./assets/src/common/skeleton/Skeleton.scss");
function Skeleton() {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ast-skeleton ast-skeleton--wave"
});
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Skeleton);
/***/ }),
/***/ "./assets/src/common/skeleton/Spacer.js":
/*!**********************************************!*\
!*** ./assets/src/common/skeleton/Spacer.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Spacer_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Spacer.scss */ "./assets/src/common/skeleton/Spacer.scss");
function SpacerSkeleton(props) {
const {
height,
style
} = props;
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ast-skeleton-base ast-skeleton--spacer",
style: {
height,
...style
}
});
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SpacerSkeleton);
/***/ }),
/***/ "./assets/src/common/skeleton/Text.js":
/*!********************************************!*\
!*** ./assets/src/common/skeleton/Text.js ***!
\********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Text_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Text.scss */ "./assets/src/common/skeleton/Text.scss");
function TextSkeleton(props) {
const {
fontSize,
width,
style
} = props;
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ast-skeleton ast-skeleton--text ast-skeleton--wave",
style: {
fontSize,
width,
...style
}
});
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TextSkeleton);
/***/ }),
/***/ "./assets/src/common/skeleton/index.js":
/*!*********************************************!*\
!*** ./assets/src/common/skeleton/index.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ RectSkeleton: () => (/* reexport safe */ _Skeleton_Rectangle__WEBPACK_IMPORTED_MODULE_4__["default"]),
/* harmony export */ SpacerSkeleton: () => (/* reexport safe */ _Skeleton_Spacer__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ TextSkeleton: () => (/* reexport safe */ _Skeleton_Text__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Skeleton_Common_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @Skeleton/Common.scss */ "./assets/src/common/skeleton/Common.scss");
/* harmony import */ var _Skeleton_Skeleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @Skeleton/Skeleton */ "./assets/src/common/skeleton/Skeleton.js");
/* harmony import */ var _Skeleton_Text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Skeleton/Text */ "./assets/src/common/skeleton/Text.js");
/* harmony import */ var _Skeleton_Spacer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Skeleton/Spacer */ "./assets/src/common/skeleton/Spacer.js");
/* harmony import */ var _Skeleton_Rectangle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @Skeleton/Rectangle */ "./assets/src/common/skeleton/Rectangle.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Skeleton_Skeleton__WEBPACK_IMPORTED_MODULE_1__["default"]);
/***/ }),
/***/ "./assets/src/dashboard-app/DocsPopup.js":
/*!***********************************************!*\
!*** ./assets/src/dashboard-app/DocsPopup.js ***!
\***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/transitions/transition.js");
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/dialog/dialog.js");
/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @DashboardApp/pages */ "./assets/src/dashboard-app/pages/index.js");
const DocsPopup = () => {
const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
const kbData = astra_admin.astra_docs_data && astra_admin.astra_docs_data?.categories;
const docsTrigger = () => {
if (kbData) {
setOpen(true);
} else {
window.open(astra_admin.astraWebsite?.docsUrl, '_blank');
}
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.Tooltip, {
text: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Knowledge Base', 'astra'),
delay: 50
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-8 sm:w-10 h-8 sm:h-10 flex items-center whitespace-nowrap justify-center cursor-pointer rounded-full border border-slate-200"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
onClick: docsTrigger,
className: "text-xs sm:text-sm font-medium sm:leading-[0.875rem] text-slate-600 doc-icon"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", {
width: "30",
height: "30",
viewBox: "0 0 32 32",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
"aria-hidden": "true"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("rect", {
x: "0.5",
y: "0.5",
width: "31",
height: "31",
rx: "15.5",
fill: "white"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
d: "M16 11.0347C14.6731 9.84713 12.9209 9.125 11 9.125C10.1234 9.125 9.28195 9.27539 8.5 9.55176V21.4268C9.28195 21.1504 10.1234 21 11 21C12.9209 21 14.6731 21.7221 16 22.9097M16 11.0347C17.3269 9.84713 19.0791 9.125 21 9.125C21.8766 9.125 22.7181 9.27539 23.5 9.55176V21.4268C22.7181 21.1504 21.8766 21 21 21C19.0791 21 17.3269 21.7221 16 22.9097M16 11.0347V22.9097",
stroke: "#475569",
strokeWidth: "1.4",
strokeLinecap: "round",
strokeLinejoin: "round"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "sr-only"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Knowledge Base', 'astra'))))), kbData && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Transition.Root, {
show: open,
as: react__WEBPACK_IMPORTED_MODULE_1__.Fragment
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_6__.Dialog, {
as: "div",
className: "relative z-10",
onClose: setOpen
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "fixed inset-0 top-8 z-10 overflow-y-auto ast-kb-section"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex min-h-screen h-full items-end justify-center p-4 text-center sm:items-center sm:p-0 ast-kb-inner-wrap"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Transition.Child, {
as: react__WEBPACK_IMPORTED_MODULE_1__.Fragment,
enter: "ease-out duration-300",
enterFrom: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
enterTo: "opacity-100 translate-y-0 sm:scale-100",
leave: "ease-in duration-200",
leaveFrom: "opacity-100 translate-y-0 sm:scale-100",
leaveTo: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_6__.Dialog.Panel, {
className: "relative transform bg-white text-left transition-all min-h-screen w-full h-full lg:ml-40"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages__WEBPACK_IMPORTED_MODULE_4__.Docs, {
setOpen: setOpen
}))))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DocsPopup);
/***/ }),
/***/ "./assets/src/dashboard-app/MainNav.js":
/*!*********************************************!*\
!*** ./assets/src/dashboard-app/MainNav.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ MainNav)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/disclosure/disclosure.js");
/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
/* harmony import */ var _DocsPopup__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DocsPopup */ "./assets/src/dashboard-app/DocsPopup.js");
/* harmony import */ var _whats_new_library_useWhatsNewRSS__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./whats-new-library/useWhatsNewRSS */ "./assets/src/dashboard-app/whats-new-library/useWhatsNewRSS.js");
const CoreVersion = () => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null, astra_admin.version), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium border border-slate-400 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("CORE", "astra"), " ")), astra_admin.pro_available && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center pl-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null, astra_admin.plugin_ver), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium text-white border border-slate-800 bg-slate-800 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("PRO", "astra"), " ")), wp.hooks.applyFilters("astra_dashboard.after_navigation_version", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null)));
function MainNav() {
// Initialize our library hook.
(0,_whats_new_library_useWhatsNewRSS__WEBPACK_IMPORTED_MODULE_5__["default"])({
rssFeedURL: astra_admin.astraWebsite?.whatsNewFeedUrl,
selector: "#astra-whats-new",
triggerButton: {
beforeBtn: '<div class="w-8 sm:w-10 h-8 sm:h-10 flex items-center whitespace-nowrap justify-center cursor-pointer rounded-full border border-slate-200">',
icon: '<svg width="18" height="18" viewBox="0 0 18 18" fill="none"><path d="M8.16667 3.90182V15.0335C8.16667 15.8434 7.51008 16.5 6.70015 16.5C6.08038 16.5 5.52752 16.1104 5.31907 15.5267L3.53039 10.4024M14 9.83333C15.3807 9.83333 16.5 8.71404 16.5 7.33333C16.5 5.95262 15.3807 4.83333 14 4.83333M3.53039 10.4024C2.33691 9.89508 1.5 8.71194 1.5 7.33333C1.5 5.49238 2.99238 4 4.83333 4H6.36007C9.77727 4 12.7141 2.97159 14 1.5L14 13.1667C12.7141 11.6951 9.77727 10.6667 6.36007 10.6667L4.83331 10.6667C4.37098 10.6667 3.93064 10.5725 3.53039 10.4024Z" stroke="#475569" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"></path></svg>',
afterBtn: '</div>'
},
flyout: {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("What's New?", "astra"),
formatDate: (/** @type Date */date) => {
const dayOfWeek = date.toLocaleDateString('en-US', {
weekday: 'long'
});
const month = date.toLocaleDateString('en-US', {
month: 'long'
});
const day = date.getDate();
const year = date.getFullYear();
// Format the date string
const formattedDate = `${dayOfWeek} ${month} ${day}, ${year}`;
return formattedDate;
}
}
});
const navMenus = [{
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Welcome", "astra"),
slug: astra_admin.home_slug,
path: ""
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Settings", "astra"),
slug: astra_admin.home_slug,
path: "settings"
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Free vs Pro", "astra"),
slug: astra_admin.home_slug,
path: "free-vs-pro"
}];
// insert starter templates menu if not white labeled and if promotion enabled.
if (!astra_admin.is_whitelabel && astra_admin?.starter_templates_data?.is_promoting) {
navMenus.splice(2, 0, {
name: astra_admin.starter_templates_data.title,
slug: astra_admin.home_slug,
path: "starter-templates"
});
}
const redirectUpgradeAstraProPurchase = () => {
window.open(astra_admin.astra_cta_btn_url, '_blank');
};
const menus = wp.hooks.applyFilters('astra_dashboard.main_navigation', navMenus);
const query = new URLSearchParams((0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useLocation)()?.search);
const activePage = query.get("page") || astra_admin.home_slug;
const activePath = query.get("path") || "";
if (activePath === 'spectra') {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null);
}
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_7__.Disclosure, {
as: "nav",
className: "bg-white border-b border-slate-200"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-3xl mx-auto px-3 sm:px-6 lg:max-w-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative flex flex-col lg:flex-row justify-between h-28 lg:h-16 py-3 lg:py-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "lg:flex-1 flex items-start justify-center sm:items-stretch sm:justify-start"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
href: astra_admin.astra_base_url,
className: "flex-shrink-0 flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", {
className: "lg:block h-[2.6rem] w-auto",
src: astra_admin.logo_url,
alt: "Workflow"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-4 sm:ml-8 sm:flex gap-y-4 gap-x-8"
}, menus.map((menu, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, {
key: `?page=${menu.slug}&path=${menu.path}`
}, menu.path === 'starter-templates' && astra_admin.starter_templates_data.is_available ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
index: key,
href: astra_admin.starter_templates_data.redirection,
target: "_self",
className: `${activePage === menu.slug && activePath === menu.path ? 'mb-4 sm:mb-0 border-astra text-astra active:text-astra focus:text-astra focus-visible:text-astra-hover hover:text-astra-hover inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium' : 'mb-4 sm:mb-0 border-transparent text-slate-500 active:text-astra focus-visible:border-slate-300 focus-visible:text-slate-800 hover:border-slate-300 hover:text-slate-800 inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium'}`
}, menu.name) : (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_router_dom__WEBPACK_IMPORTED_MODULE_8__.Link, {
index: key,
to: {
search: `?page=${menu.slug}${'' !== menu.path ? '&path=' + menu.path : ''}`
},
className: `${activePage === menu.slug && activePath === menu.path ? 'mb-4 sm:mb-0 border-astra text-astra active:text-astra focus:text-astra focus-visible:text-astra-hover hover:text-astra-hover inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium' : 'mb-4 sm:mb-0 border-transparent text-slate-600 active:text-astra focus-visible:border-slate-300 focus-visible:text-slate-800 hover:border-slate-300 hover:text-slate-800 inline-flex items-center px-1 border-b-2 text-sm leading-[0.875rem] font-medium'}`
}, menu.name))))), astra_admin.show_self_branding && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "absolute bottom-2 lg:inset-y-0 right-0 flex items-center pr-2 sm:static sm:inset-auto ml-auto lg:ml-6 sm:pr-0"
}, !astra_admin.pro_available && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-sm font-medium text-slate-600 pr-3 tablet:pr-2 border-r hover:text-[#1E293B] hover:svg-hover-color"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
onClick: redirectUpgradeAstraProPurchase,
className: "inline-flex items-center text-[#046BD2] hover:text-[#1E293B] focus-visible:text-[#1E293B]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", {
width: "16",
height: "12",
viewBox: "0 0 16 12",
fill: "none",
xmlns: "http://www.w3.org/2000/svg",
className: "mr-2 svg-focusable"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
d: "M3.3335 11.3337H12.6668M1.3335 0.666992L3.3335 8.66699H12.6668L14.6668 0.666992L10.6668 5.33366L8.00016 0.666992L5.3335 5.33366L1.3335 0.666992Z",
stroke: "#046BD2",
strokeLinecap: "round",
strokeLinejoin: "round",
className: "svg-path"
})), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Unlock Pro Features', 'astra'))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center text-[0.625rem] sm:text-sm font-medium leading-[1.375rem] text-slate-400 mr-1 sm:mr-3 divide-x divide-slate-200 gap-3 pl-1 sm:pl-3 border-r"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(CoreVersion, null)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-sm font-medium leading-6 text-slate-600 pr-3 tablet:pr-2"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DocsPopup__WEBPACK_IMPORTED_MODULE_4__["default"], null)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Tooltip, {
text: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Whats's New", "astra"),
delay: 50
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
id: "astra-whats-new"
}))), !astra_admin.show_self_branding && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "absolute inset-y-0 right-0 flex items-center pr-2 sm:static sm:inset-auto sm:ml-6 sm:pr-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center whitespace-nowrap text-sm font-medium leading-[1.375rem] text-slate-400 mr-4 divide-x divide-slate-200 gap-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(CoreVersion, null))))));
}
/***/ }),
/***/ "./assets/src/dashboard-app/SettingsRoute.js":
/*!***************************************************!*\
!*** ./assets/src/dashboard-app/SettingsRoute.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @DashboardApp/pages */ "./assets/src/dashboard-app/pages/index.js");
// Define a mapping of paths to components.
const ROUTE_MAP = {
"getting-started": _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.Welcome,
"starter-templates": _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.StarterTemplates,
settings: _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.Settings,
"free-vs-pro": _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.FreeVsPro,
"custom-layouts": _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.CustomLayouts,
spectra: _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.SpectraScreen,
woocommerce: _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.ExtensionScreen,
docs: _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.Docs
};
function SettingsRoute() {
const {
search
} = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_3__.useLocation)();
const query = new URLSearchParams(search);
const page = query.get("page");
const path = query.get("path");
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
if (typeof astWpMenuClassChange === "function") {
astWpMenuClassChange(path);
}
}, [path]);
if (astra_admin.home_slug !== page) {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, "Fallback Route Page");
}
const Component = ROUTE_MAP[path] || _DashboardApp_pages__WEBPACK_IMPORTED_MODULE_2__.Welcome;
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(Component, null);
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SettingsRoute);
/***/ }),
/***/ "./assets/src/dashboard-app/SettingsSavedNotification.js":
/*!***************************************************************!*\
!*** ./assets/src/dashboard-app/SettingsSavedNotification.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ SettingsSavedNotification)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/transitions/transition.js");
/* harmony import */ var _heroicons_react_outline__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @heroicons/react/outline */ "./node_modules/@heroicons/react/outline/esm/CheckCircleIcon.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var _heroicons_react_solid__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @heroicons/react/solid */ "./node_modules/@heroicons/react/solid/esm/XIcon.js");
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
function SettingsSavedNotification() {
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
const settingsSavedNotification = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(state => state.settingsSavedNotification);
const query = new URLSearchParams((0,react_router_dom__WEBPACK_IMPORTED_MODULE_4__.useLocation)()?.search);
const status = query.get("status") ? query.get("status") : "";
if ('' !== status && 'imported' === status) {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Successfully imported!', 'astra')
});
setTimeout(() => {
window.location = astra_admin.astra_base_url;
}, 1000);
}
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
if (settingsSavedNotification !== '') {
const timer = setTimeout(() => {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: ''
});
}, 2000);
// Cleanup function to clear the timeout if the component unmounts or notification changes.
return () => clearTimeout(timer);
}
}, [settingsSavedNotification]);
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
"aria-live": "assertive",
className: "fixed inset-10 z-10 flex px-4 py-6 pointer-events-none sm:p-6 sm:items-start"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full flex flex-col items-center space-y-4 sm:items-end"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Transition, {
show: '' === settingsSavedNotification ? false : true,
as: react__WEBPACK_IMPORTED_MODULE_1__.Fragment,
enter: "transform ease-out duration-300 transition",
enterFrom: "translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2",
enterTo: "translate-y-0 opacity-100 sm:translate-x-0",
leave: "transition ease-in duration-100",
leaveFrom: "opacity-100",
leaveTo: "opacity-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-sm w-full bg-white shadow-lg rounded-lg pointer-events-auto ring-1 ring-black ring-opacity-5 overflow-hidden"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "p-4"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-start"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex-shrink-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_heroicons_react_outline__WEBPACK_IMPORTED_MODULE_6__["default"], {
className: "h-6 w-6 text-green-400",
"aria-hidden": "true"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-3 w-0 flex-1 pt-0.5"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm font-medium text-gray-900"
}, settingsSavedNotification)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-4 flex-shrink-0 flex"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
className: "bg-white rounded-md inline-flex text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500",
onClick: () => {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: ''
});
}
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "sr-only"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Close ', 'astra'), " "), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_heroicons_react_solid__WEBPACK_IMPORTED_MODULE_7__["default"], {
className: "h-5 w-5",
"aria-hidden": "true"
}))))))))));
}
/***/ }),
/***/ "./assets/src/dashboard-app/SettingsWrap.js":
/*!**************************************************!*\
!*** ./assets/src/dashboard-app/SettingsWrap.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _MainNav__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./MainNav */ "./assets/src/dashboard-app/MainNav.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var _SettingsRoute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SettingsRoute */ "./assets/src/dashboard-app/SettingsRoute.js");
/* harmony import */ var _SettingsSavedNotification__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SettingsSavedNotification */ "./assets/src/dashboard-app/SettingsSavedNotification.js");
const SettingsWrap = () => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_router_dom__WEBPACK_IMPORTED_MODULE_5__.BrowserRouter, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_MainNav__WEBPACK_IMPORTED_MODULE_2__["default"], null), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_SettingsSavedNotification__WEBPACK_IMPORTED_MODULE_4__["default"], null), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Routes, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Route, {
path: "*",
element: (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_SettingsRoute__WEBPACK_IMPORTED_MODULE_3__["default"], null)
})));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SettingsWrap);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/Welcome/AstraIntegration.js":
/*!********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/Welcome/AstraIntegration.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _Utils_extensions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Utils/extensions */ "./assets/src/utils/extensions.js");
const classNames = (...classes) => classes.filter(Boolean).join(" ");
const AstraIntegration = () => {
const handlePluginActionTrigger = e => (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_3__.triggerAction)(e);
const getStatusClass = value => {
if (value === "activated") {
return "text-[#4AB866] pointer-events-none";
} else {
return "text-astra bg-slate-50 px-[0.8125rem]";
}
};
const renderBlockCards = astra_admin.integrations.map((plugin, index) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
key: index,
className: classNames(plugin.isPro ? "bg-slate-50" : "bg-white", "box-border relative border rounded-md px-5 py-4 flex items-start gap-x-4 snap-start")
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-col"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, plugin.logoPath.internal_icon && _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"][plugin.logoPath.icon_path], !plugin.logoPath.internal_icon && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", {
src: plugin.logoPath.icon_path,
width: "40px",
height: "40px"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, plugin.isPro ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Pro', 'astra')) : (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "text-astra uppercase text-[0.625rem] leading-[0.0625rem] font-semibold bg-blue-50 px-1 pt-0.5 pb-[0.1875rem] rounded-[0.1875rem]"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Free', 'astra')))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-2"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-base leading-[1.625rem] font-medium text-slate-800"
}, plugin.title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm leading-[1.375rem] text-slate-400 mt-[0.1875rem]"
}, plugin.subtitle), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
"data-type": "button",
"data-slug": plugin.slug,
"data-redirection": plugin.redirection,
"data-action": (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_3__.getAction)(plugin.status),
"data-init": plugin.path,
onClick: handlePluginActionTrigger,
className: ` ${getStatusClass(plugin.status)} inline-flex items-center capitalize mt-3 text-sm leading-[0.875rem] font-medium rounded-md py-[0.5625rem]`
}, 'installed' == plugin.status ? astra_admin.plugin_activate_text : plugin.status))));
});
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-flow-row auto-rows-min grid-cols-1 gap-4 sm:grid-cols-3 pt-6"
}, renderBlockCards);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AstraIntegration);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/Welcome/BulkExtensionController.js":
/*!***************************************************************************!*\
!*** ./assets/src/dashboard-app/pages/Welcome/BulkExtensionController.js ***!
\***************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
const BulkExtensionController = () => {
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
const blocksStatuses = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.blocksStatuses);
const handleBulkTrigger = action => {
const value = {
...blocksStatuses
};
for (const block in blocksStatuses) {
value[block] = action === "activate" ? block : "";
}
dispatch({
type: "UPDATE_BLOCK_STATUSES",
payload: value
});
const formData = new window.FormData();
formData.append("action", `astra_addon_bulk_${action}_modules`);
formData.append("security", astra_addon_admin.update_nonce);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_2___default()({
url: astra_admin.ajax_url,
method: "POST",
body: formData
}).then(data => {
if (data.success) {
dispatch({
type: "UPDATE_SETTINGS_SAVED_NOTIFICATION",
payload: action === "activate" ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Successfully Activated!", "astra") : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Successfully Deactivated!", "astra")
});
refreshCache();
}
}).catch(error => {
console.error(`Error during ${action}:`, error);
});
};
const refreshCache = () => {
const reFormData = new window.FormData();
reFormData.append("action", "astra_refresh_assets_files");
reFormData.append("security", astra_addon_admin.update_nonce);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_2___default()({
url: astra_admin.ajax_url,
method: "POST",
body: reFormData
}).then(() => {
dispatch({
type: "UPDATE_SETTINGS_SAVED_NOTIFICATION",
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Cache Cleared!", "astra")
});
location.reload();
}).catch(error => {
console.error("Error during cache refresh:", error);
// Handle the error, possibly showing a notification to the user.
});
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "z-0 flex shadow-sm rounded-[0.2rem] sm:justify-center w-fit sm:w-auto"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
type: "button",
className: "focus:bg-indigo-50 focus:text-slate-500 focus-visible:text-astra hover:bg-indigo-50 hover:text-astra -ml-px relative inline-flex items-center px-4 py-2 border border-slate-200 bg-white text-sm font-medium text-slate-500 focus:z-10 focus:outline-none rounded-l-md transition",
onClick: () => handleBulkTrigger("activate")
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Activate all", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
type: "button",
className: "focus:bg-indigo-50 focus:text-slate-500 focus-visible:text-astra hover:bg-indigo-50 hover:text-astra -ml-px relative inline-flex items-center px-4 py-2 border border-slate-200 bg-white text-sm font-medium text-slate-500 focus:z-10 focus:outline-none rounded-r-md transition",
onClick: () => handleBulkTrigger("deactivate")
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Deactivate all", "astra")));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BulkExtensionController);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/Welcome/ProModules.js":
/*!**************************************************************!*\
!*** ./assets/src/dashboard-app/pages/Welcome/ProModules.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _DashboardApp_pages_welcome_ExtensionCard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @DashboardApp/pages/welcome/ExtensionCard */ "./assets/src/dashboard-app/pages/welcome/ExtensionCard.js");
const ProModules = () => {
const astraExtensions = astra_admin.extensions;
const renderBlockCards = Object.entries(astraExtensions).map(([index, module]) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_welcome_ExtensionCard__WEBPACK_IMPORTED_MODULE_2__["default"], {
key: index,
slug: index,
moduleInfo: module
});
});
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-flow-row auto-rows-min grid-cols-1 gap-4 sm:grid-cols-2 pt-6"
}, renderBlockCards);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProModules);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/Welcome/QuickSettings.js":
/*!*****************************************************************!*\
!*** ./assets/src/dashboard-app/pages/Welcome/QuickSettings.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
const classNames = (...classes) => classes.filter(Boolean).join(' ');
const QuickSettings = () => {
const allQuickLinks = astra_admin.quick_settings;
const onQuickSettingTrigger = sectionLink => {
window.open(sectionLink, '_blank');
};
const renderQuickLinks = Object.entries(allQuickLinks).map(([index, block]) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
key: index,
"data-redirection": block.quick_url,
onClick: () => onQuickSettingTrigger(block.quick_url),
className: classNames(block.isPro ? 'bg-slate-50' : 'bg-white', 'box-border relative border rounded-md cursor-pointer h-20 px-3 py-3 flex items-start gap-x-4 snap-start hover:shadow-md transition astra-icon-transition group')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex-1 min-w-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-base font-medium text-slate-800 leading-7"
}, block.title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
className: classNames(block.isPro ? 'pointer-events-none' : '', 'focus:text-slate-400 text-slate-400 text-base truncate leading-[1.625rem] focus-visible:text-slate-400-hover active:text-astra-hover group-hover:text-astra-hover'),
href: block.quick_url,
rel: "noreferrer",
target: "_blank"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Customize', 'astra'))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative inline-flex flex-shrink-0 py-0.5 px-1 text-[0.625rem] leading-[0.7rem] text-gray-50 rounded-[0.1875rem] group-hover:text-slate-300"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]["customize"]));
});
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-flow-row auto-rows-min grid-cols-1 gap-4 sm:grid-cols-3 pt-6"
}, renderQuickLinks);
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (QuickSettings);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/Welcome/UsefulPlugins.js":
/*!*****************************************************************!*\
!*** ./assets/src/dashboard-app/pages/Welcome/UsefulPlugins.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _Utils_extensions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @Utils/extensions */ "./assets/src/utils/extensions.js");
const UsefulPlugins = () => {
const handlePluginActionTrigger = e => (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_4__.triggerAction)(e);
const getStatusClass = value => {
if (value === "activated") {
return "text-[#4AB866] pointer-events-none";
} else {
return "text-astra";
}
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, astra_admin.useful_plugins.map((plugin, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: `${plugin.status === 'activated' ? '' : 'hover:bg-[#F8FAFC] hover:shadow-hover'} flex justify-between items-start p-4 border-t border-slate-200 bg-white transition `,
key: key
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-grow"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, plugin.logoPath.internal_icon && _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"][plugin.logoPath.icon_path], !plugin.logoPath.internal_icon && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", {
src: plugin.logoPath.icon_path,
width: "40px",
height: "40px"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-2.5 flex-grow"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex gap-1 justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-sm leading-[1.375rem] font-medium text-slate-800"
}, plugin.title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
"data-slug": plugin.slug,
"data-init": plugin.path,
"data-redirection": plugin.redirection,
"data-action": (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_4__.getAction)(plugin.status),
className: ` ${getStatusClass(plugin.status)} p-0 m-0 inline-flex items-center capitalize text-sm leading-4 font-medium cursor-pointer`,
onClick: handlePluginActionTrigger
}, 'installed' == plugin.status ? astra_admin.plugin_activate_text : plugin.status)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm leading-[1.375rem] text-slate-400"
}, plugin.subtitle))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UsefulPlugins);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/custom-layouts/CustomLayouts.js":
/*!************************************************************************!*\
!*** ./assets/src/dashboard-app/pages/custom-layouts/CustomLayouts.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _astra_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @astra-components */ "./assets/components/index.js");
const CustomLayouts = () => {
const query = new URLSearchParams((0,react_router_dom__WEBPACK_IMPORTED_MODULE_4__.useLocation)()?.search);
const allowAutoPlay = '1' === query.get('astra-activation-redirect') ? 1 : 0;
const videoID = 'FWRkzJQwcKU';
const onFreeVsProClick = () => {
window.open(astra_admin.free_vs_pro_link, '_self');
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "relative"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full absolute inset-0 blur-md"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['custom-layout']), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative z-10 pt-[4rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-[39rem] h-max bg-white m-auto shadow-overlay-modal text-center rounded-lg p-8"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mx-auto flex items-center justify-center"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]["astra-logo"]), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-3 text-center sm:mt-5"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h4", {
className: "text-2xl font-semibold leading-7 text-slate-800",
id: "modal-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Site Builder', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-2"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm leading-[1.375rem] text-slate-500 text-center"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Upgrade to Astra Pro to get access to the Site Builder, which allow you to create a unique header, footer, 404 pages, and custom content.', 'astra'))), astra_admin.show_banner_video && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative pb-[17.5rem] mt-5"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("iframe", {
className: "absolute inset-0 w-full h-full rounded-md",
src: `https://www.youtube-nocookie.com/embed/${videoID}?showinfo=0&autoplay=${allowAutoPlay}&mute=${allowAutoPlay}&rel=0`,
allow: "autoplay",
title: "YouTube video player",
frameBorder: "0",
allowFullScreen: true
})))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-center mt-5"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_3__.ProButton, {
className: "w-auto justify-center rounded-md border border-transparent bg-astra px-[2.9375rem] py-[0.6875rem] text-base leading-4 font-medium text-white shadow-sm hover:bg-astra-hover focus:outline-none focus:ring-2 focus:ring-astra-hover focus:ring-offset-2"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
className: "w-auto justify-center mt-4 text-base leading-4 text-astra font-medium",
onClick: onFreeVsProClick
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Free vs Pro', 'astra')))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CustomLayouts);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/docs/Docs.js":
/*!*****************************************************!*\
!*** ./assets/src/dashboard-app/pages/docs/Docs.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _SubSection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SubSection */ "./assets/src/dashboard-app/pages/docs/SubSection.js");
/* harmony import */ var _UpgradeToPro__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UpgradeToPro */ "./assets/src/dashboard-app/pages/docs/UpgradeToPro.js");
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _SearchResults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./SearchResults */ "./assets/src/dashboard-app/pages/docs/SearchResults.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
/* harmony import */ var _astra_components__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @astra-components */ "./assets/components/index.js");
/* harmony import */ var _astra_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @astra-hooks */ "./assets/hooks/index.js");
const Docs = ({
setOpen
}) => {
const [searchKeyword, setSearchKeyword] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)("");
const [searchResults, setSearchResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);
// Debounced filtering of docs based on the search keyword, updating results only after typing pauses.
(0,_astra_hooks__WEBPACK_IMPORTED_MODULE_8__.useDebounceEffect)(() => {
if (searchKeyword === "") {
setSearchResults(null);
} else {
const data = astra_admin.astra_docs_data.docs.filter(item => item.title.toLowerCase().includes(searchKeyword));
setSearchResults(data);
}
}, 300, [searchKeyword]);
const is404 = astra_admin.astra_docs_data?.data?.status === 404;
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "bg-white"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: ""
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h1", {
className: "sr-only"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Welcome to KB Docs", "astra"), " "), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full flex justify-between items-center bg-gray-50 py-5 px-6"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
href: astra_admin.astra_base_url,
className: "flex-shrink-0 flex items-center ast-box-shadow-none"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", {
className: "lg:block mr-3 h-[2.6rem] w-auto ast-box-shadow-none",
src: astra_admin.logo_url,
alt: "Workflow"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-5xl mx-auto w-full relative"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("input", {
type: "search",
placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Search", "astra"),
className: "w-full ast-docs-search-fields text-base",
onChange: e => setSearchKeyword(e.target.value)
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "absolute top-1/2 -translate-y-1/2 left-4"
}, searchKeyword ? _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__["default"]['close'] : _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__["default"]['search'])), setOpen && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
onClick: () => setOpen(false)
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__["default"]["popupclose"]))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "sm:max-w-5xl mx-auto w-full flex flex-col"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-col lg:flex-row gap-8 pt-10"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full px-6 lg:px-0 lg:w-2/3 mb-5 self-center"
}, is404 && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center justify-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "text-4xl font-bold text-gray-800 mb-4"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("404", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-xl text-gray-600 mb-8"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Oops! Documentation not found.", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-lg text-gray-600 mb-8"
}, astra_admin.astra_docs_data?.message), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_router_dom__WEBPACK_IMPORTED_MODULE_9__.Link, {
role: "button",
to: astra_admin.astra_base_url,
className: "sm:inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:text-white hover:bg-astra-hover focus:outline-none mr-4 mb-2 sm:mb-0"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Go to Dashboard", "astra")))), !is404 && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, searchResults && searchResults.length > 0 && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mb-8"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_SearchResults__WEBPACK_IMPORTED_MODULE_6__["default"], {
data: searchResults
})), Object.entries(astra_admin.astra_docs_data.categories).map((item, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_SubSection__WEBPACK_IMPORTED_MODULE_3__["default"], {
item: item,
key: key
})), !astra_admin.pro_available && astra_admin.upgrade_notice && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-10"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_UpgradeToPro__WEBPACK_IMPORTED_MODULE_4__["default"], null)))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full px-6 lg:px-0 lg:w-1/3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_7__.PromoCard, {
id: "vip-priority-support",
className: "border border-sky-500 mb-5",
icon: _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__["default"]["support"],
title: (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "font-medium"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("VIP Priority Support", "astra")),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Faster and exclusive support service designed for VIP assistance and benefits.", "astra"),
linkHRef: astra_admin.astraWebsite?.vipPrioritySupportUrl,
linkText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Know More →", "astra")
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_7__.PromoCard, {
id: "view-documentation",
className: "border border-slate-200 mb-5",
icon: _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__["default"]["book"],
title: (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "font-medium"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("View Documentation", "astra")),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)(`Browse documentation, reference material, and tutorials for ${astra_admin.theme_name} Theme.`, "astra"),
linkHRef: astra_admin.astraWebsite?.docsUrl,
linkText: (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "inline-flex items-center gap-2"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("View All Documentation", "astra"), _Common_block_icons__WEBPACK_IMPORTED_MODULE_5__["default"]["redirect"])
}))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Docs);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/docs/SearchResults.js":
/*!**************************************************************!*\
!*** ./assets/src/dashboard-app/pages/docs/SearchResults.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var react_html_parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-html-parser */ "./node_modules/react-html-parser/lib/index.js");
const SearchResults = ({
data
}) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, data && data.map((item, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
href: item.url + '?utm_source=free-theme&utm_medium=dashboard&utm_campaign=knowledge',
target: "blank",
className: "flex items-center justify-between text-slate-800 rounded-md p-2 pl-0 hover:bg-gray-50 group cursor-pointer",
key: key
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center ast-kb-caret"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_1__["default"]["caret"], (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-base leading-[1.625rem] text-slate-800 ml-2"
}, (0,react_html_parser__WEBPACK_IMPORTED_MODULE_2__["default"])(item.title))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-slate-600 invisible group-hover:visible"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_1__["default"]["redirect"]))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SearchResults);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/docs/SubSection.js":
/*!***********************************************************!*\
!*** ./assets/src/dashboard-app/pages/docs/SubSection.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var react_html_parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-html-parser */ "./node_modules/react-html-parser/lib/index.js");
const SubSection = ({
item
}) => {
const [categorySlug, category] = item;
const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
// Subcategories.
const subcategories = Object.entries(category.subcategories);
// Docs.
const docs = astra_admin.astra_docs_data.docs.filter(doc => doc.category?.toString() === categorySlug);
const docsCount = docs.length;
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "py-5 border-t border-slate-200"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
onClick: () => setOpen(!open),
className: "w-full flex justify-between items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]["bookmark"], (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h4", {
className: "text-base font-medium leading-[1.625rem] text-slate-800 ml-2"
}, (0,react_html_parser__WEBPACK_IMPORTED_MODULE_4__["default"])(category.name))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: ` ${open ? "rotate-0" : "-rotate-90"} transition-rotate duration-300 ease-in-out`
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]["expand"])), open && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-5"
}, !!subcategories.length && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-2"
}, subcategories.map((subItem, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(SubSection, {
item: subItem,
key: key
}))), !!docs.length && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "space-y-1 mb-5"
}, docs.splice(0, 5).map((doc, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
href: doc.url + "?utm_source=free-theme&utm_medium=dashboard&utm_campaign=knowledge",
target: "_blank",
className: "flex items-center justify-between text-slate-800 rounded-md p-2 pl-0 hover:bg-gray-50 group cursor-pointer focus:outline-0",
key: key
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center ast-kb-caret"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null, _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]["caret"]), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-base leading-[1.625rem] text-slate-800 ml-2"
}, (0,react_html_parser__WEBPACK_IMPORTED_MODULE_4__["default"])(doc.title))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-slate-600 invisible group-hover:visible"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]["redirect"])))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
href: astra_admin.websiteUrl?.docsCategoryDynamicUrl?.replace('#category#', categorySlug),
target: "_blank",
className: "text-base font-medium leading-4 text-astra flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "mr-2"
}, `View all ${(0,react_html_parser__WEBPACK_IMPORTED_MODULE_4__["default"])(category.name)} docs`), _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]["redirect"])), !docsCount && !subcategories.length && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("No docs found!", "astra"))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SubSection);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/docs/UpgradeToPro.js":
/*!*************************************************************!*\
!*** ./assets/src/dashboard-app/pages/docs/UpgradeToPro.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _astra_components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @astra-components */ "./assets/components/index.js");
const UpgradeToPro = () => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative flex bg-blue-50 py-5 pl-4 pr-10 border border-sky-500 rounded-md"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mr-3"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['checkbadge']), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h4", {
className: "text-base font-semibold leading-5 text-slate-800 mb-1.5"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Upgrade to Astra Pro', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm text-slate-600 mb-3"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Get access to powerful features for painless WordPress designing, without the high costs. With all the time you will save, it’s a product that pays for itself!', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_4__.ProButton, {
className: "text-sm text-astra text-medium"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "absolute top-4 right-4 leading-[1rem] font-medium text-[0.625rem] text-white bg-slate-800 rounded-[0.1875rem] py-[0rem] px-1.5"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('PRO', 'astra')));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UpgradeToPro);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/free-vs-pro/FreeVsPro.js":
/*!*****************************************************************!*\
!*** ./assets/src/dashboard-app/pages/free-vs-pro/FreeVsPro.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data */ "./assets/src/dashboard-app/pages/free-vs-pro/data.js");
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _astra_components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @astra-components */ "./assets/components/index.js");
const FreeVsPro = () => {
const checkStatus = value => {
if (value === "yes") {
return _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]['check'];
} else if (value === "no") {
return _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]['xclose'];
} else {
return value;
}
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "py-[2.43rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-3xl mx-auto px-6 lg:max-w-7xl"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h1", {
className: "sr-only"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Astra Free Vs Pro", "astra"), " "), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-row justify-between items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "text-lg sm:text-2xl font-semibold capitalize"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Astra Free vs Pro', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_4__.ProButton, {
className: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-8 flex flex-col"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "-my-2 -mx-4 overflow-x-auto sm:-mx-6 lg:-mx-8"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "inline-block min-w-full py-2 align-middle md:px-6 lg:px-8"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "overflow-hidden shadow-overlay-light md:rounded-lg"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("table", {
className: "min-w-full divide-y divide-slate-200"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("thead", {
className: "bg-white"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("tr", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("th", {
scope: "col",
className: "py-3.5 pl-4 pr-3 text-left text-base font-medium text-slate-800 sm:pl-8"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Features", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("th", {
scope: "col",
className: "px-3 py-3.5 text-center text-base font-medium text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Free", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("th", {
scope: "col",
className: "px-3 py-3.5 text-center text-base font-medium text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Pro", "astra")))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("tbody", {
className: "divide-y divide-slate-200 bg-white"
}, _data__WEBPACK_IMPORTED_MODULE_2__.features.map((feature, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("tr", {
key: key
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("td", {
className: "whitespace-nowrap py-4 pl-4 pr-3 text-base text-slate-600 sm:pl-8"
}, feature.name), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("td", {
className: "whitespace-nowrap capitalize px-3 py-4 text-base text-center text-slate-600"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex justify-center font-medium"
}, checkStatus(feature.free))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("td", {
className: "whitespace-nowrap capitalize px-3 py-4 text-base text-center text-slate-600"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex justify-center font-medium"
}, checkStatus(feature.pro))))))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex items-center justify-center text-astra hover:text-astra-hover text-base font-medium text-center bg-white py-4 border-t border-t-slate-200"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_4__.ProButton, {
className: "flex items-center justify-center",
disableSpinner: true
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "mr-2"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("See all Astra Pro features", "astra")), _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]['redirect'])))))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
className: "mt-6 py-10 flex flex-col bg-slate-200 items-center justify-center shadow-overlay-light rounded-md"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mb-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "ml-1 sm:ml-2 text-[0.625rem] leading-[1rem] font-medium text-white border border-slate-800 bg-slate-800 rounded-[0.1875rem] relative inline-flex flex-shrink-0 py-[0rem] px-1.5"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("PRO", "astra"))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h4", {
className: "text-2xl font-semibold text-slate-800 mb-3"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Do More with Astra Pro", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-2xl text-center text-base text-slate-600 mb-7"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Get access to powerful features for painless WordPress designing, without the high costs. With all the time you will save, it’s a product that pays for itself!", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_4__.ProButton, {
className: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none"
}))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FreeVsPro);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/free-vs-pro/data.js":
/*!************************************************************!*\
!*** ./assets/src/dashboard-app/pages/free-vs-pro/data.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ features: () => (/* binding */ features)
/* harmony export */ });
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
const features = [{
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('24/7 Premium Support', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Access To Pro Updates', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('CSS File Generation For Speed Optimization', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('White Label', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Page Background Styling', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Sidebar Designing Styles', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Colors and Backgrounds', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Typography', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Spacing', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Full Width Site Layout', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Max Width Site Layout', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Padded Site Layout', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Fluid Site Layout', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Multiple Page Headers', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Custom Header', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Custom Footer', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Custom 404 Page', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Hooks Support to Add Custom Code', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Sticky When Scroll Up', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Shrink When Scroll Up', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Hide Sticky When Scroll Down', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Sticky Header Animations', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Mega Menu', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Multiple HTML Elements', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Multiple Button Elements', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Divider Elements', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Color & Typography Options', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Archive Page - Post Content Layouts', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Archive Page - Post Grid Control', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Archive Page - Post Readtime Meta Option', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Single Post Page - Post Readtime Meta Option', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Single Post Page - Author Info Box', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Single Post Page - Post Navigation Visibility Control', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Breadcrumbs Shortcode', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Search Box Shortcode', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('WooCommerce Mini-Cart Shortcode', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('EDD Mini-Cart Shortcode', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('WooCommerce', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('LifterLMS', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('LearnDash', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Easy Digital Downloads', 'astra'),
free: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Limited Features', 'astra'),
pro: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('All Features', 'astra')
}].map(feature => ({
...feature,
free: feature.free || 'no',
pro: feature.pro || 'yes'
}));
/***/ }),
/***/ "./assets/src/dashboard-app/pages/index.js":
/*!*************************************************!*\
!*** ./assets/src/dashboard-app/pages/index.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ CustomLayouts: () => (/* reexport safe */ _custom_layouts_CustomLayouts__WEBPACK_IMPORTED_MODULE_4__["default"]),
/* harmony export */ Docs: () => (/* reexport safe */ _docs_Docs__WEBPACK_IMPORTED_MODULE_7__["default"]),
/* harmony export */ ExtensionScreen: () => (/* reexport safe */ _woocommerce_ExtensionScreen__WEBPACK_IMPORTED_MODULE_6__["default"]),
/* harmony export */ FreeVsPro: () => (/* reexport safe */ _free_vs_pro_FreeVsPro__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ Settings: () => (/* reexport safe */ _settings_Settings__WEBPACK_IMPORTED_MODULE_2__["default"]),
/* harmony export */ SpectraScreen: () => (/* reexport safe */ _spectra_SpectraScreen__WEBPACK_IMPORTED_MODULE_5__["default"]),
/* harmony export */ StarterTemplates: () => (/* reexport safe */ _starter_templates_StarterTemplates__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ Welcome: () => (/* reexport safe */ _welcome_Welcome__WEBPACK_IMPORTED_MODULE_0__["default"])
/* harmony export */ });
/* harmony import */ var _welcome_Welcome__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./welcome/Welcome */ "./assets/src/dashboard-app/pages/welcome/Welcome.js");
/* harmony import */ var _free_vs_pro_FreeVsPro__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./free-vs-pro/FreeVsPro */ "./assets/src/dashboard-app/pages/free-vs-pro/FreeVsPro.js");
/* harmony import */ var _settings_Settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/Settings */ "./assets/src/dashboard-app/pages/settings/Settings.js");
/* harmony import */ var _starter_templates_StarterTemplates__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./starter-templates/StarterTemplates */ "./assets/src/dashboard-app/pages/starter-templates/StarterTemplates.js");
/* harmony import */ var _custom_layouts_CustomLayouts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./custom-layouts/CustomLayouts */ "./assets/src/dashboard-app/pages/custom-layouts/CustomLayouts.js");
/* harmony import */ var _spectra_SpectraScreen__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./spectra/SpectraScreen */ "./assets/src/dashboard-app/pages/spectra/SpectraScreen.js");
/* harmony import */ var _woocommerce_ExtensionScreen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./woocommerce/ExtensionScreen */ "./assets/src/dashboard-app/pages/woocommerce/ExtensionScreen.js");
/* harmony import */ var _docs_Docs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./docs/Docs */ "./assets/src/dashboard-app/pages/docs/Docs.js");
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/ContainerSettings.js":
/*!**********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/ContainerSettings.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _DashboardApp_pages_settings_LoadFontsLocally__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @DashboardApp/pages/settings/LoadFontsLocally */ "./assets/src/dashboard-app/pages/settings/LoadFontsLocally.js");
/* harmony import */ var _DashboardApp_pages_settings_PreloadLocalFonts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @DashboardApp/pages/settings/PreloadLocalFonts */ "./assets/src/dashboard-app/pages/settings/PreloadLocalFonts.js");
/* harmony import */ var _DashboardApp_pages_settings_FlushLocalFonts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @DashboardApp/pages/settings/FlushLocalFonts */ "./assets/src/dashboard-app/pages/settings/FlushLocalFonts.js");
/* harmony import */ var _DashboardApp_pages_settings_OldHeaderFooter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @DashboardApp/pages/settings/OldHeaderFooter */ "./assets/src/dashboard-app/pages/settings/OldHeaderFooter.js");
/* harmony import */ var _DashboardApp_pages_settings_UpgradeNotices__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @DashboardApp/pages/settings/UpgradeNotices */ "./assets/src/dashboard-app/pages/settings/UpgradeNotices.js");
function SettingsWrapper({
state
}) {
const wrappers = wp.hooks.applyFilters('astra_dashboard.settings_tab_wrappers', {
'global-settings': (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " ", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_OldHeaderFooter__WEBPACK_IMPORTED_MODULE_6__["default"], null), " ", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_UpgradeNotices__WEBPACK_IMPORTED_MODULE_7__["default"], null), " "),
'fonts-performance': (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " ", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_LoadFontsLocally__WEBPACK_IMPORTED_MODULE_3__["default"], null), " ", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_PreloadLocalFonts__WEBPACK_IMPORTED_MODULE_4__["default"], null), " ", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_FlushLocalFonts__WEBPACK_IMPORTED_MODULE_5__["default"], null), " ")
});
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, wrappers[state]);
}
const ContainerSettings = () => {
const activeSettingsNavigationTab = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(state => state.activeSettingsNavigationTab);
// Parent Div is Required to add Padding to the Entire Structure for Smaller Windows.
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "lg:col-span-9 border-l"
}, wp.hooks.applyFilters(`astra_dashboard.settings_screen_before_${activeSettingsNavigationTab}`, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(SettingsWrapper, {
state: activeSettingsNavigationTab
}), wp.hooks.applyFilters(`astra_dashboard.settings_screen_after_${activeSettingsNavigationTab}`, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContainerSettings);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/FlushLocalFonts.js":
/*!********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/FlushLocalFonts.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
const FlushLocalFonts = () => {
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_4__.useDispatch)();
const enableLoadFontsLocally = (0,react_redux__WEBPACK_IMPORTED_MODULE_4__.useSelector)(state => state.enableLoadFontsLocally);
const [regenerateAssetsState, setRegenerateAssetsState] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
const regenerateLocalFontAssets = () => {
setRegenerateAssetsState('loading');
const formData = new window.FormData();
formData.append('action', 'astra_regenerate_fonts_folder');
formData.append('security', astra_admin.update_nonce);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Assets Regenerated!', 'astra')
});
} else {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: data.data.message
});
}
setRegenerateAssetsState(false);
}).catch(error => {
console.error('Error during assets regeneration:', error);
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('An error occurred while regenerating assets.', 'astra')
});
setRegenerateAssetsState(false);
});
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
className: `astra-dep-field-${enableLoadFontsLocally} block border-b border-solid border-slate-200 px-8 py-8 justify-between`
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full flex flex-col sm:flex-row justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "p-0 text-xl leading-6 font-semibold text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Flush Local Fonts Cache", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "mt-2 text-sm text-slate-600"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Click the button to reset the local fonts cache.', 'astra'))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-2 sm:mt-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
type: "button",
className: "inline-flex px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none",
onClick: regenerateLocalFontAssets
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Flush Local Font Files", "astra"), 'loading' === regenerateAssetsState && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", {
className: "animate-spin -mr-1 ml-3 h-5 w-5 text-white",
xmlns: "http://www.w3.org/2000/svg",
fill: "none",
viewBox: "0 0 24 24"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("circle", {
className: "opacity-25",
cx: "12",
cy: "12",
r: "10",
stroke: "currentColor",
strokeWidth: "4"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
className: "opacity-75",
fill: "currentColor",
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
}))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FlushLocalFonts);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/LoadFontsLocally.js":
/*!*********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/LoadFontsLocally.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/switch/switch.js");
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
const LoadFontsLocally = () => {
const abortControllerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)({});
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
const enableLoadFontsLocally = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.enableLoadFontsLocally);
const enableLoadFontsLocallyStatus = false === enableLoadFontsLocally ? false : true;
const updateLoadFontsLocallyStatus = () => {
const assetStatus = !enableLoadFontsLocally;
dispatch({
type: 'UPDATE_ENABLE_LOAD_FONTS_LOCALLY',
payload: assetStatus
});
(0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.saveSetting)('self_hosted_gfonts', assetStatus, dispatch, abortControllerRef);
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
className: "block border-b border-solid border-slate-200 px-8 py-8 justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mr-16 w-full flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "p-0 flex-1 justify-right inline-flex text-xl leading-6 font-semibold text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Load Google Fonts Locally', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Switch, {
checked: enableLoadFontsLocallyStatus,
onChange: updateLoadFontsLocallyStatus,
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(enableLoadFontsLocallyStatus ? 'bg-astra' : 'bg-slate-200', 'group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: "pointer-events-none absolute h-full w-full rounded-md bg-white"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(enableLoadFontsLocallyStatus ? 'bg-astra' : 'bg-gray-200', 'pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out')
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(enableLoadFontsLocallyStatus ? 'translate-x-5' : 'translate-x-0', 'toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out')
}))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "mt-2 w-9/12 text-sm text-slate-500 tablet:w-full"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Enable this option to download Google fonts and save them on your server. This can be great for improving speed of your website and to comply with GDPR laws.', 'astra')));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LoadFontsLocally);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/OldHeaderFooter.js":
/*!********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/OldHeaderFooter.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/switch/switch.js");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
const OldHeaderFooter = () => {
if (astra_admin.show_builder_migration) {
return '';
}
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
const useOldHeaderFooter = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(state => state.useOldHeaderFooter);
const useOldHeaderFooterStatus = false === useOldHeaderFooter ? false : true;
const updateHeaderFooterVersion = () => {
let assetStatus;
if (useOldHeaderFooter === false) {
assetStatus = true;
} else {
assetStatus = false;
}
dispatch({
type: 'USE_OLD_HEADER_FOOTER',
payload: assetStatus
});
const formData = new window.FormData();
formData.append('action', 'ast_migrate_to_builder');
formData.append('security', astra_admin.update_nonce);
formData.append('status', assetStatus);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: formData
}).then(() => {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Successfully saved!', 'astra')
});
}).catch(error => {
console.error('Error during API request:', error);
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('An error occurred while saving.', 'astra')
});
});
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(astra_admin.pro_available ? 'border-t' : '', 'block border-b border-solid border-slate-200 px-8 py-8 justify-between')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mr-16 w-full flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "p-0 flex-1 justify-right inline-flex text-xl leading-8 font-semibold text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Use New Header/Footer Builder', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Switch, {
checked: useOldHeaderFooterStatus,
onChange: updateHeaderFooterVersion,
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(useOldHeaderFooterStatus ? 'bg-astra' : 'bg-slate-200', 'group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: "pointer-events-none absolute h-full w-full rounded-md bg-white"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(useOldHeaderFooterStatus ? 'bg-astra' : 'bg-gray-200', 'pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out')
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(useOldHeaderFooterStatus ? 'translate-x-5' : 'translate-x-0', 'toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out')
}))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "mt-2 w-11/12 text-sm text-slate-500"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)(`${astra_admin.theme_name} Header/Footer Builder is a new and powerful way to design header and footer for your website. With this, you can give a creative look to your header/footer with less effort. Activating this feature will add advanced options to ${astra_admin.theme_name} customizer where you can create awesome new designs.`, "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "mt-2 w-full text-sm text-slate-500"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)(`After years of evolution and updates, the old header footer builder is at the point where it can no longer handle all of the new features. We recommend that you upgrade to the new header footer builder which has an assortment of new features and provides a more seamless experience.`, "astra")));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OldHeaderFooter);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/PreloadLocalFonts.js":
/*!**********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/PreloadLocalFonts.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/switch/switch.js");
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
const PreloadLocalFonts = () => {
const abortControllerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)({});
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
const enableLoadFontsLocally = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.enableLoadFontsLocally);
const enablePreloadLocalFonts = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.enablePreloadLocalFonts);
const enablePreloadLocalFontsStatus = false === enablePreloadLocalFonts ? false : true;
const updatePreloadLocalFontsStatus = () => {
const assetStatus = !enablePreloadLocalFonts;
dispatch({
type: 'UPDATE_ENABLE_PRELOAD_LOCAL_FONTS',
payload: assetStatus
});
(0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.saveSetting)('preload_local_fonts', assetStatus, dispatch, abortControllerRef);
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
className: `astra-dep-field-${enableLoadFontsLocally} block border-b border-solid border-slate-200 px-8 py-8 justify-between`
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mr-16 w-full flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "p-0 flex-1 justify-right inline-flex text-xl leading-6 font-semibold text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Preload Local Fonts', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Switch, {
checked: enablePreloadLocalFontsStatus,
onChange: updatePreloadLocalFontsStatus,
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(enablePreloadLocalFontsStatus ? 'bg-astra' : 'bg-slate-200', 'group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: "pointer-events-none absolute h-full w-full rounded-md bg-white"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(enablePreloadLocalFontsStatus ? 'bg-astra' : 'bg-gray-200', 'pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out')
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_4__.classNames)(enablePreloadLocalFontsStatus ? 'translate-x-5' : 'translate-x-0', 'toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out')
}))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "mt-2 w-9/12 text-sm text-slate-500 tablet:w-full"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('This option will load the font files right away on page load. Preloading Local Fonts can speeds up your website even further.', 'astra')));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PreloadLocalFonts);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/Settings.js":
/*!*************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/Settings.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _DashboardApp_pages_settings_ContainerSettings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @DashboardApp/pages/settings/ContainerSettings */ "./assets/src/dashboard-app/pages/settings/ContainerSettings.js");
/* harmony import */ var _DashboardApp_pages_settings_SettingsSkeleton__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @DashboardApp/pages/settings/SettingsSkeleton */ "./assets/src/dashboard-app/pages/settings/SettingsSkeleton.js");
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
/* harmony import */ var _SettingsIcons__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./SettingsIcons */ "./assets/src/dashboard-app/pages/settings/SettingsIcons.js");
const Settings = () => {
const query = new URLSearchParams((0,react_router_dom__WEBPACK_IMPORTED_MODULE_8__.useLocation)()?.search);
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
const activeSettingsNavigationTab = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.activeSettingsNavigationTab);
const initialStateSetFlag = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.initialStateSetFlag);
const navigation = wp.hooks.applyFilters('astra_dashboard.settings_navigation', [{
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('General', 'astra'),
slug: 'global-settings',
icon: _SettingsIcons__WEBPACK_IMPORTED_MODULE_7__["default"]['global-settings']
}, {
name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Performance', 'astra'),
slug: 'fonts-performance',
icon: _SettingsIcons__WEBPACK_IMPORTED_MODULE_7__["default"]['fonts-performance']
}]);
(0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(() => {
// Activate Setting Active Tab from "settingsTab" Hash in the URl is present.
const activePath = query.get('path');
const activeHash = query.get('settings');
const activeSettingsTabFromHash = activeHash && 'settings' === activePath ? activeHash : 'global-settings';
dispatch({
type: 'UPDATE_SETTINGS_ACTIVE_NAVIGATION_TAB',
payload: activeSettingsTabFromHash
});
}, [initialStateSetFlag]);
if (!initialStateSetFlag) {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_SettingsSkeleton__WEBPACK_IMPORTED_MODULE_5__["default"], null);
}
// Parent div is Required to add Padding to the Entire Structure for Smaller Windows.
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "px-6 w-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mx-auto mt-10 mb-8 font-semibold text-2xl lg:max-w-[80rem]"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Settings', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "mx-auto my-[2.43rem] bg-white rounded-md shadow overflow-hidden min-h-[36rem] lg:max-w-[80rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "lg:grid lg:grid-cols-12 min-h-[36rem] h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("aside", {
className: "py-6 sm:px-6 lg:py-6 lg:px-0 lg:col-span-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("nav", {
className: "space-y-1"
}, navigation.map(item => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_router_dom__WEBPACK_IMPORTED_MODULE_9__.Link // eslint-disable-line
, {
to: {
search: `?page=${astra_admin.home_slug}&path=settings&settings=${item.slug}`
},
key: item.name,
className: (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_6__.classNames)(activeSettingsNavigationTab === item.slug ? 'border-astra text-astra focus:text-astra-hover active:text-astra hover:text-astra-hover stroke-astra fill-astra focus:stroke-astra focus:fill-astra hover:stroke-astra hover:fill-astra' : 'border-white text-slate-800 stroke-slate-800 fill-slate-800 focus:text-slate-900 focus:border-slate-200 focus:stroke-slate-900 focus:fill-slate-900 hover:text-slate-900 hover:border-slate-200 hover:stroke-slate-900 hover:fill-slate-900', 'border-l-4 group cursor-pointer py-3 pl-5 flex items-center text-base font-medium'),
onClick: () => {
dispatch({
type: 'UPDATE_SETTINGS_ACTIVE_NAVIGATION_TAB',
payload: item.slug
});
}
}, item.icon, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "truncate"
}, item.name))))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_settings_ContainerSettings__WEBPACK_IMPORTED_MODULE_4__["default"], null))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Settings);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/SettingsIcons.js":
/*!******************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/SettingsIcons.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
const SettingsIcons = {
'fonts-performance': (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", {
className: "flex-shrink-0 mr-4 stroke-inherit",
width: "18",
height: "18",
viewBox: "0 0 18 18",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
d: "M9 3V1M9 3C7.89543 3 7 3.89543 7 5C7 6.10457 7.89543 7 9 7M9 3C10.1046 3 11 3.89543 11 5C11 6.10457 10.1046 7 9 7M3 15C4.10457 15 5 14.1046 5 13C5 11.8954 4.10457 11 3 11M3 15C1.89543 15 1 14.1046 1 13C1 11.8954 1.89543 11 3 11M3 15V17M3 11V1M9 7V17M15 15C16.1046 15 17 14.1046 17 13C17 11.8954 16.1046 11 15 11M15 15C13.8954 15 13 14.1046 13 13C13 11.8954 13.8954 11 15 11M15 15V17M15 11V1",
strokeWidth: "2",
strokeLinecap: "round",
strokeLinejoin: "round"
})),
'global-settings': (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", {
className: "flex-shrink-0 mr-4 stroke-inherit",
fill: "none",
width: "20",
height: "20",
viewBox: "0 0 20 20",
xmlns: "http://www.w3.org/2000/svg"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
d: "M8.32463 2.31731C8.75103 0.560897 11.249 0.560897 11.6754 2.31731C11.9508 3.45193 13.2507 3.99038 14.2478 3.38285C15.7913 2.44239 17.5576 4.2087 16.6172 5.75218C16.0096 6.74925 16.5481 8.04918 17.6827 8.32463C19.4391 8.75103 19.4391 11.249 17.6827 11.6754C16.5481 11.9508 16.0096 13.2507 16.6172 14.2478C17.5576 15.7913 15.7913 17.5576 14.2478 16.6172C13.2507 16.0096 11.9508 16.5481 11.6754 17.6827C11.249 19.4391 8.75103 19.4391 8.32463 17.6827C8.04918 16.5481 6.74926 16.0096 5.75219 16.6172C4.2087 17.5576 2.44239 15.7913 3.38285 14.2478C3.99038 13.2507 3.45193 11.9508 2.31731 11.6754C0.560897 11.249 0.560897 8.75103 2.31731 8.32463C3.45193 8.04918 3.99037 6.74926 3.38285 5.75218C2.44239 4.2087 4.2087 2.44239 5.75219 3.38285C6.74926 3.99037 8.04918 3.45193 8.32463 2.31731Z",
strokeWidth: "2",
strokeLinecap: "round",
strokeLinejoin: "round"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", {
d: "M13 10C13 11.6569 11.6569 13 10 13C8.34315 13 7 11.6569 7 10C7 8.34315 8.34315 7 10 7C11.6569 7 13 8.34315 13 10Z",
strokeWidth: "2",
strokeLinecap: "round",
strokeLinejoin: "round"
}))
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SettingsIcons);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/SettingsSkeleton.js":
/*!*********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/SettingsSkeleton.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _Skeleton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @Skeleton */ "./assets/src/common/skeleton/index.js");
const SettingsSkeleton = () => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "px-6 w-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-3xl mx-auto lg:max-w-[80rem] mt-10 mb-8 font-semibold text-2xl"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.RectSkeleton, {
width: "100px",
height: "32px"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "max-w-[80rem] mx-auto my-[2.43rem] bg-white rounded-md shadow overflow-hidden h-[36rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "lg:grid lg:grid-cols-12 h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("aside", {
className: "py-6 sm:px-6 lg:py-6 lg:px-5 lg:col-span-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("nav", {
className: "space-y-1"
}, Array(7).fill().map((i, index) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
key: `setting${index}`,
className: "flex justify-left items-center py-3 space-x-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.RectSkeleton, {
key: `icon${index}`,
width: "24px",
height: "24px"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
key: index,
width: "120px",
fontSize: "16px"
}));
}))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "border-l lg:col-span-9 p-8"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
fontSize: "35px",
width: "225px"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
width: "80%"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "h-8"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
fontSize: "35px",
width: "300px"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
width: "60%"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "h-8"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
fontSize: "35px",
width: "210px"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Skeleton__WEBPACK_IMPORTED_MODULE_1__.TextSkeleton, {
width: "65%"
})))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SettingsSkeleton);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/settings/UpgradeNotices.js":
/*!*******************************************************************!*\
!*** ./assets/src/dashboard-app/pages/settings/UpgradeNotices.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _astra_components__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @astra-components */ "./assets/components/index.js");
const UpgradeNotices = () => {
if (astra_admin.pro_available) {
return '';
}
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
const useUpgradeNotices = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.useUpgradeNotices);
const [upgradeNoticesState, setUpgradeNoticesState] = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(false);
const updateUpgradeNoticesVisibility = () => {
setUpgradeNoticesState('updating');
let assetStatus;
if (useUpgradeNotices === false) {
assetStatus = true;
} else {
assetStatus = false;
}
dispatch({
type: 'UPGRADE_NOTICES',
payload: assetStatus
});
const formData = new window.FormData();
formData.append('action', 'ast_disable_pro_notices');
formData.append('security', astra_admin.update_nonce);
formData.append('status', assetStatus);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_4___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
let payloadStatus = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Deactivated!', 'astra');
if (assetStatus) {
payloadStatus = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Activated!', 'astra');
}
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: payloadStatus
});
setUpgradeNoticesState(false);
}
}).catch(error => {
console.error('Error during activation/deactivation:', error);
});
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
className: "block px-8 py-8 justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mr-16 w-full flex flex-col sm:flex-row sm:items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "p-0 flex-1 justify-right inline-flex text-xl leading-8 font-semibold text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Build Better Websites with Astra Pro', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_5__.ProButton, {
className: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra transition focus:bg-astra-hover hover:bg-astra-hover focus:outline-none h-9"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "mt-2 w-full md:w-9/12 text-sm text-slate-500 tablet:w-full"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)(`Access powerful features for painless WordPress design without the high costs. Powerful tools, premium support, limitless opportunity with Pro! Toggle upgrade notices on or off `, "astra"), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
onClick: updateUpgradeNoticesVisibility,
className: "cursor-pointer text-astra focus:text-astra-hover active:text-astra-hover hover:text-astra-hover",
rel: "noreferrer"
}, 'updating' === upgradeNoticesState ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('updating...', 'astra') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('here.', 'astra'))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (UpgradeNotices);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/spectra/SpectraScreen.js":
/*!*****************************************************************!*\
!*** ./assets/src/dashboard-app/pages/spectra/SpectraScreen.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3__);
const spectraFeatures = [{
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Super Fast and Stable', 'astra'),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Spectra works with the native WordPress editor with no dependency on external code. So, it is fast and stable.', 'astra'),
icon: 'superfast'
}, {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Secure and Integrated', 'astra'),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Clean code written using the latest standards to maximize security and work flawlessly with any WordPress plugin.', 'astra'),
icon: 'secure'
}, {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Native WordPress Interface', 'astra'),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Spectra Integrates into the same WordPress editor, making it super intuitive website builder.', 'astra'),
icon: 'nativewp'
}, {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Google Will Love and Rank', 'astra'),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Score 100% in CWV. Clean code output and lightning-fast load times keep visitors and search engines happy.', 'astra'),
icon: 'googlelove'
}, {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Zero Bloat, No Dependencies', 'astra'),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Fewer external scripts and dependencies keep the code clean, resulting in small file sizes and faster loading times.', 'astra'),
icon: 'zerobloat'
}, {
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Just-in-time Compiler', 'astra'),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Loads assets dynamically on demand. Assets are loaded for only those blocks that are used on a page.', 'astra'),
icon: 'compiler'
}];
const SpectraScreen = () => {
const query = new URLSearchParams((0,react_router_dom__WEBPACK_IMPORTED_MODULE_4__.useLocation)()?.search);
const allowAutoPlay = "1" === query.get("astra-activation-redirect") ? 1 : 0;
const videoID = 'GLNzTxArR6Y';
const handleSpectraPluginAction = e => {
let spectraPluginStatus = astra_admin.spectra_plugin_status;
const formData = new window.FormData();
if ('install' === spectraPluginStatus) {
formData.append('action', 'astra_recommended_plugin_install');
formData.append('slug', 'ultimate-addons-for-gutenberg');
formData.append('init', 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php');
formData.append('_ajax_nonce', astra_admin.plugin_installer_nonce);
e.target.innerText = astra_admin.plugin_installing_text;
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
e.target.innerText = astra_admin.plugin_installed_text;
activatePlugin(e);
}
}).catch(error => {
console.error('Error during plugin installation:', error);
});
} else if ('installed' === spectraPluginStatus) {
activatePlugin(e);
} else {
// Do nothing.
}
};
const activatePlugin = e => {
const formData = new window.FormData();
formData.append('action', 'astra_recommended_plugin_activate');
formData.append('security', astra_admin.plugin_manager_nonce);
formData.append('init', 'ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg.php');
e.target.innerText = astra_admin.plugin_activating_text;
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_3___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
e.target.innerText = astra_admin.plugin_activated_text;
window.location = `${astra_admin.admin_base_url}options-general.php?page=spectra`;
}
}).catch(error => {
console.error('Error during plugin activation:', error);
});
};
const getSpectraPluginTitle = () => {
if ('install' === astra_admin.spectra_plugin_status) {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, " ", (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "mr-3"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Install Spectra - It’s free", "astra"), " "), " ", _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]["download"], " ");
} else if ('installed' === astra_admin.spectra_plugin_status) {
return (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Activate Spectra", "astra");
} else {
return (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Explore Spectra", "astra");
}
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "bg-white pb-14 pt-20"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mx-auto px-6 max-w-[45rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h1", {
className: "sr-only"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Spectra - WordPress Free Page Builder", "astra"), " "), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-col items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "absolute top-0 tablet:none"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['spectraBackgroundLogo'])), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative flex flex-col items-center"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]["spectra-logo"], (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "text-4xl sm:text-[2.5rem] text-slate-800 font-semibold capitalize mb-2 mt-7"
}, `${astra_admin.theme_name} + Spectra = `, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "text-[1em] leading-[1em]"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['heart-logo'])), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-base leading-[1.625rem] mb-7"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Spectra is 100% beginner friendly and enhances the default WordPress block editor.', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
className: `inline-flex w-[35%] justify-center items-center px-4 py-3 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover hover:text-white focus:text-white active:text-white focus:outline-none mr-4`,
onClick: handleSpectraPluginAction
}, getSpectraPluginTitle()), astra_admin.show_banner_video && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative pb-[25.375rem] mt-12 w-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("iframe", {
className: "absolute inset-0 w-full h-full rounded-md",
src: `https://www.youtube-nocookie.com/embed/${videoID}?showinfo=0&autoplay=${allowAutoPlay}&mute=${allowAutoPlay}&rel=0`,
allow: "autoplay",
title: "YouTube video player",
frameBorder: "0",
allowFullScreen: true
}))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-cols-2 gap-12 mt-16 px-0 sm:px-8"
}, spectraFeatures.map((feature, key) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
key: key
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, " ", _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"][feature.icon], " "), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h4", {
className: "text-base leading-[1.625rem] text-slate-800 font-medium mt-4 mb-1"
}, feature.title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm leading-[1.375rem] text-slate-600"
}, feature.description)))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-col items-center justify-center mt-20 mx-0 sm:mx-[4.5rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "text-[2rem] leading-10 font-semibold text-slate-800 mb-6 text-center"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Build Ultra High Performance Websites, Without Coding", "astra")), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
className: `inline-flex w-[45%] justify-center items-center px-4 py-3 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover hover:text-white focus:text-white active:text-white focus:outline-none mr-4`,
onClick: handleSpectraPluginAction
}, getSpectraPluginTitle()))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SpectraScreen);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/starter-templates/StarterTemplates.js":
/*!******************************************************************************!*\
!*** ./assets/src/dashboard-app/pages/starter-templates/StarterTemplates.js ***!
\******************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _Utils_extensions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Utils/extensions */ "./assets/src/utils/extensions.js");
const StarterTemplates = () => {
if (!astra_admin.show_plugins) {
return;
}
if (astra_admin.starter_templates_data.is_available) {
window.open(astra_admin.starter_templates_data.redirection, '_self');
return;
}
const handlePluginActionTrigger = e => (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_3__.triggerAction)(e);
const getTitle = status => {
if (status === "activated") {
return (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Activated', 'astra');
} else if (status === "installed") {
return (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Activate', 'astra');
} else {
return (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Install & Activate', 'astra');
}
};
const onLearnMoreGuideClick = () => {
window.open(astra_admin.astraWebsite?.templatesUrl, '_blank');
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "relative tablet:my-16"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-full blur-sm opacity-40"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['starter-canvas']), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-[39rem] h-max bg-white m-auto shadow-overlay-modal text-center rounded-lg p-8 absolute inset-3 top-[150%] sm:top-0 sm:inset-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mx-auto flex items-center justify-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", {
src: astra_admin.starter_templates_data.icon_path,
width: "40px",
height: "40px"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-3 text-center sm:mt-6"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h4", {
className: "text-2xl font-semibold leading-7 text-slate-800",
id: "modal-title"
}, astra_admin.starter_templates_data.title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mt-2"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm text-slate-500"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Create professional designed pixel perfect websites in minutes. Get access to 280+ pre-made full website templates for your favorite page builder.', 'astra'))))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-center mt-5 sm:mt-6"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
"data-type": "button",
className: "w-auto inline-flex items-center justify-center rounded-md border border-transparent bg-astra px-4 py-2 text-base font-medium text-white shadow-sm hover:bg-astra-hover focus:outline-none focus:ring-2 focus:ring-astra-hover focus:ring-offset-2 sm:text-sm",
"data-slug": astra_admin.starter_templates_data.slug,
"data-init": astra_admin.starter_templates_data.path,
"data-redirection": astra_admin.starter_templates_data.redirection,
"data-action": (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_3__.getAction)(astra_admin.starter_templates_data.status),
onClick: handlePluginActionTrigger
}, getTitle(astra_admin.starter_templates_data.status)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
className: "w-auto justify-center mt-4 text-astra",
onClick: onLearnMoreGuideClick
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Learn More', 'astra')))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (StarterTemplates);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/welcome/ExtensionCard.js":
/*!*****************************************************************!*\
!*** ./assets/src/dashboard-app/pages/welcome/ExtensionCard.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/switch/switch.js");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _ToolTip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ToolTip */ "./assets/src/dashboard-app/pages/welcome/ToolTip.js");
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
const classNames = (...classes) => classes.filter(Boolean).join(' ');
const ExtensionCard = props => {
const {
title,
title_url,
links,
condition = true,
deprecated = false
} = props.moduleInfo;
const slug = props.slug;
const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useDispatch)();
const blocksStatuses = (0,react_redux__WEBPACK_IMPORTED_MODULE_3__.useSelector)(state => state.blocksStatuses);
const moduleActivationStatus = blocksStatuses && undefined !== blocksStatuses[slug] && slug == blocksStatuses[slug] ? true : false;
function getAddonTitleColorClass(condition) {
if (condition || !astra_admin.pro_available) {
return 'text-slate-800';
} else {
return 'text-[#475569]';
}
}
function getAddonLinksColorClass(condition, classes) {
if (condition || !astra_admin.pro_available) {
return classes;
} else {
return 'text-[#CBD5E1] ' + classes;
}
}
function getWrapperClass(condition, addon) {
if (condition || 'white-label' === addon) {
return 'ast-addon-active';
} else {
return 'ast-addon-inactive';
}
}
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
key: slug,
className: classNames(!astra_admin.pro_available || !condition ? classNames(!astra_admin.pro_available ? 'group' : '', 'bg-slate-50') : `bg-white ${getWrapperClass(moduleActivationStatus, slug)} `, 'box-border relative border rounded-md h-20 z-0 px-4 py-3 flex items-start gap-x-4 snap-start hover:shadow-md transition astra-icon-transition')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex-1 min-w-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: `flex items-center text-base font-medium leading-7 ${getAddonTitleColorClass(condition)}`
}, title, deprecated && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "inline-block align-top max-h-4 px-1.5 py-1 ml-1.5 text-[10px] leading-[10px] border border-slate-200 text-slate-400 rounded"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Legacy', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "group"
}, astra_admin.pro_available && !condition && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "group inline-block align-middle ml-1 leading-none opacity-30 text-base dashicons dashicons-info"
}), astra_admin.pro_available && !condition && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-max max-w-[17.125rem] absolute -top-[2.8rem] left-4 rounded-[0.1875rem] z-10 opacity-0 group-hover:opacity-100 invisible group-hover:visible transition-opacity duration-300 ease-in-out"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
id: "pro-tooltip-top",
role: "tooltip",
className: "text-left inline-block z-10 h-fit px-2.5 py-1.5 text-[0.75rem] leading-[1rem] text-white bg-slate-800 rounded-sm shadow-sm opacity-1 tooltip"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)(`${title} plugin needs to be installed / activated to enable this module.`, 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-8 mr-auto w-2 h-2 flex -mt-1 rotate-45 bg-slate-800 overflow-hidden"
})))), links.map(link => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
key: Math.floor(Math.random() * 100000),
className: classNames(getAddonLinksColorClass(condition, link.link_class), astra_admin.pro_available && !condition ? 'focus-visible:text-slate-500 active:text-slate-500 focus:text-slate-400 text-slate-400 text-base truncate pointer-events-none' : 'focus-visible:text-slate-500 active:text-slate-500 focus:text-slate-400 text-slate-400 text-base truncate'),
href: link.link_url,
target: link.target_blank ? "_blank" : "_self",
rel: "noreferrer"
}, link.link_text))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: classNames(!astra_admin.pro_available ? 'text-[0.625rem] leading-[1rem] font-medium text-white bg-slate-800 border border-slate-800 rounded-[0.1875rem]' : 'self-center', astra_admin.pro_available && !condition ? 'relative inline-flex flex-shrink-0 py-[0rem] px-1.5 opacity-30 pointer-events-none' : 'relative inline-flex flex-shrink-0 py-[0rem] px-1.5')
}, !astra_admin.pro_available && (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('PRO', 'astra'), astra_admin.pro_available && 'white-label' !== slug && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_5__.Switch, {
checked: moduleActivationStatus,
onChange: () => {
let status = false;
let moduleId = slug;
let moduleStatus = moduleActivationStatus ? 'deactivate' : 'activate';
if (!moduleActivationStatus) {
status = slug;
}
const optionsClone = {
...blocksStatuses
};
optionsClone[slug] = status;
dispatch({
type: 'UPDATE_BLOCK_STATUSES',
payload: optionsClone
});
const formData = new window.FormData();
formData.append('action', 'astra_addon_update_module_status');
formData.append('security', astra_addon_admin.update_nonce);
formData.append('module_status', moduleStatus); // activate/deactivate.
formData.append('module_id', moduleId);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
dispatch({
type: 'UPDATE_SETTINGS_SAVED_NOTIFICATION',
payload: moduleStatus === 'activate' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Successfully Activated!', 'astra') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Successfully Deactivated!', 'astra')
});
const reFormData = new window.FormData();
reFormData.append('action', 'astra_refresh_assets_files');
reFormData.append('security', astra_addon_admin.update_nonce);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default()({
url: astra_admin.ajax_url,
method: 'POST',
body: reFormData
}).then(data => {
if ("advanced-hooks" === slug) {
location.reload(); // Reload the screen.
}
}).catch(error => {
console.error('Error during cache refresh:', error);
});
}
}).catch(error => {
console.error('Error during activation/deactivation:', error);
});
},
className: classNames(moduleActivationStatus ? 'bg-astra' : 'bg-slate-200', 'group relative inline-flex h-4 w-9 flex-shrink-0 cursor-pointer items-center justify-center rounded-full focus:outline-none focus:ring-2 focus:ring-astra focus:ring-offset-2')
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: "pointer-events-none absolute h-full w-full rounded-md bg-white"
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: classNames(moduleActivationStatus ? 'bg-astra' : 'bg-gray-200', 'pointer-events-none absolute mx-auto h-4 w-9 rounded-full transition-colors duration-200 ease-in-out')
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
"aria-hidden": "true",
className: classNames(moduleActivationStatus ? 'translate-x-5' : 'translate-x-0', 'toggle-bubble pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-full border border-gray-200 bg-white shadow ring-0 transition-transform duration-200 ease-in-out')
}))), !astra_admin.pro_available && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_ToolTip__WEBPACK_IMPORTED_MODULE_2__["default"], null));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExtensionCard);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/welcome/ToolTip.js":
/*!***********************************************************!*\
!*** ./assets/src/dashboard-app/pages/welcome/ToolTip.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
const ToolTip = () => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "absolute right-2.5 -top-[1.75rem] opacity-0 group-hover:opacity-100 invisible group-hover:visible transition-opacity duration-300 ease-in-out"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
id: "tooltip-top",
role: "tooltip",
className: "inline-block z-10 px-2.5 py-1.5 text-[0.75rem] leading-[1rem] text-white bg-slate-800 rounded-sm shadow-sm opacity-1 tooltip"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('This option only available on Astra Pro.', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ml-auto w-2 h-2 flex -mt-1 rotate-45 bg-slate-800 mr-4 overflow-hidden"
}));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ToolTip);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/welcome/VideoPopup.js":
/*!**************************************************************!*\
!*** ./assets/src/dashboard-app/pages/welcome/VideoPopup.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/transitions/transition.js");
/* harmony import */ var _headlessui_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @headlessui/react */ "./node_modules/@headlessui/react/dist/components/dialog/dialog.js");
const VideoPopup = ({
allowAutoPlay,
videoPopup,
toggleVideoPopup
}) => {
const videoID = 'TBZd9oligCw';
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.Transition.Root, {
show: videoPopup,
as: react__WEBPACK_IMPORTED_MODULE_1__.Fragment
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_3__.Dialog, {
as: "div",
className: "relative z-[10000]",
onClick: toggleVideoPopup,
onClose: toggleVideoPopup
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.Transition.Child, {
as: react__WEBPACK_IMPORTED_MODULE_1__.Fragment,
enter: "ease-out duration-300",
enterFrom: "opacity-0",
enterTo: "opacity-100",
leave: "ease-in duration-200",
leaveFrom: "opacity-100",
leaveTo: "opacity-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "fixed inset-0 bg-slate-800 bg-opacity-90 transition-opacity"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "fixed inset-0 z-[10000] overflow-y-auto"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex min-h-full justify-center p-4 text-center items-center lg:p-0"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_headlessui_react__WEBPACK_IMPORTED_MODULE_2__.Transition.Child, {
as: react__WEBPACK_IMPORTED_MODULE_1__.Fragment,
enter: "ease-out duration-300",
enterFrom: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
enterTo: "opacity-100 translate-y-0 sm:scale-100",
leave: "ease-in duration-200",
leaveFrom: "opacity-100 translate-y-0 sm:scale-100",
leaveTo: "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative w-[24rem] md:w-[34rem] lg:w-[60rem] h-[14rem] md:h-[19rem] lg:h-[34rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("iframe", {
className: "absolute inset-0 w-full h-full border-0 rounded-md",
src: `https://www.youtube-nocookie.com/embed/${videoID}?showinfo=0&autoplay=${videoPopup ? 1 : 0}&rel=0`,
allow: "autoplay",
title: "YouTube video player",
frameBorder: "0",
allowFullScreen: true
})))))));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoPopup);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/welcome/Welcome.js":
/*!***********************************************************!*\
!*** ./assets/src/dashboard-app/pages/welcome/Welcome.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var _DashboardApp_pages_Welcome_QuickSettings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @DashboardApp/pages/Welcome/QuickSettings */ "./assets/src/dashboard-app/pages/Welcome/QuickSettings.js");
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _DashboardApp_pages_Welcome_ProModules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @DashboardApp/pages/Welcome/ProModules */ "./assets/src/dashboard-app/pages/Welcome/ProModules.js");
/* harmony import */ var _DashboardApp_pages_Welcome_UsefulPlugins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @DashboardApp/pages/Welcome/UsefulPlugins */ "./assets/src/dashboard-app/pages/Welcome/UsefulPlugins.js");
/* harmony import */ var _DashboardApp_pages_Welcome_AstraIntegration__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @DashboardApp/pages/Welcome/AstraIntegration */ "./assets/src/dashboard-app/pages/Welcome/AstraIntegration.js");
/* harmony import */ var _DashboardApp_pages_Welcome_BulkExtensionController__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @DashboardApp/pages/Welcome/BulkExtensionController */ "./assets/src/dashboard-app/pages/Welcome/BulkExtensionController.js");
/* harmony import */ var _VideoPopup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./VideoPopup */ "./assets/src/dashboard-app/pages/welcome/VideoPopup.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var _astra_components__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @astra-components */ "./assets/components/index.js");
/* harmony import */ var _astra_components_icons__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @astra-components/icons */ "./assets/components/icons/index.js");
const classNames = (...classes) => classes.filter(Boolean).join(" ");
const Welcome = () => {
const query = new URLSearchParams((0,react_router_dom__WEBPACK_IMPORTED_MODULE_12__.useLocation)()?.search);
const displayBannerVideo = astra_admin.show_banner_video ? true : false;
const allowAutoPlay = "1" === query.get("astra-activation-redirect") ? 1 : 0;
const onCustomizeClick = () => {
window.open(astra_admin.customize_url, "_self");
};
const [videoPopup, setVideoPopup] = (0,react__WEBPACK_IMPORTED_MODULE_9__.useState)(false);
const toggleVideoPopup = () => {
setVideoPopup(!videoPopup);
};
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "py-[2.43rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "max-w-3xl mx-auto px-6 lg:max-w-7xl"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h1", {
className: "sr-only"
}, " Astra "), astra_admin.show_self_branding && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-cols-1 gap-4 items-start lg:grid-cols-5 lg:gap-0 xl:gap-0 rounded-md bg-white overflow-hidden shadow-sm px-8 py-8"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-cols-1 gap-4 lg:col-span-3 h-full md:mr-[5.25rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": "section-1-title h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: "section-1-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Welcome Banner', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex flex-col justify-center h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: ""
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "pb-4 font-medium text-base text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Hello ", "astra") + astra_admin.current_user + ","), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "text-slate-800 text-[2rem] leading-10 pb-3 font-semibold text-left"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Welcome to %s", "astra"), astra_admin.theme_name)), astra_admin.pro_available ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "ml-2 h-full inline-flex leading-[1rem] font-medium flex-shrink-0 py-[0rem] px-1.5 text-[0.625rem] text-white bg-slate-800 border border-slate-800 rounded-[0.1875rem] -tablet:mt:10"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('PRO', 'astra')) : (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "ml-2 h-full inline-flex leading-[1rem] flex-shrink-0 py-[0rem] px-1.5 text-[0.625rem] text-astra bg-blue-50 border border-blue-50 rounded-[0.1875rem] font-medium -tablet:mt:10"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('FREE', 'astra'))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-base leading-[1.625rem] text-slate-600 pb-7"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("%s is fast, fully customizable & beautiful WordPress theme suitable for blog, personal portfolio, business website and WooCommerce storefront. It is very lightweight and offers unparalleled speed.", "astra"), astra_admin.theme_name)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "relative z-0 inline-flex flex-col sm:flex-row justify-start w-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
type: "button",
className: "sm:inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-astra focus-visible:bg-astra-hover hover:bg-astra-hover focus:outline-none mr-4 mb-2 sm:mb-0",
onClick: onCustomizeClick
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Start Customising", "astra")), displayBannerVideo && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
className: "inline-flex items-center text-base font-medium text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover",
onClick: toggleVideoPopup
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "pt-0.5 pl-4 pr-3"
}, " ", _Common_block_icons__WEBPACK_IMPORTED_MODULE_3__["default"]["play"], " "), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)(`Watch the Quick Starter Guide`, "astra"))))))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-cols-1 gap-4 lg:col-span-2 h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "astra-video-container"
}, displayBannerVideo && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("iframe", {
className: "astra-video rounded-md",
src: `https://www.youtube-nocookie.com/embed/TBZd9oligCw?showinfo=0&autoplay=${allowAutoPlay}&mute=${allowAutoPlay}&rel=0`,
allow: "autoplay",
title: "YouTube video player",
frameBorder: "0",
allowFullScreen: true
})))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-cols-1 gap-[32px] items-start lg:grid-cols-3 lg:gap-[32px] xl:gap-[32px] mt-[32px]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: classNames(astra_admin.show_self_branding ? "lg:col-span-2" : "lg:col-span-3", "grid grid-cols-1 gap-[32px]")
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": "section-1-title h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: "section-1-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Quick Links', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "p-[2rem] rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative w-full flex items-center justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "font-semibold text-xl leading-6 text-slate-800"
}, " ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Quick Settings", "astra"), " "), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", {
className: "lg:flex-shrink-0 text-sm font-medium text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",
href: astra_admin.customize_url,
target: "_self",
rel: "noreferrer"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Go to Customizer", "astra"))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_Welcome_QuickSettings__WEBPACK_IMPORTED_MODULE_2__["default"], null))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": "section-1-title h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: "section-1-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Do more with %s Modules', 'astra'), astra_admin.plugin_name)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "p-[2rem] rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative w-full flex flex-col sm:flex-row sm:items-center sm:justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "font-semibold text-xl leading-6 text-slate-800 mb-4 sm:mb-0"
}, astra_admin.pro_available ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%s Modules', 'astra'), astra_admin.plugin_name) : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Do more with %s Modules', 'astra'), astra_admin.plugin_name)), astra_admin.pro_available && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_Welcome_BulkExtensionController__WEBPACK_IMPORTED_MODULE_7__["default"], null), !astra_admin.pro_available && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_10__.ProButton, {
className: "lg:flex-shrink-0 text-sm font-medium text-astra focus:text-astra focus-visible:text-astra-hover active:text-astra-hover hover:text-astra-hover no-underline",
isLink: true
})), wp.hooks.applyFilters(`astra_dashboard.pro_extensions`, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_Welcome_ProModules__WEBPACK_IMPORTED_MODULE_4__["default"], null)))), astra_admin.show_plugins && astra_admin.show_self_branding && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": "section-1-title h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: "section-1-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Astra Integrations', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "p-[2rem] rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "relative w-full lg:flex lg:items-center lg:justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "font-semibold text-xl leading-6 text-slate-800"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('%s Integrations', "astra"), astra_admin.theme_name))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_Welcome_AstraIntegration__WEBPACK_IMPORTED_MODULE_6__["default"], null))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": "section-1-title h-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: "section-1-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Your License', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "ast-welcome-screen rounded-md bg-white overflow-hidden shadow-sm flex flex-col justify-center h-full"
}, wp.hooks.applyFilters(`astra_dashboard.welcome_screen_after_integrations`, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null))))), astra_admin.show_self_branding && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid grid-cols-1 gap-[32px]"
}, astra_admin.show_plugins && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("section", {
"aria-labelledby": "section-2-title"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h2", {
className: "sr-only",
id: "section-2-title"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Extend Your Website', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "box-border rounded-md shadow-sm overflow-hidden"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: ""
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("h3", {
className: "text-slate-800 text-base font-semibold leading-5 tracking-[0.0125rem] bg-white pt-6 pl-6 pb-4"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Extend Your Website', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_pages_Welcome_UsefulPlugins__WEBPACK_IMPORTED_MODULE_5__["default"], null)))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_10__.PromoCard, {
id: "vip-priority-support",
className: "border border-sky-500",
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("VIP Priority Support", "astra"),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Faster and exclusive support service designed for VIP assistance and benefits.", "astra"),
linkHRef: astra_admin.astraWebsite?.vipPrioritySupportUrl,
linkText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Know More →", "astra")
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_10__.PromoCard, {
id: "join-community",
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Join the Community", "astra"),
description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Got a question about the plugin, want to share your awesome project or just say hi? Join our wonderful community!", "astra"),
linkHRef: "https://www.facebook.com/groups/wpastra",
linkText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Join Now →", "astra")
}), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components__WEBPACK_IMPORTED_MODULE_10__.PromoCard, {
id: "rate-us",
title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Rate Us", "astra"),
linkHRef: "https://wordpress.org/support/theme/astra/reviews/?rate=5#new-post",
linkText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Submit a Review →", "astra")
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-slate-500 text-sm pb-2.5 pr-12 flex items-center"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "text-xl text-slate-800 flex mr-2"
}, [1, 2, 3, 4, 5].map(item => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_astra_components_icons__WEBPACK_IMPORTED_MODULE_11__.Star, {
key: item,
fill: "#334155"
}))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "text-xs leading-4 align-text-bottom text-slate-400"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("Based on 5k+ reviews", "astra"))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-slate-500 text-sm pb-5"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)("We love to hear from you, we would appreciate every single review.", "astra")))))), displayBannerVideo && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_VideoPopup__WEBPACK_IMPORTED_MODULE_8__["default"], {
allowAutoPlay: allowAutoPlay,
videoPopup: videoPopup,
toggleVideoPopup: toggleVideoPopup
}));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Welcome);
/***/ }),
/***/ "./assets/src/dashboard-app/pages/woocommerce/ExtensionScreen.js":
/*!***********************************************************************!*\
!*** ./assets/src/dashboard-app/pages/woocommerce/ExtensionScreen.js ***!
\***********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @Common/block-icons */ "./assets/src/common/block-icons.js");
/* harmony import */ var _Utils_extensions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @Utils/extensions */ "./assets/src/utils/extensions.js");
const ExtensionScreen = () => {
const handlePluginActionTrigger = e => (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_3__.triggerAction)(e);
const getStatusClass = value => {
if (value === "activated") {
return "text-[#4AB866] pointer-events-none";
} else {
return "text-astra bg-white px-[0.8125rem] shadow-sm border border-solid border-[#0EA5E9] shadow-sm";
}
};
const renderExtensionCards = astra_admin.woo_extensions.map((plugin, index) => {
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
key: index,
className: "rounded-md px-5 py-4 bg-white border border-solid border-[#E2E8F0]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "grid gap-3"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "w-10 h-10 block extension-logo"
}, plugin.logoPath.internal_icon && _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"][plugin.logoPath.icon_path], !plugin.logoPath.internal_icon && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", {
src: plugin.logoPath.icon_path,
width: "40px",
height: "40px"
})), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "star-rating flex items-center"
}, Array(5).fill(0).map((_, i) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
key: i
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['star'])), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "text-xs text-slate-400 ml-1"
}, plugin.ratings))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-base leading-[1.625rem] font-medium text-slate-800"
}, plugin.title), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", {
className: "text-sm leading-[1.375rem] text-slate-400"
}, plugin.subtitle)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "flex justify-between"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", {
"data-type": "button",
"data-slug": plugin.slug,
"data-redirection": plugin.redirection,
"data-action": (0,_Utils_extensions__WEBPACK_IMPORTED_MODULE_3__.getAction)(plugin.status),
"data-init": plugin.path,
onClick: handlePluginActionTrigger,
className: ` ${getStatusClass(plugin.status)} capitalize mt-3 inline-flex items-center text-sm leading-[0.875rem] font-medium rounded-md py-[0.5625rem] hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-astra-hover focus:ring-offset-2`
}, 'installed' == plugin.status ? astra_admin.plugin_activate_text : plugin.status), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "installation-count flex items-center mt-3"
}, _Common_block_icons__WEBPACK_IMPORTED_MODULE_2__["default"]['chart'], (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", {
className: "text-xs text-slate-400 ml-1"
}, plugin.activations, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('active users', 'astra')))));
});
return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "px-6 w-full"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "mx-auto lg:max-w-[80rem]"
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: " mt-10 mb-2 font-semibold text-2xl"
}, "WooCommerce ", (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Extensions', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", {
className: "text-sm mb-8 text-[#475569]"
}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('WooCommerce extensions that will elevate your online store from good to exceptional.', 'astra')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("main", {
className: "my-[2.43rem grid lg:grid-cols-3 md:grid-cols-2 grid-cols-1 gap-6 "
}, renderExtensionCards)));
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExtensionScreen);
/***/ }),
/***/ "./assets/src/dashboard-app/whats-new-library/useWhatsNewRSS.js":
/*!**********************************************************************!*\
!*** ./assets/src/dashboard-app/whats-new-library/useWhatsNewRSS.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/**
* === Whats New RSS ===
*
* Version: 1.0.7
* Generated on: 8th October, 2024
* Documentation: https://github.com/brainstormforce/whats-new-rss/blob/master/README.md
*/
var __assign = undefined && undefined.__assign || function () {
__assign = Object.assign || function (t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function (resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = undefined && undefined.__generator || function (thisArg, body) {
var _ = {
label: 0,
sent: function () {
if (t[0] & 1) throw t[1];
return t[1];
},
trys: [],
ops: []
},
f,
y,
t,
g;
return g = {
next: verb(0),
"throw": verb(1),
"return": verb(2)
}, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
return this;
}), g;
function verb(n) {
return function (v) {
return step([n, v]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
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;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return {
value: op[1],
done: false
};
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2]) _.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e];
y = 0;
} finally {
f = t = 0;
}
if (op[0] & 5) throw op[1];
return {
value: op[0] ? op[1] : void 0,
done: true
};
}
};
var WhatsNewRSSDefaultArgs = {
rssFeedURL: '',
selector: '',
loaderIcon: "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\">\n\t<circle cx=\"50\" cy=\"50\" fill=\"none\" stroke=\"#9f9f9f\" stroke-width=\"10\" r=\"35\" stroke-dasharray=\"164.93361431346415 56.97787143782138\">\n\t\t<animateTransform attributeName=\"transform\" type=\"rotate\" repeatCount=\"indefinite\" dur=\"1s\" values=\"0 50 50;360 50 50\" keyTimes=\"0;1\"></animateTransform>\n\t</circle>\n\t</svg>",
viewAll: {
link: '',
label: 'View All'
},
triggerButton: {
label: '',
icon: "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.61703 13.1998C8.04294 13.1503 7.46192 13.125 6.875 13.125H6.25C4.17893 13.125 2.5 11.4461 2.5 9.375C2.5 7.30393 4.17893 5.625 6.25 5.625H6.875C7.46192 5.625 8.04294 5.59972 8.61703 5.55018M8.61703 13.1998C8.82774 14.0012 9.1031 14.7764 9.43719 15.5195C9.64341 15.9782 9.48685 16.5273 9.05134 16.7787L8.50441 17.0945C8.04492 17.3598 7.45466 17.1921 7.23201 16.7106C6.70983 15.5811 6.30451 14.3866 6.03155 13.1425M8.61703 13.1998C8.29598 11.9787 8.125 10.6968 8.125 9.375C8.125 8.05316 8.29598 6.77125 8.61703 5.55018M8.61703 13.1998C11.25 13.427 13.737 14.1643 15.9789 15.3124M8.61703 5.55018C11.25 5.323 13.737 4.58569 15.9789 3.43757M15.9789 3.43757C15.8808 3.12162 15.7751 2.80903 15.662 2.5M15.9789 3.43757C16.4247 4.87356 16.7131 6.37885 16.8238 7.93326M15.9789 15.3124C15.8808 15.6284 15.7751 15.941 15.662 16.25M15.9789 15.3124C16.4247 13.8764 16.7131 12.3711 16.8238 10.8167M16.8238 7.93326C17.237 8.2772 17.5 8.79539 17.5 9.375C17.5 9.95461 17.237 10.4728 16.8238 10.8167M16.8238 7.93326C16.8578 8.40942 16.875 8.8902 16.875 9.375C16.875 9.8598 16.8578 10.3406 16.8238 10.8167\" stroke=\"#94A3B8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>",
beforeBtn: '',
afterBtn: '',
className: '',
onClick: function () {}
},
notification: {
setLastPostUnixTime: null,
getLastPostUnixTime: null
},
flyout: {
title: "What's New?",
innerContent: {
titleLink: true,
additionalClasses: []
},
excerpt: {
wordLimit: 500,
moreSymbol: '…',
readMore: {
label: 'Read More',
className: ''
}
},
className: '',
closeOnEsc: true,
closeOnOverlayClick: true,
closeBtnIcon: "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 18L18 6M6 6L18 18\" stroke=\"#94A3B8\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>",
formatDate: null,
onOpen: function () {},
onClose: function () {},
onReady: function () {}
}
};
var WhatsNewRSS = /** @class */function () {
/**
* Initialize our class.
*
* @param {ConstructorArgs} args
*/
function WhatsNewRSS(args) {
this.rssFeedURLs = [];
/**
* UnixTime stamp of the last seen or read post.
*/
this.lastPostUnixTime = 0;
/**
* UnixTime stamp of the last seen or read post for multi feeds by feed key.
*/
this.multiLastPostUnixTime = {};
/**
* Total number of new notification counts.
*/
this.notificationsCount = 0;
/**
* Notification counts for multi feeds by feed key.
*/
this.multiNotificationCount = {};
/**
* Check if has new feeds.
*/
this.hasNewFeeds = false;
/**
* Check if has new feeds in multi feeds mode.
*/
this.multiHasNewFeeds = {};
this.validateArgs(args);
this.parseDefaults(args);
this.setElement();
if (!this.getElement()) {
console.warn('WNR: Cannot find element with', this.getArgs().selector);
return;
}
this.setID();
this.setRSSFeedURLs();
WhatsNewRSSCacheUtils.setInstanceID(this.getID());
this.RSS_Fetch_Instance = new WhatsNewRSSFetch(this);
this.RSS_View_Instance = new WhatsNewRSSView(this);
this.setNotificationsCount();
this.setTriggers();
}
;
/**
* Validate the passed arguments in constructor.
*
* @param {ConstructorArgs} args
*/
WhatsNewRSS.prototype.validateArgs = function (args) {
["rssFeedURL", "selector"].forEach(function (requiredArg) {
if (!args[requiredArg]) {
throw new Error("".concat(requiredArg, " is a required argument. It cannot be empty or undefined."));
}
switch (requiredArg) {
case 'rssFeedURL':
var arg = args[requiredArg];
if (Array.isArray(arg)) {
arg.forEach(function (rssFeedURL) {
if (!(rssFeedURL === null || rssFeedURL === void 0 ? void 0 : rssFeedURL.key)) {
throw new Error("The parameter \"key\" is required for \"".concat(requiredArg, "\" parameter in multi-feed mode."));
}
if (rssFeedURL.key.includes(' ')) {
throw new Error("The parameter \"key\" cannot have spaces for \"".concat(requiredArg, "\" parameter in multi-feed mode. Ref Key: \"").concat(rssFeedURL.key, "\""));
}
});
}
break;
default:
break;
}
});
};
/**
* Parse the arguments passed by the user with the defaults.
*
* @param {ConstructorArgs} args
*/
WhatsNewRSS.prototype.parseDefaults = function (args) {
var _a, _b;
this.args = __assign(__assign(__assign({}, WhatsNewRSSDefaultArgs), args), {
viewAll: __assign(__assign({}, WhatsNewRSSDefaultArgs.viewAll), args === null || args === void 0 ? void 0 : args.viewAll),
triggerButton: __assign(__assign({}, WhatsNewRSSDefaultArgs.triggerButton), args === null || args === void 0 ? void 0 : args.triggerButton),
flyout: __assign(__assign(__assign({}, WhatsNewRSSDefaultArgs.flyout), args === null || args === void 0 ? void 0 : args.flyout), {
innerContent: __assign(__assign({}, WhatsNewRSSDefaultArgs.flyout.innerContent), (_a = args === null || args === void 0 ? void 0 : args.flyout) === null || _a === void 0 ? void 0 : _a.innerContent),
excerpt: __assign(__assign({}, WhatsNewRSSDefaultArgs.flyout.excerpt), (_b = args === null || args === void 0 ? void 0 : args.flyout) === null || _b === void 0 ? void 0 : _b.excerpt)
})
});
};
/**
* Returns parsed args.
*
* @returns {ConstructorArgs}
*/
WhatsNewRSS.prototype.getArgs = function () {
return this.args;
};
/**
* Sets the HTML element queried using passed selector.
*/
WhatsNewRSS.prototype.setElement = function () {
this.element = document.querySelector(this.args.selector);
};
/**
* Returns the html element according to the selector.
*
* @returns {HTMLElement}
*/
WhatsNewRSS.prototype.getElement = function () {
return this.element;
};
/**
* Creates unique ID for current instance, that can be used by the library elements.
*/
WhatsNewRSS.prototype.setID = function () {
var data = [this.getArgs().selector];
var rssFeedURL = this.getArgs().rssFeedURL;
if (Array.isArray(rssFeedURL)) {
rssFeedURL.forEach(function (_rssFeedURL) {
data.push(_rssFeedURL.key);
});
} else {
data.push(rssFeedURL);
}
this.ID = btoa(data.join('-')).slice(-12).replace(/=/g, '');
};
/**
* Whether or not multiple feed urls is provided or not.
*
* @returns {boolean}
*/
WhatsNewRSS.prototype.isMultiFeedRSS = function () {
return 'string' !== typeof this.getArgs().rssFeedURL;
};
WhatsNewRSS.prototype.setRSSFeedURLs = function () {
var _this = this;
var rssFeedURL = this.getArgs().rssFeedURL;
if (!this.isMultiFeedRSS()) {
this.rssFeedURLs.push({
key: null,
label: '',
url: rssFeedURL.toString()
});
} else {
if (Array.isArray(rssFeedURL)) {
rssFeedURL.forEach(function (_item) {
_this.rssFeedURLs.push(_item);
});
}
}
};
WhatsNewRSS.prototype.getRSSFeedURLs = function () {
return this.rssFeedURLs;
};
/**
* Returns the current instance unique ID.
*
* @returns {string}
*/
WhatsNewRSS.prototype.getID = function () {
return this.ID;
};
/**
* Checks and counts new notification for the notification badge.
*/
WhatsNewRSS.prototype.setNotificationsCount = function () {
return __awaiter(this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [4 /*yield*/, Promise.all(this.getRSSFeedURLs().map(_a => {
var key = _a.key;
return __awaiter(_this, void 0, void 0, function () {
var lastPostUnixTime;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
lastPostUnixTime = 0;
if (!('function' === typeof this.getArgs().notification.getLastPostUnixTime)) return [3 /*break*/, 2];
return [4 /*yield*/, this.getArgs().notification.getLastPostUnixTime(key, this)];
case 1:
lastPostUnixTime = _b.sent();
return [3 /*break*/, 3];
case 2:
lastPostUnixTime = WhatsNewRSSCacheUtils.getLastPostUnixTime(key);
_b.label = 3;
case 3:
if (this.isMultiFeedRSS()) {
this.multiLastPostUnixTime[key] = +lastPostUnixTime;
} else {
this.lastPostUnixTime = +lastPostUnixTime;
}
return [2 /*return*/];
}
});
});
}))];
case 1:
_a.sent();
return [4 /*yield*/, this.RSS_Fetch_Instance.fetchData().then(function (res) {
Object.keys(res).forEach(function (key) {
var data = res[key];
if (!data.length) {
return;
}
_this.multiNotificationCount[key] = 0;
var currentPostUnixTime = +data[0].date;
var lastPostUnixTime = _this.isMultiFeedRSS() ? _this.multiLastPostUnixTime[key] : _this.lastPostUnixTime;
if (currentPostUnixTime > lastPostUnixTime) {
data.forEach(function (item) {
if (item.date > lastPostUnixTime) {
if (_this.isMultiFeedRSS()) {
_this.multiNotificationCount[key]++;
_this.multiHasNewFeeds[key] = true;
}
// Keep a record of total notifications even in multi-feed mode.
_this.notificationsCount++;
_this.hasNewFeeds = true;
}
});
_this.RSS_View_Instance.setNotification(_this.notificationsCount);
}
});
}).catch(console.error)];
case 2:
_a.sent();
return [2 /*return*/];
}
});
});
};
/**
* Returns total number of new notifications.
*
* @returns {number}
*/
WhatsNewRSS.prototype.getNotificationsCount = function () {
return this.notificationsCount;
};
/**
* Sets the triggers for the library, eg: close, open, fetch.
*/
WhatsNewRSS.prototype.setTriggers = function () {
var _this = this;
var triggerButton = document.getElementById(this.RSS_View_Instance.getTriggerButtonID());
var flyout = document.getElementById(this.RSS_View_Instance.getFlyoutID());
var flyoutInner = flyout.querySelector('.whats-new-rss-flyout-inner-content');
var flyoutCloseBtn = document.getElementById(this.RSS_View_Instance.getFlyoutCloseBtnID());
var multiFeedNav = document.getElementById(this.RSS_View_Instance.getFlyoutMultiFeedNavID());
var injectContents = function (key) {
/**
* Fetch data on flyout open.
*/
_this.RSS_Fetch_Instance.fetchData().then(function (res) {
flyoutInner.innerHTML = '';
var data = res[key];
if (!data.length) {
return;
}
var currentPostUnixTime = +data[0].date;
var lastPostUnixTime = _this.isMultiFeedRSS() ? _this.multiLastPostUnixTime[key] : _this.lastPostUnixTime;
data.forEach(function (item) {
var isNewPost = !!lastPostUnixTime ? item.date > lastPostUnixTime : false;
var contentTitle = _this.getArgs().flyout.innerContent.titleLink ? "<a href=\"".concat(item.postLink, "\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<h2>").concat(item.title, "</h2>\n\t\t\t\t\t\t\t</a>") : "<h2>".concat(item.title, "</h2>");
var innerContent = "\n\t\t\t\t\t\t\t\t<div class=\"rss-content-header\">\n\t\t\t\t\t\t\t\t\t<p>".concat(_this.RSS_View_Instance.formatDate(new Date(item.date)), "</p>\n\t\t\t\t\t\t\t\t\t").concat(contentTitle, "\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t").concat(_this.RSS_View_Instance.createExcerpt(item.description, item.postLink, _this.getArgs().flyout.excerpt), "\n\t\t\t\t\t\t\t\t").concat(_this.RSS_View_Instance.listChildrenPosts(item.children), "\n\t\t\t\t\t\t\t");
var additionalClasses = _this.getArgs().flyout.innerContent.additionalClasses;
if (!!key) {
additionalClasses.push('`inner-content-item-feed-key-${key}`');
}
flyoutInner.innerHTML += _this.RSS_View_Instance.innerContentWrapper(innerContent, isNewPost, additionalClasses.join(' '));
});
if (_this.getArgs().viewAll.link) {
// If we have link provided for the view all button then append a view all button at the end of the contents.
flyoutInner.innerHTML += _this.RSS_View_Instance.innerContentWrapper("\n\t\t\t\t\t\t\t<a href=\"".concat(_this.getArgs().viewAll.link, "\" class=\"button view-all\">").concat(_this.getArgs().viewAll.label, "</a>\n\t\t\t\t\t\t\t"));
}
_this.RSS_View_Instance.setIsLoading(false);
flyout.classList.add('ready');
_this.getArgs().flyout.onReady(_this);
/**
* Change focus to flyout on flyout ready.
*/
flyout.focus();
// Set the last latest post date for notification handling.
if (!_this.isMultiFeedRSS()) {
_this.lastPostUnixTime = currentPostUnixTime;
if (_this.hasNewFeeds) {
if ('function' === typeof _this.getArgs().notification.setLastPostUnixTime) {
_this.getArgs().notification.setLastPostUnixTime(currentPostUnixTime, key);
} else {
WhatsNewRSSCacheUtils.setLastPostUnixTime(currentPostUnixTime, key);
}
}
}
}).catch(console.error);
};
/**
* Open flyout on trigger button click.
* Flyout has three states: `closed | open | ready`
*/
triggerButton.addEventListener("click", function (e) {
e.preventDefault();
_this.getArgs().triggerButton.onClick(_this);
_this.RSS_View_Instance.setIsLoading(true);
flyout.classList.remove('closed');
flyout.classList.add('open');
document.body.classList.add('whats-new-rss-is-active');
_this.getArgs().flyout.onOpen(_this);
if (!_this.isMultiFeedRSS()) {
injectContents(null);
return;
}
var navBtns = multiFeedNav.querySelectorAll('button');
navBtns.forEach(function (navBtn) {
_this.RSS_View_Instance.setMultiFeedTabNotificationCount(navBtn.dataset.feedKey, _this.multiNotificationCount[navBtn.dataset.feedKey]);
navBtn.addEventListener('click', function (e) {
e.preventDefault();
var currentFeedKey = navBtn.dataset.feedKey;
_this.multiNotificationCount[currentFeedKey] = 0;
_this.RSS_Fetch_Instance.fetchData().then(function (res) {
var currentPostUnixTime = res[currentFeedKey][0].date;
_this.multiLastPostUnixTime[currentFeedKey] = currentPostUnixTime;
if (true === _this.multiHasNewFeeds[currentFeedKey]) {
if ('function' === typeof _this.getArgs().notification.setLastPostUnixTime) {
_this.getArgs().notification.setLastPostUnixTime(currentPostUnixTime, currentFeedKey);
} else {
WhatsNewRSSCacheUtils.setLastPostUnixTime(currentPostUnixTime, currentFeedKey);
}
}
_this.multiHasNewFeeds[currentFeedKey] = false;
}).catch(console.error);
navBtns.forEach(function (navBtn) {
navBtn.classList.remove('selected');
var feedKey = navBtn.dataset.feedKey;
var innerContentClassName = ".inner-content-item-feed-key-".concat(feedKey);
document.querySelectorAll(innerContentClassName).forEach(function (item) {
if (currentFeedKey !== feedKey) {
item.classList.add('hidden');
} else {
item.classList.remove('hidden');
}
});
});
navBtn.classList.add('selected');
injectContents(currentFeedKey);
});
});
navBtns[0].click();
});
/**
* Handle events for the closing of the flyout.
*/
var handleFlyoutClose = function () {
flyout.classList.add('closed');
flyout.classList.remove('open');
flyout.classList.remove('ready');
document.body.classList.remove('whats-new-rss-is-active');
if (_this.isMultiFeedRSS()) {
_this.RSS_View_Instance.setNotification(Object.values(_this.multiNotificationCount).filter(Boolean).length);
} else {
_this.hasNewFeeds = false;
_this.RSS_View_Instance.setNotification(false);
}
flyoutInner.innerHTML = '';
_this.getArgs().flyout.onClose(_this);
/**
* Change focus back to trigger button after flyout close.
*/
triggerButton.focus();
};
if (this.getArgs().flyout.closeOnEsc) {
document.addEventListener('keydown', function (e) {
if ('Escape' !== e.key) return;
if (!flyout.classList.contains('open')) return;
handleFlyoutClose();
});
}
if (this.getArgs().flyout.closeOnOverlayClick) {
flyout.querySelector('.whats-new-rss-flyout-overlay').addEventListener('click', handleFlyoutClose);
}
flyoutCloseBtn.addEventListener('click', handleFlyoutClose);
};
return WhatsNewRSS;
}();
var WhatsNewRSSCacheUtils = /** @class */function () {
function WhatsNewRSSCacheUtils() {}
WhatsNewRSSCacheUtils.setInstanceID = function (instanceID) {
if (!this.instanceID) {
this.instanceID = instanceID;
}
};
WhatsNewRSSCacheUtils.prefixer = function (key, prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
if (!this.instanceID) {
throw new Error('Instance ID not set.');
}
return !!prefixKey ? "".concat(this.keys[key], "-").concat(this.instanceID, "-").concat(prefixKey) : "".concat(this.keys[key], "-").concat(this.instanceID);
};
WhatsNewRSSCacheUtils._setDataExpiry = function (prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
var expiryInSeconds = 86400; // Defaults to 24 hours.
var now = new Date();
var expiry = now.getTime() + expiryInSeconds * 1000;
sessionStorage.setItem(this.prefixer('SESSION_DATA_EXPIRY', prefixKey), JSON.stringify(expiry));
};
WhatsNewRSSCacheUtils._isDataExpired = function (prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
var key = this.prefixer('SESSION_DATA_EXPIRY', prefixKey);
var value = window.sessionStorage.getItem(key);
if (!value) {
return true;
}
var expiry = JSON.parse(value);
var now = new Date();
if (now.getTime() > expiry) {
window.sessionStorage.removeItem(key);
return true;
}
return false;
};
WhatsNewRSSCacheUtils.setSessionData = function (data, prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
this._setDataExpiry(prefixKey);
return window.sessionStorage.setItem(this.prefixer('SESSION', prefixKey), data);
};
WhatsNewRSSCacheUtils.getSessionData = function (prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
if (!this._isDataExpired(prefixKey)) {
return window.sessionStorage.getItem(this.prefixer('SESSION', prefixKey));
}
return '{}';
};
WhatsNewRSSCacheUtils.setLastPostUnixTime = function (unixTime, prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
return window.localStorage.setItem(this.prefixer('LAST_LATEST_POST', prefixKey), unixTime.toString());
};
WhatsNewRSSCacheUtils.getLastPostUnixTime = function (prefixKey) {
if (prefixKey === void 0) {
prefixKey = '';
}
return +window.localStorage.getItem(this.prefixer('LAST_LATEST_POST', prefixKey));
};
WhatsNewRSSCacheUtils.keys = {
SESSION_DATA_EXPIRY: "whats-new-cache-expiry",
LAST_LATEST_POST: "whats-new-last-unixtime",
SESSION: "whats-new-cache"
};
return WhatsNewRSSCacheUtils;
}();
/**
* Class for handling the data fetching.
* It also handles the session caching of the fetched data internally.
*/
var WhatsNewRSSFetch = /** @class */function () {
function WhatsNewRSSFetch(RSS) {
var _this = this;
this.data = {};
this.RSS = RSS;
this.RSS.getRSSFeedURLs().forEach(function (feed) {
var sessionCache = JSON.parse(WhatsNewRSSCacheUtils.getSessionData(feed.key));
if (sessionCache && sessionCache.length) {
_this.data[feed.key] = sessionCache;
}
});
}
WhatsNewRSSFetch.prototype.fetchData = function () {
return __awaiter(this, void 0, void 0, function () {
var fetchPromises;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (Object.keys(this.data).length) {
return [2 /*return*/, this.data];
}
fetchPromises = this.RSS.getRSSFeedURLs().map(feed => {
return __awaiter(_this, void 0, void 0, function () {
var res, data, parser, xmlDoc, items;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
this.data[feed.key] = [];
return [4 /*yield*/, fetch(feed.url)];
case 1:
res = _a.sent();
return [4 /*yield*/, res.text()];
case 2:
data = _a.sent();
/**
* There was an issue with the xml content parse
* And during parse we were getting "<parsererror>" because of the ‘raquo’ entity.
*/
data = data.replace(/»/g, '&raquo;');
parser = new DOMParser();
xmlDoc = parser.parseFromString(data, 'text/xml');
items = xmlDoc.querySelectorAll('item');
items.forEach(function (item) {
var _a;
var title = item.querySelector('title').textContent;
var link = item.querySelector('link').textContent;
var contentEncoded = item.querySelector('content\\:encoded, encoded');
var content = contentEncoded ? contentEncoded.textContent : '';
var rssDate = item.querySelector('pubDate').innerHTML;
_this.data[feed.key].push({
title: title,
date: !!rssDate ? +new Date(rssDate) : null,
postLink: link,
description: content.replace(/<a\b((?:(?!target=)[^>])*)>/g, '<a$1 target="_blank">').replace(/<p>\s*<\/p>/g, ''),
children: JSON.parse(((_a = item.querySelector('children')) === null || _a === void 0 ? void 0 : _a.innerHTML) || '{}')
});
});
WhatsNewRSSCacheUtils.setSessionData(JSON.stringify(this.data[feed.key]), feed.key);
return [2 /*return*/];
}
});
});
});
return [4 /*yield*/, Promise.all(fetchPromises)];
case 1:
_a.sent();
return [2 /*return*/, this.data];
}
});
});
};
return WhatsNewRSSFetch;
}();
/**
* The class for handling library trigger button and flyout elements.
* It also provides some necessary methods that can be used during development.
*/
var WhatsNewRSSView = /** @class */function () {
function WhatsNewRSSView(RSS) {
this.RSS = RSS;
this.createTriggerButton();
this.createFlyOut();
}
WhatsNewRSSView.prototype.getTriggerButtonID = function () {
return "whats-new-rss-btn-".concat(this.RSS.getID());
};
WhatsNewRSSView.prototype.getFlyoutID = function () {
return "whats-new-rss-flyout-".concat(this.RSS.getID());
};
WhatsNewRSSView.prototype.getFlyoutCloseBtnID = function () {
return "whats-new-rss-flyout-close-".concat(this.RSS.getID());
};
WhatsNewRSSView.prototype.getFlyoutMultiFeedNavID = function () {
return "whats-new-rss-flyout-multi-feed-nav-".concat(this.RSS.getID());
};
WhatsNewRSSView.prototype.setIsLoading = function (isLoading) {
if (isLoading === void 0) {
isLoading = false;
}
var flyoutWrapper = document.getElementById(this.getFlyoutID());
if (isLoading) {
flyoutWrapper.classList.add('is-loading');
} else {
flyoutWrapper.classList.remove('is-loading');
}
};
WhatsNewRSSView.prototype.setNotification = function (notificationsCount) {
var notificationBadge = document.querySelector("#".concat(this.getTriggerButtonID(), " .whats-new-rss-notification-badge"));
if (!!notificationsCount) {
if (this.RSS.isMultiFeedRSS()) {
notificationBadge.innerHTML = '';
notificationBadge.classList.add('is-multi-feed');
} else {
notificationBadge.innerHTML = notificationsCount > 9 ? "9+" : notificationsCount.toString();
}
notificationBadge.classList.remove('hide');
} else {
notificationBadge.classList.add('hide');
}
};
WhatsNewRSSView.prototype.createTriggerButton = function () {
var button = '';
var label = this.RSS.getArgs().triggerButton.label;
if (!!label) {
button = "\n\t\t\t".concat(this.RSS.getArgs().triggerButton.beforeBtn, "\n\t\t\t<a class=\"whats-new-rss-trigger-button has-label\" id=\"").concat(this.getTriggerButtonID(), "\">\n\t\t\t\t<div class=\"icon-badge\">\n\t\t\t\t\t").concat(this.RSS.getArgs().triggerButton.icon, "\n\t\t\t\t\t<div class=\"whats-new-rss-notification-badge hide\">0</div>\n\t\t\t\t</div>\n\t\t\t\t").concat(label, "\n\t\t\t</a>\n\t\t\t").concat(this.RSS.getArgs().triggerButton.afterBtn, "\n\t\t\t");
} else {
button = "\n\t\t\t".concat(this.RSS.getArgs().triggerButton.beforeBtn, "\n\t\t\t<a class=\"whats-new-rss-trigger-button\" id=\"").concat(this.getTriggerButtonID(), "\">\n\t\t\t\t").concat(this.RSS.getArgs().triggerButton.icon, "\n\t\t\t\t<div class=\"whats-new-rss-notification-badge hide\">0</div>\n\t\t\t</a>\n\t\t\t").concat(this.RSS.getArgs().triggerButton.afterBtn, "\n\t\t\t");
}
this.RSS.getElement().innerHTML += button;
};
WhatsNewRSSView.prototype.createFlyOut = function () {
var wrapperClasses = ['whats-new-rss-flyout', 'closed'];
if (this.RSS.getArgs().flyout.className) {
wrapperClasses.push(this.RSS.getArgs().flyout.className);
}
var multiFeedNav = [];
if (this.RSS.isMultiFeedRSS()) {
multiFeedNav.push("<nav id=\"".concat(this.getFlyoutMultiFeedNavID(), "\" class=\"whats-new-rss-multi-feed-nav\">"));
this.RSS.getRSSFeedURLs().forEach(function (feed) {
multiFeedNav.push("<button type=\"button\" data-feed-key=\"".concat(feed.key, "\">\n\t\t\t\t\t\t").concat(feed.label, "\n\t\t\t\t\t\t<div class=\"new-notification-count\"></div>\n\t\t\t\t\t</button>\n\t\t\t\t\t"));
});
multiFeedNav.push('</nav>');
}
var flyoutWrapper = document.createElement('div');
flyoutWrapper.setAttribute('id', this.getFlyoutID());
flyoutWrapper.setAttribute('class', wrapperClasses.join(' '));
flyoutWrapper.setAttribute('role', 'dialog');
flyoutWrapper.innerHTML = "\n\t\t<div class=\"whats-new-rss-flyout-contents\">\n\n\t\t\t<div class=\"whats-new-rss-flyout-inner-header\">\n\n\t\t\t\t<div class=\"whats-new-rss-flyout-inner-header__title-icon-wrapper\">\n\t\t\t\t\t<h3>".concat(this.RSS.getArgs().flyout.title, "</h3>\n\n\t\t\t\t\t<span class=\"whats-new-rss-flyout-inner-header__loading-icon\">\n\t\t\t\t\t").concat(this.RSS.getArgs().loaderIcon, "\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\n\t\t\t\t<button type=\"button\" id=\"").concat(this.getFlyoutCloseBtnID(), "\">").concat(this.RSS.getArgs().flyout.closeBtnIcon, "</button>\n\t\t\t</div>\n\n\t\t\t").concat(multiFeedNav.join(''), "\n\n\t\t\t<div class=\"whats-new-rss-flyout-inner-content\">\n\t\t\t\t<div class=\"skeleton-container\">\n\t\t\t\t\t<div class=\"skeleton-row whats-new-rss-flyout-inner-content-item\"></div>\n\t\t\t\t\t<div class=\"skeleton-row whats-new-rss-flyout-inner-content-item\"></div>\n\t\t\t\t\t<div class=\"skeleton-row whats-new-rss-flyout-inner-content-item\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t</div>\n\n\t\t<div class=\"whats-new-rss-flyout-overlay\"></div>\n\t\t");
document.body.appendChild(flyoutWrapper);
};
WhatsNewRSSView.prototype.setMultiFeedTabNotificationCount = function (key, notificationCount) {
if (notificationCount === void 0) {
notificationCount = 0;
}
var tabBtn = document.querySelector("#".concat(this.getFlyoutMultiFeedNavID(), " button[data-feed-key=\"").concat(key, "\"]"));
if (!tabBtn) {
return;
}
var el = tabBtn.querySelector('.new-notification-count');
if (notificationCount) {
var _count = notificationCount > 9 ? '9+' : notificationCount;
el.innerHTML = _count.toString();
} else {
el.innerHTML = '';
}
};
WhatsNewRSSView.prototype.innerContentWrapper = function (content, isNewPost, additionalClasses) {
if (isNewPost === void 0) {
isNewPost = false;
}
if (additionalClasses === void 0) {
additionalClasses = '';
}
var classes = ['whats-new-rss-flyout-inner-content-item'];
if (isNewPost) {
classes.push('rss-new-post');
}
if (!!additionalClasses) {
classes.push(additionalClasses);
}
return "\n\t\t<div class=\"".concat(classes.join(' '), "\">\n\t\t\t").concat(isNewPost ? '<small class="new-post-badge">New ✨</small>' : '', "\n\t\t\t").concat(content, "\n\t\t</div>\n\t\t");
};
WhatsNewRSSView.prototype.createExcerpt = function (content, readMoreLink, options) {
var wordLimit = options.wordLimit,
moreSymbol = options.moreSymbol,
readMore = options.readMore;
if (!wordLimit) {
return content;
}
var plainText = content.replace(/<[^>]*>/g, '');
var words = plainText.split(/\s+/);
var rawExcerpt = words.slice(0, wordLimit).join(' ');
if (moreSymbol) {
rawExcerpt += moreSymbol;
}
if (wordLimit > words.length) {
return content;
}
if (!!readMoreLink && !!(readMore === null || readMore === void 0 ? void 0 : readMore.label)) {
return "<p>".concat(rawExcerpt, " <a href=\"").concat(readMoreLink, "\" target=\"_blank\" class=\"").concat(readMore.className, "\">").concat(readMore.label, "</a></p>");
}
return "<p>".concat(rawExcerpt, "</p>");
};
WhatsNewRSSView.prototype.listChildrenPosts = function (children) {
var _this = this;
var _children = Object.values(children);
if (!_children.length) return '';
var details = document.createElement('details');
var summary = document.createElement('summary');
var itemsWrapper = document.createElement('div');
_children.forEach(function (child) {
var postContentDoc = new DOMParser().parseFromString(child.post_content, 'text/html');
var itemDiv = document.createElement('div');
itemDiv.classList.add('sub-version-item');
itemDiv.innerHTML = "\n\t\t\t\t<div class=\"sub-version-header\">\n\t\t\t\t\t<h4 class=\"sub-version-title\">".concat(child.post_title, "</h4>\n\t\t\t\t\t<span class=\"sub-version-date\">").concat(_this.formatDate(new Date(child.post_date)), "</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"sub-version-content\">").concat(postContentDoc.documentElement.textContent, "</div>\n\t\t\t");
itemsWrapper.appendChild(itemDiv);
});
summary.innerHTML = '<p class="text-see-more">See More</p><p class="text-see-less">See Less</p>';
details.appendChild(summary);
details.appendChild(itemsWrapper);
itemsWrapper.classList.add('sub-version-items-wrapper');
details.classList.add('whats-new-rss-sub-version-details');
return details.outerHTML;
};
WhatsNewRSSView.prototype.formatDate = function (date) {
if ('function' === typeof this.RSS.getArgs().flyout.formatDate) {
return this.RSS.getArgs().flyout.formatDate(date);
}
var currentDate = new Date();
var timestamp = date.getTime();
var currentTimestamp = currentDate.getTime();
var difference = currentTimestamp - timestamp;
// Define time intervals in milliseconds
var minute = 60 * 1000;
var hour = minute * 60;
var day = hour * 24;
var week = day * 7;
var month = day * 30; // Rough estimate, assuming 30 days in a month
if (difference < minute) {
return 'Just now';
} else if (difference < hour) {
var minutes = Math.floor(difference / minute);
return "".concat(minutes, " minute").concat(minutes > 1 ? 's' : '', " ago");
} else if (difference < day) {
var hours = Math.floor(difference / hour);
return "".concat(hours, " hour").concat(hours > 1 ? 's' : '', " ago");
} else if (difference < week) {
var days = Math.floor(difference / day);
return "".concat(days, " day").concat(days > 1 ? 's' : '', " ago");
} else if (difference < month) {
var weeks = Math.floor(difference / week);
return "".concat(weeks, " week").concat(weeks > 1 ? 's' : '', " ago");
} else {
// Handle months and years accordingly
// This is a rough estimate and may not be accurate in all cases
var months = Math.floor(difference / month);
return "".concat(months, " month").concat(months > 1 ? 's' : '', " ago");
}
};
return WhatsNewRSSView;
}();
async function getCSS() {
return `.whats-new-rss-is-active{overflow:hidden}.whats-new-rss-trigger-button{display:flex;align-items:center;position:relative;width:auto;padding:5px;cursor:pointer}.whats-new-rss-trigger-button.has-label{align-items:end;gap:10px}.whats-new-rss-trigger-button.has-label .icon-badge{position:relative;line-height:1}.whats-new-rss-trigger-button.has-label .icon-badge .whats-new-rss-notification-badge{top:-12px;right:-10px}.whats-new-rss-trigger-button .whats-new-rss-notification-badge{position:absolute;top:-8px;right:-5px;width:20px;font-size:10px;line-height:20px;text-align:center;border-radius:10px;color:#fff;background:red;transition:transform .2s ease-in-out}.whats-new-rss-trigger-button .whats-new-rss-notification-badge.is-multi-feed{top:-2px;right:-2px;font-size:0;width:10px;height:10px}.whats-new-rss-trigger-button .whats-new-rss-notification-badge.hide{display:none}.whats-new-rss-trigger-button:hover .whats-new-rss-notification-badge{transform:scale(1.2)}.whats-new-rss-flyout{position:fixed;top:0;right:0;bottom:0;width:100%;z-index:99999;transition:visibility .3s ease-in-out;font-family:Arial,Helvetica,sans-serif}.whats-new-rss-flyout .lightbox-trigger,.whats-new-rss-flyout.hidden{display:none}.whats-new-rss-flyout.is-loading .whats-new-rss-flyout-inner-header__loading-icon{display:block;margin:auto}.whats-new-rss-flyout.is-loading .whats-new-rss-flyout-inner-header__loading-icon svg{display:block;background:0 0;width:25px;height:25px}.whats-new-rss-flyout .whats-new-rss-flyout-contents{position:fixed;display:flex;right:0;width:30%;height:100%;flex-direction:column;background-color:#fff;transition:transform .3s ease-in-out;z-index:9999}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px 16px 24px;border-bottom:1px solid #ccc}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-header button{border:none;background:0 0;font-size:30px;cursor:pointer;color:#94a3b8;padding:0;margin:0;box-shadow:none}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-header .whats-new-rss-flyout-inner-header__title-icon-wrapper{display:flex;gap:10px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-header .whats-new-rss-flyout-inner-header__title-icon-wrapper h3{margin:0;padding:0;color:#0f172a;font-weight:600;font-size:16px;line-height:24px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-multi-feed-nav{display:flex;padding:0 30px;border-bottom:1px solid #ccc;gap:2em;overflow:auto;white-space:nowrap}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-multi-feed-nav button{position:relative;background:0 0;color:inherit;padding:15px 0;border-bottom:2px solid transparent}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-multi-feed-nav button:focus,.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-multi-feed-nav button:hover{border-color:inherit}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-multi-feed-nav button.selected{border-color:#5d5d5d}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-multi-feed-nav button .new-notification-count{position:absolute;top:0;right:-10px;width:20px;font-size:10px;line-height:20px;text-align:center;border-radius:10px;color:#fff;background:red}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content{flex:1;overflow-y:auto}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .skeleton-container{margin:30px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item{border-bottom:1px solid #d8dfe9;padding:30px 24px;color:#475569;font-weight:400;font-size:14px;line-height:20px;display:flex;flex-direction:column;gap:13px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item>*{margin:0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item.skeleton-row{height:25vh;margin:40px 0;background:linear-gradient(90deg,#eee 25%,#ddd 50%,#eee 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item.rss-new-post{position:relative}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item.rss-new-post .new-post-badge{background:#ff3d3d;border-radius:5px;position:absolute;right:45px;padding:0 5px;color:#fff}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item .rss-content-header{display:flex;flex-direction:column;gap:15px;padding:0 0 8px 0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item .rss-content-header p{color:#94a3b8;margin:0;padding:0;font-weight:600;font-size:14px;line-height:16px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item .rss-content-header h2{margin:0;color:#0f172a;font-weight:700;line-height:28px;font-size:20px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item h2{font-weight:700;font-size:18px;line-height:24px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item h3{font-weight:700;font-size:16px;line-height:22px;margin-top:12px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item h4{font-weight:700;font-size:15px;line-height:20px;margin-top:12px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item h5{font-weight:700;font-size:14px;line-height:18px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item h6{font-weight:700;font-size:13px;line-height:16px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item p{padding:0;font-size:14px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item p:last-child{margin-bottom:0;padding-bottom:0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item a{color:#1170ff;text-decoration:none}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item figure{margin:10px 0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item figure.wp-block-embed.is-type-video{position:relative;width:100%;height:0;padding-bottom:56.25%}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item figure iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item video{vertical-align:middle;width:100%}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item strong{font-weight:600}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item ol,.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item ul{padding-inline-start:20px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item ol li,.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item ul li{margin-bottom:5px}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item ul{list-style-type:disc}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-flyout-inner-content .whats-new-rss-flyout-inner-content-item ol{list-style-type:decimal}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details{line-height:20px;font-size:.9em;margin:10px 0;background:#f9fafb}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details summary{display:flex;justify-content:space-between;cursor:pointer;padding:20px 15px;height:1em;line-height:20px;font-weight:800}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details summary::after{content:'⌃';font-size:20px;transform:rotateX(180deg);font-weight:800}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details summary .text-see-more{display:block}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details summary .text-see-less{display:none}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details[open] summary{border-bottom:1px solid #e2e8f0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details[open] summary::after{transform:rotateX(45deg)}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details[open] summary .text-see-more{display:none}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details[open] summary .text-see-less{display:block}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details .sub-version-item{position:relative;padding:1em;border-bottom:1px solid #e2e8f0}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details .sub-version-item .sub-version-header{display:flex;justify-content:space-between}.whats-new-rss-flyout .whats-new-rss-flyout-contents .whats-new-rss-sub-version-details .sub-version-item .sub-version-content{margin-top:1em}.whats-new-rss-flyout .whats-new-rss-flyout-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.5);transition:all .3s ease-in-out}.whats-new-rss-flyout.closed{visibility:hidden}.whats-new-rss-flyout.closed .whats-new-rss-flyout-overlay{opacity:0;visibility:hidden}.whats-new-rss-flyout.closed .whats-new-rss-flyout-contents{transform:translateX(100%)}.whats-new-rss-flyout .whats-new-rss-flyout-inner-header__loading-icon{display:none}@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}@media screen and (max-width:1024px){.whats-new-rss-flyout .whats-new-rss-flyout-contents{width:40%}}@media screen and (max-width:768px){.whats-new-rss-flyout .whats-new-rss-flyout-contents{width:85%}}`;
}
async function addStyleIfNotExists() {
const styleId = 'whats-new-rss-styles';
if (!document.getElementById(styleId)) {
const style = document.createElement('style');
style.id = styleId;
style.innerHTML = await getCSS();
document.head.appendChild(style);
}
}
function createWhatsNewRSSInstance(args) {
return new WhatsNewRSS(args);
}
function useWhatsNewRSS({
selector,
...rest
}) {
const instanceRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
addStyleIfNotExists();
if (!instanceRef.current) {
instanceRef.current = createWhatsNewRSSInstance({
selector,
...rest
});
}
// Cleanup function
return () => {
if (instanceRef.current && typeof instanceRef.current.destroy === 'function') {
instanceRef.current.destroy();
}
};
}, [selector, ...Object.values(rest)]); // Adjust dependencies as needed
return instanceRef.current;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useWhatsNewRSS);
/***/ }),
/***/ "./assets/src/store/globalDataReducer.js":
/*!***********************************************!*\
!*** ./assets/src/store/globalDataReducer.js ***!
\***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
const globalDataReducer = (state = {}, action) => {
let actionType = wp.hooks.applyFilters('astra_dashboard/data_reducer_action', action.type);
switch (actionType) {
case 'UPDATE_INITIAL_STATE':
return {
...action.payload
};
case 'UPDATE_BLOCK_STATUSES':
return {
...state,
blocksStatuses: action.payload
};
case 'UPDATE_INITIAL_STATE_FLAG':
return {
...state,
initialStateSetFlag: action.payload
};
case 'UPDATE_SETTINGS_ACTIVE_NAVIGATION_TAB':
return {
...state,
activeSettingsNavigationTab: action.payload
};
case 'UPDATE_ENABLE_LOAD_FONTS_LOCALLY':
return {
...state,
enableLoadFontsLocally: action.payload
};
case 'UPDATE_ENABLE_PRELOAD_LOCAL_FONTS':
return {
...state,
enablePreloadLocalFonts: action.payload
};
case 'UPDATE_ENABLE_WHITE_LABEL':
return {
...state,
enableWhiteLabel: action.payload
};
case 'UPDATE_PLUGIN_DESCRIPTION':
return {
...state,
pluginDescription: action.payload
};
case 'UPDATE_PLUGIN_NAME':
return {
...state,
pluginName: action.payload
};
case 'UPDATE_THEME_SCREENSHOT_URL':
return {
...state,
themeScreenshotURL: action.payload
};
case 'UPDATE_THEME_DESCRIPTION':
return {
...state,
themeDescription: action.payload
};
case 'UPDATE_THEME_NAME':
return {
...state,
themeName: action.payload
};
case 'UPDATE_AGENCY_LICENSE_LINK':
return {
...state,
agencyLicenseLink: action.payload
};
case 'UPDATE_AGENCY_AUTHOR_URL':
return {
...state,
agencyAuthorURL: action.payload
};
case 'UPDATE_AGENCY_AUTHOR_NAME':
return {
...state,
agencyAuthorName: action.payload
};
case 'UPDATE_FILE_GENERATION':
return {
...state,
enableFileGeneration: action.payload
};
case 'UPDATE_BETA':
return {
...state,
enableBeta: action.payload
};
case 'USE_OLD_HEADER_FOOTER':
return {
...state,
useOldHeaderFooter: action.payload
};
case 'UPGRADE_NOTICES':
return {
...state,
useUpgradeNotices: action.payload
};
case 'UPDATE_SETTINGS_SAVED_NOTIFICATION':
return {
...state,
settingsSavedNotification: action.payload
};
default:
return state;
}
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (globalDataReducer);
/***/ }),
/***/ "./assets/src/store/globalDataStore.js":
/*!*********************************************!*\
!*** ./assets/src/store/globalDataStore.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js");
/* harmony import */ var _globalDataReducer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./globalDataReducer */ "./assets/src/store/globalDataReducer.js");
const initialState = wp.hooks.applyFilters('astra_dashboard/datastore', {
initialStateSetFlag: false,
enableLoadFontsLocally: false,
enablePreloadLocalFonts: false,
useOldHeaderFooter: false,
useUpgradeNotices: false,
enableWhiteLabel: false,
enableBeta: 'disable',
settingsSavedNotification: '',
blocksStatuses: [],
enableFileGeneration: 'disable',
activeSettingsNavigationTab: '',
pluginDescription: '',
pluginName: '',
themeScreenshotURL: '',
themeDescription: '',
themeName: '',
agencyLicenseLink: '',
agencyAuthorURL: '',
agencyAuthorName: ''
});
const globalDataStore = (0,redux__WEBPACK_IMPORTED_MODULE_1__.createStore)(_globalDataReducer__WEBPACK_IMPORTED_MODULE_0__["default"], initialState, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (globalDataStore);
/***/ }),
/***/ "./assets/src/utils/extensions.js":
/*!****************************************!*\
!*** ./assets/src/utils/extensions.js ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ activatePlugin: () => (/* binding */ activatePlugin),
/* harmony export */ getAction: () => (/* binding */ getAction),
/* harmony export */ getSpinner: () => (/* reexport safe */ _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_2__.getSpinner),
/* harmony export */ triggerAction: () => (/* binding */ triggerAction)
/* harmony export */ });
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dompurify */ "./node_modules/dompurify/dist/purify.es.mjs");
/* harmony import */ var _astra_utils_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @astra-utils/helpers */ "./assets/utils/helpers.js");
/**
* Returns the appropriate action string based on the given status.
*
* @param {string} status The status of the plugin. Possible values are: 'activated', 'configure', or 'installed'.
*
* @return {string} Returns the corresponding action string based on the status.
*/
const getAction = status => {
switch (status) {
case 'activated':
return '';
case 'configure':
return 'astra_recommended_plugin_configure';
case 'installed':
return 'astra_recommended_plugin_activate';
}
return 'astra_recommended_plugin_install';
};
/**
* Function to trigger plugin action like installation, activation or configuration.
*
* @param {HTMLButtonElement} e Button click event.
*/
const triggerAction = e => {
e.preventDefault();
const astraAdmin = window.astra_admin;
const action = e.target.dataset.action;
const isButton = e.target.dataset?.type === 'button';
switch (action) {
case 'astra_recommended_plugin_configure':
e.target.innerHTML = dompurify__WEBPACK_IMPORTED_MODULE_1__["default"].sanitize((isButton ? (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_2__.getSpinner)() : '') + astraAdmin.plugin_configuring_text);
window.location = e.target.dataset.redirection;
break;
case 'astra_recommended_plugin_activate':
activatePlugin(e);
break;
case 'astra_recommended_plugin_install':
const formData = new window.FormData();
formData.append('action', 'astra_recommended_plugin_install');
formData.append('_ajax_nonce', astraAdmin.plugin_installer_nonce);
formData.append('slug', e.target.dataset.slug);
e.target.innerHTML = dompurify__WEBPACK_IMPORTED_MODULE_1__["default"].sanitize((isButton ? (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_2__.getSpinner)() : '') + astraAdmin.plugin_installing_text);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({
url: astraAdmin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
e.target.innerText = astraAdmin.plugin_installed_text;
activatePlugin(e);
}
}).catch(error => {
// eslint-disable-next-line no-console
console.error('Error during plugin installation:', error);
});
break;
default:
// Do nothing.
break;
}
};
/**
* Function to activate plugin.
*
* @param {HTMLButtonElement} e Button click event.
*/
const activatePlugin = e => {
const astraAdmin = window.astra_admin;
const formData = new window.FormData();
formData.append('action', 'astra_recommended_plugin_activate');
formData.append('security', astraAdmin.plugin_manager_nonce);
formData.append('init', e.target.dataset.init);
const isButton = e.target.dataset?.type === 'button';
e.target.innerHTML = dompurify__WEBPACK_IMPORTED_MODULE_1__["default"].sanitize((isButton ? (0,_astra_utils_helpers__WEBPACK_IMPORTED_MODULE_2__.getSpinner)() : '') + astraAdmin.plugin_activating_text);
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({
url: astraAdmin.ajax_url,
method: 'POST',
body: formData
}).then(data => {
if (data.success) {
e.target.className = 'text-[#4AB866] pointer-events-none capitalize text-sm leading-[0.875rem] font-medium rounded-md' + (isButton ? ' mt-3 py-[0.5625rem]' : '');
e.target.innerText = astraAdmin.plugin_activated_text;
window.location = e.target.dataset.redirection;
}
}).catch(error => {
// eslint-disable-next-line no-console
console.error('Error during plugin activation:', error);
});
};
/***/ }),
/***/ "./assets/src/utils/setInitialState.js":
/*!*********************************************!*\
!*** ./assets/src/utils/setInitialState.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0__);
const setInitialState = store => {
_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_0___default()({
path: '/astra/v1/admin/settings/'
}).then(data => {
const initialState = {
settingsSavedNotification: '',
initialStateSetFlag: true,
activeSettingsNavigationTab: 'global-settings',
enableLoadFontsLocally: data.self_hosted_gfonts,
enablePreloadLocalFonts: data.preload_local_fonts,
useOldHeaderFooter: data.use_old_header_footer,
useUpgradeNotices: data.use_upgrade_notices,
blocksStatuses: data.pro_addons
};
store.dispatch({
type: 'UPDATE_INITIAL_STATE',
payload: initialState
});
}).catch(error => {
console.error('Error fetching settings:', error);
});
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setInitialState);
/***/ }),
/***/ "./assets/utils/helpers.js":
/*!*********************************!*\
!*** ./assets/utils/helpers.js ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ classNames: () => (/* binding */ classNames),
/* harmony export */ debounce: () => (/* binding */ debounce),
/* harmony export */ getAstraProTitle: () => (/* binding */ getAstraProTitle),
/* harmony export */ getSpinner: () => (/* binding */ getSpinner),
/* harmony export */ saveSetting: () => (/* binding */ saveSetting)
/* harmony export */ });
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch");
/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1__);
/**
* Returns the class names.
*
* @param {...string} classes The class names.
*
* @return {string} Returns the class names.
*/
const classNames = (...classes) => classes.filter(Boolean).join(" ");
/**
* Creates a debounced function that delays its execution until after the specified delay.
*
* The debounce() function can also be used from lodash.debounce package in future.
*
* @param {Function} func - The function to debounce.
* @param {number} delay - The delay in milliseconds before the function is executed.
*
* @returns {Function} A debounced function.
*/
const debounce = (func, delay) => {
let timer;
function debounced(...args) {
clearTimeout(timer);
timer = setTimeout(() => func(...args), delay);
}
;
// Attach a `cancel` method to clear the timeout.
debounced.cancel = () => {
clearTimeout(timer);
};
return debounced;
};
/**
* Returns the Astra Pro title.
*
* @return {string} Returns the Astra Pro title.
*/
const getAstraProTitle = () => {
return astra_admin.pro_installed_status ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)("Activate Now", "astra") : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)("Upgrade Now", "astra");
};
/**
* Returns the spinner SVG text.
*
* @return {string} Returns the spinner SVG text..
*/
const getSpinner = () => {
return `
<svg class="animate-spin installer-spinner" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
</svg>
`;
};
/**
* A function to save astra admin settings.
*
* @function
*
* @param {string} key - Settings key.
* @param {string} value - The data to send.
* @param {Function} dispatch - The dispatch function.
* @param {Object} abortControllerRef - The ref object with to hold abort controller.
*
* @return {Promise} Returns a promise representing the processed request.
*/
const saveSetting = debounce((key, value, dispatch, abortControllerRef = {
current: {}
}) => {
// Abort any previous request.
if (abortControllerRef.current[key]) {
abortControllerRef.current[key]?.abort();
}
// Create a new AbortController.
const abortController = new AbortController();
abortControllerRef.current[key] = abortController;
const formData = new window.FormData();
formData.append("action", "astra_update_admin_setting");
formData.append("security", astra_admin.update_nonce);
formData.append("key", key);
formData.append("value", value);
return _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default()({
url: astra_admin.ajax_url,
method: "POST",
body: formData,
signal: abortControllerRef.current[key]?.signal // Pass the signal to the fetch request.
}).then(() => {
dispatch({
type: "UPDATE_SETTINGS_SAVED_NOTIFICATION",
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)("Successfully saved!", "astra")
});
}).catch(error => {
// Ignore if it is intentionally aborted.
if (error.name === "AbortError") {
return;
}
console.error("Error during API request:", error);
dispatch({
type: "UPDATE_SETTINGS_SAVED_NOTIFICATION",
payload: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)("An error occurred while saving.", "astra")
});
});
}, 300);
/***/ }),
/***/ "./node_modules/base64-js/index.js":
/*!*****************************************!*\
!*** ./node_modules/base64-js/index.js ***!
\*****************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray
var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
lookup[i] = code[i]
revLookup[code.charCodeAt(i)] = i
}
// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63
function getLens (b64) {
var len = b64.length
if (len % 4 > 0) {
throw new Error('Invalid string. Length must be a multiple of 4')
}
// Trim off extra bytes after placeholder bytes are found
// See: https://github.com/beatgammit/base64-js/issues/42
var validLen = b64.indexOf('=')
if (validLen === -1) validLen = len
var placeHoldersLen = validLen === len
? 0
: 4 - (validLen % 4)
return [validLen, placeHoldersLen]
}
// base64 is 4/3 + up to two characters of the original data
function byteLength (b64) {
var lens = getLens(b64)
var validLen = lens[0]
var placeHoldersLen = lens[1]
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}
function _byteLength (b64, validLen, placeHoldersLen) {
return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}
function toByteArray (b64) {
var tmp
var lens = getLens(b64)
var validLen = lens[0]
var placeHoldersLen = lens[1]
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
var curByte = 0
// if there are placeholders, only get up to the last complete 4 chars
var len = placeHoldersLen > 0
? validLen - 4
: validLen
var i
for (i = 0; i < len; i += 4) {
tmp =
(revLookup[b64.charCodeAt(i)] << 18) |
(revLookup[b64.charCodeAt(i + 1)] << 12) |
(revLookup[b64.charCodeAt(i + 2)] << 6) |
revLookup[b64.charCodeAt(i + 3)]
arr[curByte++] = (tmp >> 16) & 0xFF
arr[curByte++] = (tmp >> 8) & 0xFF
arr[curByte++] = tmp & 0xFF
}
if (placeHoldersLen === 2) {
tmp =
(revLookup[b64.charCodeAt(i)] << 2) |
(revLookup[b64.charCodeAt(i + 1)] >> 4)
arr[curByte++] = tmp & 0xFF
}
if (placeHoldersLen === 1) {
tmp =
(revLookup[b64.charCodeAt(i)] << 10) |
(revLookup[b64.charCodeAt(i + 1)] << 4) |
(revLookup[b64.charCodeAt(i + 2)] >> 2)
arr[curByte++] = (tmp >> 8) & 0xFF
arr[curByte++] = tmp & 0xFF
}
return arr
}
function tripletToBase64 (num) {
return lookup[num >> 18 & 0x3F] +
lookup[num >> 12 & 0x3F] +
lookup[num >> 6 & 0x3F] +
lookup[num & 0x3F]
}
function encodeChunk (uint8, start, end) {
var tmp
var output = []
for (var i = start; i < end; i += 3) {
tmp =
((uint8[i] << 16) & 0xFF0000) +
((uint8[i + 1] << 8) & 0xFF00) +
(uint8[i + 2] & 0xFF)
output.push(tripletToBase64(tmp))
}
return output.join('')
}
function fromByteArray (uint8) {
var tmp
var len = uint8.length
var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
var parts = []
var maxChunkLength = 16383 // must be multiple of 3
// go through the array every three bytes, we'll deal with trailing stuff later
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
}
// pad the end with zeros, but make sure to not forget the extra bytes
if (extraBytes === 1) {
tmp = uint8[len - 1]
parts.push(
lookup[tmp >> 2] +
lookup[(tmp << 4) & 0x3F] +
'=='
)
} else if (extraBytes === 2) {
tmp = (uint8[len - 2] << 8) + uint8[len - 1]
parts.push(
lookup[tmp >> 10] +
lookup[(tmp >> 4) & 0x3F] +
lookup[(tmp << 2) & 0x3F] +
'='
)
}
return parts.join('')
}
/***/ }),
/***/ "./node_modules/buffer/index.js":
/*!**************************************!*\
!*** ./node_modules/buffer/index.js ***!
\**************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
/* eslint-disable no-proto */
var base64 = __webpack_require__(/*! base64-js */ "./node_modules/base64-js/index.js")
var ieee754 = __webpack_require__(/*! ieee754 */ "./node_modules/ieee754/index.js")
var customInspectSymbol =
(typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation
? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation
: null
exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50
var K_MAX_LENGTH = 0x7fffffff
exports.kMaxLength = K_MAX_LENGTH
/**
* If `Buffer.TYPED_ARRAY_SUPPORT`:
* === true Use Uint8Array implementation (fastest)
* === false Print warning and recommend using `buffer` v4.x which has an Object
* implementation (most compatible, even IE6)
*
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
* Opera 11.6+, iOS 4.2+.
*
* We report that the browser does not support typed arrays if the are not subclassable
* using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
* (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
* for __proto__ and has a buggy typed array implementation.
*/
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
typeof console.error === 'function') {
console.error(
'This browser lacks typed array (Uint8Array) support which is required by ' +
'`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
)
}
function typedArraySupport () {
// Can typed array instances can be augmented?
try {
var arr = new Uint8Array(1)
var proto = { foo: function () { return 42 } }
Object.setPrototypeOf(proto, Uint8Array.prototype)
Object.setPrototypeOf(arr, proto)
return arr.foo() === 42
} catch (e) {
return false
}
}
Object.defineProperty(Buffer.prototype, 'parent', {
enumerable: true,
get: function () {
if (!Buffer.isBuffer(this)) return undefined
return this.buffer
}
})
Object.defineProperty(Buffer.prototype, 'offset', {
enumerable: true,
get: function () {
if (!Buffer.isBuffer(this)) return undefined
return this.byteOffset
}
})
function createBuffer (length) {
if (length > K_MAX_LENGTH) {
throw new RangeError('The value "' + length + '" is invalid for option "size"')
}
// Return an augmented `Uint8Array` instance
var buf = new Uint8Array(length)
Object.setPrototypeOf(buf, Buffer.prototype)
return buf
}
/**
* The Buffer constructor returns instances of `Uint8Array` that have their
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods
* and the `Uint8Array` methods. Square bracket notation works as expected -- it
* returns a single octet.
*
* The `Uint8Array` prototype remains unmodified.
*/
function Buffer (arg, encodingOrOffset, length) {
// Common case.
if (typeof arg === 'number') {
if (typeof encodingOrOffset === 'string') {
throw new TypeError(
'The "string" argument must be of type string. Received type number'
)
}
return allocUnsafe(arg)
}
return from(arg, encodingOrOffset, length)
}
Buffer.poolSize = 8192 // not used by this implementation
function from (value, encodingOrOffset, length) {
if (typeof value === 'string') {
return fromString(value, encodingOrOffset)
}
if (ArrayBuffer.isView(value)) {
return fromArrayView(value)
}
if (value == null) {
throw new TypeError(
'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
'or Array-like Object. Received type ' + (typeof value)
)
}
if (isInstance(value, ArrayBuffer) ||
(value && isInstance(value.buffer, ArrayBuffer))) {
return fromArrayBuffer(value, encodingOrOffset, length)
}
if (typeof SharedArrayBuffer !== 'undefined' &&
(isInstance(value, SharedArrayBuffer) ||
(value && isInstance(value.buffer, SharedArrayBuffer)))) {
return fromArrayBuffer(value, encodingOrOffset, length)
}
if (typeof value === 'number') {
throw new TypeError(
'The "value" argument must not be of type number. Received type number'
)
}
var valueOf = value.valueOf && value.valueOf()
if (valueOf != null && valueOf !== value) {
return Buffer.from(valueOf, encodingOrOffset, length)
}
var b = fromObject(value)
if (b) return b
if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
typeof value[Symbol.toPrimitive] === 'function') {
return Buffer.from(
value[Symbol.toPrimitive]('string'), encodingOrOffset, length
)
}
throw new TypeError(
'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
'or Array-like Object. Received type ' + (typeof value)
)
}
/**
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
* if value is a number.
* Buffer.from(str[, encoding])
* Buffer.from(array)
* Buffer.from(buffer)
* Buffer.from(arrayBuffer[, byteOffset[, length]])
**/
Buffer.from = function (value, encodingOrOffset, length) {
return from(value, encodingOrOffset, length)
}
// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
// https://github.com/feross/buffer/pull/148
Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)
Object.setPrototypeOf(Buffer, Uint8Array)
function assertSize (size) {
if (typeof size !== 'number') {
throw new TypeError('"size" argument must be of type number')
} else if (size < 0) {
throw new RangeError('The value "' + size + '" is invalid for option "size"')
}
}
function alloc (size, fill, encoding) {
assertSize(size)
if (size <= 0) {
return createBuffer(size)
}
if (fill !== undefined) {
// Only pay attention to encoding if it's a string. This
// prevents accidentally sending in a number that would
// be interpreted as a start offset.
return typeof encoding === 'string'
? createBuffer(size).fill(fill, encoding)
: createBuffer(size).fill(fill)
}
return createBuffer(size)
}
/**
* Creates a new filled Buffer instance.
* alloc(size[, fill[, encoding]])
**/
Buffer.alloc = function (size, fill, encoding) {
return alloc(size, fill, encoding)
}
function allocUnsafe (size) {
assertSize(size)
return createBuffer(size < 0 ? 0 : checked(size) | 0)
}
/**
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
* */
Buffer.allocUnsafe = function (size) {
return allocUnsafe(size)
}
/**
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
*/
Buffer.allocUnsafeSlow = function (size) {
return allocUnsafe(size)
}
function fromString (string, encoding) {
if (typeof encoding !== 'string' || encoding === '') {
encoding = 'utf8'
}
if (!Buffer.isEncoding(encoding)) {
throw new TypeError('Unknown encoding: ' + encoding)
}
var length = byteLength(string, encoding) | 0
var buf = createBuffer(length)
var actual = buf.write(string, encoding)
if (actual !== length) {
// Writing a hex string, for example, that contains invalid characters will
// cause everything after the first invalid character to be ignored. (e.g.
// 'abxxcd' will be treated as 'ab')
buf = buf.slice(0, actual)
}
return buf
}
function fromArrayLike (array) {
var length = array.length < 0 ? 0 : checked(array.length) | 0
var buf = createBuffer(length)
for (var i = 0; i < length; i += 1) {
buf[i] = array[i] & 255
}
return buf
}
function fromArrayView (arrayView) {
if (isInstance(arrayView, Uint8Array)) {
var copy = new Uint8Array(arrayView)
return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)
}
return fromArrayLike(arrayView)
}
function fromArrayBuffer (array, byteOffset, length) {
if (byteOffset < 0 || array.byteLength < byteOffset) {
throw new RangeError('"offset" is outside of buffer bounds')
}
if (array.byteLength < byteOffset + (length || 0)) {
throw new RangeError('"length" is outside of buffer bounds')
}
var buf
if (byteOffset === undefined && length === undefined) {
buf = new Uint8Array(array)
} else if (length === undefined) {
buf = new Uint8Array(array, byteOffset)
} else {
buf = new Uint8Array(array, byteOffset, length)
}
// Return an augmented `Uint8Array` instance
Object.setPrototypeOf(buf, Buffer.prototype)
return buf
}
function fromObject (obj) {
if (Buffer.isBuffer(obj)) {
var len = checked(obj.length) | 0
var buf = createBuffer(len)
if (buf.length === 0) {
return buf
}
obj.copy(buf, 0, 0, len)
return buf
}
if (obj.length !== undefined) {
if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
return createBuffer(0)
}
return fromArrayLike(obj)
}
if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
return fromArrayLike(obj.data)
}
}
function checked (length) {
// Note: cannot use `length < K_MAX_LENGTH` here because that fails when
// length is NaN (which is otherwise coerced to zero.)
if (length >= K_MAX_LENGTH) {
throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
}
return length | 0
}
function SlowBuffer (length) {
if (+length != length) { // eslint-disable-line eqeqeq
length = 0
}
return Buffer.alloc(+length)
}
Buffer.isBuffer = function isBuffer (b) {
return b != null && b._isBuffer === true &&
b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
}
Buffer.compare = function compare (a, b) {
if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
throw new TypeError(
'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
)
}
if (a === b) return 0
var x = a.length
var y = b.length
for (var i = 0, len = Math.min(x, y); i < len; ++i) {
if (a[i] !== b[i]) {
x = a[i]
y = b[i]
break
}
}
if (x < y) return -1
if (y < x) return 1
return 0
}
Buffer.isEncoding = function isEncoding (encoding) {
switch (String(encoding).toLowerCase()) {
case 'hex':
case 'utf8':
case 'utf-8':
case 'ascii':
case 'latin1':
case 'binary':
case 'base64':
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return true
default:
return false
}
}
Buffer.concat = function concat (list, length) {
if (!Array.isArray(list)) {
throw new TypeError('"list" argument must be an Array of Buffers')
}
if (list.length === 0) {
return Buffer.alloc(0)
}
var i
if (length === undefined) {
length = 0
for (i = 0; i < list.length; ++i) {
length += list[i].length
}
}
var buffer = Buffer.allocUnsafe(length)
var pos = 0
for (i = 0; i < list.length; ++i) {
var buf = list[i]
if (isInstance(buf, Uint8Array)) {
if (pos + buf.length > buffer.length) {
Buffer.from(buf).copy(buffer, pos)
} else {
Uint8Array.prototype.set.call(
buffer,
buf,
pos
)
}
} else if (!Buffer.isBuffer(buf)) {
throw new TypeError('"list" argument must be an Array of Buffers')
} else {
buf.copy(buffer, pos)
}
pos += buf.length
}
return buffer
}
function byteLength (string, encoding) {
if (Buffer.isBuffer(string)) {
return string.length
}
if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
return string.byteLength
}
if (typeof string !== 'string') {
throw new TypeError(
'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
'Received type ' + typeof string
)
}
var len = string.length
var mustMatch = (arguments.length > 2 && arguments[2] === true)
if (!mustMatch && len === 0) return 0
// Use a for loop to avoid recursion
var loweredCase = false
for (;;) {
switch (encoding) {
case 'ascii':
case 'latin1':
case 'binary':
return len
case 'utf8':
case 'utf-8':
return utf8ToBytes(string).length
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return len * 2
case 'hex':
return len >>> 1
case 'base64':
return base64ToBytes(string).length
default:
if (loweredCase) {
return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
}
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
Buffer.byteLength = byteLength
function slowToString (encoding, start, end) {
var loweredCase = false
// No need to verify that "this.length <= MAX_UINT32" since it's a read-only
// property of a typed array.
// This behaves neither like String nor Uint8Array in that we set start/end
// to their upper/lower bounds if the value passed is out of range.
// undefined is handled specially as per ECMA-262 6th Edition,
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
if (start === undefined || start < 0) {
start = 0
}
// Return early if start > this.length. Done here to prevent potential uint32
// coercion fail below.
if (start > this.length) {
return ''
}
if (end === undefined || end > this.length) {
end = this.length
}
if (end <= 0) {
return ''
}
// Force coercion to uint32. This will also coerce falsey/NaN values to 0.
end >>>= 0
start >>>= 0
if (end <= start) {
return ''
}
if (!encoding) encoding = 'utf8'
while (true) {
switch (encoding) {
case 'hex':
return hexSlice(this, start, end)
case 'utf8':
case 'utf-8':
return utf8Slice(this, start, end)
case 'ascii':
return asciiSlice(this, start, end)
case 'latin1':
case 'binary':
return latin1Slice(this, start, end)
case 'base64':
return base64Slice(this, start, end)
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return utf16leSlice(this, start, end)
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
encoding = (encoding + '').toLowerCase()
loweredCase = true
}
}
}
// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
// reliably in a browserify context because there could be multiple different
// copies of the 'buffer' package in use. This method works even for Buffer
// instances that were created from another copy of the `buffer` package.
// See: https://github.com/feross/buffer/issues/154
Buffer.prototype._isBuffer = true
function swap (b, n, m) {
var i = b[n]
b[n] = b[m]
b[m] = i
}
Buffer.prototype.swap16 = function swap16 () {
var len = this.length
if (len % 2 !== 0) {
throw new RangeError('Buffer size must be a multiple of 16-bits')
}
for (var i = 0; i < len; i += 2) {
swap(this, i, i + 1)
}
return this
}
Buffer.prototype.swap32 = function swap32 () {
var len = this.length
if (len % 4 !== 0) {
throw new RangeError('Buffer size must be a multiple of 32-bits')
}
for (var i = 0; i < len; i += 4) {
swap(this, i, i + 3)
swap(this, i + 1, i + 2)
}
return this
}
Buffer.prototype.swap64 = function swap64 () {
var len = this.length
if (len % 8 !== 0) {
throw new RangeError('Buffer size must be a multiple of 64-bits')
}
for (var i = 0; i < len; i += 8) {
swap(this, i, i + 7)
swap(this, i + 1, i + 6)
swap(this, i + 2, i + 5)
swap(this, i + 3, i + 4)
}
return this
}
Buffer.prototype.toString = function toString () {
var length = this.length
if (length === 0) return ''
if (arguments.length === 0) return utf8Slice(this, 0, length)
return slowToString.apply(this, arguments)
}
Buffer.prototype.toLocaleString = Buffer.prototype.toString
Buffer.prototype.equals = function equals (b) {
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
if (this === b) return true
return Buffer.compare(this, b) === 0
}
Buffer.prototype.inspect = function inspect () {
var str = ''
var max = exports.INSPECT_MAX_BYTES
str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
if (this.length > max) str += ' ... '
return '<Buffer ' + str + '>'
}
if (customInspectSymbol) {
Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect
}
Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
if (isInstance(target, Uint8Array)) {
target = Buffer.from(target, target.offset, target.byteLength)
}
if (!Buffer.isBuffer(target)) {
throw new TypeError(
'The "target" argument must be one of type Buffer or Uint8Array. ' +
'Received type ' + (typeof target)
)
}
if (start === undefined) {
start = 0
}
if (end === undefined) {
end = target ? target.length : 0
}
if (thisStart === undefined) {
thisStart = 0
}
if (thisEnd === undefined) {
thisEnd = this.length
}
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
throw new RangeError('out of range index')
}
if (thisStart >= thisEnd && start >= end) {
return 0
}
if (thisStart >= thisEnd) {
return -1
}
if (start >= end) {
return 1
}
start >>>= 0
end >>>= 0
thisStart >>>= 0
thisEnd >>>= 0
if (this === target) return 0
var x = thisEnd - thisStart
var y = end - start
var len = Math.min(x, y)
var thisCopy = this.slice(thisStart, thisEnd)
var targetCopy = target.slice(start, end)
for (var i = 0; i < len; ++i) {
if (thisCopy[i] !== targetCopy[i]) {
x = thisCopy[i]
y = targetCopy[i]
break
}
}
if (x < y) return -1
if (y < x) return 1
return 0
}
// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
// Empty buffer means no match
if (buffer.length === 0) return -1
// Normalize byteOffset
if (typeof byteOffset === 'string') {
encoding = byteOffset
byteOffset = 0
} else if (byteOffset > 0x7fffffff) {
byteOffset = 0x7fffffff
} else if (byteOffset < -0x80000000) {
byteOffset = -0x80000000
}
byteOffset = +byteOffset // Coerce to Number.
if (numberIsNaN(byteOffset)) {
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
byteOffset = dir ? 0 : (buffer.length - 1)
}
// Normalize byteOffset: negative offsets start from the end of the buffer
if (byteOffset < 0) byteOffset = buffer.length + byteOffset
if (byteOffset >= buffer.length) {
if (dir) return -1
else byteOffset = buffer.length - 1
} else if (byteOffset < 0) {
if (dir) byteOffset = 0
else return -1
}
// Normalize val
if (typeof val === 'string') {
val = Buffer.from(val, encoding)
}
// Finally, search either indexOf (if dir is true) or lastIndexOf
if (Buffer.isBuffer(val)) {
// Special case: looking for empty string/buffer always fails
if (val.length === 0) {
return -1
}
return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
} else if (typeof val === 'number') {
val = val & 0xFF // Search for a byte value [0-255]
if (typeof Uint8Array.prototype.indexOf === 'function') {
if (dir) {
return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
} else {
return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
}
}
return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)
}
throw new TypeError('val must be string, number or Buffer')
}
function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
var indexSize = 1
var arrLength = arr.length
var valLength = val.length
if (encoding !== undefined) {
encoding = String(encoding).toLowerCase()
if (encoding === 'ucs2' || encoding === 'ucs-2' ||
encoding === 'utf16le' || encoding === 'utf-16le') {
if (arr.length < 2 || val.length < 2) {
return -1
}
indexSize = 2
arrLength /= 2
valLength /= 2
byteOffset /= 2
}
}
function read (buf, i) {
if (indexSize === 1) {
return buf[i]
} else {
return buf.readUInt16BE(i * indexSize)
}
}
var i
if (dir) {
var foundIndex = -1
for (i = byteOffset; i < arrLength; i++) {
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
if (foundIndex === -1) foundIndex = i
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
} else {
if (foundIndex !== -1) i -= i - foundIndex
foundIndex = -1
}
}
} else {
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
for (i = byteOffset; i >= 0; i--) {
var found = true
for (var j = 0; j < valLength; j++) {
if (read(arr, i + j) !== read(val, j)) {
found = false
break
}
}
if (found) return i
}
}
return -1
}
Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
return this.indexOf(val, byteOffset, encoding) !== -1
}
Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}
Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}
function hexWrite (buf, string, offset, length) {
offset = Number(offset) || 0
var remaining = buf.length - offset
if (!length) {
length = remaining
} else {
length = Number(length)
if (length > remaining) {
length = remaining
}
}
var strLen = string.length
if (length > strLen / 2) {
length = strLen / 2
}
for (var i = 0; i < length; ++i) {
var parsed = parseInt(string.substr(i * 2, 2), 16)
if (numberIsNaN(parsed)) return i
buf[offset + i] = parsed
}
return i
}
function utf8Write (buf, string, offset, length) {
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}
function asciiWrite (buf, string, offset, length) {
return blitBuffer(asciiToBytes(string), buf, offset, length)
}
function base64Write (buf, string, offset, length) {
return blitBuffer(base64ToBytes(string), buf, offset, length)
}
function ucs2Write (buf, string, offset, length) {
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}
Buffer.prototype.write = function write (string, offset, length, encoding) {
// Buffer#write(string)
if (offset === undefined) {
encoding = 'utf8'
length = this.length
offset = 0
// Buffer#write(string, encoding)
} else if (length === undefined && typeof offset === 'string') {
encoding = offset
length = this.length
offset = 0
// Buffer#write(string, offset[, length][, encoding])
} else if (isFinite(offset)) {
offset = offset >>> 0
if (isFinite(length)) {
length = length >>> 0
if (encoding === undefined) encoding = 'utf8'
} else {
encoding = length
length = undefined
}
} else {
throw new Error(
'Buffer.write(string, encoding, offset[, length]) is no longer supported'
)
}
var remaining = this.length - offset
if (length === undefined || length > remaining) length = remaining
if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
throw new RangeError('Attempt to write outside buffer bounds')
}
if (!encoding) encoding = 'utf8'
var loweredCase = false
for (;;) {
switch (encoding) {
case 'hex':
return hexWrite(this, string, offset, length)
case 'utf8':
case 'utf-8':
return utf8Write(this, string, offset, length)
case 'ascii':
case 'latin1':
case 'binary':
return asciiWrite(this, string, offset, length)
case 'base64':
// Warning: maxLength not taken into account in base64Write
return base64Write(this, string, offset, length)
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return ucs2Write(this, string, offset, length)
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
encoding = ('' + encoding).toLowerCase()
loweredCase = true
}
}
}
Buffer.prototype.toJSON = function toJSON () {
return {
type: 'Buffer',
data: Array.prototype.slice.call(this._arr || this, 0)
}
}
function base64Slice (buf, start, end) {
if (start === 0 && end === buf.length) {
return base64.fromByteArray(buf)
} else {
return base64.fromByteArray(buf.slice(start, end))
}
}
function utf8Slice (buf, start, end) {
end = Math.min(buf.length, end)
var res = []
var i = start
while (i < end) {
var firstByte = buf[i]
var codePoint = null
var bytesPerSequence = (firstByte > 0xEF)
? 4
: (firstByte > 0xDF)
? 3
: (firstByte > 0xBF)
? 2
: 1
if (i + bytesPerSequence <= end) {
var secondByte, thirdByte, fourthByte, tempCodePoint
switch (bytesPerSequence) {
case 1:
if (firstByte < 0x80) {
codePoint = firstByte
}
break
case 2:
secondByte = buf[i + 1]
if ((secondByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
if (tempCodePoint > 0x7F) {
codePoint = tempCodePoint
}
}
break
case 3:
secondByte = buf[i + 1]
thirdByte = buf[i + 2]
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
codePoint = tempCodePoint
}
}
break
case 4:
secondByte = buf[i + 1]
thirdByte = buf[i + 2]
fourthByte = buf[i + 3]
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
codePoint = tempCodePoint
}
}
}
}
if (codePoint === null) {
// we did not generate a valid codePoint so insert a
// replacement char (U+FFFD) and advance only 1 byte
codePoint = 0xFFFD
bytesPerSequence = 1
} else if (codePoint > 0xFFFF) {
// encode to utf16 (surrogate pair dance)
codePoint -= 0x10000
res.push(codePoint >>> 10 & 0x3FF | 0xD800)
codePoint = 0xDC00 | codePoint & 0x3FF
}
res.push(codePoint)
i += bytesPerSequence
}
return decodeCodePointsArray(res)
}
// Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000
function decodeCodePointsArray (codePoints) {
var len = codePoints.length
if (len <= MAX_ARGUMENTS_LENGTH) {
return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
}
// Decode in chunks to avoid "call stack size exceeded".
var res = ''
var i = 0
while (i < len) {
res += String.fromCharCode.apply(
String,
codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
)
}
return res
}
function asciiSlice (buf, start, end) {
var ret = ''
end = Math.min(buf.length, end)
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i] & 0x7F)
}
return ret
}
function latin1Slice (buf, start, end) {
var ret = ''
end = Math.min(buf.length, end)
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i])
}
return ret
}
function hexSlice (buf, start, end) {
var len = buf.length
if (!start || start < 0) start = 0
if (!end || end < 0 || end > len) end = len
var out = ''
for (var i = start; i < end; ++i) {
out += hexSliceLookupTable[buf[i]]
}
return out
}
function utf16leSlice (buf, start, end) {
var bytes = buf.slice(start, end)
var res = ''
// If bytes.length is odd, the last 8 bits must be ignored (same as node.js)
for (var i = 0; i < bytes.length - 1; i += 2) {
res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
}
return res
}
Buffer.prototype.slice = function slice (start, end) {
var len = this.length
start = ~~start
end = end === undefined ? len : ~~end
if (start < 0) {
start += len
if (start < 0) start = 0
} else if (start > len) {
start = len
}
if (end < 0) {
end += len
if (end < 0) end = 0
} else if (end > len) {
end = len
}
if (end < start) end = start
var newBuf = this.subarray(start, end)
// Return an augmented `Uint8Array` instance
Object.setPrototypeOf(newBuf, Buffer.prototype)
return newBuf
}
/*
* Need to make sure that buffer isn't trying to write out of bounds.
*/
function checkOffset (offset, ext, length) {
if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}
Buffer.prototype.readUintLE =
Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
offset = offset >>> 0
byteLength = byteLength >>> 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var val = this[offset]
var mul = 1
var i = 0
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul
}
return val
}
Buffer.prototype.readUintBE =
Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
offset = offset >>> 0
byteLength = byteLength >>> 0
if (!noAssert) {
checkOffset(offset, byteLength, this.length)
}
var val = this[offset + --byteLength]
var mul = 1
while (byteLength > 0 && (mul *= 0x100)) {
val += this[offset + --byteLength] * mul
}
return val
}
Buffer.prototype.readUint8 =
Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 1, this.length)
return this[offset]
}
Buffer.prototype.readUint16LE =
Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 2, this.length)
return this[offset] | (this[offset + 1] << 8)
}
Buffer.prototype.readUint16BE =
Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 2, this.length)
return (this[offset] << 8) | this[offset + 1]
}
Buffer.prototype.readUint32LE =
Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 4, this.length)
return ((this[offset]) |
(this[offset + 1] << 8) |
(this[offset + 2] << 16)) +
(this[offset + 3] * 0x1000000)
}
Buffer.prototype.readUint32BE =
Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset] * 0x1000000) +
((this[offset + 1] << 16) |
(this[offset + 2] << 8) |
this[offset + 3])
}
Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
offset = offset >>> 0
byteLength = byteLength >>> 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var val = this[offset]
var mul = 1
var i = 0
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul
}
mul *= 0x80
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
return val
}
Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
offset = offset >>> 0
byteLength = byteLength >>> 0
if (!noAssert) checkOffset(offset, byteLength, this.length)
var i = byteLength
var mul = 1
var val = this[offset + --i]
while (i > 0 && (mul *= 0x100)) {
val += this[offset + --i] * mul
}
mul *= 0x80
if (val >= mul) val -= Math.pow(2, 8 * byteLength)
return val
}
Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 1, this.length)
if (!(this[offset] & 0x80)) return (this[offset])
return ((0xff - this[offset] + 1) * -1)
}
Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 2, this.length)
var val = this[offset] | (this[offset + 1] << 8)
return (val & 0x8000) ? val | 0xFFFF0000 : val
}
Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 2, this.length)
var val = this[offset + 1] | (this[offset] << 8)
return (val & 0x8000) ? val | 0xFFFF0000 : val
}
Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset]) |
(this[offset + 1] << 8) |
(this[offset + 2] << 16) |
(this[offset + 3] << 24)
}
Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 4, this.length)
return (this[offset] << 24) |
(this[offset + 1] << 16) |
(this[offset + 2] << 8) |
(this[offset + 3])
}
Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 4, this.length)
return ieee754.read(this, offset, true, 23, 4)
}
Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 4, this.length)
return ieee754.read(this, offset, false, 23, 4)
}
Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 8, this.length)
return ieee754.read(this, offset, true, 52, 8)
}
Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
offset = offset >>> 0
if (!noAssert) checkOffset(offset, 8, this.length)
return ieee754.read(this, offset, false, 52, 8)
}
function checkInt (buf, value, offset, ext, max, min) {
if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
if (offset + ext > buf.length) throw new RangeError('Index out of range')
}
Buffer.prototype.writeUintLE =
Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
value = +value
offset = offset >>> 0
byteLength = byteLength >>> 0
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength) - 1
checkInt(this, value, offset, byteLength, maxBytes, 0)
}
var mul = 1
var i = 0
this[offset] = value & 0xFF
while (++i < byteLength && (mul *= 0x100)) {
this[offset + i] = (value / mul) & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeUintBE =
Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
value = +value
offset = offset >>> 0
byteLength = byteLength >>> 0
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength) - 1
checkInt(this, value, offset, byteLength, maxBytes, 0)
}
var i = byteLength - 1
var mul = 1
this[offset + i] = value & 0xFF
while (--i >= 0 && (mul *= 0x100)) {
this[offset + i] = (value / mul) & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeUint8 =
Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
this[offset] = (value & 0xff)
return offset + 1
}
Buffer.prototype.writeUint16LE =
Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
return offset + 2
}
Buffer.prototype.writeUint16BE =
Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
this[offset] = (value >>> 8)
this[offset + 1] = (value & 0xff)
return offset + 2
}
Buffer.prototype.writeUint32LE =
Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
this[offset + 3] = (value >>> 24)
this[offset + 2] = (value >>> 16)
this[offset + 1] = (value >>> 8)
this[offset] = (value & 0xff)
return offset + 4
}
Buffer.prototype.writeUint32BE =
Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
this[offset] = (value >>> 24)
this[offset + 1] = (value >>> 16)
this[offset + 2] = (value >>> 8)
this[offset + 3] = (value & 0xff)
return offset + 4
}
Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) {
var limit = Math.pow(2, (8 * byteLength) - 1)
checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
var i = 0
var mul = 1
var sub = 0
this[offset] = value & 0xFF
while (++i < byteLength && (mul *= 0x100)) {
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
sub = 1
}
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) {
var limit = Math.pow(2, (8 * byteLength) - 1)
checkInt(this, value, offset, byteLength, limit - 1, -limit)
}
var i = byteLength - 1
var mul = 1
var sub = 0
this[offset + i] = value & 0xFF
while (--i >= 0 && (mul *= 0x100)) {
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
sub = 1
}
this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
}
return offset + byteLength
}
Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
if (value < 0) value = 0xff + value + 1
this[offset] = (value & 0xff)
return offset + 1
}
Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
return offset + 2
}
Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
this[offset] = (value >>> 8)
this[offset + 1] = (value & 0xff)
return offset + 2
}
Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
this[offset] = (value & 0xff)
this[offset + 1] = (value >>> 8)
this[offset + 2] = (value >>> 16)
this[offset + 3] = (value >>> 24)
return offset + 4
}
Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
if (value < 0) value = 0xffffffff + value + 1
this[offset] = (value >>> 24)
this[offset + 1] = (value >>> 16)
this[offset + 2] = (value >>> 8)
this[offset + 3] = (value & 0xff)
return offset + 4
}
function checkIEEE754 (buf, value, offset, ext, max, min) {
if (offset + ext > buf.length) throw new RangeError('Index out of range')
if (offset < 0) throw new RangeError('Index out of range')
}
function writeFloat (buf, value, offset, littleEndian, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) {
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
}
ieee754.write(buf, value, offset, littleEndian, 23, 4)
return offset + 4
}
Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
return writeFloat(this, value, offset, true, noAssert)
}
Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
return writeFloat(this, value, offset, false, noAssert)
}
function writeDouble (buf, value, offset, littleEndian, noAssert) {
value = +value
offset = offset >>> 0
if (!noAssert) {
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
}
ieee754.write(buf, value, offset, littleEndian, 52, 8)
return offset + 8
}
Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
return writeDouble(this, value, offset, true, noAssert)
}
Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
return writeDouble(this, value, offset, false, noAssert)
}
// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
if (!start) start = 0
if (!end && end !== 0) end = this.length
if (targetStart >= target.length) targetStart = target.length
if (!targetStart) targetStart = 0
if (end > 0 && end < start) end = start
// Copy 0 bytes; we're done
if (end === start) return 0
if (target.length === 0 || this.length === 0) return 0
// Fatal error conditions
if (targetStart < 0) {
throw new RangeError('targetStart out of bounds')
}
if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
if (end < 0) throw new RangeError('sourceEnd out of bounds')
// Are we oob?
if (end > this.length) end = this.length
if (target.length - targetStart < end - start) {
end = target.length - targetStart + start
}
var len = end - start
if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
// Use built-in when available, missing from IE11
this.copyWithin(targetStart, start, end)
} else {
Uint8Array.prototype.set.call(
target,
this.subarray(start, end),
targetStart
)
}
return len
}
// Usage:
// buffer.fill(number[, offset[, end]])
// buffer.fill(buffer[, offset[, end]])
// buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill (val, start, end, encoding) {
// Handle string cases:
if (typeof val === 'string') {
if (typeof start === 'string') {
encoding = start
start = 0
end = this.length
} else if (typeof end === 'string') {
encoding = end
end = this.length
}
if (encoding !== undefined && typeof encoding !== 'string') {
throw new TypeError('encoding must be a string')
}
if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
throw new TypeError('Unknown encoding: ' + encoding)
}
if (val.length === 1) {
var code = val.charCodeAt(0)
if ((encoding === 'utf8' && code < 128) ||
encoding === 'latin1') {
// Fast path: If `val` fits into a single byte, use that numeric value.
val = code
}
}
} else if (typeof val === 'number') {
val = val & 255
} else if (typeof val === 'boolean') {
val = Number(val)
}
// Invalid ranges are not set to a default, so can range check early.
if (start < 0 || this.length < start || this.length < end) {
throw new RangeError('Out of range index')
}
if (end <= start) {
return this
}
start = start >>> 0
end = end === undefined ? this.length : end >>> 0
if (!val) val = 0
var i
if (typeof val === 'number') {
for (i = start; i < end; ++i) {
this[i] = val
}
} else {
var bytes = Buffer.isBuffer(val)
? val
: Buffer.from(val, encoding)
var len = bytes.length
if (len === 0) {
throw new TypeError('The value "' + val +
'" is invalid for argument "value"')
}
for (i = 0; i < end - start; ++i) {
this[i + start] = bytes[i % len]
}
}
return this
}
// HELPER FUNCTIONS
// ================
var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
function base64clean (str) {
// Node takes equal signs as end of the Base64 encoding
str = str.split('=')[0]
// Node strips out invalid characters like \n and \t from the string, base64-js does not
str = str.trim().replace(INVALID_BASE64_RE, '')
// Node converts strings with length < 2 to ''
if (str.length < 2) return ''
// Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
while (str.length % 4 !== 0) {
str = str + '='
}
return str
}
function utf8ToBytes (string, units) {
units = units || Infinity
var codePoint
var length = string.length
var leadSurrogate = null
var bytes = []
for (var i = 0; i < length; ++i) {
codePoint = string.charCodeAt(i)
// is surrogate component
if (codePoint > 0xD7FF && codePoint < 0xE000) {
// last char was a lead
if (!leadSurrogate) {
// no lead yet
if (codePoint > 0xDBFF) {
// unexpected trail
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
continue
} else if (i + 1 === length) {
// unpaired lead
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
continue
}
// valid lead
leadSurrogate = codePoint
continue
}
// 2 leads in a row
if (codePoint < 0xDC00) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
leadSurrogate = codePoint
continue
}
// valid surrogate pair
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
} else if (leadSurrogate) {
// valid bmp char, but last char was a lead
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
}
leadSurrogate = null
// encode utf8
if (codePoint < 0x80) {
if ((units -= 1) < 0) break
bytes.push(codePoint)
} else if (codePoint < 0x800) {
if ((units -= 2) < 0) break
bytes.push(
codePoint >> 0x6 | 0xC0,
codePoint & 0x3F | 0x80
)
} else if (codePoint < 0x10000) {
if ((units -= 3) < 0) break
bytes.push(
codePoint >> 0xC | 0xE0,
codePoint >> 0x6 & 0x3F | 0x80,
codePoint & 0x3F | 0x80
)
} else if (codePoint < 0x110000) {
if ((units -= 4) < 0) break
bytes.push(
codePoint >> 0x12 | 0xF0,
codePoint >> 0xC & 0x3F | 0x80,
codePoint >> 0x6 & 0x3F | 0x80,
codePoint & 0x3F | 0x80
)
} else {
throw new Error('Invalid code point')
}
}
return bytes
}
function asciiToBytes (str) {
var byteArray = []
for (var i = 0; i < str.length; ++i) {
// Node's code seems to be doing this and not & 0x7F..
byteArray.push(str.charCodeAt(i) & 0xFF)
}
return byteArray
}
function utf16leToBytes (str, units) {
var c, hi, lo
var byteArray = []
for (var i = 0; i < str.length; ++i) {
if ((units -= 2) < 0) break
c = str.charCodeAt(i)
hi = c >> 8
lo = c % 256
byteArray.push(lo)
byteArray.push(hi)
}
return byteArray
}
function base64ToBytes (str) {
return base64.toByteArray(base64clean(str))
}
function blitBuffer (src, dst, offset, length) {
for (var i = 0; i < length; ++i) {
if ((i + offset >= dst.length) || (i >= src.length)) break
dst[i + offset] = src[i]
}
return i
}
// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
// the `instanceof` check but they should be treated as of that type.
// See: https://github.com/feross/buffer/issues/166
function isInstance (obj, type) {
return obj instanceof type ||
(obj != null && obj.constructor != null && obj.constructor.name != null &&
obj.constructor.name === type.name)
}
function numberIsNaN (obj) {
// For IE11 support
return obj !== obj // eslint-disable-line no-self-compare
}
// Create lookup table for `toString('hex')`
// See: https://github.com/feross/buffer/issues/219
var hexSliceLookupTable = (function () {
var alphabet = '0123456789abcdef'
var table = new Array(256)
for (var i = 0; i < 16; ++i) {
var i16 = i * 16
for (var j = 0; j < 16; ++j) {
table[i16 + j] = alphabet[i] + alphabet[j]
}
}
return table
})()
/***/ }),
/***/ "./node_modules/dom-serializer/index.js":
/*!**********************************************!*\
!*** ./node_modules/dom-serializer/index.js ***!
\**********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/*
Module dependencies
*/
var ElementType = __webpack_require__(/*! domelementtype */ "./node_modules/dom-serializer/node_modules/domelementtype/lib/index.js");
var entities = __webpack_require__(/*! entities */ "./node_modules/dom-serializer/node_modules/entities/lib/index.js");
/* mixed-case SVG and MathML tags & attributes
recognized by the HTML parser, see
https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign
*/
var foreignNames = __webpack_require__(/*! ./foreignNames.json */ "./node_modules/dom-serializer/foreignNames.json");
foreignNames.elementNames.__proto__ = null; /* use as a simple dictionary */
foreignNames.attributeNames.__proto__ = null;
var unencodedElements = {
__proto__: null,
style: true,
script: true,
xmp: true,
iframe: true,
noembed: true,
noframes: true,
plaintext: true,
noscript: true
};
/*
Format attributes
*/
function formatAttrs(attributes, opts) {
if (!attributes) return;
var output = '';
var value;
// Loop through the attributes
for (var key in attributes) {
value = attributes[key];
if (output) {
output += ' ';
}
if (opts.xmlMode === 'foreign') {
/* fix up mixed-case attribute names */
key = foreignNames.attributeNames[key] || key;
}
output += key;
if ((value !== null && value !== '') || opts.xmlMode) {
output +=
'="' +
(opts.decodeEntities
? entities.encodeXML(value)
: value.replace(/\"/g, '"')) +
'"';
}
}
return output;
}
/*
Self-enclosing tags (stolen from node-htmlparser)
*/
var singleTag = {
__proto__: null,
area: true,
base: true,
basefont: true,
br: true,
col: true,
command: true,
embed: true,
frame: true,
hr: true,
img: true,
input: true,
isindex: true,
keygen: true,
link: true,
meta: true,
param: true,
source: true,
track: true,
wbr: true
};
var render = (module.exports = function(dom, opts) {
if (!Array.isArray(dom) && !dom.cheerio) dom = [dom];
opts = opts || {};
var output = '';
for (var i = 0; i < dom.length; i++) {
var elem = dom[i];
if (elem.type === 'root') output += render(elem.children, opts);
else if (ElementType.isTag(elem)) output += renderTag(elem, opts);
else if (elem.type === ElementType.Directive)
output += renderDirective(elem);
else if (elem.type === ElementType.Comment) output += renderComment(elem);
else if (elem.type === ElementType.CDATA) output += renderCdata(elem);
else output += renderText(elem, opts);
}
return output;
});
var foreignModeIntegrationPoints = [
'mi',
'mo',
'mn',
'ms',
'mtext',
'annotation-xml',
'foreignObject',
'desc',
'title'
];
function renderTag(elem, opts) {
// Handle SVG / MathML in HTML
if (opts.xmlMode === 'foreign') {
/* fix up mixed-case element names */
elem.name = foreignNames.elementNames[elem.name] || elem.name;
/* exit foreign mode at integration points */
if (
elem.parent &&
foreignModeIntegrationPoints.indexOf(elem.parent.name) >= 0
)
opts = Object.assign({}, opts, { xmlMode: false });
}
if (!opts.xmlMode && ['svg', 'math'].indexOf(elem.name) >= 0) {
opts = Object.assign({}, opts, { xmlMode: 'foreign' });
}
var tag = '<' + elem.name;
var attribs = formatAttrs(elem.attribs, opts);
if (attribs) {
tag += ' ' + attribs;
}
if (opts.xmlMode && (!elem.children || elem.children.length === 0)) {
tag += '/>';
} else {
tag += '>';
if (elem.children) {
tag += render(elem.children, opts);
}
if (!singleTag[elem.name] || opts.xmlMode) {
tag += '</' + elem.name + '>';
}
}
return tag;
}
function renderDirective(elem) {
return '<' + elem.data + '>';
}
function renderText(elem, opts) {
var data = elem.data || '';
// if entities weren't decoded, no need to encode them back
if (
opts.decodeEntities &&
!(elem.parent && elem.parent.name in unencodedElements)
) {
data = entities.encodeXML(data);
}
return data;
}
function renderCdata(elem) {
return '<![CDATA[' + elem.children[0].data + ']]>';
}
function renderComment(elem) {
return '<!--' + elem.data + '-->';
}
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/domelementtype/lib/index.js":
/*!******************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/domelementtype/lib/index.js ***!
\******************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;
/** Types of elements found in htmlparser2's DOM */
var ElementType;
(function (ElementType) {
/** Type for the root element of a document */
ElementType["Root"] = "root";
/** Type for Text */
ElementType["Text"] = "text";
/** Type for <? ... ?> */
ElementType["Directive"] = "directive";
/** Type for <!-- ... --> */
ElementType["Comment"] = "comment";
/** Type for <script> tags */
ElementType["Script"] = "script";
/** Type for <style> tags */
ElementType["Style"] = "style";
/** Type for Any tag */
ElementType["Tag"] = "tag";
/** Type for <![CDATA[ ... ]]> */
ElementType["CDATA"] = "cdata";
/** Type for <!doctype ...> */
ElementType["Doctype"] = "doctype";
})(ElementType = exports.ElementType || (exports.ElementType = {}));
/**
* Tests whether an element is a tag or not.
*
* @param elem Element to test
*/
function isTag(elem) {
return (elem.type === ElementType.Tag ||
elem.type === ElementType.Script ||
elem.type === ElementType.Style);
}
exports.isTag = isTag;
// Exports for backwards compatibility
/** Type for the root element of a document */
exports.Root = ElementType.Root;
/** Type for Text */
exports.Text = ElementType.Text;
/** Type for <? ... ?> */
exports.Directive = ElementType.Directive;
/** Type for <!-- ... --> */
exports.Comment = ElementType.Comment;
/** Type for <script> tags */
exports.Script = ElementType.Script;
/** Type for <style> tags */
exports.Style = ElementType.Style;
/** Type for Any tag */
exports.Tag = ElementType.Tag;
/** Type for <![CDATA[ ... ]]> */
exports.CDATA = ElementType.CDATA;
/** Type for <!doctype ...> */
exports.Doctype = ElementType.Doctype;
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/decode.js":
/*!*************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/decode.js ***!
\*************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;
var entities_json_1 = __importDefault(__webpack_require__(/*! ./maps/entities.json */ "./node_modules/dom-serializer/node_modules/entities/lib/maps/entities.json"));
var legacy_json_1 = __importDefault(__webpack_require__(/*! ./maps/legacy.json */ "./node_modules/dom-serializer/node_modules/entities/lib/maps/legacy.json"));
var xml_json_1 = __importDefault(__webpack_require__(/*! ./maps/xml.json */ "./node_modules/dom-serializer/node_modules/entities/lib/maps/xml.json"));
var decode_codepoint_1 = __importDefault(__webpack_require__(/*! ./decode_codepoint */ "./node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.js"));
var strictEntityRe = /&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;
exports.decodeXML = getStrictDecoder(xml_json_1.default);
exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);
function getStrictDecoder(map) {
var replace = getReplacer(map);
return function (str) { return String(str).replace(strictEntityRe, replace); };
}
var sorter = function (a, b) { return (a < b ? 1 : -1); };
exports.decodeHTML = (function () {
var legacy = Object.keys(legacy_json_1.default).sort(sorter);
var keys = Object.keys(entities_json_1.default).sort(sorter);
for (var i = 0, j = 0; i < keys.length; i++) {
if (legacy[j] === keys[i]) {
keys[i] += ";?";
j++;
}
else {
keys[i] += ";";
}
}
var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g");
var replace = getReplacer(entities_json_1.default);
function replacer(str) {
if (str.substr(-1) !== ";")
str += ";";
return replace(str);
}
// TODO consider creating a merged map
return function (str) { return String(str).replace(re, replacer); };
})();
function getReplacer(map) {
return function replace(str) {
if (str.charAt(1) === "#") {
var secondChar = str.charAt(2);
if (secondChar === "X" || secondChar === "x") {
return decode_codepoint_1.default(parseInt(str.substr(3), 16));
}
return decode_codepoint_1.default(parseInt(str.substr(2), 10));
}
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
return map[str.slice(1, -1)] || str;
};
}
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.js":
/*!***********************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/decode_codepoint.js ***!
\***********************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var decode_json_1 = __importDefault(__webpack_require__(/*! ./maps/decode.json */ "./node_modules/dom-serializer/node_modules/entities/lib/maps/decode.json"));
// Adapted from https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
var fromCodePoint =
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
String.fromCodePoint ||
function (codePoint) {
var output = "";
if (codePoint > 0xffff) {
codePoint -= 0x10000;
output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
codePoint = 0xdc00 | (codePoint & 0x3ff);
}
output += String.fromCharCode(codePoint);
return output;
};
function decodeCodePoint(codePoint) {
if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
return "\uFFFD";
}
if (codePoint in decode_json_1.default) {
codePoint = decode_json_1.default[codePoint];
}
return fromCodePoint(codePoint);
}
exports["default"] = decodeCodePoint;
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/encode.js":
/*!*************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/encode.js ***!
\*************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = void 0;
var xml_json_1 = __importDefault(__webpack_require__(/*! ./maps/xml.json */ "./node_modules/dom-serializer/node_modules/entities/lib/maps/xml.json"));
var inverseXML = getInverseObj(xml_json_1.default);
var xmlReplacer = getInverseReplacer(inverseXML);
/**
* Encodes all non-ASCII characters, as well as characters not valid in XML
* documents using XML entities.
*
* If a character has no equivalent entity, a
* numeric hexadecimal reference (eg. `ü`) will be used.
*/
exports.encodeXML = getASCIIEncoder(inverseXML);
var entities_json_1 = __importDefault(__webpack_require__(/*! ./maps/entities.json */ "./node_modules/dom-serializer/node_modules/entities/lib/maps/entities.json"));
var inverseHTML = getInverseObj(entities_json_1.default);
var htmlReplacer = getInverseReplacer(inverseHTML);
/**
* Encodes all entities and non-ASCII characters in the input.
*
* This includes characters that are valid ASCII characters in HTML documents.
* For example `#` will be encoded as `#`. To get a more compact output,
* consider using the `encodeNonAsciiHTML` function.
*
* If a character has no equivalent entity, a
* numeric hexadecimal reference (eg. `ü`) will be used.
*/
exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);
/**
* Encodes all non-ASCII characters, as well as characters not valid in HTML
* documents using HTML entities.
*
* If a character has no equivalent entity, a
* numeric hexadecimal reference (eg. `ü`) will be used.
*/
exports.encodeNonAsciiHTML = getASCIIEncoder(inverseHTML);
function getInverseObj(obj) {
return Object.keys(obj)
.sort()
.reduce(function (inverse, name) {
inverse[obj[name]] = "&" + name + ";";
return inverse;
}, {});
}
function getInverseReplacer(inverse) {
var single = [];
var multiple = [];
for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {
var k = _a[_i];
if (k.length === 1) {
// Add value to single array
single.push("\\" + k);
}
else {
// Add value to multiple array
multiple.push(k);
}
}
// Add ranges to single characters.
single.sort();
for (var start = 0; start < single.length - 1; start++) {
// Find the end of a run of characters
var end = start;
while (end < single.length - 1 &&
single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {
end += 1;
}
var count = 1 + end - start;
// We want to replace at least three characters
if (count < 3)
continue;
single.splice(start, count, single[start] + "-" + single[end]);
}
multiple.unshift("[" + single.join("") + "]");
return new RegExp(multiple.join("|"), "g");
}
// /[^\0-\x7F]/gu
var reNonASCII = /(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g;
var getCodePoint =
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
String.prototype.codePointAt != null
? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
function (str) { return str.codePointAt(0); }
: // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
function (c) {
return (c.charCodeAt(0) - 0xd800) * 0x400 +
c.charCodeAt(1) -
0xdc00 +
0x10000;
};
function singleCharReplacer(c) {
return "&#x" + (c.length > 1 ? getCodePoint(c) : c.charCodeAt(0))
.toString(16)
.toUpperCase() + ";";
}
function getInverse(inverse, re) {
return function (data) {
return data
.replace(re, function (name) { return inverse[name]; })
.replace(reNonASCII, singleCharReplacer);
};
}
var reEscapeChars = new RegExp(xmlReplacer.source + "|" + reNonASCII.source, "g");
/**
* Encodes all non-ASCII characters, as well as characters not valid in XML
* documents using numeric hexadecimal reference (eg. `ü`).
*
* Have a look at `escapeUTF8` if you want a more concise output at the expense
* of reduced transportability.
*
* @param data String to escape.
*/
function escape(data) {
return data.replace(reEscapeChars, singleCharReplacer);
}
exports.escape = escape;
/**
* Encodes all characters not valid in XML documents using numeric hexadecimal
* reference (eg. `ü`).
*
* Note that the output will be character-set dependent.
*
* @param data String to escape.
*/
function escapeUTF8(data) {
return data.replace(xmlReplacer, singleCharReplacer);
}
exports.escapeUTF8 = escapeUTF8;
function getASCIIEncoder(obj) {
return function (data) {
return data.replace(reEscapeChars, function (c) { return obj[c] || singleCharReplacer(c); });
};
}
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/index.js":
/*!************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/index.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.encodeHTML5 = exports.encodeHTML4 = exports.escapeUTF8 = exports.escape = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = void 0;
var decode_1 = __webpack_require__(/*! ./decode */ "./node_modules/dom-serializer/node_modules/entities/lib/decode.js");
var encode_1 = __webpack_require__(/*! ./encode */ "./node_modules/dom-serializer/node_modules/entities/lib/encode.js");
/**
* Decodes a string with entities.
*
* @param data String to decode.
* @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
* @deprecated Use `decodeXML` or `decodeHTML` directly.
*/
function decode(data, level) {
return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);
}
exports.decode = decode;
/**
* Decodes a string with entities. Does not allow missing trailing semicolons for entities.
*
* @param data String to decode.
* @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.
* @deprecated Use `decodeHTMLStrict` or `decodeXML` directly.
*/
function decodeStrict(data, level) {
return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);
}
exports.decodeStrict = decodeStrict;
/**
* Encodes a string with entities.
*
* @param data String to encode.
* @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.
* @deprecated Use `encodeHTML`, `encodeXML` or `encodeNonAsciiHTML` directly.
*/
function encode(data, level) {
return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);
}
exports.encode = encode;
var encode_2 = __webpack_require__(/*! ./encode */ "./node_modules/dom-serializer/node_modules/entities/lib/encode.js");
Object.defineProperty(exports, "encodeXML", ({ enumerable: true, get: function () { return encode_2.encodeXML; } }));
Object.defineProperty(exports, "encodeHTML", ({ enumerable: true, get: function () { return encode_2.encodeHTML; } }));
Object.defineProperty(exports, "encodeNonAsciiHTML", ({ enumerable: true, get: function () { return encode_2.encodeNonAsciiHTML; } }));
Object.defineProperty(exports, "escape", ({ enumerable: true, get: function () { return encode_2.escape; } }));
Object.defineProperty(exports, "escapeUTF8", ({ enumerable: true, get: function () { return encode_2.escapeUTF8; } }));
// Legacy aliases (deprecated)
Object.defineProperty(exports, "encodeHTML4", ({ enumerable: true, get: function () { return encode_2.encodeHTML; } }));
Object.defineProperty(exports, "encodeHTML5", ({ enumerable: true, get: function () { return encode_2.encodeHTML; } }));
var decode_2 = __webpack_require__(/*! ./decode */ "./node_modules/dom-serializer/node_modules/entities/lib/decode.js");
Object.defineProperty(exports, "decodeXML", ({ enumerable: true, get: function () { return decode_2.decodeXML; } }));
Object.defineProperty(exports, "decodeHTML", ({ enumerable: true, get: function () { return decode_2.decodeHTML; } }));
Object.defineProperty(exports, "decodeHTMLStrict", ({ enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }));
// Legacy aliases (deprecated)
Object.defineProperty(exports, "decodeHTML4", ({ enumerable: true, get: function () { return decode_2.decodeHTML; } }));
Object.defineProperty(exports, "decodeHTML5", ({ enumerable: true, get: function () { return decode_2.decodeHTML; } }));
Object.defineProperty(exports, "decodeHTML4Strict", ({ enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }));
Object.defineProperty(exports, "decodeHTML5Strict", ({ enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }));
Object.defineProperty(exports, "decodeXMLStrict", ({ enumerable: true, get: function () { return decode_2.decodeXML; } }));
/***/ }),
/***/ "./node_modules/domelementtype/index.js":
/*!**********************************************!*\
!*** ./node_modules/domelementtype/index.js ***!
\**********************************************/
/***/ ((module) => {
//Types of elements found in the DOM
module.exports = {
Text: "text", //Text
Directive: "directive", //<? ... ?>
Comment: "comment", //<!-- ... -->
Script: "script", //<script> tags
Style: "style", //<style> tags
Tag: "tag", //Any tag
CDATA: "cdata", //<![CDATA[ ... ]]>
Doctype: "doctype",
isTag: function(elem){
return elem.type === "tag" || elem.type === "script" || elem.type === "style";
}
};
/***/ }),
/***/ "./node_modules/domhandler/index.js":
/*!******************************************!*\
!*** ./node_modules/domhandler/index.js ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ElementType = __webpack_require__(/*! domelementtype */ "./node_modules/domelementtype/index.js");
var re_whitespace = /\s+/g;
var NodePrototype = __webpack_require__(/*! ./lib/node */ "./node_modules/domhandler/lib/node.js");
var ElementPrototype = __webpack_require__(/*! ./lib/element */ "./node_modules/domhandler/lib/element.js");
function DomHandler(callback, options, elementCB){
if(typeof callback === "object"){
elementCB = options;
options = callback;
callback = null;
} else if(typeof options === "function"){
elementCB = options;
options = defaultOpts;
}
this._callback = callback;
this._options = options || defaultOpts;
this._elementCB = elementCB;
this.dom = [];
this._done = false;
this._tagStack = [];
this._parser = this._parser || null;
}
//default options
var defaultOpts = {
normalizeWhitespace: false, //Replace all whitespace with single spaces
withStartIndices: false, //Add startIndex properties to nodes
withEndIndices: false, //Add endIndex properties to nodes
};
DomHandler.prototype.onparserinit = function(parser){
this._parser = parser;
};
//Resets the handler back to starting state
DomHandler.prototype.onreset = function(){
DomHandler.call(this, this._callback, this._options, this._elementCB);
};
//Signals the handler that parsing is done
DomHandler.prototype.onend = function(){
if(this._done) return;
this._done = true;
this._parser = null;
this._handleCallback(null);
};
DomHandler.prototype._handleCallback =
DomHandler.prototype.onerror = function(error){
if(typeof this._callback === "function"){
this._callback(error, this.dom);
} else {
if(error) throw error;
}
};
DomHandler.prototype.onclosetag = function(){
//if(this._tagStack.pop().name !== name) this._handleCallback(Error("Tagname didn't match!"));
var elem = this._tagStack.pop();
if(this._options.withEndIndices && elem){
elem.endIndex = this._parser.endIndex;
}
if(this._elementCB) this._elementCB(elem);
};
DomHandler.prototype._createDomElement = function(properties){
if (!this._options.withDomLvl1) return properties;
var element;
if (properties.type === "tag") {
element = Object.create(ElementPrototype);
} else {
element = Object.create(NodePrototype);
}
for (var key in properties) {
if (properties.hasOwnProperty(key)) {
element[key] = properties[key];
}
}
return element;
};
DomHandler.prototype._addDomElement = function(element){
var parent = this._tagStack[this._tagStack.length - 1];
var siblings = parent ? parent.children : this.dom;
var previousSibling = siblings[siblings.length - 1];
element.next = null;
if(this._options.withStartIndices){
element.startIndex = this._parser.startIndex;
}
if(this._options.withEndIndices){
element.endIndex = this._parser.endIndex;
}
if(previousSibling){
element.prev = previousSibling;
previousSibling.next = element;
} else {
element.prev = null;
}
siblings.push(element);
element.parent = parent || null;
};
DomHandler.prototype.onopentag = function(name, attribs){
var properties = {
type: name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag,
name: name,
attribs: attribs,
children: []
};
var element = this._createDomElement(properties);
this._addDomElement(element);
this._tagStack.push(element);
};
DomHandler.prototype.ontext = function(data){
//the ignoreWhitespace is officially dropped, but for now,
//it's an alias for normalizeWhitespace
var normalize = this._options.normalizeWhitespace || this._options.ignoreWhitespace;
var lastTag;
if(!this._tagStack.length && this.dom.length && (lastTag = this.dom[this.dom.length-1]).type === ElementType.Text){
if(normalize){
lastTag.data = (lastTag.data + data).replace(re_whitespace, " ");
} else {
lastTag.data += data;
}
} else {
if(
this._tagStack.length &&
(lastTag = this._tagStack[this._tagStack.length - 1]) &&
(lastTag = lastTag.children[lastTag.children.length - 1]) &&
lastTag.type === ElementType.Text
){
if(normalize){
lastTag.data = (lastTag.data + data).replace(re_whitespace, " ");
} else {
lastTag.data += data;
}
} else {
if(normalize){
data = data.replace(re_whitespace, " ");
}
var element = this._createDomElement({
data: data,
type: ElementType.Text
});
this._addDomElement(element);
}
}
};
DomHandler.prototype.oncomment = function(data){
var lastTag = this._tagStack[this._tagStack.length - 1];
if(lastTag && lastTag.type === ElementType.Comment){
lastTag.data += data;
return;
}
var properties = {
data: data,
type: ElementType.Comment
};
var element = this._createDomElement(properties);
this._addDomElement(element);
this._tagStack.push(element);
};
DomHandler.prototype.oncdatastart = function(){
var properties = {
children: [{
data: "",
type: ElementType.Text
}],
type: ElementType.CDATA
};
var element = this._createDomElement(properties);
this._addDomElement(element);
this._tagStack.push(element);
};
DomHandler.prototype.oncommentend = DomHandler.prototype.oncdataend = function(){
this._tagStack.pop();
};
DomHandler.prototype.onprocessinginstruction = function(name, data){
var element = this._createDomElement({
name: name,
data: data,
type: ElementType.Directive
});
this._addDomElement(element);
};
module.exports = DomHandler;
/***/ }),
/***/ "./node_modules/domhandler/lib/element.js":
/*!************************************************!*\
!*** ./node_modules/domhandler/lib/element.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
// DOM-Level-1-compliant structure
var NodePrototype = __webpack_require__(/*! ./node */ "./node_modules/domhandler/lib/node.js");
var ElementPrototype = module.exports = Object.create(NodePrototype);
var domLvl1 = {
tagName: "name"
};
Object.keys(domLvl1).forEach(function(key) {
var shorthand = domLvl1[key];
Object.defineProperty(ElementPrototype, key, {
get: function() {
return this[shorthand] || null;
},
set: function(val) {
this[shorthand] = val;
return val;
}
});
});
/***/ }),
/***/ "./node_modules/domhandler/lib/node.js":
/*!*********************************************!*\
!*** ./node_modules/domhandler/lib/node.js ***!
\*********************************************/
/***/ ((module) => {
// This object will be used as the prototype for Nodes when creating a
// DOM-Level-1-compliant structure.
var NodePrototype = module.exports = {
get firstChild() {
var children = this.children;
return children && children[0] || null;
},
get lastChild() {
var children = this.children;
return children && children[children.length - 1] || null;
},
get nodeType() {
return nodeTypes[this.type] || nodeTypes.element;
}
};
var domLvl1 = {
tagName: "name",
childNodes: "children",
parentNode: "parent",
previousSibling: "prev",
nextSibling: "next",
nodeValue: "data"
};
var nodeTypes = {
element: 1,
text: 3,
cdata: 4,
comment: 8
};
Object.keys(domLvl1).forEach(function(key) {
var shorthand = domLvl1[key];
Object.defineProperty(NodePrototype, key, {
get: function() {
return this[shorthand] || null;
},
set: function(val) {
this[shorthand] = val;
return val;
}
});
});
/***/ }),
/***/ "./node_modules/domutils/index.js":
/*!****************************************!*\
!*** ./node_modules/domutils/index.js ***!
\****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DomUtils = module.exports;
[
__webpack_require__(/*! ./lib/stringify */ "./node_modules/domutils/lib/stringify.js"),
__webpack_require__(/*! ./lib/traversal */ "./node_modules/domutils/lib/traversal.js"),
__webpack_require__(/*! ./lib/manipulation */ "./node_modules/domutils/lib/manipulation.js"),
__webpack_require__(/*! ./lib/querying */ "./node_modules/domutils/lib/querying.js"),
__webpack_require__(/*! ./lib/legacy */ "./node_modules/domutils/lib/legacy.js"),
__webpack_require__(/*! ./lib/helpers */ "./node_modules/domutils/lib/helpers.js")
].forEach(function(ext){
Object.keys(ext).forEach(function(key){
DomUtils[key] = ext[key].bind(DomUtils);
});
});
/***/ }),
/***/ "./node_modules/domutils/lib/helpers.js":
/*!**********************************************!*\
!*** ./node_modules/domutils/lib/helpers.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, exports) => {
// removeSubsets
// Given an array of nodes, remove any member that is contained by another.
exports.removeSubsets = function(nodes) {
var idx = nodes.length, node, ancestor, replace;
// Check if each node (or one of its ancestors) is already contained in the
// array.
while (--idx > -1) {
node = ancestor = nodes[idx];
// Temporarily remove the node under consideration
nodes[idx] = null;
replace = true;
while (ancestor) {
if (nodes.indexOf(ancestor) > -1) {
replace = false;
nodes.splice(idx, 1);
break;
}
ancestor = ancestor.parent;
}
// If the node has been found to be unique, re-insert it.
if (replace) {
nodes[idx] = node;
}
}
return nodes;
};
// Source: http://dom.spec.whatwg.org/#dom-node-comparedocumentposition
var POSITION = {
DISCONNECTED: 1,
PRECEDING: 2,
FOLLOWING: 4,
CONTAINS: 8,
CONTAINED_BY: 16
};
// Compare the position of one node against another node in any other document.
// The return value is a bitmask with the following values:
//
// document order:
// > There is an ordering, document order, defined on all the nodes in the
// > document corresponding to the order in which the first character of the
// > XML representation of each node occurs in the XML representation of the
// > document after expansion of general entities. Thus, the document element
// > node will be the first node. Element nodes occur before their children.
// > Thus, document order orders element nodes in order of the occurrence of
// > their start-tag in the XML (after expansion of entities). The attribute
// > nodes of an element occur after the element and before its children. The
// > relative order of attribute nodes is implementation-dependent./
// Source:
// http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order
//
// @argument {Node} nodaA The first node to use in the comparison
// @argument {Node} nodeB The second node to use in the comparison
//
// @return {Number} A bitmask describing the input nodes' relative position.
// See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for
// a description of these values.
var comparePos = exports.compareDocumentPosition = function(nodeA, nodeB) {
var aParents = [];
var bParents = [];
var current, sharedParent, siblings, aSibling, bSibling, idx;
if (nodeA === nodeB) {
return 0;
}
current = nodeA;
while (current) {
aParents.unshift(current);
current = current.parent;
}
current = nodeB;
while (current) {
bParents.unshift(current);
current = current.parent;
}
idx = 0;
while (aParents[idx] === bParents[idx]) {
idx++;
}
if (idx === 0) {
return POSITION.DISCONNECTED;
}
sharedParent = aParents[idx - 1];
siblings = sharedParent.children;
aSibling = aParents[idx];
bSibling = bParents[idx];
if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {
if (sharedParent === nodeB) {
return POSITION.FOLLOWING | POSITION.CONTAINED_BY;
}
return POSITION.FOLLOWING;
} else {
if (sharedParent === nodeA) {
return POSITION.PRECEDING | POSITION.CONTAINS;
}
return POSITION.PRECEDING;
}
};
// Sort an array of nodes based on their relative position in the document and
// remove any duplicate nodes. If the array contains nodes that do not belong
// to the same document, sort order is unspecified.
//
// @argument {Array} nodes Array of DOM nodes
//
// @returns {Array} collection of unique nodes, sorted in document order
exports.uniqueSort = function(nodes) {
var idx = nodes.length, node, position;
nodes = nodes.slice();
while (--idx > -1) {
node = nodes[idx];
position = nodes.indexOf(node);
if (position > -1 && position < idx) {
nodes.splice(idx, 1);
}
}
nodes.sort(function(a, b) {
var relative = comparePos(a, b);
if (relative & POSITION.PRECEDING) {
return -1;
} else if (relative & POSITION.FOLLOWING) {
return 1;
}
return 0;
});
return nodes;
};
/***/ }),
/***/ "./node_modules/domutils/lib/legacy.js":
/*!*********************************************!*\
!*** ./node_modules/domutils/lib/legacy.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
var ElementType = __webpack_require__(/*! domelementtype */ "./node_modules/domelementtype/index.js");
var isTag = exports.isTag = ElementType.isTag;
exports.testElement = function(options, element){
for(var key in options){
if(!options.hasOwnProperty(key));
else if(key === "tag_name"){
if(!isTag(element) || !options.tag_name(element.name)){
return false;
}
} else if(key === "tag_type"){
if(!options.tag_type(element.type)) return false;
} else if(key === "tag_contains"){
if(isTag(element) || !options.tag_contains(element.data)){
return false;
}
} else if(!element.attribs || !options[key](element.attribs[key])){
return false;
}
}
return true;
};
var Checks = {
tag_name: function(name){
if(typeof name === "function"){
return function(elem){ return isTag(elem) && name(elem.name); };
} else if(name === "*"){
return isTag;
} else {
return function(elem){ return isTag(elem) && elem.name === name; };
}
},
tag_type: function(type){
if(typeof type === "function"){
return function(elem){ return type(elem.type); };
} else {
return function(elem){ return elem.type === type; };
}
},
tag_contains: function(data){
if(typeof data === "function"){
return function(elem){ return !isTag(elem) && data(elem.data); };
} else {
return function(elem){ return !isTag(elem) && elem.data === data; };
}
}
};
function getAttribCheck(attrib, value){
if(typeof value === "function"){
return function(elem){ return elem.attribs && value(elem.attribs[attrib]); };
} else {
return function(elem){ return elem.attribs && elem.attribs[attrib] === value; };
}
}
function combineFuncs(a, b){
return function(elem){
return a(elem) || b(elem);
};
}
exports.getElements = function(options, element, recurse, limit){
var funcs = Object.keys(options).map(function(key){
var value = options[key];
return key in Checks ? Checks[key](value) : getAttribCheck(key, value);
});
return funcs.length === 0 ? [] : this.filter(
funcs.reduce(combineFuncs),
element, recurse, limit
);
};
exports.getElementById = function(id, element, recurse){
if(!Array.isArray(element)) element = [element];
return this.findOne(getAttribCheck("id", id), element, recurse !== false);
};
exports.getElementsByTagName = function(name, element, recurse, limit){
return this.filter(Checks.tag_name(name), element, recurse, limit);
};
exports.getElementsByTagType = function(type, element, recurse, limit){
return this.filter(Checks.tag_type(type), element, recurse, limit);
};
/***/ }),
/***/ "./node_modules/domutils/lib/manipulation.js":
/*!***************************************************!*\
!*** ./node_modules/domutils/lib/manipulation.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, exports) => {
exports.removeElement = function(elem){
if(elem.prev) elem.prev.next = elem.next;
if(elem.next) elem.next.prev = elem.prev;
if(elem.parent){
var childs = elem.parent.children;
childs.splice(childs.lastIndexOf(elem), 1);
}
};
exports.replaceElement = function(elem, replacement){
var prev = replacement.prev = elem.prev;
if(prev){
prev.next = replacement;
}
var next = replacement.next = elem.next;
if(next){
next.prev = replacement;
}
var parent = replacement.parent = elem.parent;
if(parent){
var childs = parent.children;
childs[childs.lastIndexOf(elem)] = replacement;
}
};
exports.appendChild = function(elem, child){
child.parent = elem;
if(elem.children.push(child) !== 1){
var sibling = elem.children[elem.children.length - 2];
sibling.next = child;
child.prev = sibling;
child.next = null;
}
};
exports.append = function(elem, next){
var parent = elem.parent,
currNext = elem.next;
next.next = currNext;
next.prev = elem;
elem.next = next;
next.parent = parent;
if(currNext){
currNext.prev = next;
if(parent){
var childs = parent.children;
childs.splice(childs.lastIndexOf(currNext), 0, next);
}
} else if(parent){
parent.children.push(next);
}
};
exports.prepend = function(elem, prev){
var parent = elem.parent;
if(parent){
var childs = parent.children;
childs.splice(childs.lastIndexOf(elem), 0, prev);
}
if(elem.prev){
elem.prev.next = prev;
}
prev.parent = parent;
prev.prev = elem.prev;
prev.next = elem;
elem.prev = prev;
};
/***/ }),
/***/ "./node_modules/domutils/lib/querying.js":
/*!***********************************************!*\
!*** ./node_modules/domutils/lib/querying.js ***!
\***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isTag = (__webpack_require__(/*! domelementtype */ "./node_modules/domelementtype/index.js").isTag);
module.exports = {
filter: filter,
find: find,
findOneChild: findOneChild,
findOne: findOne,
existsOne: existsOne,
findAll: findAll
};
function filter(test, element, recurse, limit){
if(!Array.isArray(element)) element = [element];
if(typeof limit !== "number" || !isFinite(limit)){
limit = Infinity;
}
return find(test, element, recurse !== false, limit);
}
function find(test, elems, recurse, limit){
var result = [], childs;
for(var i = 0, j = elems.length; i < j; i++){
if(test(elems[i])){
result.push(elems[i]);
if(--limit <= 0) break;
}
childs = elems[i].children;
if(recurse && childs && childs.length > 0){
childs = find(test, childs, recurse, limit);
result = result.concat(childs);
limit -= childs.length;
if(limit <= 0) break;
}
}
return result;
}
function findOneChild(test, elems){
for(var i = 0, l = elems.length; i < l; i++){
if(test(elems[i])) return elems[i];
}
return null;
}
function findOne(test, elems){
var elem = null;
for(var i = 0, l = elems.length; i < l && !elem; i++){
if(!isTag(elems[i])){
continue;
} else if(test(elems[i])){
elem = elems[i];
} else if(elems[i].children.length > 0){
elem = findOne(test, elems[i].children);
}
}
return elem;
}
function existsOne(test, elems){
for(var i = 0, l = elems.length; i < l; i++){
if(
isTag(elems[i]) && (
test(elems[i]) || (
elems[i].children.length > 0 &&
existsOne(test, elems[i].children)
)
)
){
return true;
}
}
return false;
}
function findAll(test, rootElems){
var result = [];
var stack = rootElems.slice();
while(stack.length){
var elem = stack.shift();
if(!isTag(elem)) continue;
if (elem.children && elem.children.length > 0) {
stack.unshift.apply(stack, elem.children);
}
if(test(elem)) result.push(elem);
}
return result;
}
/***/ }),
/***/ "./node_modules/domutils/lib/stringify.js":
/*!************************************************!*\
!*** ./node_modules/domutils/lib/stringify.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var ElementType = __webpack_require__(/*! domelementtype */ "./node_modules/domelementtype/index.js"),
getOuterHTML = __webpack_require__(/*! dom-serializer */ "./node_modules/dom-serializer/index.js"),
isTag = ElementType.isTag;
module.exports = {
getInnerHTML: getInnerHTML,
getOuterHTML: getOuterHTML,
getText: getText
};
function getInnerHTML(elem, opts){
return elem.children ? elem.children.map(function(elem){
return getOuterHTML(elem, opts);
}).join("") : "";
}
function getText(elem){
if(Array.isArray(elem)) return elem.map(getText).join("");
if(isTag(elem)) return elem.name === "br" ? "\n" : getText(elem.children);
if(elem.type === ElementType.CDATA) return getText(elem.children);
if(elem.type === ElementType.Text) return elem.data;
return "";
}
/***/ }),
/***/ "./node_modules/domutils/lib/traversal.js":
/*!************************************************!*\
!*** ./node_modules/domutils/lib/traversal.js ***!
\************************************************/
/***/ ((__unused_webpack_module, exports) => {
var getChildren = exports.getChildren = function(elem){
return elem.children;
};
var getParent = exports.getParent = function(elem){
return elem.parent;
};
exports.getSiblings = function(elem){
var parent = getParent(elem);
return parent ? getChildren(parent) : [elem];
};
exports.getAttributeValue = function(elem, name){
return elem.attribs && elem.attribs[name];
};
exports.hasAttrib = function(elem, name){
return !!elem.attribs && hasOwnProperty.call(elem.attribs, name);
};
exports.getName = function(elem){
return elem.name;
};
/***/ }),
/***/ "./node_modules/entities/lib/decode_codepoint.js":
/*!*******************************************************!*\
!*** ./node_modules/entities/lib/decode_codepoint.js ***!
\*******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var decodeMap = __webpack_require__(/*! ../maps/decode.json */ "./node_modules/entities/maps/decode.json");
module.exports = decodeCodePoint;
// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
function decodeCodePoint(codePoint) {
if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
return "\uFFFD";
}
if (codePoint in decodeMap) {
codePoint = decodeMap[codePoint];
}
var output = "";
if (codePoint > 0xffff) {
codePoint -= 0x10000;
output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
codePoint = 0xdc00 | (codePoint & 0x3ff);
}
output += String.fromCharCode(codePoint);
return output;
}
/***/ }),
/***/ "./node_modules/events/events.js":
/*!***************************************!*\
!*** ./node_modules/events/events.js ***!
\***************************************/
/***/ ((module) => {
"use strict";
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
var R = typeof Reflect === 'object' ? Reflect : null
var ReflectApply = R && typeof R.apply === 'function'
? R.apply
: function ReflectApply(target, receiver, args) {
return Function.prototype.apply.call(target, receiver, args);
}
var ReflectOwnKeys
if (R && typeof R.ownKeys === 'function') {
ReflectOwnKeys = R.ownKeys
} else if (Object.getOwnPropertySymbols) {
ReflectOwnKeys = function ReflectOwnKeys(target) {
return Object.getOwnPropertyNames(target)
.concat(Object.getOwnPropertySymbols(target));
};
} else {
ReflectOwnKeys = function ReflectOwnKeys(target) {
return Object.getOwnPropertyNames(target);
};
}
function ProcessEmitWarning(warning) {
if (console && console.warn) console.warn(warning);
}
var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
return value !== value;
}
function EventEmitter() {
EventEmitter.init.call(this);
}
module.exports = EventEmitter;
module.exports.once = once;
// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;
EventEmitter.prototype._events = undefined;
EventEmitter.prototype._eventsCount = 0;
EventEmitter.prototype._maxListeners = undefined;
// By default EventEmitters will print a warning if more than 10 listeners are
// added to it. This is a useful default which helps finding memory leaks.
var defaultMaxListeners = 10;
function checkListener(listener) {
if (typeof listener !== 'function') {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
}
Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
enumerable: true,
get: function() {
return defaultMaxListeners;
},
set: function(arg) {
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
}
defaultMaxListeners = arg;
}
});
EventEmitter.init = function() {
if (this._events === undefined ||
this._events === Object.getPrototypeOf(this)._events) {
this._events = Object.create(null);
this._eventsCount = 0;
}
this._maxListeners = this._maxListeners || undefined;
};
// Obviously not all Emitters should be limited to 10. This function allows
// that to be increased. Set to zero for unlimited.
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
}
this._maxListeners = n;
return this;
};
function _getMaxListeners(that) {
if (that._maxListeners === undefined)
return EventEmitter.defaultMaxListeners;
return that._maxListeners;
}
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
return _getMaxListeners(this);
};
EventEmitter.prototype.emit = function emit(type) {
var args = [];
for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
var doError = (type === 'error');
var events = this._events;
if (events !== undefined)
doError = (doError && events.error === undefined);
else if (!doError)
return false;
// If there is no 'error' event listener then throw.
if (doError) {
var er;
if (args.length > 0)
er = args[0];
if (er instanceof Error) {
// Note: The comments on the `throw` lines are intentional, they show
// up in Node's output if this results in an unhandled exception.
throw er; // Unhandled 'error' event
}
// At least give some kind of context to the user
var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
err.context = er;
throw err; // Unhandled 'error' event
}
var handler = events[type];
if (handler === undefined)
return false;
if (typeof handler === 'function') {
ReflectApply(handler, this, args);
} else {
var len = handler.length;
var listeners = arrayClone(handler, len);
for (var i = 0; i < len; ++i)
ReflectApply(listeners[i], this, args);
}
return true;
};
function _addListener(target, type, listener, prepend) {
var m;
var events;
var existing;
checkListener(listener);
events = target._events;
if (events === undefined) {
events = target._events = Object.create(null);
target._eventsCount = 0;
} else {
// To avoid recursion in the case that type === "newListener"! Before
// adding it to the listeners, first emit "newListener".
if (events.newListener !== undefined) {
target.emit('newListener', type,
listener.listener ? listener.listener : listener);
// Re-assign `events` because a newListener handler could have caused the
// this._events to be assigned to a new object
events = target._events;
}
existing = events[type];
}
if (existing === undefined) {
// Optimize the case of one listener. Don't need the extra array object.
existing = events[type] = listener;
++target._eventsCount;
} else {
if (typeof existing === 'function') {
// Adding the second element, need to change to array.
existing = events[type] =
prepend ? [listener, existing] : [existing, listener];
// If we've already got an array, just append.
} else if (prepend) {
existing.unshift(listener);
} else {
existing.push(listener);
}
// Check for listener leak
m = _getMaxListeners(target);
if (m > 0 && existing.length > m && !existing.warned) {
existing.warned = true;
// No error code for this since it is a Warning
// eslint-disable-next-line no-restricted-syntax
var w = new Error('Possible EventEmitter memory leak detected. ' +
existing.length + ' ' + String(type) + ' listeners ' +
'added. Use emitter.setMaxListeners() to ' +
'increase limit');
w.name = 'MaxListenersExceededWarning';
w.emitter = target;
w.type = type;
w.count = existing.length;
ProcessEmitWarning(w);
}
}
return target;
}
EventEmitter.prototype.addListener = function addListener(type, listener) {
return _addListener(this, type, listener, false);
};
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
EventEmitter.prototype.prependListener =
function prependListener(type, listener) {
return _addListener(this, type, listener, true);
};
function onceWrapper() {
if (!this.fired) {
this.target.removeListener(this.type, this.wrapFn);
this.fired = true;
if (arguments.length === 0)
return this.listener.call(this.target);
return this.listener.apply(this.target, arguments);
}
}
function _onceWrap(target, type, listener) {
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
var wrapped = onceWrapper.bind(state);
wrapped.listener = listener;
state.wrapFn = wrapped;
return wrapped;
}
EventEmitter.prototype.once = function once(type, listener) {
checkListener(listener);
this.on(type, _onceWrap(this, type, listener));
return this;
};
EventEmitter.prototype.prependOnceListener =
function prependOnceListener(type, listener) {
checkListener(listener);
this.prependListener(type, _onceWrap(this, type, listener));
return this;
};
// Emits a 'removeListener' event if and only if the listener was removed.
EventEmitter.prototype.removeListener =
function removeListener(type, listener) {
var list, events, position, i, originalListener;
checkListener(listener);
events = this._events;
if (events === undefined)
return this;
list = events[type];
if (list === undefined)
return this;
if (list === listener || list.listener === listener) {
if (--this._eventsCount === 0)
this._events = Object.create(null);
else {
delete events[type];
if (events.removeListener)
this.emit('removeListener', type, list.listener || listener);
}
} else if (typeof list !== 'function') {
position = -1;
for (i = list.length - 1; i >= 0; i--) {
if (list[i] === listener || list[i].listener === listener) {
originalListener = list[i].listener;
position = i;
break;
}
}
if (position < 0)
return this;
if (position === 0)
list.shift();
else {
spliceOne(list, position);
}
if (list.length === 1)
events[type] = list[0];
if (events.removeListener !== undefined)
this.emit('removeListener', type, originalListener || listener);
}
return this;
};
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.removeAllListeners =
function removeAllListeners(type) {
var listeners, events, i;
events = this._events;
if (events === undefined)
return this;
// not listening for removeListener, no need to emit
if (events.removeListener === undefined) {
if (arguments.length === 0) {
this._events = Object.create(null);
this._eventsCount = 0;
} else if (events[type] !== undefined) {
if (--this._eventsCount === 0)
this._events = Object.create(null);
else
delete events[type];
}
return this;
}
// emit removeListener for all listeners on all events
if (arguments.length === 0) {
var keys = Object.keys(events);
var key;
for (i = 0; i < keys.length; ++i) {
key = keys[i];
if (key === 'removeListener') continue;
this.removeAllListeners(key);
}
this.removeAllListeners('removeListener');
this._events = Object.create(null);
this._eventsCount = 0;
return this;
}
listeners = events[type];
if (typeof listeners === 'function') {
this.removeListener(type, listeners);
} else if (listeners !== undefined) {
// LIFO order
for (i = listeners.length - 1; i >= 0; i--) {
this.removeListener(type, listeners[i]);
}
}
return this;
};
function _listeners(target, type, unwrap) {
var events = target._events;
if (events === undefined)
return [];
var evlistener = events[type];
if (evlistener === undefined)
return [];
if (typeof evlistener === 'function')
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
return unwrap ?
unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
}
EventEmitter.prototype.listeners = function listeners(type) {
return _listeners(this, type, true);
};
EventEmitter.prototype.rawListeners = function rawListeners(type) {
return _listeners(this, type, false);
};
EventEmitter.listenerCount = function(emitter, type) {
if (typeof emitter.listenerCount === 'function') {
return emitter.listenerCount(type);
} else {
return listenerCount.call(emitter, type);
}
};
EventEmitter.prototype.listenerCount = listenerCount;
function listenerCount(type) {
var events = this._events;
if (events !== undefined) {
var evlistener = events[type];
if (typeof evlistener === 'function') {
return 1;
} else if (evlistener !== undefined) {
return evlistener.length;
}
}
return 0;
}
EventEmitter.prototype.eventNames = function eventNames() {
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
};
function arrayClone(arr, n) {
var copy = new Array(n);
for (var i = 0; i < n; ++i)
copy[i] = arr[i];
return copy;
}
function spliceOne(list, index) {
for (; index + 1 < list.length; index++)
list[index] = list[index + 1];
list.pop();
}
function unwrapListeners(arr) {
var ret = new Array(arr.length);
for (var i = 0; i < ret.length; ++i) {
ret[i] = arr[i].listener || arr[i];
}
return ret;
}
function once(emitter, name) {
return new Promise(function (resolve, reject) {
function errorListener(err) {
emitter.removeListener(name, resolver);
reject(err);
}
function resolver() {
if (typeof emitter.removeListener === 'function') {
emitter.removeListener('error', errorListener);
}
resolve([].slice.call(arguments));
};
eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
if (name !== 'error') {
addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
}
});
}
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
if (typeof emitter.on === 'function') {
eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
}
}
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
if (typeof emitter.on === 'function') {
if (flags.once) {
emitter.once(name, listener);
} else {
emitter.on(name, listener);
}
} else if (typeof emitter.addEventListener === 'function') {
// EventTarget does not have `error` event semantics like Node
// EventEmitters, we do not listen for `error` events here.
emitter.addEventListener(name, function wrapListener(arg) {
// IE does not have builtin `{ once: true }` support so we
// have to do it manually.
if (flags.once) {
emitter.removeEventListener(name, wrapListener);
}
listener(arg);
});
} else {
throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
}
}
/***/ }),
/***/ "./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js":
/*!**********************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***!
\**********************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var reactIs = __webpack_require__(/*! react-is */ "./node_modules/hoist-non-react-statics/node_modules/react-is/index.js");
/**
* Copyright 2015, Yahoo! Inc.
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
*/
var REACT_STATICS = {
childContextTypes: true,
contextType: true,
contextTypes: true,
defaultProps: true,
displayName: true,
getDefaultProps: true,
getDerivedStateFromError: true,
getDerivedStateFromProps: true,
mixins: true,
propTypes: true,
type: true
};
var KNOWN_STATICS = {
name: true,
length: true,
prototype: true,
caller: true,
callee: true,
arguments: true,
arity: true
};
var FORWARD_REF_STATICS = {
'$$typeof': true,
render: true,
defaultProps: true,
displayName: true,
propTypes: true
};
var MEMO_STATICS = {
'$$typeof': true,
compare: true,
defaultProps: true,
displayName: true,
propTypes: true,
type: true
};
var TYPE_STATICS = {};
TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;
TYPE_STATICS[reactIs.Memo] = MEMO_STATICS;
function getStatics(component) {
// React v16.11 and below
if (reactIs.isMemo(component)) {
return MEMO_STATICS;
} // React v16.12 and above
return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;
}
var defineProperty = Object.defineProperty;
var getOwnPropertyNames = Object.getOwnPropertyNames;
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
var getPrototypeOf = Object.getPrototypeOf;
var objectPrototype = Object.prototype;
function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {
if (typeof sourceComponent !== 'string') {
// don't hoist over string (html) components
if (objectPrototype) {
var inheritedComponent = getPrototypeOf(sourceComponent);
if (inheritedComponent && inheritedComponent !== objectPrototype) {
hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);
}
}
var keys = getOwnPropertyNames(sourceComponent);
if (getOwnPropertySymbols) {
keys = keys.concat(getOwnPropertySymbols(sourceComponent));
}
var targetStatics = getStatics(targetComponent);
var sourceStatics = getStatics(sourceComponent);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
var descriptor = getOwnPropertyDescriptor(sourceComponent, key);
try {
// Avoid failures from read-only properties
defineProperty(targetComponent, key, descriptor);
} catch (e) {}
}
}
}
return targetComponent;
}
module.exports = hoistNonReactStatics;
/***/ }),
/***/ "./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js":
/*!************************************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js ***!
\************************************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
/** @license React v16.13.1
* react-is.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (true) {
(function() {
'use strict';
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
// nor polyfill, then a plain number is used for performance.
var hasSymbol = typeof Symbol === 'function' && Symbol.for;
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
// (unstable) APIs that have been removed. Can we remove the symbols?
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
function isValidElementType(type) {
return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
}
function typeOf(object) {
if (typeof object === 'object' && object !== null) {
var $$typeof = object.$$typeof;
switch ($$typeof) {
case REACT_ELEMENT_TYPE:
var type = object.type;
switch (type) {
case REACT_ASYNC_MODE_TYPE:
case REACT_CONCURRENT_MODE_TYPE:
case REACT_FRAGMENT_TYPE:
case REACT_PROFILER_TYPE:
case REACT_STRICT_MODE_TYPE:
case REACT_SUSPENSE_TYPE:
return type;
default:
var $$typeofType = type && type.$$typeof;
switch ($$typeofType) {
case REACT_CONTEXT_TYPE:
case REACT_FORWARD_REF_TYPE:
case REACT_LAZY_TYPE:
case REACT_MEMO_TYPE:
case REACT_PROVIDER_TYPE:
return $$typeofType;
default:
return $$typeof;
}
}
case REACT_PORTAL_TYPE:
return $$typeof;
}
}
return undefined;
} // AsyncMode is deprecated along with isAsyncMode
var AsyncMode = REACT_ASYNC_MODE_TYPE;
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
var ContextConsumer = REACT_CONTEXT_TYPE;
var ContextProvider = REACT_PROVIDER_TYPE;
var Element = REACT_ELEMENT_TYPE;
var ForwardRef = REACT_FORWARD_REF_TYPE;
var Fragment = REACT_FRAGMENT_TYPE;
var Lazy = REACT_LAZY_TYPE;
var Memo = REACT_MEMO_TYPE;
var Portal = REACT_PORTAL_TYPE;
var Profiler = REACT_PROFILER_TYPE;
var StrictMode = REACT_STRICT_MODE_TYPE;
var Suspense = REACT_SUSPENSE_TYPE;
var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
function isAsyncMode(object) {
{
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
}
}
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
}
function isConcurrentMode(object) {
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
}
function isContextConsumer(object) {
return typeOf(object) === REACT_CONTEXT_TYPE;
}
function isContextProvider(object) {
return typeOf(object) === REACT_PROVIDER_TYPE;
}
function isElement(object) {
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
}
function isForwardRef(object) {
return typeOf(object) === REACT_FORWARD_REF_TYPE;
}
function isFragment(object) {
return typeOf(object) === REACT_FRAGMENT_TYPE;
}
function isLazy(object) {
return typeOf(object) === REACT_LAZY_TYPE;
}
function isMemo(object) {
return typeOf(object) === REACT_MEMO_TYPE;
}
function isPortal(object) {
return typeOf(object) === REACT_PORTAL_TYPE;
}
function isProfiler(object) {
return typeOf(object) === REACT_PROFILER_TYPE;
}
function isStrictMode(object) {
return typeOf(object) === REACT_STRICT_MODE_TYPE;
}
function isSuspense(object) {
return typeOf(object) === REACT_SUSPENSE_TYPE;
}
exports.AsyncMode = AsyncMode;
exports.ConcurrentMode = ConcurrentMode;
exports.ContextConsumer = ContextConsumer;
exports.ContextProvider = ContextProvider;
exports.Element = Element;
exports.ForwardRef = ForwardRef;
exports.Fragment = Fragment;
exports.Lazy = Lazy;
exports.Memo = Memo;
exports.Portal = Portal;
exports.Profiler = Profiler;
exports.StrictMode = StrictMode;
exports.Suspense = Suspense;
exports.isAsyncMode = isAsyncMode;
exports.isConcurrentMode = isConcurrentMode;
exports.isContextConsumer = isContextConsumer;
exports.isContextProvider = isContextProvider;
exports.isElement = isElement;
exports.isForwardRef = isForwardRef;
exports.isFragment = isFragment;
exports.isLazy = isLazy;
exports.isMemo = isMemo;
exports.isPortal = isPortal;
exports.isProfiler = isProfiler;
exports.isStrictMode = isStrictMode;
exports.isSuspense = isSuspense;
exports.isValidElementType = isValidElementType;
exports.typeOf = typeOf;
})();
}
/***/ }),
/***/ "./node_modules/hoist-non-react-statics/node_modules/react-is/index.js":
/*!*****************************************************************************!*\
!*** ./node_modules/hoist-non-react-statics/node_modules/react-is/index.js ***!
\*****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
if (false) {} else {
module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js");
}
/***/ }),
/***/ "./node_modules/htmlparser2/lib/CollectingHandler.js":
/*!***********************************************************!*\
!*** ./node_modules/htmlparser2/lib/CollectingHandler.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
module.exports = CollectingHandler;
function CollectingHandler(cbs) {
this._cbs = cbs || {};
this.events = [];
}
var EVENTS = (__webpack_require__(/*! ./ */ "./node_modules/htmlparser2/lib/index.js").EVENTS);
Object.keys(EVENTS).forEach(function(name) {
if (EVENTS[name] === 0) {
name = "on" + name;
CollectingHandler.prototype[name] = function() {
this.events.push([name]);
if (this._cbs[name]) this._cbs[name]();
};
} else if (EVENTS[name] === 1) {
name = "on" + name;
CollectingHandler.prototype[name] = function(a) {
this.events.push([name, a]);
if (this._cbs[name]) this._cbs[name](a);
};
} else if (EVENTS[name] === 2) {
name = "on" + name;
CollectingHandler.prototype[name] = function(a, b) {
this.events.push([name, a, b]);
if (this._cbs[name]) this._cbs[name](a, b);
};
} else {
throw Error("wrong number of arguments");
}
});
CollectingHandler.prototype.onreset = function() {
this.events = [];
if (this._cbs.onreset) this._cbs.onreset();
};
CollectingHandler.prototype.restart = function() {
if (this._cbs.onreset) this._cbs.onreset();
for (var i = 0, len = this.events.length; i < len; i++) {
if (this._cbs[this.events[i][0]]) {
var num = this.events[i].length;
if (num === 1) {
this._cbs[this.events[i][0]]();
} else if (num === 2) {
this._cbs[this.events[i][0]](this.events[i][1]);
} else {
this._cbs[this.events[i][0]](
this.events[i][1],
this.events[i][2]
);
}
}
}
};
/***/ }),
/***/ "./node_modules/htmlparser2/lib/FeedHandler.js":
/*!*****************************************************!*\
!*** ./node_modules/htmlparser2/lib/FeedHandler.js ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var DomHandler = __webpack_require__(/*! domhandler */ "./node_modules/domhandler/index.js");
var DomUtils = __webpack_require__(/*! domutils */ "./node_modules/domutils/index.js");
//TODO: make this a streamable handler
function FeedHandler(callback, options) {
this.init(callback, options);
}
__webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js")(FeedHandler, DomHandler);
FeedHandler.prototype.init = DomHandler;
function getElements(what, where) {
return DomUtils.getElementsByTagName(what, where, true);
}
function getOneElement(what, where) {
return DomUtils.getElementsByTagName(what, where, true, 1)[0];
}
function fetch(what, where, recurse) {
return DomUtils.getText(
DomUtils.getElementsByTagName(what, where, recurse, 1)
).trim();
}
function addConditionally(obj, prop, what, where, recurse) {
var tmp = fetch(what, where, recurse);
if (tmp) obj[prop] = tmp;
}
var isValidFeed = function(value) {
return value === "rss" || value === "feed" || value === "rdf:RDF";
};
FeedHandler.prototype.onend = function() {
var feed = {},
feedRoot = getOneElement(isValidFeed, this.dom),
tmp,
childs;
if (feedRoot) {
if (feedRoot.name === "feed") {
childs = feedRoot.children;
feed.type = "atom";
addConditionally(feed, "id", "id", childs);
addConditionally(feed, "title", "title", childs);
if (
(tmp = getOneElement("link", childs)) &&
(tmp = tmp.attribs) &&
(tmp = tmp.href)
)
feed.link = tmp;
addConditionally(feed, "description", "subtitle", childs);
if ((tmp = fetch("updated", childs))) feed.updated = new Date(tmp);
addConditionally(feed, "author", "email", childs, true);
feed.items = getElements("entry", childs).map(function(item) {
var entry = {},
tmp;
item = item.children;
addConditionally(entry, "id", "id", item);
addConditionally(entry, "title", "title", item);
if (
(tmp = getOneElement("link", item)) &&
(tmp = tmp.attribs) &&
(tmp = tmp.href)
)
entry.link = tmp;
if ((tmp = fetch("summary", item) || fetch("content", item)))
entry.description = tmp;
if ((tmp = fetch("updated", item)))
entry.pubDate = new Date(tmp);
return entry;
});
} else {
childs = getOneElement("channel", feedRoot.children).children;
feed.type = feedRoot.name.substr(0, 3);
feed.id = "";
addConditionally(feed, "title", "title", childs);
addConditionally(feed, "link", "link", childs);
addConditionally(feed, "description", "description", childs);
if ((tmp = fetch("lastBuildDate", childs)))
feed.updated = new Date(tmp);
addConditionally(feed, "author", "managingEditor", childs, true);
feed.items = getElements("item", feedRoot.children).map(function(
item
) {
var entry = {},
tmp;
item = item.children;
addConditionally(entry, "id", "guid", item);
addConditionally(entry, "title", "title", item);
addConditionally(entry, "link", "link", item);
addConditionally(entry, "description", "description", item);
if ((tmp = fetch("pubDate", item)))
entry.pubDate = new Date(tmp);
return entry;
});
}
}
this.dom = feed;
DomHandler.prototype._handleCallback.call(
this,
feedRoot ? null : Error("couldn't find root of feed")
);
};
module.exports = FeedHandler;
/***/ }),
/***/ "./node_modules/htmlparser2/lib/Parser.js":
/*!************************************************!*\
!*** ./node_modules/htmlparser2/lib/Parser.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var Tokenizer = __webpack_require__(/*! ./Tokenizer.js */ "./node_modules/htmlparser2/lib/Tokenizer.js");
/*
Options:
xmlMode: Disables the special behavior for script/style tags (false by default)
lowerCaseAttributeNames: call .toLowerCase for each attribute name (true if xmlMode is `false`)
lowerCaseTags: call .toLowerCase for each tag name (true if xmlMode is `false`)
*/
/*
Callbacks:
oncdataend,
oncdatastart,
onclosetag,
oncomment,
oncommentend,
onerror,
onopentag,
onprocessinginstruction,
onreset,
ontext
*/
var formTags = {
input: true,
option: true,
optgroup: true,
select: true,
button: true,
datalist: true,
textarea: true
};
var openImpliesClose = {
tr: { tr: true, th: true, td: true },
th: { th: true },
td: { thead: true, th: true, td: true },
body: { head: true, link: true, script: true },
li: { li: true },
p: { p: true },
h1: { p: true },
h2: { p: true },
h3: { p: true },
h4: { p: true },
h5: { p: true },
h6: { p: true },
select: formTags,
input: formTags,
output: formTags,
button: formTags,
datalist: formTags,
textarea: formTags,
option: { option: true },
optgroup: { optgroup: true }
};
var voidElements = {
__proto__: null,
area: true,
base: true,
basefont: true,
br: true,
col: true,
command: true,
embed: true,
frame: true,
hr: true,
img: true,
input: true,
isindex: true,
keygen: true,
link: true,
meta: true,
param: true,
source: true,
track: true,
wbr: true
};
var foreignContextElements = {
__proto__: null,
math: true,
svg: true
};
var htmlIntegrationElements = {
__proto__: null,
mi: true,
mo: true,
mn: true,
ms: true,
mtext: true,
"annotation-xml": true,
foreignObject: true,
desc: true,
title: true
};
var re_nameEnd = /\s|\//;
function Parser(cbs, options) {
this._options = options || {};
this._cbs = cbs || {};
this._tagname = "";
this._attribname = "";
this._attribvalue = "";
this._attribs = null;
this._stack = [];
this._foreignContext = [];
this.startIndex = 0;
this.endIndex = null;
this._lowerCaseTagNames =
"lowerCaseTags" in this._options
? !!this._options.lowerCaseTags
: !this._options.xmlMode;
this._lowerCaseAttributeNames =
"lowerCaseAttributeNames" in this._options
? !!this._options.lowerCaseAttributeNames
: !this._options.xmlMode;
if (this._options.Tokenizer) {
Tokenizer = this._options.Tokenizer;
}
this._tokenizer = new Tokenizer(this._options, this);
if (this._cbs.onparserinit) this._cbs.onparserinit(this);
}
__webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js")(Parser, (__webpack_require__(/*! events */ "./node_modules/events/events.js").EventEmitter));
Parser.prototype._updatePosition = function(initialOffset) {
if (this.endIndex === null) {
if (this._tokenizer._sectionStart <= initialOffset) {
this.startIndex = 0;
} else {
this.startIndex = this._tokenizer._sectionStart - initialOffset;
}
} else this.startIndex = this.endIndex + 1;
this.endIndex = this._tokenizer.getAbsoluteIndex();
};
//Tokenizer event handlers
Parser.prototype.ontext = function(data) {
this._updatePosition(1);
this.endIndex--;
if (this._cbs.ontext) this._cbs.ontext(data);
};
Parser.prototype.onopentagname = function(name) {
if (this._lowerCaseTagNames) {
name = name.toLowerCase();
}
this._tagname = name;
if (!this._options.xmlMode && name in openImpliesClose) {
for (
var el;
(el = this._stack[this._stack.length - 1]) in
openImpliesClose[name];
this.onclosetag(el)
);
}
if (this._options.xmlMode || !(name in voidElements)) {
this._stack.push(name);
if (name in foreignContextElements) this._foreignContext.push(true);
else if (name in htmlIntegrationElements)
this._foreignContext.push(false);
}
if (this._cbs.onopentagname) this._cbs.onopentagname(name);
if (this._cbs.onopentag) this._attribs = {};
};
Parser.prototype.onopentagend = function() {
this._updatePosition(1);
if (this._attribs) {
if (this._cbs.onopentag)
this._cbs.onopentag(this._tagname, this._attribs);
this._attribs = null;
}
if (
!this._options.xmlMode &&
this._cbs.onclosetag &&
this._tagname in voidElements
) {
this._cbs.onclosetag(this._tagname);
}
this._tagname = "";
};
Parser.prototype.onclosetag = function(name) {
this._updatePosition(1);
if (this._lowerCaseTagNames) {
name = name.toLowerCase();
}
if (name in foreignContextElements || name in htmlIntegrationElements) {
this._foreignContext.pop();
}
if (
this._stack.length &&
(!(name in voidElements) || this._options.xmlMode)
) {
var pos = this._stack.lastIndexOf(name);
if (pos !== -1) {
if (this._cbs.onclosetag) {
pos = this._stack.length - pos;
while (pos--) this._cbs.onclosetag(this._stack.pop());
} else this._stack.length = pos;
} else if (name === "p" && !this._options.xmlMode) {
this.onopentagname(name);
this._closeCurrentTag();
}
} else if (!this._options.xmlMode && (name === "br" || name === "p")) {
this.onopentagname(name);
this._closeCurrentTag();
}
};
Parser.prototype.onselfclosingtag = function() {
if (
this._options.xmlMode ||
this._options.recognizeSelfClosing ||
this._foreignContext[this._foreignContext.length - 1]
) {
this._closeCurrentTag();
} else {
this.onopentagend();
}
};
Parser.prototype._closeCurrentTag = function() {
var name = this._tagname;
this.onopentagend();
//self-closing tags will be on the top of the stack
//(cheaper check than in onclosetag)
if (this._stack[this._stack.length - 1] === name) {
if (this._cbs.onclosetag) {
this._cbs.onclosetag(name);
}
this._stack.pop();
}
};
Parser.prototype.onattribname = function(name) {
if (this._lowerCaseAttributeNames) {
name = name.toLowerCase();
}
this._attribname = name;
};
Parser.prototype.onattribdata = function(value) {
this._attribvalue += value;
};
Parser.prototype.onattribend = function() {
if (this._cbs.onattribute)
this._cbs.onattribute(this._attribname, this._attribvalue);
if (
this._attribs &&
!Object.prototype.hasOwnProperty.call(this._attribs, this._attribname)
) {
this._attribs[this._attribname] = this._attribvalue;
}
this._attribname = "";
this._attribvalue = "";
};
Parser.prototype._getInstructionName = function(value) {
var idx = value.search(re_nameEnd),
name = idx < 0 ? value : value.substr(0, idx);
if (this._lowerCaseTagNames) {
name = name.toLowerCase();
}
return name;
};
Parser.prototype.ondeclaration = function(value) {
if (this._cbs.onprocessinginstruction) {
var name = this._getInstructionName(value);
this._cbs.onprocessinginstruction("!" + name, "!" + value);
}
};
Parser.prototype.onprocessinginstruction = function(value) {
if (this._cbs.onprocessinginstruction) {
var name = this._getInstructionName(value);
this._cbs.onprocessinginstruction("?" + name, "?" + value);
}
};
Parser.prototype.oncomment = function(value) {
this._updatePosition(4);
if (this._cbs.oncomment) this._cbs.oncomment(value);
if (this._cbs.oncommentend) this._cbs.oncommentend();
};
Parser.prototype.oncdata = function(value) {
this._updatePosition(1);
if (this._options.xmlMode || this._options.recognizeCDATA) {
if (this._cbs.oncdatastart) this._cbs.oncdatastart();
if (this._cbs.ontext) this._cbs.ontext(value);
if (this._cbs.oncdataend) this._cbs.oncdataend();
} else {
this.oncomment("[CDATA[" + value + "]]");
}
};
Parser.prototype.onerror = function(err) {
if (this._cbs.onerror) this._cbs.onerror(err);
};
Parser.prototype.onend = function() {
if (this._cbs.onclosetag) {
for (
var i = this._stack.length;
i > 0;
this._cbs.onclosetag(this._stack[--i])
);
}
if (this._cbs.onend) this._cbs.onend();
};
//Resets the parser to a blank state, ready to parse a new HTML document
Parser.prototype.reset = function() {
if (this._cbs.onreset) this._cbs.onreset();
this._tokenizer.reset();
this._tagname = "";
this._attribname = "";
this._attribs = null;
this._stack = [];
if (this._cbs.onparserinit) this._cbs.onparserinit(this);
};
//Parses a complete HTML document and pushes it to the handler
Parser.prototype.parseComplete = function(data) {
this.reset();
this.end(data);
};
Parser.prototype.write = function(chunk) {
this._tokenizer.write(chunk);
};
Parser.prototype.end = function(chunk) {
this._tokenizer.end(chunk);
};
Parser.prototype.pause = function() {
this._tokenizer.pause();
};
Parser.prototype.resume = function() {
this._tokenizer.resume();
};
//alias for backwards compat
Parser.prototype.parseChunk = Parser.prototype.write;
Parser.prototype.done = Parser.prototype.end;
module.exports = Parser;
/***/ }),
/***/ "./node_modules/htmlparser2/lib/ProxyHandler.js":
/*!******************************************************!*\
!*** ./node_modules/htmlparser2/lib/ProxyHandler.js ***!
\******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
module.exports = ProxyHandler;
function ProxyHandler(cbs) {
this._cbs = cbs || {};
}
var EVENTS = (__webpack_require__(/*! ./ */ "./node_modules/htmlparser2/lib/index.js").EVENTS);
Object.keys(EVENTS).forEach(function(name) {
if (EVENTS[name] === 0) {
name = "on" + name;
ProxyHandler.prototype[name] = function() {
if (this._cbs[name]) this._cbs[name]();
};
} else if (EVENTS[name] === 1) {
name = "on" + name;
ProxyHandler.prototype[name] = function(a) {
if (this._cbs[name]) this._cbs[name](a);
};
} else if (EVENTS[name] === 2) {
name = "on" + name;
ProxyHandler.prototype[name] = function(a, b) {
if (this._cbs[name]) this._cbs[name](a, b);
};
} else {
throw Error("wrong number of arguments");
}
});
/***/ }),
/***/ "./node_modules/htmlparser2/lib/Stream.js":
/*!************************************************!*\
!*** ./node_modules/htmlparser2/lib/Stream.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
module.exports = Stream;
var Parser = __webpack_require__(/*! ./WritableStream.js */ "./node_modules/htmlparser2/lib/WritableStream.js");
function Stream(options) {
Parser.call(this, new Cbs(this), options);
}
__webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js")(Stream, Parser);
Stream.prototype.readable = true;
function Cbs(scope) {
this.scope = scope;
}
var EVENTS = (__webpack_require__(/*! ../ */ "./node_modules/htmlparser2/lib/index.js").EVENTS);
Object.keys(EVENTS).forEach(function(name) {
if (EVENTS[name] === 0) {
Cbs.prototype["on" + name] = function() {
this.scope.emit(name);
};
} else if (EVENTS[name] === 1) {
Cbs.prototype["on" + name] = function(a) {
this.scope.emit(name, a);
};
} else if (EVENTS[name] === 2) {
Cbs.prototype["on" + name] = function(a, b) {
this.scope.emit(name, a, b);
};
} else {
throw Error("wrong number of arguments!");
}
});
/***/ }),
/***/ "./node_modules/htmlparser2/lib/Tokenizer.js":
/*!***************************************************!*\
!*** ./node_modules/htmlparser2/lib/Tokenizer.js ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
module.exports = Tokenizer;
var decodeCodePoint = __webpack_require__(/*! entities/lib/decode_codepoint.js */ "./node_modules/entities/lib/decode_codepoint.js");
var entityMap = __webpack_require__(/*! entities/maps/entities.json */ "./node_modules/entities/maps/entities.json");
var legacyMap = __webpack_require__(/*! entities/maps/legacy.json */ "./node_modules/entities/maps/legacy.json");
var xmlMap = __webpack_require__(/*! entities/maps/xml.json */ "./node_modules/entities/maps/xml.json");
var i = 0;
var TEXT = i++;
var BEFORE_TAG_NAME = i++; //after <
var IN_TAG_NAME = i++;
var IN_SELF_CLOSING_TAG = i++;
var BEFORE_CLOSING_TAG_NAME = i++;
var IN_CLOSING_TAG_NAME = i++;
var AFTER_CLOSING_TAG_NAME = i++;
//attributes
var BEFORE_ATTRIBUTE_NAME = i++;
var IN_ATTRIBUTE_NAME = i++;
var AFTER_ATTRIBUTE_NAME = i++;
var BEFORE_ATTRIBUTE_VALUE = i++;
var IN_ATTRIBUTE_VALUE_DQ = i++; // "
var IN_ATTRIBUTE_VALUE_SQ = i++; // '
var IN_ATTRIBUTE_VALUE_NQ = i++;
//declarations
var BEFORE_DECLARATION = i++; // !
var IN_DECLARATION = i++;
//processing instructions
var IN_PROCESSING_INSTRUCTION = i++; // ?
//comments
var BEFORE_COMMENT = i++;
var IN_COMMENT = i++;
var AFTER_COMMENT_1 = i++;
var AFTER_COMMENT_2 = i++;
//cdata
var BEFORE_CDATA_1 = i++; // [
var BEFORE_CDATA_2 = i++; // C
var BEFORE_CDATA_3 = i++; // D
var BEFORE_CDATA_4 = i++; // A
var BEFORE_CDATA_5 = i++; // T
var BEFORE_CDATA_6 = i++; // A
var IN_CDATA = i++; // [
var AFTER_CDATA_1 = i++; // ]
var AFTER_CDATA_2 = i++; // ]
//special tags
var BEFORE_SPECIAL = i++; //S
var BEFORE_SPECIAL_END = i++; //S
var BEFORE_SCRIPT_1 = i++; //C
var BEFORE_SCRIPT_2 = i++; //R
var BEFORE_SCRIPT_3 = i++; //I
var BEFORE_SCRIPT_4 = i++; //P
var BEFORE_SCRIPT_5 = i++; //T
var AFTER_SCRIPT_1 = i++; //C
var AFTER_SCRIPT_2 = i++; //R
var AFTER_SCRIPT_3 = i++; //I
var AFTER_SCRIPT_4 = i++; //P
var AFTER_SCRIPT_5 = i++; //T
var BEFORE_STYLE_1 = i++; //T
var BEFORE_STYLE_2 = i++; //Y
var BEFORE_STYLE_3 = i++; //L
var BEFORE_STYLE_4 = i++; //E
var AFTER_STYLE_1 = i++; //T
var AFTER_STYLE_2 = i++; //Y
var AFTER_STYLE_3 = i++; //L
var AFTER_STYLE_4 = i++; //E
var BEFORE_ENTITY = i++; //&
var BEFORE_NUMERIC_ENTITY = i++; //#
var IN_NAMED_ENTITY = i++;
var IN_NUMERIC_ENTITY = i++;
var IN_HEX_ENTITY = i++; //X
var j = 0;
var SPECIAL_NONE = j++;
var SPECIAL_SCRIPT = j++;
var SPECIAL_STYLE = j++;
function whitespace(c) {
return c === " " || c === "\n" || c === "\t" || c === "\f" || c === "\r";
}
function ifElseState(upper, SUCCESS, FAILURE) {
var lower = upper.toLowerCase();
if (upper === lower) {
return function(c) {
if (c === lower) {
this._state = SUCCESS;
} else {
this._state = FAILURE;
this._index--;
}
};
} else {
return function(c) {
if (c === lower || c === upper) {
this._state = SUCCESS;
} else {
this._state = FAILURE;
this._index--;
}
};
}
}
function consumeSpecialNameChar(upper, NEXT_STATE) {
var lower = upper.toLowerCase();
return function(c) {
if (c === lower || c === upper) {
this._state = NEXT_STATE;
} else {
this._state = IN_TAG_NAME;
this._index--; //consume the token again
}
};
}
function Tokenizer(options, cbs) {
this._state = TEXT;
this._buffer = "";
this._sectionStart = 0;
this._index = 0;
this._bufferOffset = 0; //chars removed from _buffer
this._baseState = TEXT;
this._special = SPECIAL_NONE;
this._cbs = cbs;
this._running = true;
this._ended = false;
this._xmlMode = !!(options && options.xmlMode);
this._decodeEntities = !!(options && options.decodeEntities);
}
Tokenizer.prototype._stateText = function(c) {
if (c === "<") {
if (this._index > this._sectionStart) {
this._cbs.ontext(this._getSection());
}
this._state = BEFORE_TAG_NAME;
this._sectionStart = this._index;
} else if (
this._decodeEntities &&
this._special === SPECIAL_NONE &&
c === "&"
) {
if (this._index > this._sectionStart) {
this._cbs.ontext(this._getSection());
}
this._baseState = TEXT;
this._state = BEFORE_ENTITY;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateBeforeTagName = function(c) {
if (c === "/") {
this._state = BEFORE_CLOSING_TAG_NAME;
} else if (c === "<") {
this._cbs.ontext(this._getSection());
this._sectionStart = this._index;
} else if (c === ">" || this._special !== SPECIAL_NONE || whitespace(c)) {
this._state = TEXT;
} else if (c === "!") {
this._state = BEFORE_DECLARATION;
this._sectionStart = this._index + 1;
} else if (c === "?") {
this._state = IN_PROCESSING_INSTRUCTION;
this._sectionStart = this._index + 1;
} else {
this._state =
!this._xmlMode && (c === "s" || c === "S")
? BEFORE_SPECIAL
: IN_TAG_NAME;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateInTagName = function(c) {
if (c === "/" || c === ">" || whitespace(c)) {
this._emitToken("onopentagname");
this._state = BEFORE_ATTRIBUTE_NAME;
this._index--;
}
};
Tokenizer.prototype._stateBeforeCloseingTagName = function(c) {
if (whitespace(c));
else if (c === ">") {
this._state = TEXT;
} else if (this._special !== SPECIAL_NONE) {
if (c === "s" || c === "S") {
this._state = BEFORE_SPECIAL_END;
} else {
this._state = TEXT;
this._index--;
}
} else {
this._state = IN_CLOSING_TAG_NAME;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateInCloseingTagName = function(c) {
if (c === ">" || whitespace(c)) {
this._emitToken("onclosetag");
this._state = AFTER_CLOSING_TAG_NAME;
this._index--;
}
};
Tokenizer.prototype._stateAfterCloseingTagName = function(c) {
//skip everything until ">"
if (c === ">") {
this._state = TEXT;
this._sectionStart = this._index + 1;
}
};
Tokenizer.prototype._stateBeforeAttributeName = function(c) {
if (c === ">") {
this._cbs.onopentagend();
this._state = TEXT;
this._sectionStart = this._index + 1;
} else if (c === "/") {
this._state = IN_SELF_CLOSING_TAG;
} else if (!whitespace(c)) {
this._state = IN_ATTRIBUTE_NAME;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateInSelfClosingTag = function(c) {
if (c === ">") {
this._cbs.onselfclosingtag();
this._state = TEXT;
this._sectionStart = this._index + 1;
} else if (!whitespace(c)) {
this._state = BEFORE_ATTRIBUTE_NAME;
this._index--;
}
};
Tokenizer.prototype._stateInAttributeName = function(c) {
if (c === "=" || c === "/" || c === ">" || whitespace(c)) {
this._cbs.onattribname(this._getSection());
this._sectionStart = -1;
this._state = AFTER_ATTRIBUTE_NAME;
this._index--;
}
};
Tokenizer.prototype._stateAfterAttributeName = function(c) {
if (c === "=") {
this._state = BEFORE_ATTRIBUTE_VALUE;
} else if (c === "/" || c === ">") {
this._cbs.onattribend();
this._state = BEFORE_ATTRIBUTE_NAME;
this._index--;
} else if (!whitespace(c)) {
this._cbs.onattribend();
this._state = IN_ATTRIBUTE_NAME;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateBeforeAttributeValue = function(c) {
if (c === '"') {
this._state = IN_ATTRIBUTE_VALUE_DQ;
this._sectionStart = this._index + 1;
} else if (c === "'") {
this._state = IN_ATTRIBUTE_VALUE_SQ;
this._sectionStart = this._index + 1;
} else if (!whitespace(c)) {
this._state = IN_ATTRIBUTE_VALUE_NQ;
this._sectionStart = this._index;
this._index--; //reconsume token
}
};
Tokenizer.prototype._stateInAttributeValueDoubleQuotes = function(c) {
if (c === '"') {
this._emitToken("onattribdata");
this._cbs.onattribend();
this._state = BEFORE_ATTRIBUTE_NAME;
} else if (this._decodeEntities && c === "&") {
this._emitToken("onattribdata");
this._baseState = this._state;
this._state = BEFORE_ENTITY;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateInAttributeValueSingleQuotes = function(c) {
if (c === "'") {
this._emitToken("onattribdata");
this._cbs.onattribend();
this._state = BEFORE_ATTRIBUTE_NAME;
} else if (this._decodeEntities && c === "&") {
this._emitToken("onattribdata");
this._baseState = this._state;
this._state = BEFORE_ENTITY;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateInAttributeValueNoQuotes = function(c) {
if (whitespace(c) || c === ">") {
this._emitToken("onattribdata");
this._cbs.onattribend();
this._state = BEFORE_ATTRIBUTE_NAME;
this._index--;
} else if (this._decodeEntities && c === "&") {
this._emitToken("onattribdata");
this._baseState = this._state;
this._state = BEFORE_ENTITY;
this._sectionStart = this._index;
}
};
Tokenizer.prototype._stateBeforeDeclaration = function(c) {
this._state =
c === "["
? BEFORE_CDATA_1
: c === "-"
? BEFORE_COMMENT
: IN_DECLARATION;
};
Tokenizer.prototype._stateInDeclaration = function(c) {
if (c === ">") {
this._cbs.ondeclaration(this._getSection());
this._state = TEXT;
this._sectionStart = this._index + 1;
}
};
Tokenizer.prototype._stateInProcessingInstruction = function(c) {
if (c === ">") {
this._cbs.onprocessinginstruction(this._getSection());
this._state = TEXT;
this._sectionStart = this._index + 1;
}
};
Tokenizer.prototype._stateBeforeComment = function(c) {
if (c === "-") {
this._state = IN_COMMENT;
this._sectionStart = this._index + 1;
} else {
this._state = IN_DECLARATION;
}
};
Tokenizer.prototype._stateInComment = function(c) {
if (c === "-") this._state = AFTER_COMMENT_1;
};
Tokenizer.prototype._stateAfterComment1 = function(c) {
if (c === "-") {
this._state = AFTER_COMMENT_2;
} else {
this._state = IN_COMMENT;
}
};
Tokenizer.prototype._stateAfterComment2 = function(c) {
if (c === ">") {
//remove 2 trailing chars
this._cbs.oncomment(
this._buffer.substring(this._sectionStart, this._index - 2)
);
this._state = TEXT;
this._sectionStart = this._index + 1;
} else if (c !== "-") {
this._state = IN_COMMENT;
}
// else: stay in AFTER_COMMENT_2 (`--->`)
};
Tokenizer.prototype._stateBeforeCdata1 = ifElseState(
"C",
BEFORE_CDATA_2,
IN_DECLARATION
);
Tokenizer.prototype._stateBeforeCdata2 = ifElseState(
"D",
BEFORE_CDATA_3,
IN_DECLARATION
);
Tokenizer.prototype._stateBeforeCdata3 = ifElseState(
"A",
BEFORE_CDATA_4,
IN_DECLARATION
);
Tokenizer.prototype._stateBeforeCdata4 = ifElseState(
"T",
BEFORE_CDATA_5,
IN_DECLARATION
);
Tokenizer.prototype._stateBeforeCdata5 = ifElseState(
"A",
BEFORE_CDATA_6,
IN_DECLARATION
);
Tokenizer.prototype._stateBeforeCdata6 = function(c) {
if (c === "[") {
this._state = IN_CDATA;
this._sectionStart = this._index + 1;
} else {
this._state = IN_DECLARATION;
this._index--;
}
};
Tokenizer.prototype._stateInCdata = function(c) {
if (c === "]") this._state = AFTER_CDATA_1;
};
Tokenizer.prototype._stateAfterCdata1 = function(c) {
if (c === "]") this._state = AFTER_CDATA_2;
else this._state = IN_CDATA;
};
Tokenizer.prototype._stateAfterCdata2 = function(c) {
if (c === ">") {
//remove 2 trailing chars
this._cbs.oncdata(
this._buffer.substring(this._sectionStart, this._index - 2)
);
this._state = TEXT;
this._sectionStart = this._index + 1;
} else if (c !== "]") {
this._state = IN_CDATA;
}
//else: stay in AFTER_CDATA_2 (`]]]>`)
};
Tokenizer.prototype._stateBeforeSpecial = function(c) {
if (c === "c" || c === "C") {
this._state = BEFORE_SCRIPT_1;
} else if (c === "t" || c === "T") {
this._state = BEFORE_STYLE_1;
} else {
this._state = IN_TAG_NAME;
this._index--; //consume the token again
}
};
Tokenizer.prototype._stateBeforeSpecialEnd = function(c) {
if (this._special === SPECIAL_SCRIPT && (c === "c" || c === "C")) {
this._state = AFTER_SCRIPT_1;
} else if (this._special === SPECIAL_STYLE && (c === "t" || c === "T")) {
this._state = AFTER_STYLE_1;
} else this._state = TEXT;
};
Tokenizer.prototype._stateBeforeScript1 = consumeSpecialNameChar(
"R",
BEFORE_SCRIPT_2
);
Tokenizer.prototype._stateBeforeScript2 = consumeSpecialNameChar(
"I",
BEFORE_SCRIPT_3
);
Tokenizer.prototype._stateBeforeScript3 = consumeSpecialNameChar(
"P",
BEFORE_SCRIPT_4
);
Tokenizer.prototype._stateBeforeScript4 = consumeSpecialNameChar(
"T",
BEFORE_SCRIPT_5
);
Tokenizer.prototype._stateBeforeScript5 = function(c) {
if (c === "/" || c === ">" || whitespace(c)) {
this._special = SPECIAL_SCRIPT;
}
this._state = IN_TAG_NAME;
this._index--; //consume the token again
};
Tokenizer.prototype._stateAfterScript1 = ifElseState("R", AFTER_SCRIPT_2, TEXT);
Tokenizer.prototype._stateAfterScript2 = ifElseState("I", AFTER_SCRIPT_3, TEXT);
Tokenizer.prototype._stateAfterScript3 = ifElseState("P", AFTER_SCRIPT_4, TEXT);
Tokenizer.prototype._stateAfterScript4 = ifElseState("T", AFTER_SCRIPT_5, TEXT);
Tokenizer.prototype._stateAfterScript5 = function(c) {
if (c === ">" || whitespace(c)) {
this._special = SPECIAL_NONE;
this._state = IN_CLOSING_TAG_NAME;
this._sectionStart = this._index - 6;
this._index--; //reconsume the token
} else this._state = TEXT;
};
Tokenizer.prototype._stateBeforeStyle1 = consumeSpecialNameChar(
"Y",
BEFORE_STYLE_2
);
Tokenizer.prototype._stateBeforeStyle2 = consumeSpecialNameChar(
"L",
BEFORE_STYLE_3
);
Tokenizer.prototype._stateBeforeStyle3 = consumeSpecialNameChar(
"E",
BEFORE_STYLE_4
);
Tokenizer.prototype._stateBeforeStyle4 = function(c) {
if (c === "/" || c === ">" || whitespace(c)) {
this._special = SPECIAL_STYLE;
}
this._state = IN_TAG_NAME;
this._index--; //consume the token again
};
Tokenizer.prototype._stateAfterStyle1 = ifElseState("Y", AFTER_STYLE_2, TEXT);
Tokenizer.prototype._stateAfterStyle2 = ifElseState("L", AFTER_STYLE_3, TEXT);
Tokenizer.prototype._stateAfterStyle3 = ifElseState("E", AFTER_STYLE_4, TEXT);
Tokenizer.prototype._stateAfterStyle4 = function(c) {
if (c === ">" || whitespace(c)) {
this._special = SPECIAL_NONE;
this._state = IN_CLOSING_TAG_NAME;
this._sectionStart = this._index - 5;
this._index--; //reconsume the token
} else this._state = TEXT;
};
Tokenizer.prototype._stateBeforeEntity = ifElseState(
"#",
BEFORE_NUMERIC_ENTITY,
IN_NAMED_ENTITY
);
Tokenizer.prototype._stateBeforeNumericEntity = ifElseState(
"X",
IN_HEX_ENTITY,
IN_NUMERIC_ENTITY
);
//for entities terminated with a semicolon
Tokenizer.prototype._parseNamedEntityStrict = function() {
//offset = 1
if (this._sectionStart + 1 < this._index) {
var entity = this._buffer.substring(
this._sectionStart + 1,
this._index
),
map = this._xmlMode ? xmlMap : entityMap;
if (map.hasOwnProperty(entity)) {
this._emitPartial(map[entity]);
this._sectionStart = this._index + 1;
}
}
};
//parses legacy entities (without trailing semicolon)
Tokenizer.prototype._parseLegacyEntity = function() {
var start = this._sectionStart + 1,
limit = this._index - start;
if (limit > 6) limit = 6; //the max length of legacy entities is 6
while (limit >= 2) {
//the min length of legacy entities is 2
var entity = this._buffer.substr(start, limit);
if (legacyMap.hasOwnProperty(entity)) {
this._emitPartial(legacyMap[entity]);
this._sectionStart += limit + 1;
return;
} else {
limit--;
}
}
};
Tokenizer.prototype._stateInNamedEntity = function(c) {
if (c === ";") {
this._parseNamedEntityStrict();
if (this._sectionStart + 1 < this._index && !this._xmlMode) {
this._parseLegacyEntity();
}
this._state = this._baseState;
} else if (
(c < "a" || c > "z") &&
(c < "A" || c > "Z") &&
(c < "0" || c > "9")
) {
if (this._xmlMode);
else if (this._sectionStart + 1 === this._index);
else if (this._baseState !== TEXT) {
if (c !== "=") {
this._parseNamedEntityStrict();
}
} else {
this._parseLegacyEntity();
}
this._state = this._baseState;
this._index--;
}
};
Tokenizer.prototype._decodeNumericEntity = function(offset, base) {
var sectionStart = this._sectionStart + offset;
if (sectionStart !== this._index) {
//parse entity
var entity = this._buffer.substring(sectionStart, this._index);
var parsed = parseInt(entity, base);
this._emitPartial(decodeCodePoint(parsed));
this._sectionStart = this._index;
} else {
this._sectionStart--;
}
this._state = this._baseState;
};
Tokenizer.prototype._stateInNumericEntity = function(c) {
if (c === ";") {
this._decodeNumericEntity(2, 10);
this._sectionStart++;
} else if (c < "0" || c > "9") {
if (!this._xmlMode) {
this._decodeNumericEntity(2, 10);
} else {
this._state = this._baseState;
}
this._index--;
}
};
Tokenizer.prototype._stateInHexEntity = function(c) {
if (c === ";") {
this._decodeNumericEntity(3, 16);
this._sectionStart++;
} else if (
(c < "a" || c > "f") &&
(c < "A" || c > "F") &&
(c < "0" || c > "9")
) {
if (!this._xmlMode) {
this._decodeNumericEntity(3, 16);
} else {
this._state = this._baseState;
}
this._index--;
}
};
Tokenizer.prototype._cleanup = function() {
if (this._sectionStart < 0) {
this._buffer = "";
this._bufferOffset += this._index;
this._index = 0;
} else if (this._running) {
if (this._state === TEXT) {
if (this._sectionStart !== this._index) {
this._cbs.ontext(this._buffer.substr(this._sectionStart));
}
this._buffer = "";
this._bufferOffset += this._index;
this._index = 0;
} else if (this._sectionStart === this._index) {
//the section just started
this._buffer = "";
this._bufferOffset += this._index;
this._index = 0;
} else {
//remove everything unnecessary
this._buffer = this._buffer.substr(this._sectionStart);
this._index -= this._sectionStart;
this._bufferOffset += this._sectionStart;
}
this._sectionStart = 0;
}
};
//TODO make events conditional
Tokenizer.prototype.write = function(chunk) {
if (this._ended) this._cbs.onerror(Error(".write() after done!"));
this._buffer += chunk;
this._parse();
};
Tokenizer.prototype._parse = function() {
while (this._index < this._buffer.length && this._running) {
var c = this._buffer.charAt(this._index);
if (this._state === TEXT) {
this._stateText(c);
} else if (this._state === BEFORE_TAG_NAME) {
this._stateBeforeTagName(c);
} else if (this._state === IN_TAG_NAME) {
this._stateInTagName(c);
} else if (this._state === BEFORE_CLOSING_TAG_NAME) {
this._stateBeforeCloseingTagName(c);
} else if (this._state === IN_CLOSING_TAG_NAME) {
this._stateInCloseingTagName(c);
} else if (this._state === AFTER_CLOSING_TAG_NAME) {
this._stateAfterCloseingTagName(c);
} else if (this._state === IN_SELF_CLOSING_TAG) {
this._stateInSelfClosingTag(c);
} else if (this._state === BEFORE_ATTRIBUTE_NAME) {
/*
* attributes
*/
this._stateBeforeAttributeName(c);
} else if (this._state === IN_ATTRIBUTE_NAME) {
this._stateInAttributeName(c);
} else if (this._state === AFTER_ATTRIBUTE_NAME) {
this._stateAfterAttributeName(c);
} else if (this._state === BEFORE_ATTRIBUTE_VALUE) {
this._stateBeforeAttributeValue(c);
} else if (this._state === IN_ATTRIBUTE_VALUE_DQ) {
this._stateInAttributeValueDoubleQuotes(c);
} else if (this._state === IN_ATTRIBUTE_VALUE_SQ) {
this._stateInAttributeValueSingleQuotes(c);
} else if (this._state === IN_ATTRIBUTE_VALUE_NQ) {
this._stateInAttributeValueNoQuotes(c);
} else if (this._state === BEFORE_DECLARATION) {
/*
* declarations
*/
this._stateBeforeDeclaration(c);
} else if (this._state === IN_DECLARATION) {
this._stateInDeclaration(c);
} else if (this._state === IN_PROCESSING_INSTRUCTION) {
/*
* processing instructions
*/
this._stateInProcessingInstruction(c);
} else if (this._state === BEFORE_COMMENT) {
/*
* comments
*/
this._stateBeforeComment(c);
} else if (this._state === IN_COMMENT) {
this._stateInComment(c);
} else if (this._state === AFTER_COMMENT_1) {
this._stateAfterComment1(c);
} else if (this._state === AFTER_COMMENT_2) {
this._stateAfterComment2(c);
} else if (this._state === BEFORE_CDATA_1) {
/*
* cdata
*/
this._stateBeforeCdata1(c);
} else if (this._state === BEFORE_CDATA_2) {
this._stateBeforeCdata2(c);
} else if (this._state === BEFORE_CDATA_3) {
this._stateBeforeCdata3(c);
} else if (this._state === BEFORE_CDATA_4) {
this._stateBeforeCdata4(c);
} else if (this._state === BEFORE_CDATA_5) {
this._stateBeforeCdata5(c);
} else if (this._state === BEFORE_CDATA_6) {
this._stateBeforeCdata6(c);
} else if (this._state === IN_CDATA) {
this._stateInCdata(c);
} else if (this._state === AFTER_CDATA_1) {
this._stateAfterCdata1(c);
} else if (this._state === AFTER_CDATA_2) {
this._stateAfterCdata2(c);
} else if (this._state === BEFORE_SPECIAL) {
/*
* special tags
*/
this._stateBeforeSpecial(c);
} else if (this._state === BEFORE_SPECIAL_END) {
this._stateBeforeSpecialEnd(c);
} else if (this._state === BEFORE_SCRIPT_1) {
/*
* script
*/
this._stateBeforeScript1(c);
} else if (this._state === BEFORE_SCRIPT_2) {
this._stateBeforeScript2(c);
} else if (this._state === BEFORE_SCRIPT_3) {
this._stateBeforeScript3(c);
} else if (this._state === BEFORE_SCRIPT_4) {
this._stateBeforeScript4(c);
} else if (this._state === BEFORE_SCRIPT_5) {
this._stateBeforeScript5(c);
} else if (this._state === AFTER_SCRIPT_1) {
this._stateAfterScript1(c);
} else if (this._state === AFTER_SCRIPT_2) {
this._stateAfterScript2(c);
} else if (this._state === AFTER_SCRIPT_3) {
this._stateAfterScript3(c);
} else if (this._state === AFTER_SCRIPT_4) {
this._stateAfterScript4(c);
} else if (this._state === AFTER_SCRIPT_5) {
this._stateAfterScript5(c);
} else if (this._state === BEFORE_STYLE_1) {
/*
* style
*/
this._stateBeforeStyle1(c);
} else if (this._state === BEFORE_STYLE_2) {
this._stateBeforeStyle2(c);
} else if (this._state === BEFORE_STYLE_3) {
this._stateBeforeStyle3(c);
} else if (this._state === BEFORE_STYLE_4) {
this._stateBeforeStyle4(c);
} else if (this._state === AFTER_STYLE_1) {
this._stateAfterStyle1(c);
} else if (this._state === AFTER_STYLE_2) {
this._stateAfterStyle2(c);
} else if (this._state === AFTER_STYLE_3) {
this._stateAfterStyle3(c);
} else if (this._state === AFTER_STYLE_4) {
this._stateAfterStyle4(c);
} else if (this._state === BEFORE_ENTITY) {
/*
* entities
*/
this._stateBeforeEntity(c);
} else if (this._state === BEFORE_NUMERIC_ENTITY) {
this._stateBeforeNumericEntity(c);
} else if (this._state === IN_NAMED_ENTITY) {
this._stateInNamedEntity(c);
} else if (this._state === IN_NUMERIC_ENTITY) {
this._stateInNumericEntity(c);
} else if (this._state === IN_HEX_ENTITY) {
this._stateInHexEntity(c);
} else {
this._cbs.onerror(Error("unknown _state"), this._state);
}
this._index++;
}
this._cleanup();
};
Tokenizer.prototype.pause = function() {
this._running = false;
};
Tokenizer.prototype.resume = function() {
this._running = true;
if (this._index < this._buffer.length) {
this._parse();
}
if (this._ended) {
this._finish();
}
};
Tokenizer.prototype.end = function(chunk) {
if (this._ended) this._cbs.onerror(Error(".end() after done!"));
if (chunk) this.write(chunk);
this._ended = true;
if (this._running) this._finish();
};
Tokenizer.prototype._finish = function() {
//if there is remaining data, emit it in a reasonable way
if (this._sectionStart < this._index) {
this._handleTrailingData();
}
this._cbs.onend();
};
Tokenizer.prototype._handleTrailingData = function() {
var data = this._buffer.substr(this._sectionStart);
if (
this._state === IN_CDATA ||
this._state === AFTER_CDATA_1 ||
this._state === AFTER_CDATA_2
) {
this._cbs.oncdata(data);
} else if (
this._state === IN_COMMENT ||
this._state === AFTER_COMMENT_1 ||
this._state === AFTER_COMMENT_2
) {
this._cbs.oncomment(data);
} else if (this._state === IN_NAMED_ENTITY && !this._xmlMode) {
this._parseLegacyEntity();
if (this._sectionStart < this._index) {
this._state = this._baseState;
this._handleTrailingData();
}
} else if (this._state === IN_NUMERIC_ENTITY && !this._xmlMode) {
this._decodeNumericEntity(2, 10);
if (this._sectionStart < this._index) {
this._state = this._baseState;
this._handleTrailingData();
}
} else if (this._state === IN_HEX_ENTITY && !this._xmlMode) {
this._decodeNumericEntity(3, 16);
if (this._sectionStart < this._index) {
this._state = this._baseState;
this._handleTrailingData();
}
} else if (
this._state !== IN_TAG_NAME &&
this._state !== BEFORE_ATTRIBUTE_NAME &&
this._state !== BEFORE_ATTRIBUTE_VALUE &&
this._state !== AFTER_ATTRIBUTE_NAME &&
this._state !== IN_ATTRIBUTE_NAME &&
this._state !== IN_ATTRIBUTE_VALUE_SQ &&
this._state !== IN_ATTRIBUTE_VALUE_DQ &&
this._state !== IN_ATTRIBUTE_VALUE_NQ &&
this._state !== IN_CLOSING_TAG_NAME
) {
this._cbs.ontext(data);
}
//else, ignore remaining data
//TODO add a way to remove current tag
};
Tokenizer.prototype.reset = function() {
Tokenizer.call(
this,
{ xmlMode: this._xmlMode, decodeEntities: this._decodeEntities },
this._cbs
);
};
Tokenizer.prototype.getAbsoluteIndex = function() {
return this._bufferOffset + this._index;
};
Tokenizer.prototype._getSection = function() {
return this._buffer.substring(this._sectionStart, this._index);
};
Tokenizer.prototype._emitToken = function(name) {
this._cbs[name](this._getSection());
this._sectionStart = -1;
};
Tokenizer.prototype._emitPartial = function(value) {
if (this._baseState !== TEXT) {
this._cbs.onattribdata(value); //TODO implement the new event
} else {
this._cbs.ontext(value);
}
};
/***/ }),
/***/ "./node_modules/htmlparser2/lib/WritableStream.js":
/*!********************************************************!*\
!*** ./node_modules/htmlparser2/lib/WritableStream.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
module.exports = Stream;
var Parser = __webpack_require__(/*! ./Parser.js */ "./node_modules/htmlparser2/lib/Parser.js");
var WritableStream = (__webpack_require__(/*! readable-stream */ "?13bc").Writable);
var StringDecoder = (__webpack_require__(/*! string_decoder */ "./node_modules/string_decoder/lib/string_decoder.js").StringDecoder);
var Buffer = (__webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer);
function Stream(cbs, options) {
var parser = (this._parser = new Parser(cbs, options));
var decoder = (this._decoder = new StringDecoder());
WritableStream.call(this, { decodeStrings: false });
this.once("finish", function() {
parser.end(decoder.end());
});
}
__webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js")(Stream, WritableStream);
Stream.prototype._write = function(chunk, encoding, cb) {
if (chunk instanceof Buffer) chunk = this._decoder.write(chunk);
this._parser.write(chunk);
cb();
};
/***/ }),
/***/ "./node_modules/htmlparser2/lib/index.js":
/*!***********************************************!*\
!*** ./node_modules/htmlparser2/lib/index.js ***!
\***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var Parser = __webpack_require__(/*! ./Parser.js */ "./node_modules/htmlparser2/lib/Parser.js");
var DomHandler = __webpack_require__(/*! domhandler */ "./node_modules/domhandler/index.js");
function defineProp(name, value) {
delete module.exports[name];
module.exports[name] = value;
return value;
}
module.exports = {
Parser: Parser,
Tokenizer: __webpack_require__(/*! ./Tokenizer.js */ "./node_modules/htmlparser2/lib/Tokenizer.js"),
ElementType: __webpack_require__(/*! domelementtype */ "./node_modules/domelementtype/index.js"),
DomHandler: DomHandler,
get FeedHandler() {
return defineProp("FeedHandler", __webpack_require__(/*! ./FeedHandler.js */ "./node_modules/htmlparser2/lib/FeedHandler.js"));
},
get Stream() {
return defineProp("Stream", __webpack_require__(/*! ./Stream.js */ "./node_modules/htmlparser2/lib/Stream.js"));
},
get WritableStream() {
return defineProp("WritableStream", __webpack_require__(/*! ./WritableStream.js */ "./node_modules/htmlparser2/lib/WritableStream.js"));
},
get ProxyHandler() {
return defineProp("ProxyHandler", __webpack_require__(/*! ./ProxyHandler.js */ "./node_modules/htmlparser2/lib/ProxyHandler.js"));
},
get DomUtils() {
return defineProp("DomUtils", __webpack_require__(/*! domutils */ "./node_modules/domutils/index.js"));
},
get CollectingHandler() {
return defineProp(
"CollectingHandler",
__webpack_require__(/*! ./CollectingHandler.js */ "./node_modules/htmlparser2/lib/CollectingHandler.js")
);
},
// For legacy support
DefaultHandler: DomHandler,
get RssHandler() {
return defineProp("RssHandler", this.FeedHandler);
},
//helper methods
parseDOM: function(data, options) {
var handler = new DomHandler(options);
new Parser(handler, options).end(data);
return handler.dom;
},
parseFeed: function(feed, options) {
var handler = new module.exports.FeedHandler(options);
new Parser(handler, options).end(feed);
return handler.dom;
},
createDomStream: function(cb, options, elementCb) {
var handler = new DomHandler(cb, options, elementCb);
return new Parser(handler, options);
},
// List of all events that the parser emits
EVENTS: {
/* Format: eventname: number of arguments */
attribute: 2,
cdatastart: 0,
cdataend: 0,
text: 1,
processinginstruction: 2,
comment: 1,
commentend: 0,
closetag: 1,
opentag: 2,
opentagname: 1,
error: 1,
end: 0
}
};
/***/ }),
/***/ "./node_modules/ieee754/index.js":
/*!***************************************!*\
!*** ./node_modules/ieee754/index.js ***!
\***************************************/
/***/ ((__unused_webpack_module, exports) => {
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
var e, m
var eLen = (nBytes * 8) - mLen - 1
var eMax = (1 << eLen) - 1
var eBias = eMax >> 1
var nBits = -7
var i = isLE ? (nBytes - 1) : 0
var d = isLE ? -1 : 1
var s = buffer[offset + i]
i += d
e = s & ((1 << (-nBits)) - 1)
s >>= (-nBits)
nBits += eLen
for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
m = e & ((1 << (-nBits)) - 1)
e >>= (-nBits)
nBits += mLen
for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
if (e === 0) {
e = 1 - eBias
} else if (e === eMax) {
return m ? NaN : ((s ? -1 : 1) * Infinity)
} else {
m = m + Math.pow(2, mLen)
e = e - eBias
}
return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}
exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
var e, m, c
var eLen = (nBytes * 8) - mLen - 1
var eMax = (1 << eLen) - 1
var eBias = eMax >> 1
var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
var i = isLE ? 0 : (nBytes - 1)
var d = isLE ? 1 : -1
var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
value = Math.abs(value)
if (isNaN(value) || value === Infinity) {
m = isNaN(value) ? 1 : 0
e = eMax
} else {
e = Math.floor(Math.log(value) / Math.LN2)
if (value * (c = Math.pow(2, -e)) < 1) {
e--
c *= 2
}
if (e + eBias >= 1) {
value += rt / c
} else {
value += rt * Math.pow(2, 1 - eBias)
}
if (value * c >= 2) {
e++
c /= 2
}
if (e + eBias >= eMax) {
m = 0
e = eMax
} else if (e + eBias >= 1) {
m = ((value * c) - 1) * Math.pow(2, mLen)
e = e + eBias
} else {
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
e = 0
}
}
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
e = (e << mLen) | m
eLen += mLen
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
buffer[offset + i - d] |= s * 128
}
/***/ }),
/***/ "./node_modules/inherits/inherits_browser.js":
/*!***************************************************!*\
!*** ./node_modules/inherits/inherits_browser.js ***!
\***************************************************/
/***/ ((module) => {
if (typeof Object.create === 'function') {
// implementation from standard node.js 'util' module
module.exports = function inherits(ctor, superCtor) {
if (superCtor) {
ctor.super_ = superCtor
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
})
}
};
} else {
// old school shim for old browsers
module.exports = function inherits(ctor, superCtor) {
if (superCtor) {
ctor.super_ = superCtor
var TempCtor = function () {}
TempCtor.prototype = superCtor.prototype
ctor.prototype = new TempCtor()
ctor.prototype.constructor = ctor
}
}
}
/***/ }),
/***/ "./assets/src/common/all-config.scss":
/*!*******************************************!*\
!*** ./assets/src/common/all-config.scss ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./assets/src/common/skeleton/Common.scss":
/*!************************************************!*\
!*** ./assets/src/common/skeleton/Common.scss ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./assets/src/common/skeleton/Rectangle.scss":
/*!***************************************************!*\
!*** ./assets/src/common/skeleton/Rectangle.scss ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./assets/src/common/skeleton/Skeleton.scss":
/*!**************************************************!*\
!*** ./assets/src/common/skeleton/Skeleton.scss ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./assets/src/common/skeleton/Spacer.scss":
/*!************************************************!*\
!*** ./assets/src/common/skeleton/Spacer.scss ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./assets/src/common/skeleton/Text.scss":
/*!**********************************************!*\
!*** ./assets/src/common/skeleton/Text.scss ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
// extracted by mini-css-extract-plugin
/***/ }),
/***/ "./node_modules/object-assign/index.js":
/*!*********************************************!*\
!*** ./node_modules/object-assign/index.js ***!
\*********************************************/
/***/ ((module) => {
"use strict";
/*
object-assign
(c) Sindre Sorhus
@license MIT
*/
/* eslint-disable no-unused-vars */
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
function toObject(val) {
if (val === null || val === undefined) {
throw new TypeError('Object.assign cannot be called with null or undefined');
}
return Object(val);
}
function shouldUseNative() {
try {
if (!Object.assign) {
return false;
}
// Detect buggy property enumeration order in older V8 versions.
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
test1[5] = 'de';
if (Object.getOwnPropertyNames(test1)[0] === '5') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test2 = {};
for (var i = 0; i < 10; i++) {
test2['_' + String.fromCharCode(i)] = i;
}
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
return test2[n];
});
if (order2.join('') !== '0123456789') {
return false;
}
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
var test3 = {};
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
test3[letter] = letter;
});
if (Object.keys(Object.assign({}, test3)).join('') !==
'abcdefghijklmnopqrst') {
return false;
}
return true;
} catch (err) {
// We don't expect any of the above to throw, but better to be safe.
return false;
}
}
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
var from;
var to = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty.call(from, key)) {
to[key] = from[key];
}
}
if (getOwnPropertySymbols) {
symbols = getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to[symbols[i]] = from[symbols[i]];
}
}
}
}
return to;
};
/***/ }),
/***/ "./node_modules/prop-types/checkPropTypes.js":
/*!***************************************************!*\
!*** ./node_modules/prop-types/checkPropTypes.js ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var printWarning = function() {};
if (true) {
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
var loggedTypeFailures = {};
var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
printWarning = function(text) {
var message = 'Warning: ' + text;
if (typeof console !== 'undefined') {
console.error(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) { /**/ }
};
}
/**
* Assert that the values match with the type specs.
* Error messages are memorized and will only be shown once.
*
* @param {object} typeSpecs Map of name to a ReactPropType
* @param {object} values Runtime values that need to be type-checked
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @private
*/
function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
if (true) {
for (var typeSpecName in typeSpecs) {
if (has(typeSpecs, typeSpecName)) {
var error;
// Prop type validation may throw. In case they do, we don't want to
// fail the render phase where it didn't fail before. So we log it.
// After these have been cleaned up, we'll let them throw.
try {
// This is intentionally an invariant that gets caught. It's the same
// behavior as without this statement except with a better message.
if (typeof typeSpecs[typeSpecName] !== 'function') {
var err = Error(
(componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
);
err.name = 'Invariant Violation';
throw err;
}
error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
} catch (ex) {
error = ex;
}
if (error && !(error instanceof Error)) {
printWarning(
(componentName || 'React class') + ': type specification of ' +
location + ' `' + typeSpecName + '` is invalid; the type checker ' +
'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
'You may have forgotten to pass an argument to the type checker ' +
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
'shape all require an argument).'
);
}
if (error instanceof Error && !(error.message in loggedTypeFailures)) {
// Only monitor this failure once because there tends to be a lot of the
// same error.
loggedTypeFailures[error.message] = true;
var stack = getStack ? getStack() : '';
printWarning(
'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
);
}
}
}
}
}
/**
* Resets warning cache when testing.
*
* @private
*/
checkPropTypes.resetWarningCache = function() {
if (true) {
loggedTypeFailures = {};
}
}
module.exports = checkPropTypes;
/***/ }),
/***/ "./node_modules/prop-types/factoryWithTypeCheckers.js":
/*!************************************************************!*\
!*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***!
\************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/prop-types/node_modules/react-is/index.js");
var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "./node_modules/prop-types/checkPropTypes.js");
var printWarning = function() {};
if (true) {
printWarning = function(text) {
var message = 'Warning: ' + text;
if (typeof console !== 'undefined') {
console.error(message);
}
try {
// --- Welcome to debugging React ---
// This error was thrown as a convenience so that you can use this stack
// to find the callsite that caused this warning to fire.
throw new Error(message);
} catch (x) {}
};
}
function emptyFunctionThatReturnsNull() {
return null;
}
module.exports = function(isValidElement, throwOnDirectAccess) {
/* global Symbol */
var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
/**
* Returns the iterator method function contained on the iterable object.
*
* Be sure to invoke the function with the iterable as context:
*
* var iteratorFn = getIteratorFn(myIterable);
* if (iteratorFn) {
* var iterator = iteratorFn.call(myIterable);
* ...
* }
*
* @param {?object} maybeIterable
* @return {?function}
*/
function getIteratorFn(maybeIterable) {
var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
if (typeof iteratorFn === 'function') {
return iteratorFn;
}
}
/**
* Collection of methods that allow declaration and validation of props that are
* supplied to React components. Example usage:
*
* var Props = require('ReactPropTypes');
* var MyArticle = React.createClass({
* propTypes: {
* // An optional string prop named "description".
* description: Props.string,
*
* // A required enum prop named "category".
* category: Props.oneOf(['News','Photos']).isRequired,
*
* // A prop named "dialog" that requires an instance of Dialog.
* dialog: Props.instanceOf(Dialog).isRequired
* },
* render: function() { ... }
* });
*
* A more formal specification of how these methods are used:
*
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
* decl := ReactPropTypes.{type}(.isRequired)?
*
* Each and every declaration produces a function with the same signature. This
* allows the creation of custom validation functions. For example:
*
* var MyLink = React.createClass({
* propTypes: {
* // An optional string or URI prop named "href".
* href: function(props, propName, componentName) {
* var propValue = props[propName];
* if (propValue != null && typeof propValue !== 'string' &&
* !(propValue instanceof URI)) {
* return new Error(
* 'Expected a string or an URI for ' + propName + ' in ' +
* componentName
* );
* }
* }
* },
* render: function() {...}
* });
*
* @internal
*/
var ANONYMOUS = '<<anonymous>>';
// Important!
// Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
var ReactPropTypes = {
array: createPrimitiveTypeChecker('array'),
bigint: createPrimitiveTypeChecker('bigint'),
bool: createPrimitiveTypeChecker('boolean'),
func: createPrimitiveTypeChecker('function'),
number: createPrimitiveTypeChecker('number'),
object: createPrimitiveTypeChecker('object'),
string: createPrimitiveTypeChecker('string'),
symbol: createPrimitiveTypeChecker('symbol'),
any: createAnyTypeChecker(),
arrayOf: createArrayOfTypeChecker,
element: createElementTypeChecker(),
elementType: createElementTypeTypeChecker(),
instanceOf: createInstanceTypeChecker,
node: createNodeChecker(),
objectOf: createObjectOfTypeChecker,
oneOf: createEnumTypeChecker,
oneOfType: createUnionTypeChecker,
shape: createShapeTypeChecker,
exact: createStrictShapeTypeChecker,
};
/**
* inlined Object.is polyfill to avoid requiring consumers ship their own
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
*/
/*eslint-disable no-self-compare*/
function is(x, y) {
// SameValue algorithm
if (x === y) {
// Steps 1-5, 7-10
// Steps 6.b-6.e: +0 != -0
return x !== 0 || 1 / x === 1 / y;
} else {
// Step 6.a: NaN == NaN
return x !== x && y !== y;
}
}
/*eslint-enable no-self-compare*/
/**
* We use an Error-like object for backward compatibility as people may call
* PropTypes directly and inspect their output. However, we don't use real
* Errors anymore. We don't inspect their stack anyway, and creating them
* is prohibitively expensive if they are created too often, such as what
* happens in oneOfType() for any type before the one that matched.
*/
function PropTypeError(message, data) {
this.message = message;
this.data = data && typeof data === 'object' ? data: {};
this.stack = '';
}
// Make `instanceof Error` still work for returned errors.
PropTypeError.prototype = Error.prototype;
function createChainableTypeChecker(validate) {
if (true) {
var manualPropTypeCallCache = {};
var manualPropTypeWarningCount = 0;
}
function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
componentName = componentName || ANONYMOUS;
propFullName = propFullName || propName;
if (secret !== ReactPropTypesSecret) {
if (throwOnDirectAccess) {
// New behavior only for users of `prop-types` package
var err = new Error(
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
'Use `PropTypes.checkPropTypes()` to call them. ' +
'Read more at http://fb.me/use-check-prop-types'
);
err.name = 'Invariant Violation';
throw err;
} else if ( true && typeof console !== 'undefined') {
// Old behavior for people using React.PropTypes
var cacheKey = componentName + ':' + propName;
if (
!manualPropTypeCallCache[cacheKey] &&
// Avoid spamming the console because they are often not actionable except for lib authors
manualPropTypeWarningCount < 3
) {
printWarning(
'You are manually calling a React.PropTypes validation ' +
'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
'and will throw in the standalone `prop-types` package. ' +
'You may be seeing this warning due to a third-party PropTypes ' +
'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
);
manualPropTypeCallCache[cacheKey] = true;
manualPropTypeWarningCount++;
}
}
}
if (props[propName] == null) {
if (isRequired) {
if (props[propName] === null) {
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
}
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
}
return null;
} else {
return validate(props, propName, componentName, location, propFullName);
}
}
var chainedCheckType = checkType.bind(null, false);
chainedCheckType.isRequired = checkType.bind(null, true);
return chainedCheckType;
}
function createPrimitiveTypeChecker(expectedType) {
function validate(props, propName, componentName, location, propFullName, secret) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== expectedType) {
// `propValue` being instance of, say, date/regexp, pass the 'object'
// check, but we can offer a more precise error message here rather than
// 'of type `object`'.
var preciseType = getPreciseType(propValue);
return new PropTypeError(
'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
{expectedType: expectedType}
);
}
return null;
}
return createChainableTypeChecker(validate);
}
function createAnyTypeChecker() {
return createChainableTypeChecker(emptyFunctionThatReturnsNull);
}
function createArrayOfTypeChecker(typeChecker) {
function validate(props, propName, componentName, location, propFullName) {
if (typeof typeChecker !== 'function') {
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
}
var propValue = props[propName];
if (!Array.isArray(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
}
for (var i = 0; i < propValue.length; i++) {
var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
if (error instanceof Error) {
return error;
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function createElementTypeChecker() {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
if (!isValidElement(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createElementTypeTypeChecker() {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
if (!ReactIs.isValidElementType(propValue)) {
var propType = getPropType(propValue);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createInstanceTypeChecker(expectedClass) {
function validate(props, propName, componentName, location, propFullName) {
if (!(props[propName] instanceof expectedClass)) {
var expectedClassName = expectedClass.name || ANONYMOUS;
var actualClassName = getClassName(props[propName]);
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function createEnumTypeChecker(expectedValues) {
if (!Array.isArray(expectedValues)) {
if (true) {
if (arguments.length > 1) {
printWarning(
'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
);
} else {
printWarning('Invalid argument supplied to oneOf, expected an array.');
}
}
return emptyFunctionThatReturnsNull;
}
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
for (var i = 0; i < expectedValues.length; i++) {
if (is(propValue, expectedValues[i])) {
return null;
}
}
var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
var type = getPreciseType(value);
if (type === 'symbol') {
return String(value);
}
return value;
});
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
}
return createChainableTypeChecker(validate);
}
function createObjectOfTypeChecker(typeChecker) {
function validate(props, propName, componentName, location, propFullName) {
if (typeof typeChecker !== 'function') {
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
}
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== 'object') {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
}
for (var key in propValue) {
if (has(propValue, key)) {
var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error instanceof Error) {
return error;
}
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function createUnionTypeChecker(arrayOfTypeCheckers) {
if (!Array.isArray(arrayOfTypeCheckers)) {
true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0;
return emptyFunctionThatReturnsNull;
}
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
var checker = arrayOfTypeCheckers[i];
if (typeof checker !== 'function') {
printWarning(
'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
);
return emptyFunctionThatReturnsNull;
}
}
function validate(props, propName, componentName, location, propFullName) {
var expectedTypes = [];
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
var checker = arrayOfTypeCheckers[i];
var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
if (checkerResult == null) {
return null;
}
if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
expectedTypes.push(checkerResult.data.expectedType);
}
}
var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
}
return createChainableTypeChecker(validate);
}
function createNodeChecker() {
function validate(props, propName, componentName, location, propFullName) {
if (!isNode(props[propName])) {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
}
return null;
}
return createChainableTypeChecker(validate);
}
function invalidValidatorError(componentName, location, propFullName, key, type) {
return new PropTypeError(
(componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
);
}
function createShapeTypeChecker(shapeTypes) {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== 'object') {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
}
for (var key in shapeTypes) {
var checker = shapeTypes[key];
if (typeof checker !== 'function') {
return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
}
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error) {
return error;
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function createStrictShapeTypeChecker(shapeTypes) {
function validate(props, propName, componentName, location, propFullName) {
var propValue = props[propName];
var propType = getPropType(propValue);
if (propType !== 'object') {
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
}
// We need to check all keys in case some are required but missing from props.
var allKeys = assign({}, props[propName], shapeTypes);
for (var key in allKeys) {
var checker = shapeTypes[key];
if (has(shapeTypes, key) && typeof checker !== 'function') {
return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
}
if (!checker) {
return new PropTypeError(
'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
'\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
'\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
);
}
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
if (error) {
return error;
}
}
return null;
}
return createChainableTypeChecker(validate);
}
function isNode(propValue) {
switch (typeof propValue) {
case 'number':
case 'string':
case 'undefined':
return true;
case 'boolean':
return !propValue;
case 'object':
if (Array.isArray(propValue)) {
return propValue.every(isNode);
}
if (propValue === null || isValidElement(propValue)) {
return true;
}
var iteratorFn = getIteratorFn(propValue);
if (iteratorFn) {
var iterator = iteratorFn.call(propValue);
var step;
if (iteratorFn !== propValue.entries) {
while (!(step = iterator.next()).done) {
if (!isNode(step.value)) {
return false;
}
}
} else {
// Iterator will provide entry [k,v] tuples rather than values.
while (!(step = iterator.next()).done) {
var entry = step.value;
if (entry) {
if (!isNode(entry[1])) {
return false;
}
}
}
}
} else {
return false;
}
return true;
default:
return false;
}
}
function isSymbol(propType, propValue) {
// Native Symbol.
if (propType === 'symbol') {
return true;
}
// falsy value can't be a Symbol
if (!propValue) {
return false;
}
// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
if (propValue['@@toStringTag'] === 'Symbol') {
return true;
}
// Fallback for non-spec compliant Symbols which are polyfilled.
if (typeof Symbol === 'function' && propValue instanceof Symbol) {
return true;
}
return false;
}
// Equivalent of `typeof` but with special handling for array and regexp.
function getPropType(propValue) {
var propType = typeof propValue;
if (Array.isArray(propValue)) {
return 'array';
}
if (propValue instanceof RegExp) {
// Old webkits (at least until Android 4.0) return 'function' rather than
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/
// passes PropTypes.object.
return 'object';
}
if (isSymbol(propType, propValue)) {
return 'symbol';
}
return propType;
}
// This handles more types than `getPropType`. Only used for error messages.
// See `createPrimitiveTypeChecker`.
function getPreciseType(propValue) {
if (typeof propValue === 'undefined' || propValue === null) {
return '' + propValue;
}
var propType = getPropType(propValue);
if (propType === 'object') {
if (propValue instanceof Date) {
return 'date';
} else if (propValue instanceof RegExp) {
return 'regexp';
}
}
return propType;
}
// Returns a string that is postfixed to a warning about an invalid type.
// For example, "undefined" or "of type array"
function getPostfixForTypeWarning(value) {
var type = getPreciseType(value);
switch (type) {
case 'array':
case 'object':
return 'an ' + type;
case 'boolean':
case 'date':
case 'regexp':
return 'a ' + type;
default:
return type;
}
}
// Returns class name of the object, if any.
function getClassName(propValue) {
if (!propValue.constructor || !propValue.constructor.name) {
return ANONYMOUS;
}
return propValue.constructor.name;
}
ReactPropTypes.checkPropTypes = checkPropTypes;
ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
ReactPropTypes.PropTypes = ReactPropTypes;
return ReactPropTypes;
};
/***/ }),
/***/ "./node_modules/prop-types/index.js":
/*!******************************************!*\
!*** ./node_modules/prop-types/index.js ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (true) {
var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/prop-types/node_modules/react-is/index.js");
// By explicitly using `prop-types` you are opting into new development behavior.
// http://fb.me/prop-types-in-prod
var throwOnDirectAccess = true;
module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "./node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess);
} else {}
/***/ }),
/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js":
/*!*************************************************************!*\
!*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
\*************************************************************/
/***/ ((module) => {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
module.exports = ReactPropTypesSecret;
/***/ }),
/***/ "./node_modules/prop-types/lib/has.js":
/*!********************************************!*\
!*** ./node_modules/prop-types/lib/has.js ***!
\********************************************/
/***/ ((module) => {
module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
/***/ }),
/***/ "./node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js":
/*!***********************************************************************************!*\
!*** ./node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js ***!
\***********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
/** @license React v16.13.1
* react-is.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (true) {
(function() {
'use strict';
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
// nor polyfill, then a plain number is used for performance.
var hasSymbol = typeof Symbol === 'function' && Symbol.for;
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
// (unstable) APIs that have been removed. Can we remove the symbols?
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
function isValidElementType(type) {
return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
}
function typeOf(object) {
if (typeof object === 'object' && object !== null) {
var $$typeof = object.$$typeof;
switch ($$typeof) {
case REACT_ELEMENT_TYPE:
var type = object.type;
switch (type) {
case REACT_ASYNC_MODE_TYPE:
case REACT_CONCURRENT_MODE_TYPE:
case REACT_FRAGMENT_TYPE:
case REACT_PROFILER_TYPE:
case REACT_STRICT_MODE_TYPE:
case REACT_SUSPENSE_TYPE:
return type;
default:
var $$typeofType = type && type.$$typeof;
switch ($$typeofType) {
case REACT_CONTEXT_TYPE:
case REACT_FORWARD_REF_TYPE:
case REACT_LAZY_TYPE:
case REACT_MEMO_TYPE:
case REACT_PROVIDER_TYPE:
return $$typeofType;
default:
return $$typeof;
}
}
case REACT_PORTAL_TYPE:
return $$typeof;
}
}
return undefined;
} // AsyncMode is deprecated along with isAsyncMode
var AsyncMode = REACT_ASYNC_MODE_TYPE;
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
var ContextConsumer = REACT_CONTEXT_TYPE;
var ContextProvider = REACT_PROVIDER_TYPE;
var Element = REACT_ELEMENT_TYPE;
var ForwardRef = REACT_FORWARD_REF_TYPE;
var Fragment = REACT_FRAGMENT_TYPE;
var Lazy = REACT_LAZY_TYPE;
var Memo = REACT_MEMO_TYPE;
var Portal = REACT_PORTAL_TYPE;
var Profiler = REACT_PROFILER_TYPE;
var StrictMode = REACT_STRICT_MODE_TYPE;
var Suspense = REACT_SUSPENSE_TYPE;
var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
function isAsyncMode(object) {
{
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
}
}
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
}
function isConcurrentMode(object) {
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
}
function isContextConsumer(object) {
return typeOf(object) === REACT_CONTEXT_TYPE;
}
function isContextProvider(object) {
return typeOf(object) === REACT_PROVIDER_TYPE;
}
function isElement(object) {
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
}
function isForwardRef(object) {
return typeOf(object) === REACT_FORWARD_REF_TYPE;
}
function isFragment(object) {
return typeOf(object) === REACT_FRAGMENT_TYPE;
}
function isLazy(object) {
return typeOf(object) === REACT_LAZY_TYPE;
}
function isMemo(object) {
return typeOf(object) === REACT_MEMO_TYPE;
}
function isPortal(object) {
return typeOf(object) === REACT_PORTAL_TYPE;
}
function isProfiler(object) {
return typeOf(object) === REACT_PROFILER_TYPE;
}
function isStrictMode(object) {
return typeOf(object) === REACT_STRICT_MODE_TYPE;
}
function isSuspense(object) {
return typeOf(object) === REACT_SUSPENSE_TYPE;
}
exports.AsyncMode = AsyncMode;
exports.ConcurrentMode = ConcurrentMode;
exports.ContextConsumer = ContextConsumer;
exports.ContextProvider = ContextProvider;
exports.Element = Element;
exports.ForwardRef = ForwardRef;
exports.Fragment = Fragment;
exports.Lazy = Lazy;
exports.Memo = Memo;
exports.Portal = Portal;
exports.Profiler = Profiler;
exports.StrictMode = StrictMode;
exports.Suspense = Suspense;
exports.isAsyncMode = isAsyncMode;
exports.isConcurrentMode = isConcurrentMode;
exports.isContextConsumer = isContextConsumer;
exports.isContextProvider = isContextProvider;
exports.isElement = isElement;
exports.isForwardRef = isForwardRef;
exports.isFragment = isFragment;
exports.isLazy = isLazy;
exports.isMemo = isMemo;
exports.isPortal = isPortal;
exports.isProfiler = isProfiler;
exports.isStrictMode = isStrictMode;
exports.isSuspense = isSuspense;
exports.isValidElementType = isValidElementType;
exports.typeOf = typeOf;
})();
}
/***/ }),
/***/ "./node_modules/prop-types/node_modules/react-is/index.js":
/*!****************************************************************!*\
!*** ./node_modules/prop-types/node_modules/react-is/index.js ***!
\****************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
if (false) {} else {
module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js");
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/HtmlParser.js":
/*!**********************************************************!*\
!*** ./node_modules/react-html-parser/lib/HtmlParser.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = HtmlParser;
var _htmlparser = __webpack_require__(/*! htmlparser2 */ "./node_modules/htmlparser2/lib/index.js");
var _htmlparser2 = _interopRequireDefault(_htmlparser);
var _processNodes = __webpack_require__(/*! ./processNodes */ "./node_modules/react-html-parser/lib/processNodes.js");
var _processNodes2 = _interopRequireDefault(_processNodes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Parses a HTML string and returns a list of React components generated from it
*
* @param {String} html The HTML to convert into React component
* @param {Object} options Options to pass
* @returns {Array} List of top level React elements
*/
function HtmlParser(html) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$decodeEntities = _ref.decodeEntities,
decodeEntities = _ref$decodeEntities === undefined ? true : _ref$decodeEntities,
transform = _ref.transform,
_ref$preprocessNodes = _ref.preprocessNodes,
preprocessNodes = _ref$preprocessNodes === undefined ? function (nodes) {
return nodes;
} : _ref$preprocessNodes;
var nodes = preprocessNodes(_htmlparser2.default.parseDOM(html, { decodeEntities: decodeEntities }));
return (0, _processNodes2.default)(nodes, transform);
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/convertNodeToElement.js":
/*!********************************************************************!*\
!*** ./node_modules/react-html-parser/lib/convertNodeToElement.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = convertNodeToElement;
var _elementTypes = __webpack_require__(/*! ./elementTypes */ "./node_modules/react-html-parser/lib/elementTypes/index.js");
var _elementTypes2 = _interopRequireDefault(_elementTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Converts a htmlparser2 node to a React element
*
* @param {Object} node The htmlparser2 node to convert
* @param {Number} index The index of the current node
* @param {Function} transform Transform function to apply to children of the node
* @returns {React.Element}
*/
function convertNodeToElement(node, index, transform) {
return _elementTypes2.default[node.type](node, index, transform);
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/dom/attributes/BooleanAttributes.js":
/*!********************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/dom/attributes/BooleanAttributes.js ***!
\********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
/**
* List of boolean attributes
* These attributes should have their React attribute value set to be the same as their name
* E.g. <input disabled> = <input disabled>
* <input disabled=""> = <input disabled>
* <input disabled="disabled"> = <input disabled>
* @type {Array}
*/
exports["default"] = ['allowfullScreen', 'async', 'autoplay', 'capture', 'checked', 'controls', 'default', 'defer', 'disabled', 'formnovalidate', 'hidden', 'loop', 'multiple', 'muted', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'scoped', 'seamless', 'selected', 'itemscope'];
/***/ }),
/***/ "./node_modules/react-html-parser/lib/dom/attributes/ReactAttributes.js":
/*!******************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/dom/attributes/ReactAttributes.js ***!
\******************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
/**
* Mapping of standard HTML attributes to their React counterparts
* List taken and reversed from react/src/renderers/dom/shared/HTMLDOMPropertyConfig.js
* https://github.com/facebook/react/blob/c9c3c339b757682f1154f1c915eb55e6a8766933/src/renderers/dom/shared/HTMLDOMPropertyConfig.js
* @type {Object}
*/
exports["default"] = {
/**
* Standard Properties
*/
accept: 'accept',
'accept-charset': 'acceptCharset',
accesskey: 'accessKey',
action: 'action',
allowfullscreen: 'allowFullScreen',
allowtransparency: 'allowTransparency',
alt: 'alt',
as: 'as',
async: 'async',
autocomplete: 'autoComplete',
autoplay: 'autoPlay',
capture: 'capture',
cellpadding: 'cellPadding',
cellspacing: 'cellSpacing',
charset: 'charSet',
challenge: 'challenge',
checked: 'checked',
cite: 'cite',
classid: 'classID',
class: 'className',
cols: 'cols',
colspan: 'colSpan',
content: 'content',
contenteditable: 'contentEditable',
contextmenu: 'contextMenu',
controls: 'controls',
controlsList: 'controlsList',
coords: 'coords',
crossorigin: 'crossOrigin',
data: 'data',
datetime: 'dateTime',
default: 'default',
defer: 'defer',
dir: 'dir',
disabled: 'disabled',
download: 'download',
draggable: 'draggable',
enctype: 'encType',
form: 'form',
formaction: 'formAction',
formenctype: 'formEncType',
formmethod: 'formMethod',
formnovalidate: 'formNoValidate',
formtarget: 'formTarget',
frameborder: 'frameBorder',
headers: 'headers',
height: 'height',
hidden: 'hidden',
high: 'high',
href: 'href',
hreflang: 'hrefLang',
for: 'htmlFor',
'http-equiv': 'httpEquiv',
icon: 'icon',
id: 'id',
inputmode: 'inputMode',
integrity: 'integrity',
is: 'is',
keyparams: 'keyParams',
keytype: 'keyType',
kind: 'kind',
label: 'label',
lang: 'lang',
list: 'list',
loop: 'loop',
low: 'low',
manifest: 'manifest',
marginheight: 'marginHeight',
marginwidth: 'marginWidth',
max: 'max',
maxlength: 'maxLength',
media: 'media',
mediagroup: 'mediaGroup',
method: 'method',
min: 'min',
minlength: 'minLength',
multiple: 'multiple',
muted: 'muted',
name: 'name',
nonce: 'nonce',
novalidate: 'noValidate',
open: 'open',
optimum: 'optimum',
pattern: 'pattern',
placeholder: 'placeholder',
playsinline: 'playsInline',
poster: 'poster',
preload: 'preload',
profile: 'profile',
radiogroup: 'radioGroup',
readonly: 'readOnly',
referrerpolicy: 'referrerPolicy',
rel: 'rel',
required: 'required',
reversed: 'reversed',
role: 'role',
rows: 'rows',
rowspan: 'rowSpan',
sandbox: 'sandbox',
scope: 'scope',
scoped: 'scoped',
scrolling: 'scrolling',
seamless: 'seamless',
selected: 'selected',
shape: 'shape',
size: 'size',
sizes: 'sizes',
slot: 'slot',
span: 'span',
spellcheck: 'spellCheck',
src: 'src',
srcdoc: 'srcDoc',
srclang: 'srcLang',
srcset: 'srcSet',
start: 'start',
step: 'step',
style: 'style',
summary: 'summary',
tabindex: 'tabIndex',
target: 'target',
title: 'title',
type: 'type',
usemap: 'useMap',
value: 'value',
width: 'width',
wmode: 'wmode',
wrap: 'wrap',
/**
* RDFa Properties
*/
about: 'about',
datatype: 'datatype',
inlist: 'inlist',
prefix: 'prefix',
property: 'property',
resource: 'resource',
typeof: 'typeof',
vocab: 'vocab',
/**
* Non-standard Properties
*/
autocapitalize: 'autoCapitalize',
autocorrect: 'autoCorrect',
autosave: 'autoSave',
color: 'color',
itemprop: 'itemProp',
itemscope: 'itemScope',
itemtype: 'itemType',
itemid: 'itemID',
itemref: 'itemRef',
results: 'results',
security: 'security',
unselectable: 'unselectable'
};
/***/ }),
/***/ "./node_modules/react-html-parser/lib/dom/elements/VoidElements.js":
/*!*************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/dom/elements/VoidElements.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
/**
* List of void elements
* These elements are not allowed to have children
* @type {Array}
*/
exports["default"] = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
/***/ }),
/***/ "./node_modules/react-html-parser/lib/elementTypes/StyleElementType.js":
/*!*****************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/elementTypes/StyleElementType.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = StyleElementType;
var _react = __webpack_require__(/*! react */ "react");
var _react2 = _interopRequireDefault(_react);
var _generatePropsFromAttributes = __webpack_require__(/*! ../utils/generatePropsFromAttributes */ "./node_modules/react-html-parser/lib/utils/generatePropsFromAttributes.js");
var _generatePropsFromAttributes2 = _interopRequireDefault(_generatePropsFromAttributes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Converts a <style> element to a React element
*
* @param {Object} node The style node
* @param {String} index The index of the React element relative to it's parent
* @returns {React.Element} The React style element
*/
function StyleElementType(node, index) {
// The style element only ever has a single child which is the styles so try and find this to add as
// a child to the style element that will be created
var styles = void 0;
if (node.children.length > 0) {
styles = node.children[0].data;
}
// generate props
var props = (0, _generatePropsFromAttributes2.default)(node.attribs, index);
// create and return the element
return _react2.default.createElement('style', props, styles);
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/elementTypes/TagElementType.js":
/*!***************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/elementTypes/TagElementType.js ***!
\***************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = TagElementType;
var _react = __webpack_require__(/*! react */ "react");
var _react2 = _interopRequireDefault(_react);
var _processNodes = __webpack_require__(/*! ../processNodes */ "./node_modules/react-html-parser/lib/processNodes.js");
var _processNodes2 = _interopRequireDefault(_processNodes);
var _generatePropsFromAttributes = __webpack_require__(/*! ../utils/generatePropsFromAttributes */ "./node_modules/react-html-parser/lib/utils/generatePropsFromAttributes.js");
var _generatePropsFromAttributes2 = _interopRequireDefault(_generatePropsFromAttributes);
var _VoidElements = __webpack_require__(/*! ../dom/elements/VoidElements */ "./node_modules/react-html-parser/lib/dom/elements/VoidElements.js");
var _VoidElements2 = _interopRequireDefault(_VoidElements);
var _isValidTagOrAttributeName = __webpack_require__(/*! ../utils/isValidTagOrAttributeName */ "./node_modules/react-html-parser/lib/utils/isValidTagOrAttributeName.js");
var _isValidTagOrAttributeName2 = _interopRequireDefault(_isValidTagOrAttributeName);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Converts any element (excluding style - see StyleElementType - and script) to a react element.
*
* @param {Object} node The tag node
* @param {String} index The index of the React element relative to it's parent
* @param {Function} transform The transform function to apply to all children
* @returns {React.Element} The React tag element
*/
function TagElementType(node, index, transform) {
var tagName = node.name;
// validate tag name
if (!(0, _isValidTagOrAttributeName2.default)(tagName)) {
return null;
}
// generate props
var props = (0, _generatePropsFromAttributes2.default)(node.attribs, index);
// If the node is not a void element and has children then process them
var children = null;
if (_VoidElements2.default.indexOf(tagName) === -1) {
children = (0, _processNodes2.default)(node.children, transform);
}
// create and return the element
return _react2.default.createElement(tagName, props, children);
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/elementTypes/TextElementType.js":
/*!****************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/elementTypes/TextElementType.js ***!
\****************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = TextElementType;
/**
* Converts a text node to a React text element
*
* @param {Object} node The text node
* @returns {String} The text
*/
function TextElementType(node) {
// React will accept plain text for rendering so just return the node data
return node.data;
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/elementTypes/UnsupportedElementType.js":
/*!***********************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/elementTypes/UnsupportedElementType.js ***!
\***********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = UnsupportedElementType;
/**
* Handles an unsupported element type by returning null so nothing is rendered
* @returns {null}
*/
function UnsupportedElementType() {
// do nothing because the element type is unsupported
// comment, directive, script, cdata, doctype are all currently unsupported
return null;
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/elementTypes/index.js":
/*!******************************************************************!*\
!*** ./node_modules/react-html-parser/lib/elementTypes/index.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
var _ElementType$Text$Ele;
var _htmlparser = __webpack_require__(/*! htmlparser2 */ "./node_modules/htmlparser2/lib/index.js");
var _TextElementType = __webpack_require__(/*! ./TextElementType */ "./node_modules/react-html-parser/lib/elementTypes/TextElementType.js");
var _TextElementType2 = _interopRequireDefault(_TextElementType);
var _TagElementType = __webpack_require__(/*! ./TagElementType */ "./node_modules/react-html-parser/lib/elementTypes/TagElementType.js");
var _TagElementType2 = _interopRequireDefault(_TagElementType);
var _StyleElementType = __webpack_require__(/*! ./StyleElementType */ "./node_modules/react-html-parser/lib/elementTypes/StyleElementType.js");
var _StyleElementType2 = _interopRequireDefault(_StyleElementType);
var _UnsupportedElementType = __webpack_require__(/*! ./UnsupportedElementType */ "./node_modules/react-html-parser/lib/elementTypes/UnsupportedElementType.js");
var _UnsupportedElementType2 = _interopRequireDefault(_UnsupportedElementType);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /*
* Map each htmlparser2 element type to a function which will convert that element type to a React element
* Not all of the element types are supported so the UnsupportedElementType is used for them which will not return any
* value
*/
exports["default"] = (_ElementType$Text$Ele = {}, _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Text, _TextElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Tag, _TagElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Style, _StyleElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Directive, _UnsupportedElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Comment, _UnsupportedElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Script, _UnsupportedElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.CDATA, _UnsupportedElementType2.default), _defineProperty(_ElementType$Text$Ele, _htmlparser.ElementType.Doctype, _UnsupportedElementType2.default), _ElementType$Text$Ele);
/***/ }),
/***/ "./node_modules/react-html-parser/lib/index.js":
/*!*****************************************************!*\
!*** ./node_modules/react-html-parser/lib/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.htmlparser2 = exports.convertNodeToElement = exports.processNodes = undefined;
var _processNodes = __webpack_require__(/*! ./processNodes */ "./node_modules/react-html-parser/lib/processNodes.js");
Object.defineProperty(exports, "processNodes", ({
enumerable: true,
get: function get() {
return _interopRequireDefault(_processNodes).default;
}
}));
var _convertNodeToElement = __webpack_require__(/*! ./convertNodeToElement */ "./node_modules/react-html-parser/lib/convertNodeToElement.js");
Object.defineProperty(exports, "convertNodeToElement", ({
enumerable: true,
get: function get() {
return _interopRequireDefault(_convertNodeToElement).default;
}
}));
var _htmlparser = __webpack_require__(/*! htmlparser2 */ "./node_modules/htmlparser2/lib/index.js");
Object.defineProperty(exports, "htmlparser2", ({
enumerable: true,
get: function get() {
return _interopRequireDefault(_htmlparser).default;
}
}));
var _HtmlParser = __webpack_require__(/*! ./HtmlParser */ "./node_modules/react-html-parser/lib/HtmlParser.js");
var _HtmlParser2 = _interopRequireDefault(_HtmlParser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports["default"] = _HtmlParser2.default;
/***/ }),
/***/ "./node_modules/react-html-parser/lib/processNodes.js":
/*!************************************************************!*\
!*** ./node_modules/react-html-parser/lib/processNodes.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = processNodes;
var _isEmptyTextNode = __webpack_require__(/*! ./utils/isEmptyTextNode */ "./node_modules/react-html-parser/lib/utils/isEmptyTextNode.js");
var _isEmptyTextNode2 = _interopRequireDefault(_isEmptyTextNode);
var _convertNodeToElement = __webpack_require__(/*! ./convertNodeToElement */ "./node_modules/react-html-parser/lib/convertNodeToElement.js");
var _convertNodeToElement2 = _interopRequireDefault(_convertNodeToElement);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Processes the nodes generated by htmlparser2 and convert them all into React elements
*
* @param {Object[]} nodes List of nodes to process
* @param {Function} transform Transform function to optionally apply to nodes
* @returns {React.Element[]} The list of processed React elements
*/
function processNodes(nodes, transform) {
return nodes.filter(function (node) {
return !(0, _isEmptyTextNode2.default)(node);
}).map(function (node, index) {
// return the result of the transform function if applicable
var transformed = void 0;
if (typeof transform === 'function') {
transformed = transform(node, index);
if (transformed === null || !!transformed) {
return transformed;
}
}
// otherwise convert the node as standard
return (0, _convertNodeToElement2.default)(node, index, transform);
});
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/utils/generatePropsFromAttributes.js":
/*!*********************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/utils/generatePropsFromAttributes.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports["default"] = generatePropsFromAttributes;
var _htmlAttributesToReact = __webpack_require__(/*! ./htmlAttributesToReact */ "./node_modules/react-html-parser/lib/utils/htmlAttributesToReact.js");
var _htmlAttributesToReact2 = _interopRequireDefault(_htmlAttributesToReact);
var _inlineStyleToObject = __webpack_require__(/*! ./inlineStyleToObject */ "./node_modules/react-html-parser/lib/utils/inlineStyleToObject.js");
var _inlineStyleToObject2 = _interopRequireDefault(_inlineStyleToObject);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Generates props for a React element from an object of HTML attributes
*
* @param {Object} attributes The HTML attributes
* @param {String} key The key to give the react element
*/
function generatePropsFromAttributes(attributes, key) {
// generate props
var props = _extends({}, (0, _htmlAttributesToReact2.default)(attributes), { key: key });
// if there is an inline/string style prop then convert it to a React style object
// otherwise, it is invalid and omitted
if (typeof props.style === 'string' || props.style instanceof String) {
props.style = (0, _inlineStyleToObject2.default)(props.style);
} else {
delete props.style;
}
return props;
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/utils/htmlAttributesToReact.js":
/*!***************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/utils/htmlAttributesToReact.js ***!
\***************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = htmlAttributesToReact;
var _BooleanAttributes = __webpack_require__(/*! ../dom/attributes/BooleanAttributes */ "./node_modules/react-html-parser/lib/dom/attributes/BooleanAttributes.js");
var _BooleanAttributes2 = _interopRequireDefault(_BooleanAttributes);
var _ReactAttributes = __webpack_require__(/*! ../dom/attributes/ReactAttributes */ "./node_modules/react-html-parser/lib/dom/attributes/ReactAttributes.js");
var _ReactAttributes2 = _interopRequireDefault(_ReactAttributes);
var _isValidTagOrAttributeName = __webpack_require__(/*! ./isValidTagOrAttributeName */ "./node_modules/react-html-parser/lib/utils/isValidTagOrAttributeName.js");
var _isValidTagOrAttributeName2 = _interopRequireDefault(_isValidTagOrAttributeName);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Returns the parsed attribute value taking into account things like boolean attributes
*
* @param {String} attribute The name of the attribute
* @param {*} value The value of the attribute from the HTML
* @returns {*} The parsed attribute value
*/
var getParsedAttributeValue = function getParsedAttributeValue(attribute, value) {
// if the attribute if a boolean then it's value should be the same as it's name
// e.g. disabled="disabled"
var lowerBooleanAttributes = _BooleanAttributes2.default.map(function (attr) {
return attr.toLowerCase();
});
if (lowerBooleanAttributes.indexOf(attribute.toLowerCase()) >= 0) {
value = attribute;
}
return value;
};
/**
* Takes an object of standard HTML property names and converts them to their React counterpart. If the react
* version does not exist for an attribute then just use it as it is
*
* @param {Object} attributes The HTML attributes to convert
* @returns {Object} The React attributes
*/
function htmlAttributesToReact(attributes) {
return Object.keys(attributes).filter(function (attr) {
return (0, _isValidTagOrAttributeName2.default)(attr);
}).reduce(function (mappedAttributes, attribute) {
// lowercase the attribute name and find it in the react attribute map
var lowerCaseAttribute = attribute.toLowerCase();
// format the attribute name
var name = _ReactAttributes2.default[lowerCaseAttribute] || lowerCaseAttribute;
// add the parsed attribute value to the mapped attributes
mappedAttributes[name] = getParsedAttributeValue(name, attributes[attribute]);
return mappedAttributes;
}, {});
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/utils/inlineStyleToObject.js":
/*!*************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/utils/inlineStyleToObject.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
exports["default"] = InlineStyleToObject;
/**
* Converts an inline style string into an object of React style properties
*
* @param {String} inlineStyle='' The inline style to convert
* @returns {Object} The converted style
*/
function InlineStyleToObject() {
var inlineStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
// just return empty object if the inlineStyle is empty
if (inlineStyle === '') {
return {};
}
return inlineStyle.split(';').reduce(function (styleObject, stylePropertyValue) {
// extract the style property name and value
var _stylePropertyValue$s = stylePropertyValue.split(/^([^:]+):/).filter(function (val, i) {
return i > 0;
}).map(function (item) {
return item.trim().toLowerCase();
}),
_stylePropertyValue$s2 = _slicedToArray(_stylePropertyValue$s, 2),
property = _stylePropertyValue$s2[0],
value = _stylePropertyValue$s2[1];
// if there is no value (i.e. no : in the style) then ignore it
if (value === undefined) {
return styleObject;
}
// convert the property name into the correct React format
// remove all hyphens and convert the letter immediately after each hyphen to upper case
// additionally don't uppercase any -ms- prefix
// e.g. -ms-style-property = msStyleProperty
// -webkit-style-property = WebkitStyleProperty
property = property.replace(/^-ms-/, 'ms-').replace(/-(.)/g, function (_, character) {
return character.toUpperCase();
});
// add the new style property and value to the style object
styleObject[property] = value;
return styleObject;
}, {});
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/utils/isEmptyTextNode.js":
/*!*********************************************************************!*\
!*** ./node_modules/react-html-parser/lib/utils/isEmptyTextNode.js ***!
\*********************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = isEmptyTextNode;
/**
* Tests a htmlparser2 node and returns whether is it a text node at the start and end of the line containing only
* white space. This allows these node types to be excluded from the rendering because they are unnecessary.
*
* @param {Object} node The element object as created by htmlparser2
* @returns {boolean} Whether the node is an empty text node
*/
function isEmptyTextNode(node) {
return node.type === 'text' && /\r?\n/.test(node.data) && node.data.trim() === '';
}
/***/ }),
/***/ "./node_modules/react-html-parser/lib/utils/isValidTagOrAttributeName.js":
/*!*******************************************************************************!*\
!*** ./node_modules/react-html-parser/lib/utils/isValidTagOrAttributeName.js ***!
\*******************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = isValidTagOrAttributeName;
var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/;
var nameCache = {};
function isValidTagOrAttributeName(tagName) {
if (!nameCache.hasOwnProperty(tagName)) {
nameCache[tagName] = VALID_TAG_REGEX.test(tagName);
}
return nameCache[tagName];
}
/***/ }),
/***/ "./node_modules/react-is/cjs/react-is.development.js":
/*!***********************************************************!*\
!*** ./node_modules/react-is/cjs/react-is.development.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
/** @license React v17.0.2
* react-is.development.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
if (true) {
(function() {
'use strict';
// ATTENTION
// When adding new symbols to this file,
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
// nor polyfill, then a plain number is used for performance.
var REACT_ELEMENT_TYPE = 0xeac7;
var REACT_PORTAL_TYPE = 0xeaca;
var REACT_FRAGMENT_TYPE = 0xeacb;
var REACT_STRICT_MODE_TYPE = 0xeacc;
var REACT_PROFILER_TYPE = 0xead2;
var REACT_PROVIDER_TYPE = 0xeacd;
var REACT_CONTEXT_TYPE = 0xeace;
var REACT_FORWARD_REF_TYPE = 0xead0;
var REACT_SUSPENSE_TYPE = 0xead1;
var REACT_SUSPENSE_LIST_TYPE = 0xead8;
var REACT_MEMO_TYPE = 0xead3;
var REACT_LAZY_TYPE = 0xead4;
var REACT_BLOCK_TYPE = 0xead9;
var REACT_SERVER_BLOCK_TYPE = 0xeada;
var REACT_FUNDAMENTAL_TYPE = 0xead5;
var REACT_SCOPE_TYPE = 0xead7;
var REACT_OPAQUE_ID_TYPE = 0xeae0;
var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
var REACT_OFFSCREEN_TYPE = 0xeae2;
var REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
if (typeof Symbol === 'function' && Symbol.for) {
var symbolFor = Symbol.for;
REACT_ELEMENT_TYPE = symbolFor('react.element');
REACT_PORTAL_TYPE = symbolFor('react.portal');
REACT_FRAGMENT_TYPE = symbolFor('react.fragment');
REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode');
REACT_PROFILER_TYPE = symbolFor('react.profiler');
REACT_PROVIDER_TYPE = symbolFor('react.provider');
REACT_CONTEXT_TYPE = symbolFor('react.context');
REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref');
REACT_SUSPENSE_TYPE = symbolFor('react.suspense');
REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list');
REACT_MEMO_TYPE = symbolFor('react.memo');
REACT_LAZY_TYPE = symbolFor('react.lazy');
REACT_BLOCK_TYPE = symbolFor('react.block');
REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block');
REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental');
REACT_SCOPE_TYPE = symbolFor('react.scope');
REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id');
REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode');
REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');
REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
}
// Filter certain DOM attributes (e.g. src, href) if their values are empty strings.
var enableScopeAPI = false; // Experimental Create Event Handle API.
function isValidElementType(type) {
if (typeof type === 'string' || typeof type === 'function') {
return true;
} // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_DEBUG_TRACING_MODE_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) {
return true;
}
if (typeof type === 'object' && type !== null) {
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) {
return true;
}
}
return false;
}
function typeOf(object) {
if (typeof object === 'object' && object !== null) {
var $$typeof = object.$$typeof;
switch ($$typeof) {
case REACT_ELEMENT_TYPE:
var type = object.type;
switch (type) {
case REACT_FRAGMENT_TYPE:
case REACT_PROFILER_TYPE:
case REACT_STRICT_MODE_TYPE:
case REACT_SUSPENSE_TYPE:
case REACT_SUSPENSE_LIST_TYPE:
return type;
default:
var $$typeofType = type && type.$$typeof;
switch ($$typeofType) {
case REACT_CONTEXT_TYPE:
case REACT_FORWARD_REF_TYPE:
case REACT_LAZY_TYPE:
case REACT_MEMO_TYPE:
case REACT_PROVIDER_TYPE:
return $$typeofType;
default:
return $$typeof;
}
}
case REACT_PORTAL_TYPE:
return $$typeof;
}
}
return undefined;
}
var ContextConsumer = REACT_CONTEXT_TYPE;
var ContextProvider = REACT_PROVIDER_TYPE;
var Element = REACT_ELEMENT_TYPE;
var ForwardRef = REACT_FORWARD_REF_TYPE;
var Fragment = REACT_FRAGMENT_TYPE;
var Lazy = REACT_LAZY_TYPE;
var Memo = REACT_MEMO_TYPE;
var Portal = REACT_PORTAL_TYPE;
var Profiler = REACT_PROFILER_TYPE;
var StrictMode = REACT_STRICT_MODE_TYPE;
var Suspense = REACT_SUSPENSE_TYPE;
var hasWarnedAboutDeprecatedIsAsyncMode = false;
var hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated
function isAsyncMode(object) {
{
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');
}
}
return false;
}
function isConcurrentMode(object) {
{
if (!hasWarnedAboutDeprecatedIsConcurrentMode) {
hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint
console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');
}
}
return false;
}
function isContextConsumer(object) {
return typeOf(object) === REACT_CONTEXT_TYPE;
}
function isContextProvider(object) {
return typeOf(object) === REACT_PROVIDER_TYPE;
}
function isElement(object) {
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
}
function isForwardRef(object) {
return typeOf(object) === REACT_FORWARD_REF_TYPE;
}
function isFragment(object) {
return typeOf(object) === REACT_FRAGMENT_TYPE;
}
function isLazy(object) {
return typeOf(object) === REACT_LAZY_TYPE;
}
function isMemo(object) {
return typeOf(object) === REACT_MEMO_TYPE;
}
function isPortal(object) {
return typeOf(object) === REACT_PORTAL_TYPE;
}
function isProfiler(object) {
return typeOf(object) === REACT_PROFILER_TYPE;
}
function isStrictMode(object) {
return typeOf(object) === REACT_STRICT_MODE_TYPE;
}
function isSuspense(object) {
return typeOf(object) === REACT_SUSPENSE_TYPE;
}
exports.ContextConsumer = ContextConsumer;
exports.ContextProvider = ContextProvider;
exports.Element = Element;
exports.ForwardRef = ForwardRef;
exports.Fragment = Fragment;
exports.Lazy = Lazy;
exports.Memo = Memo;
exports.Portal = Portal;
exports.Profiler = Profiler;
exports.StrictMode = StrictMode;
exports.Suspense = Suspense;
exports.isAsyncMode = isAsyncMode;
exports.isConcurrentMode = isConcurrentMode;
exports.isContextConsumer = isContextConsumer;
exports.isContextProvider = isContextProvider;
exports.isElement = isElement;
exports.isForwardRef = isForwardRef;
exports.isFragment = isFragment;
exports.isLazy = isLazy;
exports.isMemo = isMemo;
exports.isPortal = isPortal;
exports.isProfiler = isProfiler;
exports.isStrictMode = isStrictMode;
exports.isSuspense = isSuspense;
exports.isValidElementType = isValidElementType;
exports.typeOf = typeOf;
})();
}
/***/ }),
/***/ "./node_modules/react-is/index.js":
/*!****************************************!*\
!*** ./node_modules/react-is/index.js ***!
\****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
if (false) {} else {
module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js");
}
/***/ }),
/***/ "./node_modules/react-redux/es/components/Context.js":
/*!***********************************************************!*\
!*** ./node_modules/react-redux/es/components/Context.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ ReactReduxContext: () => (/* binding */ ReactReduxContext),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var ReactReduxContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createContext(null);
if (true) {
ReactReduxContext.displayName = 'ReactRedux';
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ReactReduxContext);
/***/ }),
/***/ "./node_modules/react-redux/es/components/Provider.js":
/*!************************************************************!*\
!*** ./node_modules/react-redux/es/components/Provider.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Context */ "./node_modules/react-redux/es/components/Context.js");
/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/Subscription */ "./node_modules/react-redux/es/utils/Subscription.js");
/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/useIsomorphicLayoutEffect */ "./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js");
function Provider(_ref) {
var store = _ref.store,
context = _ref.context,
children = _ref.children;
var contextValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {
var subscription = (0,_utils_Subscription__WEBPACK_IMPORTED_MODULE_2__.createSubscription)(store);
return {
store: store,
subscription: subscription
};
}, [store]);
var previousState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {
return store.getState();
}, [store]);
(0,_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__.useIsomorphicLayoutEffect)(function () {
var subscription = contextValue.subscription;
subscription.onStateChange = subscription.notifyNestedSubs;
subscription.trySubscribe();
if (previousState !== store.getState()) {
subscription.notifyNestedSubs();
}
return function () {
subscription.tryUnsubscribe();
subscription.onStateChange = null;
};
}, [contextValue, previousState]);
var Context = context || _Context__WEBPACK_IMPORTED_MODULE_1__.ReactReduxContext;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Context.Provider, {
value: contextValue
}, children);
}
if (true) {
Provider.propTypes = {
store: prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({
subscribe: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired,
dispatch: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired,
getState: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired
}),
context: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),
children: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().any)
};
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Provider);
/***/ }),
/***/ "./node_modules/react-redux/es/components/connectAdvanced.js":
/*!*******************************************************************!*\
!*** ./node_modules/react-redux/es/components/connectAdvanced.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ connectAdvanced)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");
/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! hoist-non-react-statics */ "./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js");
/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/Subscription */ "./node_modules/react-redux/es/utils/Subscription.js");
/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/useIsomorphicLayoutEffect */ "./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js");
/* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Context */ "./node_modules/react-redux/es/components/Context.js");
var _excluded = ["getDisplayName", "methodName", "renderCountProp", "shouldHandleStateChanges", "storeKey", "withRef", "forwardRef", "context"],
_excluded2 = ["reactReduxForwardedRef"];
// Define some constant arrays just to avoid re-creating these
var EMPTY_ARRAY = [];
var NO_SUBSCRIPTION_ARRAY = [null, null];
var stringifyComponent = function stringifyComponent(Comp) {
try {
return JSON.stringify(Comp);
} catch (err) {
return String(Comp);
}
};
function storeStateUpdatesReducer(state, action) {
var updateCount = state[1];
return [action.payload, updateCount + 1];
}
function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {
(0,_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_6__.useIsomorphicLayoutEffect)(function () {
return effectFunc.apply(void 0, effectArgs);
}, dependencies);
}
function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {
// We want to capture the wrapper props and child props we used for later comparisons
lastWrapperProps.current = wrapperProps;
lastChildProps.current = actualChildProps;
renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update
if (childPropsFromStoreUpdate.current) {
childPropsFromStoreUpdate.current = null;
notifyNestedSubs();
}
}
function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {
// If we're not subscribed to the store, nothing to do here
if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts
var didUnsubscribe = false;
var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component
var checkForUpdates = function checkForUpdates() {
if (didUnsubscribe) {
// Don't run stale listeners.
// Redux doesn't guarantee unsubscriptions happen until next dispatch.
return;
}
var latestStoreState = store.getState();
var newChildProps, error;
try {
// Actually run the selector with the most recent store state and wrapper props
// to determine what the child props should be
newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);
} catch (e) {
error = e;
lastThrownError = e;
}
if (!error) {
lastThrownError = null;
} // If the child props haven't changed, nothing to do here - cascade the subscription update
if (newChildProps === lastChildProps.current) {
if (!renderIsScheduled.current) {
notifyNestedSubs();
}
} else {
// Save references to the new child props. Note that we track the "child props from store update"
// as a ref instead of a useState/useReducer because we need a way to determine if that value has
// been processed. If this went into useState/useReducer, we couldn't clear out the value without
// forcing another re-render, which we don't want.
lastChildProps.current = newChildProps;
childPropsFromStoreUpdate.current = newChildProps;
renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render
forceComponentUpdateDispatch({
type: 'STORE_UPDATED',
payload: {
error: error
}
});
}
}; // Actually subscribe to the nearest connected ancestor (or store)
subscription.onStateChange = checkForUpdates;
subscription.trySubscribe(); // Pull data from the store after first render in case the store has
// changed since we began.
checkForUpdates();
var unsubscribeWrapper = function unsubscribeWrapper() {
didUnsubscribe = true;
subscription.tryUnsubscribe();
subscription.onStateChange = null;
if (lastThrownError) {
// It's possible that we caught an error due to a bad mapState function, but the
// parent re-rendered without this component and we're about to unmount.
// This shouldn't happen as long as we do top-down subscriptions correctly, but
// if we ever do those wrong, this throw will surface the error in our tests.
// In that case, throw the error from here so it doesn't get lost.
throw lastThrownError;
}
};
return unsubscribeWrapper;
}
var initStateUpdates = function initStateUpdates() {
return [null, 0];
};
function connectAdvanced(
/*
selectorFactory is a func that is responsible for returning the selector function used to
compute new props from state, props, and dispatch. For example:
export default connectAdvanced((dispatch, options) => (state, props) => ({
thing: state.things[props.thingId],
saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),
}))(YourComponent)
Access to dispatch is provided to the factory so selectorFactories can bind actionCreators
outside of their selector as an optimization. Options passed to connectAdvanced are passed to
the selectorFactory, along with displayName and WrappedComponent, as the second argument.
Note that selectorFactory is responsible for all caching/memoization of inbound and outbound
props. Do not use connectAdvanced directly without memoizing results between calls to your
selector, otherwise the Connect component will re-render on every state or props change.
*/
selectorFactory, // options object:
_ref) {
if (_ref === void 0) {
_ref = {};
}
var _ref2 = _ref,
_ref2$getDisplayName = _ref2.getDisplayName,
getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {
return "ConnectAdvanced(" + name + ")";
} : _ref2$getDisplayName,
_ref2$methodName = _ref2.methodName,
methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,
_ref2$renderCountProp = _ref2.renderCountProp,
renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,
_ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,
shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,
_ref2$storeKey = _ref2.storeKey,
storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,
_ref2$withRef = _ref2.withRef,
withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,
_ref2$forwardRef = _ref2.forwardRef,
forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,
_ref2$context = _ref2.context,
context = _ref2$context === void 0 ? _Context__WEBPACK_IMPORTED_MODULE_7__.ReactReduxContext : _ref2$context,
connectOptions = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded);
if (true) {
if (renderCountProp !== undefined) {
throw new Error("renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension");
}
if (withRef) {
throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');
}
var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + "React.createContext(), and pass the context object to React Redux's Provider and specific components" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';
if (storeKey !== 'store') {
throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);
}
}
var Context = context;
return function wrapWithConnect(WrappedComponent) {
if ( true && !(0,react_is__WEBPACK_IMPORTED_MODULE_4__.isValidElementType)(WrappedComponent)) {
throw new Error("You must pass a component to the function returned by " + (methodName + ". Instead received " + stringifyComponent(WrappedComponent)));
}
var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';
var displayName = getDisplayName(wrappedComponentName);
var selectorFactoryOptions = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, connectOptions, {
getDisplayName: getDisplayName,
methodName: methodName,
renderCountProp: renderCountProp,
shouldHandleStateChanges: shouldHandleStateChanges,
storeKey: storeKey,
displayName: displayName,
wrappedComponentName: wrappedComponentName,
WrappedComponent: WrappedComponent
});
var pure = connectOptions.pure;
function createChildSelector(store) {
return selectorFactory(store.dispatch, selectorFactoryOptions);
} // If we aren't running in "pure" mode, we don't want to memoize values.
// To avoid conditionally calling hooks, we fall back to a tiny wrapper
// that just executes the given callback immediately.
var usePureOnlyMemo = pure ? react__WEBPACK_IMPORTED_MODULE_3__.useMemo : function (callback) {
return callback();
};
function ConnectFunction(props) {
var _useMemo = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
// Distinguish between actual "data" props that were passed to the wrapper component,
// and values needed to control behavior (forwarded refs, alternate context instances).
// To maintain the wrapperProps object reference, memoize this destructuring.
var reactReduxForwardedRef = props.reactReduxForwardedRef,
wrapperProps = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, _excluded2);
return [props.context, reactReduxForwardedRef, wrapperProps];
}, [props]),
propsContext = _useMemo[0],
reactReduxForwardedRef = _useMemo[1],
wrapperProps = _useMemo[2];
var ContextToUse = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
// Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.
// Memoize the check that determines which context instance we should use.
return propsContext && propsContext.Consumer && (0,react_is__WEBPACK_IMPORTED_MODULE_4__.isContextConsumer)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(propsContext.Consumer, null)) ? propsContext : Context;
}, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available
var contextValue = (0,react__WEBPACK_IMPORTED_MODULE_3__.useContext)(ContextToUse); // The store _must_ exist as either a prop or in context.
// We'll check to see if it _looks_ like a Redux store first.
// This allows us to pass through a `store` prop that is just a plain value.
var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);
var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);
if ( true && !didStoreComeFromProps && !didStoreComeFromContext) {
throw new Error("Could not find \"store\" in the context of " + ("\"" + displayName + "\". Either wrap the root component in a <Provider>, ") + "or pass a custom React context provider to <Provider> and the corresponding " + ("React context consumer to " + displayName + " in connect options."));
} // Based on the previous check, one of these must be true
var store = didStoreComeFromProps ? props.store : contextValue.store;
var childPropsSelector = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
// The child props selector needs the store reference as an input.
// Re-create this selector whenever the store changes.
return createChildSelector(store);
}, [store]);
var _useMemo2 = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component
// connected to the store via props shouldn't use subscription from context, or vice versa.
// This Subscription's source should match where store came from: props vs. context. A component
// connected to the store via props shouldn't use subscription from context, or vice versa.
var subscription = (0,_utils_Subscription__WEBPACK_IMPORTED_MODULE_5__.createSubscription)(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in
// the middle of the notification loop, where `subscription` will then be null. This can
// probably be avoided if Subscription's listeners logic is changed to not call listeners
// that have been unsubscribed in the middle of the notification loop.
// `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in
// the middle of the notification loop, where `subscription` will then be null. This can
// probably be avoided if Subscription's listeners logic is changed to not call listeners
// that have been unsubscribed in the middle of the notification loop.
var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);
return [subscription, notifyNestedSubs];
}, [store, didStoreComeFromProps, contextValue]),
subscription = _useMemo2[0],
notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,
// and memoize that value to avoid unnecessary context updates.
var overriddenContextValue = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
if (didStoreComeFromProps) {
// This component is directly subscribed to a store from props.
// We don't want descendants reading from this store - pass down whatever
// the existing context value is from the nearest connected ancestor.
return contextValue;
} // Otherwise, put this component's subscription instance into context, so that
// connected descendants won't update until after this component is done
return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, contextValue, {
subscription: subscription
});
}, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update
// causes a change to the calculated child component props (or we caught an error in mapState)
var _useReducer = (0,react__WEBPACK_IMPORTED_MODULE_3__.useReducer)(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),
_useReducer$ = _useReducer[0],
previousStateUpdateResult = _useReducer$[0],
forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards
if (previousStateUpdateResult && previousStateUpdateResult.error) {
throw previousStateUpdateResult.error;
} // Set up refs to coordinate values between the subscription effect and the render logic
var lastChildProps = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)();
var lastWrapperProps = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(wrapperProps);
var childPropsFromStoreUpdate = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)();
var renderIsScheduled = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(false);
var actualChildProps = usePureOnlyMemo(function () {
// Tricky logic here:
// - This render may have been triggered by a Redux store update that produced new child props
// - However, we may have gotten new wrapper props after that
// If we have new child props, and the same wrapper props, we know we should use the new child props as-is.
// But, if we have new wrapper props, those might change the child props, so we have to recalculate things.
// So, we'll use the child props from store update only if the wrapper props are the same as last time.
if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {
return childPropsFromStoreUpdate.current;
} // TODO We're reading the store directly in render() here. Bad idea?
// This will likely cause Bad Things (TM) to happen in Concurrent Mode.
// Note that we do this because on renders _not_ caused by store updates, we need the latest store state
// to determine what the child props should be.
return childPropsSelector(store.getState(), wrapperProps);
}, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns
// about useLayoutEffect in SSR, so we try to detect environment and fall back to
// just useEffect instead to avoid the warning, since neither will run anyway.
useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes
useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.
// We memoize the elements for the rendered child component as an optimization.
var renderedWrappedComponent = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(WrappedComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, actualChildProps, {
ref: reactReduxForwardedRef
}));
}, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering
// that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.
var renderedChild = (0,react__WEBPACK_IMPORTED_MODULE_3__.useMemo)(function () {
if (shouldHandleStateChanges) {
// If this component is subscribed to store updates, we need to pass its own
// subscription instance down to our descendants. That means rendering the same
// Context instance, and putting a different value into the context.
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(ContextToUse.Provider, {
value: overriddenContextValue
}, renderedWrappedComponent);
}
return renderedWrappedComponent;
}, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);
return renderedChild;
} // If we're in "pure" mode, ensure our wrapper component only re-renders when incoming props have changed.
var Connect = pure ? react__WEBPACK_IMPORTED_MODULE_3___default().memo(ConnectFunction) : ConnectFunction;
Connect.WrappedComponent = WrappedComponent;
Connect.displayName = ConnectFunction.displayName = displayName;
if (forwardRef) {
var forwarded = react__WEBPACK_IMPORTED_MODULE_3___default().forwardRef(function forwardConnectRef(props, ref) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3___default().createElement(Connect, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, {
reactReduxForwardedRef: ref
}));
});
forwarded.displayName = displayName;
forwarded.WrappedComponent = WrappedComponent;
return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(forwarded, WrappedComponent);
}
return hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_2___default()(Connect, WrappedComponent);
};
}
/***/ }),
/***/ "./node_modules/react-redux/es/connect/connect.js":
/*!********************************************************!*\
!*** ./node_modules/react-redux/es/connect/connect.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ createConnect: () => (/* binding */ createConnect),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");
/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/connectAdvanced */ "./node_modules/react-redux/es/components/connectAdvanced.js");
/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/shallowEqual */ "./node_modules/react-redux/es/utils/shallowEqual.js");
/* harmony import */ var _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./mapDispatchToProps */ "./node_modules/react-redux/es/connect/mapDispatchToProps.js");
/* harmony import */ var _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mapStateToProps */ "./node_modules/react-redux/es/connect/mapStateToProps.js");
/* harmony import */ var _mergeProps__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./mergeProps */ "./node_modules/react-redux/es/connect/mergeProps.js");
/* harmony import */ var _selectorFactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./selectorFactory */ "./node_modules/react-redux/es/connect/selectorFactory.js");
var _excluded = ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"];
/*
connect is a facade over connectAdvanced. It turns its args into a compatible
selectorFactory, which has the signature:
(dispatch, options) => (nextState, nextOwnProps) => nextFinalProps
connect passes its args to connectAdvanced as options, which will in turn pass them to
selectorFactory each time a Connect component instance is instantiated or hot reloaded.
selectorFactory returns a final props selector from its mapStateToProps,
mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,
mergePropsFactories, and pure args.
The resulting final props selector is called by the Connect component instance whenever
it receives new props or store state.
*/
function match(arg, factories, name) {
for (var i = factories.length - 1; i >= 0; i--) {
var result = factories[i](arg);
if (result) return result;
}
return function (dispatch, options) {
throw new Error("Invalid value of type " + typeof arg + " for " + name + " argument when connecting component " + options.wrappedComponentName + ".");
};
}
function strictEqual(a, b) {
return a === b;
} // createConnect with default args builds the 'official' connect behavior. Calling it with
// different options opens up some testing and extensibility scenarios
function createConnect(_temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$connectHOC = _ref.connectHOC,
connectHOC = _ref$connectHOC === void 0 ? _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_2__["default"] : _ref$connectHOC,
_ref$mapStateToPropsF = _ref.mapStateToPropsFactories,
mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? _mapStateToProps__WEBPACK_IMPORTED_MODULE_5__["default"] : _ref$mapStateToPropsF,
_ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,
mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? _mapDispatchToProps__WEBPACK_IMPORTED_MODULE_4__["default"] : _ref$mapDispatchToPro,
_ref$mergePropsFactor = _ref.mergePropsFactories,
mergePropsFactories = _ref$mergePropsFactor === void 0 ? _mergeProps__WEBPACK_IMPORTED_MODULE_6__["default"] : _ref$mergePropsFactor,
_ref$selectorFactory = _ref.selectorFactory,
selectorFactory = _ref$selectorFactory === void 0 ? _selectorFactory__WEBPACK_IMPORTED_MODULE_7__["default"] : _ref$selectorFactory;
return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {
if (_ref2 === void 0) {
_ref2 = {};
}
var _ref3 = _ref2,
_ref3$pure = _ref3.pure,
pure = _ref3$pure === void 0 ? true : _ref3$pure,
_ref3$areStatesEqual = _ref3.areStatesEqual,
areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,
_ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,
areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areOwnPropsEqua,
_ref3$areStatePropsEq = _ref3.areStatePropsEqual,
areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areStatePropsEq,
_ref3$areMergedPropsE = _ref3.areMergedPropsEqual,
areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_3__["default"] : _ref3$areMergedPropsE,
extraOptions = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, _excluded);
var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');
var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');
var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');
return connectHOC(selectorFactory, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
// used in error messages
methodName: 'connect',
// used to compute Connect's displayName from the wrapped component's displayName.
getDisplayName: function getDisplayName(name) {
return "Connect(" + name + ")";
},
// if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes
shouldHandleStateChanges: Boolean(mapStateToProps),
// passed through to selectorFactory
initMapStateToProps: initMapStateToProps,
initMapDispatchToProps: initMapDispatchToProps,
initMergeProps: initMergeProps,
pure: pure,
areStatesEqual: areStatesEqual,
areOwnPropsEqual: areOwnPropsEqual,
areStatePropsEqual: areStatePropsEqual,
areMergedPropsEqual: areMergedPropsEqual
}, extraOptions));
};
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/createConnect());
/***/ }),
/***/ "./node_modules/react-redux/es/connect/mapDispatchToProps.js":
/*!*******************************************************************!*\
!*** ./node_modules/react-redux/es/connect/mapDispatchToProps.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ whenMapDispatchToPropsIsFunction: () => (/* binding */ whenMapDispatchToPropsIsFunction),
/* harmony export */ whenMapDispatchToPropsIsMissing: () => (/* binding */ whenMapDispatchToPropsIsMissing),
/* harmony export */ whenMapDispatchToPropsIsObject: () => (/* binding */ whenMapDispatchToPropsIsObject)
/* harmony export */ });
/* harmony import */ var _utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/bindActionCreators */ "./node_modules/react-redux/es/utils/bindActionCreators.js");
/* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./wrapMapToProps */ "./node_modules/react-redux/es/connect/wrapMapToProps.js");
function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {
return typeof mapDispatchToProps === 'function' ? (0,_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__.wrapMapToPropsFunc)(mapDispatchToProps, 'mapDispatchToProps') : undefined;
}
function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {
return !mapDispatchToProps ? (0,_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__.wrapMapToPropsConstant)(function (dispatch) {
return {
dispatch: dispatch
};
}) : undefined;
}
function whenMapDispatchToPropsIsObject(mapDispatchToProps) {
return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? (0,_wrapMapToProps__WEBPACK_IMPORTED_MODULE_1__.wrapMapToPropsConstant)(function (dispatch) {
return (0,_utils_bindActionCreators__WEBPACK_IMPORTED_MODULE_0__["default"])(mapDispatchToProps, dispatch);
}) : undefined;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject]);
/***/ }),
/***/ "./node_modules/react-redux/es/connect/mapStateToProps.js":
/*!****************************************************************!*\
!*** ./node_modules/react-redux/es/connect/mapStateToProps.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ whenMapStateToPropsIsFunction: () => (/* binding */ whenMapStateToPropsIsFunction),
/* harmony export */ whenMapStateToPropsIsMissing: () => (/* binding */ whenMapStateToPropsIsMissing)
/* harmony export */ });
/* harmony import */ var _wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wrapMapToProps */ "./node_modules/react-redux/es/connect/wrapMapToProps.js");
function whenMapStateToPropsIsFunction(mapStateToProps) {
return typeof mapStateToProps === 'function' ? (0,_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__.wrapMapToPropsFunc)(mapStateToProps, 'mapStateToProps') : undefined;
}
function whenMapStateToPropsIsMissing(mapStateToProps) {
return !mapStateToProps ? (0,_wrapMapToProps__WEBPACK_IMPORTED_MODULE_0__.wrapMapToPropsConstant)(function () {
return {};
}) : undefined;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing]);
/***/ }),
/***/ "./node_modules/react-redux/es/connect/mergeProps.js":
/*!***********************************************************!*\
!*** ./node_modules/react-redux/es/connect/mergeProps.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */ defaultMergeProps: () => (/* binding */ defaultMergeProps),
/* harmony export */ whenMergePropsIsFunction: () => (/* binding */ whenMergePropsIsFunction),
/* harmony export */ whenMergePropsIsOmitted: () => (/* binding */ whenMergePropsIsOmitted),
/* harmony export */ wrapMergePropsFunc: () => (/* binding */ wrapMergePropsFunc)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/verifyPlainObject */ "./node_modules/react-redux/es/utils/verifyPlainObject.js");
function defaultMergeProps(stateProps, dispatchProps, ownProps) {
return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, ownProps, stateProps, dispatchProps);
}
function wrapMergePropsFunc(mergeProps) {
return function initMergePropsProxy(dispatch, _ref) {
var displayName = _ref.displayName,
pure = _ref.pure,
areMergedPropsEqual = _ref.areMergedPropsEqual;
var hasRunOnce = false;
var mergedProps;
return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
if (hasRunOnce) {
if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;
} else {
hasRunOnce = true;
mergedProps = nextMergedProps;
if (true) (0,_utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_1__["default"])(mergedProps, displayName, 'mergeProps');
}
return mergedProps;
};
};
}
function whenMergePropsIsFunction(mergeProps) {
return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;
}
function whenMergePropsIsOmitted(mergeProps) {
return !mergeProps ? function () {
return defaultMergeProps;
} : undefined;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([whenMergePropsIsFunction, whenMergePropsIsOmitted]);
/***/ }),
/***/ "./node_modules/react-redux/es/connect/selectorFactory.js":
/*!****************************************************************!*\
!*** ./node_modules/react-redux/es/connect/selectorFactory.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ finalPropsSelectorFactory),
/* harmony export */ impureFinalPropsSelectorFactory: () => (/* binding */ impureFinalPropsSelectorFactory),
/* harmony export */ pureFinalPropsSelectorFactory: () => (/* binding */ pureFinalPropsSelectorFactory)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");
/* harmony import */ var _verifySubselectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./verifySubselectors */ "./node_modules/react-redux/es/connect/verifySubselectors.js");
var _excluded = ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"];
function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {
return function impureFinalPropsSelector(state, ownProps) {
return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);
};
}
function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {
var areStatesEqual = _ref.areStatesEqual,
areOwnPropsEqual = _ref.areOwnPropsEqual,
areStatePropsEqual = _ref.areStatePropsEqual;
var hasRunAtLeastOnce = false;
var state;
var ownProps;
var stateProps;
var dispatchProps;
var mergedProps;
function handleFirstCall(firstState, firstOwnProps) {
state = firstState;
ownProps = firstOwnProps;
stateProps = mapStateToProps(state, ownProps);
dispatchProps = mapDispatchToProps(dispatch, ownProps);
mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
hasRunAtLeastOnce = true;
return mergedProps;
}
function handleNewPropsAndNewState() {
stateProps = mapStateToProps(state, ownProps);
if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);
mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
return mergedProps;
}
function handleNewProps() {
if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);
if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);
mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
return mergedProps;
}
function handleNewState() {
var nextStateProps = mapStateToProps(state, ownProps);
var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);
stateProps = nextStateProps;
if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
return mergedProps;
}
function handleSubsequentCalls(nextState, nextOwnProps) {
var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);
var stateChanged = !areStatesEqual(nextState, state, nextOwnProps, ownProps);
state = nextState;
ownProps = nextOwnProps;
if (propsChanged && stateChanged) return handleNewPropsAndNewState();
if (propsChanged) return handleNewProps();
if (stateChanged) return handleNewState();
return mergedProps;
}
return function pureFinalPropsSelector(nextState, nextOwnProps) {
return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);
};
} // TODO: Add more comments
// If pure is true, the selector returned by selectorFactory will memoize its results,
// allowing connectAdvanced's shouldComponentUpdate to return false if final
// props have not changed. If false, the selector will always return a new
// object and shouldComponentUpdate will always return true.
function finalPropsSelectorFactory(dispatch, _ref2) {
var initMapStateToProps = _ref2.initMapStateToProps,
initMapDispatchToProps = _ref2.initMapDispatchToProps,
initMergeProps = _ref2.initMergeProps,
options = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref2, _excluded);
var mapStateToProps = initMapStateToProps(dispatch, options);
var mapDispatchToProps = initMapDispatchToProps(dispatch, options);
var mergeProps = initMergeProps(dispatch, options);
if (true) {
(0,_verifySubselectors__WEBPACK_IMPORTED_MODULE_1__["default"])(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);
}
var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;
return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);
}
/***/ }),
/***/ "./node_modules/react-redux/es/connect/verifySubselectors.js":
/*!*******************************************************************!*\
!*** ./node_modules/react-redux/es/connect/verifySubselectors.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ verifySubselectors)
/* harmony export */ });
/* harmony import */ var _utils_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/warning */ "./node_modules/react-redux/es/utils/warning.js");
function verify(selector, methodName, displayName) {
if (!selector) {
throw new Error("Unexpected value for " + methodName + " in " + displayName + ".");
} else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') {
if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {
(0,_utils_warning__WEBPACK_IMPORTED_MODULE_0__["default"])("The selector for " + methodName + " of " + displayName + " did not specify a value for dependsOnOwnProps.");
}
}
}
function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, displayName) {
verify(mapStateToProps, 'mapStateToProps', displayName);
verify(mapDispatchToProps, 'mapDispatchToProps', displayName);
verify(mergeProps, 'mergeProps', displayName);
}
/***/ }),
/***/ "./node_modules/react-redux/es/connect/wrapMapToProps.js":
/*!***************************************************************!*\
!*** ./node_modules/react-redux/es/connect/wrapMapToProps.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getDependsOnOwnProps: () => (/* binding */ getDependsOnOwnProps),
/* harmony export */ wrapMapToPropsConstant: () => (/* binding */ wrapMapToPropsConstant),
/* harmony export */ wrapMapToPropsFunc: () => (/* binding */ wrapMapToPropsFunc)
/* harmony export */ });
/* harmony import */ var _utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/verifyPlainObject */ "./node_modules/react-redux/es/utils/verifyPlainObject.js");
function wrapMapToPropsConstant(getConstant) {
return function initConstantSelector(dispatch, options) {
var constant = getConstant(dispatch, options);
function constantSelector() {
return constant;
}
constantSelector.dependsOnOwnProps = false;
return constantSelector;
};
} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args
// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine
// whether mapToProps needs to be invoked when props have changed.
//
// A length of one signals that mapToProps does not depend on props from the parent component.
// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and
// therefore not reporting its length accurately..
function getDependsOnOwnProps(mapToProps) {
return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;
} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,
// this function wraps mapToProps in a proxy function which does several things:
//
// * Detects whether the mapToProps function being called depends on props, which
// is used by selectorFactory to decide if it should reinvoke on props changes.
//
// * On first call, handles mapToProps if returns another function, and treats that
// new function as the true mapToProps for subsequent calls.
//
// * On first call, verifies the first result is a plain object, in order to warn
// the developer that their mapToProps function is not returning a valid result.
//
function wrapMapToPropsFunc(mapToProps, methodName) {
return function initProxySelector(dispatch, _ref) {
var displayName = _ref.displayName;
var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);
}; // allow detectFactoryAndVerify to get ownProps
proxy.dependsOnOwnProps = true;
proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
proxy.mapToProps = mapToProps;
proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);
var props = proxy(stateOrDispatch, ownProps);
if (typeof props === 'function') {
proxy.mapToProps = props;
proxy.dependsOnOwnProps = getDependsOnOwnProps(props);
props = proxy(stateOrDispatch, ownProps);
}
if (true) (0,_utils_verifyPlainObject__WEBPACK_IMPORTED_MODULE_0__["default"])(props, displayName, methodName);
return props;
};
return proxy;
};
}
/***/ }),
/***/ "./node_modules/react-redux/es/exports.js":
/*!************************************************!*\
!*** ./node_modules/react-redux/es/exports.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Provider: () => (/* reexport safe */ _components_Provider__WEBPACK_IMPORTED_MODULE_0__["default"]),
/* harmony export */ ReactReduxContext: () => (/* reexport safe */ _components_Context__WEBPACK_IMPORTED_MODULE_2__.ReactReduxContext),
/* harmony export */ connect: () => (/* reexport safe */ _connect_connect__WEBPACK_IMPORTED_MODULE_3__["default"]),
/* harmony export */ connectAdvanced: () => (/* reexport safe */ _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__["default"]),
/* harmony export */ createDispatchHook: () => (/* reexport safe */ _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__.createDispatchHook),
/* harmony export */ createSelectorHook: () => (/* reexport safe */ _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__.createSelectorHook),
/* harmony export */ createStoreHook: () => (/* reexport safe */ _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__.createStoreHook),
/* harmony export */ shallowEqual: () => (/* reexport safe */ _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_7__["default"]),
/* harmony export */ useDispatch: () => (/* reexport safe */ _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__.useDispatch),
/* harmony export */ useSelector: () => (/* reexport safe */ _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__.useSelector),
/* harmony export */ useStore: () => (/* reexport safe */ _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__.useStore)
/* harmony export */ });
/* harmony import */ var _components_Provider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/Provider */ "./node_modules/react-redux/es/components/Provider.js");
/* harmony import */ var _components_connectAdvanced__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/connectAdvanced */ "./node_modules/react-redux/es/components/connectAdvanced.js");
/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Context */ "./node_modules/react-redux/es/components/Context.js");
/* harmony import */ var _connect_connect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./connect/connect */ "./node_modules/react-redux/es/connect/connect.js");
/* harmony import */ var _hooks_useDispatch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks/useDispatch */ "./node_modules/react-redux/es/hooks/useDispatch.js");
/* harmony import */ var _hooks_useSelector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks/useSelector */ "./node_modules/react-redux/es/hooks/useSelector.js");
/* harmony import */ var _hooks_useStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hooks/useStore */ "./node_modules/react-redux/es/hooks/useStore.js");
/* harmony import */ var _utils_shallowEqual__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/shallowEqual */ "./node_modules/react-redux/es/utils/shallowEqual.js");
/***/ }),
/***/ "./node_modules/react-redux/es/hooks/useDispatch.js":
/*!**********************************************************!*\
!*** ./node_modules/react-redux/es/hooks/useDispatch.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ createDispatchHook: () => (/* binding */ createDispatchHook),
/* harmony export */ useDispatch: () => (/* binding */ useDispatch)
/* harmony export */ });
/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/Context */ "./node_modules/react-redux/es/components/Context.js");
/* harmony import */ var _useStore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useStore */ "./node_modules/react-redux/es/hooks/useStore.js");
/**
* Hook factory, which creates a `useDispatch` hook bound to a given context.
*
* @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
* @returns {Function} A `useDispatch` hook bound to the specified context.
*/
function createDispatchHook(context) {
if (context === void 0) {
context = _components_Context__WEBPACK_IMPORTED_MODULE_0__.ReactReduxContext;
}
var useStore = context === _components_Context__WEBPACK_IMPORTED_MODULE_0__.ReactReduxContext ? _useStore__WEBPACK_IMPORTED_MODULE_1__.useStore : (0,_useStore__WEBPACK_IMPORTED_MODULE_1__.createStoreHook)(context);
return function useDispatch() {
var store = useStore();
return store.dispatch;
};
}
/**
* A hook to access the redux `dispatch` function.
*
* @returns {any|function} redux store's `dispatch` function
*
* @example
*
* import React, { useCallback } from 'react'
* import { useDispatch } from 'react-redux'
*
* export const CounterComponent = ({ value }) => {
* const dispatch = useDispatch()
* const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])
* return (
* <div>
* <span>{value}</span>
* <button onClick={increaseCounter}>Increase counter</button>
* </div>
* )
* }
*/
var useDispatch = /*#__PURE__*/createDispatchHook();
/***/ }),
/***/ "./node_modules/react-redux/es/hooks/useReduxContext.js":
/*!**************************************************************!*\
!*** ./node_modules/react-redux/es/hooks/useReduxContext.js ***!
\**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useReduxContext: () => (/* binding */ useReduxContext)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Context */ "./node_modules/react-redux/es/components/Context.js");
/**
* A hook to access the value of the `ReactReduxContext`. This is a low-level
* hook that you should usually not need to call directly.
*
* @returns {any} the value of the `ReactReduxContext`
*
* @example
*
* import React from 'react'
* import { useReduxContext } from 'react-redux'
*
* export const CounterComponent = ({ value }) => {
* const { store } = useReduxContext()
* return <div>{store.getState()}</div>
* }
*/
function useReduxContext() {
var contextValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_components_Context__WEBPACK_IMPORTED_MODULE_1__.ReactReduxContext);
if ( true && !contextValue) {
throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');
}
return contextValue;
}
/***/ }),
/***/ "./node_modules/react-redux/es/hooks/useSelector.js":
/*!**********************************************************!*\
!*** ./node_modules/react-redux/es/hooks/useSelector.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ createSelectorHook: () => (/* binding */ createSelectorHook),
/* harmony export */ useSelector: () => (/* binding */ useSelector)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useReduxContext */ "./node_modules/react-redux/es/hooks/useReduxContext.js");
/* harmony import */ var _utils_Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/Subscription */ "./node_modules/react-redux/es/utils/Subscription.js");
/* harmony import */ var _utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/useIsomorphicLayoutEffect */ "./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js");
/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/Context */ "./node_modules/react-redux/es/components/Context.js");
var refEquality = function refEquality(a, b) {
return a === b;
};
function useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {
var _useReducer = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(function (s) {
return s + 1;
}, 0),
forceRender = _useReducer[1];
var subscription = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(function () {
return (0,_utils_Subscription__WEBPACK_IMPORTED_MODULE_2__.createSubscription)(store, contextSub);
}, [store, contextSub]);
var latestSubscriptionCallbackError = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
var latestSelector = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
var latestStoreState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
var latestSelectedState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
var storeState = store.getState();
var selectedState;
try {
if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {
var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references
if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {
selectedState = newSelectedState;
} else {
selectedState = latestSelectedState.current;
}
} else {
selectedState = latestSelectedState.current;
}
} catch (err) {
if (latestSubscriptionCallbackError.current) {
err.message += "\nThe error may be correlated with this previous error:\n" + latestSubscriptionCallbackError.current.stack + "\n\n";
}
throw err;
}
(0,_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__.useIsomorphicLayoutEffect)(function () {
latestSelector.current = selector;
latestStoreState.current = storeState;
latestSelectedState.current = selectedState;
latestSubscriptionCallbackError.current = undefined;
});
(0,_utils_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_3__.useIsomorphicLayoutEffect)(function () {
function checkForUpdates() {
try {
var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed
if (newStoreState === latestStoreState.current) {
return;
}
var _newSelectedState = latestSelector.current(newStoreState);
if (equalityFn(_newSelectedState, latestSelectedState.current)) {
return;
}
latestSelectedState.current = _newSelectedState;
latestStoreState.current = newStoreState;
} catch (err) {
// we ignore all errors here, since when the component
// is re-rendered, the selectors are called again, and
// will throw again, if neither props nor store state
// changed
latestSubscriptionCallbackError.current = err;
}
forceRender();
}
subscription.onStateChange = checkForUpdates;
subscription.trySubscribe();
checkForUpdates();
return function () {
return subscription.tryUnsubscribe();
};
}, [store, subscription]);
return selectedState;
}
/**
* Hook factory, which creates a `useSelector` hook bound to a given context.
*
* @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
* @returns {Function} A `useSelector` hook bound to the specified context.
*/
function createSelectorHook(context) {
if (context === void 0) {
context = _components_Context__WEBPACK_IMPORTED_MODULE_4__.ReactReduxContext;
}
var useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_4__.ReactReduxContext ? _useReduxContext__WEBPACK_IMPORTED_MODULE_1__.useReduxContext : function () {
return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(context);
};
return function useSelector(selector, equalityFn) {
if (equalityFn === void 0) {
equalityFn = refEquality;
}
if (true) {
if (!selector) {
throw new Error("You must pass a selector to useSelector");
}
if (typeof selector !== 'function') {
throw new Error("You must pass a function as a selector to useSelector");
}
if (typeof equalityFn !== 'function') {
throw new Error("You must pass a function as an equality function to useSelector");
}
}
var _useReduxContext = useReduxContext(),
store = _useReduxContext.store,
contextSub = _useReduxContext.subscription;
var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);
(0,react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue)(selectedState);
return selectedState;
};
}
/**
* A hook to access the redux store's state. This hook takes a selector function
* as an argument. The selector is called with the store state.
*
* This hook takes an optional equality comparison function as the second parameter
* that allows you to customize the way the selected state is compared to determine
* whether the component needs to be re-rendered.
*
* @param {Function} selector the selector function
* @param {Function=} equalityFn the function that will be used to determine equality
*
* @returns {any} the selected state
*
* @example
*
* import React from 'react'
* import { useSelector } from 'react-redux'
*
* export const CounterComponent = () => {
* const counter = useSelector(state => state.counter)
* return <div>{counter}</div>
* }
*/
var useSelector = /*#__PURE__*/createSelectorHook();
/***/ }),
/***/ "./node_modules/react-redux/es/hooks/useStore.js":
/*!*******************************************************!*\
!*** ./node_modules/react-redux/es/hooks/useStore.js ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ createStoreHook: () => (/* binding */ createStoreHook),
/* harmony export */ useStore: () => (/* binding */ useStore)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _components_Context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Context */ "./node_modules/react-redux/es/components/Context.js");
/* harmony import */ var _useReduxContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useReduxContext */ "./node_modules/react-redux/es/hooks/useReduxContext.js");
/**
* Hook factory, which creates a `useStore` hook bound to a given context.
*
* @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
* @returns {Function} A `useStore` hook bound to the specified context.
*/
function createStoreHook(context) {
if (context === void 0) {
context = _components_Context__WEBPACK_IMPORTED_MODULE_1__.ReactReduxContext;
}
var useReduxContext = context === _components_Context__WEBPACK_IMPORTED_MODULE_1__.ReactReduxContext ? _useReduxContext__WEBPACK_IMPORTED_MODULE_2__.useReduxContext : function () {
return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(context);
};
return function useStore() {
var _useReduxContext = useReduxContext(),
store = _useReduxContext.store;
return store;
};
}
/**
* A hook to access the redux store.
*
* @returns {any} the redux store
*
* @example
*
* import React from 'react'
* import { useStore } from 'react-redux'
*
* export const ExampleComponent = () => {
* const store = useStore()
* return <div>{store.getState()}</div>
* }
*/
var useStore = /*#__PURE__*/createStoreHook();
/***/ }),
/***/ "./node_modules/react-redux/es/index.js":
/*!**********************************************!*\
!*** ./node_modules/react-redux/es/index.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Provider: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.Provider),
/* harmony export */ ReactReduxContext: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.ReactReduxContext),
/* harmony export */ batch: () => (/* reexport safe */ _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates),
/* harmony export */ connect: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.connect),
/* harmony export */ connectAdvanced: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.connectAdvanced),
/* harmony export */ createDispatchHook: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.createDispatchHook),
/* harmony export */ createSelectorHook: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.createSelectorHook),
/* harmony export */ createStoreHook: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.createStoreHook),
/* harmony export */ shallowEqual: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.shallowEqual),
/* harmony export */ useDispatch: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.useDispatch),
/* harmony export */ useSelector: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.useSelector),
/* harmony export */ useStore: () => (/* reexport safe */ _exports__WEBPACK_IMPORTED_MODULE_0__.useStore)
/* harmony export */ });
/* harmony import */ var _exports__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./exports */ "./node_modules/react-redux/es/exports.js");
/* harmony import */ var _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/reactBatchedUpdates */ "./node_modules/react-redux/es/utils/reactBatchedUpdates.js");
/* harmony import */ var _utils_batch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/batch */ "./node_modules/react-redux/es/utils/batch.js");
// Enable batched updates in our subscriptions for use
// with standard React renderers (ReactDOM, React Native)
(0,_utils_batch__WEBPACK_IMPORTED_MODULE_2__.setBatch)(_utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates);
/***/ }),
/***/ "./node_modules/react-redux/es/utils/Subscription.js":
/*!***********************************************************!*\
!*** ./node_modules/react-redux/es/utils/Subscription.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ createSubscription: () => (/* binding */ createSubscription)
/* harmony export */ });
/* harmony import */ var _batch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./batch */ "./node_modules/react-redux/es/utils/batch.js");
// encapsulates the subscription logic for connecting a component to the redux store, as
// well as nesting subscriptions of descendant components, so that we can ensure the
// ancestor components re-render before descendants
function createListenerCollection() {
var batch = (0,_batch__WEBPACK_IMPORTED_MODULE_0__.getBatch)();
var first = null;
var last = null;
return {
clear: function clear() {
first = null;
last = null;
},
notify: function notify() {
batch(function () {
var listener = first;
while (listener) {
listener.callback();
listener = listener.next;
}
});
},
get: function get() {
var listeners = [];
var listener = first;
while (listener) {
listeners.push(listener);
listener = listener.next;
}
return listeners;
},
subscribe: function subscribe(callback) {
var isSubscribed = true;
var listener = last = {
callback: callback,
next: null,
prev: last
};
if (listener.prev) {
listener.prev.next = listener;
} else {
first = listener;
}
return function unsubscribe() {
if (!isSubscribed || first === null) return;
isSubscribed = false;
if (listener.next) {
listener.next.prev = listener.prev;
} else {
last = listener.prev;
}
if (listener.prev) {
listener.prev.next = listener.next;
} else {
first = listener.next;
}
};
}
};
}
var nullListeners = {
notify: function notify() {},
get: function get() {
return [];
}
};
function createSubscription(store, parentSub) {
var unsubscribe;
var listeners = nullListeners;
function addNestedSub(listener) {
trySubscribe();
return listeners.subscribe(listener);
}
function notifyNestedSubs() {
listeners.notify();
}
function handleChangeWrapper() {
if (subscription.onStateChange) {
subscription.onStateChange();
}
}
function isSubscribed() {
return Boolean(unsubscribe);
}
function trySubscribe() {
if (!unsubscribe) {
unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);
listeners = createListenerCollection();
}
}
function tryUnsubscribe() {
if (unsubscribe) {
unsubscribe();
unsubscribe = undefined;
listeners.clear();
listeners = nullListeners;
}
}
var subscription = {
addNestedSub: addNestedSub,
notifyNestedSubs: notifyNestedSubs,
handleChangeWrapper: handleChangeWrapper,
isSubscribed: isSubscribed,
trySubscribe: trySubscribe,
tryUnsubscribe: tryUnsubscribe,
getListeners: function getListeners() {
return listeners;
}
};
return subscription;
}
/***/ }),
/***/ "./node_modules/react-redux/es/utils/batch.js":
/*!****************************************************!*\
!*** ./node_modules/react-redux/es/utils/batch.js ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getBatch: () => (/* binding */ getBatch),
/* harmony export */ setBatch: () => (/* binding */ setBatch)
/* harmony export */ });
// Default to a dummy "batch" implementation that just runs the callback
function defaultNoopBatch(callback) {
callback();
}
var batch = defaultNoopBatch; // Allow injecting another batching function later
var setBatch = function setBatch(newBatch) {
return batch = newBatch;
}; // Supply a getter just to skip dealing with ESM bindings
var getBatch = function getBatch() {
return batch;
};
/***/ }),
/***/ "./node_modules/react-redux/es/utils/bindActionCreators.js":
/*!*****************************************************************!*\
!*** ./node_modules/react-redux/es/utils/bindActionCreators.js ***!
\*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ bindActionCreators)
/* harmony export */ });
function bindActionCreators(actionCreators, dispatch) {
var boundActionCreators = {};
var _loop = function _loop(key) {
var actionCreator = actionCreators[key];
if (typeof actionCreator === 'function') {
boundActionCreators[key] = function () {
return dispatch(actionCreator.apply(void 0, arguments));
};
}
};
for (var key in actionCreators) {
_loop(key);
}
return boundActionCreators;
}
/***/ }),
/***/ "./node_modules/react-redux/es/utils/isPlainObject.js":
/*!************************************************************!*\
!*** ./node_modules/react-redux/es/utils/isPlainObject.js ***!
\************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ isPlainObject)
/* harmony export */ });
/**
* @param {any} obj The object to inspect.
* @returns {boolean} True if the argument appears to be a plain object.
*/
function isPlainObject(obj) {
if (typeof obj !== 'object' || obj === null) return false;
var proto = Object.getPrototypeOf(obj);
if (proto === null) return true;
var baseProto = proto;
while (Object.getPrototypeOf(baseProto) !== null) {
baseProto = Object.getPrototypeOf(baseProto);
}
return proto === baseProto;
}
/***/ }),
/***/ "./node_modules/react-redux/es/utils/reactBatchedUpdates.js":
/*!******************************************************************!*\
!*** ./node_modules/react-redux/es/utils/reactBatchedUpdates.js ***!
\******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ unstable_batchedUpdates: () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.unstable_batchedUpdates)
/* harmony export */ });
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ "react-dom");
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_0__);
/* eslint-disable import/no-unresolved */
/***/ }),
/***/ "./node_modules/react-redux/es/utils/shallowEqual.js":
/*!***********************************************************!*\
!*** ./node_modules/react-redux/es/utils/shallowEqual.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ shallowEqual)
/* harmony export */ });
function is(x, y) {
if (x === y) {
return x !== 0 || y !== 0 || 1 / x === 1 / y;
} else {
return x !== x && y !== y;
}
}
function shallowEqual(objA, objB) {
if (is(objA, objB)) return true;
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
return false;
}
var keysA = Object.keys(objA);
var keysB = Object.keys(objB);
if (keysA.length !== keysB.length) return false;
for (var i = 0; i < keysA.length; i++) {
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
return false;
}
}
return true;
}
/***/ }),
/***/ "./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js":
/*!************************************************************************!*\
!*** ./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js ***!
\************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useIsomorphicLayoutEffect: () => (/* binding */ useIsomorphicLayoutEffect)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
// React currently throws a warning when using useLayoutEffect on the server.
// To get around it, we can conditionally useEffect on the server (no-op) and
// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store
// subscription callback always has the selector from the latest render commit
// available, otherwise a store update may happen between render and the effect,
// which may cause missed updates; we also must ensure the store subscription
// is created synchronously, otherwise a store update may occur before the
// subscription is created and an inconsistent state may be observed
var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;
/***/ }),
/***/ "./node_modules/react-redux/es/utils/verifyPlainObject.js":
/*!****************************************************************!*\
!*** ./node_modules/react-redux/es/utils/verifyPlainObject.js ***!
\****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ verifyPlainObject)
/* harmony export */ });
/* harmony import */ var _isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./isPlainObject */ "./node_modules/react-redux/es/utils/isPlainObject.js");
/* harmony import */ var _warning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./warning */ "./node_modules/react-redux/es/utils/warning.js");
function verifyPlainObject(value, displayName, methodName) {
if (!(0,_isPlainObject__WEBPACK_IMPORTED_MODULE_0__["default"])(value)) {
(0,_warning__WEBPACK_IMPORTED_MODULE_1__["default"])(methodName + "() in " + displayName + " must return a plain object. Instead received " + value + ".");
}
}
/***/ }),
/***/ "./node_modules/react-redux/es/utils/warning.js":
/*!******************************************************!*\
!*** ./node_modules/react-redux/es/utils/warning.js ***!
\******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ warning)
/* harmony export */ });
/**
* Prints a warning in the console if it exists.
*
* @param {String} message The warning message.
* @returns {void}
*/
function warning(message) {
/* eslint-disable no-console */
if (typeof console !== 'undefined' && typeof console.error === 'function') {
console.error(message);
}
/* eslint-enable no-console */
try {
// This error was thrown as a convenience so that if you enable
// "break on all exceptions" in your console,
// it would pause the execution at this line.
throw new Error(message);
/* eslint-disable no-empty */
} catch (e) {}
/* eslint-enable no-empty */
}
/***/ }),
/***/ "./node_modules/react-router-dom/dist/index.js":
/*!*****************************************************!*\
!*** ./node_modules/react-router-dom/dist/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ AbortedDeferredError: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.AbortedDeferredError),
/* harmony export */ Await: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Await),
/* harmony export */ BrowserRouter: () => (/* binding */ BrowserRouter),
/* harmony export */ Form: () => (/* binding */ Form),
/* harmony export */ HashRouter: () => (/* binding */ HashRouter),
/* harmony export */ Link: () => (/* binding */ Link),
/* harmony export */ MemoryRouter: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.MemoryRouter),
/* harmony export */ NavLink: () => (/* binding */ NavLink),
/* harmony export */ Navigate: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Navigate),
/* harmony export */ NavigationType: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Action),
/* harmony export */ Outlet: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Outlet),
/* harmony export */ Route: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Route),
/* harmony export */ Router: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Router),
/* harmony export */ RouterProvider: () => (/* binding */ RouterProvider),
/* harmony export */ Routes: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Routes),
/* harmony export */ ScrollRestoration: () => (/* binding */ ScrollRestoration),
/* harmony export */ UNSAFE_DataRouterContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterContext),
/* harmony export */ UNSAFE_DataRouterStateContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext),
/* harmony export */ UNSAFE_ErrorResponseImpl: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_ErrorResponseImpl),
/* harmony export */ UNSAFE_FetchersContext: () => (/* binding */ FetchersContext),
/* harmony export */ UNSAFE_LocationContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_LocationContext),
/* harmony export */ UNSAFE_NavigationContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext),
/* harmony export */ UNSAFE_RouteContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_RouteContext),
/* harmony export */ UNSAFE_ViewTransitionContext: () => (/* binding */ ViewTransitionContext),
/* harmony export */ UNSAFE_useRouteId: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_useRouteId),
/* harmony export */ UNSAFE_useScrollRestoration: () => (/* binding */ useScrollRestoration),
/* harmony export */ createBrowserRouter: () => (/* binding */ createBrowserRouter),
/* harmony export */ createHashRouter: () => (/* binding */ createHashRouter),
/* harmony export */ createMemoryRouter: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.createMemoryRouter),
/* harmony export */ createPath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createPath),
/* harmony export */ createRoutesFromChildren: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.createRoutesFromChildren),
/* harmony export */ createRoutesFromElements: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.createRoutesFromElements),
/* harmony export */ createSearchParams: () => (/* binding */ createSearchParams),
/* harmony export */ defer: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.defer),
/* harmony export */ generatePath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.generatePath),
/* harmony export */ isRouteErrorResponse: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.isRouteErrorResponse),
/* harmony export */ json: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.json),
/* harmony export */ matchPath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.matchPath),
/* harmony export */ matchRoutes: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.matchRoutes),
/* harmony export */ parsePath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.parsePath),
/* harmony export */ redirect: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.redirect),
/* harmony export */ redirectDocument: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.redirectDocument),
/* harmony export */ renderMatches: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.renderMatches),
/* harmony export */ replace: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.replace),
/* harmony export */ resolvePath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.resolvePath),
/* harmony export */ unstable_HistoryRouter: () => (/* binding */ HistoryRouter),
/* harmony export */ unstable_usePrompt: () => (/* binding */ usePrompt),
/* harmony export */ useActionData: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useActionData),
/* harmony export */ useAsyncError: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useAsyncError),
/* harmony export */ useAsyncValue: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useAsyncValue),
/* harmony export */ useBeforeUnload: () => (/* binding */ useBeforeUnload),
/* harmony export */ useBlocker: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useBlocker),
/* harmony export */ useFetcher: () => (/* binding */ useFetcher),
/* harmony export */ useFetchers: () => (/* binding */ useFetchers),
/* harmony export */ useFormAction: () => (/* binding */ useFormAction),
/* harmony export */ useHref: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useHref),
/* harmony export */ useInRouterContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useInRouterContext),
/* harmony export */ useLinkClickHandler: () => (/* binding */ useLinkClickHandler),
/* harmony export */ useLoaderData: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useLoaderData),
/* harmony export */ useLocation: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation),
/* harmony export */ useMatch: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useMatch),
/* harmony export */ useMatches: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useMatches),
/* harmony export */ useNavigate: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigate),
/* harmony export */ useNavigation: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigation),
/* harmony export */ useNavigationType: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigationType),
/* harmony export */ useOutlet: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useOutlet),
/* harmony export */ useOutletContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useOutletContext),
/* harmony export */ useParams: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useParams),
/* harmony export */ useResolvedPath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath),
/* harmony export */ useRevalidator: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRevalidator),
/* harmony export */ useRouteError: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRouteError),
/* harmony export */ useRouteLoaderData: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRouteLoaderData),
/* harmony export */ useRoutes: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRoutes),
/* harmony export */ useSearchParams: () => (/* binding */ useSearchParams),
/* harmony export */ useSubmit: () => (/* binding */ useSubmit),
/* harmony export */ useViewTransitionState: () => (/* binding */ useViewTransitionState)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js");
/**
* React Router DOM v6.28.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
const defaultMethod = "get";
const defaultEncType = "application/x-www-form-urlencoded";
function isHtmlElement(object) {
return object != null && typeof object.tagName === "string";
}
function isButtonElement(object) {
return isHtmlElement(object) && object.tagName.toLowerCase() === "button";
}
function isFormElement(object) {
return isHtmlElement(object) && object.tagName.toLowerCase() === "form";
}
function isInputElement(object) {
return isHtmlElement(object) && object.tagName.toLowerCase() === "input";
}
function isModifiedEvent(event) {
return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
}
function shouldProcessLinkClick(event, target) {
return event.button === 0 && (
// Ignore everything but left clicks
!target || target === "_self") &&
// Let browser handle "target=_blank" etc.
!isModifiedEvent(event) // Ignore clicks with modifier keys
;
}
/**
* Creates a URLSearchParams object using the given initializer.
*
* This is identical to `new URLSearchParams(init)` except it also
* supports arrays as values in the object form of the initializer
* instead of just strings. This is convenient when you need multiple
* values for a given key, but don't want to use an array initializer.
*
* For example, instead of:
*
* let searchParams = new URLSearchParams([
* ['sort', 'name'],
* ['sort', 'price']
* ]);
*
* you can do:
*
* let searchParams = createSearchParams({
* sort: ['name', 'price']
* });
*/
function createSearchParams(init) {
if (init === void 0) {
init = "";
}
return new URLSearchParams(typeof init === "string" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {
let value = init[key];
return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);
}, []));
}
function getSearchParamsForLocation(locationSearch, defaultSearchParams) {
let searchParams = createSearchParams(locationSearch);
if (defaultSearchParams) {
// Use `defaultSearchParams.forEach(...)` here instead of iterating of
// `defaultSearchParams.keys()` to work-around a bug in Firefox related to
// web extensions. Relevant Bugzilla tickets:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1414602
// https://bugzilla.mozilla.org/show_bug.cgi?id=1023984
defaultSearchParams.forEach((_, key) => {
if (!searchParams.has(key)) {
defaultSearchParams.getAll(key).forEach(value => {
searchParams.append(key, value);
});
}
});
}
return searchParams;
}
// One-time check for submitter support
let _formDataSupportsSubmitter = null;
function isFormDataSubmitterSupported() {
if (_formDataSupportsSubmitter === null) {
try {
new FormData(document.createElement("form"),
// @ts-expect-error if FormData supports the submitter parameter, this will throw
0);
_formDataSupportsSubmitter = false;
} catch (e) {
_formDataSupportsSubmitter = true;
}
}
return _formDataSupportsSubmitter;
}
const supportedFormEncTypes = new Set(["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]);
function getFormEncType(encType) {
if (encType != null && !supportedFormEncTypes.has(encType)) {
true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(false, "\"" + encType + "\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` " + ("and will default to \"" + defaultEncType + "\"")) : 0;
return null;
}
return encType;
}
function getFormSubmissionInfo(target, basename) {
let method;
let action;
let encType;
let formData;
let body;
if (isFormElement(target)) {
// When grabbing the action from the element, it will have had the basename
// prefixed to ensure non-JS scenarios work, so strip it since we'll
// re-prefix in the router
let attr = target.getAttribute("action");
action = attr ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(attr, basename) : null;
method = target.getAttribute("method") || defaultMethod;
encType = getFormEncType(target.getAttribute("enctype")) || defaultEncType;
formData = new FormData(target);
} else if (isButtonElement(target) || isInputElement(target) && (target.type === "submit" || target.type === "image")) {
let form = target.form;
if (form == null) {
throw new Error("Cannot submit a <button> or <input type=\"submit\"> without a <form>");
}
// <button>/<input type="submit"> may override attributes of <form>
// When grabbing the action from the element, it will have had the basename
// prefixed to ensure non-JS scenarios work, so strip it since we'll
// re-prefix in the router
let attr = target.getAttribute("formaction") || form.getAttribute("action");
action = attr ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(attr, basename) : null;
method = target.getAttribute("formmethod") || form.getAttribute("method") || defaultMethod;
encType = getFormEncType(target.getAttribute("formenctype")) || getFormEncType(form.getAttribute("enctype")) || defaultEncType;
// Build a FormData object populated from a form and submitter
formData = new FormData(form, target);
// If this browser doesn't support the `FormData(el, submitter)` format,
// then tack on the submitter value at the end. This is a lightweight
// solution that is not 100% spec compliant. For complete support in older
// browsers, consider using the `formdata-submitter-polyfill` package
if (!isFormDataSubmitterSupported()) {
let {
name,
type,
value
} = target;
if (type === "image") {
let prefix = name ? name + "." : "";
formData.append(prefix + "x", "0");
formData.append(prefix + "y", "0");
} else if (name) {
formData.append(name, value);
}
}
} else if (isHtmlElement(target)) {
throw new Error("Cannot submit element that is not <form>, <button>, or " + "<input type=\"submit|image\">");
} else {
method = defaultMethod;
action = null;
encType = defaultEncType;
body = target;
}
// Send body for <Form encType="text/plain" so we encode it into text
if (formData && encType === "text/plain") {
body = formData;
formData = undefined;
}
return {
action,
method: method.toLowerCase(),
encType,
formData,
body
};
}
const _excluded = ["onClick", "relative", "reloadDocument", "replace", "state", "target", "to", "preventScrollReset", "viewTransition"],
_excluded2 = ["aria-current", "caseSensitive", "className", "end", "style", "to", "viewTransition", "children"],
_excluded3 = ["fetcherKey", "navigate", "reloadDocument", "replace", "state", "method", "action", "onSubmit", "relative", "preventScrollReset", "viewTransition"];
// HEY YOU! DON'T TOUCH THIS VARIABLE!
//
// It is replaced with the proper version at build time via a babel plugin in
// the rollup config.
//
// Export a global property onto the window for React Router detection by the
// Core Web Vitals Technology Report. This way they can configure the `wappalyzer`
// to detect and properly classify live websites as being built with React Router:
// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json
const REACT_ROUTER_VERSION = "6";
try {
window.__reactRouterVersion = REACT_ROUTER_VERSION;
} catch (e) {
// no-op
}
function createBrowserRouter(routes, opts) {
return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createRouter)({
basename: opts == null ? void 0 : opts.basename,
future: _extends({}, opts == null ? void 0 : opts.future, {
v7_prependBasename: true
}),
history: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createBrowserHistory)({
window: opts == null ? void 0 : opts.window
}),
hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),
routes,
mapRouteProperties: react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_mapRouteProperties,
dataStrategy: opts == null ? void 0 : opts.dataStrategy,
patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,
window: opts == null ? void 0 : opts.window
}).initialize();
}
function createHashRouter(routes, opts) {
return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createRouter)({
basename: opts == null ? void 0 : opts.basename,
future: _extends({}, opts == null ? void 0 : opts.future, {
v7_prependBasename: true
}),
history: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createHashHistory)({
window: opts == null ? void 0 : opts.window
}),
hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),
routes,
mapRouteProperties: react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_mapRouteProperties,
dataStrategy: opts == null ? void 0 : opts.dataStrategy,
patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,
window: opts == null ? void 0 : opts.window
}).initialize();
}
function parseHydrationData() {
var _window;
let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;
if (state && state.errors) {
state = _extends({}, state, {
errors: deserializeErrors(state.errors)
});
}
return state;
}
function deserializeErrors(errors) {
if (!errors) return null;
let entries = Object.entries(errors);
let serialized = {};
for (let [key, val] of entries) {
// Hey you! If you change this, please change the corresponding logic in
// serializeErrors in react-router-dom/server.tsx :)
if (val && val.__type === "RouteErrorResponse") {
serialized[key] = new react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);
} else if (val && val.__type === "Error") {
// Attempt to reconstruct the right type of Error (i.e., ReferenceError)
if (val.__subType) {
let ErrorConstructor = window[val.__subType];
if (typeof ErrorConstructor === "function") {
try {
// @ts-expect-error
let error = new ErrorConstructor(val.message);
// Wipe away the client-side stack trace. Nothing to fill it in with
// because we don't serialize SSR stack traces for security reasons
error.stack = "";
serialized[key] = error;
} catch (e) {
// no-op - fall through and create a normal Error
}
}
}
if (serialized[key] == null) {
let error = new Error(val.message);
// Wipe away the client-side stack trace. Nothing to fill it in with
// because we don't serialize SSR stack traces for security reasons
error.stack = "";
serialized[key] = error;
}
} else {
serialized[key] = val;
}
}
return serialized;
}
const ViewTransitionContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({
isTransitioning: false
});
if (true) {
ViewTransitionContext.displayName = "ViewTransition";
}
const FetchersContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(new Map());
if (true) {
FetchersContext.displayName = "Fetchers";
}
//#endregion
////////////////////////////////////////////////////////////////////////////////
//#region Components
////////////////////////////////////////////////////////////////////////////////
/**
Webpack + React 17 fails to compile on any of the following because webpack
complains that `startTransition` doesn't exist in `React`:
* import { startTransition } from "react"
* import * as React from from "react";
"startTransition" in React ? React.startTransition(() => setState()) : setState()
* import * as React from from "react";
"startTransition" in React ? React["startTransition"](() => setState()) : setState()
Moving it to a constant such as the following solves the Webpack/React 17 issue:
* import * as React from from "react";
const START_TRANSITION = "startTransition";
START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()
However, that introduces webpack/terser minification issues in production builds
in React 18 where minification/obfuscation ends up removing the call of
React.startTransition entirely from the first half of the ternary. Grabbing
this exported reference once up front resolves that issue.
See https://github.com/remix-run/react-router/issues/10579
*/
const START_TRANSITION = "startTransition";
const startTransitionImpl = react__WEBPACK_IMPORTED_MODULE_0__[START_TRANSITION];
const FLUSH_SYNC = "flushSync";
const flushSyncImpl = react_dom__WEBPACK_IMPORTED_MODULE_1__[FLUSH_SYNC];
const USE_ID = "useId";
const useIdImpl = react__WEBPACK_IMPORTED_MODULE_0__[USE_ID];
function startTransitionSafe(cb) {
if (startTransitionImpl) {
startTransitionImpl(cb);
} else {
cb();
}
}
function flushSyncSafe(cb) {
if (flushSyncImpl) {
flushSyncImpl(cb);
} else {
cb();
}
}
class Deferred {
constructor() {
this.status = "pending";
this.promise = new Promise((resolve, reject) => {
this.resolve = value => {
if (this.status === "pending") {
this.status = "resolved";
resolve(value);
}
};
this.reject = reason => {
if (this.status === "pending") {
this.status = "rejected";
reject(reason);
}
};
});
}
}
/**
* Given a Remix Router instance, render the appropriate UI
*/
function RouterProvider(_ref) {
let {
fallbackElement,
router,
future
} = _ref;
let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState(router.state);
let [pendingState, setPendingState] = react__WEBPACK_IMPORTED_MODULE_0__.useState();
let [vtContext, setVtContext] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
isTransitioning: false
});
let [renderDfd, setRenderDfd] = react__WEBPACK_IMPORTED_MODULE_0__.useState();
let [transition, setTransition] = react__WEBPACK_IMPORTED_MODULE_0__.useState();
let [interruption, setInterruption] = react__WEBPACK_IMPORTED_MODULE_0__.useState();
let fetcherData = react__WEBPACK_IMPORTED_MODULE_0__.useRef(new Map());
let {
v7_startTransition
} = future || {};
let optInStartTransition = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(cb => {
if (v7_startTransition) {
startTransitionSafe(cb);
} else {
cb();
}
}, [v7_startTransition]);
let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((newState, _ref2) => {
let {
deletedFetchers,
flushSync: flushSync,
viewTransitionOpts: viewTransitionOpts
} = _ref2;
deletedFetchers.forEach(key => fetcherData.current.delete(key));
newState.fetchers.forEach((fetcher, key) => {
if (fetcher.data !== undefined) {
fetcherData.current.set(key, fetcher.data);
}
});
let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== "function";
// If this isn't a view transition or it's not available in this browser,
// just update and be done with it
if (!viewTransitionOpts || isViewTransitionUnavailable) {
if (flushSync) {
flushSyncSafe(() => setStateImpl(newState));
} else {
optInStartTransition(() => setStateImpl(newState));
}
return;
}
// flushSync + startViewTransition
if (flushSync) {
// Flush through the context to mark DOM elements as transition=ing
flushSyncSafe(() => {
// Cancel any pending transitions
if (transition) {
renderDfd && renderDfd.resolve();
transition.skipTransition();
}
setVtContext({
isTransitioning: true,
flushSync: true,
currentLocation: viewTransitionOpts.currentLocation,
nextLocation: viewTransitionOpts.nextLocation
});
});
// Update the DOM
let t = router.window.document.startViewTransition(() => {
flushSyncSafe(() => setStateImpl(newState));
});
// Clean up after the animation completes
t.finished.finally(() => {
flushSyncSafe(() => {
setRenderDfd(undefined);
setTransition(undefined);
setPendingState(undefined);
setVtContext({
isTransitioning: false
});
});
});
flushSyncSafe(() => setTransition(t));
return;
}
// startTransition + startViewTransition
if (transition) {
// Interrupting an in-progress transition, cancel and let everything flush
// out, and then kick off a new transition from the interruption state
renderDfd && renderDfd.resolve();
transition.skipTransition();
setInterruption({
state: newState,
currentLocation: viewTransitionOpts.currentLocation,
nextLocation: viewTransitionOpts.nextLocation
});
} else {
// Completed navigation update with opted-in view transitions, let 'er rip
setPendingState(newState);
setVtContext({
isTransitioning: true,
flushSync: false,
currentLocation: viewTransitionOpts.currentLocation,
nextLocation: viewTransitionOpts.nextLocation
});
}
}, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);
// Need to use a layout effect here so we are subscribed early enough to
// pick up on any render-driven redirects/navigations (useEffect/<Navigate>)
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => router.subscribe(setState), [router, setState]);
// When we start a view transition, create a Deferred we can use for the
// eventual "completed" render
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (vtContext.isTransitioning && !vtContext.flushSync) {
setRenderDfd(new Deferred());
}
}, [vtContext]);
// Once the deferred is created, kick off startViewTransition() to update the
// DOM and then wait on the Deferred to resolve (indicating the DOM update has
// happened)
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (renderDfd && pendingState && router.window) {
let newState = pendingState;
let renderPromise = renderDfd.promise;
let transition = router.window.document.startViewTransition(async () => {
optInStartTransition(() => setStateImpl(newState));
await renderPromise;
});
transition.finished.finally(() => {
setRenderDfd(undefined);
setTransition(undefined);
setPendingState(undefined);
setVtContext({
isTransitioning: false
});
});
setTransition(transition);
}
}, [optInStartTransition, pendingState, renderDfd, router.window]);
// When the new location finally renders and is committed to the DOM, this
// effect will run to resolve the transition
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (renderDfd && pendingState && state.location.key === pendingState.location.key) {
renderDfd.resolve();
}
}, [renderDfd, transition, state.location, pendingState]);
// If we get interrupted with a new navigation during a transition, we skip
// the active transition, let it cleanup, then kick it off again here
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (!vtContext.isTransitioning && interruption) {
setPendingState(interruption.state);
setVtContext({
isTransitioning: true,
flushSync: false,
currentLocation: interruption.currentLocation,
nextLocation: interruption.nextLocation
});
setInterruption(undefined);
}
}, [vtContext.isTransitioning, interruption]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(fallbackElement == null || !router.future.v7_partialHydration, "`<RouterProvider fallbackElement>` is deprecated when using " + "`v7_partialHydration`, use a `HydrateFallback` component instead") : 0;
// Only log this once on initial mount
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
let navigator = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {
return {
createHref: router.createHref,
encodeLocation: router.encodeLocation,
go: n => router.navigate(n),
push: (to, state, opts) => router.navigate(to, {
state,
preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
}),
replace: (to, state, opts) => router.navigate(to, {
replace: true,
state,
preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
})
};
}, [router]);
let basename = router.basename || "/";
let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({
router,
navigator,
static: false,
basename
}), [router, navigator, basename]);
let routerFuture = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({
v7_relativeSplatPath: router.future.v7_relativeSplatPath
}), [router.future.v7_relativeSplatPath]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future, router.future), [future, router.future]);
// The fragment and {null} here are important! We need them to keep React 18's
// useId happy when we are server-rendering since we may have a <script> here
// containing the hydrated server-side staticContext (from StaticRouterProvider).
// useId relies on the component tree structure to generate deterministic id's
// so we need to ensure it remains the same on the client even though
// we don't need the <script> tag
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterContext.Provider, {
value: dataRouterContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext.Provider, {
value: state
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FetchersContext.Provider, {
value: fetcherData.current
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ViewTransitionContext.Provider, {
value: vtContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, {
basename: basename,
location: state.location,
navigationType: state.historyAction,
navigator: navigator,
future: routerFuture
}, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MemoizedDataRoutes, {
routes: router.routes,
future: router.future,
state: state
}) : fallbackElement))))), null);
}
// Memoize to avoid re-renders when updating `ViewTransitionContext`
const MemoizedDataRoutes = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo(DataRoutes);
function DataRoutes(_ref3) {
let {
routes,
future,
state
} = _ref3;
return (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_useRoutesImpl)(routes, undefined, state, future);
}
/**
* A `<Router>` for use in web browsers. Provides the cleanest URLs.
*/
function BrowserRouter(_ref4) {
let {
basename,
children,
future,
window
} = _ref4;
let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
if (historyRef.current == null) {
historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createBrowserHistory)({
window,
v5Compat: true
});
}
let history = historyRef.current;
let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
action: history.action,
location: history.location
});
let {
v7_startTransition
} = future || {};
let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => {
v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);
}, [setStateImpl, v7_startTransition]);
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future), [future]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, {
basename: basename,
children: children,
location: state.location,
navigationType: state.action,
navigator: history,
future: future
});
}
/**
* A `<Router>` for use in web browsers. Stores the location in the hash
* portion of the URL so it is not sent to the server.
*/
function HashRouter(_ref5) {
let {
basename,
children,
future,
window
} = _ref5;
let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
if (historyRef.current == null) {
historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createHashHistory)({
window,
v5Compat: true
});
}
let history = historyRef.current;
let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
action: history.action,
location: history.location
});
let {
v7_startTransition
} = future || {};
let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => {
v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);
}, [setStateImpl, v7_startTransition]);
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future), [future]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, {
basename: basename,
children: children,
location: state.location,
navigationType: state.action,
navigator: history,
future: future
});
}
/**
* A `<Router>` that accepts a pre-instantiated history object. It's important
* to note that using your own history object is highly discouraged and may add
* two versions of the history library to your bundles unless you use the same
* version of the history library that React Router uses internally.
*/
function HistoryRouter(_ref6) {
let {
basename,
children,
future,
history
} = _ref6;
let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
action: history.action,
location: history.location
});
let {
v7_startTransition
} = future || {};
let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => {
v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);
}, [setStateImpl, v7_startTransition]);
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future), [future]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, {
basename: basename,
children: children,
location: state.location,
navigationType: state.action,
navigator: history,
future: future
});
}
if (true) {
HistoryRouter.displayName = "unstable_HistoryRouter";
}
const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined";
const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
/**
* The public API for rendering a history-aware `<a>`.
*/
const Link = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function LinkWithRef(_ref7, ref) {
let {
onClick,
relative,
reloadDocument,
replace,
state,
target,
to,
preventScrollReset,
viewTransition
} = _ref7,
rest = _objectWithoutPropertiesLoose(_ref7, _excluded);
let {
basename
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext);
// Rendered into <a href> for absolute URLs
let absoluteHref;
let isExternal = false;
if (typeof to === "string" && ABSOLUTE_URL_REGEX.test(to)) {
// Render the absolute href server- and client-side
absoluteHref = to;
// Only check for external origins client-side
if (isBrowser) {
try {
let currentUrl = new URL(window.location.href);
let targetUrl = to.startsWith("//") ? new URL(currentUrl.protocol + to) : new URL(to);
let path = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(targetUrl.pathname, basename);
if (targetUrl.origin === currentUrl.origin && path != null) {
// Strip the protocol/origin/basename for same-origin absolute URLs
to = path + targetUrl.search + targetUrl.hash;
} else {
isExternal = true;
}
} catch (e) {
// We can't do external URL detection without a valid URL
true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(false, "<Link to=\"" + to + "\"> contains an invalid URL which will probably break " + "when clicked - please update to a valid URL path.") : 0;
}
}
}
// Rendered into <a href> for relative URLs
let href = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useHref)(to, {
relative
});
let internalOnClick = useLinkClickHandler(to, {
replace,
state,
target,
preventScrollReset,
relative,
viewTransition
});
function handleClick(event) {
if (onClick) onClick(event);
if (!event.defaultPrevented) {
internalOnClick(event);
}
}
return (
/*#__PURE__*/
// eslint-disable-next-line jsx-a11y/anchor-has-content
react__WEBPACK_IMPORTED_MODULE_0__.createElement("a", _extends({}, rest, {
href: absoluteHref || href,
onClick: isExternal || reloadDocument ? onClick : handleClick,
ref: ref,
target: target
}))
);
});
if (true) {
Link.displayName = "Link";
}
/**
* A `<Link>` wrapper that knows if it's "active" or not.
*/
const NavLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function NavLinkWithRef(_ref8, ref) {
let {
"aria-current": ariaCurrentProp = "page",
caseSensitive = false,
className: classNameProp = "",
end = false,
style: styleProp,
to,
viewTransition,
children
} = _ref8,
rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);
let path = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(to, {
relative: rest.relative
});
let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)();
let routerState = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext);
let {
navigator,
basename
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext);
let isTransitioning = routerState != null &&
// Conditional usage is OK here because the usage of a data router is static
// eslint-disable-next-line react-hooks/rules-of-hooks
useViewTransitionState(path) && viewTransition === true;
let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;
let locationPathname = location.pathname;
let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;
if (!caseSensitive) {
locationPathname = locationPathname.toLowerCase();
nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;
toPathname = toPathname.toLowerCase();
}
if (nextLocationPathname && basename) {
nextLocationPathname = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(nextLocationPathname, basename) || nextLocationPathname;
}
// If the `to` has a trailing slash, look at that exact spot. Otherwise,
// we're looking for a slash _after_ what's in `to`. For example:
//
// <NavLink to="/users"> and <NavLink to="/users/">
// both want to look for a / at index 6 to match URL `/users/matt`
const endSlashPosition = toPathname !== "/" && toPathname.endsWith("/") ? toPathname.length - 1 : toPathname.length;
let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === "/";
let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === "/");
let renderProps = {
isActive,
isPending,
isTransitioning
};
let ariaCurrent = isActive ? ariaCurrentProp : undefined;
let className;
if (typeof classNameProp === "function") {
className = classNameProp(renderProps);
} else {
// If the className prop is not a function, we use a default `active`
// class for <NavLink />s that are active. In v5 `active` was the default
// value for `activeClassName`, but we are removing that API and can still
// use the old default behavior for a cleaner upgrade path and keep the
// simple styling rules working as they currently do.
className = [classNameProp, isActive ? "active" : null, isPending ? "pending" : null, isTransitioning ? "transitioning" : null].filter(Boolean).join(" ");
}
let style = typeof styleProp === "function" ? styleProp(renderProps) : styleProp;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Link, _extends({}, rest, {
"aria-current": ariaCurrent,
className: className,
ref: ref,
style: style,
to: to,
viewTransition: viewTransition
}), typeof children === "function" ? children(renderProps) : children);
});
if (true) {
NavLink.displayName = "NavLink";
}
/**
* A `@remix-run/router`-aware `<form>`. It behaves like a normal form except
* that the interaction with the server is with `fetch` instead of new document
* requests, allowing components to add nicer UX to the page as the form is
* submitted and returns with data.
*/
const Form = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((_ref9, forwardedRef) => {
let {
fetcherKey,
navigate,
reloadDocument,
replace,
state,
method = defaultMethod,
action,
onSubmit,
relative,
preventScrollReset,
viewTransition
} = _ref9,
props = _objectWithoutPropertiesLoose(_ref9, _excluded3);
let submit = useSubmit();
let formAction = useFormAction(action, {
relative
});
let formMethod = method.toLowerCase() === "get" ? "get" : "post";
let submitHandler = event => {
onSubmit && onSubmit(event);
if (event.defaultPrevented) return;
event.preventDefault();
let submitter = event.nativeEvent.submitter;
let submitMethod = (submitter == null ? void 0 : submitter.getAttribute("formmethod")) || method;
submit(submitter || event.currentTarget, {
fetcherKey,
method: submitMethod,
navigate,
replace,
state,
relative,
preventScrollReset,
viewTransition
});
};
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("form", _extends({
ref: forwardedRef,
method: formMethod,
action: formAction,
onSubmit: reloadDocument ? onSubmit : submitHandler
}, props));
});
if (true) {
Form.displayName = "Form";
}
/**
* This component will emulate the browser's scroll restoration on location
* changes.
*/
function ScrollRestoration(_ref10) {
let {
getKey,
storageKey
} = _ref10;
useScrollRestoration({
getKey,
storageKey
});
return null;
}
if (true) {
ScrollRestoration.displayName = "ScrollRestoration";
}
//#endregion
////////////////////////////////////////////////////////////////////////////////
//#region Hooks
////////////////////////////////////////////////////////////////////////////////
var DataRouterHook;
(function (DataRouterHook) {
DataRouterHook["UseScrollRestoration"] = "useScrollRestoration";
DataRouterHook["UseSubmit"] = "useSubmit";
DataRouterHook["UseSubmitFetcher"] = "useSubmitFetcher";
DataRouterHook["UseFetcher"] = "useFetcher";
DataRouterHook["useViewTransitionState"] = "useViewTransitionState";
})(DataRouterHook || (DataRouterHook = {}));
var DataRouterStateHook;
(function (DataRouterStateHook) {
DataRouterStateHook["UseFetcher"] = "useFetcher";
DataRouterStateHook["UseFetchers"] = "useFetchers";
DataRouterStateHook["UseScrollRestoration"] = "useScrollRestoration";
})(DataRouterStateHook || (DataRouterStateHook = {}));
// Internal hooks
function getDataRouterConsoleError(hookName) {
return hookName + " must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router.";
}
function useDataRouterContext(hookName) {
let ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterContext);
!ctx ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
return ctx;
}
function useDataRouterState(hookName) {
let state = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext);
!state ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
return state;
}
// External hooks
/**
* Handles the click behavior for router `<Link>` components. This is useful if
* you need to create custom `<Link>` components with the same click behavior we
* use in our exported `<Link>`.
*/
function useLinkClickHandler(to, _temp) {
let {
target,
replace: replaceProp,
state,
preventScrollReset,
relative,
viewTransition
} = _temp === void 0 ? {} : _temp;
let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigate)();
let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)();
let path = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(to, {
relative
});
return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(event => {
if (shouldProcessLinkClick(event, target)) {
event.preventDefault();
// If the URL hasn't changed, a regular <a> will do a replace instead of
// a push, so do the same here unless the replace prop is explicitly set
let replace = replaceProp !== undefined ? replaceProp : (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createPath)(location) === (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createPath)(path);
navigate(to, {
replace,
state,
preventScrollReset,
relative,
viewTransition
});
}
}, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]);
}
/**
* A convenient wrapper for reading and writing search parameters via the
* URLSearchParams interface.
*/
function useSearchParams(defaultInit) {
true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(typeof URLSearchParams !== "undefined", "You cannot use the `useSearchParams` hook in a browser that does not " + "support the URLSearchParams API. If you need to support Internet " + "Explorer 11, we recommend you load a polyfill such as " + "https://github.com/ungap/url-search-params.") : 0;
let defaultSearchParamsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(createSearchParams(defaultInit));
let hasSetSearchParamsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);
let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)();
let searchParams = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() =>
// Only merge in the defaults if we haven't yet called setSearchParams.
// Once we call that we want those to take precedence, otherwise you can't
// remove a param with setSearchParams({}) if it has an initial value
getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);
let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigate)();
let setSearchParams = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((nextInit, navigateOptions) => {
const newSearchParams = createSearchParams(typeof nextInit === "function" ? nextInit(searchParams) : nextInit);
hasSetSearchParamsRef.current = true;
navigate("?" + newSearchParams, navigateOptions);
}, [navigate, searchParams]);
return [searchParams, setSearchParams];
}
function validateClientSideSubmission() {
if (typeof document === "undefined") {
throw new Error("You are calling submit during the server render. " + "Try calling submit within a `useEffect` or callback instead.");
}
}
let fetcherId = 0;
let getUniqueFetcherId = () => "__" + String(++fetcherId) + "__";
/**
* Returns a function that may be used to programmatically submit a form (or
* some arbitrary data) to the server.
*/
function useSubmit() {
let {
router
} = useDataRouterContext(DataRouterHook.UseSubmit);
let {
basename
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext);
let currentRouteId = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_useRouteId)();
return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (target, options) {
if (options === void 0) {
options = {};
}
validateClientSideSubmission();
let {
action,
method,
encType,
formData,
body
} = getFormSubmissionInfo(target, basename);
if (options.navigate === false) {
let key = options.fetcherKey || getUniqueFetcherId();
router.fetch(key, currentRouteId, options.action || action, {
preventScrollReset: options.preventScrollReset,
formData,
body,
formMethod: options.method || method,
formEncType: options.encType || encType,
flushSync: options.flushSync
});
} else {
router.navigate(options.action || action, {
preventScrollReset: options.preventScrollReset,
formData,
body,
formMethod: options.method || method,
formEncType: options.encType || encType,
replace: options.replace,
state: options.state,
fromRouteId: currentRouteId,
flushSync: options.flushSync,
viewTransition: options.viewTransition
});
}
}, [router, basename, currentRouteId]);
}
// v7: Eventually we should deprecate this entirely in favor of using the
// router method directly?
function useFormAction(action, _temp2) {
let {
relative
} = _temp2 === void 0 ? {} : _temp2;
let {
basename
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext);
let routeContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_RouteContext);
!routeContext ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFormAction must be used inside a RouteContext") : 0 : void 0;
let [match] = routeContext.matches.slice(-1);
// Shallow clone path so we can modify it below, otherwise we modify the
// object referenced by useMemo inside useResolvedPath
let path = _extends({}, (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(action ? action : ".", {
relative
}));
// If no action was specified, browsers will persist current search params
// when determining the path, so match that behavior
// https://github.com/remix-run/remix/issues/927
let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)();
if (action == null) {
// Safe to write to this directly here since if action was undefined, we
// would have called useResolvedPath(".") which will never include a search
path.search = location.search;
// When grabbing search params from the URL, remove any included ?index param
// since it might not apply to our contextual route. We add it back based
// on match.route.index below
let params = new URLSearchParams(path.search);
let indexValues = params.getAll("index");
let hasNakedIndexParam = indexValues.some(v => v === "");
if (hasNakedIndexParam) {
params.delete("index");
indexValues.filter(v => v).forEach(v => params.append("index", v));
let qs = params.toString();
path.search = qs ? "?" + qs : "";
}
}
if ((!action || action === ".") && match.route.index) {
path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index";
}
// If we're operating within a basename, prepend it to the pathname prior
// to creating the form action. If this is a root navigation, then just use
// the raw basename which allows the basename to have full control over the
// presence of a trailing slash on root actions
if (basename !== "/") {
path.pathname = path.pathname === "/" ? basename : (0,react_router__WEBPACK_IMPORTED_MODULE_2__.joinPaths)([basename, path.pathname]);
}
return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createPath)(path);
}
// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`
/**
* Interacts with route loaders and actions without causing a navigation. Great
* for any interaction that stays on the same page.
*/
function useFetcher(_temp3) {
var _route$matches;
let {
key
} = _temp3 === void 0 ? {} : _temp3;
let {
router
} = useDataRouterContext(DataRouterHook.UseFetcher);
let state = useDataRouterState(DataRouterStateHook.UseFetcher);
let fetcherData = react__WEBPACK_IMPORTED_MODULE_0__.useContext(FetchersContext);
let route = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_RouteContext);
let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;
!fetcherData ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFetcher must be used inside a FetchersContext") : 0 : void 0;
!route ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFetcher must be used inside a RouteContext") : 0 : void 0;
!(routeId != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFetcher can only be used on routes that contain a unique \"id\"") : 0 : void 0;
// Fetcher key handling
// OK to call conditionally to feature detect `useId`
// eslint-disable-next-line react-hooks/rules-of-hooks
let defaultKey = useIdImpl ? useIdImpl() : "";
let [fetcherKey, setFetcherKey] = react__WEBPACK_IMPORTED_MODULE_0__.useState(key || defaultKey);
if (key && key !== fetcherKey) {
setFetcherKey(key);
} else if (!fetcherKey) {
// We will only fall through here when `useId` is not available
setFetcherKey(getUniqueFetcherId());
}
// Registration/cleanup
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
router.getFetcher(fetcherKey);
return () => {
// Tell the router we've unmounted - if v7_fetcherPersist is enabled this
// will not delete immediately but instead queue up a delete after the
// fetcher returns to an `idle` state
router.deleteFetcher(fetcherKey);
};
}, [router, fetcherKey]);
// Fetcher additions
let load = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((href, opts) => {
!routeId ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "No routeId available for fetcher.load()") : 0 : void 0;
router.fetch(fetcherKey, routeId, href, opts);
}, [fetcherKey, routeId, router]);
let submitImpl = useSubmit();
let submit = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((target, opts) => {
submitImpl(target, _extends({}, opts, {
navigate: false,
fetcherKey
}));
}, [fetcherKey, submitImpl]);
let FetcherForm = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {
let FetcherForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Form, _extends({}, props, {
navigate: false,
fetcherKey: fetcherKey,
ref: ref
}));
});
if (true) {
FetcherForm.displayName = "fetcher.Form";
}
return FetcherForm;
}, [fetcherKey]);
// Exposed FetcherWithComponents
let fetcher = state.fetchers.get(fetcherKey) || react_router__WEBPACK_IMPORTED_MODULE_2__.IDLE_FETCHER;
let data = fetcherData.get(fetcherKey);
let fetcherWithComponents = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => _extends({
Form: FetcherForm,
submit,
load
}, fetcher, {
data
}), [FetcherForm, submit, load, fetcher, data]);
return fetcherWithComponents;
}
/**
* Provides all fetchers currently on the page. Useful for layouts and parent
* routes that need to provide pending/optimistic UI regarding the fetch.
*/
function useFetchers() {
let state = useDataRouterState(DataRouterStateHook.UseFetchers);
return Array.from(state.fetchers.entries()).map(_ref11 => {
let [key, fetcher] = _ref11;
return _extends({}, fetcher, {
key
});
});
}
const SCROLL_RESTORATION_STORAGE_KEY = "react-router-scroll-positions";
let savedScrollPositions = {};
/**
* When rendered inside a RouterProvider, will restore scroll positions on navigations
*/
function useScrollRestoration(_temp4) {
let {
getKey,
storageKey
} = _temp4 === void 0 ? {} : _temp4;
let {
router
} = useDataRouterContext(DataRouterHook.UseScrollRestoration);
let {
restoreScrollPosition,
preventScrollReset
} = useDataRouterState(DataRouterStateHook.UseScrollRestoration);
let {
basename
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext);
let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)();
let matches = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useMatches)();
let navigation = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigation)();
// Trigger manual scroll restoration while we're active
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
window.history.scrollRestoration = "manual";
return () => {
window.history.scrollRestoration = "auto";
};
}, []);
// Save positions on pagehide
usePageHide(react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => {
if (navigation.state === "idle") {
let key = (getKey ? getKey(location, matches) : null) || location.key;
savedScrollPositions[key] = window.scrollY;
}
try {
sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));
} catch (error) {
true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(false, "Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (" + error + ").") : 0;
}
window.history.scrollRestoration = "auto";
}, [storageKey, getKey, navigation.state, location, matches]));
// Read in any saved scroll locations
if (typeof document !== "undefined") {
// eslint-disable-next-line react-hooks/rules-of-hooks
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
try {
let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);
if (sessionPositions) {
savedScrollPositions = JSON.parse(sessionPositions);
}
} catch (e) {
// no-op, use default empty object
}
}, [storageKey]);
// Enable scroll restoration in the router
// eslint-disable-next-line react-hooks/rules-of-hooks
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
let getKeyWithoutBasename = getKey && basename !== "/" ? (location, matches) => getKey( // Strip the basename to match useLocation()
_extends({}, location, {
pathname: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(location.pathname, basename) || location.pathname
}), matches) : getKey;
let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);
return () => disableScrollRestoration && disableScrollRestoration();
}, [router, basename, getKey]);
// Restore scrolling when state.restoreScrollPosition changes
// eslint-disable-next-line react-hooks/rules-of-hooks
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => {
// Explicit false means don't do anything (used for submissions)
if (restoreScrollPosition === false) {
return;
}
// been here before, scroll to it
if (typeof restoreScrollPosition === "number") {
window.scrollTo(0, restoreScrollPosition);
return;
}
// try to scroll to the hash
if (location.hash) {
let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));
if (el) {
el.scrollIntoView();
return;
}
}
// Don't reset if this navigation opted out
if (preventScrollReset === true) {
return;
}
// otherwise go to the top on new locations
window.scrollTo(0, 0);
}, [location, restoreScrollPosition, preventScrollReset]);
}
}
/**
* Setup a callback to be fired on the window's `beforeunload` event. This is
* useful for saving some data to `window.localStorage` just before the page
* refreshes.
*
* Note: The `callback` argument should be a function created with
* `React.useCallback()`.
*/
function useBeforeUnload(callback, options) {
let {
capture
} = options || {};
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
let opts = capture != null ? {
capture
} : undefined;
window.addEventListener("beforeunload", callback, opts);
return () => {
window.removeEventListener("beforeunload", callback, opts);
};
}, [callback, capture]);
}
/**
* Setup a callback to be fired on the window's `pagehide` event. This is
* useful for saving some data to `window.localStorage` just before the page
* refreshes. This event is better supported than beforeunload across browsers.
*
* Note: The `callback` argument should be a function created with
* `React.useCallback()`.
*/
function usePageHide(callback, options) {
let {
capture
} = options || {};
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
let opts = capture != null ? {
capture
} : undefined;
window.addEventListener("pagehide", callback, opts);
return () => {
window.removeEventListener("pagehide", callback, opts);
};
}, [callback, capture]);
}
/**
* Wrapper around useBlocker to show a window.confirm prompt to users instead
* of building a custom UI with useBlocker.
*
* Warning: This has *a lot of rough edges* and behaves very differently (and
* very incorrectly in some cases) across browsers if user click addition
* back/forward navigations while the confirm is open. Use at your own risk.
*/
function usePrompt(_ref12) {
let {
when,
message
} = _ref12;
let blocker = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useBlocker)(when);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (blocker.state === "blocked") {
let proceed = window.confirm(message);
if (proceed) {
// This timeout is needed to avoid a weird "race" on POP navigations
// between the `window.history` revert navigation and the result of
// `window.confirm`
setTimeout(blocker.proceed, 0);
} else {
blocker.reset();
}
}
}, [blocker, message]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (blocker.state === "blocked" && !when) {
blocker.reset();
}
}, [blocker, when]);
}
/**
* Return a boolean indicating if there is an active view transition to the
* given href. You can use this value to render CSS classes or viewTransitionName
* styles onto your elements
*
* @param href The destination href
* @param [opts.relative] Relative routing type ("route" | "path")
*/
function useViewTransitionState(to, opts) {
if (opts === void 0) {
opts = {};
}
let vtContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(ViewTransitionContext);
!(vtContext != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. " + "Did you accidentally import `RouterProvider` from `react-router`?") : 0 : void 0;
let {
basename
} = useDataRouterContext(DataRouterHook.useViewTransitionState);
let path = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(to, {
relative: opts.relative
});
if (!vtContext.isTransitioning) {
return false;
}
let currentPath = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;
let nextPath = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;
// Transition is active if we're going to or coming from the indicated
// destination. This ensures that other PUSH navigations that reverse
// an indicated transition apply. I.e., on the list view you have:
//
// <NavLink to="/details/1" viewTransition>
//
// If you click the breadcrumb back to the list view:
//
// <NavLink to="/list" viewTransition>
//
// We should apply the transition because it's indicated as active going
// from /list -> /details/1 and therefore should be active on the reverse
// (even though this isn't strictly a POP reverse)
return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.matchPath)(path.pathname, nextPath) != null || (0,react_router__WEBPACK_IMPORTED_MODULE_2__.matchPath)(path.pathname, currentPath) != null;
}
//#endregion
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./node_modules/react-router/dist/index.js":
/*!*************************************************!*\
!*** ./node_modules/react-router/dist/index.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ AbortedDeferredError: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.AbortedDeferredError),
/* harmony export */ Await: () => (/* binding */ Await),
/* harmony export */ MemoryRouter: () => (/* binding */ MemoryRouter),
/* harmony export */ Navigate: () => (/* binding */ Navigate),
/* harmony export */ NavigationType: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.Action),
/* harmony export */ Outlet: () => (/* binding */ Outlet),
/* harmony export */ Route: () => (/* binding */ Route),
/* harmony export */ Router: () => (/* binding */ Router),
/* harmony export */ RouterProvider: () => (/* binding */ RouterProvider),
/* harmony export */ Routes: () => (/* binding */ Routes),
/* harmony export */ UNSAFE_DataRouterContext: () => (/* binding */ DataRouterContext),
/* harmony export */ UNSAFE_DataRouterStateContext: () => (/* binding */ DataRouterStateContext),
/* harmony export */ UNSAFE_LocationContext: () => (/* binding */ LocationContext),
/* harmony export */ UNSAFE_NavigationContext: () => (/* binding */ NavigationContext),
/* harmony export */ UNSAFE_RouteContext: () => (/* binding */ RouteContext),
/* harmony export */ UNSAFE_logV6DeprecationWarnings: () => (/* binding */ logV6DeprecationWarnings),
/* harmony export */ UNSAFE_mapRouteProperties: () => (/* binding */ mapRouteProperties),
/* harmony export */ UNSAFE_useRouteId: () => (/* binding */ useRouteId),
/* harmony export */ UNSAFE_useRoutesImpl: () => (/* binding */ useRoutesImpl),
/* harmony export */ createMemoryRouter: () => (/* binding */ createMemoryRouter),
/* harmony export */ createPath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createPath),
/* harmony export */ createRoutesFromChildren: () => (/* binding */ createRoutesFromChildren),
/* harmony export */ createRoutesFromElements: () => (/* binding */ createRoutesFromChildren),
/* harmony export */ defer: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.defer),
/* harmony export */ generatePath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.generatePath),
/* harmony export */ isRouteErrorResponse: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.isRouteErrorResponse),
/* harmony export */ json: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.json),
/* harmony export */ matchPath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchPath),
/* harmony export */ matchRoutes: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchRoutes),
/* harmony export */ parsePath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.parsePath),
/* harmony export */ redirect: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.redirect),
/* harmony export */ redirectDocument: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.redirectDocument),
/* harmony export */ renderMatches: () => (/* binding */ renderMatches),
/* harmony export */ replace: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.replace),
/* harmony export */ resolvePath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolvePath),
/* harmony export */ useActionData: () => (/* binding */ useActionData),
/* harmony export */ useAsyncError: () => (/* binding */ useAsyncError),
/* harmony export */ useAsyncValue: () => (/* binding */ useAsyncValue),
/* harmony export */ useBlocker: () => (/* binding */ useBlocker),
/* harmony export */ useHref: () => (/* binding */ useHref),
/* harmony export */ useInRouterContext: () => (/* binding */ useInRouterContext),
/* harmony export */ useLoaderData: () => (/* binding */ useLoaderData),
/* harmony export */ useLocation: () => (/* binding */ useLocation),
/* harmony export */ useMatch: () => (/* binding */ useMatch),
/* harmony export */ useMatches: () => (/* binding */ useMatches),
/* harmony export */ useNavigate: () => (/* binding */ useNavigate),
/* harmony export */ useNavigation: () => (/* binding */ useNavigation),
/* harmony export */ useNavigationType: () => (/* binding */ useNavigationType),
/* harmony export */ useOutlet: () => (/* binding */ useOutlet),
/* harmony export */ useOutletContext: () => (/* binding */ useOutletContext),
/* harmony export */ useParams: () => (/* binding */ useParams),
/* harmony export */ useResolvedPath: () => (/* binding */ useResolvedPath),
/* harmony export */ useRevalidator: () => (/* binding */ useRevalidator),
/* harmony export */ useRouteError: () => (/* binding */ useRouteError),
/* harmony export */ useRouteLoaderData: () => (/* binding */ useRouteLoaderData),
/* harmony export */ useRoutes: () => (/* binding */ useRoutes)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _remix_run_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js");
/**
* React Router v6.28.0
*
* Copyright (c) Remix Software Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE.md file in the root directory of this source tree.
*
* @license MIT
*/
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
// Create react-specific types from the agnostic types in @remix-run/router to
// export from react-router
const DataRouterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
if (true) {
DataRouterContext.displayName = "DataRouter";
}
const DataRouterStateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
if (true) {
DataRouterStateContext.displayName = "DataRouterState";
}
const AwaitContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
if (true) {
AwaitContext.displayName = "Await";
}
/**
* A Navigator is a "location changer"; it's how you get to different locations.
*
* Every history instance conforms to the Navigator interface, but the
* distinction is useful primarily when it comes to the low-level `<Router>` API
* where both the location and a navigator must be provided separately in order
* to avoid "tearing" that may occur in a suspense-enabled app if the action
* and/or location were to be read directly from the history instance.
*/
const NavigationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
if (true) {
NavigationContext.displayName = "Navigation";
}
const LocationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
if (true) {
LocationContext.displayName = "Location";
}
const RouteContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({
outlet: null,
matches: [],
isDataRoute: false
});
if (true) {
RouteContext.displayName = "Route";
}
const RouteErrorContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
if (true) {
RouteErrorContext.displayName = "RouteError";
}
/**
* Returns the full href for the given "to" value. This is useful for building
* custom links that are also accessible and preserve right-click behavior.
*
* @see https://reactrouter.com/v6/hooks/use-href
*/
function useHref(to, _temp) {
let {
relative
} = _temp === void 0 ? {} : _temp;
!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
// router loaded. We can help them understand how to avoid that.
"useHref() may be used only in the context of a <Router> component.") : 0 : void 0;
let {
basename,
navigator
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext);
let {
hash,
pathname,
search
} = useResolvedPath(to, {
relative
});
let joinedPathname = pathname;
// If we're operating within a basename, prepend it to the pathname prior
// to creating the href. If this is a root navigation, then just use the raw
// basename which allows the basename to have full control over the presence
// of a trailing slash on root links
if (basename !== "/") {
joinedPathname = pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([basename, pathname]);
}
return navigator.createHref({
pathname: joinedPathname,
search,
hash
});
}
/**
* Returns true if this component is a descendant of a `<Router>`.
*
* @see https://reactrouter.com/v6/hooks/use-in-router-context
*/
function useInRouterContext() {
return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LocationContext) != null;
}
/**
* Returns the current location object, which represents the current URL in web
* browsers.
*
* Note: If you're using this it may mean you're doing some of your own
* "routing" in your app, and we'd like to know what your use case is. We may
* be able to provide something higher-level to better suit your needs.
*
* @see https://reactrouter.com/v6/hooks/use-location
*/
function useLocation() {
!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
// router loaded. We can help them understand how to avoid that.
"useLocation() may be used only in the context of a <Router> component.") : 0 : void 0;
return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LocationContext).location;
}
/**
* Returns the current navigation action which describes how the router came to
* the current location, either by a pop, push, or replace on the history stack.
*
* @see https://reactrouter.com/v6/hooks/use-navigation-type
*/
function useNavigationType() {
return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LocationContext).navigationType;
}
/**
* Returns a PathMatch object if the given pattern matches the current URL.
* This is useful for components that need to know "active" state, e.g.
* `<NavLink>`.
*
* @see https://reactrouter.com/v6/hooks/use-match
*/
function useMatch(pattern) {
!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
// router loaded. We can help them understand how to avoid that.
"useMatch() may be used only in the context of a <Router> component.") : 0 : void 0;
let {
pathname
} = useLocation();
return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchPath)(pattern, (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_decodePath)(pathname)), [pathname, pattern]);
}
/**
* The interface for the navigate() function returned from useNavigate().
*/
const navigateEffectWarning = "You should call navigate() in a React.useEffect(), not when " + "your component is first rendered.";
// Mute warnings for calls to useNavigate in SSR environments
function useIsomorphicLayoutEffect(cb) {
let isStatic = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext).static;
if (!isStatic) {
// We should be able to get rid of this once react 18.3 is released
// See: https://github.com/facebook/react/pull/26395
// eslint-disable-next-line react-hooks/rules-of-hooks
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(cb);
}
}
/**
* Returns an imperative method for changing the location. Used by `<Link>`s, but
* may also be used by other elements to change the location.
*
* @see https://reactrouter.com/v6/hooks/use-navigate
*/
function useNavigate() {
let {
isDataRoute
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
// Conditional usage is OK here because the usage of a data router is static
// eslint-disable-next-line react-hooks/rules-of-hooks
return isDataRoute ? useNavigateStable() : useNavigateUnstable();
}
function useNavigateUnstable() {
!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
// router loaded. We can help them understand how to avoid that.
"useNavigate() may be used only in the context of a <Router> component.") : 0 : void 0;
let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterContext);
let {
basename,
future,
navigator
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext);
let {
matches
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
let {
pathname: locationPathname
} = useLocation();
let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_getResolveToMatches)(matches, future.v7_relativeSplatPath));
let activeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);
useIsomorphicLayoutEffect(() => {
activeRef.current = true;
});
let navigate = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (to, options) {
if (options === void 0) {
options = {};
}
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(activeRef.current, navigateEffectWarning) : 0;
// Short circuit here since if this happens on first render the navigate
// is useless because we haven't wired up our history listener yet
if (!activeRef.current) return;
if (typeof to === "number") {
navigator.go(to);
return;
}
let path = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === "path");
// If we're operating within a basename, prepend it to the pathname prior
// to handing off to history (but only if we're not in a data router,
// otherwise it'll prepend the basename inside of the router).
// If this is a root navigation, then we navigate to the raw basename
// which allows the basename to have full control over the presence of a
// trailing slash on root links
if (dataRouterContext == null && basename !== "/") {
path.pathname = path.pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([basename, path.pathname]);
}
(!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);
}, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);
return navigate;
}
const OutletContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
/**
* Returns the context (if provided) for the child route at this level of the route
* hierarchy.
* @see https://reactrouter.com/v6/hooks/use-outlet-context
*/
function useOutletContext() {
return react__WEBPACK_IMPORTED_MODULE_0__.useContext(OutletContext);
}
/**
* Returns the element for the child route at this level of the route
* hierarchy. Used internally by `<Outlet>` to render child routes.
*
* @see https://reactrouter.com/v6/hooks/use-outlet
*/
function useOutlet(context) {
let outlet = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext).outlet;
if (outlet) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(OutletContext.Provider, {
value: context
}, outlet);
}
return outlet;
}
/**
* Returns an object of key/value pairs of the dynamic params from the current
* URL that were matched by the route path.
*
* @see https://reactrouter.com/v6/hooks/use-params
*/
function useParams() {
let {
matches
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
let routeMatch = matches[matches.length - 1];
return routeMatch ? routeMatch.params : {};
}
/**
* Resolves the pathname of the given `to` value against the current location.
*
* @see https://reactrouter.com/v6/hooks/use-resolved-path
*/
function useResolvedPath(to, _temp2) {
let {
relative
} = _temp2 === void 0 ? {} : _temp2;
let {
future
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext);
let {
matches
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
let {
pathname: locationPathname
} = useLocation();
let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_getResolveToMatches)(matches, future.v7_relativeSplatPath));
return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, relative === "path"), [to, routePathnamesJson, locationPathname, relative]);
}
/**
* Returns the element of the route that matched the current location, prepared
* with the correct context to render the remainder of the route tree. Route
* elements in the tree must render an `<Outlet>` to render their child route's
* element.
*
* @see https://reactrouter.com/v6/hooks/use-routes
*/
function useRoutes(routes, locationArg) {
return useRoutesImpl(routes, locationArg);
}
// Internal implementation with accept optional param for RouterProvider usage
function useRoutesImpl(routes, locationArg, dataRouterState, future) {
!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the
// router loaded. We can help them understand how to avoid that.
"useRoutes() may be used only in the context of a <Router> component.") : 0 : void 0;
let {
navigator
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext);
let {
matches: parentMatches
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
let routeMatch = parentMatches[parentMatches.length - 1];
let parentParams = routeMatch ? routeMatch.params : {};
let parentPathname = routeMatch ? routeMatch.pathname : "/";
let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : "/";
let parentRoute = routeMatch && routeMatch.route;
if (true) {
// You won't get a warning about 2 different <Routes> under a <Route>
// without a trailing *, but this is a best-effort warning anyway since we
// cannot even give the warning unless they land at the parent route.
//
// Example:
//
// <Routes>
// {/* This route path MUST end with /* because otherwise
// it will never match /blog/post/123 */}
// <Route path="blog" element={<Blog />} />
// <Route path="blog/feed" element={<BlogFeed />} />
// </Routes>
//
// function Blog() {
// return (
// <Routes>
// <Route path="post/:id" element={<Post />} />
// </Routes>
// );
// }
let parentPath = parentRoute && parentRoute.path || "";
warningOnce(parentPathname, !parentRoute || parentPath.endsWith("*"), "You rendered descendant <Routes> (or called `useRoutes()`) at " + ("\"" + parentPathname + "\" (under <Route path=\"" + parentPath + "\">) but the ") + "parent route path has no trailing \"*\". This means if you navigate " + "deeper, the parent won't match anymore and therefore the child " + "routes will never render.\n\n" + ("Please change the parent <Route path=\"" + parentPath + "\"> to <Route ") + ("path=\"" + (parentPath === "/" ? "*" : parentPath + "/*") + "\">."));
}
let locationFromContext = useLocation();
let location;
if (locationArg) {
var _parsedLocationArg$pa;
let parsedLocationArg = typeof locationArg === "string" ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.parsePath)(locationArg) : locationArg;
!(parentPathnameBase === "/" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, " + "the location pathname must begin with the portion of the URL pathname that was " + ("matched by all parent routes. The current pathname base is \"" + parentPathnameBase + "\" ") + ("but pathname \"" + parsedLocationArg.pathname + "\" was given in the `location` prop.")) : 0 : void 0;
location = parsedLocationArg;
} else {
location = locationFromContext;
}
let pathname = location.pathname || "/";
let remainingPathname = pathname;
if (parentPathnameBase !== "/") {
// Determine the remaining pathname by removing the # of URL segments the
// parentPathnameBase has, instead of removing based on character count.
// This is because we can't guarantee that incoming/outgoing encodings/
// decodings will match exactly.
// We decode paths before matching on a per-segment basis with
// decodeURIComponent(), but we re-encode pathnames via `new URL()` so they
// match what `window.location.pathname` would reflect. Those don't 100%
// align when it comes to encoded URI characters such as % and &.
//
// So we may end up with:
// pathname: "/descendant/a%25b/match"
// parentPathnameBase: "/descendant/a%b"
//
// And the direct substring removal approach won't work :/
let parentSegments = parentPathnameBase.replace(/^\//, "").split("/");
let segments = pathname.replace(/^\//, "").split("/");
remainingPathname = "/" + segments.slice(parentSegments.length).join("/");
}
let matches = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchRoutes)(routes, {
pathname: remainingPathname
});
if (true) {
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(parentRoute || matches != null, "No routes matched location \"" + location.pathname + location.search + location.hash + "\" ") : 0;
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, "Matched leaf route at location \"" + location.pathname + location.search + location.hash + "\" " + "does not have an element or Component. This means it will render an <Outlet /> with a " + "null value by default resulting in an \"empty\" page.") : 0;
}
let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {
params: Object.assign({}, parentParams, match.params),
pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([parentPathnameBase,
// Re-encode pathnames that were decoded inside matchRoutes
navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),
pathnameBase: match.pathnameBase === "/" ? parentPathnameBase : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([parentPathnameBase,
// Re-encode pathnames that were decoded inside matchRoutes
navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])
})), parentMatches, dataRouterState, future);
// When a user passes in a `locationArg`, the associated routes need to
// be wrapped in a new `LocationContext.Provider` in order for `useLocation`
// to use the scoped location instead of the global location.
if (locationArg && renderedMatches) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LocationContext.Provider, {
value: {
location: _extends({
pathname: "/",
search: "",
hash: "",
state: null,
key: "default"
}, location),
navigationType: _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.Action.Pop
}
}, renderedMatches);
}
return renderedMatches;
}
function DefaultErrorComponent() {
let error = useRouteError();
let message = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.isRouteErrorResponse)(error) ? error.status + " " + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);
let stack = error instanceof Error ? error.stack : null;
let lightgrey = "rgba(200,200,200, 0.5)";
let preStyles = {
padding: "0.5rem",
backgroundColor: lightgrey
};
let codeStyles = {
padding: "2px 4px",
backgroundColor: lightgrey
};
let devInfo = null;
if (true) {
console.error("Error handled by React Router default ErrorBoundary:", error);
devInfo = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("p", null, "\uD83D\uDCBF Hey developer \uD83D\uDC4B"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("p", null, "You can provide a way better UX than this when your app throws errors by providing your own ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("code", {
style: codeStyles
}, "ErrorBoundary"), " or", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("code", {
style: codeStyles
}, "errorElement"), " prop on your route."));
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("h2", null, "Unexpected Application Error!"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("h3", {
style: {
fontStyle: "italic"
}
}, message), stack ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("pre", {
style: preStyles
}, stack) : null, devInfo);
}
const defaultErrorElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DefaultErrorComponent, null);
class RenderErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component {
constructor(props) {
super(props);
this.state = {
location: props.location,
revalidation: props.revalidation,
error: props.error
};
}
static getDerivedStateFromError(error) {
return {
error: error
};
}
static getDerivedStateFromProps(props, state) {
// When we get into an error state, the user will likely click "back" to the
// previous page that didn't have an error. Because this wraps the entire
// application, that will have no effect--the error page continues to display.
// This gives us a mechanism to recover from the error when the location changes.
//
// Whether we're in an error state or not, we update the location in state
// so that when we are in an error state, it gets reset when a new location
// comes in and the user recovers from the error.
if (state.location !== props.location || state.revalidation !== "idle" && props.revalidation === "idle") {
return {
error: props.error,
location: props.location,
revalidation: props.revalidation
};
}
// If we're not changing locations, preserve the location but still surface
// any new errors that may come through. We retain the existing error, we do
// this because the error provided from the app state may be cleared without
// the location changing.
return {
error: props.error !== undefined ? props.error : state.error,
location: state.location,
revalidation: props.revalidation || state.revalidation
};
}
componentDidCatch(error, errorInfo) {
console.error("React Router caught the following error during render", error, errorInfo);
}
render() {
return this.state.error !== undefined ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RouteContext.Provider, {
value: this.props.routeContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RouteErrorContext.Provider, {
value: this.state.error,
children: this.props.component
})) : this.props.children;
}
}
function RenderedRoute(_ref) {
let {
routeContext,
match,
children
} = _ref;
let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterContext);
// Track how deep we got in our render pass to emulate SSR componentDidCatch
// in a DataStaticRouter
if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {
dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RouteContext.Provider, {
value: routeContext
}, children);
}
function _renderMatches(matches, parentMatches, dataRouterState, future) {
var _dataRouterState;
if (parentMatches === void 0) {
parentMatches = [];
}
if (dataRouterState === void 0) {
dataRouterState = null;
}
if (future === void 0) {
future = null;
}
if (matches == null) {
var _future;
if (!dataRouterState) {
return null;
}
if (dataRouterState.errors) {
// Don't bail if we have data router errors so we can render them in the
// boundary. Use the pre-matched (or shimmed) matches
matches = dataRouterState.matches;
} else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {
// Don't bail if we're initializing with partial hydration and we have
// router matches. That means we're actively running `patchRoutesOnNavigation`
// so we should render down the partial matches to the appropriate
// `HydrateFallback`. We only do this if `parentMatches` is empty so it
// only impacts the root matches for `RouterProvider` and no descendant
// `<Routes>`
matches = dataRouterState.matches;
} else {
return null;
}
}
let renderedMatches = matches;
// If we have data errors, trim matches to the highest error boundary
let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;
if (errors != null) {
let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);
!(errorIndex >= 0) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "Could not find a matching route for errors on route IDs: " + Object.keys(errors).join(",")) : 0 : void 0;
renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));
}
// If we're in a partial hydration mode, detect if we need to render down to
// a given HydrateFallback while we load the rest of the hydration data
let renderFallback = false;
let fallbackIndex = -1;
if (dataRouterState && future && future.v7_partialHydration) {
for (let i = 0; i < renderedMatches.length; i++) {
let match = renderedMatches[i];
// Track the deepest fallback up until the first route without data
if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {
fallbackIndex = i;
}
if (match.route.id) {
let {
loaderData,
errors
} = dataRouterState;
let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);
if (match.route.lazy || needsToRunLoader) {
// We found the first route that's not ready to render (waiting on
// lazy, or has a loader that hasn't run yet). Flag that we need to
// render a fallback and render up until the appropriate fallback
renderFallback = true;
if (fallbackIndex >= 0) {
renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);
} else {
renderedMatches = [renderedMatches[0]];
}
break;
}
}
}
}
return renderedMatches.reduceRight((outlet, match, index) => {
// Only data routers handle errors/fallbacks
let error;
let shouldRenderHydrateFallback = false;
let errorElement = null;
let hydrateFallbackElement = null;
if (dataRouterState) {
error = errors && match.route.id ? errors[match.route.id] : undefined;
errorElement = match.route.errorElement || defaultErrorElement;
if (renderFallback) {
if (fallbackIndex < 0 && index === 0) {
warningOnce("route-fallback", false, "No `HydrateFallback` element provided to render during initial hydration");
shouldRenderHydrateFallback = true;
hydrateFallbackElement = null;
} else if (fallbackIndex === index) {
shouldRenderHydrateFallback = true;
hydrateFallbackElement = match.route.hydrateFallbackElement || null;
}
}
}
let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));
let getChildren = () => {
let children;
if (error) {
children = errorElement;
} else if (shouldRenderHydrateFallback) {
children = hydrateFallbackElement;
} else if (match.route.Component) {
// Note: This is a de-optimized path since React won't re-use the
// ReactElement since it's identity changes with each new
// React.createElement call. We keep this so folks can use
// `<Route Component={...}>` in `<Routes>` but generally `Component`
// usage is only advised in `RouterProvider` when we can convert it to
// `element` ahead of time.
children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(match.route.Component, null);
} else if (match.route.element) {
children = match.route.element;
} else {
children = outlet;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RenderedRoute, {
match: match,
routeContext: {
outlet,
matches,
isDataRoute: dataRouterState != null
},
children: children
});
};
// Only wrap in an error boundary within data router usages when we have an
// ErrorBoundary/errorElement on this route. Otherwise let it bubble up to
// an ancestor ErrorBoundary/errorElement
return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RenderErrorBoundary, {
location: dataRouterState.location,
revalidation: dataRouterState.revalidation,
component: errorElement,
error: error,
children: getChildren(),
routeContext: {
outlet: null,
matches,
isDataRoute: true
}
}) : getChildren();
}, null);
}
var DataRouterHook = /*#__PURE__*/function (DataRouterHook) {
DataRouterHook["UseBlocker"] = "useBlocker";
DataRouterHook["UseRevalidator"] = "useRevalidator";
DataRouterHook["UseNavigateStable"] = "useNavigate";
return DataRouterHook;
}(DataRouterHook || {});
var DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {
DataRouterStateHook["UseBlocker"] = "useBlocker";
DataRouterStateHook["UseLoaderData"] = "useLoaderData";
DataRouterStateHook["UseActionData"] = "useActionData";
DataRouterStateHook["UseRouteError"] = "useRouteError";
DataRouterStateHook["UseNavigation"] = "useNavigation";
DataRouterStateHook["UseRouteLoaderData"] = "useRouteLoaderData";
DataRouterStateHook["UseMatches"] = "useMatches";
DataRouterStateHook["UseRevalidator"] = "useRevalidator";
DataRouterStateHook["UseNavigateStable"] = "useNavigate";
DataRouterStateHook["UseRouteId"] = "useRouteId";
return DataRouterStateHook;
}(DataRouterStateHook || {});
function getDataRouterConsoleError(hookName) {
return hookName + " must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router.";
}
function useDataRouterContext(hookName) {
let ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterContext);
!ctx ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
return ctx;
}
function useDataRouterState(hookName) {
let state = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterStateContext);
!state ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
return state;
}
function useRouteContext(hookName) {
let route = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
!route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0;
return route;
}
// Internal version with hookName-aware debugging
function useCurrentRouteId(hookName) {
let route = useRouteContext(hookName);
let thisRoute = route.matches[route.matches.length - 1];
!thisRoute.route.id ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, hookName + " can only be used on routes that contain a unique \"id\"") : 0 : void 0;
return thisRoute.route.id;
}
/**
* Returns the ID for the nearest contextual route
*/
function useRouteId() {
return useCurrentRouteId(DataRouterStateHook.UseRouteId);
}
/**
* Returns the current navigation, defaulting to an "idle" navigation when
* no navigation is in progress
*/
function useNavigation() {
let state = useDataRouterState(DataRouterStateHook.UseNavigation);
return state.navigation;
}
/**
* Returns a revalidate function for manually triggering revalidation, as well
* as the current state of any manual revalidations
*/
function useRevalidator() {
let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);
let state = useDataRouterState(DataRouterStateHook.UseRevalidator);
return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({
revalidate: dataRouterContext.router.revalidate,
state: state.revalidation
}), [dataRouterContext.router.revalidate, state.revalidation]);
}
/**
* Returns the active route matches, useful for accessing loaderData for
* parent/child routes or the route "handle" property
*/
function useMatches() {
let {
matches,
loaderData
} = useDataRouterState(DataRouterStateHook.UseMatches);
return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => matches.map(m => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_convertRouteMatchToUiMatch)(m, loaderData)), [matches, loaderData]);
}
/**
* Returns the loader data for the nearest ancestor Route loader
*/
function useLoaderData() {
let state = useDataRouterState(DataRouterStateHook.UseLoaderData);
let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);
if (state.errors && state.errors[routeId] != null) {
console.error("You cannot `useLoaderData` in an errorElement (routeId: " + routeId + ")");
return undefined;
}
return state.loaderData[routeId];
}
/**
* Returns the loaderData for the given routeId
*/
function useRouteLoaderData(routeId) {
let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);
return state.loaderData[routeId];
}
/**
* Returns the action data for the nearest ancestor Route action
*/
function useActionData() {
let state = useDataRouterState(DataRouterStateHook.UseActionData);
let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);
return state.actionData ? state.actionData[routeId] : undefined;
}
/**
* Returns the nearest ancestor Route error, which could be a loader/action
* error or a render error. This is intended to be called from your
* ErrorBoundary/errorElement to display a proper error message.
*/
function useRouteError() {
var _state$errors;
let error = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteErrorContext);
let state = useDataRouterState(DataRouterStateHook.UseRouteError);
let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);
// If this was a render error, we put it in a RouteError context inside
// of RenderErrorBoundary
if (error !== undefined) {
return error;
}
// Otherwise look for errors from our data router state
return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];
}
/**
* Returns the happy-path data from the nearest ancestor `<Await />` value
*/
function useAsyncValue() {
let value = react__WEBPACK_IMPORTED_MODULE_0__.useContext(AwaitContext);
return value == null ? void 0 : value._data;
}
/**
* Returns the error from the nearest ancestor `<Await />` value
*/
function useAsyncError() {
let value = react__WEBPACK_IMPORTED_MODULE_0__.useContext(AwaitContext);
return value == null ? void 0 : value._error;
}
let blockerId = 0;
/**
* Allow the application to block navigations within the SPA and present the
* user a confirmation dialog to confirm the navigation. Mostly used to avoid
* using half-filled form data. This does not handle hard-reloads or
* cross-origin navigations.
*/
function useBlocker(shouldBlock) {
let {
router,
basename
} = useDataRouterContext(DataRouterHook.UseBlocker);
let state = useDataRouterState(DataRouterStateHook.UseBlocker);
let [blockerKey, setBlockerKey] = react__WEBPACK_IMPORTED_MODULE_0__.useState("");
let blockerFunction = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(arg => {
if (typeof shouldBlock !== "function") {
return !!shouldBlock;
}
if (basename === "/") {
return shouldBlock(arg);
}
// If they provided us a function and we've got an active basename, strip
// it from the locations we expose to the user to match the behavior of
// useLocation
let {
currentLocation,
nextLocation,
historyAction
} = arg;
return shouldBlock({
currentLocation: _extends({}, currentLocation, {
pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.stripBasename)(currentLocation.pathname, basename) || currentLocation.pathname
}),
nextLocation: _extends({}, nextLocation, {
pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.stripBasename)(nextLocation.pathname, basename) || nextLocation.pathname
}),
historyAction
});
}, [basename, shouldBlock]);
// This effect is in charge of blocker key assignment and deletion (which is
// tightly coupled to the key)
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
let key = String(++blockerId);
setBlockerKey(key);
return () => router.deleteBlocker(key);
}, [router]);
// This effect handles assigning the blockerFunction. This is to handle
// unstable blocker function identities, and happens only after the prior
// effect so we don't get an orphaned blockerFunction in the router with a
// key of "". Until then we just have the IDLE_BLOCKER.
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
if (blockerKey !== "") {
router.getBlocker(blockerKey, blockerFunction);
}
}, [router, blockerKey, blockerFunction]);
// Prefer the blocker from `state` not `router.state` since DataRouterContext
// is memoized so this ensures we update on blocker state updates
return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.IDLE_BLOCKER;
}
/**
* Stable version of useNavigate that is used when we are in the context of
* a RouterProvider.
*/
function useNavigateStable() {
let {
router
} = useDataRouterContext(DataRouterHook.UseNavigateStable);
let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);
let activeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);
useIsomorphicLayoutEffect(() => {
activeRef.current = true;
});
let navigate = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (to, options) {
if (options === void 0) {
options = {};
}
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(activeRef.current, navigateEffectWarning) : 0;
// Short circuit here since if this happens on first render the navigate
// is useless because we haven't wired up our router subscriber yet
if (!activeRef.current) return;
if (typeof to === "number") {
router.navigate(to);
} else {
router.navigate(to, _extends({
fromRouteId: id
}, options));
}
}, [router, id]);
return navigate;
}
const alreadyWarned$1 = {};
function warningOnce(key, cond, message) {
if (!cond && !alreadyWarned$1[key]) {
alreadyWarned$1[key] = true;
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, message) : 0;
}
}
const alreadyWarned = {};
function warnOnce(key, message) {
if (!alreadyWarned[message]) {
alreadyWarned[message] = true;
console.warn(message);
}
}
const logDeprecation = (flag, msg, link) => warnOnce(flag, "\u26A0\uFE0F React Router Future Flag Warning: " + msg + ". " + ("You can use the `" + flag + "` future flag to opt-in early. ") + ("For more information, see " + link + "."));
function logV6DeprecationWarnings(renderFuture, routerFuture) {
if (!(renderFuture != null && renderFuture.v7_startTransition)) {
logDeprecation("v7_startTransition", "React Router will begin wrapping state updates in `React.startTransition` in v7", "https://reactrouter.com/v6/upgrading/future#v7_starttransition");
}
if (!(renderFuture != null && renderFuture.v7_relativeSplatPath) && (!routerFuture || !routerFuture.v7_relativeSplatPath)) {
logDeprecation("v7_relativeSplatPath", "Relative route resolution within Splat routes is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath");
}
if (routerFuture) {
if (!routerFuture.v7_fetcherPersist) {
logDeprecation("v7_fetcherPersist", "The persistence behavior of fetchers is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist");
}
if (!routerFuture.v7_normalizeFormMethod) {
logDeprecation("v7_normalizeFormMethod", "Casing of `formMethod` fields is being normalized to uppercase in v7", "https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod");
}
if (!routerFuture.v7_partialHydration) {
logDeprecation("v7_partialHydration", "`RouterProvider` hydration behavior is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_partialhydration");
}
if (!routerFuture.v7_skipActionErrorRevalidation) {
logDeprecation("v7_skipActionErrorRevalidation", "The revalidation behavior after 4xx/5xx `action` responses is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation");
}
}
}
/**
Webpack + React 17 fails to compile on any of the following because webpack
complains that `startTransition` doesn't exist in `React`:
* import { startTransition } from "react"
* import * as React from from "react";
"startTransition" in React ? React.startTransition(() => setState()) : setState()
* import * as React from from "react";
"startTransition" in React ? React["startTransition"](() => setState()) : setState()
Moving it to a constant such as the following solves the Webpack/React 17 issue:
* import * as React from from "react";
const START_TRANSITION = "startTransition";
START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()
However, that introduces webpack/terser minification issues in production builds
in React 18 where minification/obfuscation ends up removing the call of
React.startTransition entirely from the first half of the ternary. Grabbing
this exported reference once up front resolves that issue.
See https://github.com/remix-run/react-router/issues/10579
*/
const START_TRANSITION = "startTransition";
const startTransitionImpl = react__WEBPACK_IMPORTED_MODULE_0__[START_TRANSITION];
/**
* Given a Remix Router instance, render the appropriate UI
*/
function RouterProvider(_ref) {
let {
fallbackElement,
router,
future
} = _ref;
let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState(router.state);
let {
v7_startTransition
} = future || {};
let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => {
if (v7_startTransition && startTransitionImpl) {
startTransitionImpl(() => setStateImpl(newState));
} else {
setStateImpl(newState);
}
}, [setStateImpl, v7_startTransition]);
// Need to use a layout effect here so we are subscribed early enough to
// pick up on any render-driven redirects/navigations (useEffect/<Navigate>)
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => router.subscribe(setState), [router, setState]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(fallbackElement == null || !router.future.v7_partialHydration, "`<RouterProvider fallbackElement>` is deprecated when using " + "`v7_partialHydration`, use a `HydrateFallback` component instead") : 0;
// Only log this once on initial mount
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
let navigator = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {
return {
createHref: router.createHref,
encodeLocation: router.encodeLocation,
go: n => router.navigate(n),
push: (to, state, opts) => router.navigate(to, {
state,
preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
}),
replace: (to, state, opts) => router.navigate(to, {
replace: true,
state,
preventScrollReset: opts == null ? void 0 : opts.preventScrollReset
})
};
}, [router]);
let basename = router.basename || "/";
let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({
router,
navigator,
static: false,
basename
}), [router, navigator, basename]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]);
// The fragment and {null} here are important! We need them to keep React 18's
// useId happy when we are server-rendering since we may have a <script> here
// containing the hydrated server-side staticContext (from StaticRouterProvider).
// useId relies on the component tree structure to generate deterministic id's
// so we need to ensure it remains the same on the client even though
// we don't need the <script> tag
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DataRouterContext.Provider, {
value: dataRouterContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DataRouterStateContext.Provider, {
value: state
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Router, {
basename: basename,
location: state.location,
navigationType: state.historyAction,
navigator: navigator,
future: {
v7_relativeSplatPath: router.future.v7_relativeSplatPath
}
}, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DataRoutes, {
routes: router.routes,
future: router.future,
state: state
}) : fallbackElement))), null);
}
function DataRoutes(_ref2) {
let {
routes,
future,
state
} = _ref2;
return useRoutesImpl(routes, undefined, state, future);
}
/**
* A `<Router>` that stores all entries in memory.
*
* @see https://reactrouter.com/v6/router-components/memory-router
*/
function MemoryRouter(_ref3) {
let {
basename,
children,
initialEntries,
initialIndex,
future
} = _ref3;
let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef();
if (historyRef.current == null) {
historyRef.current = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createMemoryHistory)({
initialEntries,
initialIndex,
v5Compat: true
});
}
let history = historyRef.current;
let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({
action: history.action,
location: history.location
});
let {
v7_startTransition
} = future || {};
let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => {
v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);
}, [setStateImpl, v7_startTransition]);
react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => logV6DeprecationWarnings(future), [future]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Router, {
basename: basename,
children: children,
location: state.location,
navigationType: state.action,
navigator: history,
future: future
});
}
/**
* Changes the current location.
*
* Note: This API is mostly useful in React.Component subclasses that are not
* able to use hooks. In functional components, we recommend you use the
* `useNavigate` hook instead.
*
* @see https://reactrouter.com/v6/components/navigate
*/
function Navigate(_ref4) {
let {
to,
replace,
state,
relative
} = _ref4;
!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of
// the router loaded. We can help them understand how to avoid that.
"<Navigate> may be used only in the context of a <Router> component.") : 0 : void 0;
let {
future,
static: isStatic
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext);
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(!isStatic, "<Navigate> must not be used on the initial render in a <StaticRouter>. " + "This is a no-op, but you should modify your code so the <Navigate> is " + "only ever rendered in response to some user interaction or state change.") : 0;
let {
matches
} = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext);
let {
pathname: locationPathname
} = useLocation();
let navigate = useNavigate();
// Resolve the path outside of the effect so that when effects run twice in
// StrictMode they navigate to the same place
let path = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolveTo)(to, (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_getResolveToMatches)(matches, future.v7_relativeSplatPath), locationPathname, relative === "path");
let jsonPath = JSON.stringify(path);
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => navigate(JSON.parse(jsonPath), {
replace,
state,
relative
}), [navigate, jsonPath, relative, replace, state]);
return null;
}
/**
* Renders the child route's element, if there is one.
*
* @see https://reactrouter.com/v6/components/outlet
*/
function Outlet(props) {
return useOutlet(props.context);
}
/**
* Declares an element that should be rendered at a certain URL path.
*
* @see https://reactrouter.com/v6/components/route
*/
function Route(_props) {
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "A <Route> is only ever to be used as the child of <Routes> element, " + "never rendered directly. Please wrap your <Route> in a <Routes>.") : 0 ;
}
/**
* Provides location context for the rest of the app.
*
* Note: You usually won't render a `<Router>` directly. Instead, you'll render a
* router that is more specific to your environment such as a `<BrowserRouter>`
* in web browsers or a `<StaticRouter>` for server rendering.
*
* @see https://reactrouter.com/v6/router-components/router
*/
function Router(_ref5) {
let {
basename: basenameProp = "/",
children = null,
location: locationProp,
navigationType = _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.Action.Pop,
navigator,
static: staticProp = false,
future
} = _ref5;
!!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "You cannot render a <Router> inside another <Router>." + " You should never have more than one in your app.") : 0 : void 0;
// Preserve trailing slashes on basename, so we can let the user control
// the enforcement of trailing slashes throughout the app
let basename = basenameProp.replace(/^\/*/, "/");
let navigationContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({
basename,
navigator,
static: staticProp,
future: _extends({
v7_relativeSplatPath: false
}, future)
}), [basename, future, navigator, staticProp]);
if (typeof locationProp === "string") {
locationProp = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.parsePath)(locationProp);
}
let {
pathname = "/",
search = "",
hash = "",
state = null,
key = "default"
} = locationProp;
let locationContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {
let trailingPathname = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.stripBasename)(pathname, basename);
if (trailingPathname == null) {
return null;
}
return {
location: {
pathname: trailingPathname,
search,
hash,
state,
key
},
navigationType
};
}, [basename, pathname, search, hash, state, key, navigationType]);
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(locationContext != null, "<Router basename=\"" + basename + "\"> is not able to match the URL " + ("\"" + pathname + search + hash + "\" because it does not start with the ") + "basename, so the <Router> won't render anything.") : 0;
if (locationContext == null) {
return null;
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NavigationContext.Provider, {
value: navigationContext
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LocationContext.Provider, {
children: children,
value: locationContext
}));
}
/**
* A container for a nested tree of `<Route>` elements that renders the branch
* that best matches the current location.
*
* @see https://reactrouter.com/v6/components/routes
*/
function Routes(_ref6) {
let {
children,
location
} = _ref6;
return useRoutes(createRoutesFromChildren(children), location);
}
/**
* Component to use for rendering lazily loaded data from returning defer()
* in a loader function
*/
function Await(_ref7) {
let {
children,
errorElement,
resolve
} = _ref7;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AwaitErrorBoundary, {
resolve: resolve,
errorElement: errorElement
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ResolveAwait, null, children));
}
var AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {
AwaitRenderStatus[AwaitRenderStatus["pending"] = 0] = "pending";
AwaitRenderStatus[AwaitRenderStatus["success"] = 1] = "success";
AwaitRenderStatus[AwaitRenderStatus["error"] = 2] = "error";
return AwaitRenderStatus;
}(AwaitRenderStatus || {});
const neverSettledPromise = new Promise(() => {});
class AwaitErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component {
constructor(props) {
super(props);
this.state = {
error: null
};
}
static getDerivedStateFromError(error) {
return {
error
};
}
componentDidCatch(error, errorInfo) {
console.error("<Await> caught the following error during render", error, errorInfo);
}
render() {
let {
children,
errorElement,
resolve
} = this.props;
let promise = null;
let status = AwaitRenderStatus.pending;
if (!(resolve instanceof Promise)) {
// Didn't get a promise - provide as a resolved promise
status = AwaitRenderStatus.success;
promise = Promise.resolve();
Object.defineProperty(promise, "_tracked", {
get: () => true
});
Object.defineProperty(promise, "_data", {
get: () => resolve
});
} else if (this.state.error) {
// Caught a render error, provide it as a rejected promise
status = AwaitRenderStatus.error;
let renderError = this.state.error;
promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings
Object.defineProperty(promise, "_tracked", {
get: () => true
});
Object.defineProperty(promise, "_error", {
get: () => renderError
});
} else if (resolve._tracked) {
// Already tracked promise - check contents
promise = resolve;
status = "_error" in promise ? AwaitRenderStatus.error : "_data" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;
} else {
// Raw (untracked) promise - track it
status = AwaitRenderStatus.pending;
Object.defineProperty(resolve, "_tracked", {
get: () => true
});
promise = resolve.then(data => Object.defineProperty(resolve, "_data", {
get: () => data
}), error => Object.defineProperty(resolve, "_error", {
get: () => error
}));
}
if (status === AwaitRenderStatus.error && promise._error instanceof _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.AbortedDeferredError) {
// Freeze the UI by throwing a never resolved promise
throw neverSettledPromise;
}
if (status === AwaitRenderStatus.error && !errorElement) {
// No errorElement, throw to the nearest route-level error boundary
throw promise._error;
}
if (status === AwaitRenderStatus.error) {
// Render via our errorElement
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AwaitContext.Provider, {
value: promise,
children: errorElement
});
}
if (status === AwaitRenderStatus.success) {
// Render children with resolved value
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AwaitContext.Provider, {
value: promise,
children: children
});
}
// Throw to the suspense boundary
throw promise;
}
}
/**
* @private
* Indirection to leverage useAsyncValue for a render-prop API on `<Await>`
*/
function ResolveAwait(_ref8) {
let {
children
} = _ref8;
let data = useAsyncValue();
let toRender = typeof children === "function" ? children(data) : children;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, toRender);
}
///////////////////////////////////////////////////////////////////////////////
// UTILS
///////////////////////////////////////////////////////////////////////////////
/**
* Creates a route config from a React "children" object, which is usually
* either a `<Route>` element or an array of them. Used internally by
* `<Routes>` to create a route config from its children.
*
* @see https://reactrouter.com/v6/utils/create-routes-from-children
*/
function createRoutesFromChildren(children, parentPath) {
if (parentPath === void 0) {
parentPath = [];
}
let routes = [];
react__WEBPACK_IMPORTED_MODULE_0__.Children.forEach(children, (element, index) => {
if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(element)) {
// Ignore non-elements. This allows people to more easily inline
// conditionals in their route config.
return;
}
let treePath = [...parentPath, index];
if (element.type === react__WEBPACK_IMPORTED_MODULE_0__.Fragment) {
// Transparently support React.Fragment and its children.
routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));
return;
}
!(element.type === Route) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "[" + (typeof element.type === "string" ? element.type : element.type.name) + "] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>") : 0 : void 0;
!(!element.props.index || !element.props.children) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "An index route cannot have child routes.") : 0 : void 0;
let route = {
id: element.props.id || treePath.join("-"),
caseSensitive: element.props.caseSensitive,
element: element.props.element,
Component: element.props.Component,
index: element.props.index,
path: element.props.path,
loader: element.props.loader,
action: element.props.action,
errorElement: element.props.errorElement,
ErrorBoundary: element.props.ErrorBoundary,
hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,
shouldRevalidate: element.props.shouldRevalidate,
handle: element.props.handle,
lazy: element.props.lazy
};
if (element.props.children) {
route.children = createRoutesFromChildren(element.props.children, treePath);
}
routes.push(route);
});
return routes;
}
/**
* Renders the result of `matchRoutes()` into a React element.
*/
function renderMatches(matches) {
return _renderMatches(matches);
}
function mapRouteProperties(route) {
let updates = {
// Note: this check also occurs in createRoutesFromChildren so update
// there if you change this -- please and thank you!
hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null
};
if (route.Component) {
if (true) {
if (route.element) {
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `Component` and `element` on your route - " + "`Component` will be used.") : 0;
}
}
Object.assign(updates, {
element: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.Component),
Component: undefined
});
}
if (route.HydrateFallback) {
if (true) {
if (route.hydrateFallbackElement) {
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - " + "`HydrateFallback` will be used.") : 0;
}
}
Object.assign(updates, {
hydrateFallbackElement: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.HydrateFallback),
HydrateFallback: undefined
});
}
if (route.ErrorBoundary) {
if (true) {
if (route.errorElement) {
true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `ErrorBoundary` and `errorElement` on your route - " + "`ErrorBoundary` will be used.") : 0;
}
}
Object.assign(updates, {
errorElement: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.ErrorBoundary),
ErrorBoundary: undefined
});
}
return updates;
}
function createMemoryRouter(routes, opts) {
return (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({
basename: opts == null ? void 0 : opts.basename,
future: _extends({}, opts == null ? void 0 : opts.future, {
v7_prependBasename: true
}),
history: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createMemoryHistory)({
initialEntries: opts == null ? void 0 : opts.initialEntries,
initialIndex: opts == null ? void 0 : opts.initialIndex
}),
hydrationData: opts == null ? void 0 : opts.hydrationData,
routes,
mapRouteProperties,
dataStrategy: opts == null ? void 0 : opts.dataStrategy,
patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation
}).initialize();
}
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./node_modules/redux/es/redux.js":
/*!****************************************!*\
!*** ./node_modules/redux/es/redux.js ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ __DO_NOT_USE__ActionTypes: () => (/* binding */ ActionTypes),
/* harmony export */ applyMiddleware: () => (/* binding */ applyMiddleware),
/* harmony export */ bindActionCreators: () => (/* binding */ bindActionCreators),
/* harmony export */ combineReducers: () => (/* binding */ combineReducers),
/* harmony export */ compose: () => (/* binding */ compose),
/* harmony export */ createStore: () => (/* binding */ createStore),
/* harmony export */ legacy_createStore: () => (/* binding */ legacy_createStore)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
/**
* Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js
*
* Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes
* during build.
* @param {number} code
*/
function formatProdErrorMessage(code) {
return "Minified Redux error #" + code + "; visit https://redux.js.org/Errors?code=" + code + " for the full message or " + 'use the non-minified dev environment for full errors. ';
}
// Inlined version of the `symbol-observable` polyfill
var $$observable = (function () {
return typeof Symbol === 'function' && Symbol.observable || '@@observable';
})();
/**
* These are private action types reserved by Redux.
* For any unknown actions, you must return the current state.
* If the current state is undefined, you must return the initial state.
* Do not reference these action types directly in your code.
*/
var randomString = function randomString() {
return Math.random().toString(36).substring(7).split('').join('.');
};
var ActionTypes = {
INIT: "@@redux/INIT" + randomString(),
REPLACE: "@@redux/REPLACE" + randomString(),
PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {
return "@@redux/PROBE_UNKNOWN_ACTION" + randomString();
}
};
/**
* @param {any} obj The object to inspect.
* @returns {boolean} True if the argument appears to be a plain object.
*/
function isPlainObject(obj) {
if (typeof obj !== 'object' || obj === null) return false;
var proto = obj;
while (Object.getPrototypeOf(proto) !== null) {
proto = Object.getPrototypeOf(proto);
}
return Object.getPrototypeOf(obj) === proto;
}
// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of
function miniKindOf(val) {
if (val === void 0) return 'undefined';
if (val === null) return 'null';
var type = typeof val;
switch (type) {
case 'boolean':
case 'string':
case 'number':
case 'symbol':
case 'function':
{
return type;
}
}
if (Array.isArray(val)) return 'array';
if (isDate(val)) return 'date';
if (isError(val)) return 'error';
var constructorName = ctorName(val);
switch (constructorName) {
case 'Symbol':
case 'Promise':
case 'WeakMap':
case 'WeakSet':
case 'Map':
case 'Set':
return constructorName;
} // other
return type.slice(8, -1).toLowerCase().replace(/\s/g, '');
}
function ctorName(val) {
return typeof val.constructor === 'function' ? val.constructor.name : null;
}
function isError(val) {
return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';
}
function isDate(val) {
if (val instanceof Date) return true;
return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';
}
function kindOf(val) {
var typeOfVal = typeof val;
if (true) {
typeOfVal = miniKindOf(val);
}
return typeOfVal;
}
/**
* @deprecated
*
* **We recommend using the `configureStore` method
* of the `@reduxjs/toolkit` package**, which replaces `createStore`.
*
* Redux Toolkit is our recommended approach for writing Redux logic today,
* including store setup, reducers, data fetching, and more.
*
* **For more details, please read this Redux docs page:**
* **https://redux.js.org/introduction/why-rtk-is-redux-today**
*
* `configureStore` from Redux Toolkit is an improved version of `createStore` that
* simplifies setup and helps avoid common bugs.
*
* You should not be using the `redux` core package by itself today, except for learning purposes.
* The `createStore` method from the core `redux` package will not be removed, but we encourage
* all users to migrate to using Redux Toolkit for all Redux code.
*
* If you want to use `createStore` without this visual deprecation warning, use
* the `legacy_createStore` import instead:
*
* `import { legacy_createStore as createStore} from 'redux'`
*
*/
function createStore(reducer, preloadedState, enhancer) {
var _ref2;
if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {
throw new Error( false ? 0 : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');
}
if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
enhancer = preloadedState;
preloadedState = undefined;
}
if (typeof enhancer !== 'undefined') {
if (typeof enhancer !== 'function') {
throw new Error( false ? 0 : "Expected the enhancer to be a function. Instead, received: '" + kindOf(enhancer) + "'");
}
return enhancer(createStore)(reducer, preloadedState);
}
if (typeof reducer !== 'function') {
throw new Error( false ? 0 : "Expected the root reducer to be a function. Instead, received: '" + kindOf(reducer) + "'");
}
var currentReducer = reducer;
var currentState = preloadedState;
var currentListeners = [];
var nextListeners = currentListeners;
var isDispatching = false;
/**
* This makes a shallow copy of currentListeners so we can use
* nextListeners as a temporary list while dispatching.
*
* This prevents any bugs around consumers calling
* subscribe/unsubscribe in the middle of a dispatch.
*/
function ensureCanMutateNextListeners() {
if (nextListeners === currentListeners) {
nextListeners = currentListeners.slice();
}
}
/**
* Reads the state tree managed by the store.
*
* @returns {any} The current state tree of your application.
*/
function getState() {
if (isDispatching) {
throw new Error( false ? 0 : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');
}
return currentState;
}
/**
* Adds a change listener. It will be called any time an action is dispatched,
* and some part of the state tree may potentially have changed. You may then
* call `getState()` to read the current state tree inside the callback.
*
* You may call `dispatch()` from a change listener, with the following
* caveats:
*
* 1. The subscriptions are snapshotted just before every `dispatch()` call.
* If you subscribe or unsubscribe while the listeners are being invoked, this
* will not have any effect on the `dispatch()` that is currently in progress.
* However, the next `dispatch()` call, whether nested or not, will use a more
* recent snapshot of the subscription list.
*
* 2. The listener should not expect to see all state changes, as the state
* might have been updated multiple times during a nested `dispatch()` before
* the listener is called. It is, however, guaranteed that all subscribers
* registered before the `dispatch()` started will be called with the latest
* state by the time it exits.
*
* @param {Function} listener A callback to be invoked on every dispatch.
* @returns {Function} A function to remove this change listener.
*/
function subscribe(listener) {
if (typeof listener !== 'function') {
throw new Error( false ? 0 : "Expected the listener to be a function. Instead, received: '" + kindOf(listener) + "'");
}
if (isDispatching) {
throw new Error( false ? 0 : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');
}
var isSubscribed = true;
ensureCanMutateNextListeners();
nextListeners.push(listener);
return function unsubscribe() {
if (!isSubscribed) {
return;
}
if (isDispatching) {
throw new Error( false ? 0 : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');
}
isSubscribed = false;
ensureCanMutateNextListeners();
var index = nextListeners.indexOf(listener);
nextListeners.splice(index, 1);
currentListeners = null;
};
}
/**
* Dispatches an action. It is the only way to trigger a state change.
*
* The `reducer` function, used to create the store, will be called with the
* current state tree and the given `action`. Its return value will
* be considered the **next** state of the tree, and the change listeners
* will be notified.
*
* The base implementation only supports plain object actions. If you want to
* dispatch a Promise, an Observable, a thunk, or something else, you need to
* wrap your store creating function into the corresponding middleware. For
* example, see the documentation for the `redux-thunk` package. Even the
* middleware will eventually dispatch plain object actions using this method.
*
* @param {Object} action A plain object representing “what changed”. It is
* a good idea to keep actions serializable so you can record and replay user
* sessions, or use the time travelling `redux-devtools`. An action must have
* a `type` property which may not be `undefined`. It is a good idea to use
* string constants for action types.
*
* @returns {Object} For convenience, the same action object you dispatched.
*
* Note that, if you use a custom middleware, it may wrap `dispatch()` to
* return something else (for example, a Promise you can await).
*/
function dispatch(action) {
if (!isPlainObject(action)) {
throw new Error( false ? 0 : "Actions must be plain objects. Instead, the actual type was: '" + kindOf(action) + "'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.");
}
if (typeof action.type === 'undefined') {
throw new Error( false ? 0 : 'Actions may not have an undefined "type" property. You may have misspelled an action type string constant.');
}
if (isDispatching) {
throw new Error( false ? 0 : 'Reducers may not dispatch actions.');
}
try {
isDispatching = true;
currentState = currentReducer(currentState, action);
} finally {
isDispatching = false;
}
var listeners = currentListeners = nextListeners;
for (var i = 0; i < listeners.length; i++) {
var listener = listeners[i];
listener();
}
return action;
}
/**
* Replaces the reducer currently used by the store to calculate the state.
*
* You might need this if your app implements code splitting and you want to
* load some of the reducers dynamically. You might also need this if you
* implement a hot reloading mechanism for Redux.
*
* @param {Function} nextReducer The reducer for the store to use instead.
* @returns {void}
*/
function replaceReducer(nextReducer) {
if (typeof nextReducer !== 'function') {
throw new Error( false ? 0 : "Expected the nextReducer to be a function. Instead, received: '" + kindOf(nextReducer));
}
currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.
// Any reducers that existed in both the new and old rootReducer
// will receive the previous state. This effectively populates
// the new state tree with any relevant data from the old one.
dispatch({
type: ActionTypes.REPLACE
});
}
/**
* Interoperability point for observable/reactive libraries.
* @returns {observable} A minimal observable of state changes.
* For more information, see the observable proposal:
* https://github.com/tc39/proposal-observable
*/
function observable() {
var _ref;
var outerSubscribe = subscribe;
return _ref = {
/**
* The minimal observable subscription method.
* @param {Object} observer Any object that can be used as an observer.
* The observer object should have a `next` method.
* @returns {subscription} An object with an `unsubscribe` method that can
* be used to unsubscribe the observable from the store, and prevent further
* emission of values from the observable.
*/
subscribe: function subscribe(observer) {
if (typeof observer !== 'object' || observer === null) {
throw new Error( false ? 0 : "Expected the observer to be an object. Instead, received: '" + kindOf(observer) + "'");
}
function observeState() {
if (observer.next) {
observer.next(getState());
}
}
observeState();
var unsubscribe = outerSubscribe(observeState);
return {
unsubscribe: unsubscribe
};
}
}, _ref[$$observable] = function () {
return this;
}, _ref;
} // When a store is created, an "INIT" action is dispatched so that every
// reducer returns their initial state. This effectively populates
// the initial state tree.
dispatch({
type: ActionTypes.INIT
});
return _ref2 = {
dispatch: dispatch,
subscribe: subscribe,
getState: getState,
replaceReducer: replaceReducer
}, _ref2[$$observable] = observable, _ref2;
}
/**
* Creates a Redux store that holds the state tree.
*
* **We recommend using `configureStore` from the
* `@reduxjs/toolkit` package**, which replaces `createStore`:
* **https://redux.js.org/introduction/why-rtk-is-redux-today**
*
* The only way to change the data in the store is to call `dispatch()` on it.
*
* There should only be a single store in your app. To specify how different
* parts of the state tree respond to actions, you may combine several reducers
* into a single reducer function by using `combineReducers`.
*
* @param {Function} reducer A function that returns the next state tree, given
* the current state tree and the action to handle.
*
* @param {any} [preloadedState] The initial state. You may optionally specify it
* to hydrate the state from the server in universal apps, or to restore a
* previously serialized user session.
* If you use `combineReducers` to produce the root reducer function, this must be
* an object with the same shape as `combineReducers` keys.
*
* @param {Function} [enhancer] The store enhancer. You may optionally specify it
* to enhance the store with third-party capabilities such as middleware,
* time travel, persistence, etc. The only store enhancer that ships with Redux
* is `applyMiddleware()`.
*
* @returns {Store} A Redux store that lets you read the state, dispatch actions
* and subscribe to changes.
*/
var legacy_createStore = createStore;
/**
* Prints a warning in the console if it exists.
*
* @param {String} message The warning message.
* @returns {void}
*/
function warning(message) {
/* eslint-disable no-console */
if (typeof console !== 'undefined' && typeof console.error === 'function') {
console.error(message);
}
/* eslint-enable no-console */
try {
// This error was thrown as a convenience so that if you enable
// "break on all exceptions" in your console,
// it would pause the execution at this line.
throw new Error(message);
} catch (e) {} // eslint-disable-line no-empty
}
function getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {
var reducerKeys = Object.keys(reducers);
var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';
if (reducerKeys.length === 0) {
return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';
}
if (!isPlainObject(inputState)) {
return "The " + argumentName + " has unexpected type of \"" + kindOf(inputState) + "\". Expected argument to be an object with the following " + ("keys: \"" + reducerKeys.join('", "') + "\"");
}
var unexpectedKeys = Object.keys(inputState).filter(function (key) {
return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];
});
unexpectedKeys.forEach(function (key) {
unexpectedKeyCache[key] = true;
});
if (action && action.type === ActionTypes.REPLACE) return;
if (unexpectedKeys.length > 0) {
return "Unexpected " + (unexpectedKeys.length > 1 ? 'keys' : 'key') + " " + ("\"" + unexpectedKeys.join('", "') + "\" found in " + argumentName + ". ") + "Expected to find one of the known reducer keys instead: " + ("\"" + reducerKeys.join('", "') + "\". Unexpected keys will be ignored.");
}
}
function assertReducerShape(reducers) {
Object.keys(reducers).forEach(function (key) {
var reducer = reducers[key];
var initialState = reducer(undefined, {
type: ActionTypes.INIT
});
if (typeof initialState === 'undefined') {
throw new Error( false ? 0 : "The slice reducer for key \"" + key + "\" returned undefined during initialization. " + "If the state passed to the reducer is undefined, you must " + "explicitly return the initial state. The initial state may " + "not be undefined. If you don't want to set a value for this reducer, " + "you can use null instead of undefined.");
}
if (typeof reducer(undefined, {
type: ActionTypes.PROBE_UNKNOWN_ACTION()
}) === 'undefined') {
throw new Error( false ? 0 : "The slice reducer for key \"" + key + "\" returned undefined when probed with a random type. " + ("Don't try to handle '" + ActionTypes.INIT + "' or other actions in \"redux/*\" ") + "namespace. They are considered private. Instead, you must return the " + "current state for any unknown actions, unless it is undefined, " + "in which case you must return the initial state, regardless of the " + "action type. The initial state may not be undefined, but can be null.");
}
});
}
/**
* Turns an object whose values are different reducer functions, into a single
* reducer function. It will call every child reducer, and gather their results
* into a single state object, whose keys correspond to the keys of the passed
* reducer functions.
*
* @param {Object} reducers An object whose values correspond to different
* reducer functions that need to be combined into one. One handy way to obtain
* it is to use ES6 `import * as reducers` syntax. The reducers may never return
* undefined for any action. Instead, they should return their initial state
* if the state passed to them was undefined, and the current state for any
* unrecognized action.
*
* @returns {Function} A reducer function that invokes every reducer inside the
* passed object, and builds a state object with the same shape.
*/
function combineReducers(reducers) {
var reducerKeys = Object.keys(reducers);
var finalReducers = {};
for (var i = 0; i < reducerKeys.length; i++) {
var key = reducerKeys[i];
if (true) {
if (typeof reducers[key] === 'undefined') {
warning("No reducer provided for key \"" + key + "\"");
}
}
if (typeof reducers[key] === 'function') {
finalReducers[key] = reducers[key];
}
}
var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same
// keys multiple times.
var unexpectedKeyCache;
if (true) {
unexpectedKeyCache = {};
}
var shapeAssertionError;
try {
assertReducerShape(finalReducers);
} catch (e) {
shapeAssertionError = e;
}
return function combination(state, action) {
if (state === void 0) {
state = {};
}
if (shapeAssertionError) {
throw shapeAssertionError;
}
if (true) {
var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);
if (warningMessage) {
warning(warningMessage);
}
}
var hasChanged = false;
var nextState = {};
for (var _i = 0; _i < finalReducerKeys.length; _i++) {
var _key = finalReducerKeys[_i];
var reducer = finalReducers[_key];
var previousStateForKey = state[_key];
var nextStateForKey = reducer(previousStateForKey, action);
if (typeof nextStateForKey === 'undefined') {
var actionType = action && action.type;
throw new Error( false ? 0 : "When called with an action of type " + (actionType ? "\"" + String(actionType) + "\"" : '(unknown type)') + ", the slice reducer for key \"" + _key + "\" returned undefined. " + "To ignore an action, you must explicitly return the previous state. " + "If you want this reducer to hold no value, you can return null instead of undefined.");
}
nextState[_key] = nextStateForKey;
hasChanged = hasChanged || nextStateForKey !== previousStateForKey;
}
hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;
return hasChanged ? nextState : state;
};
}
function bindActionCreator(actionCreator, dispatch) {
return function () {
return dispatch(actionCreator.apply(this, arguments));
};
}
/**
* Turns an object whose values are action creators, into an object with the
* same keys, but with every function wrapped into a `dispatch` call so they
* may be invoked directly. This is just a convenience method, as you can call
* `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
*
* For convenience, you can also pass an action creator as the first argument,
* and get a dispatch wrapped function in return.
*
* @param {Function|Object} actionCreators An object whose values are action
* creator functions. One handy way to obtain it is to use ES6 `import * as`
* syntax. You may also pass a single function.
*
* @param {Function} dispatch The `dispatch` function available on your Redux
* store.
*
* @returns {Function|Object} The object mimicking the original object, but with
* every action creator wrapped into the `dispatch` call. If you passed a
* function as `actionCreators`, the return value will also be a single
* function.
*/
function bindActionCreators(actionCreators, dispatch) {
if (typeof actionCreators === 'function') {
return bindActionCreator(actionCreators, dispatch);
}
if (typeof actionCreators !== 'object' || actionCreators === null) {
throw new Error( false ? 0 : "bindActionCreators expected an object or a function, but instead received: '" + kindOf(actionCreators) + "'. " + "Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?");
}
var boundActionCreators = {};
for (var key in actionCreators) {
var actionCreator = actionCreators[key];
if (typeof actionCreator === 'function') {
boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);
}
}
return boundActionCreators;
}
/**
* Composes single-argument functions from right to left. The rightmost
* function can take multiple arguments as it provides the signature for
* the resulting composite function.
*
* @param {...Function} funcs The functions to compose.
* @returns {Function} A function obtained by composing the argument functions
* from right to left. For example, compose(f, g, h) is identical to doing
* (...args) => f(g(h(...args))).
*/
function compose() {
for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {
funcs[_key] = arguments[_key];
}
if (funcs.length === 0) {
return function (arg) {
return arg;
};
}
if (funcs.length === 1) {
return funcs[0];
}
return funcs.reduce(function (a, b) {
return function () {
return a(b.apply(void 0, arguments));
};
});
}
/**
* Creates a store enhancer that applies middleware to the dispatch method
* of the Redux store. This is handy for a variety of tasks, such as expressing
* asynchronous actions in a concise manner, or logging every action payload.
*
* See `redux-thunk` package as an example of the Redux middleware.
*
* Because middleware is potentially asynchronous, this should be the first
* store enhancer in the composition chain.
*
* Note that each middleware will be given the `dispatch` and `getState` functions
* as named arguments.
*
* @param {...Function} middlewares The middleware chain to be applied.
* @returns {Function} A store enhancer applying the middleware.
*/
function applyMiddleware() {
for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {
middlewares[_key] = arguments[_key];
}
return function (createStore) {
return function () {
var store = createStore.apply(void 0, arguments);
var _dispatch = function dispatch() {
throw new Error( false ? 0 : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');
};
var middlewareAPI = {
getState: store.getState,
dispatch: function dispatch() {
return _dispatch.apply(void 0, arguments);
}
};
var chain = middlewares.map(function (middleware) {
return middleware(middlewareAPI);
});
_dispatch = compose.apply(void 0, chain)(store.dispatch);
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, store), {}, {
dispatch: _dispatch
});
};
};
}
/***/ }),
/***/ "./node_modules/safe-buffer/index.js":
/*!*******************************************!*\
!*** ./node_modules/safe-buffer/index.js ***!
\*******************************************/
/***/ ((module, exports, __webpack_require__) => {
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
/* eslint-disable node/no-deprecated-api */
var buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js")
var Buffer = buffer.Buffer
// alternative to using Object.keys for old browsers
function copyProps (src, dst) {
for (var key in src) {
dst[key] = src[key]
}
}
if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
module.exports = buffer
} else {
// Copy properties from require('buffer')
copyProps(buffer, exports)
exports.Buffer = SafeBuffer
}
function SafeBuffer (arg, encodingOrOffset, length) {
return Buffer(arg, encodingOrOffset, length)
}
SafeBuffer.prototype = Object.create(Buffer.prototype)
// Copy static methods from Buffer
copyProps(Buffer, SafeBuffer)
SafeBuffer.from = function (arg, encodingOrOffset, length) {
if (typeof arg === 'number') {
throw new TypeError('Argument must not be a number')
}
return Buffer(arg, encodingOrOffset, length)
}
SafeBuffer.alloc = function (size, fill, encoding) {
if (typeof size !== 'number') {
throw new TypeError('Argument must be a number')
}
var buf = Buffer(size)
if (fill !== undefined) {
if (typeof encoding === 'string') {
buf.fill(fill, encoding)
} else {
buf.fill(fill)
}
} else {
buf.fill(0)
}
return buf
}
SafeBuffer.allocUnsafe = function (size) {
if (typeof size !== 'number') {
throw new TypeError('Argument must be a number')
}
return Buffer(size)
}
SafeBuffer.allocUnsafeSlow = function (size) {
if (typeof size !== 'number') {
throw new TypeError('Argument must be a number')
}
return buffer.SlowBuffer(size)
}
/***/ }),
/***/ "./node_modules/string_decoder/lib/string_decoder.js":
/*!***********************************************************!*\
!*** ./node_modules/string_decoder/lib/string_decoder.js ***!
\***********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
/*<replacement>*/
var Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer);
/*</replacement>*/
var isEncoding = Buffer.isEncoding || function (encoding) {
encoding = '' + encoding;
switch (encoding && encoding.toLowerCase()) {
case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
return true;
default:
return false;
}
};
function _normalizeEncoding(enc) {
if (!enc) return 'utf8';
var retried;
while (true) {
switch (enc) {
case 'utf8':
case 'utf-8':
return 'utf8';
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return 'utf16le';
case 'latin1':
case 'binary':
return 'latin1';
case 'base64':
case 'ascii':
case 'hex':
return enc;
default:
if (retried) return; // undefined
enc = ('' + enc).toLowerCase();
retried = true;
}
}
};
// Do not cache `Buffer.isEncoding` when checking encoding names as some
// modules monkey-patch it to support additional encodings
function normalizeEncoding(enc) {
var nenc = _normalizeEncoding(enc);
if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
return nenc || enc;
}
// StringDecoder provides an interface for efficiently splitting a series of
// buffers into a series of JS strings without breaking apart multi-byte
// characters.
exports.StringDecoder = StringDecoder;
function StringDecoder(encoding) {
this.encoding = normalizeEncoding(encoding);
var nb;
switch (this.encoding) {
case 'utf16le':
this.text = utf16Text;
this.end = utf16End;
nb = 4;
break;
case 'utf8':
this.fillLast = utf8FillLast;
nb = 4;
break;
case 'base64':
this.text = base64Text;
this.end = base64End;
nb = 3;
break;
default:
this.write = simpleWrite;
this.end = simpleEnd;
return;
}
this.lastNeed = 0;
this.lastTotal = 0;
this.lastChar = Buffer.allocUnsafe(nb);
}
StringDecoder.prototype.write = function (buf) {
if (buf.length === 0) return '';
var r;
var i;
if (this.lastNeed) {
r = this.fillLast(buf);
if (r === undefined) return '';
i = this.lastNeed;
this.lastNeed = 0;
} else {
i = 0;
}
if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
return r || '';
};
StringDecoder.prototype.end = utf8End;
// Returns only complete characters in a Buffer
StringDecoder.prototype.text = utf8Text;
// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
StringDecoder.prototype.fillLast = function (buf) {
if (this.lastNeed <= buf.length) {
buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
return this.lastChar.toString(this.encoding, 0, this.lastTotal);
}
buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
this.lastNeed -= buf.length;
};
// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
// continuation byte. If an invalid byte is detected, -2 is returned.
function utf8CheckByte(byte) {
if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
return byte >> 6 === 0x02 ? -1 : -2;
}
// Checks at most 3 bytes at the end of a Buffer in order to detect an
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
// needed to complete the UTF-8 character (if applicable) are returned.
function utf8CheckIncomplete(self, buf, i) {
var j = buf.length - 1;
if (j < i) return 0;
var nb = utf8CheckByte(buf[j]);
if (nb >= 0) {
if (nb > 0) self.lastNeed = nb - 1;
return nb;
}
if (--j < i || nb === -2) return 0;
nb = utf8CheckByte(buf[j]);
if (nb >= 0) {
if (nb > 0) self.lastNeed = nb - 2;
return nb;
}
if (--j < i || nb === -2) return 0;
nb = utf8CheckByte(buf[j]);
if (nb >= 0) {
if (nb > 0) {
if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
}
return nb;
}
return 0;
}
// Validates as many continuation bytes for a multi-byte UTF-8 character as
// needed or are available. If we see a non-continuation byte where we expect
// one, we "replace" the validated continuation bytes we've seen so far with
// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding
// behavior. The continuation byte check is included three times in the case
// where all of the continuation bytes for a character exist in the same buffer.
// It is also done this way as a slight performance increase instead of using a
// loop.
function utf8CheckExtraBytes(self, buf, p) {
if ((buf[0] & 0xC0) !== 0x80) {
self.lastNeed = 0;
return '\ufffd';
}
if (self.lastNeed > 1 && buf.length > 1) {
if ((buf[1] & 0xC0) !== 0x80) {
self.lastNeed = 1;
return '\ufffd';
}
if (self.lastNeed > 2 && buf.length > 2) {
if ((buf[2] & 0xC0) !== 0x80) {
self.lastNeed = 2;
return '\ufffd';
}
}
}
}
// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
function utf8FillLast(buf) {
var p = this.lastTotal - this.lastNeed;
var r = utf8CheckExtraBytes(this, buf, p);
if (r !== undefined) return r;
if (this.lastNeed <= buf.length) {
buf.copy(this.lastChar, p, 0, this.lastNeed);
return this.lastChar.toString(this.encoding, 0, this.lastTotal);
}
buf.copy(this.lastChar, p, 0, buf.length);
this.lastNeed -= buf.length;
}
// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
// partial character, the character's bytes are buffered until the required
// number of bytes are available.
function utf8Text(buf, i) {
var total = utf8CheckIncomplete(this, buf, i);
if (!this.lastNeed) return buf.toString('utf8', i);
this.lastTotal = total;
var end = buf.length - (total - this.lastNeed);
buf.copy(this.lastChar, 0, end);
return buf.toString('utf8', i, end);
}
// For UTF-8, a replacement character is added when ending on a partial
// character.
function utf8End(buf) {
var r = buf && buf.length ? this.write(buf) : '';
if (this.lastNeed) return r + '\ufffd';
return r;
}
// UTF-16LE typically needs two bytes per character, but even if we have an even
// number of bytes available, we need to check if we end on a leading/high
// surrogate. In that case, we need to wait for the next two bytes in order to
// decode the last character properly.
function utf16Text(buf, i) {
if ((buf.length - i) % 2 === 0) {
var r = buf.toString('utf16le', i);
if (r) {
var c = r.charCodeAt(r.length - 1);
if (c >= 0xD800 && c <= 0xDBFF) {
this.lastNeed = 2;
this.lastTotal = 4;
this.lastChar[0] = buf[buf.length - 2];
this.lastChar[1] = buf[buf.length - 1];
return r.slice(0, -1);
}
}
return r;
}
this.lastNeed = 1;
this.lastTotal = 2;
this.lastChar[0] = buf[buf.length - 1];
return buf.toString('utf16le', i, buf.length - 1);
}
// For UTF-16LE we do not explicitly append special replacement characters if we
// end on a partial character, we simply let v8 handle that.
function utf16End(buf) {
var r = buf && buf.length ? this.write(buf) : '';
if (this.lastNeed) {
var end = this.lastTotal - this.lastNeed;
return r + this.lastChar.toString('utf16le', 0, end);
}
return r;
}
function base64Text(buf, i) {
var n = (buf.length - i) % 3;
if (n === 0) return buf.toString('base64', i);
this.lastNeed = 3 - n;
this.lastTotal = 3;
if (n === 1) {
this.lastChar[0] = buf[buf.length - 1];
} else {
this.lastChar[0] = buf[buf.length - 2];
this.lastChar[1] = buf[buf.length - 1];
}
return buf.toString('base64', i, buf.length - n);
}
function base64End(buf) {
var r = buf && buf.length ? this.write(buf) : '';
if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
return r;
}
// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
function simpleWrite(buf) {
return buf.toString(this.encoding);
}
function simpleEnd(buf) {
return buf && buf.length ? this.write(buf) : '';
}
/***/ }),
/***/ "react":
/*!************************!*\
!*** external "React" ***!
\************************/
/***/ ((module) => {
"use strict";
module.exports = window["React"];
/***/ }),
/***/ "react-dom":
/*!***************************!*\
!*** external "ReactDOM" ***!
\***************************/
/***/ ((module) => {
"use strict";
module.exports = window["ReactDOM"];
/***/ }),
/***/ "@wordpress/api-fetch":
/*!**********************************!*\
!*** external ["wp","apiFetch"] ***!
\**********************************/
/***/ ((module) => {
"use strict";
module.exports = window["wp"]["apiFetch"];
/***/ }),
/***/ "@wordpress/components":
/*!************************************!*\
!*** external ["wp","components"] ***!
\************************************/
/***/ ((module) => {
"use strict";
module.exports = window["wp"]["components"];
/***/ }),
/***/ "@wordpress/element":
/*!*********************************!*\
!*** external ["wp","element"] ***!
\*********************************/
/***/ ((module) => {
"use strict";
module.exports = window["wp"]["element"];
/***/ }),
/***/ "@wordpress/i18n":
/*!******************************!*\
!*** external ["wp","i18n"] ***!
\******************************/
/***/ ((module) => {
"use strict";
module.exports = window["wp"]["i18n"];
/***/ }),
/***/ "?13bc":
/*!*********************************!*\
!*** readable-stream (ignored) ***!
\*********************************/
/***/ (() => {
/* (ignored) */
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js":
/*!*******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
\*******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ _defineProperty)
/* harmony export */ });
/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js");
function _defineProperty(e, r, t) {
return (r = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__["default"])(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/extends.js":
/*!************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
\************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ _extends)
/* harmony export */ });
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js ***!
\******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ _objectSpread2)
/* harmony export */ });
/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defineProperty.js */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
function ownKeys(e, r) {
var t = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
r && (o = o.filter(function (r) {
return Object.getOwnPropertyDescriptor(e, r).enumerable;
})), t.push.apply(t, o);
}
return t;
}
function _objectSpread2(e) {
for (var r = 1; r < arguments.length; r++) {
var t = null != arguments[r] ? arguments[r] : {};
r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
(0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__["default"])(e, r, t[r]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
});
}
return e;
}
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":
/*!*********************************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ _objectWithoutPropertiesLoose)
/* harmony export */ });
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (e.includes(n)) continue;
t[n] = r[n];
}
return t;
}
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js":
/*!****************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ toPrimitive)
/* harmony export */ });
/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
function toPrimitive(t, r) {
if ("object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(t) || !t) return t;
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(i)) return i;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js":
/*!******************************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js ***!
\******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ toPropertyKey)
/* harmony export */ });
/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js");
function toPropertyKey(t) {
var i = (0,_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__["default"])(t, "string");
return "symbol" == (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(i) ? i : i + "";
}
/***/ }),
/***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js":
/*!***********************************************************!*\
!*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
\***********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ _typeof)
/* harmony export */ });
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/description/description.js":
/*!***********************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/description/description.js ***!
\***********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Description: () => (/* binding */ G),
/* harmony export */ useDescriptions: () => (/* binding */ w)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_id_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/use-id.js */ "./node_modules/@headlessui/react/dist/hooks/use-id.js");
/* harmony import */ var _hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
let d=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);function f(){let r=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(d);if(r===null){let t=new Error("You used a <Description /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,f),t}return r}function w(){let[r,t]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);return[r.length>0?r.join(" "):void 0,(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>function(e){let i=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)(s=>(t(o=>[...o,s]),()=>t(o=>{let p=o.slice(),c=p.indexOf(s);return c!==-1&&p.splice(c,1),p}))),n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({register:i,slot:e.slot,name:e.name,props:e.props}),[i,e.slot,e.name,e.props]);return react__WEBPACK_IMPORTED_MODULE_0__.createElement(d.Provider,{value:n},e.children)},[t])]}let I="p";function S(r,t){let a=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_2__.useId)(),{id:e=`headlessui-description-${a}`,...i}=r,n=f(),s=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_3__.useSyncRefs)(t);(0,_hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_4__.useIsoMorphicEffect)(()=>n.register(e),[e,n.register]);let o={ref:s,...n.props,id:e};return (0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.render)({ourProps:o,theirProps:i,slot:n.slot||{},defaultTag:I,name:n.name||"Description"})}let h=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.forwardRefWithAs)(S),G=Object.assign(h,{});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/dialog/dialog.js":
/*!*************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/dialog/dialog.js ***!
\*************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Dialog: () => (/* binding */ _t)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _components_focus_trap_focus_trap_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../components/focus-trap/focus-trap.js */ "./node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.js");
/* harmony import */ var _components_portal_portal_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../components/portal/portal.js */ "./node_modules/@headlessui/react/dist/components/portal/portal.js");
/* harmony import */ var _hooks_document_overflow_use_document_overflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/document-overflow/use-document-overflow.js */ "./node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_event_listener_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../hooks/use-event-listener.js */ "./node_modules/@headlessui/react/dist/hooks/use-event-listener.js");
/* harmony import */ var _hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-id.js */ "./node_modules/@headlessui/react/dist/hooks/use-id.js");
/* harmony import */ var _hooks_use_inert_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../hooks/use-inert.js */ "./node_modules/@headlessui/react/dist/hooks/use-inert.js");
/* harmony import */ var _hooks_use_outside_click_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../hooks/use-outside-click.js */ "./node_modules/@headlessui/react/dist/hooks/use-outside-click.js");
/* harmony import */ var _hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-owner.js */ "./node_modules/@headlessui/react/dist/hooks/use-owner.js");
/* harmony import */ var _hooks_use_root_containers_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/use-root-containers.js */ "./node_modules/@headlessui/react/dist/hooks/use-root-containers.js");
/* harmony import */ var _hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../hooks/use-server-handoff-complete.js */ "./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../internal/open-closed.js */ "./node_modules/@headlessui/react/dist/internal/open-closed.js");
/* harmony import */ var _internal_portal_force_root_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../internal/portal-force-root.js */ "./node_modules/@headlessui/react/dist/internal/portal-force-root.js");
/* harmony import */ var _internal_stack_context_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../internal/stack-context.js */ "./node_modules/@headlessui/react/dist/internal/stack-context.js");
/* harmony import */ var _utils_bugs_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../utils/bugs.js */ "./node_modules/@headlessui/react/dist/utils/bugs.js");
/* harmony import */ var _utils_match_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
/* harmony import */ var _description_description_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../description/description.js */ "./node_modules/@headlessui/react/dist/components/description/description.js");
/* harmony import */ var _keyboard_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../keyboard.js */ "./node_modules/@headlessui/react/dist/components/keyboard.js");
var Me=(r=>(r[r.Open=0]="Open",r[r.Closed=1]="Closed",r))(Me||{}),we=(e=>(e[e.SetTitleId=0]="SetTitleId",e))(we||{});let He={[0](o,e){return o.titleId===e.id?o:{...o,titleId:e.id}}},I=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);I.displayName="DialogContext";function b(o){let e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(I);if(e===null){let r=new Error(`<${o} /> is missing a parent <Dialog /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,b),r}return e}function Be(o,e,r=()=>[document.body]){(0,_hooks_document_overflow_use_document_overflow_js__WEBPACK_IMPORTED_MODULE_1__.useDocumentOverflowLockedEffect)(o,e,i=>{var n;return{containers:[...(n=i.containers)!=null?n:[],r]}})}function Ge(o,e){return (0,_utils_match_js__WEBPACK_IMPORTED_MODULE_2__.match)(e.type,He,o,e)}let Ne="div",Ue=_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.Features.RenderStrategy|_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.Features.Static;function We(o,e){let r=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__.useId)(),{id:i=`headlessui-dialog-${r}`,open:n,onClose:l,initialFocus:s,role:a="dialog",__demoMode:T=!1,...m}=o,[M,f]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),U=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);a=function(){return a==="dialog"||a==="alertdialog"?a:(U.current||(U.current=!0,console.warn(`Invalid role [${a}] passed to <Dialog />. Only \`dialog\` and and \`alertdialog\` are supported. Using \`dialog\` instead.`)),"dialog")}();let E=(0,_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.useOpenClosed)();n===void 0&&E!==null&&(n=(E&_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Open)===_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Open);let D=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),ee=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_6__.useSyncRefs)(D,e),g=(0,_hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_7__.useOwnerDocument)(D),W=o.hasOwnProperty("open")||E!==null,$=o.hasOwnProperty("onClose");if(!W&&!$)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!W)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!$)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if(typeof n!="boolean")throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${n}`);if(typeof l!="function")throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${l}`);let p=n?0:1,[h,te]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(Ge,{titleId:null,descriptionId:null,panelRef:(0,react__WEBPACK_IMPORTED_MODULE_0__.createRef)()}),P=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_8__.useEvent)(()=>l(!1)),Y=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_8__.useEvent)(t=>te({type:0,id:t})),S=(0,_hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_9__.useServerHandoffComplete)()?T?!1:p===0:!1,x=M>1,j=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(I)!==null,[oe,re]=(0,_components_portal_portal_js__WEBPACK_IMPORTED_MODULE_10__.useNestedPortals)(),ne={get current(){var t;return(t=h.panelRef.current)!=null?t:D.current}},{resolveContainers:w,mainTreeNodeRef:L,MainTreeNode:le}=(0,_hooks_use_root_containers_js__WEBPACK_IMPORTED_MODULE_11__.useRootContainers)({portals:oe,defaultContainers:[ne]}),ae=x?"parent":"leaf",J=E!==null?(E&_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Closing)===_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Closing:!1,ie=(()=>j||J?!1:S)(),se=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{var t,c;return(c=Array.from((t=g==null?void 0:g.querySelectorAll("body > *"))!=null?t:[]).find(d=>d.id==="headlessui-portal-root"?!1:d.contains(L.current)&&d instanceof HTMLElement))!=null?c:null},[L]);(0,_hooks_use_inert_js__WEBPACK_IMPORTED_MODULE_12__.useInert)(se,ie);let pe=(()=>x?!0:S)(),de=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{var t,c;return(c=Array.from((t=g==null?void 0:g.querySelectorAll("[data-headlessui-portal]"))!=null?t:[]).find(d=>d.contains(L.current)&&d instanceof HTMLElement))!=null?c:null},[L]);(0,_hooks_use_inert_js__WEBPACK_IMPORTED_MODULE_12__.useInert)(de,pe);let ue=(()=>!(!S||x))();(0,_hooks_use_outside_click_js__WEBPACK_IMPORTED_MODULE_13__.useOutsideClick)(w,t=>{t.preventDefault(),P()},ue);let fe=(()=>!(x||p!==0))();(0,_hooks_use_event_listener_js__WEBPACK_IMPORTED_MODULE_14__.useEventListener)(g==null?void 0:g.defaultView,"keydown",t=>{fe&&(t.defaultPrevented||t.key===_keyboard_js__WEBPACK_IMPORTED_MODULE_15__.Keys.Escape&&(t.preventDefault(),t.stopPropagation(),P()))});let ge=(()=>!(J||p!==0||j))();Be(g,ge,w),(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(p!==0||!D.current)return;let t=new ResizeObserver(c=>{for(let d of c){let F=d.target.getBoundingClientRect();F.x===0&&F.y===0&&F.width===0&&F.height===0&&P()}});return t.observe(D.current),()=>t.disconnect()},[p,D,P]);let[Te,ce]=(0,_description_description_js__WEBPACK_IMPORTED_MODULE_16__.useDescriptions)(),De=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>[{dialogState:p,close:P,setTitleId:Y},h],[p,h,P,Y]),X=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:p===0}),[p]),me={ref:ee,id:i,role:a,"aria-modal":p===0?!0:void 0,"aria-labelledby":h.titleId,"aria-describedby":Te};return react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_stack_context_js__WEBPACK_IMPORTED_MODULE_17__.StackProvider,{type:"Dialog",enabled:p===0,element:D,onUpdate:(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_8__.useEvent)((t,c)=>{c==="Dialog"&&(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_2__.match)(t,{[_internal_stack_context_js__WEBPACK_IMPORTED_MODULE_17__.StackMessage.Add]:()=>f(d=>d+1),[_internal_stack_context_js__WEBPACK_IMPORTED_MODULE_17__.StackMessage.Remove]:()=>f(d=>d-1)})})},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_portal_force_root_js__WEBPACK_IMPORTED_MODULE_18__.ForcePortalRoot,{force:!0},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_portal_portal_js__WEBPACK_IMPORTED_MODULE_10__.Portal,null,react__WEBPACK_IMPORTED_MODULE_0__.createElement(I.Provider,{value:De},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_portal_portal_js__WEBPACK_IMPORTED_MODULE_10__.Portal.Group,{target:D},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_portal_force_root_js__WEBPACK_IMPORTED_MODULE_18__.ForcePortalRoot,{force:!1},react__WEBPACK_IMPORTED_MODULE_0__.createElement(ce,{slot:X,name:"Dialog.Description"},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_focus_trap_focus_trap_js__WEBPACK_IMPORTED_MODULE_19__.FocusTrap,{initialFocus:s,containers:w,features:S?(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_2__.match)(ae,{parent:_components_focus_trap_focus_trap_js__WEBPACK_IMPORTED_MODULE_19__.FocusTrap.features.RestoreFocus,leaf:_components_focus_trap_focus_trap_js__WEBPACK_IMPORTED_MODULE_19__.FocusTrap.features.All&~_components_focus_trap_focus_trap_js__WEBPACK_IMPORTED_MODULE_19__.FocusTrap.features.FocusLock}):_components_focus_trap_focus_trap_js__WEBPACK_IMPORTED_MODULE_19__.FocusTrap.features.None},react__WEBPACK_IMPORTED_MODULE_0__.createElement(re,null,(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:me,theirProps:m,slot:X,defaultTag:Ne,features:Ue,visible:p===0,name:"Dialog"}))))))))),react__WEBPACK_IMPORTED_MODULE_0__.createElement(le,null))}let $e="div";function Ye(o,e){let r=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__.useId)(),{id:i=`headlessui-dialog-overlay-${r}`,...n}=o,[{dialogState:l,close:s}]=b("Dialog.Overlay"),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_6__.useSyncRefs)(e),T=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_8__.useEvent)(f=>{if(f.target===f.currentTarget){if((0,_utils_bugs_js__WEBPACK_IMPORTED_MODULE_20__.isDisabledReactIssue7711)(f.currentTarget))return f.preventDefault();f.preventDefault(),f.stopPropagation(),s()}}),m=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:l===0}),[l]);return (0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:{ref:a,id:i,"aria-hidden":!0,onClick:T},theirProps:n,slot:m,defaultTag:$e,name:"Dialog.Overlay"})}let je="div";function Je(o,e){let r=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__.useId)(),{id:i=`headlessui-dialog-backdrop-${r}`,...n}=o,[{dialogState:l},s]=b("Dialog.Backdrop"),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_6__.useSyncRefs)(e);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(s.panelRef.current===null)throw new Error("A <Dialog.Backdrop /> component is being used, but a <Dialog.Panel /> component is missing.")},[s.panelRef]);let T=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:l===0}),[l]);return react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_portal_force_root_js__WEBPACK_IMPORTED_MODULE_18__.ForcePortalRoot,{force:!0},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_portal_portal_js__WEBPACK_IMPORTED_MODULE_10__.Portal,null,(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:{ref:a,id:i,"aria-hidden":!0},theirProps:n,slot:T,defaultTag:je,name:"Dialog.Backdrop"})))}let Xe="div";function Ke(o,e){let r=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__.useId)(),{id:i=`headlessui-dialog-panel-${r}`,...n}=o,[{dialogState:l},s]=b("Dialog.Panel"),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_6__.useSyncRefs)(e,s.panelRef),T=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:l===0}),[l]),m=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_8__.useEvent)(f=>{f.stopPropagation()});return (0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:{ref:a,id:i,onClick:m},theirProps:n,slot:T,defaultTag:Xe,name:"Dialog.Panel"})}let Ve="h2";function qe(o,e){let r=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__.useId)(),{id:i=`headlessui-dialog-title-${r}`,...n}=o,[{dialogState:l,setTitleId:s}]=b("Dialog.Title"),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_6__.useSyncRefs)(e);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(s(i),()=>s(null)),[i,s]);let T=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:l===0}),[l]);return (0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:{ref:a,id:i},theirProps:n,slot:T,defaultTag:Ve,name:"Dialog.Title"})}let ze=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.forwardRefWithAs)(We),Qe=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.forwardRefWithAs)(Je),Ze=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.forwardRefWithAs)(Ke),et=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.forwardRefWithAs)(Ye),tt=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.forwardRefWithAs)(qe),_t=Object.assign(ze,{Backdrop:Qe,Panel:Ze,Overlay:et,Title:tt,Description:_description_description_js__WEBPACK_IMPORTED_MODULE_16__.Description});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/disclosure/disclosure.js":
/*!*********************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/disclosure/disclosure.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Disclosure: () => (/* binding */ Ae)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_id_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-id.js */ "./node_modules/@headlessui/react/dist/hooks/use-id.js");
/* harmony import */ var _hooks_use_resolve_button_type_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/use-resolve-button-type.js */ "./node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../internal/open-closed.js */ "./node_modules/@headlessui/react/dist/internal/open-closed.js");
/* harmony import */ var _utils_bugs_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/bugs.js */ "./node_modules/@headlessui/react/dist/utils/bugs.js");
/* harmony import */ var _utils_match_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
/* harmony import */ var _utils_owner_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/owner.js */ "./node_modules/@headlessui/react/dist/utils/owner.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
/* harmony import */ var _utils_start_transition_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/start-transition.js */ "./node_modules/@headlessui/react/dist/utils/start-transition.js");
/* harmony import */ var _keyboard_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../keyboard.js */ "./node_modules/@headlessui/react/dist/components/keyboard.js");
var Q=(o=>(o[o.Open=0]="Open",o[o.Closed=1]="Closed",o))(Q||{}),V=(t=>(t[t.ToggleDisclosure=0]="ToggleDisclosure",t[t.CloseDisclosure=1]="CloseDisclosure",t[t.SetButtonId=2]="SetButtonId",t[t.SetPanelId=3]="SetPanelId",t[t.LinkPanel=4]="LinkPanel",t[t.UnlinkPanel=5]="UnlinkPanel",t))(V||{});let Y={[0]:e=>({...e,disclosureState:(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_1__.match)(e.disclosureState,{[0]:1,[1]:0})}),[1]:e=>e.disclosureState===1?e:{...e,disclosureState:1},[4](e){return e.linkedPanel===!0?e:{...e,linkedPanel:!0}},[5](e){return e.linkedPanel===!1?e:{...e,linkedPanel:!1}},[2](e,n){return e.buttonId===n.buttonId?e:{...e,buttonId:n.buttonId}},[3](e,n){return e.panelId===n.panelId?e:{...e,panelId:n.panelId}}},M=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);M.displayName="DisclosureContext";function _(e){let n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(M);if(n===null){let o=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,_),o}return n}let v=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);v.displayName="DisclosureAPIContext";function K(e){let n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(v);if(n===null){let o=new Error(`<${e} /> is missing a parent <Disclosure /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,K),o}return n}let F=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);F.displayName="DisclosurePanelContext";function Z(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(F)}function ee(e,n){return (0,_utils_match_js__WEBPACK_IMPORTED_MODULE_1__.match)(n.type,Y,e,n)}let te=react__WEBPACK_IMPORTED_MODULE_0__.Fragment;function ne(e,n){let{defaultOpen:o=!1,...i}=e,f=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),l=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_2__.useSyncRefs)(n,(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_2__.optionalRef)(u=>{f.current=u},e.as===void 0||e.as===react__WEBPACK_IMPORTED_MODULE_0__.Fragment)),t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),d=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),s=(0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(ee,{disclosureState:o?0:1,linkedPanel:!1,buttonRef:d,panelRef:t,buttonId:null,panelId:null}),[{disclosureState:c,buttonId:a},D]=s,p=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_3__.useEvent)(u=>{D({type:1});let y=(0,_utils_owner_js__WEBPACK_IMPORTED_MODULE_4__.getOwnerDocument)(f);if(!y||!a)return;let r=(()=>u?u instanceof HTMLElement?u:u.current instanceof HTMLElement?u.current:y.getElementById(a):y.getElementById(a))();r==null||r.focus()}),P=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({close:p}),[p]),T=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:c===0,close:p}),[c,p]),C={ref:l};return react__WEBPACK_IMPORTED_MODULE_0__.createElement(M.Provider,{value:s},react__WEBPACK_IMPORTED_MODULE_0__.createElement(v.Provider,{value:P},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.OpenClosedProvider,{value:(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_1__.match)(c,{[0]:_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Open,[1]:_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Closed})},(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.render)({ourProps:C,theirProps:i,slot:T,defaultTag:te,name:"Disclosure"}))))}let le="button";function oe(e,n){let o=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_7__.useId)(),{id:i=`headlessui-disclosure-button-${o}`,...f}=e,[l,t]=_("Disclosure.Button"),d=Z(),s=d===null?!1:d===l.panelId,c=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_2__.useSyncRefs)(c,n,s?null:l.buttonRef),D=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.useMergeRefsFn)();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!s)return t({type:2,buttonId:i}),()=>{t({type:2,buttonId:null})}},[i,t,s]);let p=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_3__.useEvent)(r=>{var m;if(s){if(l.disclosureState===1)return;switch(r.key){case _keyboard_js__WEBPACK_IMPORTED_MODULE_8__.Keys.Space:case _keyboard_js__WEBPACK_IMPORTED_MODULE_8__.Keys.Enter:r.preventDefault(),r.stopPropagation(),t({type:0}),(m=l.buttonRef.current)==null||m.focus();break}}else switch(r.key){case _keyboard_js__WEBPACK_IMPORTED_MODULE_8__.Keys.Space:case _keyboard_js__WEBPACK_IMPORTED_MODULE_8__.Keys.Enter:r.preventDefault(),r.stopPropagation(),t({type:0});break}}),P=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_3__.useEvent)(r=>{switch(r.key){case _keyboard_js__WEBPACK_IMPORTED_MODULE_8__.Keys.Space:r.preventDefault();break}}),T=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_3__.useEvent)(r=>{var m;(0,_utils_bugs_js__WEBPACK_IMPORTED_MODULE_9__.isDisabledReactIssue7711)(r.currentTarget)||e.disabled||(s?(t({type:0}),(m=l.buttonRef.current)==null||m.focus()):t({type:0}))}),C=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:l.disclosureState===0}),[l]),u=(0,_hooks_use_resolve_button_type_js__WEBPACK_IMPORTED_MODULE_10__.useResolveButtonType)(e,c),y=s?{ref:a,type:u,onKeyDown:p,onClick:T}:{ref:a,id:i,type:u,"aria-expanded":l.disclosureState===0,"aria-controls":l.linkedPanel?l.panelId:void 0,onKeyDown:p,onKeyUp:P,onClick:T};return (0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.render)({mergeRefs:D,ourProps:y,theirProps:f,slot:C,defaultTag:le,name:"Disclosure.Button"})}let re="div",se=_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.Features.RenderStrategy|_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.Features.Static;function ue(e,n){let o=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_7__.useId)(),{id:i=`headlessui-disclosure-panel-${o}`,...f}=e,[l,t]=_("Disclosure.Panel"),{close:d}=K("Disclosure.Panel"),s=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.useMergeRefsFn)(),c=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_2__.useSyncRefs)(n,l.panelRef,T=>{(0,_utils_start_transition_js__WEBPACK_IMPORTED_MODULE_11__.startTransition)(()=>t({type:T?4:5}))});(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(t({type:3,panelId:i}),()=>{t({type:3,panelId:null})}),[i,t]);let a=(0,_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.useOpenClosed)(),D=(()=>a!==null?(a&_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Open)===_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_5__.State.Open:l.disclosureState===0)(),p=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({open:l.disclosureState===0,close:d}),[l,d]),P={ref:c,id:i};return react__WEBPACK_IMPORTED_MODULE_0__.createElement(F.Provider,{value:l.panelId},(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.render)({mergeRefs:s,ourProps:P,theirProps:f,slot:p,defaultTag:re,features:se,visible:D,name:"Disclosure.Panel"}))}let ie=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.forwardRefWithAs)(ne),ae=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.forwardRefWithAs)(oe),pe=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_6__.forwardRefWithAs)(ue),Ae=Object.assign(ie,{Button:ae,Panel:pe});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.js":
/*!*********************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ FocusTrap: () => (/* binding */ de)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_disposables_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/use-disposables.js */ "./node_modules/@headlessui/react/dist/hooks/use-disposables.js");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_event_listener_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../hooks/use-event-listener.js */ "./node_modules/@headlessui/react/dist/hooks/use-event-listener.js");
/* harmony import */ var _hooks_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../hooks/use-is-mounted.js */ "./node_modules/@headlessui/react/dist/hooks/use-is-mounted.js");
/* harmony import */ var _hooks_use_on_unmount_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../hooks/use-on-unmount.js */ "./node_modules/@headlessui/react/dist/hooks/use-on-unmount.js");
/* harmony import */ var _hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-owner.js */ "./node_modules/@headlessui/react/dist/hooks/use-owner.js");
/* harmony import */ var _hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/use-server-handoff-complete.js */ "./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _hooks_use_tab_direction_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-tab-direction.js */ "./node_modules/@headlessui/react/dist/hooks/use-tab-direction.js");
/* harmony import */ var _hooks_use_watch_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../hooks/use-watch.js */ "./node_modules/@headlessui/react/dist/hooks/use-watch.js");
/* harmony import */ var _internal_hidden_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internal/hidden.js */ "./node_modules/@headlessui/react/dist/internal/hidden.js");
/* harmony import */ var _utils_active_element_history_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/active-element-history.js */ "./node_modules/@headlessui/react/dist/utils/active-element-history.js");
/* harmony import */ var _utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/focus-management.js */ "./node_modules/@headlessui/react/dist/utils/focus-management.js");
/* harmony import */ var _utils_match_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
/* harmony import */ var _utils_micro_task_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../utils/micro-task.js */ "./node_modules/@headlessui/react/dist/utils/micro-task.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
function P(t){if(!t)return new Set;if(typeof t=="function")return new Set(t());let n=new Set;for(let e of t.current)e.current instanceof HTMLElement&&n.add(e.current);return n}let X="div";var _=(r=>(r[r.None=1]="None",r[r.InitialFocus=2]="InitialFocus",r[r.TabLock=4]="TabLock",r[r.FocusLock=8]="FocusLock",r[r.RestoreFocus=16]="RestoreFocus",r[r.All=30]="All",r))(_||{});function z(t,n){let e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),o=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_1__.useSyncRefs)(e,n),{initialFocus:l,containers:c,features:r=30,...s}=t;(0,_hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_2__.useServerHandoffComplete)()||(r=1);let i=(0,_hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_3__.useOwnerDocument)(e);Y({ownerDocument:i},Boolean(r&16));let u=Z({ownerDocument:i,container:e,initialFocus:l},Boolean(r&2));$({ownerDocument:i,container:e,containers:c,previousActiveElement:u},Boolean(r&8));let y=(0,_hooks_use_tab_direction_js__WEBPACK_IMPORTED_MODULE_4__.useTabDirection)(),R=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_5__.useEvent)(a=>{let m=e.current;if(!m)return;(B=>B())(()=>{(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(y.current,{[_hooks_use_tab_direction_js__WEBPACK_IMPORTED_MODULE_4__.Direction.Forwards]:()=>{(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusIn)(m,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.Focus.First,{skipElements:[a.relatedTarget]})},[_hooks_use_tab_direction_js__WEBPACK_IMPORTED_MODULE_4__.Direction.Backwards]:()=>{(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusIn)(m,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.Focus.Last,{skipElements:[a.relatedTarget]})}})})}),h=(0,_hooks_use_disposables_js__WEBPACK_IMPORTED_MODULE_8__.useDisposables)(),H=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1),j={ref:o,onKeyDown(a){a.key=="Tab"&&(H.current=!0,h.requestAnimationFrame(()=>{H.current=!1}))},onBlur(a){let m=P(c);e.current instanceof HTMLElement&&m.add(e.current);let T=a.relatedTarget;T instanceof HTMLElement&&T.dataset.headlessuiFocusGuard!=="true"&&(S(m,T)||(H.current?(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusIn)(e.current,(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(y.current,{[_hooks_use_tab_direction_js__WEBPACK_IMPORTED_MODULE_4__.Direction.Forwards]:()=>_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.Focus.Next,[_hooks_use_tab_direction_js__WEBPACK_IMPORTED_MODULE_4__.Direction.Backwards]:()=>_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.Focus.Previous})|_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.Focus.WrapAround,{relativeTo:a.target}):a.target instanceof HTMLElement&&(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(a.target)))}};return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,Boolean(r&4)&&react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_hidden_js__WEBPACK_IMPORTED_MODULE_9__.Hidden,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:R,features:_internal_hidden_js__WEBPACK_IMPORTED_MODULE_9__.Features.Focusable}),(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_10__.render)({ourProps:j,theirProps:s,defaultTag:X,name:"FocusTrap"}),Boolean(r&4)&&react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_hidden_js__WEBPACK_IMPORTED_MODULE_9__.Hidden,{as:"button",type:"button","data-headlessui-focus-guard":!0,onFocus:R,features:_internal_hidden_js__WEBPACK_IMPORTED_MODULE_9__.Features.Focusable}))}let D=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_10__.forwardRefWithAs)(z),de=Object.assign(D,{features:_});function Q(t=!0){let n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(_utils_active_element_history_js__WEBPACK_IMPORTED_MODULE_11__.history.slice());return (0,_hooks_use_watch_js__WEBPACK_IMPORTED_MODULE_12__.useWatch)(([e],[o])=>{o===!0&&e===!1&&(0,_utils_micro_task_js__WEBPACK_IMPORTED_MODULE_13__.microTask)(()=>{n.current.splice(0)}),o===!1&&e===!0&&(n.current=_utils_active_element_history_js__WEBPACK_IMPORTED_MODULE_11__.history.slice())},[t,_utils_active_element_history_js__WEBPACK_IMPORTED_MODULE_11__.history,n]),(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_5__.useEvent)(()=>{var e;return(e=n.current.find(o=>o!=null&&o.isConnected))!=null?e:null})}function Y({ownerDocument:t},n){let e=Q(n);(0,_hooks_use_watch_js__WEBPACK_IMPORTED_MODULE_12__.useWatch)(()=>{n||(t==null?void 0:t.activeElement)===(t==null?void 0:t.body)&&(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(e())},[n]),(0,_hooks_use_on_unmount_js__WEBPACK_IMPORTED_MODULE_14__.useOnUnmount)(()=>{n&&(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(e())})}function Z({ownerDocument:t,container:n,initialFocus:e},o){let l=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),c=(0,_hooks_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_15__.useIsMounted)();return (0,_hooks_use_watch_js__WEBPACK_IMPORTED_MODULE_12__.useWatch)(()=>{if(!o)return;let r=n.current;r&&(0,_utils_micro_task_js__WEBPACK_IMPORTED_MODULE_13__.microTask)(()=>{if(!c.current)return;let s=t==null?void 0:t.activeElement;if(e!=null&&e.current){if((e==null?void 0:e.current)===s){l.current=s;return}}else if(r.contains(s)){l.current=s;return}e!=null&&e.current?(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(e.current):(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusIn)(r,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.Focus.First)===_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.FocusResult.Error&&console.warn("There are no focusable elements inside the <FocusTrap />"),l.current=t==null?void 0:t.activeElement})},[o]),l}function $({ownerDocument:t,container:n,containers:e,previousActiveElement:o},l){let c=(0,_hooks_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_15__.useIsMounted)();(0,_hooks_use_event_listener_js__WEBPACK_IMPORTED_MODULE_16__.useEventListener)(t==null?void 0:t.defaultView,"focus",r=>{if(!l||!c.current)return;let s=P(e);n.current instanceof HTMLElement&&s.add(n.current);let i=o.current;if(!i)return;let u=r.target;u&&u instanceof HTMLElement?S(s,u)?(o.current=u,(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(u)):(r.preventDefault(),r.stopPropagation(),(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(i)):(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_7__.focusElement)(o.current)},!0)}function S(t,n){for(let e of t)if(e.contains(n))return!0;return!1}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/keyboard.js":
/*!********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/keyboard.js ***!
\********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Keys: () => (/* binding */ o)
/* harmony export */ });
var o=(r=>(r.Space=" ",r.Enter="Enter",r.Escape="Escape",r.Backspace="Backspace",r.Delete="Delete",r.ArrowLeft="ArrowLeft",r.ArrowUp="ArrowUp",r.ArrowRight="ArrowRight",r.ArrowDown="ArrowDown",r.Home="Home",r.End="End",r.PageUp="PageUp",r.PageDown="PageDown",r.Tab="Tab",r))(o||{});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/label/label.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/label/label.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Label: () => (/* binding */ B),
/* harmony export */ useLabels: () => (/* binding */ F)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_id_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/use-id.js */ "./node_modules/@headlessui/react/dist/hooks/use-id.js");
/* harmony import */ var _hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
let d=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);function u(){let a=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(d);if(a===null){let t=new Error("You used a <Label /> component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}return a}function F(){let[a,t]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);return[a.length>0?a.join(" "):void 0,(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>function(e){let s=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)(r=>(t(l=>[...l,r]),()=>t(l=>{let n=l.slice(),p=n.indexOf(r);return p!==-1&&n.splice(p,1),n}))),o=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({register:s,slot:e.slot,name:e.name,props:e.props}),[s,e.slot,e.name,e.props]);return react__WEBPACK_IMPORTED_MODULE_0__.createElement(d.Provider,{value:o},e.children)},[t])]}let A="label";function h(a,t){let i=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_2__.useId)(),{id:e=`headlessui-label-${i}`,passive:s=!1,...o}=a,r=u(),l=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_3__.useSyncRefs)(t);(0,_hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_4__.useIsoMorphicEffect)(()=>r.register(e),[e,r.register]);let n={ref:l,...r.props,id:e};return s&&("onClick"in n&&(delete n.htmlFor,delete n.onClick),"onClick"in o&&delete o.onClick),(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.render)({ourProps:n,theirProps:o,slot:r.slot||{},defaultTag:A,name:r.name||"Label"})}let v=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.forwardRefWithAs)(h),B=Object.assign(v,{});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/portal/portal.js":
/*!*************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/portal/portal.js ***!
\*************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Portal: () => (/* binding */ te),
/* harmony export */ useNestedPortals: () => (/* binding */ ee)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _hooks_use_on_unmount_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/use-on-unmount.js */ "./node_modules/@headlessui/react/dist/hooks/use-on-unmount.js");
/* harmony import */ var _hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-owner.js */ "./node_modules/@headlessui/react/dist/hooks/use-owner.js");
/* harmony import */ var _hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/use-server-handoff-complete.js */ "./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _internal_portal_force_root_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internal/portal-force-root.js */ "./node_modules/@headlessui/react/dist/internal/portal-force-root.js");
/* harmony import */ var _utils_env_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/env.js */ "./node_modules/@headlessui/react/dist/utils/env.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
function F(p){let n=(0,_internal_portal_force_root_js__WEBPACK_IMPORTED_MODULE_2__.usePortalRoot)(),l=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_),e=(0,_hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_3__.useOwnerDocument)(p),[a,o]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>{if(!n&&l!==null||_utils_env_js__WEBPACK_IMPORTED_MODULE_4__.env.isServer)return null;let t=e==null?void 0:e.getElementById("headlessui-portal-root");if(t)return t;if(e===null)return null;let r=e.createElement("div");return r.setAttribute("id","headlessui-portal-root"),e.body.appendChild(r)});return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{a!==null&&(e!=null&&e.body.contains(a)||e==null||e.body.appendChild(a))},[a,e]),(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{n||l!==null&&o(l.current)},[l,o,n]),a}let U=react__WEBPACK_IMPORTED_MODULE_0__.Fragment;function N(p,n){let l=p,e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_5__.useSyncRefs)((0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_5__.optionalRef)(u=>{e.current=u}),n),o=(0,_hooks_use_owner_js__WEBPACK_IMPORTED_MODULE_3__.useOwnerDocument)(e),t=F(e),[r]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>{var u;return _utils_env_js__WEBPACK_IMPORTED_MODULE_4__.env.isServer?null:(u=o==null?void 0:o.createElement("div"))!=null?u:null}),i=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(f),v=(0,_hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_6__.useServerHandoffComplete)();return (0,_hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_7__.useIsoMorphicEffect)(()=>{!t||!r||t.contains(r)||(r.setAttribute("data-headlessui-portal",""),t.appendChild(r))},[t,r]),(0,_hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_7__.useIsoMorphicEffect)(()=>{if(r&&i)return i.register(r)},[i,r]),(0,_hooks_use_on_unmount_js__WEBPACK_IMPORTED_MODULE_8__.useOnUnmount)(()=>{var u;!t||!r||(r instanceof Node&&t.contains(r)&&t.removeChild(r),t.childNodes.length<=0&&((u=t.parentElement)==null||u.removeChild(t)))}),v?!t||!r?null:(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)((0,_utils_render_js__WEBPACK_IMPORTED_MODULE_9__.render)({ourProps:{ref:a},theirProps:l,defaultTag:U,name:"Portal"}),r):null}let S=react__WEBPACK_IMPORTED_MODULE_0__.Fragment,_=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);function j(p,n){let{target:l,...e}=p,o={ref:(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_5__.useSyncRefs)(n)};return react__WEBPACK_IMPORTED_MODULE_0__.createElement(_.Provider,{value:l},(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_9__.render)({ourProps:o,theirProps:e,defaultTag:S,name:"Popover.Group"}))}let f=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);function ee(){let p=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(f),n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]),l=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_10__.useEvent)(o=>(n.current.push(o),p&&p.register(o),()=>e(o))),e=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_10__.useEvent)(o=>{let t=n.current.indexOf(o);t!==-1&&n.current.splice(t,1),p&&p.unregister(o)}),a=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({register:l,unregister:e,portals:n}),[l,e,n]);return[n,(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>function({children:t}){return react__WEBPACK_IMPORTED_MODULE_0__.createElement(f.Provider,{value:a},t)},[a])]}let D=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_9__.forwardRefWithAs)(N),I=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_9__.forwardRefWithAs)(j),te=Object.assign(D,{Group:I});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/switch/switch.js":
/*!*************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/switch/switch.js ***!
\*************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Switch: () => (/* binding */ _e)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_controllable_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/use-controllable.js */ "./node_modules/@headlessui/react/dist/hooks/use-controllable.js");
/* harmony import */ var _hooks_use_disposables_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../hooks/use-disposables.js */ "./node_modules/@headlessui/react/dist/hooks/use-disposables.js");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-id.js */ "./node_modules/@headlessui/react/dist/hooks/use-id.js");
/* harmony import */ var _hooks_use_resolve_button_type_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/use-resolve-button-type.js */ "./node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _internal_hidden_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../internal/hidden.js */ "./node_modules/@headlessui/react/dist/internal/hidden.js");
/* harmony import */ var _utils_bugs_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../utils/bugs.js */ "./node_modules/@headlessui/react/dist/utils/bugs.js");
/* harmony import */ var _utils_form_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/form.js */ "./node_modules/@headlessui/react/dist/utils/form.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
/* harmony import */ var _description_description_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../description/description.js */ "./node_modules/@headlessui/react/dist/components/description/description.js");
/* harmony import */ var _keyboard_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../keyboard.js */ "./node_modules/@headlessui/react/dist/components/keyboard.js");
/* harmony import */ var _label_label_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../label/label.js */ "./node_modules/@headlessui/react/dist/components/label/label.js");
let S=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);S.displayName="GroupContext";let ee=react__WEBPACK_IMPORTED_MODULE_0__.Fragment;function te(r){var u;let[n,p]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null),[c,T]=(0,_label_label_js__WEBPACK_IMPORTED_MODULE_1__.useLabels)(),[o,b]=(0,_description_description_js__WEBPACK_IMPORTED_MODULE_2__.useDescriptions)(),a=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({switch:n,setSwitch:p,labelledby:c,describedby:o}),[n,p,c,o]),d={},y=r;return react__WEBPACK_IMPORTED_MODULE_0__.createElement(b,{name:"Switch.Description"},react__WEBPACK_IMPORTED_MODULE_0__.createElement(T,{name:"Switch.Label",props:{htmlFor:(u=a.switch)==null?void 0:u.id,onClick(m){n&&(m.currentTarget.tagName==="LABEL"&&m.preventDefault(),n.click(),n.focus({preventScroll:!0}))}}},react__WEBPACK_IMPORTED_MODULE_0__.createElement(S.Provider,{value:a},(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:d,theirProps:y,defaultTag:ee,name:"Switch.Group"}))))}let ne="button";function re(r,n){var E;let p=(0,_hooks_use_id_js__WEBPACK_IMPORTED_MODULE_4__.useId)(),{id:c=`headlessui-switch-${p}`,checked:T,defaultChecked:o=!1,onChange:b,disabled:a=!1,name:d,value:y,form:u,...m}=r,t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(S),f=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),C=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_5__.useSyncRefs)(f,n,t===null?null:t.setSwitch),[i,s]=(0,_hooks_use_controllable_js__WEBPACK_IMPORTED_MODULE_6__.useControllable)(T,b,o),w=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_7__.useEvent)(()=>s==null?void 0:s(!i)),L=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_7__.useEvent)(e=>{if((0,_utils_bugs_js__WEBPACK_IMPORTED_MODULE_8__.isDisabledReactIssue7711)(e.currentTarget))return e.preventDefault();e.preventDefault(),w()}),x=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_7__.useEvent)(e=>{e.key===_keyboard_js__WEBPACK_IMPORTED_MODULE_9__.Keys.Space?(e.preventDefault(),w()):e.key===_keyboard_js__WEBPACK_IMPORTED_MODULE_9__.Keys.Enter&&(0,_utils_form_js__WEBPACK_IMPORTED_MODULE_10__.attemptSubmit)(e.currentTarget)}),v=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_7__.useEvent)(e=>e.preventDefault()),G=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({checked:i}),[i]),R={id:c,ref:C,role:"switch",type:(0,_hooks_use_resolve_button_type_js__WEBPACK_IMPORTED_MODULE_11__.useResolveButtonType)(r,f),tabIndex:r.tabIndex===-1?0:(E=r.tabIndex)!=null?E:0,"aria-checked":i,"aria-labelledby":t==null?void 0:t.labelledby,"aria-describedby":t==null?void 0:t.describedby,disabled:a,onClick:L,onKeyUp:x,onKeyPress:v},k=(0,_hooks_use_disposables_js__WEBPACK_IMPORTED_MODULE_12__.useDisposables)();return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{var _;let e=(_=f.current)==null?void 0:_.closest("form");e&&o!==void 0&&k.addEventListener(e,"reset",()=>{s(o)})},[f,s]),react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,d!=null&&i&&react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_hidden_js__WEBPACK_IMPORTED_MODULE_13__.Hidden,{features:_internal_hidden_js__WEBPACK_IMPORTED_MODULE_13__.Features.Hidden,...(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.compact)({as:"input",type:"checkbox",hidden:!0,readOnly:!0,disabled:a,form:u,checked:i,name:d,value:y})}),(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.render)({ourProps:R,theirProps:m,slot:G,defaultTag:ne,name:"Switch"}))}let oe=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_3__.forwardRefWithAs)(re),ie=te,_e=Object.assign(oe,{Group:ie,Label:_label_label_js__WEBPACK_IMPORTED_MODULE_1__.Label,Description:_description_description_js__WEBPACK_IMPORTED_MODULE_2__.Description});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/transitions/transition.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/transitions/transition.js ***!
\**********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Transition: () => (/* binding */ qe)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_disposables_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-disposables.js */ "./node_modules/@headlessui/react/dist/hooks/use-disposables.js");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_flags_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../hooks/use-flags.js */ "./node_modules/@headlessui/react/dist/hooks/use-flags.js");
/* harmony import */ var _hooks_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/use-is-mounted.js */ "./node_modules/@headlessui/react/dist/hooks/use-is-mounted.js");
/* harmony import */ var _hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../hooks/use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _hooks_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/use-latest-value.js */ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js");
/* harmony import */ var _hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/use-server-handoff-complete.js */ "./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js");
/* harmony import */ var _hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-sync-refs.js */ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js");
/* harmony import */ var _hooks_use_transition_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/use-transition.js */ "./node_modules/@headlessui/react/dist/hooks/use-transition.js");
/* harmony import */ var _internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../internal/open-closed.js */ "./node_modules/@headlessui/react/dist/internal/open-closed.js");
/* harmony import */ var _utils_class_names_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/class-names.js */ "./node_modules/@headlessui/react/dist/utils/class-names.js");
/* harmony import */ var _utils_match_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
function S(t=""){return t.split(/\s+/).filter(n=>n.length>1)}let I=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);I.displayName="TransitionContext";var Se=(r=>(r.Visible="visible",r.Hidden="hidden",r))(Se||{});function ye(){let t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(I);if(t===null)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}function xe(){let t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(M);if(t===null)throw new Error("A <Transition.Child /> is used but it is missing a parent <Transition /> or <Transition.Root />.");return t}let M=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);M.displayName="NestingContext";function U(t){return"children"in t?U(t.children):t.current.filter(({el:n})=>n.current!==null).filter(({state:n})=>n==="visible").length>0}function se(t,n){let r=(0,_hooks_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(t),s=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]),R=(0,_hooks_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_2__.useIsMounted)(),D=(0,_hooks_use_disposables_js__WEBPACK_IMPORTED_MODULE_3__.useDisposables)(),p=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)((i,e=_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Hidden)=>{let a=s.current.findIndex(({el:o})=>o===i);a!==-1&&((0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(e,{[_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Unmount](){s.current.splice(a,1)},[_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Hidden](){s.current[a].state="hidden"}}),D.microTask(()=>{var o;!U(s)&&R.current&&((o=r.current)==null||o.call(r))}))}),x=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)(i=>{let e=s.current.find(({el:a})=>a===i);return e?e.state!=="visible"&&(e.state="visible"):s.current.push({el:i,state:"visible"}),()=>p(i,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Unmount)}),h=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]),v=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(Promise.resolve()),u=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({enter:[],leave:[],idle:[]}),g=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)((i,e,a)=>{h.current.splice(0),n&&(n.chains.current[e]=n.chains.current[e].filter(([o])=>o!==i)),n==null||n.chains.current[e].push([i,new Promise(o=>{h.current.push(o)})]),n==null||n.chains.current[e].push([i,new Promise(o=>{Promise.all(u.current[e].map(([f,N])=>N)).then(()=>o())})]),e==="enter"?v.current=v.current.then(()=>n==null?void 0:n.wait.current).then(()=>a(e)):a(e)}),d=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)((i,e,a)=>{Promise.all(u.current[e].splice(0).map(([o,f])=>f)).then(()=>{var o;(o=h.current.shift())==null||o()}).then(()=>a(e))});return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({children:s,register:x,unregister:p,onStart:g,onStop:d,wait:v,chains:u}),[x,p,s,g,d,u,v])}function Ne(){}let Pe=["beforeEnter","afterEnter","beforeLeave","afterLeave"];function ae(t){var r;let n={};for(let s of Pe)n[s]=(r=t[s])!=null?r:Ne;return n}function Re(t){let n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(ae(t));return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{n.current=ae(t)},[t]),n}let De="div",le=_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.Features.RenderStrategy;function He(t,n){var Q,Y;let{beforeEnter:r,afterEnter:s,beforeLeave:R,afterLeave:D,enter:p,enterFrom:x,enterTo:h,entered:v,leave:u,leaveFrom:g,leaveTo:d,...i}=t,e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),a=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_7__.useSyncRefs)(e,n),o=(Q=i.unmount)==null||Q?_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Unmount:_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Hidden,{show:f,appear:N,initial:T}=ye(),[l,j]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(f?"visible":"hidden"),z=xe(),{register:L,unregister:O}=z;(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>L(e),[L,e]),(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(o===_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.RenderStrategy.Hidden&&e.current){if(f&&l!=="visible"){j("visible");return}return (0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(l,{["hidden"]:()=>O(e),["visible"]:()=>L(e)})}},[l,e,L,O,f,o]);let k=(0,_hooks_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)({base:S(i.className),enter:S(p),enterFrom:S(x),enterTo:S(h),entered:S(v),leave:S(u),leaveFrom:S(g),leaveTo:S(d)}),V=Re({beforeEnter:r,afterEnter:s,beforeLeave:R,afterLeave:D}),G=(0,_hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_8__.useServerHandoffComplete)();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(G&&l==="visible"&&e.current===null)throw new Error("Did you forget to passthrough the `ref` to the actual DOM node?")},[e,l,G]);let Te=T&&!N,K=N&&f&&T,de=(()=>!G||Te?"idle":f?"enter":"leave")(),H=(0,_hooks_use_flags_js__WEBPACK_IMPORTED_MODULE_9__.useFlags)(0),fe=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)(C=>(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(C,{enter:()=>{H.addFlag(_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Opening),V.current.beforeEnter()},leave:()=>{H.addFlag(_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Closing),V.current.beforeLeave()},idle:()=>{}})),me=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)(C=>(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(C,{enter:()=>{H.removeFlag(_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Opening),V.current.afterEnter()},leave:()=>{H.removeFlag(_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Closing),V.current.afterLeave()},idle:()=>{}})),w=se(()=>{j("hidden"),O(e)},z),B=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);(0,_hooks_use_transition_js__WEBPACK_IMPORTED_MODULE_11__.useTransition)({immediate:K,container:e,classes:k,direction:de,onStart:(0,_hooks_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(C=>{B.current=!0,w.onStart(e,C,fe)}),onStop:(0,_hooks_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(C=>{B.current=!1,w.onStop(e,C,me),C==="leave"&&!U(w)&&(j("hidden"),O(e))})});let P=i,ce={ref:a};return K?P={...P,className:(0,_utils_class_names_js__WEBPACK_IMPORTED_MODULE_12__.classNames)(i.className,...k.current.enter,...k.current.enterFrom)}:B.current&&(P.className=(0,_utils_class_names_js__WEBPACK_IMPORTED_MODULE_12__.classNames)(i.className,(Y=e.current)==null?void 0:Y.className),P.className===""&&delete P.className),react__WEBPACK_IMPORTED_MODULE_0__.createElement(M.Provider,{value:w},react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.OpenClosedProvider,{value:(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_6__.match)(l,{["visible"]:_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Open,["hidden"]:_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Closed})|H.flags},(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.render)({ourProps:ce,theirProps:P,defaultTag:De,features:le,visible:l==="visible",name:"Transition.Child"})))}function Fe(t,n){let{show:r,appear:s=!1,unmount:R=!0,...D}=t,p=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null),x=(0,_hooks_use_sync_refs_js__WEBPACK_IMPORTED_MODULE_7__.useSyncRefs)(p,n);(0,_hooks_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_8__.useServerHandoffComplete)();let h=(0,_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.useOpenClosed)();if(r===void 0&&h!==null&&(r=(h&_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Open)===_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.State.Open),![!0,!1].includes(r))throw new Error("A <Transition /> is used but it is missing a `show={true | false}` prop.");let[v,u]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(r?"visible":"hidden"),g=se(()=>{u("hidden")}),[d,i]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!0),e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([r]);(0,_hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_13__.useIsoMorphicEffect)(()=>{d!==!1&&e.current[e.current.length-1]!==r&&(e.current.push(r),i(!1))},[e,r]);let a=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({show:r,appear:s,initial:d}),[r,s,d]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(r)u("visible");else if(!U(g))u("hidden");else{let T=p.current;if(!T)return;let l=T.getBoundingClientRect();l.x===0&&l.y===0&&l.width===0&&l.height===0&&u("hidden")}},[r,g]);let o={unmount:R},f=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)(()=>{var T;d&&i(!1),(T=t.beforeEnter)==null||T.call(t)}),N=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_4__.useEvent)(()=>{var T;d&&i(!1),(T=t.beforeLeave)==null||T.call(t)});return react__WEBPACK_IMPORTED_MODULE_0__.createElement(M.Provider,{value:g},react__WEBPACK_IMPORTED_MODULE_0__.createElement(I.Provider,{value:a},(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.render)({ourProps:{...o,as:react__WEBPACK_IMPORTED_MODULE_0__.Fragment,children:react__WEBPACK_IMPORTED_MODULE_0__.createElement(ue,{ref:x,...o,...D,beforeEnter:f,beforeLeave:N})},theirProps:{},defaultTag:react__WEBPACK_IMPORTED_MODULE_0__.Fragment,features:le,visible:v==="visible",name:"Transition"})))}function _e(t,n){let r=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(I)!==null,s=(0,_internal_open_closed_js__WEBPACK_IMPORTED_MODULE_10__.useOpenClosed)()!==null;return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,!r&&s?react__WEBPACK_IMPORTED_MODULE_0__.createElement(q,{ref:n,...t}):react__WEBPACK_IMPORTED_MODULE_0__.createElement(ue,{ref:n,...t}))}let q=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.forwardRefWithAs)(Fe),ue=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.forwardRefWithAs)(He),Le=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_5__.forwardRefWithAs)(_e),qe=Object.assign(q,{Child:Le,Root:q});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/components/transitions/utils/transition.js":
/*!****************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/components/transitions/utils/transition.js ***!
\****************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ transition: () => (/* binding */ M)
/* harmony export */ });
/* harmony import */ var _utils_disposables_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../utils/disposables.js */ "./node_modules/@headlessui/react/dist/utils/disposables.js");
/* harmony import */ var _utils_match_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
/* harmony import */ var _utils_once_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../utils/once.js */ "./node_modules/@headlessui/react/dist/utils/once.js");
function g(t,...e){t&&e.length>0&&t.classList.add(...e)}function v(t,...e){t&&e.length>0&&t.classList.remove(...e)}function b(t,e){let n=(0,_utils_disposables_js__WEBPACK_IMPORTED_MODULE_0__.disposables)();if(!t)return n.dispose;let{transitionDuration:m,transitionDelay:a}=getComputedStyle(t),[u,p]=[m,a].map(l=>{let[r=0]=l.split(",").filter(Boolean).map(i=>i.includes("ms")?parseFloat(i):parseFloat(i)*1e3).sort((i,T)=>T-i);return r}),o=u+p;if(o!==0){n.group(r=>{r.setTimeout(()=>{e(),r.dispose()},o),r.addEventListener(t,"transitionrun",i=>{i.target===i.currentTarget&&r.dispose()})});let l=n.addEventListener(t,"transitionend",r=>{r.target===r.currentTarget&&(e(),l())})}else e();return n.add(()=>e()),n.dispose}function M(t,e,n,m){let a=n?"enter":"leave",u=(0,_utils_disposables_js__WEBPACK_IMPORTED_MODULE_0__.disposables)(),p=m!==void 0?(0,_utils_once_js__WEBPACK_IMPORTED_MODULE_1__.once)(m):()=>{};a==="enter"&&(t.removeAttribute("hidden"),t.style.display="");let o=(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_2__.match)(a,{enter:()=>e.enter,leave:()=>e.leave}),l=(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_2__.match)(a,{enter:()=>e.enterTo,leave:()=>e.leaveTo}),r=(0,_utils_match_js__WEBPACK_IMPORTED_MODULE_2__.match)(a,{enter:()=>e.enterFrom,leave:()=>e.leaveFrom});return v(t,...e.base,...e.enter,...e.enterTo,...e.enterFrom,...e.leave,...e.leaveFrom,...e.leaveTo,...e.entered),g(t,...e.base,...o,...r),u.nextFrame(()=>{v(t,...e.base,...o,...r),g(t,...e.base,...o,...l),b(t,()=>(v(t,...e.base,...o),g(t,...e.base,...e.entered),p()))}),u.dispose}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js":
/*!*************************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js ***!
\*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ adjustScrollbarPadding: () => (/* binding */ c)
/* harmony export */ });
function c(){let o;return{before({doc:e}){var l;let n=e.documentElement;o=((l=e.defaultView)!=null?l:window).innerWidth-n.clientWidth},after({doc:e,d:n}){let t=e.documentElement,l=t.clientWidth-t.offsetWidth,r=o-l;n.style(t,"paddingRight",`${r}px`)}}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js":
/*!*******************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js ***!
\*******************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ handleIOSLocking: () => (/* binding */ d)
/* harmony export */ });
/* harmony import */ var _utils_disposables_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/disposables.js */ "./node_modules/@headlessui/react/dist/utils/disposables.js");
/* harmony import */ var _utils_platform_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/platform.js */ "./node_modules/@headlessui/react/dist/utils/platform.js");
function d(){return (0,_utils_platform_js__WEBPACK_IMPORTED_MODULE_0__.isIOS)()?{before({doc:r,d:l,meta:c}){function o(a){return c.containers.flatMap(n=>n()).some(n=>n.contains(a))}l.microTask(()=>{var s;if(window.getComputedStyle(r.documentElement).scrollBehavior!=="auto"){let t=(0,_utils_disposables_js__WEBPACK_IMPORTED_MODULE_1__.disposables)();t.style(r.documentElement,"scrollBehavior","auto"),l.add(()=>l.microTask(()=>t.dispose()))}let a=(s=window.scrollY)!=null?s:window.pageYOffset,n=null;l.addEventListener(r,"click",t=>{if(t.target instanceof HTMLElement)try{let e=t.target.closest("a");if(!e)return;let{hash:f}=new URL(e.href),i=r.querySelector(f);i&&!o(i)&&(n=i)}catch{}},!0),l.addEventListener(r,"touchstart",t=>{if(t.target instanceof HTMLElement)if(o(t.target)){let e=t.target;for(;e.parentElement&&o(e.parentElement);)e=e.parentElement;l.style(e,"overscrollBehavior","contain")}else l.style(t.target,"touchAction","none")}),l.addEventListener(r,"touchmove",t=>{if(t.target instanceof HTMLElement)if(o(t.target)){let e=t.target;for(;e.parentElement&&e.dataset.headlessuiPortal!==""&&!(e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth);)e=e.parentElement;e.dataset.headlessuiPortal===""&&t.preventDefault()}else t.preventDefault()},{passive:!1}),l.add(()=>{var e;let t=(e=window.scrollY)!=null?e:window.pageYOffset;a!==t&&window.scrollTo(0,a),n&&n.isConnected&&(n.scrollIntoView({block:"nearest"}),n=null)})})}}:{}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js":
/*!***************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js ***!
\***************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ overflows: () => (/* binding */ a)
/* harmony export */ });
/* harmony import */ var _utils_disposables_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/disposables.js */ "./node_modules/@headlessui/react/dist/utils/disposables.js");
/* harmony import */ var _utils_store_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/store.js */ "./node_modules/@headlessui/react/dist/utils/store.js");
/* harmony import */ var _adjust_scrollbar_padding_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./adjust-scrollbar-padding.js */ "./node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js");
/* harmony import */ var _handle_ios_locking_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./handle-ios-locking.js */ "./node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js");
/* harmony import */ var _prevent_scroll_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./prevent-scroll.js */ "./node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js");
function m(e){let n={};for(let t of e)Object.assign(n,t(n));return n}let a=(0,_utils_store_js__WEBPACK_IMPORTED_MODULE_0__.createStore)(()=>new Map,{PUSH(e,n){var o;let t=(o=this.get(e))!=null?o:{doc:e,count:0,d:(0,_utils_disposables_js__WEBPACK_IMPORTED_MODULE_1__.disposables)(),meta:new Set};return t.count++,t.meta.add(n),this.set(e,t),this},POP(e,n){let t=this.get(e);return t&&(t.count--,t.meta.delete(n)),this},SCROLL_PREVENT({doc:e,d:n,meta:t}){let o={doc:e,d:n,meta:m(t)},c=[(0,_handle_ios_locking_js__WEBPACK_IMPORTED_MODULE_2__.handleIOSLocking)(),(0,_adjust_scrollbar_padding_js__WEBPACK_IMPORTED_MODULE_3__.adjustScrollbarPadding)(),(0,_prevent_scroll_js__WEBPACK_IMPORTED_MODULE_4__.preventScroll)()];c.forEach(({before:r})=>r==null?void 0:r(o)),c.forEach(({after:r})=>r==null?void 0:r(o))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});a.subscribe(()=>{let e=a.getSnapshot(),n=new Map;for(let[t]of e)n.set(t,t.documentElement.style.overflow);for(let t of e.values()){let o=n.get(t.doc)==="hidden",c=t.count!==0;(c&&!o||!c&&o)&&a.dispatch(t.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",t),t.count===0&&a.dispatch("TEARDOWN",t)}});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js":
/*!***************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js ***!
\***************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ preventScroll: () => (/* binding */ l)
/* harmony export */ });
function l(){return{before({doc:e,d:o}){o.style(e.documentElement,"overflow","hidden")}}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js":
/*!**********************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js ***!
\**********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useDocumentOverflowLockedEffect: () => (/* binding */ p)
/* harmony export */ });
/* harmony import */ var _hooks_use_store_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../hooks/use-store.js */ "./node_modules/@headlessui/react/dist/hooks/use-store.js");
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _overflow_store_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./overflow-store.js */ "./node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js");
function p(e,r,n){let f=(0,_hooks_use_store_js__WEBPACK_IMPORTED_MODULE_0__.useStore)(_overflow_store_js__WEBPACK_IMPORTED_MODULE_1__.overflows),o=e?f.get(e):void 0,i=o?o.count>0:!1;return (0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_2__.useIsoMorphicEffect)(()=>{if(!(!e||!r))return _overflow_store_js__WEBPACK_IMPORTED_MODULE_1__.overflows.dispatch("PUSH",e,n),()=>_overflow_store_js__WEBPACK_IMPORTED_MODULE_1__.overflows.dispatch("POP",e,n)},[r,e]),i}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-controllable.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-controllable.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useControllable: () => (/* binding */ T)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
function T(l,r,c){let[i,s]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(c),e=l!==void 0,t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(e),u=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1),d=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);return e&&!t.current&&!u.current?(u.current=!0,t.current=e,console.error("A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.")):!e&&t.current&&!d.current&&(d.current=!0,t.current=e,console.error("A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.")),[e?l:i,(0,_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)(n=>(e||s(n),r==null?void 0:r(n)))]}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-disposables.js":
/*!**********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-disposables.js ***!
\**********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useDisposables: () => (/* binding */ p)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_disposables_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/disposables.js */ "./node_modules/@headlessui/react/dist/utils/disposables.js");
function p(){let[e]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_utils_disposables_js__WEBPACK_IMPORTED_MODULE_1__.disposables);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>e.dispose(),[e]),e}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-document-event.js":
/*!*************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-document-event.js ***!
\*************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useDocumentEvent: () => (/* binding */ d)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-latest-value.js */ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js");
function d(e,r,n){let o=(0,_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(r);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{function t(u){o.current(u)}return document.addEventListener(e,t,n),()=>document.removeEventListener(e,t,n)},[e,n])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-event-listener.js":
/*!*************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-event-listener.js ***!
\*************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useEventListener: () => (/* binding */ E)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-latest-value.js */ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js");
function E(n,e,a,t){let i=(0,_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(a);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{n=n!=null?n:window;function r(o){i.current(o)}return n.addEventListener(e,r,t),()=>n.removeEventListener(e,r,t)},[n,e,t])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-event.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-event.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useEvent: () => (/* binding */ o)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-latest-value.js */ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js");
let o=function(t){let e=(0,_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(t);return react__WEBPACK_IMPORTED_MODULE_0__.useCallback((...r)=>e.current(...r),[e])};
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-flags.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-flags.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useFlags: () => (/* binding */ c)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_is_mounted_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-is-mounted.js */ "./node_modules/@headlessui/react/dist/hooks/use-is-mounted.js");
function c(a=0){let[l,r]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(a),t=(0,_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_1__.useIsMounted)(),o=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>{t.current&&r(u=>u|e)},[l,t]),m=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>Boolean(l&e),[l]),s=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>{t.current&&r(u=>u&~e)},[r,t]),g=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>{t.current&&r(u=>u^e)},[r]);return{flags:l,addFlag:o,hasFlag:m,removeFlag:s,toggleFlag:g}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-id.js":
/*!*************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-id.js ***!
\*************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useId: () => (/* binding */ I)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_env_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/env.js */ "./node_modules/@headlessui/react/dist/utils/env.js");
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-server-handoff-complete.js */ "./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js");
var o;let I=(o=react__WEBPACK_IMPORTED_MODULE_0__.useId)!=null?o:function(){let n=(0,_use_server_handoff_complete_js__WEBPACK_IMPORTED_MODULE_1__.useServerHandoffComplete)(),[e,u]=react__WEBPACK_IMPORTED_MODULE_0__.useState(n?()=>_utils_env_js__WEBPACK_IMPORTED_MODULE_2__.env.nextId():null);return (0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_3__.useIsoMorphicEffect)(()=>{e===null&&u(_utils_env_js__WEBPACK_IMPORTED_MODULE_2__.env.nextId())},[e]),e!=null?""+e:void 0};
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-inert.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-inert.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useInert: () => (/* binding */ b)
/* harmony export */ });
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
let u=new Map,t=new Map;function b(r,l=!0){(0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_0__.useIsoMorphicEffect)(()=>{var o;if(!l)return;let e=typeof r=="function"?r():r.current;if(!e)return;function a(){var d;if(!e)return;let i=(d=t.get(e))!=null?d:1;if(i===1?t.delete(e):t.set(e,i-1),i!==1)return;let n=u.get(e);n&&(n["aria-hidden"]===null?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",n["aria-hidden"]),e.inert=n.inert,u.delete(e))}let f=(o=t.get(e))!=null?o:0;return t.set(e,f+1),f!==0||(u.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),e.setAttribute("aria-hidden","true"),e.inert=!0),a},[r,l])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-is-mounted.js":
/*!*********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-is-mounted.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useIsMounted: () => (/* binding */ f)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
function f(){let e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);return (0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__.useIsoMorphicEffect)(()=>(e.current=!0,()=>{e.current=!1}),[]),e}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js":
/*!*****************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useIsoMorphicEffect: () => (/* binding */ l)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_env_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/env.js */ "./node_modules/@headlessui/react/dist/utils/env.js");
let l=(e,f)=>{_utils_env_js__WEBPACK_IMPORTED_MODULE_1__.env.isServer?(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(e,f):(0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(e,f)};
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-latest-value.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useLatestValue: () => (/* binding */ s)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
function s(e){let r=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(e);return (0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__.useIsoMorphicEffect)(()=>{r.current=e},[e]),r}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-on-unmount.js":
/*!*********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-on-unmount.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useOnUnmount: () => (/* binding */ c)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_micro_task_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/micro-task.js */ "./node_modules/@headlessui/react/dist/utils/micro-task.js");
/* harmony import */ var _use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
function c(t){let r=(0,_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)(t),e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>(e.current=!1,()=>{e.current=!0,(0,_utils_micro_task_js__WEBPACK_IMPORTED_MODULE_2__.microTask)(()=>{e.current&&r()})}),[r])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-outside-click.js":
/*!************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-outside-click.js ***!
\************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useOutsideClick: () => (/* binding */ y)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_focus_management_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/focus-management.js */ "./node_modules/@headlessui/react/dist/utils/focus-management.js");
/* harmony import */ var _utils_platform_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/platform.js */ "./node_modules/@headlessui/react/dist/utils/platform.js");
/* harmony import */ var _use_document_event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-document-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-document-event.js");
/* harmony import */ var _use_window_event_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./use-window-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-window-event.js");
function y(s,m,a=!0){let i=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(!1);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{requestAnimationFrame(()=>{i.current=a})},[a]);function c(e,r){if(!i.current||e.defaultPrevented)return;let t=r(e);if(t===null||!t.getRootNode().contains(t)||!t.isConnected)return;let E=function u(n){return typeof n=="function"?u(n()):Array.isArray(n)||n instanceof Set?n:[n]}(s);for(let u of E){if(u===null)continue;let n=u instanceof HTMLElement?u:u.current;if(n!=null&&n.contains(t)||e.composed&&e.composedPath().includes(n))return}return!(0,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_1__.isFocusableElement)(t,_utils_focus_management_js__WEBPACK_IMPORTED_MODULE_1__.FocusableMode.Loose)&&t.tabIndex!==-1&&e.preventDefault(),m(e,t)}let o=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);(0,_use_document_event_js__WEBPACK_IMPORTED_MODULE_2__.useDocumentEvent)("pointerdown",e=>{var r,t;i.current&&(o.current=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),(0,_use_document_event_js__WEBPACK_IMPORTED_MODULE_2__.useDocumentEvent)("mousedown",e=>{var r,t;i.current&&(o.current=((t=(r=e.composedPath)==null?void 0:r.call(e))==null?void 0:t[0])||e.target)},!0),(0,_use_document_event_js__WEBPACK_IMPORTED_MODULE_2__.useDocumentEvent)("click",e=>{(0,_utils_platform_js__WEBPACK_IMPORTED_MODULE_3__.isMobile)()||o.current&&(c(e,()=>o.current),o.current=null)},!0),(0,_use_document_event_js__WEBPACK_IMPORTED_MODULE_2__.useDocumentEvent)("touchend",e=>c(e,()=>e.target instanceof HTMLElement?e.target:null),!0),(0,_use_window_event_js__WEBPACK_IMPORTED_MODULE_4__.useWindowEvent)("blur",e=>c(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-owner.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-owner.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useOwnerDocument: () => (/* binding */ n)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_owner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/owner.js */ "./node_modules/@headlessui/react/dist/utils/owner.js");
function n(...e){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,_utils_owner_js__WEBPACK_IMPORTED_MODULE_1__.getOwnerDocument)(...e),[...e])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js":
/*!******************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js ***!
\******************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useResolveButtonType: () => (/* binding */ T)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
function i(t){var n;if(t.type)return t.type;let e=(n=t.as)!=null?n:"button";if(typeof e=="string"&&e.toLowerCase()==="button")return"button"}function T(t,e){let[n,u]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>i(t));return (0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__.useIsoMorphicEffect)(()=>{u(i(t))},[t.type,t.as]),(0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_1__.useIsoMorphicEffect)(()=>{n||e.current&&e.current instanceof HTMLButtonElement&&!e.current.hasAttribute("type")&&u("button")},[n,e]),n}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-root-containers.js":
/*!**************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-root-containers.js ***!
\**************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useMainTreeNode: () => (/* binding */ y),
/* harmony export */ useRootContainers: () => (/* binding */ N)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _internal_hidden_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internal/hidden.js */ "./node_modules/@headlessui/react/dist/internal/hidden.js");
/* harmony import */ var _use_event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _use_owner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-owner.js */ "./node_modules/@headlessui/react/dist/hooks/use-owner.js");
function N({defaultContainers:o=[],portals:r,mainTreeNodeRef:u}={}){var f;let t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)((f=u==null?void 0:u.current)!=null?f:null),l=(0,_use_owner_js__WEBPACK_IMPORTED_MODULE_1__.useOwnerDocument)(t),c=(0,_use_event_js__WEBPACK_IMPORTED_MODULE_2__.useEvent)(()=>{var i,s,a;let n=[];for(let e of o)e!==null&&(e instanceof HTMLElement?n.push(e):"current"in e&&e.current instanceof HTMLElement&&n.push(e.current));if(r!=null&&r.current)for(let e of r.current)n.push(e);for(let e of(i=l==null?void 0:l.querySelectorAll("html > *, body > *"))!=null?i:[])e!==document.body&&e!==document.head&&e instanceof HTMLElement&&e.id!=="headlessui-portal-root"&&(e.contains(t.current)||e.contains((a=(s=t.current)==null?void 0:s.getRootNode())==null?void 0:a.host)||n.some(L=>e.contains(L))||n.push(e));return n});return{resolveContainers:c,contains:(0,_use_event_js__WEBPACK_IMPORTED_MODULE_2__.useEvent)(n=>c().some(i=>i.contains(n))),mainTreeNodeRef:t,MainTreeNode:(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>function(){return u!=null?null:react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_hidden_js__WEBPACK_IMPORTED_MODULE_3__.Hidden,{features:_internal_hidden_js__WEBPACK_IMPORTED_MODULE_3__.Features.Hidden,ref:t})},[t,u])}}function y(){let o=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);return{mainTreeNodeRef:o,MainTreeNode:(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>function(){return react__WEBPACK_IMPORTED_MODULE_0__.createElement(_internal_hidden_js__WEBPACK_IMPORTED_MODULE_3__.Hidden,{features:_internal_hidden_js__WEBPACK_IMPORTED_MODULE_3__.Features.Hidden,ref:o})},[o])}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js ***!
\**********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useServerHandoffComplete: () => (/* binding */ l)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _utils_env_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/env.js */ "./node_modules/@headlessui/react/dist/utils/env.js");
function s(){let r=typeof document=="undefined";return"useSyncExternalStore" in /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))?(o=>o.useSyncExternalStore)(/*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2))))(()=>()=>{},()=>!1,()=>!r):!1}function l(){let r=s(),[e,n]=react__WEBPACK_IMPORTED_MODULE_0__.useState(_utils_env_js__WEBPACK_IMPORTED_MODULE_1__.env.isHandoffComplete);return e&&_utils_env_js__WEBPACK_IMPORTED_MODULE_1__.env.isHandoffComplete===!1&&n(!1),react__WEBPACK_IMPORTED_MODULE_0__.useEffect(()=>{e!==!0&&n(!0)},[e]),react__WEBPACK_IMPORTED_MODULE_0__.useEffect(()=>_utils_env_js__WEBPACK_IMPORTED_MODULE_1__.env.handoff(),[]),r?!1:e}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-store.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-store.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useStore: () => (/* binding */ S)
/* harmony export */ });
/* harmony import */ var _use_sync_external_store_shim_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../use-sync-external-store-shim/index.js */ "./node_modules/@headlessui/react/dist/use-sync-external-store-shim/index.js");
function S(t){return (0,_use_sync_external_store_shim_index_js__WEBPACK_IMPORTED_MODULE_0__.useSyncExternalStore)(t.subscribe,t.getSnapshot,t.getSnapshot)}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js":
/*!********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-sync-refs.js ***!
\********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ optionalRef: () => (/* binding */ T),
/* harmony export */ useSyncRefs: () => (/* binding */ y)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
let u=Symbol();function T(t,n=!0){return Object.assign(t,{[u]:n})}function y(...t){let n=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(t);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{n.current=t},[t]);let c=(0,_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)(e=>{for(let o of n.current)o!=null&&(typeof o=="function"?o(e):o.current=e)});return t.every(e=>e==null||(e==null?void 0:e[u]))?void 0:c}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-tab-direction.js":
/*!************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-tab-direction.js ***!
\************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Direction: () => (/* binding */ s),
/* harmony export */ useTabDirection: () => (/* binding */ n)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_window_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-window-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-window-event.js");
var s=(r=>(r[r.Forwards=0]="Forwards",r[r.Backwards=1]="Backwards",r))(s||{});function n(){let e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);return (0,_use_window_event_js__WEBPACK_IMPORTED_MODULE_1__.useWindowEvent)("keydown",o=>{o.key==="Tab"&&(e.current=o.shiftKey?1:0)},!0),e}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-transition.js":
/*!*********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-transition.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useTransition: () => (/* binding */ D)
/* harmony export */ });
/* harmony import */ var _components_transitions_utils_transition_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../components/transitions/utils/transition.js */ "./node_modules/@headlessui/react/dist/components/transitions/utils/transition.js");
/* harmony import */ var _utils_disposables_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/disposables.js */ "./node_modules/@headlessui/react/dist/utils/disposables.js");
/* harmony import */ var _use_disposables_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-disposables.js */ "./node_modules/@headlessui/react/dist/hooks/use-disposables.js");
/* harmony import */ var _use_is_mounted_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./use-is-mounted.js */ "./node_modules/@headlessui/react/dist/hooks/use-is-mounted.js");
/* harmony import */ var _use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
/* harmony import */ var _use_latest_value_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-latest-value.js */ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js");
function D({immediate:t,container:s,direction:n,classes:u,onStart:a,onStop:c}){let l=(0,_use_is_mounted_js__WEBPACK_IMPORTED_MODULE_0__.useIsMounted)(),d=(0,_use_disposables_js__WEBPACK_IMPORTED_MODULE_1__.useDisposables)(),e=(0,_use_latest_value_js__WEBPACK_IMPORTED_MODULE_2__.useLatestValue)(n);(0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_3__.useIsoMorphicEffect)(()=>{t&&(e.current="enter")},[t]),(0,_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_3__.useIsoMorphicEffect)(()=>{let r=(0,_utils_disposables_js__WEBPACK_IMPORTED_MODULE_4__.disposables)();d.add(r.dispose);let i=s.current;if(i&&e.current!=="idle"&&l.current)return r.dispose(),a.current(e.current),r.add((0,_components_transitions_utils_transition_js__WEBPACK_IMPORTED_MODULE_5__.transition)(i,u.current,e.current==="enter",()=>{r.dispose(),c.current(e.current)})),r.dispose},[n])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-watch.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-watch.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useWatch: () => (/* binding */ m)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
function m(u,t){let e=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]),r=(0,_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)(u);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{let o=[...e.current];for(let[n,a]of t.entries())if(e.current[n]!==a){let l=r(t,o);return e.current=t,l}},[r,...t])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/hooks/use-window-event.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/hooks/use-window-event.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useWindowEvent: () => (/* binding */ s)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./use-latest-value.js */ "./node_modules/@headlessui/react/dist/hooks/use-latest-value.js");
function s(e,r,n){let o=(0,_use_latest_value_js__WEBPACK_IMPORTED_MODULE_1__.useLatestValue)(r);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{function t(i){o.current(i)}return window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)},[e,n])}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/internal/hidden.js":
/*!****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/internal/hidden.js ***!
\****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Features: () => (/* binding */ s),
/* harmony export */ Hidden: () => (/* binding */ u)
/* harmony export */ });
/* harmony import */ var _utils_render_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/render.js */ "./node_modules/@headlessui/react/dist/utils/render.js");
let p="div";var s=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(s||{});function l(d,o){var n;let{features:t=1,...e}=d,r={ref:o,"aria-hidden":(t&2)===2?!0:(n=e["aria-hidden"])!=null?n:void 0,hidden:(t&4)===4?!0:void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(t&4)===4&&(t&2)!==2&&{display:"none"}}};return (0,_utils_render_js__WEBPACK_IMPORTED_MODULE_0__.render)({ourProps:r,theirProps:e,slot:{},defaultTag:p,name:"Hidden"})}let u=(0,_utils_render_js__WEBPACK_IMPORTED_MODULE_0__.forwardRefWithAs)(l);
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/internal/open-closed.js":
/*!*********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/internal/open-closed.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ OpenClosedProvider: () => (/* binding */ s),
/* harmony export */ State: () => (/* binding */ d),
/* harmony export */ useOpenClosed: () => (/* binding */ u)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
let n=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);n.displayName="OpenClosedContext";var d=(e=>(e[e.Open=1]="Open",e[e.Closed=2]="Closed",e[e.Closing=4]="Closing",e[e.Opening=8]="Opening",e))(d||{});function u(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(n)}function s({value:o,children:r}){return react__WEBPACK_IMPORTED_MODULE_0__.createElement(n.Provider,{value:o},r)}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/internal/portal-force-root.js":
/*!***************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/internal/portal-force-root.js ***!
\***************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ ForcePortalRoot: () => (/* binding */ l),
/* harmony export */ usePortalRoot: () => (/* binding */ a)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
let e=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(!1);function a(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(e)}function l(o){return react__WEBPACK_IMPORTED_MODULE_0__.createElement(e.Provider,{value:o.force},o.children)}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/internal/stack-context.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/internal/stack-context.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ StackMessage: () => (/* binding */ s),
/* harmony export */ StackProvider: () => (/* binding */ b),
/* harmony export */ useStackContext: () => (/* binding */ x)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _hooks_use_event_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../hooks/use-event.js */ "./node_modules/@headlessui/react/dist/hooks/use-event.js");
/* harmony import */ var _hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../hooks/use-iso-morphic-effect.js */ "./node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js");
let a=(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(()=>{});a.displayName="StackContext";var s=(e=>(e[e.Add=0]="Add",e[e.Remove=1]="Remove",e))(s||{});function x(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(a)}function b({children:i,onUpdate:r,type:e,element:n,enabled:u}){let l=x(),o=(0,_hooks_use_event_js__WEBPACK_IMPORTED_MODULE_1__.useEvent)((...t)=>{r==null||r(...t),l(...t)});return (0,_hooks_use_iso_morphic_effect_js__WEBPACK_IMPORTED_MODULE_2__.useIsoMorphicEffect)(()=>{let t=u===void 0||u===!0;return t&&o(0,e,n),()=>{t&&o(1,e,n)}},[o,e,n,u]),react__WEBPACK_IMPORTED_MODULE_0__.createElement(a.Provider,{value:o},i)}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/use-sync-external-store-shim/index.js":
/*!***********************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/use-sync-external-store-shim/index.js ***!
\***********************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useSyncExternalStore: () => (/* binding */ a)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _useSyncExternalStoreShimClient_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useSyncExternalStoreShimClient.js */ "./node_modules/@headlessui/react/dist/use-sync-external-store-shim/useSyncExternalStoreShimClient.js");
/* harmony import */ var _useSyncExternalStoreShimServer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useSyncExternalStoreShimServer.js */ "./node_modules/@headlessui/react/dist/use-sync-external-store-shim/useSyncExternalStoreShimServer.js");
const r=typeof window!="undefined"&&typeof window.document!="undefined"&&typeof window.document.createElement!="undefined",s=!r,c=s?_useSyncExternalStoreShimServer_js__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore:_useSyncExternalStoreShimClient_js__WEBPACK_IMPORTED_MODULE_2__.useSyncExternalStore,a="useSyncExternalStore" in /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))?(n=>n.useSyncExternalStore)(/*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))):c;
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/use-sync-external-store-shim/useSyncExternalStoreShimClient.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/use-sync-external-store-shim/useSyncExternalStoreShimClient.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useSyncExternalStore: () => (/* binding */ y)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
function i(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}const d=typeof Object.is=="function"?Object.is:i,{useState:u,useEffect:h,useLayoutEffect:f,useDebugValue:p}=/*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)));let S=!1,_=!1;function y(e,t,c){const a=t(),[{inst:n},o]=u({inst:{value:a,getSnapshot:t}});return f(()=>{n.value=a,n.getSnapshot=t,r(n)&&o({inst:n})},[e,a,t]),h(()=>(r(n)&&o({inst:n}),e(()=>{r(n)&&o({inst:n})})),[e]),p(a),a}function r(e){const t=e.getSnapshot,c=e.value;try{const a=t();return!d(c,a)}catch{return!0}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/use-sync-external-store-shim/useSyncExternalStoreShimServer.js":
/*!************************************************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/use-sync-external-store-shim/useSyncExternalStoreShimServer.js ***!
\************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ useSyncExternalStore: () => (/* binding */ t)
/* harmony export */ });
function t(r,e,n){return e()}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/active-element-history.js":
/*!*****************************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/active-element-history.js ***!
\*****************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ history: () => (/* binding */ t)
/* harmony export */ });
/* harmony import */ var _document_ready_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./document-ready.js */ "./node_modules/@headlessui/react/dist/utils/document-ready.js");
let t=[];(0,_document_ready_js__WEBPACK_IMPORTED_MODULE_0__.onDocumentReady)(()=>{function e(n){n.target instanceof HTMLElement&&n.target!==document.body&&t[0]!==n.target&&(t.unshift(n.target),t=t.filter(r=>r!=null&&r.isConnected),t.splice(10))}window.addEventListener("click",e,{capture:!0}),window.addEventListener("mousedown",e,{capture:!0}),window.addEventListener("focus",e,{capture:!0}),document.body.addEventListener("click",e,{capture:!0}),document.body.addEventListener("mousedown",e,{capture:!0}),document.body.addEventListener("focus",e,{capture:!0})});
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/bugs.js":
/*!***********************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/bugs.js ***!
\***********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ isDisabledReactIssue7711: () => (/* binding */ r)
/* harmony export */ });
function r(n){let e=n.parentElement,l=null;for(;e&&!(e instanceof HTMLFieldSetElement);)e instanceof HTMLLegendElement&&(l=e),e=e.parentElement;let t=(e==null?void 0:e.getAttribute("disabled"))==="";return t&&i(l)?!1:t}function i(n){if(!n)return!1;let e=n.previousElementSibling;for(;e!==null;){if(e instanceof HTMLLegendElement)return!1;e=e.previousElementSibling}return!0}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/class-names.js":
/*!******************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/class-names.js ***!
\******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ classNames: () => (/* binding */ t)
/* harmony export */ });
function t(...r){return Array.from(new Set(r.flatMap(n=>typeof n=="string"?n.split(" "):[]))).filter(Boolean).join(" ")}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/disposables.js":
/*!******************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/disposables.js ***!
\******************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ disposables: () => (/* binding */ o)
/* harmony export */ });
/* harmony import */ var _micro_task_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./micro-task.js */ "./node_modules/@headlessui/react/dist/utils/micro-task.js");
function o(){let n=[],r={addEventListener(e,t,s,a){return e.addEventListener(t,s,a),r.add(()=>e.removeEventListener(t,s,a))},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);return r.add(()=>cancelAnimationFrame(t))},nextFrame(...e){return r.requestAnimationFrame(()=>r.requestAnimationFrame(...e))},setTimeout(...e){let t=setTimeout(...e);return r.add(()=>clearTimeout(t))},microTask(...e){let t={current:!0};return (0,_micro_task_js__WEBPACK_IMPORTED_MODULE_0__.microTask)(()=>{t.current&&e[0]()}),r.add(()=>{t.current=!1})},style(e,t,s){let a=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:s}),this.add(()=>{Object.assign(e.style,{[t]:a})})},group(e){let t=o();return e(t),this.add(()=>t.dispose())},add(e){return n.push(e),()=>{let t=n.indexOf(e);if(t>=0)for(let s of n.splice(t,1))s()}},dispose(){for(let e of n.splice(0))e()}};return r}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/document-ready.js":
/*!*********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/document-ready.js ***!
\*********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ onDocumentReady: () => (/* binding */ t)
/* harmony export */ });
function t(n){function e(){document.readyState!=="loading"&&(n(),document.removeEventListener("DOMContentLoaded",e))}typeof window!="undefined"&&typeof document!="undefined"&&(document.addEventListener("DOMContentLoaded",e),e())}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/env.js":
/*!**********************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/env.js ***!
\**********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ env: () => (/* binding */ s)
/* harmony export */ });
var i=Object.defineProperty;var d=(t,e,n)=>e in t?i(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var r=(t,e,n)=>(d(t,typeof e!="symbol"?e+"":e,n),n);class o{constructor(){r(this,"current",this.detect());r(this,"handoffState","pending");r(this,"currentId",0)}set(e){this.current!==e&&(this.handoffState="pending",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current==="server"}get isClient(){return this.current==="client"}detect(){return typeof window=="undefined"||typeof document=="undefined"?"server":"client"}handoff(){this.handoffState==="pending"&&(this.handoffState="complete")}get isHandoffComplete(){return this.handoffState==="complete"}}let s=new o;
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/focus-management.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/focus-management.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Focus: () => (/* binding */ M),
/* harmony export */ FocusResult: () => (/* binding */ N),
/* harmony export */ FocusableMode: () => (/* binding */ T),
/* harmony export */ focusElement: () => (/* binding */ y),
/* harmony export */ focusFrom: () => (/* binding */ _),
/* harmony export */ focusIn: () => (/* binding */ O),
/* harmony export */ getFocusableElements: () => (/* binding */ f),
/* harmony export */ isFocusableElement: () => (/* binding */ h),
/* harmony export */ restoreFocusIfNecessary: () => (/* binding */ D),
/* harmony export */ sortByDomNode: () => (/* binding */ I)
/* harmony export */ });
/* harmony import */ var _disposables_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./disposables.js */ "./node_modules/@headlessui/react/dist/utils/disposables.js");
/* harmony import */ var _match_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
/* harmony import */ var _owner_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./owner.js */ "./node_modules/@headlessui/react/dist/utils/owner.js");
let c=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(e=>`${e}:not([tabindex='-1'])`).join(",");var M=(n=>(n[n.First=1]="First",n[n.Previous=2]="Previous",n[n.Next=4]="Next",n[n.Last=8]="Last",n[n.WrapAround=16]="WrapAround",n[n.NoScroll=32]="NoScroll",n))(M||{}),N=(o=>(o[o.Error=0]="Error",o[o.Overflow=1]="Overflow",o[o.Success=2]="Success",o[o.Underflow=3]="Underflow",o))(N||{}),F=(t=>(t[t.Previous=-1]="Previous",t[t.Next=1]="Next",t))(F||{});function f(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(c)).sort((r,t)=>Math.sign((r.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var T=(t=>(t[t.Strict=0]="Strict",t[t.Loose=1]="Loose",t))(T||{});function h(e,r=0){var t;return e===((t=(0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.getOwnerDocument)(e))==null?void 0:t.body)?!1:(0,_match_js__WEBPACK_IMPORTED_MODULE_1__.match)(r,{[0](){return e.matches(c)},[1](){let l=e;for(;l!==null;){if(l.matches(c))return!0;l=l.parentElement}return!1}})}function D(e){let r=(0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.getOwnerDocument)(e);(0,_disposables_js__WEBPACK_IMPORTED_MODULE_2__.disposables)().nextFrame(()=>{r&&!h(r.activeElement,0)&&y(e)})}var w=(t=>(t[t.Keyboard=0]="Keyboard",t[t.Mouse=1]="Mouse",t))(w||{});typeof window!="undefined"&&typeof document!="undefined"&&(document.addEventListener("keydown",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")},!0),document.addEventListener("click",e=>{e.detail===1?delete document.documentElement.dataset.headlessuiFocusVisible:e.detail===0&&(document.documentElement.dataset.headlessuiFocusVisible="")},!0));function y(e){e==null||e.focus({preventScroll:!0})}let S=["textarea","input"].join(",");function H(e){var r,t;return(t=(r=e==null?void 0:e.matches)==null?void 0:r.call(e,S))!=null?t:!1}function I(e,r=t=>t){return e.slice().sort((t,l)=>{let o=r(t),i=r(l);if(o===null||i===null)return 0;let n=o.compareDocumentPosition(i);return n&Node.DOCUMENT_POSITION_FOLLOWING?-1:n&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function _(e,r){return O(f(),r,{relativeTo:e})}function O(e,r,{sorted:t=!0,relativeTo:l=null,skipElements:o=[]}={}){let i=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e.ownerDocument,n=Array.isArray(e)?t?I(e):e:f(e);o.length>0&&n.length>1&&(n=n.filter(s=>!o.includes(s))),l=l!=null?l:i.activeElement;let E=(()=>{if(r&5)return 1;if(r&10)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),x=(()=>{if(r&1)return 0;if(r&2)return Math.max(0,n.indexOf(l))-1;if(r&4)return Math.max(0,n.indexOf(l))+1;if(r&8)return n.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),p=r&32?{preventScroll:!0}:{},d=0,a=n.length,u;do{if(d>=a||d+a<=0)return 0;let s=x+d;if(r&16)s=(s+a)%a;else{if(s<0)return 3;if(s>=a)return 1}u=n[s],u==null||u.focus(p),d+=E}while(u!==i.activeElement);return r&6&&H(u)&&u.select(),2}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/form.js":
/*!***********************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/form.js ***!
\***********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ attemptSubmit: () => (/* binding */ p),
/* harmony export */ objectToFormEntries: () => (/* binding */ e)
/* harmony export */ });
function e(i={},s=null,t=[]){for(let[r,n]of Object.entries(i))o(t,f(s,r),n);return t}function f(i,s){return i?i+"["+s+"]":s}function o(i,s,t){if(Array.isArray(t))for(let[r,n]of t.entries())o(i,f(s,r.toString()),n);else t instanceof Date?i.push([s,t.toISOString()]):typeof t=="boolean"?i.push([s,t?"1":"0"]):typeof t=="string"?i.push([s,t]):typeof t=="number"?i.push([s,`${t}`]):t==null?i.push([s,""]):e(t,s,i)}function p(i){var t,r;let s=(t=i==null?void 0:i.form)!=null?t:i.closest("form");if(s){for(let n of s.elements)if(n!==i&&(n.tagName==="INPUT"&&n.type==="submit"||n.tagName==="BUTTON"&&n.type==="submit"||n.nodeName==="INPUT"&&n.type==="image")){n.click();return}(r=s.requestSubmit)==null||r.call(s)}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/match.js":
/*!************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/match.js ***!
\************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ match: () => (/* binding */ u)
/* harmony export */ });
function u(r,n,...a){if(r in n){let e=n[r];return typeof e=="function"?e(...a):e}let t=new Error(`Tried to handle "${r}" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(e=>`"${e}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,u),t}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/micro-task.js":
/*!*****************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/micro-task.js ***!
\*****************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ microTask: () => (/* binding */ t)
/* harmony export */ });
function t(e){typeof queueMicrotask=="function"?queueMicrotask(e):Promise.resolve().then(e).catch(o=>setTimeout(()=>{throw o}))}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/once.js":
/*!***********************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/once.js ***!
\***********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ once: () => (/* binding */ l)
/* harmony export */ });
function l(r){let e={called:!1};return(...t)=>{if(!e.called)return e.called=!0,r(...t)}}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/owner.js":
/*!************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/owner.js ***!
\************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ getOwnerDocument: () => (/* binding */ o)
/* harmony export */ });
/* harmony import */ var _env_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./env.js */ "./node_modules/@headlessui/react/dist/utils/env.js");
function o(r){return _env_js__WEBPACK_IMPORTED_MODULE_0__.env.isServer?null:r instanceof Node?r.ownerDocument:r!=null&&r.hasOwnProperty("current")&&r.current instanceof Node?r.current.ownerDocument:document}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/platform.js":
/*!***************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/platform.js ***!
\***************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ isAndroid: () => (/* binding */ i),
/* harmony export */ isIOS: () => (/* binding */ t),
/* harmony export */ isMobile: () => (/* binding */ n)
/* harmony export */ });
function t(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function i(){return/Android/gi.test(window.navigator.userAgent)}function n(){return t()||i()}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/render.js":
/*!*************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/render.js ***!
\*************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ Features: () => (/* binding */ O),
/* harmony export */ RenderStrategy: () => (/* binding */ v),
/* harmony export */ compact: () => (/* binding */ x),
/* harmony export */ forwardRefWithAs: () => (/* binding */ U),
/* harmony export */ render: () => (/* binding */ C),
/* harmony export */ useMergeRefsFn: () => (/* binding */ I)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var _class_names_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./class-names.js */ "./node_modules/@headlessui/react/dist/utils/class-names.js");
/* harmony import */ var _match_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./match.js */ "./node_modules/@headlessui/react/dist/utils/match.js");
var O=(n=>(n[n.None=0]="None",n[n.RenderStrategy=1]="RenderStrategy",n[n.Static=2]="Static",n))(O||{}),v=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(v||{});function C({ourProps:r,theirProps:t,slot:e,defaultTag:n,features:o,visible:a=!0,name:f,mergeRefs:l}){l=l!=null?l:k;let s=R(t,r);if(a)return m(s,e,n,f,l);let y=o!=null?o:0;if(y&2){let{static:u=!1,...d}=s;if(u)return m(d,e,n,f,l)}if(y&1){let{unmount:u=!0,...d}=s;return (0,_match_js__WEBPACK_IMPORTED_MODULE_1__.match)(u?0:1,{[0](){return null},[1](){return m({...d,hidden:!0,style:{display:"none"}},e,n,f,l)}})}return m(s,e,n,f,l)}function m(r,t={},e,n,o){let{as:a=e,children:f,refName:l="ref",...s}=F(r,["unmount","static"]),y=r.ref!==void 0?{[l]:r.ref}:{},u=typeof f=="function"?f(t):f;"className"in s&&s.className&&typeof s.className=="function"&&(s.className=s.className(t));let d={};if(t){let i=!1,c=[];for(let[T,p]of Object.entries(t))typeof p=="boolean"&&(i=!0),p===!0&&c.push(T);i&&(d["data-headlessui-state"]=c.join(" "))}if(a===react__WEBPACK_IMPORTED_MODULE_0__.Fragment&&Object.keys(x(s)).length>0){if(!(0,react__WEBPACK_IMPORTED_MODULE_0__.isValidElement)(u)||Array.isArray(u)&&u.length>1)throw new Error(['Passing props on "Fragment"!',"",`The current component <${n} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(s).map(p=>` - ${p}`).join(`
`),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map(p=>` - ${p}`).join(`
`)].join(`
`));let i=u.props,c=typeof(i==null?void 0:i.className)=="function"?(...p)=>(0,_class_names_js__WEBPACK_IMPORTED_MODULE_2__.classNames)(i==null?void 0:i.className(...p),s.className):(0,_class_names_js__WEBPACK_IMPORTED_MODULE_2__.classNames)(i==null?void 0:i.className,s.className),T=c?{className:c}:{};return (0,react__WEBPACK_IMPORTED_MODULE_0__.cloneElement)(u,Object.assign({},R(u.props,x(F(s,["ref"]))),d,y,{ref:o(u.ref,y.ref)},T))}return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(a,Object.assign({},F(s,["ref"]),a!==react__WEBPACK_IMPORTED_MODULE_0__.Fragment&&y,a!==react__WEBPACK_IMPORTED_MODULE_0__.Fragment&&d),u)}function I(){let r=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)([]),t=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>{for(let n of r.current)n!=null&&(typeof n=="function"?n(e):n.current=e)},[]);return(...e)=>{if(!e.every(n=>n==null))return r.current=e,t}}function k(...r){return r.every(t=>t==null)?void 0:t=>{for(let e of r)e!=null&&(typeof e=="function"?e(t):e.current=t)}}function R(...r){var n;if(r.length===0)return{};if(r.length===1)return r[0];let t={},e={};for(let o of r)for(let a in o)a.startsWith("on")&&typeof o[a]=="function"?((n=e[a])!=null||(e[a]=[]),e[a].push(o[a])):t[a]=o[a];if(t.disabled||t["aria-disabled"])return Object.assign(t,Object.fromEntries(Object.keys(e).map(o=>[o,void 0])));for(let o in e)Object.assign(t,{[o](a,...f){let l=e[o];for(let s of l){if((a instanceof Event||(a==null?void 0:a.nativeEvent)instanceof Event)&&a.defaultPrevented)return;s(a,...f)}}});return t}function U(r){var t;return Object.assign((0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(r),{displayName:(t=r.displayName)!=null?t:r.name})}function x(r){let t=Object.assign({},r);for(let e in t)t[e]===void 0&&delete t[e];return t}function F(r,t=[]){let e=Object.assign({},r);for(let n of t)n in e&&delete e[n];return e}
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/start-transition.js":
/*!***********************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/start-transition.js ***!
\***********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ startTransition: () => (/* binding */ a)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
var t;let a=(t=react__WEBPACK_IMPORTED_MODULE_0__.startTransition)!=null?t:function(i){i()};
/***/ }),
/***/ "./node_modules/@headlessui/react/dist/utils/store.js":
/*!************************************************************!*\
!*** ./node_modules/@headlessui/react/dist/utils/store.js ***!
\************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ createStore: () => (/* binding */ a)
/* harmony export */ });
function a(o,r){let t=o(),n=new Set;return{getSnapshot(){return t},subscribe(e){return n.add(e),()=>n.delete(e)},dispatch(e,...s){let i=r[e].call(t,...s);i&&(t=i,n.forEach(c=>c()))}}}
/***/ }),
/***/ "./node_modules/@heroicons/react/outline/esm/CheckCircleIcon.js":
/*!**********************************************************************!*\
!*** ./node_modules/@heroicons/react/outline/esm/CheckCircleIcon.js ***!
\**********************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
function CheckCircleIcon(props, svgRef) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", Object.assign({
xmlns: "http://www.w3.org/2000/svg",
fill: "none",
viewBox: "0 0 24 24",
strokeWidth: 2,
stroke: "currentColor",
"aria-hidden": "true",
ref: svgRef
}, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
}));
}
const ForwardRef = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(CheckCircleIcon);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ForwardRef);
/***/ }),
/***/ "./node_modules/@heroicons/react/solid/esm/XIcon.js":
/*!**********************************************************!*\
!*** ./node_modules/@heroicons/react/solid/esm/XIcon.js ***!
\**********************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
function XIcon(props, svgRef) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", Object.assign({
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 20 20",
fill: "currentColor",
"aria-hidden": "true",
ref: svgRef
}, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
fillRule: "evenodd",
d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",
clipRule: "evenodd"
}));
}
const ForwardRef = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(XIcon);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ForwardRef);
/***/ }),
/***/ "./node_modules/dompurify/dist/purify.es.mjs":
/*!***************************************************!*\
!*** ./node_modules/dompurify/dist/purify.es.mjs ***!
\***************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ purify)
/* harmony export */ });
/*! @license DOMPurify 3.2.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.1/LICENSE */
const {
entries,
setPrototypeOf,
isFrozen,
getPrototypeOf,
getOwnPropertyDescriptor
} = Object;
let {
freeze,
seal,
create
} = Object; // eslint-disable-line import/no-mutable-exports
let {
apply,
construct
} = typeof Reflect !== 'undefined' && Reflect;
if (!freeze) {
freeze = function freeze(x) {
return x;
};
}
if (!seal) {
seal = function seal(x) {
return x;
};
}
if (!apply) {
apply = function apply(fun, thisValue, args) {
return fun.apply(thisValue, args);
};
}
if (!construct) {
construct = function construct(Func, args) {
return new Func(...args);
};
}
const arrayForEach = unapply(Array.prototype.forEach);
const arrayPop = unapply(Array.prototype.pop);
const arrayPush = unapply(Array.prototype.push);
const stringToLowerCase = unapply(String.prototype.toLowerCase);
const stringToString = unapply(String.prototype.toString);
const stringMatch = unapply(String.prototype.match);
const stringReplace = unapply(String.prototype.replace);
const stringIndexOf = unapply(String.prototype.indexOf);
const stringTrim = unapply(String.prototype.trim);
const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
const regExpTest = unapply(RegExp.prototype.test);
const typeErrorCreate = unconstruct(TypeError);
/**
* Creates a new function that calls the given function with a specified thisArg and arguments.
*
* @param func - The function to be wrapped and called.
* @returns A new function that calls the given function with a specified thisArg and arguments.
*/
function unapply(func) {
return function (thisArg) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
return apply(func, thisArg, args);
};
}
/**
* Creates a new function that constructs an instance of the given constructor function with the provided arguments.
*
* @param func - The constructor function to be wrapped and called.
* @returns A new function that constructs an instance of the given constructor function with the provided arguments.
*/
function unconstruct(func) {
return function () {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return construct(func, args);
};
}
/**
* Add properties to a lookup table
*
* @param set - The set to which elements will be added.
* @param array - The array containing elements to be added to the set.
* @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.
* @returns The modified set with added elements.
*/
function addToSet(set, array) {
let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;
if (setPrototypeOf) {
// Make 'in' and truthy checks like Boolean(set.constructor)
// independent of any properties defined on Object.prototype.
// Prevent prototype setters from intercepting set as a this value.
setPrototypeOf(set, null);
}
let l = array.length;
while (l--) {
let element = array[l];
if (typeof element === 'string') {
const lcElement = transformCaseFunc(element);
if (lcElement !== element) {
// Config presets (e.g. tags.js, attrs.js) are immutable.
if (!isFrozen(array)) {
array[l] = lcElement;
}
element = lcElement;
}
}
set[element] = true;
}
return set;
}
/**
* Clean up an array to harden against CSPP
*
* @param array - The array to be cleaned.
* @returns The cleaned version of the array
*/
function cleanArray(array) {
for (let index = 0; index < array.length; index++) {
const isPropertyExist = objectHasOwnProperty(array, index);
if (!isPropertyExist) {
array[index] = null;
}
}
return array;
}
/**
* Shallow clone an object
*
* @param object - The object to be cloned.
* @returns A new object that copies the original.
*/
function clone(object) {
const newObject = create(null);
for (const [property, value] of entries(object)) {
const isPropertyExist = objectHasOwnProperty(object, property);
if (isPropertyExist) {
if (Array.isArray(value)) {
newObject[property] = cleanArray(value);
} else if (value && typeof value === 'object' && value.constructor === Object) {
newObject[property] = clone(value);
} else {
newObject[property] = value;
}
}
}
return newObject;
}
/**
* This method automatically checks if the prop is function or getter and behaves accordingly.
*
* @param object - The object to look up the getter function in its prototype chain.
* @param prop - The property name for which to find the getter function.
* @returns The getter function found in the prototype chain or a fallback function.
*/
function lookupGetter(object, prop) {
while (object !== null) {
const desc = getOwnPropertyDescriptor(object, prop);
if (desc) {
if (desc.get) {
return unapply(desc.get);
}
if (typeof desc.value === 'function') {
return unapply(desc.value);
}
}
object = getPrototypeOf(object);
}
function fallbackValue() {
return null;
}
return fallbackValue;
}
const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);
// SVG
const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);
const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);
// List of SVG elements that are disallowed by default.
// We still need to know them so that we can do namespace
// checks properly in case one wants to add them to
// allow-list.
const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);
const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);
// Similarly to SVG, we want to know all MathML elements,
// even those that we disallow by default.
const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);
const text = freeze(['#text']);
const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);
const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
// eslint-disable-next-line unicorn/better-regex
const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode
const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm);
const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape
const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape
const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape
);
const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex
);
const DOCTYPE_NAME = seal(/^html$/i);
const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
var EXPRESSIONS = /*#__PURE__*/Object.freeze({
__proto__: null,
ARIA_ATTR: ARIA_ATTR,
ATTR_WHITESPACE: ATTR_WHITESPACE,
CUSTOM_ELEMENT: CUSTOM_ELEMENT,
DATA_ATTR: DATA_ATTR,
DOCTYPE_NAME: DOCTYPE_NAME,
ERB_EXPR: ERB_EXPR,
IS_ALLOWED_URI: IS_ALLOWED_URI,
IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,
MUSTACHE_EXPR: MUSTACHE_EXPR,
TMPLIT_EXPR: TMPLIT_EXPR
});
/* eslint-disable @typescript-eslint/indent */
// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
const NODE_TYPE = {
element: 1,
attribute: 2,
text: 3,
cdataSection: 4,
entityReference: 5,
// Deprecated
entityNode: 6,
// Deprecated
progressingInstruction: 7,
comment: 8,
document: 9,
documentType: 10,
documentFragment: 11,
notation: 12 // Deprecated
};
const getGlobal = function getGlobal() {
return typeof window === 'undefined' ? null : window;
};
/**
* Creates a no-op policy for internal use only.
* Don't export this function outside this module!
* @param trustedTypes The policy factory.
* @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
* @return The policy created (or null, if Trusted Types
* are not supported or creating the policy failed).
*/
const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {
return null;
}
// Allow the callers to control the unique policy name
// by adding a data-tt-policy-suffix to the script element with the DOMPurify.
// Policy creation with duplicate names throws in Trusted Types.
let suffix = null;
const ATTR_NAME = 'data-tt-policy-suffix';
if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {
suffix = purifyHostElement.getAttribute(ATTR_NAME);
}
const policyName = 'dompurify' + (suffix ? '#' + suffix : '');
try {
return trustedTypes.createPolicy(policyName, {
createHTML(html) {
return html;
},
createScriptURL(scriptUrl) {
return scriptUrl;
}
});
} catch (_) {
// Policy creation failed (most likely another DOMPurify script has
// already run). Skip creating the policy, as this will only cause errors
// if TT are enforced.
console.warn('TrustedTypes policy ' + policyName + ' could not be created.');
return null;
}
};
function createDOMPurify() {
let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
const DOMPurify = root => createDOMPurify(root);
DOMPurify.version = '3.2.1';
DOMPurify.removed = [];
if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {
// Not running in a browser, provide a factory function
// so that you can pass your own Window
DOMPurify.isSupported = false;
return DOMPurify;
}
let {
document
} = window;
const originalDocument = document;
const currentScript = originalDocument.currentScript;
const {
DocumentFragment,
HTMLTemplateElement,
Node,
Element,
NodeFilter,
NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,
HTMLFormElement,
DOMParser,
trustedTypes
} = window;
const ElementPrototype = Element.prototype;
const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');
const remove = lookupGetter(ElementPrototype, 'remove');
const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');
const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');
const getParentNode = lookupGetter(ElementPrototype, 'parentNode');
// As per issue #47, the web-components registry is inherited by a
// new document created via createHTMLDocument. As per the spec
// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
// a new empty registry is used when creating a template contents owner
// document, so we use that as our parent document to ensure nothing
// is inherited.
if (typeof HTMLTemplateElement === 'function') {
const template = document.createElement('template');
if (template.content && template.content.ownerDocument) {
document = template.content.ownerDocument;
}
}
let trustedTypesPolicy;
let emptyHTML = '';
const {
implementation,
createNodeIterator,
createDocumentFragment,
getElementsByTagName
} = document;
const {
importNode
} = originalDocument;
let hooks = {};
/**
* Expose whether this browser supports running the full DOMPurify.
*/
DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;
const {
MUSTACHE_EXPR,
ERB_EXPR,
TMPLIT_EXPR,
DATA_ATTR,
ARIA_ATTR,
IS_SCRIPT_OR_DATA,
ATTR_WHITESPACE,
CUSTOM_ELEMENT
} = EXPRESSIONS;
let {
IS_ALLOWED_URI: IS_ALLOWED_URI$1
} = EXPRESSIONS;
/**
* We consider the elements and attributes below to be safe. Ideally
* don't add any new ones but feel free to remove unwanted ones.
*/
/* allowed element names */
let ALLOWED_TAGS = null;
const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);
/* Allowed attribute names */
let ALLOWED_ATTR = null;
const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);
/*
* Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.
* @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)
* @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)
* @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.
*/
let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
tagNameCheck: {
writable: true,
configurable: false,
enumerable: true,
value: null
},
attributeNameCheck: {
writable: true,
configurable: false,
enumerable: true,
value: null
},
allowCustomizedBuiltInElements: {
writable: true,
configurable: false,
enumerable: true,
value: false
}
}));
/* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
let FORBID_TAGS = null;
/* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
let FORBID_ATTR = null;
/* Decide if ARIA attributes are okay */
let ALLOW_ARIA_ATTR = true;
/* Decide if custom data attributes are okay */
let ALLOW_DATA_ATTR = true;
/* Decide if unknown protocols are okay */
let ALLOW_UNKNOWN_PROTOCOLS = false;
/* Decide if self-closing tags in attributes are allowed.
* Usually removed due to a mXSS issue in jQuery 3.0 */
let ALLOW_SELF_CLOSE_IN_ATTR = true;
/* Output should be safe for common template engines.
* This means, DOMPurify removes data attributes, mustaches and ERB
*/
let SAFE_FOR_TEMPLATES = false;
/* Output should be safe even for XML used within HTML and alike.
* This means, DOMPurify removes comments when containing risky content.
*/
let SAFE_FOR_XML = true;
/* Decide if document with <html>... should be returned */
let WHOLE_DOCUMENT = false;
/* Track whether config is already set on this instance of DOMPurify. */
let SET_CONFIG = false;
/* Decide if all elements (e.g. style, script) must be children of
* document.body. By default, browsers might move them to document.head */
let FORCE_BODY = false;
/* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html
* string (or a TrustedHTML object if Trusted Types are supported).
* If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
*/
let RETURN_DOM = false;
/* Decide if a DOM `DocumentFragment` should be returned, instead of a html
* string (or a TrustedHTML object if Trusted Types are supported) */
let RETURN_DOM_FRAGMENT = false;
/* Try to return a Trusted Type object instead of a string, return a string in
* case Trusted Types are not supported */
let RETURN_TRUSTED_TYPE = false;
/* Output should be free from DOM clobbering attacks?
* This sanitizes markups named with colliding, clobberable built-in DOM APIs.
*/
let SANITIZE_DOM = true;
/* Achieve full DOM Clobbering protection by isolating the namespace of named
* properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.
*
* HTML/DOM spec rules that enable DOM Clobbering:
* - Named Access on Window (§7.3.3)
* - DOM Tree Accessors (§3.1.5)
* - Form Element Parent-Child Relations (§4.10.3)
* - Iframe srcdoc / Nested WindowProxies (§4.8.5)
* - HTMLCollection (§4.2.10.2)
*
* Namespace isolation is implemented by prefixing `id` and `name` attributes
* with a constant string, i.e., `user-content-`
*/
let SANITIZE_NAMED_PROPS = false;
const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';
/* Keep element content when removing element? */
let KEEP_CONTENT = true;
/* If a `Node` is passed to sanitize(), then performs sanitization in-place instead
* of importing it into a new Document and returning a sanitized copy */
let IN_PLACE = false;
/* Allow usage of profiles like html, svg and mathMl */
let USE_PROFILES = {};
/* Tags to ignore content of when KEEP_CONTENT is true */
let FORBID_CONTENTS = null;
const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);
/* Tags that are safe for data: URIs */
let DATA_URI_TAGS = null;
const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);
/* Attributes safe for values like "javascript:" */
let URI_SAFE_ATTRIBUTES = null;
const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);
const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
/* Document namespace */
let NAMESPACE = HTML_NAMESPACE;
let IS_EMPTY_INPUT = false;
/* Allowed XHTML+XML namespaces */
let ALLOWED_NAMESPACES = null;
const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);
let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);
// Certain elements are allowed in both SVG and HTML
// namespace. We need to specify them explicitly
// so that they don't get erroneously deleted from
// HTML namespace.
const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);
/* Parsing of strict XHTML documents */
let PARSER_MEDIA_TYPE = null;
const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];
const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';
let transformCaseFunc = null;
/* Keep a reference to config to pass to hooks */
let CONFIG = null;
/* Ideally, do not touch anything below this line */
/* ______________________________________________ */
const formElement = document.createElement('form');
const isRegexOrFunction = function isRegexOrFunction(testValue) {
return testValue instanceof RegExp || testValue instanceof Function;
};
/**
* _parseConfig
*
* @param cfg optional config literal
*/
// eslint-disable-next-line complexity
const _parseConfig = function _parseConfig() {
let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (CONFIG && CONFIG === cfg) {
return;
}
/* Shield configuration object from tampering */
if (!cfg || typeof cfg !== 'object') {
cfg = {};
}
/* Shield configuration object from prototype pollution */
cfg = clone(cfg);
PARSER_MEDIA_TYPE =
// eslint-disable-next-line unicorn/prefer-includes
SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
// HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.
transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;
/* Set configuration parameters */
ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};
FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};
USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;
ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
RETURN_DOM = cfg.RETURN_DOM || false; // Default false
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false
FORCE_BODY = cfg.FORCE_BODY || false; // Default false
SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false
KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
IN_PLACE = cfg.IN_PLACE || false; // Default false
IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
}
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
}
if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {
CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
}
if (SAFE_FOR_TEMPLATES) {
ALLOW_DATA_ATTR = false;
}
if (RETURN_DOM_FRAGMENT) {
RETURN_DOM = true;
}
/* Parse profile info */
if (USE_PROFILES) {
ALLOWED_TAGS = addToSet({}, text);
ALLOWED_ATTR = [];
if (USE_PROFILES.html === true) {
addToSet(ALLOWED_TAGS, html$1);
addToSet(ALLOWED_ATTR, html);
}
if (USE_PROFILES.svg === true) {
addToSet(ALLOWED_TAGS, svg$1);
addToSet(ALLOWED_ATTR, svg);
addToSet(ALLOWED_ATTR, xml);
}
if (USE_PROFILES.svgFilters === true) {
addToSet(ALLOWED_TAGS, svgFilters);
addToSet(ALLOWED_ATTR, svg);
addToSet(ALLOWED_ATTR, xml);
}
if (USE_PROFILES.mathMl === true) {
addToSet(ALLOWED_TAGS, mathMl$1);
addToSet(ALLOWED_ATTR, mathMl);
addToSet(ALLOWED_ATTR, xml);
}
}
/* Merge configuration parameters */
if (cfg.ADD_TAGS) {
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
ALLOWED_TAGS = clone(ALLOWED_TAGS);
}
addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
}
if (cfg.ADD_ATTR) {
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
ALLOWED_ATTR = clone(ALLOWED_ATTR);
}
addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
}
if (cfg.ADD_URI_SAFE_ATTR) {
addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
}
if (cfg.FORBID_CONTENTS) {
if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
FORBID_CONTENTS = clone(FORBID_CONTENTS);
}
addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
}
/* Add #text in case KEEP_CONTENT is set to true */
if (KEEP_CONTENT) {
ALLOWED_TAGS['#text'] = true;
}
/* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */
if (WHOLE_DOCUMENT) {
addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);
}
/* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */
if (ALLOWED_TAGS.table) {
addToSet(ALLOWED_TAGS, ['tbody']);
delete FORBID_TAGS.tbody;
}
if (cfg.TRUSTED_TYPES_POLICY) {
if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {
throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
}
if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {
throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
}
// Overwrite existing TrustedTypes policy.
trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
// Sign local variables required by `sanitize`.
emptyHTML = trustedTypesPolicy.createHTML('');
} else {
// Uninitialized policy, attempt to initialize the internal dompurify policy.
if (trustedTypesPolicy === undefined) {
trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
}
// If creating the internal policy succeeded sign internal variables.
if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {
emptyHTML = trustedTypesPolicy.createHTML('');
}
}
// Prevent further manipulation of configuration.
// Not available in IE8, Safari 5, etc.
if (freeze) {
freeze(cfg);
}
CONFIG = cfg;
};
/* Keep track of all possible SVG and MathML tags
* so that we can perform the namespace checks
* correctly. */
const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
/**
* @param element a DOM element whose namespace is being checked
* @returns Return false if the element has a
* namespace that a spec-compliant parser would never
* return. Return true otherwise.
*/
const _checkValidNamespace = function _checkValidNamespace(element) {
let parent = getParentNode(element);
// In JSDOM, if we're inside shadow DOM, then parentNode
// can be null. We just simulate parent in this case.
if (!parent || !parent.tagName) {
parent = {
namespaceURI: NAMESPACE,
tagName: 'template'
};
}
const tagName = stringToLowerCase(element.tagName);
const parentTagName = stringToLowerCase(parent.tagName);
if (!ALLOWED_NAMESPACES[element.namespaceURI]) {
return false;
}
if (element.namespaceURI === SVG_NAMESPACE) {
// The only way to switch from HTML namespace to SVG
// is via <svg>. If it happens via any other tag, then
// it should be killed.
if (parent.namespaceURI === HTML_NAMESPACE) {
return tagName === 'svg';
}
// The only way to switch from MathML to SVG is via`
// svg if parent is either <annotation-xml> or MathML
// text integration points.
if (parent.namespaceURI === MATHML_NAMESPACE) {
return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
}
// We only allow elements that are defined in SVG
// spec. All others are disallowed in SVG namespace.
return Boolean(ALL_SVG_TAGS[tagName]);
}
if (element.namespaceURI === MATHML_NAMESPACE) {
// The only way to switch from HTML namespace to MathML
// is via <math>. If it happens via any other tag, then
// it should be killed.
if (parent.namespaceURI === HTML_NAMESPACE) {
return tagName === 'math';
}
// The only way to switch from SVG to MathML is via
// <math> and HTML integration points
if (parent.namespaceURI === SVG_NAMESPACE) {
return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];
}
// We only allow elements that are defined in MathML
// spec. All others are disallowed in MathML namespace.
return Boolean(ALL_MATHML_TAGS[tagName]);
}
if (element.namespaceURI === HTML_NAMESPACE) {
// The only way to switch from SVG to HTML is via
// HTML integration points, and from MathML to HTML
// is via MathML text integration points
if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
return false;
}
if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
return false;
}
// We disallow tags that are specific for MathML
// or SVG and should never appear in HTML namespace
return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
}
// For XHTML and XML documents that support custom namespaces
if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {
return true;
}
// The code should never reach this place (this means
// that the element somehow got namespace that is not
// HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).
// Return false just in case.
return false;
};
/**
* _forceRemove
*
* @param node a DOM node
*/
const _forceRemove = function _forceRemove(node) {
arrayPush(DOMPurify.removed, {
element: node
});
try {
// eslint-disable-next-line unicorn/prefer-dom-node-remove
getParentNode(node).removeChild(node);
} catch (_) {
remove(node);
}
};
/**
* _removeAttribute
*
* @param name an Attribute name
* @param element a DOM node
*/
const _removeAttribute = function _removeAttribute(name, element) {
try {
arrayPush(DOMPurify.removed, {
attribute: element.getAttributeNode(name),
from: element
});
} catch (_) {
arrayPush(DOMPurify.removed, {
attribute: null,
from: element
});
}
element.removeAttribute(name);
// We void attribute values for unremovable "is"" attributes
if (name === 'is' && !ALLOWED_ATTR[name]) {
if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
try {
_forceRemove(element);
} catch (_) {}
} else {
try {
element.setAttribute(name, '');
} catch (_) {}
}
}
};
/**
* _initDocument
*
* @param dirty - a string of dirty markup
* @return a DOM, filled with the dirty markup
*/
const _initDocument = function _initDocument(dirty) {
/* Create a HTML document */
let doc = null;
let leadingWhitespace = null;
if (FORCE_BODY) {
dirty = '<remove></remove>' + dirty;
} else {
/* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */
const matches = stringMatch(dirty, /^[\r\n\t ]+/);
leadingWhitespace = matches && matches[0];
}
if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {
// Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)
dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + '</body></html>';
}
const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
/*
* Use the DOMParser API by default, fallback later if needs be
* DOMParser not work for svg when has multiple root element.
*/
if (NAMESPACE === HTML_NAMESPACE) {
try {
doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
} catch (_) {}
}
/* Use createHTMLDocument in case DOMParser is not available */
if (!doc || !doc.documentElement) {
doc = implementation.createDocument(NAMESPACE, 'template', null);
try {
doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
} catch (_) {
// Syntax error if dirtyPayload is invalid xml
}
}
const body = doc.body || doc.documentElement;
if (dirty && leadingWhitespace) {
body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
}
/* Work on whole document or just its body */
if (NAMESPACE === HTML_NAMESPACE) {
return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];
}
return WHOLE_DOCUMENT ? doc.documentElement : body;
};
/**
* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
*
* @param root The root element or node to start traversing on.
* @return The created NodeIterator
*/
const _createNodeIterator = function _createNodeIterator(root) {
return createNodeIterator.call(root.ownerDocument || root, root,
// eslint-disable-next-line no-bitwise
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
};
/**
* _isClobbered
*
* @param element element to check for clobbering attacks
* @return true if clobbered, false if safe
*/
const _isClobbered = function _isClobbered(element) {
return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');
};
/**
* Checks whether the given object is a DOM node.
*
* @param value object to check whether it's a DOM node
* @return true is object is a DOM node
*/
const _isNode = function _isNode(value) {
return typeof Node === 'function' && value instanceof Node;
};
function _executeHook(entryPoint, currentNode, data) {
if (!hooks[entryPoint]) {
return;
}
arrayForEach(hooks[entryPoint], hook => {
hook.call(DOMPurify, currentNode, data, CONFIG);
});
}
/**
* _sanitizeElements
*
* @protect nodeName
* @protect textContent
* @protect removeChild
* @param currentNode to check for permission to exist
* @return true if node was killed, false if left alive
*/
const _sanitizeElements = function _sanitizeElements(currentNode) {
let content = null;
/* Execute a hook if present */
_executeHook('beforeSanitizeElements', currentNode, null);
/* Check if element is clobbered or can clobber */
if (_isClobbered(currentNode)) {
_forceRemove(currentNode);
return true;
}
/* Now let's check the element's type and name */
const tagName = transformCaseFunc(currentNode.nodeName);
/* Execute a hook if present */
_executeHook('uponSanitizeElement', currentNode, {
tagName,
allowedTags: ALLOWED_TAGS
});
/* Detect mXSS attempts abusing namespace confusion */
if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
_forceRemove(currentNode);
return true;
}
/* Remove any occurrence of processing instructions */
if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
_forceRemove(currentNode);
return true;
}
/* Remove any kind of possibly harmful comments */
if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
_forceRemove(currentNode);
return true;
}
/* Remove element if anything forbids its presence */
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
/* Check if we have a custom element to handle */
if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
return false;
}
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {
return false;
}
}
/* Keep content except for bad-listed elements */
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
const parentNode = getParentNode(currentNode) || currentNode.parentNode;
const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
if (childNodes && parentNode) {
const childCount = childNodes.length;
for (let i = childCount - 1; i >= 0; --i) {
const childClone = cloneNode(childNodes[i], true);
childClone.__removalCount = (currentNode.__removalCount || 0) + 1;
parentNode.insertBefore(childClone, getNextSibling(currentNode));
}
}
}
_forceRemove(currentNode);
return true;
}
/* Check whether element has a valid namespace */
if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
_forceRemove(currentNode);
return true;
}
/* Make sure that older browsers don't get fallback-tag mXSS */
if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
_forceRemove(currentNode);
return true;
}
/* Sanitize element content to be template-safe */
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
/* Get the element's text content */
content = currentNode.textContent;
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
content = stringReplace(content, expr, ' ');
});
if (currentNode.textContent !== content) {
arrayPush(DOMPurify.removed, {
element: currentNode.cloneNode()
});
currentNode.textContent = content;
}
}
/* Execute a hook if present */
_executeHook('afterSanitizeElements', currentNode, null);
return false;
};
/**
* _isValidAttribute
*
* @param lcTag Lowercase tag name of containing element.
* @param lcName Lowercase attribute name.
* @param value Attribute value.
* @return Returns true if `value` is valid, otherwise false.
*/
// eslint-disable-next-line complexity
const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
/* Make sure attribute cannot clobber */
if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
return false;
}
/* Allow valid data-* attributes: At least one character after "-"
(https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
We don't need to check the value; it's always URI safe. */
if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
if (
// First condition does a very basic check if a) it's basically a valid custom element tagname AND
// b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
// and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
_isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||
// Alternative, second condition checks if it's an `is`-attribute, AND
// the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {
return false;
}
/* Check value is safe. First, is attr inert? If so, is safe */
} else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {
return false;
} else ;
return true;
};
/**
* _isBasicCustomElement
* checks if at least one dash is included in tagName, and it's not the first char
* for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
*
* @param tagName name of the tag of the node to sanitize
* @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
*/
const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);
};
/**
* _sanitizeAttributes
*
* @protect attributes
* @protect nodeName
* @protect removeAttribute
* @protect setAttribute
*
* @param currentNode to sanitize
*/
const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
/* Execute a hook if present */
_executeHook('beforeSanitizeAttributes', currentNode, null);
const {
attributes
} = currentNode;
/* Check if we have attributes; if not we might have a text node */
if (!attributes) {
return;
}
const hookEvent = {
attrName: '',
attrValue: '',
keepAttr: true,
allowedAttributes: ALLOWED_ATTR,
forceKeepAttr: undefined
};
let l = attributes.length;
/* Go backwards over all attributes; safely remove bad ones */
while (l--) {
const attr = attributes[l];
const {
name,
namespaceURI,
value: attrValue
} = attr;
const lcName = transformCaseFunc(name);
let value = name === 'value' ? attrValue : stringTrim(attrValue);
/* Execute a hook if present */
hookEvent.attrName = lcName;
hookEvent.attrValue = value;
hookEvent.keepAttr = true;
hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set
_executeHook('uponSanitizeAttribute', currentNode, hookEvent);
value = hookEvent.attrValue;
/* Full DOM Clobbering protection via namespace isolation,
* Prefix id and name attributes with `user-content-`
*/
if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {
// Remove the attribute with this value
_removeAttribute(name, currentNode);
// Prefix the value and later re-create the attribute with the sanitized value
value = SANITIZE_NAMED_PROPS_PREFIX + value;
}
/* Work around a security issue with comments inside attributes */
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) {
_removeAttribute(name, currentNode);
continue;
}
/* Did the hooks approve of the attribute? */
if (hookEvent.forceKeepAttr) {
continue;
}
/* Remove attribute */
_removeAttribute(name, currentNode);
/* Did the hooks approve of the attribute? */
if (!hookEvent.keepAttr) {
continue;
}
/* Work around a security issue in jQuery 3.0 */
if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
_removeAttribute(name, currentNode);
continue;
}
/* Sanitize attribute content to be template-safe */
if (SAFE_FOR_TEMPLATES) {
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
value = stringReplace(value, expr, ' ');
});
}
/* Is `value` valid for this attribute? */
const lcTag = transformCaseFunc(currentNode.nodeName);
if (!_isValidAttribute(lcTag, lcName, value)) {
continue;
}
/* Handle attributes that require Trusted Types */
if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {
if (namespaceURI) ; else {
switch (trustedTypes.getAttributeType(lcTag, lcName)) {
case 'TrustedHTML':
{
value = trustedTypesPolicy.createHTML(value);
break;
}
case 'TrustedScriptURL':
{
value = trustedTypesPolicy.createScriptURL(value);
break;
}
}
}
}
/* Handle invalid data-* attribute set by try-catching it */
try {
if (namespaceURI) {
currentNode.setAttributeNS(namespaceURI, name, value);
} else {
/* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */
currentNode.setAttribute(name, value);
}
if (_isClobbered(currentNode)) {
_forceRemove(currentNode);
} else {
arrayPop(DOMPurify.removed);
}
} catch (_) {}
}
/* Execute a hook if present */
_executeHook('afterSanitizeAttributes', currentNode, null);
};
/**
* _sanitizeShadowDOM
*
* @param fragment to iterate over recursively
*/
const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
let shadowNode = null;
const shadowIterator = _createNodeIterator(fragment);
/* Execute a hook if present */
_executeHook('beforeSanitizeShadowDOM', fragment, null);
while (shadowNode = shadowIterator.nextNode()) {
/* Execute a hook if present */
_executeHook('uponSanitizeShadowNode', shadowNode, null);
/* Sanitize tags and elements */
if (_sanitizeElements(shadowNode)) {
continue;
}
/* Deep shadow DOM detected */
if (shadowNode.content instanceof DocumentFragment) {
_sanitizeShadowDOM(shadowNode.content);
}
/* Check attributes, sanitize if necessary */
_sanitizeAttributes(shadowNode);
}
/* Execute a hook if present */
_executeHook('afterSanitizeShadowDOM', fragment, null);
};
// eslint-disable-next-line complexity
DOMPurify.sanitize = function (dirty) {
let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
let body = null;
let importedNode = null;
let currentNode = null;
let returnNode = null;
/* Make sure we have a string to sanitize.
DO NOT return early, as this will return the wrong type if
the user has requested a DOM object rather than a string */
IS_EMPTY_INPUT = !dirty;
if (IS_EMPTY_INPUT) {
dirty = '<!-->';
}
/* Stringify, in case dirty is an object */
if (typeof dirty !== 'string' && !_isNode(dirty)) {
if (typeof dirty.toString === 'function') {
dirty = dirty.toString();
if (typeof dirty !== 'string') {
throw typeErrorCreate('dirty is not a string, aborting');
}
} else {
throw typeErrorCreate('toString is not a function');
}
}
/* Return dirty HTML if DOMPurify cannot run */
if (!DOMPurify.isSupported) {
return dirty;
}
/* Assign config vars */
if (!SET_CONFIG) {
_parseConfig(cfg);
}
/* Clean up removed elements */
DOMPurify.removed = [];
/* Check if dirty is correctly typed for IN_PLACE */
if (typeof dirty === 'string') {
IN_PLACE = false;
}
if (IN_PLACE) {
/* Do some early pre-sanitization to avoid unsafe root nodes */
if (dirty.nodeName) {
const tagName = transformCaseFunc(dirty.nodeName);
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');
}
}
} else if (dirty instanceof Node) {
/* If dirty is a DOM element, append to an empty document to avoid
elements being stripped by the parser */
body = _initDocument('<!---->');
importedNode = body.ownerDocument.importNode(dirty, true);
if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {
/* Node is already a body, use as is */
body = importedNode;
} else if (importedNode.nodeName === 'HTML') {
body = importedNode;
} else {
// eslint-disable-next-line unicorn/prefer-dom-node-append
body.appendChild(importedNode);
}
} else {
/* Exit directly if we have nothing to do */
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&
// eslint-disable-next-line unicorn/prefer-includes
dirty.indexOf('<') === -1) {
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
}
/* Initialize the document to work on */
body = _initDocument(dirty);
/* Check we have a DOM node from the data */
if (!body) {
return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';
}
}
/* Remove first element node (ours) if FORCE_BODY is set */
if (body && FORCE_BODY) {
_forceRemove(body.firstChild);
}
/* Get node iterator */
const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
/* Now start iterating over the created document */
while (currentNode = nodeIterator.nextNode()) {
/* Sanitize tags and elements */
if (_sanitizeElements(currentNode)) {
continue;
}
/* Shadow DOM detected, sanitize it */
if (currentNode.content instanceof DocumentFragment) {
_sanitizeShadowDOM(currentNode.content);
}
/* Check attributes, sanitize if necessary */
_sanitizeAttributes(currentNode);
}
/* If we sanitized `dirty` in-place, return it. */
if (IN_PLACE) {
return dirty;
}
/* Return sanitized string or DOM */
if (RETURN_DOM) {
if (RETURN_DOM_FRAGMENT) {
returnNode = createDocumentFragment.call(body.ownerDocument);
while (body.firstChild) {
// eslint-disable-next-line unicorn/prefer-dom-node-append
returnNode.appendChild(body.firstChild);
}
} else {
returnNode = body;
}
if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {
/*
AdoptNode() is not used because internal state is not reset
(e.g. the past names map of a HTMLFormElement), this is safe
in theory but we would rather not risk another attack vector.
The state that is cloned by importNode() is explicitly defined
by the specs.
*/
returnNode = importNode.call(originalDocument, returnNode, true);
}
return returnNode;
}
let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
/* Serialize doctype if allowed */
if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\n' + serializedHTML;
}
/* Sanitize final string template-safe */
if (SAFE_FOR_TEMPLATES) {
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
serializedHTML = stringReplace(serializedHTML, expr, ' ');
});
}
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
};
DOMPurify.setConfig = function () {
let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_parseConfig(cfg);
SET_CONFIG = true;
};
DOMPurify.clearConfig = function () {
CONFIG = null;
SET_CONFIG = false;
};
DOMPurify.isValidAttribute = function (tag, attr, value) {
/* Initialize shared config vars if necessary. */
if (!CONFIG) {
_parseConfig({});
}
const lcTag = transformCaseFunc(tag);
const lcName = transformCaseFunc(attr);
return _isValidAttribute(lcTag, lcName, value);
};
DOMPurify.addHook = function (entryPoint, hookFunction) {
if (typeof hookFunction !== 'function') {
return;
}
hooks[entryPoint] = hooks[entryPoint] || [];
arrayPush(hooks[entryPoint], hookFunction);
};
DOMPurify.removeHook = function (entryPoint) {
if (hooks[entryPoint]) {
return arrayPop(hooks[entryPoint]);
}
};
DOMPurify.removeHooks = function (entryPoint) {
if (hooks[entryPoint]) {
hooks[entryPoint] = [];
}
};
DOMPurify.removeAllHooks = function () {
hooks = {};
};
return DOMPurify;
}
var purify = createDOMPurify();
//# sourceMappingURL=purify.es.mjs.map
/***/ }),
/***/ "./node_modules/dom-serializer/foreignNames.json":
/*!*******************************************************!*\
!*** ./node_modules/dom-serializer/foreignNames.json ***!
\*******************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"elementNames":{"altglyph":"altGlyph","altglyphdef":"altGlyphDef","altglyphitem":"altGlyphItem","animatecolor":"animateColor","animatemotion":"animateMotion","animatetransform":"animateTransform","clippath":"clipPath","feblend":"feBlend","fecolormatrix":"feColorMatrix","fecomponenttransfer":"feComponentTransfer","fecomposite":"feComposite","feconvolvematrix":"feConvolveMatrix","fediffuselighting":"feDiffuseLighting","fedisplacementmap":"feDisplacementMap","fedistantlight":"feDistantLight","fedropshadow":"feDropShadow","feflood":"feFlood","fefunca":"feFuncA","fefuncb":"feFuncB","fefuncg":"feFuncG","fefuncr":"feFuncR","fegaussianblur":"feGaussianBlur","feimage":"feImage","femerge":"feMerge","femergenode":"feMergeNode","femorphology":"feMorphology","feoffset":"feOffset","fepointlight":"fePointLight","fespecularlighting":"feSpecularLighting","fespotlight":"feSpotLight","fetile":"feTile","feturbulence":"feTurbulence","foreignobject":"foreignObject","glyphref":"glyphRef","lineargradient":"linearGradient","radialgradient":"radialGradient","textpath":"textPath"},"attributeNames":{"definitionurl":"definitionURL","attributename":"attributeName","attributetype":"attributeType","basefrequency":"baseFrequency","baseprofile":"baseProfile","calcmode":"calcMode","clippathunits":"clipPathUnits","diffuseconstant":"diffuseConstant","edgemode":"edgeMode","filterunits":"filterUnits","glyphref":"glyphRef","gradienttransform":"gradientTransform","gradientunits":"gradientUnits","kernelmatrix":"kernelMatrix","kernelunitlength":"kernelUnitLength","keypoints":"keyPoints","keysplines":"keySplines","keytimes":"keyTimes","lengthadjust":"lengthAdjust","limitingconeangle":"limitingConeAngle","markerheight":"markerHeight","markerunits":"markerUnits","markerwidth":"markerWidth","maskcontentunits":"maskContentUnits","maskunits":"maskUnits","numoctaves":"numOctaves","pathlength":"pathLength","patterncontentunits":"patternContentUnits","patterntransform":"patternTransform","patternunits":"patternUnits","pointsatx":"pointsAtX","pointsaty":"pointsAtY","pointsatz":"pointsAtZ","preservealpha":"preserveAlpha","preserveaspectratio":"preserveAspectRatio","primitiveunits":"primitiveUnits","refx":"refX","refy":"refY","repeatcount":"repeatCount","repeatdur":"repeatDur","requiredextensions":"requiredExtensions","requiredfeatures":"requiredFeatures","specularconstant":"specularConstant","specularexponent":"specularExponent","spreadmethod":"spreadMethod","startoffset":"startOffset","stddeviation":"stdDeviation","stitchtiles":"stitchTiles","surfacescale":"surfaceScale","systemlanguage":"systemLanguage","tablevalues":"tableValues","targetx":"targetX","targety":"targetY","textlength":"textLength","viewbox":"viewBox","viewtarget":"viewTarget","xchannelselector":"xChannelSelector","ychannelselector":"yChannelSelector","zoomandpan":"zoomAndPan"}}');
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/maps/decode.json":
/*!********************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/maps/decode.json ***!
\********************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}');
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/maps/entities.json":
/*!**********************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/maps/entities.json ***!
\**********************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"","InvisibleTimes":"","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"","NegativeThickSpace":"","NegativeThinSpace":"","NegativeVeryThinSpace":"","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":" ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"","zwnj":""}');
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/maps/legacy.json":
/*!********************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/maps/legacy.json ***!
\********************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}');
/***/ }),
/***/ "./node_modules/dom-serializer/node_modules/entities/lib/maps/xml.json":
/*!*****************************************************************************!*\
!*** ./node_modules/dom-serializer/node_modules/entities/lib/maps/xml.json ***!
\*****************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}');
/***/ }),
/***/ "./node_modules/entities/maps/decode.json":
/*!************************************************!*\
!*** ./node_modules/entities/maps/decode.json ***!
\************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}');
/***/ }),
/***/ "./node_modules/entities/maps/entities.json":
/*!**************************************************!*\
!*** ./node_modules/entities/maps/entities.json ***!
\**************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"Aacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾̳","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"\'","ApplyFunction":"","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩︀","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"","InvisibleTimes":"","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭︀","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐̸","NegativeMediumSpace":"","NegativeThickSpace":"","NegativeThinSpace":"","NegativeVeryThinSpace":"","nequiv":"≢","nesear":"⤨","nesim":"≂̸","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","nGg":"⋙̸","ngsim":"≵","nGt":"≫⃒","ngt":"≯","ngtr":"≯","nGtv":"≫̸","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦̸","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nLl":"⋘̸","nlsim":"≴","nLt":"≪⃒","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪̸","nmid":"∤","NoBreak":"","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","notin":"∉","notindot":"⋵̸","notinE":"⋹̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏̸","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐̸","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯̸","npre":"⪯̸","nrarrc":"⤳̸","nrarr":"↛","nrArr":"⇏","nrarrw":"↝̸","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍⃒","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥⃒","nvgt":">⃒","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\\"","QUOT":"\\"","rAarr":"⇛","race":"∽̱","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":" ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"","zwnj":""}');
/***/ }),
/***/ "./node_modules/entities/maps/legacy.json":
/*!************************************************!*\
!*** ./node_modules/entities/maps/legacy.json ***!
\************************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"Aacute":"Á","aacute":"á","Acirc":"Â","acirc":"â","acute":"´","AElig":"Æ","aelig":"æ","Agrave":"À","agrave":"à","amp":"&","AMP":"&","Aring":"Å","aring":"å","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","brvbar":"¦","Ccedil":"Ç","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","COPY":"©","curren":"¤","deg":"°","divide":"÷","Eacute":"É","eacute":"é","Ecirc":"Ê","ecirc":"ê","Egrave":"È","egrave":"è","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","GT":">","Iacute":"Í","iacute":"í","Icirc":"Î","icirc":"î","iexcl":"¡","Igrave":"Ì","igrave":"ì","iquest":"¿","Iuml":"Ï","iuml":"ï","laquo":"«","lt":"<","LT":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","Ntilde":"Ñ","ntilde":"ñ","Oacute":"Ó","oacute":"ó","Ocirc":"Ô","ocirc":"ô","Ograve":"Ò","ograve":"ò","ordf":"ª","ordm":"º","Oslash":"Ø","oslash":"ø","Otilde":"Õ","otilde":"õ","Ouml":"Ö","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","QUOT":"\\"","raquo":"»","reg":"®","REG":"®","sect":"§","shy":"","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","THORN":"Þ","thorn":"þ","times":"×","Uacute":"Ú","uacute":"ú","Ucirc":"Û","ucirc":"û","Ugrave":"Ù","ugrave":"ù","uml":"¨","Uuml":"Ü","uuml":"ü","Yacute":"Ý","yacute":"ý","yen":"¥","yuml":"ÿ"}');
/***/ }),
/***/ "./node_modules/entities/maps/xml.json":
/*!*********************************************!*\
!*** ./node_modules/entities/maps/xml.json ***!
\*********************************************/
/***/ ((module) => {
"use strict";
module.exports = /*#__PURE__*/JSON.parse('{"amp":"&","apos":"\'","gt":">","lt":"<","quot":"\\""}');
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/create fake namespace object */
/******/ (() => {
/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
/******/ var leafPrototypes;
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 16: return value when it's Promise-like
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = this(value);
/******/ if(mode & 8) return value;
/******/ if(typeof value === 'object' && value) {
/******/ if((mode & 4) && value.__esModule) return value;
/******/ if((mode & 16) && typeof value.then === 'function') return value;
/******/ }
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ var def = {};
/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
/******/ }
/******/ def['default'] = () => (value);
/******/ __webpack_require__.d(ns, def);
/******/ return ns;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
"use strict";
/*!************************************!*\
!*** ./assets/src/DashboardApp.js ***!
\************************************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ "react-dom");
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _common_all_config_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./common/all-config.scss */ "./assets/src/common/all-config.scss");
/* harmony import */ var _common_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./common/common */ "./assets/src/common/common.js");
/* harmony import */ var _common_common__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_common_common__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var _DashboardApp_SettingsWrap__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @DashboardApp/SettingsWrap */ "./assets/src/dashboard-app/SettingsWrap.js");
/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js");
/* harmony import */ var _Admin_store_globalDataStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @Admin/store/globalDataStore */ "./assets/src/store/globalDataStore.js");
/* harmony import */ var _Utils_setInitialState__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @Utils/setInitialState */ "./assets/src/utils/setInitialState.js");
/* Main Component */
const currentState = _Admin_store_globalDataStore__WEBPACK_IMPORTED_MODULE_7__["default"].getState();
if (!currentState.initialStateSetFlag) {
(0,_Utils_setInitialState__WEBPACK_IMPORTED_MODULE_8__["default"])(_Admin_store_globalDataStore__WEBPACK_IMPORTED_MODULE_7__["default"]);
}
react_dom__WEBPACK_IMPORTED_MODULE_2___default().render((0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_redux__WEBPACK_IMPORTED_MODULE_6__.Provider, {
store: _Admin_store_globalDataStore__WEBPACK_IMPORTED_MODULE_7__["default"]
}, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_DashboardApp_SettingsWrap__WEBPACK_IMPORTED_MODULE_5__["default"], null)), document.getElementById('astra-dashboard-app'));
})();
/******/ })()
;
//# sourceMappingURL=dashboard-app.js.map