9779 lines
361 KiB
JavaScript
9779 lines
361 KiB
JavaScript
(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([typeof document === "object" ? document.currentScript : undefined,
|
||
"[project]/node_modules/next/navigation.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
|
||
module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/navigation.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/@vercel/analytics/dist/next/index.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Analytics",
|
||
()=>Analytics2
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
// src/nextjs/index.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
// src/nextjs/utils.ts
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
// package.json
|
||
var name = "@vercel/analytics";
|
||
var version = "1.6.1";
|
||
// src/queue.ts
|
||
var initQueue = ()=>{
|
||
if (window.va) return;
|
||
window.va = function a(...params) {
|
||
(window.vaq = window.vaq || []).push(params);
|
||
};
|
||
};
|
||
// src/utils.ts
|
||
function isBrowser() {
|
||
return typeof window !== "undefined";
|
||
}
|
||
function detectEnvironment() {
|
||
try {
|
||
const env = ("TURBOPACK compile-time value", "development");
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
return "development";
|
||
}
|
||
} catch (e) {}
|
||
return "production";
|
||
}
|
||
function setMode(mode = "auto") {
|
||
if (mode === "auto") {
|
||
window.vam = detectEnvironment();
|
||
return;
|
||
}
|
||
window.vam = mode;
|
||
}
|
||
function getMode() {
|
||
const mode = isBrowser() ? window.vam : detectEnvironment();
|
||
return mode || "production";
|
||
}
|
||
function isDevelopment() {
|
||
return getMode() === "development";
|
||
}
|
||
function computeRoute(pathname, pathParams) {
|
||
if (!pathname || !pathParams) {
|
||
return pathname;
|
||
}
|
||
let result = pathname;
|
||
try {
|
||
const entries = Object.entries(pathParams);
|
||
for (const [key, value] of entries){
|
||
if (!Array.isArray(value)) {
|
||
const matcher = turnValueToRegExp(value);
|
||
if (matcher.test(result)) {
|
||
result = result.replace(matcher, `/[${key}]`);
|
||
}
|
||
}
|
||
}
|
||
for (const [key, value] of entries){
|
||
if (Array.isArray(value)) {
|
||
const matcher = turnValueToRegExp(value.join("/"));
|
||
if (matcher.test(result)) {
|
||
result = result.replace(matcher, `/[...${key}]`);
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
} catch (e) {
|
||
return pathname;
|
||
}
|
||
}
|
||
function turnValueToRegExp(value) {
|
||
return new RegExp(`/${escapeRegExp(value)}(?=[/?#]|$)`);
|
||
}
|
||
function escapeRegExp(string) {
|
||
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||
}
|
||
function getScriptSrc(props) {
|
||
if (props.scriptSrc) {
|
||
return props.scriptSrc;
|
||
}
|
||
if (isDevelopment()) {
|
||
return "https://va.vercel-scripts.com/v1/script.debug.js";
|
||
}
|
||
if (props.basePath) {
|
||
return `${props.basePath}/insights/script.js`;
|
||
}
|
||
return "/_vercel/insights/script.js";
|
||
}
|
||
// src/generic.ts
|
||
function inject(props = {
|
||
debug: true
|
||
}) {
|
||
var _a;
|
||
if (!isBrowser()) return;
|
||
setMode(props.mode);
|
||
initQueue();
|
||
if (props.beforeSend) {
|
||
(_a = window.va) == null ? void 0 : _a.call(window, "beforeSend", props.beforeSend);
|
||
}
|
||
const src = getScriptSrc(props);
|
||
if (document.head.querySelector(`script[src*="${src}"]`)) return;
|
||
const script = document.createElement("script");
|
||
script.src = src;
|
||
script.defer = true;
|
||
script.dataset.sdkn = name + (props.framework ? `/${props.framework}` : "");
|
||
script.dataset.sdkv = version;
|
||
if (props.disableAutoTrack) {
|
||
script.dataset.disableAutoTrack = "1";
|
||
}
|
||
if (props.endpoint) {
|
||
script.dataset.endpoint = props.endpoint;
|
||
} else if (props.basePath) {
|
||
script.dataset.endpoint = `${props.basePath}/insights`;
|
||
}
|
||
if (props.dsn) {
|
||
script.dataset.dsn = props.dsn;
|
||
}
|
||
script.onerror = ()=>{
|
||
const errorMessage = isDevelopment() ? "Please check if any ad blockers are enabled and try again." : "Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.";
|
||
console.log(`[Vercel Web Analytics] Failed to load script from ${src}. ${errorMessage}`);
|
||
};
|
||
if (isDevelopment() && props.debug === false) {
|
||
script.dataset.debug = "false";
|
||
}
|
||
document.head.appendChild(script);
|
||
}
|
||
function pageview({ route, path }) {
|
||
var _a;
|
||
(_a = window.va) == null ? void 0 : _a.call(window, "pageview", {
|
||
route,
|
||
path
|
||
});
|
||
}
|
||
// src/react/utils.ts
|
||
function getBasePath() {
|
||
if (typeof __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"] === "undefined" || typeof __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env === "undefined") {
|
||
return void 0;
|
||
}
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.REACT_APP_VERCEL_OBSERVABILITY_BASEPATH;
|
||
}
|
||
// src/react/index.tsx
|
||
function Analytics(props) {
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||
"Analytics.useEffect": ()=>{
|
||
var _a;
|
||
if (props.beforeSend) {
|
||
(_a = window.va) == null ? void 0 : _a.call(window, "beforeSend", props.beforeSend);
|
||
}
|
||
}
|
||
}["Analytics.useEffect"], [
|
||
props.beforeSend
|
||
]);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||
"Analytics.useEffect": ()=>{
|
||
inject({
|
||
framework: props.framework || "react",
|
||
basePath: props.basePath ?? getBasePath(),
|
||
...props.route !== void 0 && {
|
||
disableAutoTrack: true
|
||
},
|
||
...props
|
||
});
|
||
}
|
||
}["Analytics.useEffect"], []);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||
"Analytics.useEffect": ()=>{
|
||
if (props.route && props.path) {
|
||
pageview({
|
||
route: props.route,
|
||
path: props.path
|
||
});
|
||
}
|
||
}
|
||
}["Analytics.useEffect"], [
|
||
props.route,
|
||
props.path
|
||
]);
|
||
return null;
|
||
}
|
||
;
|
||
var useRoute = ()=>{
|
||
const params = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useParams"])();
|
||
const searchParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"])();
|
||
const path = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])();
|
||
if (!params) {
|
||
return {
|
||
route: null,
|
||
path
|
||
};
|
||
}
|
||
const finalParams = Object.keys(params).length ? params : Object.fromEntries(searchParams.entries());
|
||
return {
|
||
route: computeRoute(path, finalParams),
|
||
path
|
||
};
|
||
};
|
||
function getBasePath2() {
|
||
if (typeof __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"] === "undefined" || typeof __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env === "undefined") {
|
||
return void 0;
|
||
}
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.NEXT_PUBLIC_VERCEL_OBSERVABILITY_BASEPATH;
|
||
}
|
||
// src/nextjs/index.tsx
|
||
function AnalyticsComponent(props) {
|
||
const { route, path } = useRoute();
|
||
return /* @__PURE__ */ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].createElement(Analytics, {
|
||
path,
|
||
route,
|
||
...props,
|
||
basePath: getBasePath2(),
|
||
framework: "next"
|
||
});
|
||
}
|
||
function Analytics2(props) {
|
||
return /* @__PURE__ */ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].createElement(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Suspense"], {
|
||
fallback: null
|
||
}, /* @__PURE__ */ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].createElement(AnalyticsComponent, {
|
||
...props
|
||
}));
|
||
}
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license React
|
||
* react-jsx-dev-runtime.development.js
|
||
*
|
||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*/ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
"production" !== ("TURBOPACK compile-time value", "development") && function() {
|
||
function getComponentNameFromType(type) {
|
||
if (null == type) return null;
|
||
if ("function" === typeof type) return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null;
|
||
if ("string" === typeof type) return type;
|
||
switch(type){
|
||
case REACT_FRAGMENT_TYPE:
|
||
return "Fragment";
|
||
case REACT_PROFILER_TYPE:
|
||
return "Profiler";
|
||
case REACT_STRICT_MODE_TYPE:
|
||
return "StrictMode";
|
||
case REACT_SUSPENSE_TYPE:
|
||
return "Suspense";
|
||
case REACT_SUSPENSE_LIST_TYPE:
|
||
return "SuspenseList";
|
||
case REACT_ACTIVITY_TYPE:
|
||
return "Activity";
|
||
case REACT_VIEW_TRANSITION_TYPE:
|
||
return "ViewTransition";
|
||
}
|
||
if ("object" === typeof type) switch("number" === typeof type.tag && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof){
|
||
case REACT_PORTAL_TYPE:
|
||
return "Portal";
|
||
case REACT_CONTEXT_TYPE:
|
||
return type.displayName || "Context";
|
||
case REACT_CONSUMER_TYPE:
|
||
return (type._context.displayName || "Context") + ".Consumer";
|
||
case REACT_FORWARD_REF_TYPE:
|
||
var innerType = type.render;
|
||
type = type.displayName;
|
||
type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef");
|
||
return type;
|
||
case REACT_MEMO_TYPE:
|
||
return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo";
|
||
case REACT_LAZY_TYPE:
|
||
innerType = type._payload;
|
||
type = type._init;
|
||
try {
|
||
return getComponentNameFromType(type(innerType));
|
||
} catch (x) {}
|
||
}
|
||
return null;
|
||
}
|
||
function testStringCoercion(value) {
|
||
return "" + value;
|
||
}
|
||
function checkKeyStringCoercion(value) {
|
||
try {
|
||
testStringCoercion(value);
|
||
var JSCompiler_inline_result = !1;
|
||
} catch (e) {
|
||
JSCompiler_inline_result = !0;
|
||
}
|
||
if (JSCompiler_inline_result) {
|
||
JSCompiler_inline_result = console;
|
||
var JSCompiler_temp_const = JSCompiler_inline_result.error;
|
||
var JSCompiler_inline_result$jscomp$0 = "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
|
||
JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
|
||
return testStringCoercion(value);
|
||
}
|
||
}
|
||
function getTaskName(type) {
|
||
if (type === REACT_FRAGMENT_TYPE) return "<>";
|
||
if ("object" === typeof type && null !== type && type.$$typeof === REACT_LAZY_TYPE) return "<...>";
|
||
try {
|
||
var name = getComponentNameFromType(type);
|
||
return name ? "<" + name + ">" : "<...>";
|
||
} catch (x) {
|
||
return "<...>";
|
||
}
|
||
}
|
||
function getOwner() {
|
||
var dispatcher = ReactSharedInternals.A;
|
||
return null === dispatcher ? null : dispatcher.getOwner();
|
||
}
|
||
function UnknownOwner() {
|
||
return Error("react-stack-top-frame");
|
||
}
|
||
function hasValidKey(config) {
|
||
if (hasOwnProperty.call(config, "key")) {
|
||
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
|
||
if (getter && getter.isReactWarning) return !1;
|
||
}
|
||
return void 0 !== config.key;
|
||
}
|
||
function defineKeyPropWarningGetter(props, displayName) {
|
||
function warnAboutAccessingKey() {
|
||
specialPropKeyWarningShown || (specialPropKeyWarningShown = !0, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
|
||
}
|
||
warnAboutAccessingKey.isReactWarning = !0;
|
||
Object.defineProperty(props, "key", {
|
||
get: warnAboutAccessingKey,
|
||
configurable: !0
|
||
});
|
||
}
|
||
function elementRefGetterWithDeprecationWarning() {
|
||
var componentName = getComponentNameFromType(this.type);
|
||
didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = !0, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
|
||
componentName = this.props.ref;
|
||
return void 0 !== componentName ? componentName : null;
|
||
}
|
||
function ReactElement(type, key, props, owner, debugStack, debugTask) {
|
||
var refProp = props.ref;
|
||
type = {
|
||
$$typeof: REACT_ELEMENT_TYPE,
|
||
type: type,
|
||
key: key,
|
||
props: props,
|
||
_owner: owner
|
||
};
|
||
null !== (void 0 !== refProp ? refProp : null) ? Object.defineProperty(type, "ref", {
|
||
enumerable: !1,
|
||
get: elementRefGetterWithDeprecationWarning
|
||
}) : Object.defineProperty(type, "ref", {
|
||
enumerable: !1,
|
||
value: null
|
||
});
|
||
type._store = {};
|
||
Object.defineProperty(type._store, "validated", {
|
||
configurable: !1,
|
||
enumerable: !1,
|
||
writable: !0,
|
||
value: 0
|
||
});
|
||
Object.defineProperty(type, "_debugInfo", {
|
||
configurable: !1,
|
||
enumerable: !1,
|
||
writable: !0,
|
||
value: null
|
||
});
|
||
Object.defineProperty(type, "_debugStack", {
|
||
configurable: !1,
|
||
enumerable: !1,
|
||
writable: !0,
|
||
value: debugStack
|
||
});
|
||
Object.defineProperty(type, "_debugTask", {
|
||
configurable: !1,
|
||
enumerable: !1,
|
||
writable: !0,
|
||
value: debugTask
|
||
});
|
||
Object.freeze && (Object.freeze(type.props), Object.freeze(type));
|
||
return type;
|
||
}
|
||
function jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStack, debugTask) {
|
||
var children = config.children;
|
||
if (void 0 !== children) if (isStaticChildren) if (isArrayImpl(children)) {
|
||
for(isStaticChildren = 0; isStaticChildren < children.length; isStaticChildren++)validateChildKeys(children[isStaticChildren]);
|
||
Object.freeze && Object.freeze(children);
|
||
} else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
|
||
else validateChildKeys(children);
|
||
if (hasOwnProperty.call(config, "key")) {
|
||
children = getComponentNameFromType(type);
|
||
var keys = Object.keys(config).filter(function(k) {
|
||
return "key" !== k;
|
||
});
|
||
isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
|
||
didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = !0);
|
||
}
|
||
children = null;
|
||
void 0 !== maybeKey && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey);
|
||
hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key);
|
||
if ("key" in config) {
|
||
maybeKey = {};
|
||
for(var propName in config)"key" !== propName && (maybeKey[propName] = config[propName]);
|
||
} else maybeKey = config;
|
||
children && defineKeyPropWarningGetter(maybeKey, "function" === typeof type ? type.displayName || type.name || "Unknown" : type);
|
||
return ReactElement(type, children, maybeKey, getOwner(), debugStack, debugTask);
|
||
}
|
||
function validateChildKeys(node) {
|
||
isValidElement(node) ? node._store && (node._store.validated = 1) : "object" === typeof node && null !== node && node.$$typeof === REACT_LAZY_TYPE && ("fulfilled" === node._payload.status ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1));
|
||
}
|
||
function isValidElement(object) {
|
||
return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE;
|
||
}
|
||
var React = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"), REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = Symbol.for("react.activity"), REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"), REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty = Object.prototype.hasOwnProperty, isArrayImpl = Array.isArray, createTask = console.createTask ? console.createTask : function() {
|
||
return null;
|
||
};
|
||
React = {
|
||
react_stack_bottom_frame: function(callStackForError) {
|
||
return callStackForError();
|
||
}
|
||
};
|
||
var specialPropKeyWarningShown;
|
||
var didWarnAboutElementRef = {};
|
||
var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(React, UnknownOwner)();
|
||
var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));
|
||
var didWarnAboutKeySpread = {};
|
||
exports.Fragment = REACT_FRAGMENT_TYPE;
|
||
exports.jsxDEV = function(type, config, maybeKey, isStaticChildren) {
|
||
var trackActualOwner = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;
|
||
if (trackActualOwner) {
|
||
var previousStackTraceLimit = Error.stackTraceLimit;
|
||
Error.stackTraceLimit = 10;
|
||
var debugStackDEV = Error("react-stack-top-frame");
|
||
Error.stackTraceLimit = previousStackTraceLimit;
|
||
} else debugStackDEV = unknownOwnerDebugStack;
|
||
return jsxDEVImpl(type, config, maybeKey, isStaticChildren, debugStackDEV, trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask);
|
||
};
|
||
}();
|
||
}),
|
||
"[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
'use strict';
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js [app-client] (ecmascript)");
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/router/utils/querystring.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
assign: null,
|
||
searchParamsToUrlQuery: null,
|
||
urlQueryToSearchParams: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
assign: function() {
|
||
return assign;
|
||
},
|
||
searchParamsToUrlQuery: function() {
|
||
return searchParamsToUrlQuery;
|
||
},
|
||
urlQueryToSearchParams: function() {
|
||
return urlQueryToSearchParams;
|
||
}
|
||
});
|
||
function searchParamsToUrlQuery(searchParams) {
|
||
const query = {};
|
||
for (const [key, value] of searchParams.entries()){
|
||
const existing = query[key];
|
||
if (typeof existing === 'undefined') {
|
||
query[key] = value;
|
||
} else if (Array.isArray(existing)) {
|
||
existing.push(value);
|
||
} else {
|
||
query[key] = [
|
||
existing,
|
||
value
|
||
];
|
||
}
|
||
}
|
||
return query;
|
||
}
|
||
function stringifyUrlQueryParam(param) {
|
||
if (typeof param === 'string') {
|
||
return param;
|
||
}
|
||
if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {
|
||
return String(param);
|
||
} else {
|
||
return '';
|
||
}
|
||
}
|
||
function urlQueryToSearchParams(query) {
|
||
const searchParams = new URLSearchParams();
|
||
for (const [key, value] of Object.entries(query)){
|
||
if (Array.isArray(value)) {
|
||
for (const item of value){
|
||
searchParams.append(key, stringifyUrlQueryParam(item));
|
||
}
|
||
} else {
|
||
searchParams.set(key, stringifyUrlQueryParam(value));
|
||
}
|
||
}
|
||
return searchParams;
|
||
}
|
||
function assign(target, ...searchParamsList) {
|
||
for (const searchParams of searchParamsList){
|
||
for (const key of searchParams.keys()){
|
||
target.delete(key);
|
||
}
|
||
for (const [key, value] of searchParams.entries()){
|
||
target.append(key, value);
|
||
}
|
||
}
|
||
return target;
|
||
} //# sourceMappingURL=querystring.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/router/utils/format-url.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
// Format function modified from nodejs
|
||
// 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 __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
formatUrl: null,
|
||
formatWithValidation: null,
|
||
urlObjectKeys: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
formatUrl: function() {
|
||
return formatUrl;
|
||
},
|
||
formatWithValidation: function() {
|
||
return formatWithValidation;
|
||
},
|
||
urlObjectKeys: function() {
|
||
return urlObjectKeys;
|
||
}
|
||
});
|
||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-client] (ecmascript)");
|
||
const _querystring = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/querystring.js [app-client] (ecmascript)"));
|
||
const slashedProtocols = /https?|ftp|gopher|file/;
|
||
function formatUrl(urlObj) {
|
||
let { auth, hostname } = urlObj;
|
||
let protocol = urlObj.protocol || '';
|
||
let pathname = urlObj.pathname || '';
|
||
let hash = urlObj.hash || '';
|
||
let query = urlObj.query || '';
|
||
let host = false;
|
||
auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';
|
||
if (urlObj.host) {
|
||
host = auth + urlObj.host;
|
||
} else if (hostname) {
|
||
host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);
|
||
if (urlObj.port) {
|
||
host += ':' + urlObj.port;
|
||
}
|
||
}
|
||
if (query && typeof query === 'object') {
|
||
query = String(_querystring.urlQueryToSearchParams(query));
|
||
}
|
||
let search = urlObj.search || query && `?${query}` || '';
|
||
if (protocol && !protocol.endsWith(':')) protocol += ':';
|
||
if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {
|
||
host = '//' + (host || '');
|
||
if (pathname && pathname[0] !== '/') pathname = '/' + pathname;
|
||
} else if (!host) {
|
||
host = '';
|
||
}
|
||
if (hash && hash[0] !== '#') hash = '#' + hash;
|
||
if (search && search[0] !== '?') search = '?' + search;
|
||
pathname = pathname.replace(/[?#]/g, encodeURIComponent);
|
||
search = search.replace('#', '%23');
|
||
return `${protocol}${host}${pathname}${search}${hash}`;
|
||
}
|
||
const urlObjectKeys = [
|
||
'auth',
|
||
'hash',
|
||
'host',
|
||
'hostname',
|
||
'href',
|
||
'path',
|
||
'pathname',
|
||
'port',
|
||
'protocol',
|
||
'query',
|
||
'search',
|
||
'slashes'
|
||
];
|
||
function formatWithValidation(url) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (url !== null && typeof url === 'object') {
|
||
Object.keys(url).forEach((key)=>{
|
||
if (!urlObjectKeys.includes(key)) {
|
||
console.warn(`Unknown key passed via urlObject into url.format: ${key}`);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
return formatUrl(url);
|
||
} //# sourceMappingURL=format-url.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/client/use-merged-ref.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "useMergedRef", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return useMergedRef;
|
||
}
|
||
});
|
||
const _react = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
function useMergedRef(refA, refB) {
|
||
const cleanupA = (0, _react.useRef)(null);
|
||
const cleanupB = (0, _react.useRef)(null);
|
||
// NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
|
||
// (this happens often if the user doesn't pass a ref to Link/Form/Image)
|
||
// But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
|
||
// and the user might pass that ref into ref-merging library that doesn't support cleanup refs
|
||
// (because it hasn't been updated for React 19)
|
||
// which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
|
||
// So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
|
||
return (0, _react.useCallback)((current)=>{
|
||
if (current === null) {
|
||
const cleanupFnA = cleanupA.current;
|
||
if (cleanupFnA) {
|
||
cleanupA.current = null;
|
||
cleanupFnA();
|
||
}
|
||
const cleanupFnB = cleanupB.current;
|
||
if (cleanupFnB) {
|
||
cleanupB.current = null;
|
||
cleanupFnB();
|
||
}
|
||
} else {
|
||
if (refA) {
|
||
cleanupA.current = applyRef(refA, current);
|
||
}
|
||
if (refB) {
|
||
cleanupB.current = applyRef(refB, current);
|
||
}
|
||
}
|
||
}, [
|
||
refA,
|
||
refB
|
||
]);
|
||
}
|
||
function applyRef(refA, current) {
|
||
if (typeof refA === 'function') {
|
||
const cleanup = refA(current);
|
||
if (typeof cleanup === 'function') {
|
||
return cleanup;
|
||
} else {
|
||
return ()=>refA(null);
|
||
}
|
||
} else {
|
||
refA.current = current;
|
||
return ()=>{
|
||
refA.current = null;
|
||
};
|
||
}
|
||
}
|
||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||
Object.defineProperty(exports.default, '__esModule', {
|
||
value: true
|
||
});
|
||
Object.assign(exports.default, exports);
|
||
module.exports = exports.default;
|
||
} //# sourceMappingURL=use-merged-ref.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/utils.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
DecodeError: null,
|
||
MiddlewareNotFoundError: null,
|
||
MissingStaticPage: null,
|
||
NormalizeError: null,
|
||
PageNotFoundError: null,
|
||
SP: null,
|
||
ST: null,
|
||
WEB_VITALS: null,
|
||
execOnce: null,
|
||
getDisplayName: null,
|
||
getLocationOrigin: null,
|
||
getURL: null,
|
||
isAbsoluteUrl: null,
|
||
isResSent: null,
|
||
loadGetInitialProps: null,
|
||
normalizeRepeatedSlashes: null,
|
||
stringifyError: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
DecodeError: function() {
|
||
return DecodeError;
|
||
},
|
||
MiddlewareNotFoundError: function() {
|
||
return MiddlewareNotFoundError;
|
||
},
|
||
MissingStaticPage: function() {
|
||
return MissingStaticPage;
|
||
},
|
||
NormalizeError: function() {
|
||
return NormalizeError;
|
||
},
|
||
PageNotFoundError: function() {
|
||
return PageNotFoundError;
|
||
},
|
||
SP: function() {
|
||
return SP;
|
||
},
|
||
ST: function() {
|
||
return ST;
|
||
},
|
||
WEB_VITALS: function() {
|
||
return WEB_VITALS;
|
||
},
|
||
execOnce: function() {
|
||
return execOnce;
|
||
},
|
||
getDisplayName: function() {
|
||
return getDisplayName;
|
||
},
|
||
getLocationOrigin: function() {
|
||
return getLocationOrigin;
|
||
},
|
||
getURL: function() {
|
||
return getURL;
|
||
},
|
||
isAbsoluteUrl: function() {
|
||
return isAbsoluteUrl;
|
||
},
|
||
isResSent: function() {
|
||
return isResSent;
|
||
},
|
||
loadGetInitialProps: function() {
|
||
return loadGetInitialProps;
|
||
},
|
||
normalizeRepeatedSlashes: function() {
|
||
return normalizeRepeatedSlashes;
|
||
},
|
||
stringifyError: function() {
|
||
return stringifyError;
|
||
}
|
||
});
|
||
const WEB_VITALS = [
|
||
'CLS',
|
||
'FCP',
|
||
'FID',
|
||
'INP',
|
||
'LCP',
|
||
'TTFB'
|
||
];
|
||
function execOnce(fn) {
|
||
let used = false;
|
||
let result;
|
||
return (...args)=>{
|
||
if (!used) {
|
||
used = true;
|
||
result = fn(...args);
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
|
||
// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
|
||
const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/;
|
||
const isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);
|
||
function getLocationOrigin() {
|
||
const { protocol, hostname, port } = window.location;
|
||
return `${protocol}//${hostname}${port ? ':' + port : ''}`;
|
||
}
|
||
function getURL() {
|
||
const { href } = window.location;
|
||
const origin = getLocationOrigin();
|
||
return href.substring(origin.length);
|
||
}
|
||
function getDisplayName(Component) {
|
||
return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';
|
||
}
|
||
function isResSent(res) {
|
||
return res.finished || res.headersSent;
|
||
}
|
||
function normalizeRepeatedSlashes(url) {
|
||
const urlParts = url.split('?');
|
||
const urlNoQuery = urlParts[0];
|
||
return urlNoQuery // first we replace any non-encoded backslashes with forward
|
||
// then normalize repeated forward slashes
|
||
.replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '');
|
||
}
|
||
async function loadGetInitialProps(App, ctx) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (App.prototype?.getInitialProps) {
|
||
const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`;
|
||
throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
||
value: "E394",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
// when called from _app `ctx` is nested in `ctx`
|
||
const res = ctx.res || ctx.ctx && ctx.ctx.res;
|
||
if (!App.getInitialProps) {
|
||
if (ctx.ctx && ctx.Component) {
|
||
// @ts-ignore pageProps default
|
||
return {
|
||
pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)
|
||
};
|
||
}
|
||
return {};
|
||
}
|
||
const props = await App.getInitialProps(ctx);
|
||
if (res && isResSent(res)) {
|
||
return props;
|
||
}
|
||
if (!props) {
|
||
const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`;
|
||
throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
||
value: "E394",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (Object.keys(props).length === 0 && !ctx.ctx) {
|
||
console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`);
|
||
}
|
||
}
|
||
return props;
|
||
}
|
||
const SP = typeof performance !== 'undefined';
|
||
const ST = SP && [
|
||
'mark',
|
||
'measure',
|
||
'getEntriesByName'
|
||
].every((method)=>typeof performance[method] === 'function');
|
||
class DecodeError extends Error {
|
||
}
|
||
class NormalizeError extends Error {
|
||
}
|
||
class PageNotFoundError extends Error {
|
||
constructor(page){
|
||
super();
|
||
this.code = 'ENOENT';
|
||
this.name = 'PageNotFoundError';
|
||
this.message = `Cannot find module for page: ${page}`;
|
||
}
|
||
}
|
||
class MissingStaticPage extends Error {
|
||
constructor(page, message){
|
||
super();
|
||
this.message = `Failed to load static file for page: ${page} ${message}`;
|
||
}
|
||
}
|
||
class MiddlewareNotFoundError extends Error {
|
||
constructor(){
|
||
super();
|
||
this.code = 'ENOENT';
|
||
this.message = `Cannot find the middleware module`;
|
||
}
|
||
}
|
||
function stringifyError(error) {
|
||
return JSON.stringify({
|
||
message: error.message,
|
||
stack: error.stack
|
||
});
|
||
} //# sourceMappingURL=utils.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/router/utils/is-local-url.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "isLocalURL", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return isLocalURL;
|
||
}
|
||
});
|
||
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils.js [app-client] (ecmascript)");
|
||
const _hasbasepath = __turbopack_context__.r("[project]/node_modules/next/dist/client/has-base-path.js [app-client] (ecmascript)");
|
||
function isLocalURL(url) {
|
||
// prevent a hydration mismatch on href for url with anchor refs
|
||
if (!(0, _utils.isAbsoluteUrl)(url)) return true;
|
||
try {
|
||
// absolute urls can be local if they are on the same origin
|
||
const locationOrigin = (0, _utils.getLocationOrigin)();
|
||
const resolved = new URL(url, locationOrigin);
|
||
return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);
|
||
} catch (_) {
|
||
return false;
|
||
}
|
||
} //# sourceMappingURL=is-local-url.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/utils/error-once.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "errorOnce", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return errorOnce;
|
||
}
|
||
});
|
||
let errorOnce = (_)=>{};
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
const errors = new Set();
|
||
errorOnce = (msg)=>{
|
||
if (!errors.has(msg)) {
|
||
console.error(msg);
|
||
}
|
||
errors.add(msg);
|
||
};
|
||
} //# sourceMappingURL=error-once.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
'use client';
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
default: null,
|
||
useLinkStatus: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
/**
|
||
* A React component that extends the HTML `<a>` element to provide
|
||
* [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)
|
||
* and client-side navigation. This is the primary way to navigate between routes in Next.js.
|
||
*
|
||
* @remarks
|
||
* - Prefetching is only enabled in production.
|
||
*
|
||
* @see https://nextjs.org/docs/app/api-reference/components/link
|
||
*/ default: function() {
|
||
return LinkComponent;
|
||
},
|
||
useLinkStatus: function() {
|
||
return useLinkStatus;
|
||
}
|
||
});
|
||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-client] (ecmascript)");
|
||
const _jsxruntime = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/jsx-runtime.js [app-client] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"));
|
||
const _formaturl = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/format-url.js [app-client] (ecmascript)");
|
||
const _approutercontextsharedruntime = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js [app-client] (ecmascript)");
|
||
const _usemergedref = __turbopack_context__.r("[project]/node_modules/next/dist/client/use-merged-ref.js [app-client] (ecmascript)");
|
||
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils.js [app-client] (ecmascript)");
|
||
const _addbasepath = __turbopack_context__.r("[project]/node_modules/next/dist/client/add-base-path.js [app-client] (ecmascript)");
|
||
const _warnonce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [app-client] (ecmascript)");
|
||
const _links = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/links.js [app-client] (ecmascript)");
|
||
const _islocalurl = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/is-local-url.js [app-client] (ecmascript)");
|
||
const _types = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/segment-cache/types.js [app-client] (ecmascript)");
|
||
const _erroronce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/error-once.js [app-client] (ecmascript)");
|
||
function isModifiedEvent(event) {
|
||
const eventTarget = event.currentTarget;
|
||
const target = eventTarget.getAttribute('target');
|
||
return target && target !== '_self' || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download
|
||
event.nativeEvent && event.nativeEvent.which === 2;
|
||
}
|
||
function linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate) {
|
||
if (typeof window !== 'undefined') {
|
||
const { nodeName } = e.currentTarget;
|
||
// anchors inside an svg have a lowercase nodeName
|
||
const isAnchorNodeName = nodeName.toUpperCase() === 'A';
|
||
if (isAnchorNodeName && isModifiedEvent(e) || e.currentTarget.hasAttribute('download')) {
|
||
// ignore click for browser’s default behavior
|
||
return;
|
||
}
|
||
if (!(0, _islocalurl.isLocalURL)(href)) {
|
||
if (replace) {
|
||
// browser default behavior does not replace the history state
|
||
// so we need to do it manually
|
||
e.preventDefault();
|
||
location.replace(href);
|
||
}
|
||
// ignore click for browser’s default behavior
|
||
return;
|
||
}
|
||
e.preventDefault();
|
||
if (onNavigate) {
|
||
let isDefaultPrevented = false;
|
||
onNavigate({
|
||
preventDefault: ()=>{
|
||
isDefaultPrevented = true;
|
||
}
|
||
});
|
||
if (isDefaultPrevented) {
|
||
return;
|
||
}
|
||
}
|
||
const { dispatchNavigateAction } = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/app-router-instance.js [app-client] (ecmascript)");
|
||
_react.default.startTransition(()=>{
|
||
dispatchNavigateAction(as || href, replace ? 'replace' : 'push', scroll ?? true, linkInstanceRef.current);
|
||
});
|
||
}
|
||
}
|
||
function formatStringOrUrl(urlObjOrString) {
|
||
if (typeof urlObjOrString === 'string') {
|
||
return urlObjOrString;
|
||
}
|
||
return (0, _formaturl.formatUrl)(urlObjOrString);
|
||
}
|
||
function LinkComponent(props) {
|
||
const [linkStatus, setOptimisticLinkStatus] = (0, _react.useOptimistic)(_links.IDLE_LINK_STATUS);
|
||
let children;
|
||
const linkInstanceRef = (0, _react.useRef)(null);
|
||
const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, onNavigate, ref: forwardedRef, unstable_dynamicOnHover, ...restProps } = props;
|
||
children = childrenProp;
|
||
if (legacyBehavior && (typeof children === 'string' || typeof children === 'number')) {
|
||
children = /*#__PURE__*/ (0, _jsxruntime.jsx)("a", {
|
||
children: children
|
||
});
|
||
}
|
||
const router = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);
|
||
const prefetchEnabled = prefetchProp !== false;
|
||
const fetchStrategy = prefetchProp !== false ? getFetchStrategyFromPrefetchProp(prefetchProp) : _types.FetchStrategy.PPR;
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
function createPropError(args) {
|
||
return Object.defineProperty(new Error(`Failed prop type: The prop \`${args.key}\` expects a ${args.expected} in \`<Link>\`, but got \`${args.actual}\` instead.` + (typeof window !== 'undefined' ? "\nOpen your browser's console to view the Component stack trace." : '')), "__NEXT_ERROR_CODE", {
|
||
value: "E319",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
// TypeScript trick for type-guarding:
|
||
const requiredPropsGuard = {
|
||
href: true
|
||
};
|
||
const requiredProps = Object.keys(requiredPropsGuard);
|
||
requiredProps.forEach((key)=>{
|
||
if (key === 'href') {
|
||
if (props[key] == null || typeof props[key] !== 'string' && typeof props[key] !== 'object') {
|
||
throw createPropError({
|
||
key,
|
||
expected: '`string` or `object`',
|
||
actual: props[key] === null ? 'null' : typeof props[key]
|
||
});
|
||
}
|
||
} else {
|
||
// TypeScript trick for type-guarding:
|
||
const _ = key;
|
||
}
|
||
});
|
||
// TypeScript trick for type-guarding:
|
||
const optionalPropsGuard = {
|
||
as: true,
|
||
replace: true,
|
||
scroll: true,
|
||
shallow: true,
|
||
passHref: true,
|
||
prefetch: true,
|
||
unstable_dynamicOnHover: true,
|
||
onClick: true,
|
||
onMouseEnter: true,
|
||
onTouchStart: true,
|
||
legacyBehavior: true,
|
||
onNavigate: true
|
||
};
|
||
const optionalProps = Object.keys(optionalPropsGuard);
|
||
optionalProps.forEach((key)=>{
|
||
const valType = typeof props[key];
|
||
if (key === 'as') {
|
||
if (props[key] && valType !== 'string' && valType !== 'object') {
|
||
throw createPropError({
|
||
key,
|
||
expected: '`string` or `object`',
|
||
actual: valType
|
||
});
|
||
}
|
||
} else if (key === 'onClick' || key === 'onMouseEnter' || key === 'onTouchStart' || key === 'onNavigate') {
|
||
if (props[key] && valType !== 'function') {
|
||
throw createPropError({
|
||
key,
|
||
expected: '`function`',
|
||
actual: valType
|
||
});
|
||
}
|
||
} else if (key === 'replace' || key === 'scroll' || key === 'shallow' || key === 'passHref' || key === 'legacyBehavior' || key === 'unstable_dynamicOnHover') {
|
||
if (props[key] != null && valType !== 'boolean') {
|
||
throw createPropError({
|
||
key,
|
||
expected: '`boolean`',
|
||
actual: valType
|
||
});
|
||
}
|
||
} else if (key === 'prefetch') {
|
||
if (props[key] != null && valType !== 'boolean' && props[key] !== 'auto') {
|
||
throw createPropError({
|
||
key,
|
||
expected: '`boolean | "auto"`',
|
||
actual: valType
|
||
});
|
||
}
|
||
} else {
|
||
// TypeScript trick for type-guarding:
|
||
const _ = key;
|
||
}
|
||
});
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (props.locale) {
|
||
(0, _warnonce.warnOnce)('The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization');
|
||
}
|
||
if (!asProp) {
|
||
let href;
|
||
if (typeof hrefProp === 'string') {
|
||
href = hrefProp;
|
||
} else if (typeof hrefProp === 'object' && typeof hrefProp.pathname === 'string') {
|
||
href = hrefProp.pathname;
|
||
}
|
||
if (href) {
|
||
const hasDynamicSegment = href.split('/').some((segment)=>segment.startsWith('[') && segment.endsWith(']'));
|
||
if (hasDynamicSegment) {
|
||
throw Object.defineProperty(new Error(`Dynamic href \`${href}\` found in <Link> while using the \`/app\` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href`), "__NEXT_ERROR_CODE", {
|
||
value: "E267",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const { href, as } = _react.default.useMemo({
|
||
"LinkComponent.useMemo": ()=>{
|
||
const resolvedHref = formatStringOrUrl(hrefProp);
|
||
return {
|
||
href: resolvedHref,
|
||
as: asProp ? formatStringOrUrl(asProp) : resolvedHref
|
||
};
|
||
}
|
||
}["LinkComponent.useMemo"], [
|
||
hrefProp,
|
||
asProp
|
||
]);
|
||
// This will return the first child, if multiple are provided it will throw an error
|
||
let child;
|
||
if (legacyBehavior) {
|
||
if (children?.$$typeof === Symbol.for('react.lazy')) {
|
||
throw Object.defineProperty(new Error(`\`<Link legacyBehavior>\` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's \`<a>\` tag.`), "__NEXT_ERROR_CODE", {
|
||
value: "E863",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (onClick) {
|
||
console.warn(`"onClick" was passed to <Link> with \`href\` of \`${hrefProp}\` but "legacyBehavior" was set. The legacy behavior requires onClick be set on the child of next/link`);
|
||
}
|
||
if (onMouseEnterProp) {
|
||
console.warn(`"onMouseEnter" was passed to <Link> with \`href\` of \`${hrefProp}\` but "legacyBehavior" was set. The legacy behavior requires onMouseEnter be set on the child of next/link`);
|
||
}
|
||
try {
|
||
child = _react.default.Children.only(children);
|
||
} catch (err) {
|
||
if (!children) {
|
||
throw Object.defineProperty(new Error(`No children were passed to <Link> with \`href\` of \`${hrefProp}\` but one child is required https://nextjs.org/docs/messages/link-no-children`), "__NEXT_ERROR_CODE", {
|
||
value: "E320",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
throw Object.defineProperty(new Error(`Multiple children were passed to <Link> with \`href\` of \`${hrefProp}\` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children` + (typeof window !== 'undefined' ? " \nOpen your browser's console to view the Component stack trace." : '')), "__NEXT_ERROR_CODE", {
|
||
value: "E266",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
} else //TURBOPACK unreachable
|
||
;
|
||
} else {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (children?.type === 'a') {
|
||
throw Object.defineProperty(new Error('Invalid <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'), "__NEXT_ERROR_CODE", {
|
||
value: "E209",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
const childRef = legacyBehavior ? child && typeof child === 'object' && child.ref : forwardedRef;
|
||
// Use a callback ref to attach an IntersectionObserver to the anchor tag on
|
||
// mount. In the future we will also use this to keep track of all the
|
||
// currently mounted <Link> instances, e.g. so we can re-prefetch them after
|
||
// a revalidation or refresh.
|
||
const observeLinkVisibilityOnMount = _react.default.useCallback({
|
||
"LinkComponent.useCallback[observeLinkVisibilityOnMount]": (element)=>{
|
||
if (router !== null) {
|
||
linkInstanceRef.current = (0, _links.mountLinkInstance)(element, href, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus);
|
||
}
|
||
return ({
|
||
"LinkComponent.useCallback[observeLinkVisibilityOnMount]": ()=>{
|
||
if (linkInstanceRef.current) {
|
||
(0, _links.unmountLinkForCurrentNavigation)(linkInstanceRef.current);
|
||
linkInstanceRef.current = null;
|
||
}
|
||
(0, _links.unmountPrefetchableInstance)(element);
|
||
}
|
||
})["LinkComponent.useCallback[observeLinkVisibilityOnMount]"];
|
||
}
|
||
}["LinkComponent.useCallback[observeLinkVisibilityOnMount]"], [
|
||
prefetchEnabled,
|
||
href,
|
||
router,
|
||
fetchStrategy,
|
||
setOptimisticLinkStatus
|
||
]);
|
||
const mergedRef = (0, _usemergedref.useMergedRef)(observeLinkVisibilityOnMount, childRef);
|
||
const childProps = {
|
||
ref: mergedRef,
|
||
onClick (e) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (!e) {
|
||
throw Object.defineProperty(new Error(`Component rendered inside next/link has to pass click event to "onClick" prop.`), "__NEXT_ERROR_CODE", {
|
||
value: "E312",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
if (!legacyBehavior && typeof onClick === 'function') {
|
||
onClick(e);
|
||
}
|
||
if (legacyBehavior && child.props && typeof child.props.onClick === 'function') {
|
||
child.props.onClick(e);
|
||
}
|
||
if (!router) {
|
||
return;
|
||
}
|
||
if (e.defaultPrevented) {
|
||
return;
|
||
}
|
||
linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate);
|
||
},
|
||
onMouseEnter (e) {
|
||
if (!legacyBehavior && typeof onMouseEnterProp === 'function') {
|
||
onMouseEnterProp(e);
|
||
}
|
||
if (legacyBehavior && child.props && typeof child.props.onMouseEnter === 'function') {
|
||
child.props.onMouseEnter(e);
|
||
}
|
||
if (!router) {
|
||
return;
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
return;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
const upgradeToDynamicPrefetch = undefined;
|
||
},
|
||
onTouchStart: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : function onTouchStart(e) {
|
||
if (!legacyBehavior && typeof onTouchStartProp === 'function') {
|
||
onTouchStartProp(e);
|
||
}
|
||
if (legacyBehavior && child.props && typeof child.props.onTouchStart === 'function') {
|
||
child.props.onTouchStart(e);
|
||
}
|
||
if (!router) {
|
||
return;
|
||
}
|
||
if (!prefetchEnabled) {
|
||
return;
|
||
}
|
||
const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true;
|
||
(0, _links.onNavigationIntent)(e.currentTarget, upgradeToDynamicPrefetch);
|
||
}
|
||
};
|
||
// If the url is absolute, we can bypass the logic to prepend the basePath.
|
||
if ((0, _utils.isAbsoluteUrl)(as)) {
|
||
childProps.href = as;
|
||
} else if (!legacyBehavior || passHref || child.type === 'a' && !('href' in child.props)) {
|
||
childProps.href = (0, _addbasepath.addBasePath)(as);
|
||
}
|
||
let link;
|
||
if (legacyBehavior) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
(0, _erroronce.errorOnce)('`legacyBehavior` is deprecated and will be removed in a future ' + 'release. A codemod is available to upgrade your components:\n\n' + 'npx @next/codemod@latest new-link .\n\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components');
|
||
}
|
||
link = /*#__PURE__*/ _react.default.cloneElement(child, childProps);
|
||
} else {
|
||
link = /*#__PURE__*/ (0, _jsxruntime.jsx)("a", {
|
||
...restProps,
|
||
...childProps,
|
||
children: children
|
||
});
|
||
}
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsx)(LinkStatusContext.Provider, {
|
||
value: linkStatus,
|
||
children: link
|
||
});
|
||
}
|
||
const LinkStatusContext = /*#__PURE__*/ (0, _react.createContext)(_links.IDLE_LINK_STATUS);
|
||
const useLinkStatus = ()=>{
|
||
return (0, _react.useContext)(LinkStatusContext);
|
||
};
|
||
function getFetchStrategyFromPrefetchProp(prefetchProp) {
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
return prefetchProp === null || prefetchProp === 'auto' ? _types.FetchStrategy.PPR : // (although invalid values should've been filtered out by prop validation in dev)
|
||
_types.FetchStrategy.Full;
|
||
}
|
||
}
|
||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||
Object.defineProperty(exports.default, '__esModule', {
|
||
value: true
|
||
});
|
||
Object.assign(exports.default, exports);
|
||
module.exports = exports.default;
|
||
} //# sourceMappingURL=link.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/shared/src/utils.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"mergeClasses",
|
||
()=>mergeClasses,
|
||
"toKebabCase",
|
||
()=>toKebabCase
|
||
]);
|
||
const toKebabCase = (string)=>string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
||
const mergeClasses = (...classes)=>classes.filter((className, index, array)=>{
|
||
return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
|
||
}).join(" ").trim();
|
||
;
|
||
//# sourceMappingURL=utils.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/defaultAttributes.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>defaultAttributes
|
||
]);
|
||
var defaultAttributes = {
|
||
xmlns: "http://www.w3.org/2000/svg",
|
||
width: 24,
|
||
height: 24,
|
||
viewBox: "0 0 24 24",
|
||
fill: "none",
|
||
stroke: "currentColor",
|
||
strokeWidth: 2,
|
||
strokeLinecap: "round",
|
||
strokeLinejoin: "round"
|
||
};
|
||
;
|
||
//# sourceMappingURL=defaultAttributes.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/Icon.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>Icon
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$defaultAttributes$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/defaultAttributes.js [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$shared$2f$src$2f$utils$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/shared/src/utils.js [app-client] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
const Icon = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["forwardRef"])(({ color = "currentColor", size = 24, strokeWidth = 2, absoluteStrokeWidth, className = "", children, iconNode, ...rest }, ref)=>{
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createElement"])("svg", {
|
||
ref,
|
||
...__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$defaultAttributes$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"],
|
||
width: size,
|
||
height: size,
|
||
stroke: color,
|
||
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
||
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$shared$2f$src$2f$utils$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["mergeClasses"])("lucide", className),
|
||
...rest
|
||
}, [
|
||
...iconNode.map(([tag, attrs])=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createElement"])(tag, attrs)),
|
||
...Array.isArray(children) ? children : [
|
||
children
|
||
]
|
||
]);
|
||
});
|
||
;
|
||
//# sourceMappingURL=Icon.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>createLucideIcon
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$shared$2f$src$2f$utils$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/shared/src/utils.js [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$Icon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/Icon.js [app-client] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
const createLucideIcon = (iconName, iconNode)=>{
|
||
const Component = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["forwardRef"])(({ className, ...props }, ref)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createElement"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$Icon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
|
||
ref,
|
||
iconNode,
|
||
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$shared$2f$src$2f$utils$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["mergeClasses"])(`lucide-${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$shared$2f$src$2f$utils$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["toKebabCase"])(iconName)}`, className),
|
||
...props
|
||
}));
|
||
Component.displayName = `${iconName}`;
|
||
return Component;
|
||
};
|
||
;
|
||
//# sourceMappingURL=createLucideIcon.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/house.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>House
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)");
|
||
;
|
||
const House = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("House", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",
|
||
key: "5wwlr5"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",
|
||
key: "1d0kgt"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=house.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/house.js [app-client] (ecmascript) <export default as Home>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Home",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$house$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$house$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/house.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/message-circle.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>MessageCircle
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)");
|
||
;
|
||
const MessageCircle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("MessageCircle", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z",
|
||
key: "vv11sd"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=message-circle.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/message-circle.js [app-client] (ecmascript) <export default as MessageCircle>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"MessageCircle",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/message-circle.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/user.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>User
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)");
|
||
;
|
||
const User = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("User", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",
|
||
key: "975kel"
|
||
}
|
||
],
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "12",
|
||
cy: "7",
|
||
r: "4",
|
||
key: "17ys0d"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=user.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/user.js [app-client] (ecmascript) <export default as User>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"User",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$user$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/user.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>X
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)");
|
||
;
|
||
const X = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("X", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M18 6 6 18",
|
||
key: "1bl5f8"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "m6 6 12 12",
|
||
key: "d8bk6v"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=x.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript) <export default as X>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"X",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/users.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>Users
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)");
|
||
;
|
||
const Users = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("Users", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",
|
||
key: "1yyitq"
|
||
}
|
||
],
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "9",
|
||
cy: "7",
|
||
r: "4",
|
||
key: "nufk8"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M22 21v-2a4 4 0 0 0-3-3.87",
|
||
key: "kshegd"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M16 3.13a4 4 0 0 1 0 7.75",
|
||
key: "1da9ce"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=users.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/users.js [app-client] (ecmascript) <export default as Users>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Users",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/music.js [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* @license lucide-react v0.454.0 - ISC
|
||
*
|
||
* This source code is licensed under the ISC license.
|
||
* See the LICENSE file in the root directory of this source tree.
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>Music
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)");
|
||
;
|
||
const Music = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("Music", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M9 18V5l12-2v13",
|
||
key: "1jmyc2"
|
||
}
|
||
],
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "6",
|
||
cy: "18",
|
||
r: "3",
|
||
key: "fqmcym"
|
||
}
|
||
],
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "18",
|
||
cy: "16",
|
||
r: "3",
|
||
key: "1hluhg"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=music.js.map
|
||
}),
|
||
"[project]/node_modules/lucide-react/dist/esm/icons/music.js [app-client] (ecmascript) <export default as Music>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Music",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$music$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$music$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/music.js [app-client] (ecmascript)");
|
||
}),
|
||
"[project]/node_modules/zustand/esm/vanilla.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"createStore",
|
||
()=>createStore
|
||
]);
|
||
const createStoreImpl = (createState)=>{
|
||
let state;
|
||
const listeners = /* @__PURE__ */ new Set();
|
||
const setState = (partial, replace)=>{
|
||
const nextState = typeof partial === "function" ? partial(state) : partial;
|
||
if (!Object.is(nextState, state)) {
|
||
const previousState = state;
|
||
state = (replace != null ? replace : typeof nextState !== "object" || nextState === null) ? nextState : Object.assign({}, state, nextState);
|
||
listeners.forEach((listener)=>listener(state, previousState));
|
||
}
|
||
};
|
||
const getState = ()=>state;
|
||
const getInitialState = ()=>initialState;
|
||
const subscribe = (listener)=>{
|
||
listeners.add(listener);
|
||
return ()=>listeners.delete(listener);
|
||
};
|
||
const api = {
|
||
setState,
|
||
getState,
|
||
getInitialState,
|
||
subscribe
|
||
};
|
||
const initialState = state = createState(setState, getState, api);
|
||
return api;
|
||
};
|
||
const createStore = (createState)=>createState ? createStoreImpl(createState) : createStoreImpl;
|
||
;
|
||
}),
|
||
"[project]/node_modules/zustand/esm/react.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"create",
|
||
()=>create,
|
||
"useStore",
|
||
()=>useStore
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$zustand$2f$esm$2f$vanilla$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/zustand/esm/vanilla.mjs [app-client] (ecmascript)");
|
||
;
|
||
;
|
||
const identity = (arg)=>arg;
|
||
function useStore(api, selector = identity) {
|
||
const slice = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].useSyncExternalStore(api.subscribe, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].useCallback({
|
||
"useStore.useSyncExternalStore[slice]": ()=>selector(api.getState())
|
||
}["useStore.useSyncExternalStore[slice]"], [
|
||
api,
|
||
selector
|
||
]), __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].useCallback({
|
||
"useStore.useSyncExternalStore[slice]": ()=>selector(api.getInitialState())
|
||
}["useStore.useSyncExternalStore[slice]"], [
|
||
api,
|
||
selector
|
||
]));
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].useDebugValue(slice);
|
||
return slice;
|
||
}
|
||
const createImpl = (createState)=>{
|
||
const api = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$zustand$2f$esm$2f$vanilla$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createStore"])(createState);
|
||
const useBoundStore = (selector)=>useStore(api, selector);
|
||
Object.assign(useBoundStore, api);
|
||
return useBoundStore;
|
||
};
|
||
const create = (createState)=>createState ? createImpl(createState) : createImpl;
|
||
;
|
||
}),
|
||
"[project]/node_modules/zustand/esm/middleware.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"combine",
|
||
()=>combine,
|
||
"createJSONStorage",
|
||
()=>createJSONStorage,
|
||
"devtools",
|
||
()=>devtools,
|
||
"persist",
|
||
()=>persist,
|
||
"redux",
|
||
()=>redux,
|
||
"subscribeWithSelector",
|
||
()=>subscribeWithSelector,
|
||
"unstable_ssrSafe",
|
||
()=>ssrSafe
|
||
]);
|
||
const __TURBOPACK__import$2e$meta__ = {
|
||
get url () {
|
||
return `file://${__turbopack_context__.P("node_modules/zustand/esm/middleware.mjs")}`;
|
||
}
|
||
};
|
||
const reduxImpl = (reducer, initial)=>(set, _get, api)=>{
|
||
api.dispatch = (action)=>{
|
||
set((state)=>reducer(state, action), false, action);
|
||
return action;
|
||
};
|
||
api.dispatchFromDevtools = true;
|
||
return {
|
||
dispatch: (...args)=>api.dispatch(...args),
|
||
...initial
|
||
};
|
||
};
|
||
const redux = reduxImpl;
|
||
const trackedConnections = /* @__PURE__ */ new Map();
|
||
const getTrackedConnectionState = (name)=>{
|
||
const api = trackedConnections.get(name);
|
||
if (!api) return {};
|
||
return Object.fromEntries(Object.entries(api.stores).map(([key, api2])=>[
|
||
key,
|
||
api2.getState()
|
||
]));
|
||
};
|
||
const extractConnectionInformation = (store, extensionConnector, options)=>{
|
||
if (store === void 0) {
|
||
return {
|
||
type: "untracked",
|
||
connection: extensionConnector.connect(options)
|
||
};
|
||
}
|
||
const existingConnection = trackedConnections.get(options.name);
|
||
if (existingConnection) {
|
||
return {
|
||
type: "tracked",
|
||
store,
|
||
...existingConnection
|
||
};
|
||
}
|
||
const newConnection = {
|
||
connection: extensionConnector.connect(options),
|
||
stores: {}
|
||
};
|
||
trackedConnections.set(options.name, newConnection);
|
||
return {
|
||
type: "tracked",
|
||
store,
|
||
...newConnection
|
||
};
|
||
};
|
||
const removeStoreFromTrackedConnections = (name, store)=>{
|
||
if (store === void 0) return;
|
||
const connectionInfo = trackedConnections.get(name);
|
||
if (!connectionInfo) return;
|
||
delete connectionInfo.stores[store];
|
||
if (Object.keys(connectionInfo.stores).length === 0) {
|
||
trackedConnections.delete(name);
|
||
}
|
||
};
|
||
const findCallerName = (stack)=>{
|
||
var _a, _b;
|
||
if (!stack) return void 0;
|
||
const traceLines = stack.split("\n");
|
||
const apiSetStateLineIndex = traceLines.findIndex((traceLine)=>traceLine.includes("api.setState"));
|
||
if (apiSetStateLineIndex < 0) return void 0;
|
||
const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || "";
|
||
return (_b = /.+ (.+) .+/.exec(callerLine)) == null ? void 0 : _b[1];
|
||
};
|
||
const devtoolsImpl = (fn, devtoolsOptions = {})=>(set, get, api)=>{
|
||
const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;
|
||
let extensionConnector;
|
||
try {
|
||
extensionConnector = (enabled != null ? enabled : (__TURBOPACK__import$2e$meta__.env ? __TURBOPACK__import$2e$meta__.env.MODE : void 0) !== "production") && window.__REDUX_DEVTOOLS_EXTENSION__;
|
||
} catch (e) {}
|
||
if (!extensionConnector) {
|
||
return fn(set, get, api);
|
||
}
|
||
const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);
|
||
let isRecording = true;
|
||
api.setState = (state, replace, nameOrAction)=>{
|
||
const r = set(state, replace);
|
||
if (!isRecording) return r;
|
||
const action = nameOrAction === void 0 ? {
|
||
type: anonymousActionType || findCallerName(new Error().stack) || "anonymous"
|
||
} : typeof nameOrAction === "string" ? {
|
||
type: nameOrAction
|
||
} : nameOrAction;
|
||
if (store === void 0) {
|
||
connection == null ? void 0 : connection.send(action, get());
|
||
return r;
|
||
}
|
||
connection == null ? void 0 : connection.send({
|
||
...action,
|
||
type: `${store}/${action.type}`
|
||
}, {
|
||
...getTrackedConnectionState(options.name),
|
||
[store]: api.getState()
|
||
});
|
||
return r;
|
||
};
|
||
api.devtools = {
|
||
cleanup: ()=>{
|
||
if (connection && typeof connection.unsubscribe === "function") {
|
||
connection.unsubscribe();
|
||
}
|
||
removeStoreFromTrackedConnections(options.name, store);
|
||
}
|
||
};
|
||
const setStateFromDevtools = (...a)=>{
|
||
const originalIsRecording = isRecording;
|
||
isRecording = false;
|
||
set(...a);
|
||
isRecording = originalIsRecording;
|
||
};
|
||
const initialState = fn(api.setState, get, api);
|
||
if (connectionInformation.type === "untracked") {
|
||
connection == null ? void 0 : connection.init(initialState);
|
||
} else {
|
||
connectionInformation.stores[connectionInformation.store] = api;
|
||
connection == null ? void 0 : connection.init(Object.fromEntries(Object.entries(connectionInformation.stores).map(([key, store2])=>[
|
||
key,
|
||
key === connectionInformation.store ? initialState : store2.getState()
|
||
])));
|
||
}
|
||
if (api.dispatchFromDevtools && typeof api.dispatch === "function") {
|
||
let didWarnAboutReservedActionType = false;
|
||
const originalDispatch = api.dispatch;
|
||
api.dispatch = (...args)=>{
|
||
if ((__TURBOPACK__import$2e$meta__.env ? __TURBOPACK__import$2e$meta__.env.MODE : void 0) !== "production" && args[0].type === "__setState" && !didWarnAboutReservedActionType) {
|
||
console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.');
|
||
didWarnAboutReservedActionType = true;
|
||
}
|
||
originalDispatch(...args);
|
||
};
|
||
}
|
||
connection.subscribe((message)=>{
|
||
var _a;
|
||
switch(message.type){
|
||
case "ACTION":
|
||
if (typeof message.payload !== "string") {
|
||
console.error("[zustand devtools middleware] Unsupported action format");
|
||
return;
|
||
}
|
||
return parseJsonThen(message.payload, (action)=>{
|
||
if (action.type === "__setState") {
|
||
if (store === void 0) {
|
||
setStateFromDevtools(action.state);
|
||
return;
|
||
}
|
||
if (Object.keys(action.state).length !== 1) {
|
||
console.error(`
|
||
[zustand devtools middleware] Unsupported __setState action format.
|
||
When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
|
||
and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
|
||
`);
|
||
}
|
||
const stateFromDevtools = action.state[store];
|
||
if (stateFromDevtools === void 0 || stateFromDevtools === null) {
|
||
return;
|
||
}
|
||
if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {
|
||
setStateFromDevtools(stateFromDevtools);
|
||
}
|
||
return;
|
||
}
|
||
if (!api.dispatchFromDevtools) return;
|
||
if (typeof api.dispatch !== "function") return;
|
||
api.dispatch(action);
|
||
});
|
||
case "DISPATCH":
|
||
switch(message.payload.type){
|
||
case "RESET":
|
||
setStateFromDevtools(initialState);
|
||
if (store === void 0) {
|
||
return connection == null ? void 0 : connection.init(api.getState());
|
||
}
|
||
return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));
|
||
case "COMMIT":
|
||
if (store === void 0) {
|
||
connection == null ? void 0 : connection.init(api.getState());
|
||
return;
|
||
}
|
||
return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));
|
||
case "ROLLBACK":
|
||
return parseJsonThen(message.state, (state)=>{
|
||
if (store === void 0) {
|
||
setStateFromDevtools(state);
|
||
connection == null ? void 0 : connection.init(api.getState());
|
||
return;
|
||
}
|
||
setStateFromDevtools(state[store]);
|
||
connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));
|
||
});
|
||
case "JUMP_TO_STATE":
|
||
case "JUMP_TO_ACTION":
|
||
return parseJsonThen(message.state, (state)=>{
|
||
if (store === void 0) {
|
||
setStateFromDevtools(state);
|
||
return;
|
||
}
|
||
if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {
|
||
setStateFromDevtools(state[store]);
|
||
}
|
||
});
|
||
case "IMPORT_STATE":
|
||
{
|
||
const { nextLiftedState } = message.payload;
|
||
const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;
|
||
if (!lastComputedState) return;
|
||
if (store === void 0) {
|
||
setStateFromDevtools(lastComputedState);
|
||
} else {
|
||
setStateFromDevtools(lastComputedState[store]);
|
||
}
|
||
connection == null ? void 0 : connection.send(null, // FIXME no-any
|
||
nextLiftedState);
|
||
return;
|
||
}
|
||
case "PAUSE_RECORDING":
|
||
return isRecording = !isRecording;
|
||
}
|
||
return;
|
||
}
|
||
});
|
||
return initialState;
|
||
};
|
||
const devtools = devtoolsImpl;
|
||
const parseJsonThen = (stringified, fn)=>{
|
||
let parsed;
|
||
try {
|
||
parsed = JSON.parse(stringified);
|
||
} catch (e) {
|
||
console.error("[zustand devtools middleware] Could not parse the received json", e);
|
||
}
|
||
if (parsed !== void 0) fn(parsed);
|
||
};
|
||
const subscribeWithSelectorImpl = (fn)=>(set, get, api)=>{
|
||
const origSubscribe = api.subscribe;
|
||
api.subscribe = (selector, optListener, options)=>{
|
||
let listener = selector;
|
||
if (optListener) {
|
||
const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;
|
||
let currentSlice = selector(api.getState());
|
||
listener = (state)=>{
|
||
const nextSlice = selector(state);
|
||
if (!equalityFn(currentSlice, nextSlice)) {
|
||
const previousSlice = currentSlice;
|
||
optListener(currentSlice = nextSlice, previousSlice);
|
||
}
|
||
};
|
||
if (options == null ? void 0 : options.fireImmediately) {
|
||
optListener(currentSlice, currentSlice);
|
||
}
|
||
}
|
||
return origSubscribe(listener);
|
||
};
|
||
const initialState = fn(set, get, api);
|
||
return initialState;
|
||
};
|
||
const subscribeWithSelector = subscribeWithSelectorImpl;
|
||
function combine(initialState, create) {
|
||
return (...args)=>Object.assign({}, initialState, create(...args));
|
||
}
|
||
function createJSONStorage(getStorage, options) {
|
||
let storage;
|
||
try {
|
||
storage = getStorage();
|
||
} catch (e) {
|
||
return;
|
||
}
|
||
const persistStorage = {
|
||
getItem: (name)=>{
|
||
var _a;
|
||
const parse = (str2)=>{
|
||
if (str2 === null) {
|
||
return null;
|
||
}
|
||
return JSON.parse(str2, options == null ? void 0 : options.reviver);
|
||
};
|
||
const str = (_a = storage.getItem(name)) != null ? _a : null;
|
||
if (str instanceof Promise) {
|
||
return str.then(parse);
|
||
}
|
||
return parse(str);
|
||
},
|
||
setItem: (name, newValue)=>storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),
|
||
removeItem: (name)=>storage.removeItem(name)
|
||
};
|
||
return persistStorage;
|
||
}
|
||
const toThenable = (fn)=>(input)=>{
|
||
try {
|
||
const result = fn(input);
|
||
if (result instanceof Promise) {
|
||
return result;
|
||
}
|
||
return {
|
||
then (onFulfilled) {
|
||
return toThenable(onFulfilled)(result);
|
||
},
|
||
catch (_onRejected) {
|
||
return this;
|
||
}
|
||
};
|
||
} catch (e) {
|
||
return {
|
||
then (_onFulfilled) {
|
||
return this;
|
||
},
|
||
catch (onRejected) {
|
||
return toThenable(onRejected)(e);
|
||
}
|
||
};
|
||
}
|
||
};
|
||
const persistImpl = (config, baseOptions)=>(set, get, api)=>{
|
||
let options = {
|
||
storage: createJSONStorage(()=>localStorage),
|
||
partialize: (state)=>state,
|
||
version: 0,
|
||
merge: (persistedState, currentState)=>({
|
||
...currentState,
|
||
...persistedState
|
||
}),
|
||
...baseOptions
|
||
};
|
||
let hasHydrated = false;
|
||
const hydrationListeners = /* @__PURE__ */ new Set();
|
||
const finishHydrationListeners = /* @__PURE__ */ new Set();
|
||
let storage = options.storage;
|
||
if (!storage) {
|
||
return config((...args)=>{
|
||
console.warn(`[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`);
|
||
set(...args);
|
||
}, get, api);
|
||
}
|
||
const setItem = ()=>{
|
||
const state = options.partialize({
|
||
...get()
|
||
});
|
||
return storage.setItem(options.name, {
|
||
state,
|
||
version: options.version
|
||
});
|
||
};
|
||
const savedSetState = api.setState;
|
||
api.setState = (state, replace)=>{
|
||
savedSetState(state, replace);
|
||
return setItem();
|
||
};
|
||
const configResult = config((...args)=>{
|
||
set(...args);
|
||
return setItem();
|
||
}, get, api);
|
||
api.getInitialState = ()=>configResult;
|
||
let stateFromStorage;
|
||
const hydrate = ()=>{
|
||
var _a, _b;
|
||
if (!storage) return;
|
||
hasHydrated = false;
|
||
hydrationListeners.forEach((cb)=>{
|
||
var _a2;
|
||
return cb((_a2 = get()) != null ? _a2 : configResult);
|
||
});
|
||
const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;
|
||
return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue)=>{
|
||
if (deserializedStorageValue) {
|
||
if (typeof deserializedStorageValue.version === "number" && deserializedStorageValue.version !== options.version) {
|
||
if (options.migrate) {
|
||
const migration = options.migrate(deserializedStorageValue.state, deserializedStorageValue.version);
|
||
if (migration instanceof Promise) {
|
||
return migration.then((result)=>[
|
||
true,
|
||
result
|
||
]);
|
||
}
|
||
return [
|
||
true,
|
||
migration
|
||
];
|
||
}
|
||
console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`);
|
||
} else {
|
||
return [
|
||
false,
|
||
deserializedStorageValue.state
|
||
];
|
||
}
|
||
}
|
||
return [
|
||
false,
|
||
void 0
|
||
];
|
||
}).then((migrationResult)=>{
|
||
var _a2;
|
||
const [migrated, migratedState] = migrationResult;
|
||
stateFromStorage = options.merge(migratedState, (_a2 = get()) != null ? _a2 : configResult);
|
||
set(stateFromStorage, true);
|
||
if (migrated) {
|
||
return setItem();
|
||
}
|
||
}).then(()=>{
|
||
postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);
|
||
stateFromStorage = get();
|
||
hasHydrated = true;
|
||
finishHydrationListeners.forEach((cb)=>cb(stateFromStorage));
|
||
}).catch((e)=>{
|
||
postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);
|
||
});
|
||
};
|
||
api.persist = {
|
||
setOptions: (newOptions)=>{
|
||
options = {
|
||
...options,
|
||
...newOptions
|
||
};
|
||
if (newOptions.storage) {
|
||
storage = newOptions.storage;
|
||
}
|
||
},
|
||
clearStorage: ()=>{
|
||
storage == null ? void 0 : storage.removeItem(options.name);
|
||
},
|
||
getOptions: ()=>options,
|
||
rehydrate: ()=>hydrate(),
|
||
hasHydrated: ()=>hasHydrated,
|
||
onHydrate: (cb)=>{
|
||
hydrationListeners.add(cb);
|
||
return ()=>{
|
||
hydrationListeners.delete(cb);
|
||
};
|
||
},
|
||
onFinishHydration: (cb)=>{
|
||
finishHydrationListeners.add(cb);
|
||
return ()=>{
|
||
finishHydrationListeners.delete(cb);
|
||
};
|
||
}
|
||
};
|
||
if (!options.skipHydration) {
|
||
hydrate();
|
||
}
|
||
return stateFromStorage || configResult;
|
||
};
|
||
const persist = persistImpl;
|
||
function ssrSafe(config, isSSR = typeof window === "undefined") {
|
||
return (set, get, api)=>{
|
||
if (!isSSR) {
|
||
return config(set, get, api);
|
||
}
|
||
const ssrSet = ()=>{
|
||
throw new Error("Cannot set state of Zustand store in SSR");
|
||
};
|
||
api.setState = ssrSet;
|
||
return config(ssrSet, get, api);
|
||
};
|
||
}
|
||
;
|
||
}),
|
||
"[project]/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/compose-refs/src/composeRefs.tsx
|
||
__turbopack_context__.s([
|
||
"composeRefs",
|
||
()=>composeRefs,
|
||
"useComposedRefs",
|
||
()=>useComposedRefs
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
;
|
||
function setRef(ref, value) {
|
||
if (typeof ref === "function") {
|
||
return ref(value);
|
||
} else if (ref !== null && ref !== void 0) {
|
||
ref.current = value;
|
||
}
|
||
}
|
||
function composeRefs(...refs) {
|
||
return (node)=>{
|
||
let hasCleanup = false;
|
||
const cleanups = refs.map((ref)=>{
|
||
const cleanup = setRef(ref, node);
|
||
if (!hasCleanup && typeof cleanup == "function") {
|
||
hasCleanup = true;
|
||
}
|
||
return cleanup;
|
||
});
|
||
if (hasCleanup) {
|
||
return ()=>{
|
||
for(let i = 0; i < cleanups.length; i++){
|
||
const cleanup = cleanups[i];
|
||
if (typeof cleanup == "function") {
|
||
cleanup();
|
||
} else {
|
||
setRef(refs[i], null);
|
||
}
|
||
}
|
||
};
|
||
}
|
||
};
|
||
}
|
||
function useComposedRefs(...refs) {
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"](composeRefs(...refs), refs);
|
||
}
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/node_modules/@radix-ui/react-slot/dist/index.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/slot/src/Slot.tsx
|
||
__turbopack_context__.s([
|
||
"Root",
|
||
()=>Root,
|
||
"Slot",
|
||
()=>Slot,
|
||
"Slottable",
|
||
()=>Slottable
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-client] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-runtime.js [app-client] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
var Slot = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { children, ...slotProps } = props;
|
||
const childrenArray = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Children"].toArray(children);
|
||
const slottable = childrenArray.find(isSlottable);
|
||
if (slottable) {
|
||
const newElement = slottable.props.children;
|
||
const newChildren = childrenArray.map((child)=>{
|
||
if (child === slottable) {
|
||
if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Children"].count(newElement) > 1) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Children"].only(null);
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isValidElement"](newElement) ? newElement.props.children : null;
|
||
} else {
|
||
return child;
|
||
}
|
||
});
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsx"])(SlotClone, {
|
||
...slotProps,
|
||
ref: forwardedRef,
|
||
children: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isValidElement"](newElement) ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cloneElement"](newElement, void 0, newChildren) : null
|
||
});
|
||
}
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsx"])(SlotClone, {
|
||
...slotProps,
|
||
ref: forwardedRef,
|
||
children
|
||
});
|
||
});
|
||
Slot.displayName = "Slot";
|
||
var SlotClone = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { children, ...slotProps } = props;
|
||
if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isValidElement"](children)) {
|
||
const childrenRef = getElementRef(children);
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cloneElement"](children, {
|
||
...mergeProps(slotProps, children.props),
|
||
// @ts-ignore
|
||
ref: forwardedRef ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["composeRefs"])(forwardedRef, childrenRef) : childrenRef
|
||
});
|
||
}
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Children"].count(children) > 1 ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Children"].only(null) : null;
|
||
});
|
||
SlotClone.displayName = "SlotClone";
|
||
var Slottable = ({ children })=>{
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
|
||
children
|
||
});
|
||
};
|
||
function isSlottable(child) {
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isValidElement"](child) && child.type === Slottable;
|
||
}
|
||
function mergeProps(slotProps, childProps) {
|
||
const overrideProps = {
|
||
...childProps
|
||
};
|
||
for(const propName in childProps){
|
||
const slotPropValue = slotProps[propName];
|
||
const childPropValue = childProps[propName];
|
||
const isHandler = /^on[A-Z]/.test(propName);
|
||
if (isHandler) {
|
||
if (slotPropValue && childPropValue) {
|
||
overrideProps[propName] = (...args)=>{
|
||
childPropValue(...args);
|
||
slotPropValue(...args);
|
||
};
|
||
} else if (slotPropValue) {
|
||
overrideProps[propName] = slotPropValue;
|
||
}
|
||
} else if (propName === "style") {
|
||
overrideProps[propName] = {
|
||
...slotPropValue,
|
||
...childPropValue
|
||
};
|
||
} else if (propName === "className") {
|
||
overrideProps[propName] = [
|
||
slotPropValue,
|
||
childPropValue
|
||
].filter(Boolean).join(" ");
|
||
}
|
||
}
|
||
return {
|
||
...slotProps,
|
||
...overrideProps
|
||
};
|
||
}
|
||
function getElementRef(element) {
|
||
let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
|
||
let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
||
if (mayWarn) {
|
||
return element.ref;
|
||
}
|
||
getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
|
||
mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
|
||
if (mayWarn) {
|
||
return element.props.ref;
|
||
}
|
||
return element.props.ref || element.ref;
|
||
}
|
||
var Root = Slot;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/node_modules/clsx/dist/clsx.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"clsx",
|
||
()=>clsx,
|
||
"default",
|
||
()=>__TURBOPACK__default__export__
|
||
]);
|
||
function r(e) {
|
||
var t, f, n = "";
|
||
if ("string" == typeof e || "number" == typeof e) n += e;
|
||
else if ("object" == typeof e) if (Array.isArray(e)) {
|
||
var o = e.length;
|
||
for(t = 0; t < o; t++)e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
||
} else for(f in e)e[f] && (n && (n += " "), n += f);
|
||
return n;
|
||
}
|
||
function clsx() {
|
||
for(var e, t, f = 0, n = "", o = arguments.length; f < o; f++)(e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
||
return n;
|
||
}
|
||
const __TURBOPACK__default__export__ = clsx;
|
||
}),
|
||
"[project]/node_modules/class-variance-authority/dist/index.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Copyright 2022 Joe Bell. All rights reserved.
|
||
*
|
||
* This file is licensed to you under the Apache License, Version 2.0
|
||
* (the "License"); you may not use this file except in compliance with the
|
||
* License. You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
* WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the
|
||
* License for the specific language governing permissions and limitations under
|
||
* the License.
|
||
*/ __turbopack_context__.s([
|
||
"cva",
|
||
()=>cva,
|
||
"cx",
|
||
()=>cx
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$clsx$2f$dist$2f$clsx$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/clsx/dist/clsx.mjs [app-client] (ecmascript)");
|
||
;
|
||
const falsyToString = (value)=>typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
|
||
const cx = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$clsx$2f$dist$2f$clsx$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["clsx"];
|
||
const cva = (base, config)=>(props)=>{
|
||
var _config_compoundVariants;
|
||
if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
|
||
const { variants, defaultVariants } = config;
|
||
const getVariantClassNames = Object.keys(variants).map((variant)=>{
|
||
const variantProp = props === null || props === void 0 ? void 0 : props[variant];
|
||
const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];
|
||
if (variantProp === null) return null;
|
||
const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
|
||
return variants[variant][variantKey];
|
||
});
|
||
const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{
|
||
let [key, value] = param;
|
||
if (value === undefined) {
|
||
return acc;
|
||
}
|
||
acc[key] = value;
|
||
return acc;
|
||
}, {});
|
||
const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{
|
||
let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;
|
||
return Object.entries(compoundVariantOptions).every((param)=>{
|
||
let [key, value] = param;
|
||
return Array.isArray(value) ? value.includes({
|
||
...defaultVariants,
|
||
...propsWithoutUndefined
|
||
}[key]) : ({
|
||
...defaultVariants,
|
||
...propsWithoutUndefined
|
||
})[key] === value;
|
||
}) ? [
|
||
...acc,
|
||
cvClass,
|
||
cvClassName
|
||
] : acc;
|
||
}, []);
|
||
return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
|
||
};
|
||
}),
|
||
"[project]/node_modules/tailwind-merge/dist/bundle-mjs.mjs [app-client] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"createTailwindMerge",
|
||
()=>createTailwindMerge,
|
||
"extendTailwindMerge",
|
||
()=>extendTailwindMerge,
|
||
"fromTheme",
|
||
()=>fromTheme,
|
||
"getDefaultConfig",
|
||
()=>getDefaultConfig,
|
||
"mergeConfigs",
|
||
()=>mergeConfigs,
|
||
"twJoin",
|
||
()=>twJoin,
|
||
"twMerge",
|
||
()=>twMerge,
|
||
"validators",
|
||
()=>validators
|
||
]);
|
||
const CLASS_PART_SEPARATOR = '-';
|
||
const createClassGroupUtils = (config)=>{
|
||
const classMap = createClassMap(config);
|
||
const { conflictingClassGroups, conflictingClassGroupModifiers } = config;
|
||
const getClassGroupId = (className)=>{
|
||
const classParts = className.split(CLASS_PART_SEPARATOR);
|
||
// Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.
|
||
if (classParts[0] === '' && classParts.length !== 1) {
|
||
classParts.shift();
|
||
}
|
||
return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
|
||
};
|
||
const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier)=>{
|
||
const conflicts = conflictingClassGroups[classGroupId] || [];
|
||
if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
|
||
return [
|
||
...conflicts,
|
||
...conflictingClassGroupModifiers[classGroupId]
|
||
];
|
||
}
|
||
return conflicts;
|
||
};
|
||
return {
|
||
getClassGroupId,
|
||
getConflictingClassGroupIds
|
||
};
|
||
};
|
||
const getGroupRecursive = (classParts, classPartObject)=>{
|
||
if (classParts.length === 0) {
|
||
return classPartObject.classGroupId;
|
||
}
|
||
const currentClassPart = classParts[0];
|
||
const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
|
||
const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;
|
||
if (classGroupFromNextClassPart) {
|
||
return classGroupFromNextClassPart;
|
||
}
|
||
if (classPartObject.validators.length === 0) {
|
||
return undefined;
|
||
}
|
||
const classRest = classParts.join(CLASS_PART_SEPARATOR);
|
||
return classPartObject.validators.find(({ validator })=>validator(classRest))?.classGroupId;
|
||
};
|
||
const arbitraryPropertyRegex = /^\[(.+)\]$/;
|
||
const getGroupIdForArbitraryProperty = (className)=>{
|
||
if (arbitraryPropertyRegex.test(className)) {
|
||
const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
|
||
const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));
|
||
if (property) {
|
||
// I use two dots here because one dot is used as prefix for class groups in plugins
|
||
return 'arbitrary..' + property;
|
||
}
|
||
}
|
||
};
|
||
/**
|
||
* Exported for testing only
|
||
*/ const createClassMap = (config)=>{
|
||
const { theme, prefix } = config;
|
||
const classMap = {
|
||
nextPart: new Map(),
|
||
validators: []
|
||
};
|
||
const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
|
||
prefixedClassGroupEntries.forEach(([classGroupId, classGroup])=>{
|
||
processClassesRecursively(classGroup, classMap, classGroupId, theme);
|
||
});
|
||
return classMap;
|
||
};
|
||
const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme)=>{
|
||
classGroup.forEach((classDefinition)=>{
|
||
if (typeof classDefinition === 'string') {
|
||
const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);
|
||
classPartObjectToEdit.classGroupId = classGroupId;
|
||
return;
|
||
}
|
||
if (typeof classDefinition === 'function') {
|
||
if (isThemeGetter(classDefinition)) {
|
||
processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
|
||
return;
|
||
}
|
||
classPartObject.validators.push({
|
||
validator: classDefinition,
|
||
classGroupId
|
||
});
|
||
return;
|
||
}
|
||
Object.entries(classDefinition).forEach(([key, classGroup])=>{
|
||
processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);
|
||
});
|
||
});
|
||
};
|
||
const getPart = (classPartObject, path)=>{
|
||
let currentClassPartObject = classPartObject;
|
||
path.split(CLASS_PART_SEPARATOR).forEach((pathPart)=>{
|
||
if (!currentClassPartObject.nextPart.has(pathPart)) {
|
||
currentClassPartObject.nextPart.set(pathPart, {
|
||
nextPart: new Map(),
|
||
validators: []
|
||
});
|
||
}
|
||
currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
|
||
});
|
||
return currentClassPartObject;
|
||
};
|
||
const isThemeGetter = (func)=>func.isThemeGetter;
|
||
const getPrefixedClassGroupEntries = (classGroupEntries, prefix)=>{
|
||
if (!prefix) {
|
||
return classGroupEntries;
|
||
}
|
||
return classGroupEntries.map(([classGroupId, classGroup])=>{
|
||
const prefixedClassGroup = classGroup.map((classDefinition)=>{
|
||
if (typeof classDefinition === 'string') {
|
||
return prefix + classDefinition;
|
||
}
|
||
if (typeof classDefinition === 'object') {
|
||
return Object.fromEntries(Object.entries(classDefinition).map(([key, value])=>[
|
||
prefix + key,
|
||
value
|
||
]));
|
||
}
|
||
return classDefinition;
|
||
});
|
||
return [
|
||
classGroupId,
|
||
prefixedClassGroup
|
||
];
|
||
});
|
||
};
|
||
// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance
|
||
const createLruCache = (maxCacheSize)=>{
|
||
if (maxCacheSize < 1) {
|
||
return {
|
||
get: ()=>undefined,
|
||
set: ()=>{}
|
||
};
|
||
}
|
||
let cacheSize = 0;
|
||
let cache = new Map();
|
||
let previousCache = new Map();
|
||
const update = (key, value)=>{
|
||
cache.set(key, value);
|
||
cacheSize++;
|
||
if (cacheSize > maxCacheSize) {
|
||
cacheSize = 0;
|
||
previousCache = cache;
|
||
cache = new Map();
|
||
}
|
||
};
|
||
return {
|
||
get (key) {
|
||
let value = cache.get(key);
|
||
if (value !== undefined) {
|
||
return value;
|
||
}
|
||
if ((value = previousCache.get(key)) !== undefined) {
|
||
update(key, value);
|
||
return value;
|
||
}
|
||
},
|
||
set (key, value) {
|
||
if (cache.has(key)) {
|
||
cache.set(key, value);
|
||
} else {
|
||
update(key, value);
|
||
}
|
||
}
|
||
};
|
||
};
|
||
const IMPORTANT_MODIFIER = '!';
|
||
const createParseClassName = (config)=>{
|
||
const { separator, experimentalParseClassName } = config;
|
||
const isSeparatorSingleCharacter = separator.length === 1;
|
||
const firstSeparatorCharacter = separator[0];
|
||
const separatorLength = separator.length;
|
||
// parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
|
||
const parseClassName = (className)=>{
|
||
const modifiers = [];
|
||
let bracketDepth = 0;
|
||
let modifierStart = 0;
|
||
let postfixModifierPosition;
|
||
for(let index = 0; index < className.length; index++){
|
||
let currentCharacter = className[index];
|
||
if (bracketDepth === 0) {
|
||
if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
|
||
modifiers.push(className.slice(modifierStart, index));
|
||
modifierStart = index + separatorLength;
|
||
continue;
|
||
}
|
||
if (currentCharacter === '/') {
|
||
postfixModifierPosition = index;
|
||
continue;
|
||
}
|
||
}
|
||
if (currentCharacter === '[') {
|
||
bracketDepth++;
|
||
} else if (currentCharacter === ']') {
|
||
bracketDepth--;
|
||
}
|
||
}
|
||
const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
|
||
const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
|
||
const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
|
||
const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
|
||
return {
|
||
modifiers,
|
||
hasImportantModifier,
|
||
baseClassName,
|
||
maybePostfixModifierPosition
|
||
};
|
||
};
|
||
if (experimentalParseClassName) {
|
||
return (className)=>experimentalParseClassName({
|
||
className,
|
||
parseClassName
|
||
});
|
||
}
|
||
return parseClassName;
|
||
};
|
||
/**
|
||
* Sorts modifiers according to following schema:
|
||
* - Predefined modifiers are sorted alphabetically
|
||
* - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
|
||
*/ const sortModifiers = (modifiers)=>{
|
||
if (modifiers.length <= 1) {
|
||
return modifiers;
|
||
}
|
||
const sortedModifiers = [];
|
||
let unsortedModifiers = [];
|
||
modifiers.forEach((modifier)=>{
|
||
const isArbitraryVariant = modifier[0] === '[';
|
||
if (isArbitraryVariant) {
|
||
sortedModifiers.push(...unsortedModifiers.sort(), modifier);
|
||
unsortedModifiers = [];
|
||
} else {
|
||
unsortedModifiers.push(modifier);
|
||
}
|
||
});
|
||
sortedModifiers.push(...unsortedModifiers.sort());
|
||
return sortedModifiers;
|
||
};
|
||
const createConfigUtils = (config)=>({
|
||
cache: createLruCache(config.cacheSize),
|
||
parseClassName: createParseClassName(config),
|
||
...createClassGroupUtils(config)
|
||
});
|
||
const SPLIT_CLASSES_REGEX = /\s+/;
|
||
const mergeClassList = (classList, configUtils)=>{
|
||
const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils;
|
||
/**
|
||
* Set of classGroupIds in following format:
|
||
* `{importantModifier}{variantModifiers}{classGroupId}`
|
||
* @example 'float'
|
||
* @example 'hover:focus:bg-color'
|
||
* @example 'md:!pr'
|
||
*/ const classGroupsInConflict = [];
|
||
const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
|
||
let result = '';
|
||
for(let index = classNames.length - 1; index >= 0; index -= 1){
|
||
const originalClassName = classNames[index];
|
||
const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } = parseClassName(originalClassName);
|
||
let hasPostfixModifier = Boolean(maybePostfixModifierPosition);
|
||
let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
|
||
if (!classGroupId) {
|
||
if (!hasPostfixModifier) {
|
||
// Not a Tailwind class
|
||
result = originalClassName + (result.length > 0 ? ' ' + result : result);
|
||
continue;
|
||
}
|
||
classGroupId = getClassGroupId(baseClassName);
|
||
if (!classGroupId) {
|
||
// Not a Tailwind class
|
||
result = originalClassName + (result.length > 0 ? ' ' + result : result);
|
||
continue;
|
||
}
|
||
hasPostfixModifier = false;
|
||
}
|
||
const variantModifier = sortModifiers(modifiers).join(':');
|
||
const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
|
||
const classId = modifierId + classGroupId;
|
||
if (classGroupsInConflict.includes(classId)) {
|
||
continue;
|
||
}
|
||
classGroupsInConflict.push(classId);
|
||
const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
|
||
for(let i = 0; i < conflictGroups.length; ++i){
|
||
const group = conflictGroups[i];
|
||
classGroupsInConflict.push(modifierId + group);
|
||
}
|
||
// Tailwind class not in conflict
|
||
result = originalClassName + (result.length > 0 ? ' ' + result : result);
|
||
}
|
||
return result;
|
||
};
|
||
/**
|
||
* The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
|
||
*
|
||
* Specifically:
|
||
* - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
|
||
* - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
|
||
*
|
||
* Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
|
||
*/ function twJoin() {
|
||
let index = 0;
|
||
let argument;
|
||
let resolvedValue;
|
||
let string = '';
|
||
while(index < arguments.length){
|
||
if (argument = arguments[index++]) {
|
||
if (resolvedValue = toValue(argument)) {
|
||
string && (string += ' ');
|
||
string += resolvedValue;
|
||
}
|
||
}
|
||
}
|
||
return string;
|
||
}
|
||
const toValue = (mix)=>{
|
||
if (typeof mix === 'string') {
|
||
return mix;
|
||
}
|
||
let resolvedValue;
|
||
let string = '';
|
||
for(let k = 0; k < mix.length; k++){
|
||
if (mix[k]) {
|
||
if (resolvedValue = toValue(mix[k])) {
|
||
string && (string += ' ');
|
||
string += resolvedValue;
|
||
}
|
||
}
|
||
}
|
||
return string;
|
||
};
|
||
function createTailwindMerge(createConfigFirst, ...createConfigRest) {
|
||
let configUtils;
|
||
let cacheGet;
|
||
let cacheSet;
|
||
let functionToCall = initTailwindMerge;
|
||
function initTailwindMerge(classList) {
|
||
const config = createConfigRest.reduce((previousConfig, createConfigCurrent)=>createConfigCurrent(previousConfig), createConfigFirst());
|
||
configUtils = createConfigUtils(config);
|
||
cacheGet = configUtils.cache.get;
|
||
cacheSet = configUtils.cache.set;
|
||
functionToCall = tailwindMerge;
|
||
return tailwindMerge(classList);
|
||
}
|
||
function tailwindMerge(classList) {
|
||
const cachedResult = cacheGet(classList);
|
||
if (cachedResult) {
|
||
return cachedResult;
|
||
}
|
||
const result = mergeClassList(classList, configUtils);
|
||
cacheSet(classList, result);
|
||
return result;
|
||
}
|
||
return function callTailwindMerge() {
|
||
return functionToCall(twJoin.apply(null, arguments));
|
||
};
|
||
}
|
||
const fromTheme = (key)=>{
|
||
const themeGetter = (theme)=>theme[key] || [];
|
||
themeGetter.isThemeGetter = true;
|
||
return themeGetter;
|
||
};
|
||
const arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
|
||
const fractionRegex = /^\d+\/\d+$/;
|
||
const stringLengths = /*#__PURE__*/ new Set([
|
||
'px',
|
||
'full',
|
||
'screen'
|
||
]);
|
||
const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
|
||
const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
|
||
const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
|
||
// Shadow always begins with x and y offset separated by underscore optionally prepended by inset
|
||
const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
|
||
const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
|
||
const isLength = (value)=>isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);
|
||
const isArbitraryLength = (value)=>getIsArbitraryValue(value, 'length', isLengthOnly);
|
||
const isNumber = (value)=>Boolean(value) && !Number.isNaN(Number(value));
|
||
const isArbitraryNumber = (value)=>getIsArbitraryValue(value, 'number', isNumber);
|
||
const isInteger = (value)=>Boolean(value) && Number.isInteger(Number(value));
|
||
const isPercent = (value)=>value.endsWith('%') && isNumber(value.slice(0, -1));
|
||
const isArbitraryValue = (value)=>arbitraryValueRegex.test(value);
|
||
const isTshirtSize = (value)=>tshirtUnitRegex.test(value);
|
||
const sizeLabels = /*#__PURE__*/ new Set([
|
||
'length',
|
||
'size',
|
||
'percentage'
|
||
]);
|
||
const isArbitrarySize = (value)=>getIsArbitraryValue(value, sizeLabels, isNever);
|
||
const isArbitraryPosition = (value)=>getIsArbitraryValue(value, 'position', isNever);
|
||
const imageLabels = /*#__PURE__*/ new Set([
|
||
'image',
|
||
'url'
|
||
]);
|
||
const isArbitraryImage = (value)=>getIsArbitraryValue(value, imageLabels, isImage);
|
||
const isArbitraryShadow = (value)=>getIsArbitraryValue(value, '', isShadow);
|
||
const isAny = ()=>true;
|
||
const getIsArbitraryValue = (value, label, testValue)=>{
|
||
const result = arbitraryValueRegex.exec(value);
|
||
if (result) {
|
||
if (result[1]) {
|
||
return typeof label === 'string' ? result[1] === label : label.has(result[1]);
|
||
}
|
||
return testValue(result[2]);
|
||
}
|
||
return false;
|
||
};
|
||
const isLengthOnly = (value)=>// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
|
||
// For example, `hsl(0 0% 0%)` would be classified as a length without this check.
|
||
// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
|
||
lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
|
||
const isNever = ()=>false;
|
||
const isShadow = (value)=>shadowRegex.test(value);
|
||
const isImage = (value)=>imageRegex.test(value);
|
||
const validators = /*#__PURE__*/ Object.defineProperty({
|
||
__proto__: null,
|
||
isAny,
|
||
isArbitraryImage,
|
||
isArbitraryLength,
|
||
isArbitraryNumber,
|
||
isArbitraryPosition,
|
||
isArbitraryShadow,
|
||
isArbitrarySize,
|
||
isArbitraryValue,
|
||
isInteger,
|
||
isLength,
|
||
isNumber,
|
||
isPercent,
|
||
isTshirtSize
|
||
}, Symbol.toStringTag, {
|
||
value: 'Module'
|
||
});
|
||
const getDefaultConfig = ()=>{
|
||
const colors = fromTheme('colors');
|
||
const spacing = fromTheme('spacing');
|
||
const blur = fromTheme('blur');
|
||
const brightness = fromTheme('brightness');
|
||
const borderColor = fromTheme('borderColor');
|
||
const borderRadius = fromTheme('borderRadius');
|
||
const borderSpacing = fromTheme('borderSpacing');
|
||
const borderWidth = fromTheme('borderWidth');
|
||
const contrast = fromTheme('contrast');
|
||
const grayscale = fromTheme('grayscale');
|
||
const hueRotate = fromTheme('hueRotate');
|
||
const invert = fromTheme('invert');
|
||
const gap = fromTheme('gap');
|
||
const gradientColorStops = fromTheme('gradientColorStops');
|
||
const gradientColorStopPositions = fromTheme('gradientColorStopPositions');
|
||
const inset = fromTheme('inset');
|
||
const margin = fromTheme('margin');
|
||
const opacity = fromTheme('opacity');
|
||
const padding = fromTheme('padding');
|
||
const saturate = fromTheme('saturate');
|
||
const scale = fromTheme('scale');
|
||
const sepia = fromTheme('sepia');
|
||
const skew = fromTheme('skew');
|
||
const space = fromTheme('space');
|
||
const translate = fromTheme('translate');
|
||
const getOverscroll = ()=>[
|
||
'auto',
|
||
'contain',
|
||
'none'
|
||
];
|
||
const getOverflow = ()=>[
|
||
'auto',
|
||
'hidden',
|
||
'clip',
|
||
'visible',
|
||
'scroll'
|
||
];
|
||
const getSpacingWithAutoAndArbitrary = ()=>[
|
||
'auto',
|
||
isArbitraryValue,
|
||
spacing
|
||
];
|
||
const getSpacingWithArbitrary = ()=>[
|
||
isArbitraryValue,
|
||
spacing
|
||
];
|
||
const getLengthWithEmptyAndArbitrary = ()=>[
|
||
'',
|
||
isLength,
|
||
isArbitraryLength
|
||
];
|
||
const getNumberWithAutoAndArbitrary = ()=>[
|
||
'auto',
|
||
isNumber,
|
||
isArbitraryValue
|
||
];
|
||
const getPositions = ()=>[
|
||
'bottom',
|
||
'center',
|
||
'left',
|
||
'left-bottom',
|
||
'left-top',
|
||
'right',
|
||
'right-bottom',
|
||
'right-top',
|
||
'top'
|
||
];
|
||
const getLineStyles = ()=>[
|
||
'solid',
|
||
'dashed',
|
||
'dotted',
|
||
'double',
|
||
'none'
|
||
];
|
||
const getBlendModes = ()=>[
|
||
'normal',
|
||
'multiply',
|
||
'screen',
|
||
'overlay',
|
||
'darken',
|
||
'lighten',
|
||
'color-dodge',
|
||
'color-burn',
|
||
'hard-light',
|
||
'soft-light',
|
||
'difference',
|
||
'exclusion',
|
||
'hue',
|
||
'saturation',
|
||
'color',
|
||
'luminosity'
|
||
];
|
||
const getAlign = ()=>[
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'between',
|
||
'around',
|
||
'evenly',
|
||
'stretch'
|
||
];
|
||
const getZeroAndEmpty = ()=>[
|
||
'',
|
||
'0',
|
||
isArbitraryValue
|
||
];
|
||
const getBreaks = ()=>[
|
||
'auto',
|
||
'avoid',
|
||
'all',
|
||
'avoid-page',
|
||
'page',
|
||
'left',
|
||
'right',
|
||
'column'
|
||
];
|
||
const getNumberAndArbitrary = ()=>[
|
||
isNumber,
|
||
isArbitraryValue
|
||
];
|
||
return {
|
||
cacheSize: 500,
|
||
separator: ':',
|
||
theme: {
|
||
colors: [
|
||
isAny
|
||
],
|
||
spacing: [
|
||
isLength,
|
||
isArbitraryLength
|
||
],
|
||
blur: [
|
||
'none',
|
||
'',
|
||
isTshirtSize,
|
||
isArbitraryValue
|
||
],
|
||
brightness: getNumberAndArbitrary(),
|
||
borderColor: [
|
||
colors
|
||
],
|
||
borderRadius: [
|
||
'none',
|
||
'',
|
||
'full',
|
||
isTshirtSize,
|
||
isArbitraryValue
|
||
],
|
||
borderSpacing: getSpacingWithArbitrary(),
|
||
borderWidth: getLengthWithEmptyAndArbitrary(),
|
||
contrast: getNumberAndArbitrary(),
|
||
grayscale: getZeroAndEmpty(),
|
||
hueRotate: getNumberAndArbitrary(),
|
||
invert: getZeroAndEmpty(),
|
||
gap: getSpacingWithArbitrary(),
|
||
gradientColorStops: [
|
||
colors
|
||
],
|
||
gradientColorStopPositions: [
|
||
isPercent,
|
||
isArbitraryLength
|
||
],
|
||
inset: getSpacingWithAutoAndArbitrary(),
|
||
margin: getSpacingWithAutoAndArbitrary(),
|
||
opacity: getNumberAndArbitrary(),
|
||
padding: getSpacingWithArbitrary(),
|
||
saturate: getNumberAndArbitrary(),
|
||
scale: getNumberAndArbitrary(),
|
||
sepia: getZeroAndEmpty(),
|
||
skew: getNumberAndArbitrary(),
|
||
space: getSpacingWithArbitrary(),
|
||
translate: getSpacingWithArbitrary()
|
||
},
|
||
classGroups: {
|
||
// Layout
|
||
/**
|
||
* Aspect Ratio
|
||
* @see https://tailwindcss.com/docs/aspect-ratio
|
||
*/ aspect: [
|
||
{
|
||
aspect: [
|
||
'auto',
|
||
'square',
|
||
'video',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Container
|
||
* @see https://tailwindcss.com/docs/container
|
||
*/ container: [
|
||
'container'
|
||
],
|
||
/**
|
||
* Columns
|
||
* @see https://tailwindcss.com/docs/columns
|
||
*/ columns: [
|
||
{
|
||
columns: [
|
||
isTshirtSize
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Break After
|
||
* @see https://tailwindcss.com/docs/break-after
|
||
*/ 'break-after': [
|
||
{
|
||
'break-after': getBreaks()
|
||
}
|
||
],
|
||
/**
|
||
* Break Before
|
||
* @see https://tailwindcss.com/docs/break-before
|
||
*/ 'break-before': [
|
||
{
|
||
'break-before': getBreaks()
|
||
}
|
||
],
|
||
/**
|
||
* Break Inside
|
||
* @see https://tailwindcss.com/docs/break-inside
|
||
*/ 'break-inside': [
|
||
{
|
||
'break-inside': [
|
||
'auto',
|
||
'avoid',
|
||
'avoid-page',
|
||
'avoid-column'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Box Decoration Break
|
||
* @see https://tailwindcss.com/docs/box-decoration-break
|
||
*/ 'box-decoration': [
|
||
{
|
||
'box-decoration': [
|
||
'slice',
|
||
'clone'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Box Sizing
|
||
* @see https://tailwindcss.com/docs/box-sizing
|
||
*/ box: [
|
||
{
|
||
box: [
|
||
'border',
|
||
'content'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Display
|
||
* @see https://tailwindcss.com/docs/display
|
||
*/ display: [
|
||
'block',
|
||
'inline-block',
|
||
'inline',
|
||
'flex',
|
||
'inline-flex',
|
||
'table',
|
||
'inline-table',
|
||
'table-caption',
|
||
'table-cell',
|
||
'table-column',
|
||
'table-column-group',
|
||
'table-footer-group',
|
||
'table-header-group',
|
||
'table-row-group',
|
||
'table-row',
|
||
'flow-root',
|
||
'grid',
|
||
'inline-grid',
|
||
'contents',
|
||
'list-item',
|
||
'hidden'
|
||
],
|
||
/**
|
||
* Floats
|
||
* @see https://tailwindcss.com/docs/float
|
||
*/ float: [
|
||
{
|
||
float: [
|
||
'right',
|
||
'left',
|
||
'none',
|
||
'start',
|
||
'end'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Clear
|
||
* @see https://tailwindcss.com/docs/clear
|
||
*/ clear: [
|
||
{
|
||
clear: [
|
||
'left',
|
||
'right',
|
||
'both',
|
||
'none',
|
||
'start',
|
||
'end'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Isolation
|
||
* @see https://tailwindcss.com/docs/isolation
|
||
*/ isolation: [
|
||
'isolate',
|
||
'isolation-auto'
|
||
],
|
||
/**
|
||
* Object Fit
|
||
* @see https://tailwindcss.com/docs/object-fit
|
||
*/ 'object-fit': [
|
||
{
|
||
object: [
|
||
'contain',
|
||
'cover',
|
||
'fill',
|
||
'none',
|
||
'scale-down'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Object Position
|
||
* @see https://tailwindcss.com/docs/object-position
|
||
*/ 'object-position': [
|
||
{
|
||
object: [
|
||
...getPositions(),
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Overflow
|
||
* @see https://tailwindcss.com/docs/overflow
|
||
*/ overflow: [
|
||
{
|
||
overflow: getOverflow()
|
||
}
|
||
],
|
||
/**
|
||
* Overflow X
|
||
* @see https://tailwindcss.com/docs/overflow
|
||
*/ 'overflow-x': [
|
||
{
|
||
'overflow-x': getOverflow()
|
||
}
|
||
],
|
||
/**
|
||
* Overflow Y
|
||
* @see https://tailwindcss.com/docs/overflow
|
||
*/ 'overflow-y': [
|
||
{
|
||
'overflow-y': getOverflow()
|
||
}
|
||
],
|
||
/**
|
||
* Overscroll Behavior
|
||
* @see https://tailwindcss.com/docs/overscroll-behavior
|
||
*/ overscroll: [
|
||
{
|
||
overscroll: getOverscroll()
|
||
}
|
||
],
|
||
/**
|
||
* Overscroll Behavior X
|
||
* @see https://tailwindcss.com/docs/overscroll-behavior
|
||
*/ 'overscroll-x': [
|
||
{
|
||
'overscroll-x': getOverscroll()
|
||
}
|
||
],
|
||
/**
|
||
* Overscroll Behavior Y
|
||
* @see https://tailwindcss.com/docs/overscroll-behavior
|
||
*/ 'overscroll-y': [
|
||
{
|
||
'overscroll-y': getOverscroll()
|
||
}
|
||
],
|
||
/**
|
||
* Position
|
||
* @see https://tailwindcss.com/docs/position
|
||
*/ position: [
|
||
'static',
|
||
'fixed',
|
||
'absolute',
|
||
'relative',
|
||
'sticky'
|
||
],
|
||
/**
|
||
* Top / Right / Bottom / Left
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ inset: [
|
||
{
|
||
inset: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Right / Left
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ 'inset-x': [
|
||
{
|
||
'inset-x': [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Top / Bottom
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ 'inset-y': [
|
||
{
|
||
'inset-y': [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Start
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ start: [
|
||
{
|
||
start: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* End
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ end: [
|
||
{
|
||
end: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Top
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ top: [
|
||
{
|
||
top: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Right
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ right: [
|
||
{
|
||
right: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Bottom
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ bottom: [
|
||
{
|
||
bottom: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Left
|
||
* @see https://tailwindcss.com/docs/top-right-bottom-left
|
||
*/ left: [
|
||
{
|
||
left: [
|
||
inset
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Visibility
|
||
* @see https://tailwindcss.com/docs/visibility
|
||
*/ visibility: [
|
||
'visible',
|
||
'invisible',
|
||
'collapse'
|
||
],
|
||
/**
|
||
* Z-Index
|
||
* @see https://tailwindcss.com/docs/z-index
|
||
*/ z: [
|
||
{
|
||
z: [
|
||
'auto',
|
||
isInteger,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
// Flexbox and Grid
|
||
/**
|
||
* Flex Basis
|
||
* @see https://tailwindcss.com/docs/flex-basis
|
||
*/ basis: [
|
||
{
|
||
basis: getSpacingWithAutoAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Flex Direction
|
||
* @see https://tailwindcss.com/docs/flex-direction
|
||
*/ 'flex-direction': [
|
||
{
|
||
flex: [
|
||
'row',
|
||
'row-reverse',
|
||
'col',
|
||
'col-reverse'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Flex Wrap
|
||
* @see https://tailwindcss.com/docs/flex-wrap
|
||
*/ 'flex-wrap': [
|
||
{
|
||
flex: [
|
||
'wrap',
|
||
'wrap-reverse',
|
||
'nowrap'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Flex
|
||
* @see https://tailwindcss.com/docs/flex
|
||
*/ flex: [
|
||
{
|
||
flex: [
|
||
'1',
|
||
'auto',
|
||
'initial',
|
||
'none',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Flex Grow
|
||
* @see https://tailwindcss.com/docs/flex-grow
|
||
*/ grow: [
|
||
{
|
||
grow: getZeroAndEmpty()
|
||
}
|
||
],
|
||
/**
|
||
* Flex Shrink
|
||
* @see https://tailwindcss.com/docs/flex-shrink
|
||
*/ shrink: [
|
||
{
|
||
shrink: getZeroAndEmpty()
|
||
}
|
||
],
|
||
/**
|
||
* Order
|
||
* @see https://tailwindcss.com/docs/order
|
||
*/ order: [
|
||
{
|
||
order: [
|
||
'first',
|
||
'last',
|
||
'none',
|
||
isInteger,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Template Columns
|
||
* @see https://tailwindcss.com/docs/grid-template-columns
|
||
*/ 'grid-cols': [
|
||
{
|
||
'grid-cols': [
|
||
isAny
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Column Start / End
|
||
* @see https://tailwindcss.com/docs/grid-column
|
||
*/ 'col-start-end': [
|
||
{
|
||
col: [
|
||
'auto',
|
||
{
|
||
span: [
|
||
'full',
|
||
isInteger,
|
||
isArbitraryValue
|
||
]
|
||
},
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Column Start
|
||
* @see https://tailwindcss.com/docs/grid-column
|
||
*/ 'col-start': [
|
||
{
|
||
'col-start': getNumberWithAutoAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Grid Column End
|
||
* @see https://tailwindcss.com/docs/grid-column
|
||
*/ 'col-end': [
|
||
{
|
||
'col-end': getNumberWithAutoAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Grid Template Rows
|
||
* @see https://tailwindcss.com/docs/grid-template-rows
|
||
*/ 'grid-rows': [
|
||
{
|
||
'grid-rows': [
|
||
isAny
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Row Start / End
|
||
* @see https://tailwindcss.com/docs/grid-row
|
||
*/ 'row-start-end': [
|
||
{
|
||
row: [
|
||
'auto',
|
||
{
|
||
span: [
|
||
isInteger,
|
||
isArbitraryValue
|
||
]
|
||
},
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Row Start
|
||
* @see https://tailwindcss.com/docs/grid-row
|
||
*/ 'row-start': [
|
||
{
|
||
'row-start': getNumberWithAutoAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Grid Row End
|
||
* @see https://tailwindcss.com/docs/grid-row
|
||
*/ 'row-end': [
|
||
{
|
||
'row-end': getNumberWithAutoAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Grid Auto Flow
|
||
* @see https://tailwindcss.com/docs/grid-auto-flow
|
||
*/ 'grid-flow': [
|
||
{
|
||
'grid-flow': [
|
||
'row',
|
||
'col',
|
||
'dense',
|
||
'row-dense',
|
||
'col-dense'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Auto Columns
|
||
* @see https://tailwindcss.com/docs/grid-auto-columns
|
||
*/ 'auto-cols': [
|
||
{
|
||
'auto-cols': [
|
||
'auto',
|
||
'min',
|
||
'max',
|
||
'fr',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grid Auto Rows
|
||
* @see https://tailwindcss.com/docs/grid-auto-rows
|
||
*/ 'auto-rows': [
|
||
{
|
||
'auto-rows': [
|
||
'auto',
|
||
'min',
|
||
'max',
|
||
'fr',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gap
|
||
* @see https://tailwindcss.com/docs/gap
|
||
*/ gap: [
|
||
{
|
||
gap: [
|
||
gap
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gap X
|
||
* @see https://tailwindcss.com/docs/gap
|
||
*/ 'gap-x': [
|
||
{
|
||
'gap-x': [
|
||
gap
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gap Y
|
||
* @see https://tailwindcss.com/docs/gap
|
||
*/ 'gap-y': [
|
||
{
|
||
'gap-y': [
|
||
gap
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Justify Content
|
||
* @see https://tailwindcss.com/docs/justify-content
|
||
*/ 'justify-content': [
|
||
{
|
||
justify: [
|
||
'normal',
|
||
...getAlign()
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Justify Items
|
||
* @see https://tailwindcss.com/docs/justify-items
|
||
*/ 'justify-items': [
|
||
{
|
||
'justify-items': [
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'stretch'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Justify Self
|
||
* @see https://tailwindcss.com/docs/justify-self
|
||
*/ 'justify-self': [
|
||
{
|
||
'justify-self': [
|
||
'auto',
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'stretch'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Align Content
|
||
* @see https://tailwindcss.com/docs/align-content
|
||
*/ 'align-content': [
|
||
{
|
||
content: [
|
||
'normal',
|
||
...getAlign(),
|
||
'baseline'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Align Items
|
||
* @see https://tailwindcss.com/docs/align-items
|
||
*/ 'align-items': [
|
||
{
|
||
items: [
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'baseline',
|
||
'stretch'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Align Self
|
||
* @see https://tailwindcss.com/docs/align-self
|
||
*/ 'align-self': [
|
||
{
|
||
self: [
|
||
'auto',
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'stretch',
|
||
'baseline'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Place Content
|
||
* @see https://tailwindcss.com/docs/place-content
|
||
*/ 'place-content': [
|
||
{
|
||
'place-content': [
|
||
...getAlign(),
|
||
'baseline'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Place Items
|
||
* @see https://tailwindcss.com/docs/place-items
|
||
*/ 'place-items': [
|
||
{
|
||
'place-items': [
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'baseline',
|
||
'stretch'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Place Self
|
||
* @see https://tailwindcss.com/docs/place-self
|
||
*/ 'place-self': [
|
||
{
|
||
'place-self': [
|
||
'auto',
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'stretch'
|
||
]
|
||
}
|
||
],
|
||
// Spacing
|
||
/**
|
||
* Padding
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ p: [
|
||
{
|
||
p: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding X
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ px: [
|
||
{
|
||
px: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding Y
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ py: [
|
||
{
|
||
py: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding Start
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ ps: [
|
||
{
|
||
ps: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding End
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ pe: [
|
||
{
|
||
pe: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding Top
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ pt: [
|
||
{
|
||
pt: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding Right
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ pr: [
|
||
{
|
||
pr: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding Bottom
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ pb: [
|
||
{
|
||
pb: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Padding Left
|
||
* @see https://tailwindcss.com/docs/padding
|
||
*/ pl: [
|
||
{
|
||
pl: [
|
||
padding
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ m: [
|
||
{
|
||
m: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin X
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ mx: [
|
||
{
|
||
mx: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin Y
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ my: [
|
||
{
|
||
my: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin Start
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ ms: [
|
||
{
|
||
ms: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin End
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ me: [
|
||
{
|
||
me: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin Top
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ mt: [
|
||
{
|
||
mt: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin Right
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ mr: [
|
||
{
|
||
mr: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin Bottom
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ mb: [
|
||
{
|
||
mb: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Margin Left
|
||
* @see https://tailwindcss.com/docs/margin
|
||
*/ ml: [
|
||
{
|
||
ml: [
|
||
margin
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Space Between X
|
||
* @see https://tailwindcss.com/docs/space
|
||
*/ 'space-x': [
|
||
{
|
||
'space-x': [
|
||
space
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Space Between X Reverse
|
||
* @see https://tailwindcss.com/docs/space
|
||
*/ 'space-x-reverse': [
|
||
'space-x-reverse'
|
||
],
|
||
/**
|
||
* Space Between Y
|
||
* @see https://tailwindcss.com/docs/space
|
||
*/ 'space-y': [
|
||
{
|
||
'space-y': [
|
||
space
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Space Between Y Reverse
|
||
* @see https://tailwindcss.com/docs/space
|
||
*/ 'space-y-reverse': [
|
||
'space-y-reverse'
|
||
],
|
||
// Sizing
|
||
/**
|
||
* Width
|
||
* @see https://tailwindcss.com/docs/width
|
||
*/ w: [
|
||
{
|
||
w: [
|
||
'auto',
|
||
'min',
|
||
'max',
|
||
'fit',
|
||
'svw',
|
||
'lvw',
|
||
'dvw',
|
||
isArbitraryValue,
|
||
spacing
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Min-Width
|
||
* @see https://tailwindcss.com/docs/min-width
|
||
*/ 'min-w': [
|
||
{
|
||
'min-w': [
|
||
isArbitraryValue,
|
||
spacing,
|
||
'min',
|
||
'max',
|
||
'fit'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Max-Width
|
||
* @see https://tailwindcss.com/docs/max-width
|
||
*/ 'max-w': [
|
||
{
|
||
'max-w': [
|
||
isArbitraryValue,
|
||
spacing,
|
||
'none',
|
||
'full',
|
||
'min',
|
||
'max',
|
||
'fit',
|
||
'prose',
|
||
{
|
||
screen: [
|
||
isTshirtSize
|
||
]
|
||
},
|
||
isTshirtSize
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Height
|
||
* @see https://tailwindcss.com/docs/height
|
||
*/ h: [
|
||
{
|
||
h: [
|
||
isArbitraryValue,
|
||
spacing,
|
||
'auto',
|
||
'min',
|
||
'max',
|
||
'fit',
|
||
'svh',
|
||
'lvh',
|
||
'dvh'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Min-Height
|
||
* @see https://tailwindcss.com/docs/min-height
|
||
*/ 'min-h': [
|
||
{
|
||
'min-h': [
|
||
isArbitraryValue,
|
||
spacing,
|
||
'min',
|
||
'max',
|
||
'fit',
|
||
'svh',
|
||
'lvh',
|
||
'dvh'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Max-Height
|
||
* @see https://tailwindcss.com/docs/max-height
|
||
*/ 'max-h': [
|
||
{
|
||
'max-h': [
|
||
isArbitraryValue,
|
||
spacing,
|
||
'min',
|
||
'max',
|
||
'fit',
|
||
'svh',
|
||
'lvh',
|
||
'dvh'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Size
|
||
* @see https://tailwindcss.com/docs/size
|
||
*/ size: [
|
||
{
|
||
size: [
|
||
isArbitraryValue,
|
||
spacing,
|
||
'auto',
|
||
'min',
|
||
'max',
|
||
'fit'
|
||
]
|
||
}
|
||
],
|
||
// Typography
|
||
/**
|
||
* Font Size
|
||
* @see https://tailwindcss.com/docs/font-size
|
||
*/ 'font-size': [
|
||
{
|
||
text: [
|
||
'base',
|
||
isTshirtSize,
|
||
isArbitraryLength
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Font Smoothing
|
||
* @see https://tailwindcss.com/docs/font-smoothing
|
||
*/ 'font-smoothing': [
|
||
'antialiased',
|
||
'subpixel-antialiased'
|
||
],
|
||
/**
|
||
* Font Style
|
||
* @see https://tailwindcss.com/docs/font-style
|
||
*/ 'font-style': [
|
||
'italic',
|
||
'not-italic'
|
||
],
|
||
/**
|
||
* Font Weight
|
||
* @see https://tailwindcss.com/docs/font-weight
|
||
*/ 'font-weight': [
|
||
{
|
||
font: [
|
||
'thin',
|
||
'extralight',
|
||
'light',
|
||
'normal',
|
||
'medium',
|
||
'semibold',
|
||
'bold',
|
||
'extrabold',
|
||
'black',
|
||
isArbitraryNumber
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Font Family
|
||
* @see https://tailwindcss.com/docs/font-family
|
||
*/ 'font-family': [
|
||
{
|
||
font: [
|
||
isAny
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Font Variant Numeric
|
||
* @see https://tailwindcss.com/docs/font-variant-numeric
|
||
*/ 'fvn-normal': [
|
||
'normal-nums'
|
||
],
|
||
/**
|
||
* Font Variant Numeric
|
||
* @see https://tailwindcss.com/docs/font-variant-numeric
|
||
*/ 'fvn-ordinal': [
|
||
'ordinal'
|
||
],
|
||
/**
|
||
* Font Variant Numeric
|
||
* @see https://tailwindcss.com/docs/font-variant-numeric
|
||
*/ 'fvn-slashed-zero': [
|
||
'slashed-zero'
|
||
],
|
||
/**
|
||
* Font Variant Numeric
|
||
* @see https://tailwindcss.com/docs/font-variant-numeric
|
||
*/ 'fvn-figure': [
|
||
'lining-nums',
|
||
'oldstyle-nums'
|
||
],
|
||
/**
|
||
* Font Variant Numeric
|
||
* @see https://tailwindcss.com/docs/font-variant-numeric
|
||
*/ 'fvn-spacing': [
|
||
'proportional-nums',
|
||
'tabular-nums'
|
||
],
|
||
/**
|
||
* Font Variant Numeric
|
||
* @see https://tailwindcss.com/docs/font-variant-numeric
|
||
*/ 'fvn-fraction': [
|
||
'diagonal-fractions',
|
||
'stacked-fractions'
|
||
],
|
||
/**
|
||
* Letter Spacing
|
||
* @see https://tailwindcss.com/docs/letter-spacing
|
||
*/ tracking: [
|
||
{
|
||
tracking: [
|
||
'tighter',
|
||
'tight',
|
||
'normal',
|
||
'wide',
|
||
'wider',
|
||
'widest',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Line Clamp
|
||
* @see https://tailwindcss.com/docs/line-clamp
|
||
*/ 'line-clamp': [
|
||
{
|
||
'line-clamp': [
|
||
'none',
|
||
isNumber,
|
||
isArbitraryNumber
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Line Height
|
||
* @see https://tailwindcss.com/docs/line-height
|
||
*/ leading: [
|
||
{
|
||
leading: [
|
||
'none',
|
||
'tight',
|
||
'snug',
|
||
'normal',
|
||
'relaxed',
|
||
'loose',
|
||
isLength,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* List Style Image
|
||
* @see https://tailwindcss.com/docs/list-style-image
|
||
*/ 'list-image': [
|
||
{
|
||
'list-image': [
|
||
'none',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* List Style Type
|
||
* @see https://tailwindcss.com/docs/list-style-type
|
||
*/ 'list-style-type': [
|
||
{
|
||
list: [
|
||
'none',
|
||
'disc',
|
||
'decimal',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* List Style Position
|
||
* @see https://tailwindcss.com/docs/list-style-position
|
||
*/ 'list-style-position': [
|
||
{
|
||
list: [
|
||
'inside',
|
||
'outside'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Placeholder Color
|
||
* @deprecated since Tailwind CSS v3.0.0
|
||
* @see https://tailwindcss.com/docs/placeholder-color
|
||
*/ 'placeholder-color': [
|
||
{
|
||
placeholder: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Placeholder Opacity
|
||
* @see https://tailwindcss.com/docs/placeholder-opacity
|
||
*/ 'placeholder-opacity': [
|
||
{
|
||
'placeholder-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Alignment
|
||
* @see https://tailwindcss.com/docs/text-align
|
||
*/ 'text-alignment': [
|
||
{
|
||
text: [
|
||
'left',
|
||
'center',
|
||
'right',
|
||
'justify',
|
||
'start',
|
||
'end'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Color
|
||
* @see https://tailwindcss.com/docs/text-color
|
||
*/ 'text-color': [
|
||
{
|
||
text: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Opacity
|
||
* @see https://tailwindcss.com/docs/text-opacity
|
||
*/ 'text-opacity': [
|
||
{
|
||
'text-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Decoration
|
||
* @see https://tailwindcss.com/docs/text-decoration
|
||
*/ 'text-decoration': [
|
||
'underline',
|
||
'overline',
|
||
'line-through',
|
||
'no-underline'
|
||
],
|
||
/**
|
||
* Text Decoration Style
|
||
* @see https://tailwindcss.com/docs/text-decoration-style
|
||
*/ 'text-decoration-style': [
|
||
{
|
||
decoration: [
|
||
...getLineStyles(),
|
||
'wavy'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Decoration Thickness
|
||
* @see https://tailwindcss.com/docs/text-decoration-thickness
|
||
*/ 'text-decoration-thickness': [
|
||
{
|
||
decoration: [
|
||
'auto',
|
||
'from-font',
|
||
isLength,
|
||
isArbitraryLength
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Underline Offset
|
||
* @see https://tailwindcss.com/docs/text-underline-offset
|
||
*/ 'underline-offset': [
|
||
{
|
||
'underline-offset': [
|
||
'auto',
|
||
isLength,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Decoration Color
|
||
* @see https://tailwindcss.com/docs/text-decoration-color
|
||
*/ 'text-decoration-color': [
|
||
{
|
||
decoration: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Transform
|
||
* @see https://tailwindcss.com/docs/text-transform
|
||
*/ 'text-transform': [
|
||
'uppercase',
|
||
'lowercase',
|
||
'capitalize',
|
||
'normal-case'
|
||
],
|
||
/**
|
||
* Text Overflow
|
||
* @see https://tailwindcss.com/docs/text-overflow
|
||
*/ 'text-overflow': [
|
||
'truncate',
|
||
'text-ellipsis',
|
||
'text-clip'
|
||
],
|
||
/**
|
||
* Text Wrap
|
||
* @see https://tailwindcss.com/docs/text-wrap
|
||
*/ 'text-wrap': [
|
||
{
|
||
text: [
|
||
'wrap',
|
||
'nowrap',
|
||
'balance',
|
||
'pretty'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Text Indent
|
||
* @see https://tailwindcss.com/docs/text-indent
|
||
*/ indent: [
|
||
{
|
||
indent: getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Vertical Alignment
|
||
* @see https://tailwindcss.com/docs/vertical-align
|
||
*/ 'vertical-align': [
|
||
{
|
||
align: [
|
||
'baseline',
|
||
'top',
|
||
'middle',
|
||
'bottom',
|
||
'text-top',
|
||
'text-bottom',
|
||
'sub',
|
||
'super',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Whitespace
|
||
* @see https://tailwindcss.com/docs/whitespace
|
||
*/ whitespace: [
|
||
{
|
||
whitespace: [
|
||
'normal',
|
||
'nowrap',
|
||
'pre',
|
||
'pre-line',
|
||
'pre-wrap',
|
||
'break-spaces'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Word Break
|
||
* @see https://tailwindcss.com/docs/word-break
|
||
*/ break: [
|
||
{
|
||
break: [
|
||
'normal',
|
||
'words',
|
||
'all',
|
||
'keep'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Hyphens
|
||
* @see https://tailwindcss.com/docs/hyphens
|
||
*/ hyphens: [
|
||
{
|
||
hyphens: [
|
||
'none',
|
||
'manual',
|
||
'auto'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Content
|
||
* @see https://tailwindcss.com/docs/content
|
||
*/ content: [
|
||
{
|
||
content: [
|
||
'none',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
// Backgrounds
|
||
/**
|
||
* Background Attachment
|
||
* @see https://tailwindcss.com/docs/background-attachment
|
||
*/ 'bg-attachment': [
|
||
{
|
||
bg: [
|
||
'fixed',
|
||
'local',
|
||
'scroll'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Clip
|
||
* @see https://tailwindcss.com/docs/background-clip
|
||
*/ 'bg-clip': [
|
||
{
|
||
'bg-clip': [
|
||
'border',
|
||
'padding',
|
||
'content',
|
||
'text'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Opacity
|
||
* @deprecated since Tailwind CSS v3.0.0
|
||
* @see https://tailwindcss.com/docs/background-opacity
|
||
*/ 'bg-opacity': [
|
||
{
|
||
'bg-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Origin
|
||
* @see https://tailwindcss.com/docs/background-origin
|
||
*/ 'bg-origin': [
|
||
{
|
||
'bg-origin': [
|
||
'border',
|
||
'padding',
|
||
'content'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Position
|
||
* @see https://tailwindcss.com/docs/background-position
|
||
*/ 'bg-position': [
|
||
{
|
||
bg: [
|
||
...getPositions(),
|
||
isArbitraryPosition
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Repeat
|
||
* @see https://tailwindcss.com/docs/background-repeat
|
||
*/ 'bg-repeat': [
|
||
{
|
||
bg: [
|
||
'no-repeat',
|
||
{
|
||
repeat: [
|
||
'',
|
||
'x',
|
||
'y',
|
||
'round',
|
||
'space'
|
||
]
|
||
}
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Size
|
||
* @see https://tailwindcss.com/docs/background-size
|
||
*/ 'bg-size': [
|
||
{
|
||
bg: [
|
||
'auto',
|
||
'cover',
|
||
'contain',
|
||
isArbitrarySize
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Image
|
||
* @see https://tailwindcss.com/docs/background-image
|
||
*/ 'bg-image': [
|
||
{
|
||
bg: [
|
||
'none',
|
||
{
|
||
'gradient-to': [
|
||
't',
|
||
'tr',
|
||
'r',
|
||
'br',
|
||
'b',
|
||
'bl',
|
||
'l',
|
||
'tl'
|
||
]
|
||
},
|
||
isArbitraryImage
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Color
|
||
* @see https://tailwindcss.com/docs/background-color
|
||
*/ 'bg-color': [
|
||
{
|
||
bg: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gradient Color Stops From Position
|
||
* @see https://tailwindcss.com/docs/gradient-color-stops
|
||
*/ 'gradient-from-pos': [
|
||
{
|
||
from: [
|
||
gradientColorStopPositions
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gradient Color Stops Via Position
|
||
* @see https://tailwindcss.com/docs/gradient-color-stops
|
||
*/ 'gradient-via-pos': [
|
||
{
|
||
via: [
|
||
gradientColorStopPositions
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gradient Color Stops To Position
|
||
* @see https://tailwindcss.com/docs/gradient-color-stops
|
||
*/ 'gradient-to-pos': [
|
||
{
|
||
to: [
|
||
gradientColorStopPositions
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gradient Color Stops From
|
||
* @see https://tailwindcss.com/docs/gradient-color-stops
|
||
*/ 'gradient-from': [
|
||
{
|
||
from: [
|
||
gradientColorStops
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gradient Color Stops Via
|
||
* @see https://tailwindcss.com/docs/gradient-color-stops
|
||
*/ 'gradient-via': [
|
||
{
|
||
via: [
|
||
gradientColorStops
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Gradient Color Stops To
|
||
* @see https://tailwindcss.com/docs/gradient-color-stops
|
||
*/ 'gradient-to': [
|
||
{
|
||
to: [
|
||
gradientColorStops
|
||
]
|
||
}
|
||
],
|
||
// Borders
|
||
/**
|
||
* Border Radius
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ rounded: [
|
||
{
|
||
rounded: [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Start
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-s': [
|
||
{
|
||
'rounded-s': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius End
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-e': [
|
||
{
|
||
'rounded-e': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Top
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-t': [
|
||
{
|
||
'rounded-t': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Right
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-r': [
|
||
{
|
||
'rounded-r': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Bottom
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-b': [
|
||
{
|
||
'rounded-b': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Left
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-l': [
|
||
{
|
||
'rounded-l': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Start Start
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-ss': [
|
||
{
|
||
'rounded-ss': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Start End
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-se': [
|
||
{
|
||
'rounded-se': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius End End
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-ee': [
|
||
{
|
||
'rounded-ee': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius End Start
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-es': [
|
||
{
|
||
'rounded-es': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Top Left
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-tl': [
|
||
{
|
||
'rounded-tl': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Top Right
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-tr': [
|
||
{
|
||
'rounded-tr': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Bottom Right
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-br': [
|
||
{
|
||
'rounded-br': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Radius Bottom Left
|
||
* @see https://tailwindcss.com/docs/border-radius
|
||
*/ 'rounded-bl': [
|
||
{
|
||
'rounded-bl': [
|
||
borderRadius
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w': [
|
||
{
|
||
border: [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width X
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-x': [
|
||
{
|
||
'border-x': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width Y
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-y': [
|
||
{
|
||
'border-y': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width Start
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-s': [
|
||
{
|
||
'border-s': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width End
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-e': [
|
||
{
|
||
'border-e': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width Top
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-t': [
|
||
{
|
||
'border-t': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width Right
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-r': [
|
||
{
|
||
'border-r': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width Bottom
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-b': [
|
||
{
|
||
'border-b': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Width Left
|
||
* @see https://tailwindcss.com/docs/border-width
|
||
*/ 'border-w-l': [
|
||
{
|
||
'border-l': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Opacity
|
||
* @see https://tailwindcss.com/docs/border-opacity
|
||
*/ 'border-opacity': [
|
||
{
|
||
'border-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Style
|
||
* @see https://tailwindcss.com/docs/border-style
|
||
*/ 'border-style': [
|
||
{
|
||
border: [
|
||
...getLineStyles(),
|
||
'hidden'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Divide Width X
|
||
* @see https://tailwindcss.com/docs/divide-width
|
||
*/ 'divide-x': [
|
||
{
|
||
'divide-x': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Divide Width X Reverse
|
||
* @see https://tailwindcss.com/docs/divide-width
|
||
*/ 'divide-x-reverse': [
|
||
'divide-x-reverse'
|
||
],
|
||
/**
|
||
* Divide Width Y
|
||
* @see https://tailwindcss.com/docs/divide-width
|
||
*/ 'divide-y': [
|
||
{
|
||
'divide-y': [
|
||
borderWidth
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Divide Width Y Reverse
|
||
* @see https://tailwindcss.com/docs/divide-width
|
||
*/ 'divide-y-reverse': [
|
||
'divide-y-reverse'
|
||
],
|
||
/**
|
||
* Divide Opacity
|
||
* @see https://tailwindcss.com/docs/divide-opacity
|
||
*/ 'divide-opacity': [
|
||
{
|
||
'divide-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Divide Style
|
||
* @see https://tailwindcss.com/docs/divide-style
|
||
*/ 'divide-style': [
|
||
{
|
||
divide: getLineStyles()
|
||
}
|
||
],
|
||
/**
|
||
* Border Color
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color': [
|
||
{
|
||
border: [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color X
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-x': [
|
||
{
|
||
'border-x': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color Y
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-y': [
|
||
{
|
||
'border-y': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color S
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-s': [
|
||
{
|
||
'border-s': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color E
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-e': [
|
||
{
|
||
'border-e': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color Top
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-t': [
|
||
{
|
||
'border-t': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color Right
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-r': [
|
||
{
|
||
'border-r': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color Bottom
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-b': [
|
||
{
|
||
'border-b': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Color Left
|
||
* @see https://tailwindcss.com/docs/border-color
|
||
*/ 'border-color-l': [
|
||
{
|
||
'border-l': [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Divide Color
|
||
* @see https://tailwindcss.com/docs/divide-color
|
||
*/ 'divide-color': [
|
||
{
|
||
divide: [
|
||
borderColor
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Outline Style
|
||
* @see https://tailwindcss.com/docs/outline-style
|
||
*/ 'outline-style': [
|
||
{
|
||
outline: [
|
||
'',
|
||
...getLineStyles()
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Outline Offset
|
||
* @see https://tailwindcss.com/docs/outline-offset
|
||
*/ 'outline-offset': [
|
||
{
|
||
'outline-offset': [
|
||
isLength,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Outline Width
|
||
* @see https://tailwindcss.com/docs/outline-width
|
||
*/ 'outline-w': [
|
||
{
|
||
outline: [
|
||
isLength,
|
||
isArbitraryLength
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Outline Color
|
||
* @see https://tailwindcss.com/docs/outline-color
|
||
*/ 'outline-color': [
|
||
{
|
||
outline: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Ring Width
|
||
* @see https://tailwindcss.com/docs/ring-width
|
||
*/ 'ring-w': [
|
||
{
|
||
ring: getLengthWithEmptyAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Ring Width Inset
|
||
* @see https://tailwindcss.com/docs/ring-width
|
||
*/ 'ring-w-inset': [
|
||
'ring-inset'
|
||
],
|
||
/**
|
||
* Ring Color
|
||
* @see https://tailwindcss.com/docs/ring-color
|
||
*/ 'ring-color': [
|
||
{
|
||
ring: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Ring Opacity
|
||
* @see https://tailwindcss.com/docs/ring-opacity
|
||
*/ 'ring-opacity': [
|
||
{
|
||
'ring-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Ring Offset Width
|
||
* @see https://tailwindcss.com/docs/ring-offset-width
|
||
*/ 'ring-offset-w': [
|
||
{
|
||
'ring-offset': [
|
||
isLength,
|
||
isArbitraryLength
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Ring Offset Color
|
||
* @see https://tailwindcss.com/docs/ring-offset-color
|
||
*/ 'ring-offset-color': [
|
||
{
|
||
'ring-offset': [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
// Effects
|
||
/**
|
||
* Box Shadow
|
||
* @see https://tailwindcss.com/docs/box-shadow
|
||
*/ shadow: [
|
||
{
|
||
shadow: [
|
||
'',
|
||
'inner',
|
||
'none',
|
||
isTshirtSize,
|
||
isArbitraryShadow
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Box Shadow Color
|
||
* @see https://tailwindcss.com/docs/box-shadow-color
|
||
*/ 'shadow-color': [
|
||
{
|
||
shadow: [
|
||
isAny
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Opacity
|
||
* @see https://tailwindcss.com/docs/opacity
|
||
*/ opacity: [
|
||
{
|
||
opacity: [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Mix Blend Mode
|
||
* @see https://tailwindcss.com/docs/mix-blend-mode
|
||
*/ 'mix-blend': [
|
||
{
|
||
'mix-blend': [
|
||
...getBlendModes(),
|
||
'plus-lighter',
|
||
'plus-darker'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Background Blend Mode
|
||
* @see https://tailwindcss.com/docs/background-blend-mode
|
||
*/ 'bg-blend': [
|
||
{
|
||
'bg-blend': getBlendModes()
|
||
}
|
||
],
|
||
// Filters
|
||
/**
|
||
* Filter
|
||
* @deprecated since Tailwind CSS v3.0.0
|
||
* @see https://tailwindcss.com/docs/filter
|
||
*/ filter: [
|
||
{
|
||
filter: [
|
||
'',
|
||
'none'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Blur
|
||
* @see https://tailwindcss.com/docs/blur
|
||
*/ blur: [
|
||
{
|
||
blur: [
|
||
blur
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Brightness
|
||
* @see https://tailwindcss.com/docs/brightness
|
||
*/ brightness: [
|
||
{
|
||
brightness: [
|
||
brightness
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Contrast
|
||
* @see https://tailwindcss.com/docs/contrast
|
||
*/ contrast: [
|
||
{
|
||
contrast: [
|
||
contrast
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Drop Shadow
|
||
* @see https://tailwindcss.com/docs/drop-shadow
|
||
*/ 'drop-shadow': [
|
||
{
|
||
'drop-shadow': [
|
||
'',
|
||
'none',
|
||
isTshirtSize,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Grayscale
|
||
* @see https://tailwindcss.com/docs/grayscale
|
||
*/ grayscale: [
|
||
{
|
||
grayscale: [
|
||
grayscale
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Hue Rotate
|
||
* @see https://tailwindcss.com/docs/hue-rotate
|
||
*/ 'hue-rotate': [
|
||
{
|
||
'hue-rotate': [
|
||
hueRotate
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Invert
|
||
* @see https://tailwindcss.com/docs/invert
|
||
*/ invert: [
|
||
{
|
||
invert: [
|
||
invert
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Saturate
|
||
* @see https://tailwindcss.com/docs/saturate
|
||
*/ saturate: [
|
||
{
|
||
saturate: [
|
||
saturate
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Sepia
|
||
* @see https://tailwindcss.com/docs/sepia
|
||
*/ sepia: [
|
||
{
|
||
sepia: [
|
||
sepia
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Filter
|
||
* @deprecated since Tailwind CSS v3.0.0
|
||
* @see https://tailwindcss.com/docs/backdrop-filter
|
||
*/ 'backdrop-filter': [
|
||
{
|
||
'backdrop-filter': [
|
||
'',
|
||
'none'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Blur
|
||
* @see https://tailwindcss.com/docs/backdrop-blur
|
||
*/ 'backdrop-blur': [
|
||
{
|
||
'backdrop-blur': [
|
||
blur
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Brightness
|
||
* @see https://tailwindcss.com/docs/backdrop-brightness
|
||
*/ 'backdrop-brightness': [
|
||
{
|
||
'backdrop-brightness': [
|
||
brightness
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Contrast
|
||
* @see https://tailwindcss.com/docs/backdrop-contrast
|
||
*/ 'backdrop-contrast': [
|
||
{
|
||
'backdrop-contrast': [
|
||
contrast
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Grayscale
|
||
* @see https://tailwindcss.com/docs/backdrop-grayscale
|
||
*/ 'backdrop-grayscale': [
|
||
{
|
||
'backdrop-grayscale': [
|
||
grayscale
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Hue Rotate
|
||
* @see https://tailwindcss.com/docs/backdrop-hue-rotate
|
||
*/ 'backdrop-hue-rotate': [
|
||
{
|
||
'backdrop-hue-rotate': [
|
||
hueRotate
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Invert
|
||
* @see https://tailwindcss.com/docs/backdrop-invert
|
||
*/ 'backdrop-invert': [
|
||
{
|
||
'backdrop-invert': [
|
||
invert
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Opacity
|
||
* @see https://tailwindcss.com/docs/backdrop-opacity
|
||
*/ 'backdrop-opacity': [
|
||
{
|
||
'backdrop-opacity': [
|
||
opacity
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Saturate
|
||
* @see https://tailwindcss.com/docs/backdrop-saturate
|
||
*/ 'backdrop-saturate': [
|
||
{
|
||
'backdrop-saturate': [
|
||
saturate
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Backdrop Sepia
|
||
* @see https://tailwindcss.com/docs/backdrop-sepia
|
||
*/ 'backdrop-sepia': [
|
||
{
|
||
'backdrop-sepia': [
|
||
sepia
|
||
]
|
||
}
|
||
],
|
||
// Tables
|
||
/**
|
||
* Border Collapse
|
||
* @see https://tailwindcss.com/docs/border-collapse
|
||
*/ 'border-collapse': [
|
||
{
|
||
border: [
|
||
'collapse',
|
||
'separate'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Spacing
|
||
* @see https://tailwindcss.com/docs/border-spacing
|
||
*/ 'border-spacing': [
|
||
{
|
||
'border-spacing': [
|
||
borderSpacing
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Spacing X
|
||
* @see https://tailwindcss.com/docs/border-spacing
|
||
*/ 'border-spacing-x': [
|
||
{
|
||
'border-spacing-x': [
|
||
borderSpacing
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Border Spacing Y
|
||
* @see https://tailwindcss.com/docs/border-spacing
|
||
*/ 'border-spacing-y': [
|
||
{
|
||
'border-spacing-y': [
|
||
borderSpacing
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Table Layout
|
||
* @see https://tailwindcss.com/docs/table-layout
|
||
*/ 'table-layout': [
|
||
{
|
||
table: [
|
||
'auto',
|
||
'fixed'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Caption Side
|
||
* @see https://tailwindcss.com/docs/caption-side
|
||
*/ caption: [
|
||
{
|
||
caption: [
|
||
'top',
|
||
'bottom'
|
||
]
|
||
}
|
||
],
|
||
// Transitions and Animation
|
||
/**
|
||
* Tranisition Property
|
||
* @see https://tailwindcss.com/docs/transition-property
|
||
*/ transition: [
|
||
{
|
||
transition: [
|
||
'none',
|
||
'all',
|
||
'',
|
||
'colors',
|
||
'opacity',
|
||
'shadow',
|
||
'transform',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Transition Duration
|
||
* @see https://tailwindcss.com/docs/transition-duration
|
||
*/ duration: [
|
||
{
|
||
duration: getNumberAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Transition Timing Function
|
||
* @see https://tailwindcss.com/docs/transition-timing-function
|
||
*/ ease: [
|
||
{
|
||
ease: [
|
||
'linear',
|
||
'in',
|
||
'out',
|
||
'in-out',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Transition Delay
|
||
* @see https://tailwindcss.com/docs/transition-delay
|
||
*/ delay: [
|
||
{
|
||
delay: getNumberAndArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Animation
|
||
* @see https://tailwindcss.com/docs/animation
|
||
*/ animate: [
|
||
{
|
||
animate: [
|
||
'none',
|
||
'spin',
|
||
'ping',
|
||
'pulse',
|
||
'bounce',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
// Transforms
|
||
/**
|
||
* Transform
|
||
* @see https://tailwindcss.com/docs/transform
|
||
*/ transform: [
|
||
{
|
||
transform: [
|
||
'',
|
||
'gpu',
|
||
'none'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scale
|
||
* @see https://tailwindcss.com/docs/scale
|
||
*/ scale: [
|
||
{
|
||
scale: [
|
||
scale
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scale X
|
||
* @see https://tailwindcss.com/docs/scale
|
||
*/ 'scale-x': [
|
||
{
|
||
'scale-x': [
|
||
scale
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scale Y
|
||
* @see https://tailwindcss.com/docs/scale
|
||
*/ 'scale-y': [
|
||
{
|
||
'scale-y': [
|
||
scale
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Rotate
|
||
* @see https://tailwindcss.com/docs/rotate
|
||
*/ rotate: [
|
||
{
|
||
rotate: [
|
||
isInteger,
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Translate X
|
||
* @see https://tailwindcss.com/docs/translate
|
||
*/ 'translate-x': [
|
||
{
|
||
'translate-x': [
|
||
translate
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Translate Y
|
||
* @see https://tailwindcss.com/docs/translate
|
||
*/ 'translate-y': [
|
||
{
|
||
'translate-y': [
|
||
translate
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Skew X
|
||
* @see https://tailwindcss.com/docs/skew
|
||
*/ 'skew-x': [
|
||
{
|
||
'skew-x': [
|
||
skew
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Skew Y
|
||
* @see https://tailwindcss.com/docs/skew
|
||
*/ 'skew-y': [
|
||
{
|
||
'skew-y': [
|
||
skew
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Transform Origin
|
||
* @see https://tailwindcss.com/docs/transform-origin
|
||
*/ 'transform-origin': [
|
||
{
|
||
origin: [
|
||
'center',
|
||
'top',
|
||
'top-right',
|
||
'right',
|
||
'bottom-right',
|
||
'bottom',
|
||
'bottom-left',
|
||
'left',
|
||
'top-left',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
// Interactivity
|
||
/**
|
||
* Accent Color
|
||
* @see https://tailwindcss.com/docs/accent-color
|
||
*/ accent: [
|
||
{
|
||
accent: [
|
||
'auto',
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Appearance
|
||
* @see https://tailwindcss.com/docs/appearance
|
||
*/ appearance: [
|
||
{
|
||
appearance: [
|
||
'none',
|
||
'auto'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Cursor
|
||
* @see https://tailwindcss.com/docs/cursor
|
||
*/ cursor: [
|
||
{
|
||
cursor: [
|
||
'auto',
|
||
'default',
|
||
'pointer',
|
||
'wait',
|
||
'text',
|
||
'move',
|
||
'help',
|
||
'not-allowed',
|
||
'none',
|
||
'context-menu',
|
||
'progress',
|
||
'cell',
|
||
'crosshair',
|
||
'vertical-text',
|
||
'alias',
|
||
'copy',
|
||
'no-drop',
|
||
'grab',
|
||
'grabbing',
|
||
'all-scroll',
|
||
'col-resize',
|
||
'row-resize',
|
||
'n-resize',
|
||
'e-resize',
|
||
's-resize',
|
||
'w-resize',
|
||
'ne-resize',
|
||
'nw-resize',
|
||
'se-resize',
|
||
'sw-resize',
|
||
'ew-resize',
|
||
'ns-resize',
|
||
'nesw-resize',
|
||
'nwse-resize',
|
||
'zoom-in',
|
||
'zoom-out',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Caret Color
|
||
* @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
|
||
*/ 'caret-color': [
|
||
{
|
||
caret: [
|
||
colors
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Pointer Events
|
||
* @see https://tailwindcss.com/docs/pointer-events
|
||
*/ 'pointer-events': [
|
||
{
|
||
'pointer-events': [
|
||
'none',
|
||
'auto'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Resize
|
||
* @see https://tailwindcss.com/docs/resize
|
||
*/ resize: [
|
||
{
|
||
resize: [
|
||
'none',
|
||
'y',
|
||
'x',
|
||
''
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Behavior
|
||
* @see https://tailwindcss.com/docs/scroll-behavior
|
||
*/ 'scroll-behavior': [
|
||
{
|
||
scroll: [
|
||
'auto',
|
||
'smooth'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-m': [
|
||
{
|
||
'scroll-m': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin X
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-mx': [
|
||
{
|
||
'scroll-mx': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin Y
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-my': [
|
||
{
|
||
'scroll-my': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin Start
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-ms': [
|
||
{
|
||
'scroll-ms': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin End
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-me': [
|
||
{
|
||
'scroll-me': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin Top
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-mt': [
|
||
{
|
||
'scroll-mt': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin Right
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-mr': [
|
||
{
|
||
'scroll-mr': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin Bottom
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-mb': [
|
||
{
|
||
'scroll-mb': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Margin Left
|
||
* @see https://tailwindcss.com/docs/scroll-margin
|
||
*/ 'scroll-ml': [
|
||
{
|
||
'scroll-ml': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-p': [
|
||
{
|
||
'scroll-p': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding X
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-px': [
|
||
{
|
||
'scroll-px': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding Y
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-py': [
|
||
{
|
||
'scroll-py': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding Start
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-ps': [
|
||
{
|
||
'scroll-ps': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding End
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-pe': [
|
||
{
|
||
'scroll-pe': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding Top
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-pt': [
|
||
{
|
||
'scroll-pt': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding Right
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-pr': [
|
||
{
|
||
'scroll-pr': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding Bottom
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-pb': [
|
||
{
|
||
'scroll-pb': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Padding Left
|
||
* @see https://tailwindcss.com/docs/scroll-padding
|
||
*/ 'scroll-pl': [
|
||
{
|
||
'scroll-pl': getSpacingWithArbitrary()
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Snap Align
|
||
* @see https://tailwindcss.com/docs/scroll-snap-align
|
||
*/ 'snap-align': [
|
||
{
|
||
snap: [
|
||
'start',
|
||
'end',
|
||
'center',
|
||
'align-none'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Snap Stop
|
||
* @see https://tailwindcss.com/docs/scroll-snap-stop
|
||
*/ 'snap-stop': [
|
||
{
|
||
snap: [
|
||
'normal',
|
||
'always'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Snap Type
|
||
* @see https://tailwindcss.com/docs/scroll-snap-type
|
||
*/ 'snap-type': [
|
||
{
|
||
snap: [
|
||
'none',
|
||
'x',
|
||
'y',
|
||
'both'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Scroll Snap Type Strictness
|
||
* @see https://tailwindcss.com/docs/scroll-snap-type
|
||
*/ 'snap-strictness': [
|
||
{
|
||
snap: [
|
||
'mandatory',
|
||
'proximity'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Touch Action
|
||
* @see https://tailwindcss.com/docs/touch-action
|
||
*/ touch: [
|
||
{
|
||
touch: [
|
||
'auto',
|
||
'none',
|
||
'manipulation'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Touch Action X
|
||
* @see https://tailwindcss.com/docs/touch-action
|
||
*/ 'touch-x': [
|
||
{
|
||
'touch-pan': [
|
||
'x',
|
||
'left',
|
||
'right'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Touch Action Y
|
||
* @see https://tailwindcss.com/docs/touch-action
|
||
*/ 'touch-y': [
|
||
{
|
||
'touch-pan': [
|
||
'y',
|
||
'up',
|
||
'down'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Touch Action Pinch Zoom
|
||
* @see https://tailwindcss.com/docs/touch-action
|
||
*/ 'touch-pz': [
|
||
'touch-pinch-zoom'
|
||
],
|
||
/**
|
||
* User Select
|
||
* @see https://tailwindcss.com/docs/user-select
|
||
*/ select: [
|
||
{
|
||
select: [
|
||
'none',
|
||
'text',
|
||
'all',
|
||
'auto'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Will Change
|
||
* @see https://tailwindcss.com/docs/will-change
|
||
*/ 'will-change': [
|
||
{
|
||
'will-change': [
|
||
'auto',
|
||
'scroll',
|
||
'contents',
|
||
'transform',
|
||
isArbitraryValue
|
||
]
|
||
}
|
||
],
|
||
// SVG
|
||
/**
|
||
* Fill
|
||
* @see https://tailwindcss.com/docs/fill
|
||
*/ fill: [
|
||
{
|
||
fill: [
|
||
colors,
|
||
'none'
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Stroke Width
|
||
* @see https://tailwindcss.com/docs/stroke-width
|
||
*/ 'stroke-w': [
|
||
{
|
||
stroke: [
|
||
isLength,
|
||
isArbitraryLength,
|
||
isArbitraryNumber
|
||
]
|
||
}
|
||
],
|
||
/**
|
||
* Stroke
|
||
* @see https://tailwindcss.com/docs/stroke
|
||
*/ stroke: [
|
||
{
|
||
stroke: [
|
||
colors,
|
||
'none'
|
||
]
|
||
}
|
||
],
|
||
// Accessibility
|
||
/**
|
||
* Screen Readers
|
||
* @see https://tailwindcss.com/docs/screen-readers
|
||
*/ sr: [
|
||
'sr-only',
|
||
'not-sr-only'
|
||
],
|
||
/**
|
||
* Forced Color Adjust
|
||
* @see https://tailwindcss.com/docs/forced-color-adjust
|
||
*/ 'forced-color-adjust': [
|
||
{
|
||
'forced-color-adjust': [
|
||
'auto',
|
||
'none'
|
||
]
|
||
}
|
||
]
|
||
},
|
||
conflictingClassGroups: {
|
||
overflow: [
|
||
'overflow-x',
|
||
'overflow-y'
|
||
],
|
||
overscroll: [
|
||
'overscroll-x',
|
||
'overscroll-y'
|
||
],
|
||
inset: [
|
||
'inset-x',
|
||
'inset-y',
|
||
'start',
|
||
'end',
|
||
'top',
|
||
'right',
|
||
'bottom',
|
||
'left'
|
||
],
|
||
'inset-x': [
|
||
'right',
|
||
'left'
|
||
],
|
||
'inset-y': [
|
||
'top',
|
||
'bottom'
|
||
],
|
||
flex: [
|
||
'basis',
|
||
'grow',
|
||
'shrink'
|
||
],
|
||
gap: [
|
||
'gap-x',
|
||
'gap-y'
|
||
],
|
||
p: [
|
||
'px',
|
||
'py',
|
||
'ps',
|
||
'pe',
|
||
'pt',
|
||
'pr',
|
||
'pb',
|
||
'pl'
|
||
],
|
||
px: [
|
||
'pr',
|
||
'pl'
|
||
],
|
||
py: [
|
||
'pt',
|
||
'pb'
|
||
],
|
||
m: [
|
||
'mx',
|
||
'my',
|
||
'ms',
|
||
'me',
|
||
'mt',
|
||
'mr',
|
||
'mb',
|
||
'ml'
|
||
],
|
||
mx: [
|
||
'mr',
|
||
'ml'
|
||
],
|
||
my: [
|
||
'mt',
|
||
'mb'
|
||
],
|
||
size: [
|
||
'w',
|
||
'h'
|
||
],
|
||
'font-size': [
|
||
'leading'
|
||
],
|
||
'fvn-normal': [
|
||
'fvn-ordinal',
|
||
'fvn-slashed-zero',
|
||
'fvn-figure',
|
||
'fvn-spacing',
|
||
'fvn-fraction'
|
||
],
|
||
'fvn-ordinal': [
|
||
'fvn-normal'
|
||
],
|
||
'fvn-slashed-zero': [
|
||
'fvn-normal'
|
||
],
|
||
'fvn-figure': [
|
||
'fvn-normal'
|
||
],
|
||
'fvn-spacing': [
|
||
'fvn-normal'
|
||
],
|
||
'fvn-fraction': [
|
||
'fvn-normal'
|
||
],
|
||
'line-clamp': [
|
||
'display',
|
||
'overflow'
|
||
],
|
||
rounded: [
|
||
'rounded-s',
|
||
'rounded-e',
|
||
'rounded-t',
|
||
'rounded-r',
|
||
'rounded-b',
|
||
'rounded-l',
|
||
'rounded-ss',
|
||
'rounded-se',
|
||
'rounded-ee',
|
||
'rounded-es',
|
||
'rounded-tl',
|
||
'rounded-tr',
|
||
'rounded-br',
|
||
'rounded-bl'
|
||
],
|
||
'rounded-s': [
|
||
'rounded-ss',
|
||
'rounded-es'
|
||
],
|
||
'rounded-e': [
|
||
'rounded-se',
|
||
'rounded-ee'
|
||
],
|
||
'rounded-t': [
|
||
'rounded-tl',
|
||
'rounded-tr'
|
||
],
|
||
'rounded-r': [
|
||
'rounded-tr',
|
||
'rounded-br'
|
||
],
|
||
'rounded-b': [
|
||
'rounded-br',
|
||
'rounded-bl'
|
||
],
|
||
'rounded-l': [
|
||
'rounded-tl',
|
||
'rounded-bl'
|
||
],
|
||
'border-spacing': [
|
||
'border-spacing-x',
|
||
'border-spacing-y'
|
||
],
|
||
'border-w': [
|
||
'border-w-s',
|
||
'border-w-e',
|
||
'border-w-t',
|
||
'border-w-r',
|
||
'border-w-b',
|
||
'border-w-l'
|
||
],
|
||
'border-w-x': [
|
||
'border-w-r',
|
||
'border-w-l'
|
||
],
|
||
'border-w-y': [
|
||
'border-w-t',
|
||
'border-w-b'
|
||
],
|
||
'border-color': [
|
||
'border-color-s',
|
||
'border-color-e',
|
||
'border-color-t',
|
||
'border-color-r',
|
||
'border-color-b',
|
||
'border-color-l'
|
||
],
|
||
'border-color-x': [
|
||
'border-color-r',
|
||
'border-color-l'
|
||
],
|
||
'border-color-y': [
|
||
'border-color-t',
|
||
'border-color-b'
|
||
],
|
||
'scroll-m': [
|
||
'scroll-mx',
|
||
'scroll-my',
|
||
'scroll-ms',
|
||
'scroll-me',
|
||
'scroll-mt',
|
||
'scroll-mr',
|
||
'scroll-mb',
|
||
'scroll-ml'
|
||
],
|
||
'scroll-mx': [
|
||
'scroll-mr',
|
||
'scroll-ml'
|
||
],
|
||
'scroll-my': [
|
||
'scroll-mt',
|
||
'scroll-mb'
|
||
],
|
||
'scroll-p': [
|
||
'scroll-px',
|
||
'scroll-py',
|
||
'scroll-ps',
|
||
'scroll-pe',
|
||
'scroll-pt',
|
||
'scroll-pr',
|
||
'scroll-pb',
|
||
'scroll-pl'
|
||
],
|
||
'scroll-px': [
|
||
'scroll-pr',
|
||
'scroll-pl'
|
||
],
|
||
'scroll-py': [
|
||
'scroll-pt',
|
||
'scroll-pb'
|
||
],
|
||
touch: [
|
||
'touch-x',
|
||
'touch-y',
|
||
'touch-pz'
|
||
],
|
||
'touch-x': [
|
||
'touch'
|
||
],
|
||
'touch-y': [
|
||
'touch'
|
||
],
|
||
'touch-pz': [
|
||
'touch'
|
||
]
|
||
},
|
||
conflictingClassGroupModifiers: {
|
||
'font-size': [
|
||
'leading'
|
||
]
|
||
}
|
||
};
|
||
};
|
||
/**
|
||
* @param baseConfig Config where other config will be merged into. This object will be mutated.
|
||
* @param configExtension Partial config to merge into the `baseConfig`.
|
||
*/ const mergeConfigs = (baseConfig, { cacheSize, prefix, separator, experimentalParseClassName, extend = {}, override = {} })=>{
|
||
overrideProperty(baseConfig, 'cacheSize', cacheSize);
|
||
overrideProperty(baseConfig, 'prefix', prefix);
|
||
overrideProperty(baseConfig, 'separator', separator);
|
||
overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);
|
||
for(const configKey in override){
|
||
overrideConfigProperties(baseConfig[configKey], override[configKey]);
|
||
}
|
||
for(const key in extend){
|
||
mergeConfigProperties(baseConfig[key], extend[key]);
|
||
}
|
||
return baseConfig;
|
||
};
|
||
const overrideProperty = (baseObject, overrideKey, overrideValue)=>{
|
||
if (overrideValue !== undefined) {
|
||
baseObject[overrideKey] = overrideValue;
|
||
}
|
||
};
|
||
const overrideConfigProperties = (baseObject, overrideObject)=>{
|
||
if (overrideObject) {
|
||
for(const key in overrideObject){
|
||
overrideProperty(baseObject, key, overrideObject[key]);
|
||
}
|
||
}
|
||
};
|
||
const mergeConfigProperties = (baseObject, mergeObject)=>{
|
||
if (mergeObject) {
|
||
for(const key in mergeObject){
|
||
const mergeValue = mergeObject[key];
|
||
if (mergeValue !== undefined) {
|
||
baseObject[key] = (baseObject[key] || []).concat(mergeValue);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
const extendTailwindMerge = (configExtension, ...createConfig)=>typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(()=>mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);
|
||
const twMerge = /*#__PURE__*/ createTailwindMerge(getDefaultConfig);
|
||
;
|
||
//# sourceMappingURL=bundle-mjs.mjs.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/image-blur-svg.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* A shared function, used on both client and server, to generate a SVG blur placeholder.
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "getImageBlurSvg", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return getImageBlurSvg;
|
||
}
|
||
});
|
||
function getImageBlurSvg({ widthInt, heightInt, blurWidth, blurHeight, blurDataURL, objectFit }) {
|
||
const std = 20;
|
||
const svgWidth = blurWidth ? blurWidth * 40 : widthInt;
|
||
const svgHeight = blurHeight ? blurHeight * 40 : heightInt;
|
||
const viewBox = svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : '';
|
||
const preserveAspectRatio = viewBox ? 'none' : objectFit === 'contain' ? 'xMidYMid' : objectFit === 'cover' ? 'xMidYMid slice' : 'none';
|
||
return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`;
|
||
} //# sourceMappingURL=image-blur-svg.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/image-config.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
VALID_LOADERS: null,
|
||
imageConfigDefault: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
VALID_LOADERS: function() {
|
||
return VALID_LOADERS;
|
||
},
|
||
imageConfigDefault: function() {
|
||
return imageConfigDefault;
|
||
}
|
||
});
|
||
const VALID_LOADERS = [
|
||
'default',
|
||
'imgix',
|
||
'cloudinary',
|
||
'akamai',
|
||
'custom'
|
||
];
|
||
const imageConfigDefault = {
|
||
deviceSizes: [
|
||
640,
|
||
750,
|
||
828,
|
||
1080,
|
||
1200,
|
||
1920,
|
||
2048,
|
||
3840
|
||
],
|
||
imageSizes: [
|
||
32,
|
||
48,
|
||
64,
|
||
96,
|
||
128,
|
||
256,
|
||
384
|
||
],
|
||
path: '/_next/image',
|
||
loader: 'default',
|
||
loaderFile: '',
|
||
/**
|
||
* @deprecated Use `remotePatterns` instead to protect your application from malicious users.
|
||
*/ domains: [],
|
||
disableStaticImages: false,
|
||
minimumCacheTTL: 14400,
|
||
formats: [
|
||
'image/webp'
|
||
],
|
||
maximumRedirects: 3,
|
||
dangerouslyAllowLocalIP: false,
|
||
dangerouslyAllowSVG: false,
|
||
contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,
|
||
contentDispositionType: 'attachment',
|
||
localPatterns: undefined,
|
||
remotePatterns: [],
|
||
qualities: [
|
||
75
|
||
],
|
||
unoptimized: false
|
||
}; //# sourceMappingURL=image-config.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/get-img-props.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "getImgProps", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return getImgProps;
|
||
}
|
||
});
|
||
const _warnonce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [app-client] (ecmascript)");
|
||
const _imageblursvg = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-blur-svg.js [app-client] (ecmascript)");
|
||
const _imageconfig = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-config.js [app-client] (ecmascript)");
|
||
const VALID_LOADING_VALUES = [
|
||
'lazy',
|
||
'eager',
|
||
undefined
|
||
];
|
||
// Object-fit values that are not valid background-size values
|
||
const INVALID_BACKGROUND_SIZE_VALUES = [
|
||
'-moz-initial',
|
||
'fill',
|
||
'none',
|
||
'scale-down',
|
||
undefined
|
||
];
|
||
function isStaticRequire(src) {
|
||
return src.default !== undefined;
|
||
}
|
||
function isStaticImageData(src) {
|
||
return src.src !== undefined;
|
||
}
|
||
function isStaticImport(src) {
|
||
return !!src && typeof src === 'object' && (isStaticRequire(src) || isStaticImageData(src));
|
||
}
|
||
const allImgs = new Map();
|
||
let perfObserver;
|
||
function getInt(x) {
|
||
if (typeof x === 'undefined') {
|
||
return x;
|
||
}
|
||
if (typeof x === 'number') {
|
||
return Number.isFinite(x) ? x : NaN;
|
||
}
|
||
if (typeof x === 'string' && /^[0-9]+$/.test(x)) {
|
||
return parseInt(x, 10);
|
||
}
|
||
return NaN;
|
||
}
|
||
function getWidths({ deviceSizes, allSizes }, width, sizes) {
|
||
if (sizes) {
|
||
// Find all the "vw" percent sizes used in the sizes prop
|
||
const viewportWidthRe = /(^|\s)(1?\d?\d)vw/g;
|
||
const percentSizes = [];
|
||
for(let match; match = viewportWidthRe.exec(sizes); match){
|
||
percentSizes.push(parseInt(match[2]));
|
||
}
|
||
if (percentSizes.length) {
|
||
const smallestRatio = Math.min(...percentSizes) * 0.01;
|
||
return {
|
||
widths: allSizes.filter((s)=>s >= deviceSizes[0] * smallestRatio),
|
||
kind: 'w'
|
||
};
|
||
}
|
||
return {
|
||
widths: allSizes,
|
||
kind: 'w'
|
||
};
|
||
}
|
||
if (typeof width !== 'number') {
|
||
return {
|
||
widths: deviceSizes,
|
||
kind: 'w'
|
||
};
|
||
}
|
||
const widths = [
|
||
...new Set(// > are actually 3x in the green color, but only 1.5x in the red and
|
||
// > blue colors. Showing a 3x resolution image in the app vs a 2x
|
||
// > resolution image will be visually the same, though the 3x image
|
||
// > takes significantly more data. Even true 3x resolution screens are
|
||
// > wasteful as the human eye cannot see that level of detail without
|
||
// > something like a magnifying glass.
|
||
// https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html
|
||
[
|
||
width,
|
||
width * 2 /*, width * 3*/
|
||
].map((w)=>allSizes.find((p)=>p >= w) || allSizes[allSizes.length - 1]))
|
||
];
|
||
return {
|
||
widths,
|
||
kind: 'x'
|
||
};
|
||
}
|
||
function generateImgAttrs({ config, src, unoptimized, width, quality, sizes, loader }) {
|
||
if (unoptimized) {
|
||
return {
|
||
src,
|
||
srcSet: undefined,
|
||
sizes: undefined
|
||
};
|
||
}
|
||
const { widths, kind } = getWidths(config, width, sizes);
|
||
const last = widths.length - 1;
|
||
return {
|
||
sizes: !sizes && kind === 'w' ? '100vw' : sizes,
|
||
srcSet: widths.map((w, i)=>`${loader({
|
||
config,
|
||
src,
|
||
quality,
|
||
width: w
|
||
})} ${kind === 'w' ? w : i + 1}${kind}`).join(', '),
|
||
// It's intended to keep `src` the last attribute because React updates
|
||
// attributes in order. If we keep `src` the first one, Safari will
|
||
// immediately start to fetch `src`, before `sizes` and `srcSet` are even
|
||
// updated by React. That causes multiple unnecessary requests if `srcSet`
|
||
// and `sizes` are defined.
|
||
// This bug cannot be reproduced in Chrome or Firefox.
|
||
src: loader({
|
||
config,
|
||
src,
|
||
quality,
|
||
width: widths[last]
|
||
})
|
||
};
|
||
}
|
||
function getImgProps({ src, sizes, unoptimized = false, priority = false, preload = false, loading, className, quality, width, height, fill = false, style, overrideSrc, onLoad, onLoadingComplete, placeholder = 'empty', blurDataURL, fetchPriority, decoding = 'async', layout, objectFit, objectPosition, lazyBoundary, lazyRoot, ...rest }, _state) {
|
||
const { imgConf, showAltText, blurComplete, defaultLoader } = _state;
|
||
let config;
|
||
let c = imgConf || _imageconfig.imageConfigDefault;
|
||
if ('allSizes' in c) {
|
||
config = c;
|
||
} else {
|
||
const allSizes = [
|
||
...c.deviceSizes,
|
||
...c.imageSizes
|
||
].sort((a, b)=>a - b);
|
||
const deviceSizes = c.deviceSizes.sort((a, b)=>a - b);
|
||
const qualities = c.qualities?.sort((a, b)=>a - b);
|
||
config = {
|
||
...c,
|
||
allSizes,
|
||
deviceSizes,
|
||
qualities
|
||
};
|
||
}
|
||
if (typeof defaultLoader === 'undefined') {
|
||
throw Object.defineProperty(new Error('images.loaderFile detected but the file is missing default export.\nRead more: https://nextjs.org/docs/messages/invalid-images-config'), "__NEXT_ERROR_CODE", {
|
||
value: "E163",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
let loader = rest.loader || defaultLoader;
|
||
// Remove property so it's not spread on <img> element
|
||
delete rest.loader;
|
||
delete rest.srcSet;
|
||
// This special value indicates that the user
|
||
// didn't define a "loader" prop or "loader" config.
|
||
const isDefaultLoader = '__next_img_default' in loader;
|
||
if (isDefaultLoader) {
|
||
if (config.loader === 'custom') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" is missing "loader" prop.` + `\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`), "__NEXT_ERROR_CODE", {
|
||
value: "E252",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
} else {
|
||
// The user defined a "loader" prop or config.
|
||
// Since the config object is internal only, we
|
||
// must not pass it to the user-defined "loader".
|
||
const customImageLoader = loader;
|
||
loader = (obj)=>{
|
||
const { config: _, ...opts } = obj;
|
||
return customImageLoader(opts);
|
||
};
|
||
}
|
||
if (layout) {
|
||
if (layout === 'fill') {
|
||
fill = true;
|
||
}
|
||
const layoutToStyle = {
|
||
intrinsic: {
|
||
maxWidth: '100%',
|
||
height: 'auto'
|
||
},
|
||
responsive: {
|
||
width: '100%',
|
||
height: 'auto'
|
||
}
|
||
};
|
||
const layoutToSizes = {
|
||
responsive: '100vw',
|
||
fill: '100vw'
|
||
};
|
||
const layoutStyle = layoutToStyle[layout];
|
||
if (layoutStyle) {
|
||
style = {
|
||
...style,
|
||
...layoutStyle
|
||
};
|
||
}
|
||
const layoutSizes = layoutToSizes[layout];
|
||
if (layoutSizes && !sizes) {
|
||
sizes = layoutSizes;
|
||
}
|
||
}
|
||
let staticSrc = '';
|
||
let widthInt = getInt(width);
|
||
let heightInt = getInt(height);
|
||
let blurWidth;
|
||
let blurHeight;
|
||
if (isStaticImport(src)) {
|
||
const staticImageData = isStaticRequire(src) ? src.default : src;
|
||
if (!staticImageData.src) {
|
||
throw Object.defineProperty(new Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(staticImageData)}`), "__NEXT_ERROR_CODE", {
|
||
value: "E460",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (!staticImageData.height || !staticImageData.width) {
|
||
throw Object.defineProperty(new Error(`An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(staticImageData)}`), "__NEXT_ERROR_CODE", {
|
||
value: "E48",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
blurWidth = staticImageData.blurWidth;
|
||
blurHeight = staticImageData.blurHeight;
|
||
blurDataURL = blurDataURL || staticImageData.blurDataURL;
|
||
staticSrc = staticImageData.src;
|
||
if (!fill) {
|
||
if (!widthInt && !heightInt) {
|
||
widthInt = staticImageData.width;
|
||
heightInt = staticImageData.height;
|
||
} else if (widthInt && !heightInt) {
|
||
const ratio = widthInt / staticImageData.width;
|
||
heightInt = Math.round(staticImageData.height * ratio);
|
||
} else if (!widthInt && heightInt) {
|
||
const ratio = heightInt / staticImageData.height;
|
||
widthInt = Math.round(staticImageData.width * ratio);
|
||
}
|
||
}
|
||
}
|
||
src = typeof src === 'string' ? src : staticSrc;
|
||
let isLazy = !priority && !preload && (loading === 'lazy' || typeof loading === 'undefined');
|
||
if (!src || src.startsWith('data:') || src.startsWith('blob:')) {
|
||
// https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
||
unoptimized = true;
|
||
isLazy = false;
|
||
}
|
||
if (config.unoptimized) {
|
||
unoptimized = true;
|
||
}
|
||
if (isDefaultLoader && !config.dangerouslyAllowSVG && src.split('?', 1)[0].endsWith('.svg')) {
|
||
// Special case to make svg serve as-is to avoid proxying
|
||
// through the built-in Image Optimization API.
|
||
unoptimized = true;
|
||
}
|
||
const qualityInt = getInt(quality);
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (config.output === 'export' && isDefaultLoader && !unoptimized) {
|
||
throw Object.defineProperty(new Error(`Image Optimization using the default loader is not compatible with \`{ output: 'export' }\`.
|
||
Possible solutions:
|
||
- Remove \`{ output: 'export' }\` and run "next start" to run server mode including the Image Optimization API.
|
||
- Configure \`{ images: { unoptimized: true } }\` in \`next.config.js\` to disable the Image Optimization API.
|
||
Read more: https://nextjs.org/docs/messages/export-image-api`), "__NEXT_ERROR_CODE", {
|
||
value: "E500",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (!src) {
|
||
// React doesn't show the stack trace and there's
|
||
// no `src` to help identify which image, so we
|
||
// instead console.error(ref) during mount.
|
||
unoptimized = true;
|
||
} else {
|
||
if (fill) {
|
||
if (width) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "width" and "fill" properties. Only one should be used.`), "__NEXT_ERROR_CODE", {
|
||
value: "E96",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (height) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "height" and "fill" properties. Only one should be used.`), "__NEXT_ERROR_CODE", {
|
||
value: "E115",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (style?.position && style.position !== 'absolute') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "fill" and "style.position" properties. Images with "fill" always use position absolute - it cannot be modified.`), "__NEXT_ERROR_CODE", {
|
||
value: "E216",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (style?.width && style.width !== '100%') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "fill" and "style.width" properties. Images with "fill" always use width 100% - it cannot be modified.`), "__NEXT_ERROR_CODE", {
|
||
value: "E73",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (style?.height && style.height !== '100%') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "fill" and "style.height" properties. Images with "fill" always use height 100% - it cannot be modified.`), "__NEXT_ERROR_CODE", {
|
||
value: "E404",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
} else {
|
||
if (typeof widthInt === 'undefined') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" is missing required "width" property.`), "__NEXT_ERROR_CODE", {
|
||
value: "E451",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
} else if (isNaN(widthInt)) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has invalid "width" property. Expected a numeric value in pixels but received "${width}".`), "__NEXT_ERROR_CODE", {
|
||
value: "E66",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (typeof heightInt === 'undefined') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" is missing required "height" property.`), "__NEXT_ERROR_CODE", {
|
||
value: "E397",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
} else if (isNaN(heightInt)) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has invalid "height" property. Expected a numeric value in pixels but received "${height}".`), "__NEXT_ERROR_CODE", {
|
||
value: "E444",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
// eslint-disable-next-line no-control-regex
|
||
if (/^[\x00-\x20]/.test(src)) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.`), "__NEXT_ERROR_CODE", {
|
||
value: "E176",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
// eslint-disable-next-line no-control-regex
|
||
if (/[\x00-\x20]$/.test(src)) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.`), "__NEXT_ERROR_CODE", {
|
||
value: "E21",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
if (!VALID_LOADING_VALUES.includes(loading)) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has invalid "loading" property. Provided "${loading}" should be one of ${VALID_LOADING_VALUES.map(String).join(',')}.`), "__NEXT_ERROR_CODE", {
|
||
value: "E357",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (priority && loading === 'lazy') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "priority" and "loading='lazy'" properties. Only one should be used.`), "__NEXT_ERROR_CODE", {
|
||
value: "E218",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (preload && loading === 'lazy') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "preload" and "loading='lazy'" properties. Only one should be used.`), "__NEXT_ERROR_CODE", {
|
||
value: "E803",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (preload && priority) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has both "preload" and "priority" properties. Only "preload" should be used.`), "__NEXT_ERROR_CODE", {
|
||
value: "E802",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (placeholder !== 'empty' && placeholder !== 'blur' && !placeholder.startsWith('data:image/')) {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has invalid "placeholder" property "${placeholder}".`), "__NEXT_ERROR_CODE", {
|
||
value: "E431",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (placeholder !== 'empty') {
|
||
if (widthInt && heightInt && widthInt * heightInt < 1600) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${src}" is smaller than 40x40. Consider removing the "placeholder" property to improve performance.`);
|
||
}
|
||
}
|
||
if (qualityInt && config.qualities && !config.qualities.includes(qualityInt)) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${src}" is using quality "${qualityInt}" which is not configured in images.qualities [${config.qualities.join(', ')}]. Please update your config to [${[
|
||
...config.qualities,
|
||
qualityInt
|
||
].sort().join(', ')}].` + `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-qualities`);
|
||
}
|
||
if (placeholder === 'blur' && !blurDataURL) {
|
||
const VALID_BLUR_EXT = [
|
||
'jpeg',
|
||
'png',
|
||
'webp',
|
||
'avif'
|
||
] // should match next-image-loader
|
||
;
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" has "placeholder='blur'" property but is missing the "blurDataURL" property.
|
||
Possible solutions:
|
||
- Add a "blurDataURL" property, the contents should be a small Data URL to represent the image
|
||
- Change the "src" property to a static import with one of the supported file types: ${VALID_BLUR_EXT.join(',')} (animated images not supported)
|
||
- Remove the "placeholder" property, effectively no blur effect
|
||
Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url`), "__NEXT_ERROR_CODE", {
|
||
value: "E371",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if ('ref' in rest) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${src}" is using unsupported "ref" property. Consider using the "onLoad" property instead.`);
|
||
}
|
||
if (!unoptimized && !isDefaultLoader) {
|
||
const urlStr = loader({
|
||
config,
|
||
src,
|
||
width: widthInt || 400,
|
||
quality: qualityInt || 75
|
||
});
|
||
let url;
|
||
try {
|
||
url = new URL(urlStr);
|
||
} catch (err) {}
|
||
if (urlStr === src || url && url.pathname === src && !url.search) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${src}" has a "loader" property that does not implement width. Please implement it or use the "unoptimized" property instead.` + `\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width`);
|
||
}
|
||
}
|
||
if (onLoadingComplete) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${src}" is using deprecated "onLoadingComplete" property. Please use the "onLoad" property instead.`);
|
||
}
|
||
for (const [legacyKey, legacyValue] of Object.entries({
|
||
layout,
|
||
objectFit,
|
||
objectPosition,
|
||
lazyBoundary,
|
||
lazyRoot
|
||
})){
|
||
if (legacyValue) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${src}" has legacy prop "${legacyKey}". Did you forget to run the codemod?` + `\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13`);
|
||
}
|
||
}
|
||
if (typeof window !== 'undefined' && !perfObserver && window.PerformanceObserver) {
|
||
perfObserver = new PerformanceObserver((entryList)=>{
|
||
for (const entry of entryList.getEntries()){
|
||
// @ts-ignore - missing "LargestContentfulPaint" class with "element" prop
|
||
const imgSrc = entry?.element?.src || '';
|
||
const lcpImage = allImgs.get(imgSrc);
|
||
if (lcpImage && lcpImage.loading === 'lazy' && lcpImage.placeholder === 'empty' && !lcpImage.src.startsWith('data:') && !lcpImage.src.startsWith('blob:')) {
|
||
// https://web.dev/lcp/#measure-lcp-in-javascript
|
||
(0, _warnonce.warnOnce)(`Image with src "${lcpImage.src}" was detected as the Largest Contentful Paint (LCP). Please add the \`loading="eager"\` property if this image is above the fold.` + `\nRead more: https://nextjs.org/docs/app/api-reference/components/image#loading`);
|
||
}
|
||
}
|
||
});
|
||
try {
|
||
perfObserver.observe({
|
||
type: 'largest-contentful-paint',
|
||
buffered: true
|
||
});
|
||
} catch (err) {
|
||
// Log error but don't crash the app
|
||
console.error(err);
|
||
}
|
||
}
|
||
}
|
||
const imgStyle = Object.assign(fill ? {
|
||
position: 'absolute',
|
||
height: '100%',
|
||
width: '100%',
|
||
left: 0,
|
||
top: 0,
|
||
right: 0,
|
||
bottom: 0,
|
||
objectFit,
|
||
objectPosition
|
||
} : {}, showAltText ? {} : {
|
||
color: 'transparent'
|
||
}, style);
|
||
const backgroundImage = !blurComplete && placeholder !== 'empty' ? placeholder === 'blur' ? `url("data:image/svg+xml;charset=utf-8,${(0, _imageblursvg.getImageBlurSvg)({
|
||
widthInt,
|
||
heightInt,
|
||
blurWidth,
|
||
blurHeight,
|
||
blurDataURL: blurDataURL || '',
|
||
objectFit: imgStyle.objectFit
|
||
})}")` : `url("${placeholder}")` // assume `data:image/`
|
||
: null;
|
||
const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(imgStyle.objectFit) ? imgStyle.objectFit : imgStyle.objectFit === 'fill' ? '100% 100%' // the background-size equivalent of `fill`
|
||
: 'cover';
|
||
let placeholderStyle = backgroundImage ? {
|
||
backgroundSize,
|
||
backgroundPosition: imgStyle.objectPosition || '50% 50%',
|
||
backgroundRepeat: 'no-repeat',
|
||
backgroundImage
|
||
} : {};
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (placeholderStyle.backgroundImage && placeholder === 'blur' && blurDataURL?.startsWith('/')) {
|
||
// During `next dev`, we don't want to generate blur placeholders with webpack
|
||
// because it can delay starting the dev server. Instead, `next-image-loader.js`
|
||
// will inline a special url to lazily generate the blur placeholder at request time.
|
||
placeholderStyle.backgroundImage = `url("${blurDataURL}")`;
|
||
}
|
||
}
|
||
const imgAttributes = generateImgAttrs({
|
||
config,
|
||
src,
|
||
unoptimized,
|
||
width: widthInt,
|
||
quality: qualityInt,
|
||
sizes,
|
||
loader
|
||
});
|
||
const loadingFinal = isLazy ? 'lazy' : loading;
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (typeof window !== 'undefined') {
|
||
let fullUrl;
|
||
try {
|
||
fullUrl = new URL(imgAttributes.src);
|
||
} catch (e) {
|
||
fullUrl = new URL(imgAttributes.src, window.location.href);
|
||
}
|
||
allImgs.set(fullUrl.href, {
|
||
src,
|
||
loading: loadingFinal,
|
||
placeholder
|
||
});
|
||
}
|
||
}
|
||
const props = {
|
||
...rest,
|
||
loading: loadingFinal,
|
||
fetchPriority,
|
||
width: widthInt,
|
||
height: heightInt,
|
||
decoding,
|
||
className,
|
||
style: {
|
||
...imgStyle,
|
||
...placeholderStyle
|
||
},
|
||
sizes: imgAttributes.sizes,
|
||
srcSet: imgAttributes.srcSet,
|
||
src: overrideSrc || imgAttributes.src
|
||
};
|
||
const meta = {
|
||
unoptimized,
|
||
preload: preload || priority,
|
||
placeholder,
|
||
fill
|
||
};
|
||
return {
|
||
props,
|
||
meta
|
||
};
|
||
} //# sourceMappingURL=get-img-props.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/side-effect.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "default", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return SideEffect;
|
||
}
|
||
});
|
||
const _react = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||
const isServer = typeof window === 'undefined';
|
||
const useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;
|
||
const useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;
|
||
function SideEffect(props) {
|
||
const { headManager, reduceComponentsToState } = props;
|
||
function emitChange() {
|
||
if (headManager && headManager.mountedInstances) {
|
||
const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));
|
||
headManager.updateHead(reduceComponentsToState(headElements));
|
||
}
|
||
}
|
||
if (isServer) {
|
||
headManager?.mountedInstances?.add(props.children);
|
||
emitChange();
|
||
}
|
||
useClientOnlyLayoutEffect({
|
||
"SideEffect.useClientOnlyLayoutEffect": ()=>{
|
||
headManager?.mountedInstances?.add(props.children);
|
||
return ({
|
||
"SideEffect.useClientOnlyLayoutEffect": ()=>{
|
||
headManager?.mountedInstances?.delete(props.children);
|
||
}
|
||
})["SideEffect.useClientOnlyLayoutEffect"];
|
||
}
|
||
}["SideEffect.useClientOnlyLayoutEffect"]);
|
||
// We need to call `updateHead` method whenever the `SideEffect` is trigger in all
|
||
// life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s
|
||
// being rendered, we only trigger the method from the last one.
|
||
// This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`
|
||
// singleton in the layout effect pass, and actually trigger it in the effect pass.
|
||
useClientOnlyLayoutEffect({
|
||
"SideEffect.useClientOnlyLayoutEffect": ()=>{
|
||
if (headManager) {
|
||
headManager._pendingUpdate = emitChange;
|
||
}
|
||
return ({
|
||
"SideEffect.useClientOnlyLayoutEffect": ()=>{
|
||
if (headManager) {
|
||
headManager._pendingUpdate = emitChange;
|
||
}
|
||
}
|
||
})["SideEffect.useClientOnlyLayoutEffect"];
|
||
}
|
||
}["SideEffect.useClientOnlyLayoutEffect"]);
|
||
useClientOnlyEffect({
|
||
"SideEffect.useClientOnlyEffect": ()=>{
|
||
if (headManager && headManager._pendingUpdate) {
|
||
headManager._pendingUpdate();
|
||
headManager._pendingUpdate = null;
|
||
}
|
||
return ({
|
||
"SideEffect.useClientOnlyEffect": ()=>{
|
||
if (headManager && headManager._pendingUpdate) {
|
||
headManager._pendingUpdate();
|
||
headManager._pendingUpdate = null;
|
||
}
|
||
}
|
||
})["SideEffect.useClientOnlyEffect"];
|
||
}
|
||
}["SideEffect.useClientOnlyEffect"]);
|
||
return null;
|
||
} //# sourceMappingURL=side-effect.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/head.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
'use client';
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
default: null,
|
||
defaultHead: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
default: function() {
|
||
return _default;
|
||
},
|
||
defaultHead: function() {
|
||
return defaultHead;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [app-client] (ecmascript)");
|
||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-client] (ecmascript)");
|
||
const _jsxruntime = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/jsx-runtime.js [app-client] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"));
|
||
const _sideeffect = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/side-effect.js [app-client] (ecmascript)"));
|
||
const _headmanagercontextsharedruntime = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js [app-client] (ecmascript)");
|
||
const _warnonce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [app-client] (ecmascript)");
|
||
function defaultHead() {
|
||
const head = [
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", {
|
||
charSet: "utf-8"
|
||
}, "charset"),
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", {
|
||
name: "viewport",
|
||
content: "width=device-width"
|
||
}, "viewport")
|
||
];
|
||
return head;
|
||
}
|
||
function onlyReactElement(list, child) {
|
||
// React children can be "string" or "number" in this case we ignore them for backwards compat
|
||
if (typeof child === 'string' || typeof child === 'number') {
|
||
return list;
|
||
}
|
||
// Adds support for React.Fragment
|
||
if (child.type === _react.default.Fragment) {
|
||
return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{
|
||
if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {
|
||
return fragmentList;
|
||
}
|
||
return fragmentList.concat(fragmentChild);
|
||
}, []));
|
||
}
|
||
return list.concat(child);
|
||
}
|
||
const METATYPES = [
|
||
'name',
|
||
'httpEquiv',
|
||
'charSet',
|
||
'itemProp'
|
||
];
|
||
/*
|
||
returns a function for filtering head child elements
|
||
which shouldn't be duplicated, like <title/>
|
||
Also adds support for deduplicated `key` properties
|
||
*/ function unique() {
|
||
const keys = new Set();
|
||
const tags = new Set();
|
||
const metaTypes = new Set();
|
||
const metaCategories = {};
|
||
return (h)=>{
|
||
let isUnique = true;
|
||
let hasKey = false;
|
||
if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {
|
||
hasKey = true;
|
||
const key = h.key.slice(h.key.indexOf('$') + 1);
|
||
if (keys.has(key)) {
|
||
isUnique = false;
|
||
} else {
|
||
keys.add(key);
|
||
}
|
||
}
|
||
// eslint-disable-next-line default-case
|
||
switch(h.type){
|
||
case 'title':
|
||
case 'base':
|
||
if (tags.has(h.type)) {
|
||
isUnique = false;
|
||
} else {
|
||
tags.add(h.type);
|
||
}
|
||
break;
|
||
case 'meta':
|
||
for(let i = 0, len = METATYPES.length; i < len; i++){
|
||
const metatype = METATYPES[i];
|
||
if (!h.props.hasOwnProperty(metatype)) continue;
|
||
if (metatype === 'charSet') {
|
||
if (metaTypes.has(metatype)) {
|
||
isUnique = false;
|
||
} else {
|
||
metaTypes.add(metatype);
|
||
}
|
||
} else {
|
||
const category = h.props[metatype];
|
||
const categories = metaCategories[metatype] || new Set();
|
||
if ((metatype !== 'name' || !hasKey) && categories.has(category)) {
|
||
isUnique = false;
|
||
} else {
|
||
categories.add(category);
|
||
metaCategories[metatype] = categories;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
return isUnique;
|
||
};
|
||
}
|
||
/**
|
||
*
|
||
* @param headChildrenElements List of children of <Head>
|
||
*/ function reduceComponents(headChildrenElements) {
|
||
return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead().reverse()).filter(unique()).reverse().map((c, i)=>{
|
||
const key = c.key || i;
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
// omit JSON-LD structured data snippets from the warning
|
||
if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {
|
||
const srcMessage = c.props['src'] ? `<script> tag with src="${c.props['src']}"` : `inline <script>`;
|
||
(0, _warnonce.warnOnce)(`Do not add <script> tags using next/head (see ${srcMessage}). Use next/script instead. \nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component`);
|
||
} else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {
|
||
(0, _warnonce.warnOnce)(`Do not add stylesheets using next/head (see <link rel="stylesheet"> tag with href="${c.props['href']}"). Use Document instead. \nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component`);
|
||
}
|
||
}
|
||
return /*#__PURE__*/ _react.default.cloneElement(c, {
|
||
key
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* This component injects elements to `<head>` of your page.
|
||
* To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.
|
||
*/ function Head({ children }) {
|
||
const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {
|
||
reduceComponentsToState: reduceComponents,
|
||
headManager: headManager,
|
||
children: children
|
||
});
|
||
}
|
||
const _default = Head;
|
||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||
Object.defineProperty(exports.default, '__esModule', {
|
||
value: true
|
||
});
|
||
Object.assign(exports.default, exports);
|
||
module.exports = exports.default;
|
||
} //# sourceMappingURL=head.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "ImageConfigContext", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return ImageConfigContext;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [app-client] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"));
|
||
const _imageconfig = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-config.js [app-client] (ecmascript)");
|
||
const ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault);
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
ImageConfigContext.displayName = 'ImageConfigContext';
|
||
} //# sourceMappingURL=image-config-context.shared-runtime.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/router-context.shared-runtime.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "RouterContext", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return RouterContext;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [app-client] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"));
|
||
const RouterContext = _react.default.createContext(null);
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
RouterContext.displayName = 'RouterContext';
|
||
} //# sourceMappingURL=router-context.shared-runtime.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/find-closest-quality.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "findClosestQuality", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return findClosestQuality;
|
||
}
|
||
});
|
||
function findClosestQuality(quality, config) {
|
||
const q = quality || 75;
|
||
if (!config?.qualities?.length) {
|
||
return q;
|
||
}
|
||
return config.qualities.reduce((prev, cur)=>Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev, 0);
|
||
} //# sourceMappingURL=find-closest-quality.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/compiled/picomatch/index.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
(()=>{
|
||
"use strict";
|
||
var t = {
|
||
170: (t, e, u)=>{
|
||
const n = u(510);
|
||
const isWindows = ()=>{
|
||
if (typeof navigator !== "undefined" && navigator.platform) {
|
||
const t = navigator.platform.toLowerCase();
|
||
return t === "win32" || t === "windows";
|
||
}
|
||
if (typeof __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"] !== "undefined" && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].platform) {
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].platform === "win32";
|
||
}
|
||
return false;
|
||
};
|
||
function picomatch(t, e, u = false) {
|
||
if (e && (e.windows === null || e.windows === undefined)) {
|
||
e = {
|
||
...e,
|
||
windows: isWindows()
|
||
};
|
||
}
|
||
return n(t, e, u);
|
||
}
|
||
Object.assign(picomatch, n);
|
||
t.exports = picomatch;
|
||
},
|
||
154: (t)=>{
|
||
const e = "\\\\/";
|
||
const u = `[^${e}]`;
|
||
const n = "\\.";
|
||
const o = "\\+";
|
||
const s = "\\?";
|
||
const r = "\\/";
|
||
const a = "(?=.)";
|
||
const i = "[^/]";
|
||
const c = `(?:${r}|$)`;
|
||
const p = `(?:^|${r})`;
|
||
const l = `${n}{1,2}${c}`;
|
||
const f = `(?!${n})`;
|
||
const A = `(?!${p}${l})`;
|
||
const _ = `(?!${n}{0,1}${c})`;
|
||
const R = `(?!${l})`;
|
||
const E = `[^.${r}]`;
|
||
const h = `${i}*?`;
|
||
const g = "/";
|
||
const b = {
|
||
DOT_LITERAL: n,
|
||
PLUS_LITERAL: o,
|
||
QMARK_LITERAL: s,
|
||
SLASH_LITERAL: r,
|
||
ONE_CHAR: a,
|
||
QMARK: i,
|
||
END_ANCHOR: c,
|
||
DOTS_SLASH: l,
|
||
NO_DOT: f,
|
||
NO_DOTS: A,
|
||
NO_DOT_SLASH: _,
|
||
NO_DOTS_SLASH: R,
|
||
QMARK_NO_DOT: E,
|
||
STAR: h,
|
||
START_ANCHOR: p,
|
||
SEP: g
|
||
};
|
||
const C = {
|
||
...b,
|
||
SLASH_LITERAL: `[${e}]`,
|
||
QMARK: u,
|
||
STAR: `${u}*?`,
|
||
DOTS_SLASH: `${n}{1,2}(?:[${e}]|$)`,
|
||
NO_DOT: `(?!${n})`,
|
||
NO_DOTS: `(?!(?:^|[${e}])${n}{1,2}(?:[${e}]|$))`,
|
||
NO_DOT_SLASH: `(?!${n}{0,1}(?:[${e}]|$))`,
|
||
NO_DOTS_SLASH: `(?!${n}{1,2}(?:[${e}]|$))`,
|
||
QMARK_NO_DOT: `[^.${e}]`,
|
||
START_ANCHOR: `(?:^|[${e}])`,
|
||
END_ANCHOR: `(?:[${e}]|$)`,
|
||
SEP: "\\"
|
||
};
|
||
const y = {
|
||
alnum: "a-zA-Z0-9",
|
||
alpha: "a-zA-Z",
|
||
ascii: "\\x00-\\x7F",
|
||
blank: " \\t",
|
||
cntrl: "\\x00-\\x1F\\x7F",
|
||
digit: "0-9",
|
||
graph: "\\x21-\\x7E",
|
||
lower: "a-z",
|
||
print: "\\x20-\\x7E ",
|
||
punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",
|
||
space: " \\t\\r\\n\\v\\f",
|
||
upper: "A-Z",
|
||
word: "A-Za-z0-9_",
|
||
xdigit: "A-Fa-f0-9"
|
||
};
|
||
t.exports = {
|
||
MAX_LENGTH: 1024 * 64,
|
||
POSIX_REGEX_SOURCE: y,
|
||
REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
|
||
REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
|
||
REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
|
||
REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
|
||
REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
|
||
REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
|
||
REPLACEMENTS: {
|
||
"***": "*",
|
||
"**/**": "**",
|
||
"**/**/**": "**"
|
||
},
|
||
CHAR_0: 48,
|
||
CHAR_9: 57,
|
||
CHAR_UPPERCASE_A: 65,
|
||
CHAR_LOWERCASE_A: 97,
|
||
CHAR_UPPERCASE_Z: 90,
|
||
CHAR_LOWERCASE_Z: 122,
|
||
CHAR_LEFT_PARENTHESES: 40,
|
||
CHAR_RIGHT_PARENTHESES: 41,
|
||
CHAR_ASTERISK: 42,
|
||
CHAR_AMPERSAND: 38,
|
||
CHAR_AT: 64,
|
||
CHAR_BACKWARD_SLASH: 92,
|
||
CHAR_CARRIAGE_RETURN: 13,
|
||
CHAR_CIRCUMFLEX_ACCENT: 94,
|
||
CHAR_COLON: 58,
|
||
CHAR_COMMA: 44,
|
||
CHAR_DOT: 46,
|
||
CHAR_DOUBLE_QUOTE: 34,
|
||
CHAR_EQUAL: 61,
|
||
CHAR_EXCLAMATION_MARK: 33,
|
||
CHAR_FORM_FEED: 12,
|
||
CHAR_FORWARD_SLASH: 47,
|
||
CHAR_GRAVE_ACCENT: 96,
|
||
CHAR_HASH: 35,
|
||
CHAR_HYPHEN_MINUS: 45,
|
||
CHAR_LEFT_ANGLE_BRACKET: 60,
|
||
CHAR_LEFT_CURLY_BRACE: 123,
|
||
CHAR_LEFT_SQUARE_BRACKET: 91,
|
||
CHAR_LINE_FEED: 10,
|
||
CHAR_NO_BREAK_SPACE: 160,
|
||
CHAR_PERCENT: 37,
|
||
CHAR_PLUS: 43,
|
||
CHAR_QUESTION_MARK: 63,
|
||
CHAR_RIGHT_ANGLE_BRACKET: 62,
|
||
CHAR_RIGHT_CURLY_BRACE: 125,
|
||
CHAR_RIGHT_SQUARE_BRACKET: 93,
|
||
CHAR_SEMICOLON: 59,
|
||
CHAR_SINGLE_QUOTE: 39,
|
||
CHAR_SPACE: 32,
|
||
CHAR_TAB: 9,
|
||
CHAR_UNDERSCORE: 95,
|
||
CHAR_VERTICAL_LINE: 124,
|
||
CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279,
|
||
extglobChars (t) {
|
||
return {
|
||
"!": {
|
||
type: "negate",
|
||
open: "(?:(?!(?:",
|
||
close: `))${t.STAR})`
|
||
},
|
||
"?": {
|
||
type: "qmark",
|
||
open: "(?:",
|
||
close: ")?"
|
||
},
|
||
"+": {
|
||
type: "plus",
|
||
open: "(?:",
|
||
close: ")+"
|
||
},
|
||
"*": {
|
||
type: "star",
|
||
open: "(?:",
|
||
close: ")*"
|
||
},
|
||
"@": {
|
||
type: "at",
|
||
open: "(?:",
|
||
close: ")"
|
||
}
|
||
};
|
||
},
|
||
globChars (t) {
|
||
return t === true ? C : b;
|
||
}
|
||
};
|
||
},
|
||
697: (t, e, u)=>{
|
||
const n = u(154);
|
||
const o = u(96);
|
||
const { MAX_LENGTH: s, POSIX_REGEX_SOURCE: r, REGEX_NON_SPECIAL_CHARS: a, REGEX_SPECIAL_CHARS_BACKREF: i, REPLACEMENTS: c } = n;
|
||
const expandRange = (t, e)=>{
|
||
if (typeof e.expandRange === "function") {
|
||
return e.expandRange(...t, e);
|
||
}
|
||
t.sort();
|
||
const u = `[${t.join("-")}]`;
|
||
try {
|
||
new RegExp(u);
|
||
} catch (e) {
|
||
return t.map((t)=>o.escapeRegex(t)).join("..");
|
||
}
|
||
return u;
|
||
};
|
||
const syntaxError = (t, e)=>`Missing ${t}: "${e}" - use "\\\\${e}" to match literal characters`;
|
||
const parse = (t, e)=>{
|
||
if (typeof t !== "string") {
|
||
throw new TypeError("Expected a string");
|
||
}
|
||
t = c[t] || t;
|
||
const u = {
|
||
...e
|
||
};
|
||
const p = typeof u.maxLength === "number" ? Math.min(s, u.maxLength) : s;
|
||
let l = t.length;
|
||
if (l > p) {
|
||
throw new SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${p}`);
|
||
}
|
||
const f = {
|
||
type: "bos",
|
||
value: "",
|
||
output: u.prepend || ""
|
||
};
|
||
const A = [
|
||
f
|
||
];
|
||
const _ = u.capture ? "" : "?:";
|
||
const R = n.globChars(u.windows);
|
||
const E = n.extglobChars(R);
|
||
const { DOT_LITERAL: h, PLUS_LITERAL: g, SLASH_LITERAL: b, ONE_CHAR: C, DOTS_SLASH: y, NO_DOT: $, NO_DOT_SLASH: x, NO_DOTS_SLASH: S, QMARK: H, QMARK_NO_DOT: v, STAR: d, START_ANCHOR: L } = R;
|
||
const globstar = (t)=>`(${_}(?:(?!${L}${t.dot ? y : h}).)*?)`;
|
||
const T = u.dot ? "" : $;
|
||
const O = u.dot ? H : v;
|
||
let k = u.bash === true ? globstar(u) : d;
|
||
if (u.capture) {
|
||
k = `(${k})`;
|
||
}
|
||
if (typeof u.noext === "boolean") {
|
||
u.noextglob = u.noext;
|
||
}
|
||
const m = {
|
||
input: t,
|
||
index: -1,
|
||
start: 0,
|
||
dot: u.dot === true,
|
||
consumed: "",
|
||
output: "",
|
||
prefix: "",
|
||
backtrack: false,
|
||
negated: false,
|
||
brackets: 0,
|
||
braces: 0,
|
||
parens: 0,
|
||
quotes: 0,
|
||
globstar: false,
|
||
tokens: A
|
||
};
|
||
t = o.removePrefix(t, m);
|
||
l = t.length;
|
||
const w = [];
|
||
const N = [];
|
||
const I = [];
|
||
let B = f;
|
||
let G;
|
||
const eos = ()=>m.index === l - 1;
|
||
const D = m.peek = (e = 1)=>t[m.index + e];
|
||
const M = m.advance = ()=>t[++m.index] || "";
|
||
const remaining = ()=>t.slice(m.index + 1);
|
||
const consume = (t = "", e = 0)=>{
|
||
m.consumed += t;
|
||
m.index += e;
|
||
};
|
||
const append = (t)=>{
|
||
m.output += t.output != null ? t.output : t.value;
|
||
consume(t.value);
|
||
};
|
||
const negate = ()=>{
|
||
let t = 1;
|
||
while(D() === "!" && (D(2) !== "(" || D(3) === "?")){
|
||
M();
|
||
m.start++;
|
||
t++;
|
||
}
|
||
if (t % 2 === 0) {
|
||
return false;
|
||
}
|
||
m.negated = true;
|
||
m.start++;
|
||
return true;
|
||
};
|
||
const increment = (t)=>{
|
||
m[t]++;
|
||
I.push(t);
|
||
};
|
||
const decrement = (t)=>{
|
||
m[t]--;
|
||
I.pop();
|
||
};
|
||
const push = (t)=>{
|
||
if (B.type === "globstar") {
|
||
const e = m.braces > 0 && (t.type === "comma" || t.type === "brace");
|
||
const u = t.extglob === true || w.length && (t.type === "pipe" || t.type === "paren");
|
||
if (t.type !== "slash" && t.type !== "paren" && !e && !u) {
|
||
m.output = m.output.slice(0, -B.output.length);
|
||
B.type = "star";
|
||
B.value = "*";
|
||
B.output = k;
|
||
m.output += B.output;
|
||
}
|
||
}
|
||
if (w.length && t.type !== "paren") {
|
||
w[w.length - 1].inner += t.value;
|
||
}
|
||
if (t.value || t.output) append(t);
|
||
if (B && B.type === "text" && t.type === "text") {
|
||
B.output = (B.output || B.value) + t.value;
|
||
B.value += t.value;
|
||
return;
|
||
}
|
||
t.prev = B;
|
||
A.push(t);
|
||
B = t;
|
||
};
|
||
const extglobOpen = (t, e)=>{
|
||
const n = {
|
||
...E[e],
|
||
conditions: 1,
|
||
inner: ""
|
||
};
|
||
n.prev = B;
|
||
n.parens = m.parens;
|
||
n.output = m.output;
|
||
const o = (u.capture ? "(" : "") + n.open;
|
||
increment("parens");
|
||
push({
|
||
type: t,
|
||
value: e,
|
||
output: m.output ? "" : C
|
||
});
|
||
push({
|
||
type: "paren",
|
||
extglob: true,
|
||
value: M(),
|
||
output: o
|
||
});
|
||
w.push(n);
|
||
};
|
||
const extglobClose = (t)=>{
|
||
let n = t.close + (u.capture ? ")" : "");
|
||
let o;
|
||
if (t.type === "negate") {
|
||
let s = k;
|
||
if (t.inner && t.inner.length > 1 && t.inner.includes("/")) {
|
||
s = globstar(u);
|
||
}
|
||
if (s !== k || eos() || /^\)+$/.test(remaining())) {
|
||
n = t.close = `)$))${s}`;
|
||
}
|
||
if (t.inner.includes("*") && (o = remaining()) && /^\.[^\\/.]+$/.test(o)) {
|
||
const u = parse(o, {
|
||
...e,
|
||
fastpaths: false
|
||
}).output;
|
||
n = t.close = `)${u})${s})`;
|
||
}
|
||
if (t.prev.type === "bos") {
|
||
m.negatedExtglob = true;
|
||
}
|
||
}
|
||
push({
|
||
type: "paren",
|
||
extglob: true,
|
||
value: G,
|
||
output: n
|
||
});
|
||
decrement("parens");
|
||
};
|
||
if (u.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(t)) {
|
||
let n = false;
|
||
let s = t.replace(i, (t, e, u, o, s, r)=>{
|
||
if (o === "\\") {
|
||
n = true;
|
||
return t;
|
||
}
|
||
if (o === "?") {
|
||
if (e) {
|
||
return e + o + (s ? H.repeat(s.length) : "");
|
||
}
|
||
if (r === 0) {
|
||
return O + (s ? H.repeat(s.length) : "");
|
||
}
|
||
return H.repeat(u.length);
|
||
}
|
||
if (o === ".") {
|
||
return h.repeat(u.length);
|
||
}
|
||
if (o === "*") {
|
||
if (e) {
|
||
return e + o + (s ? k : "");
|
||
}
|
||
return k;
|
||
}
|
||
return e ? t : `\\${t}`;
|
||
});
|
||
if (n === true) {
|
||
if (u.unescape === true) {
|
||
s = s.replace(/\\/g, "");
|
||
} else {
|
||
s = s.replace(/\\+/g, (t)=>t.length % 2 === 0 ? "\\\\" : t ? "\\" : "");
|
||
}
|
||
}
|
||
if (s === t && u.contains === true) {
|
||
m.output = t;
|
||
return m;
|
||
}
|
||
m.output = o.wrapOutput(s, m, e);
|
||
return m;
|
||
}
|
||
while(!eos()){
|
||
G = M();
|
||
if (G === "\0") {
|
||
continue;
|
||
}
|
||
if (G === "\\") {
|
||
const t = D();
|
||
if (t === "/" && u.bash !== true) {
|
||
continue;
|
||
}
|
||
if (t === "." || t === ";") {
|
||
continue;
|
||
}
|
||
if (!t) {
|
||
G += "\\";
|
||
push({
|
||
type: "text",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
const e = /^\\+/.exec(remaining());
|
||
let n = 0;
|
||
if (e && e[0].length > 2) {
|
||
n = e[0].length;
|
||
m.index += n;
|
||
if (n % 2 !== 0) {
|
||
G += "\\";
|
||
}
|
||
}
|
||
if (u.unescape === true) {
|
||
G = M();
|
||
} else {
|
||
G += M();
|
||
}
|
||
if (m.brackets === 0) {
|
||
push({
|
||
type: "text",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
}
|
||
if (m.brackets > 0 && (G !== "]" || B.value === "[" || B.value === "[^")) {
|
||
if (u.posix !== false && G === ":") {
|
||
const t = B.value.slice(1);
|
||
if (t.includes("[")) {
|
||
B.posix = true;
|
||
if (t.includes(":")) {
|
||
const t = B.value.lastIndexOf("[");
|
||
const e = B.value.slice(0, t);
|
||
const u = B.value.slice(t + 2);
|
||
const n = r[u];
|
||
if (n) {
|
||
B.value = e + n;
|
||
m.backtrack = true;
|
||
M();
|
||
if (!f.output && A.indexOf(B) === 1) {
|
||
f.output = C;
|
||
}
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (G === "[" && D() !== ":" || G === "-" && D() === "]") {
|
||
G = `\\${G}`;
|
||
}
|
||
if (G === "]" && (B.value === "[" || B.value === "[^")) {
|
||
G = `\\${G}`;
|
||
}
|
||
if (u.posix === true && G === "!" && B.value === "[") {
|
||
G = "^";
|
||
}
|
||
B.value += G;
|
||
append({
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (m.quotes === 1 && G !== '"') {
|
||
G = o.escapeRegex(G);
|
||
B.value += G;
|
||
append({
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (G === '"') {
|
||
m.quotes = m.quotes === 1 ? 0 : 1;
|
||
if (u.keepQuotes === true) {
|
||
push({
|
||
type: "text",
|
||
value: G
|
||
});
|
||
}
|
||
continue;
|
||
}
|
||
if (G === "(") {
|
||
increment("parens");
|
||
push({
|
||
type: "paren",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (G === ")") {
|
||
if (m.parens === 0 && u.strictBrackets === true) {
|
||
throw new SyntaxError(syntaxError("opening", "("));
|
||
}
|
||
const t = w[w.length - 1];
|
||
if (t && m.parens === t.parens + 1) {
|
||
extglobClose(w.pop());
|
||
continue;
|
||
}
|
||
push({
|
||
type: "paren",
|
||
value: G,
|
||
output: m.parens ? ")" : "\\)"
|
||
});
|
||
decrement("parens");
|
||
continue;
|
||
}
|
||
if (G === "[") {
|
||
if (u.nobracket === true || !remaining().includes("]")) {
|
||
if (u.nobracket !== true && u.strictBrackets === true) {
|
||
throw new SyntaxError(syntaxError("closing", "]"));
|
||
}
|
||
G = `\\${G}`;
|
||
} else {
|
||
increment("brackets");
|
||
}
|
||
push({
|
||
type: "bracket",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (G === "]") {
|
||
if (u.nobracket === true || B && B.type === "bracket" && B.value.length === 1) {
|
||
push({
|
||
type: "text",
|
||
value: G,
|
||
output: `\\${G}`
|
||
});
|
||
continue;
|
||
}
|
||
if (m.brackets === 0) {
|
||
if (u.strictBrackets === true) {
|
||
throw new SyntaxError(syntaxError("opening", "["));
|
||
}
|
||
push({
|
||
type: "text",
|
||
value: G,
|
||
output: `\\${G}`
|
||
});
|
||
continue;
|
||
}
|
||
decrement("brackets");
|
||
const t = B.value.slice(1);
|
||
if (B.posix !== true && t[0] === "^" && !t.includes("/")) {
|
||
G = `/${G}`;
|
||
}
|
||
B.value += G;
|
||
append({
|
||
value: G
|
||
});
|
||
if (u.literalBrackets === false || o.hasRegexChars(t)) {
|
||
continue;
|
||
}
|
||
const e = o.escapeRegex(B.value);
|
||
m.output = m.output.slice(0, -B.value.length);
|
||
if (u.literalBrackets === true) {
|
||
m.output += e;
|
||
B.value = e;
|
||
continue;
|
||
}
|
||
B.value = `(${_}${e}|${B.value})`;
|
||
m.output += B.value;
|
||
continue;
|
||
}
|
||
if (G === "{" && u.nobrace !== true) {
|
||
increment("braces");
|
||
const t = {
|
||
type: "brace",
|
||
value: G,
|
||
output: "(",
|
||
outputIndex: m.output.length,
|
||
tokensIndex: m.tokens.length
|
||
};
|
||
N.push(t);
|
||
push(t);
|
||
continue;
|
||
}
|
||
if (G === "}") {
|
||
const t = N[N.length - 1];
|
||
if (u.nobrace === true || !t) {
|
||
push({
|
||
type: "text",
|
||
value: G,
|
||
output: G
|
||
});
|
||
continue;
|
||
}
|
||
let e = ")";
|
||
if (t.dots === true) {
|
||
const t = A.slice();
|
||
const n = [];
|
||
for(let e = t.length - 1; e >= 0; e--){
|
||
A.pop();
|
||
if (t[e].type === "brace") {
|
||
break;
|
||
}
|
||
if (t[e].type !== "dots") {
|
||
n.unshift(t[e].value);
|
||
}
|
||
}
|
||
e = expandRange(n, u);
|
||
m.backtrack = true;
|
||
}
|
||
if (t.comma !== true && t.dots !== true) {
|
||
const u = m.output.slice(0, t.outputIndex);
|
||
const n = m.tokens.slice(t.tokensIndex);
|
||
t.value = t.output = "\\{";
|
||
G = e = "\\}";
|
||
m.output = u;
|
||
for (const t of n){
|
||
m.output += t.output || t.value;
|
||
}
|
||
}
|
||
push({
|
||
type: "brace",
|
||
value: G,
|
||
output: e
|
||
});
|
||
decrement("braces");
|
||
N.pop();
|
||
continue;
|
||
}
|
||
if (G === "|") {
|
||
if (w.length > 0) {
|
||
w[w.length - 1].conditions++;
|
||
}
|
||
push({
|
||
type: "text",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (G === ",") {
|
||
let t = G;
|
||
const e = N[N.length - 1];
|
||
if (e && I[I.length - 1] === "braces") {
|
||
e.comma = true;
|
||
t = "|";
|
||
}
|
||
push({
|
||
type: "comma",
|
||
value: G,
|
||
output: t
|
||
});
|
||
continue;
|
||
}
|
||
if (G === "/") {
|
||
if (B.type === "dot" && m.index === m.start + 1) {
|
||
m.start = m.index + 1;
|
||
m.consumed = "";
|
||
m.output = "";
|
||
A.pop();
|
||
B = f;
|
||
continue;
|
||
}
|
||
push({
|
||
type: "slash",
|
||
value: G,
|
||
output: b
|
||
});
|
||
continue;
|
||
}
|
||
if (G === ".") {
|
||
if (m.braces > 0 && B.type === "dot") {
|
||
if (B.value === ".") B.output = h;
|
||
const t = N[N.length - 1];
|
||
B.type = "dots";
|
||
B.output += G;
|
||
B.value += G;
|
||
t.dots = true;
|
||
continue;
|
||
}
|
||
if (m.braces + m.parens === 0 && B.type !== "bos" && B.type !== "slash") {
|
||
push({
|
||
type: "text",
|
||
value: G,
|
||
output: h
|
||
});
|
||
continue;
|
||
}
|
||
push({
|
||
type: "dot",
|
||
value: G,
|
||
output: h
|
||
});
|
||
continue;
|
||
}
|
||
if (G === "?") {
|
||
const t = B && B.value === "(";
|
||
if (!t && u.noextglob !== true && D() === "(" && D(2) !== "?") {
|
||
extglobOpen("qmark", G);
|
||
continue;
|
||
}
|
||
if (B && B.type === "paren") {
|
||
const t = D();
|
||
let e = G;
|
||
if (B.value === "(" && !/[!=<:]/.test(t) || t === "<" && !/<([!=]|\w+>)/.test(remaining())) {
|
||
e = `\\${G}`;
|
||
}
|
||
push({
|
||
type: "text",
|
||
value: G,
|
||
output: e
|
||
});
|
||
continue;
|
||
}
|
||
if (u.dot !== true && (B.type === "slash" || B.type === "bos")) {
|
||
push({
|
||
type: "qmark",
|
||
value: G,
|
||
output: v
|
||
});
|
||
continue;
|
||
}
|
||
push({
|
||
type: "qmark",
|
||
value: G,
|
||
output: H
|
||
});
|
||
continue;
|
||
}
|
||
if (G === "!") {
|
||
if (u.noextglob !== true && D() === "(") {
|
||
if (D(2) !== "?" || !/[!=<:]/.test(D(3))) {
|
||
extglobOpen("negate", G);
|
||
continue;
|
||
}
|
||
}
|
||
if (u.nonegate !== true && m.index === 0) {
|
||
negate();
|
||
continue;
|
||
}
|
||
}
|
||
if (G === "+") {
|
||
if (u.noextglob !== true && D() === "(" && D(2) !== "?") {
|
||
extglobOpen("plus", G);
|
||
continue;
|
||
}
|
||
if (B && B.value === "(" || u.regex === false) {
|
||
push({
|
||
type: "plus",
|
||
value: G,
|
||
output: g
|
||
});
|
||
continue;
|
||
}
|
||
if (B && (B.type === "bracket" || B.type === "paren" || B.type === "brace") || m.parens > 0) {
|
||
push({
|
||
type: "plus",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
push({
|
||
type: "plus",
|
||
value: g
|
||
});
|
||
continue;
|
||
}
|
||
if (G === "@") {
|
||
if (u.noextglob !== true && D() === "(" && D(2) !== "?") {
|
||
push({
|
||
type: "at",
|
||
extglob: true,
|
||
value: G,
|
||
output: ""
|
||
});
|
||
continue;
|
||
}
|
||
push({
|
||
type: "text",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (G !== "*") {
|
||
if (G === "$" || G === "^") {
|
||
G = `\\${G}`;
|
||
}
|
||
const t = a.exec(remaining());
|
||
if (t) {
|
||
G += t[0];
|
||
m.index += t[0].length;
|
||
}
|
||
push({
|
||
type: "text",
|
||
value: G
|
||
});
|
||
continue;
|
||
}
|
||
if (B && (B.type === "globstar" || B.star === true)) {
|
||
B.type = "star";
|
||
B.star = true;
|
||
B.value += G;
|
||
B.output = k;
|
||
m.backtrack = true;
|
||
m.globstar = true;
|
||
consume(G);
|
||
continue;
|
||
}
|
||
let e = remaining();
|
||
if (u.noextglob !== true && /^\([^?]/.test(e)) {
|
||
extglobOpen("star", G);
|
||
continue;
|
||
}
|
||
if (B.type === "star") {
|
||
if (u.noglobstar === true) {
|
||
consume(G);
|
||
continue;
|
||
}
|
||
const n = B.prev;
|
||
const o = n.prev;
|
||
const s = n.type === "slash" || n.type === "bos";
|
||
const r = o && (o.type === "star" || o.type === "globstar");
|
||
if (u.bash === true && (!s || e[0] && e[0] !== "/")) {
|
||
push({
|
||
type: "star",
|
||
value: G,
|
||
output: ""
|
||
});
|
||
continue;
|
||
}
|
||
const a = m.braces > 0 && (n.type === "comma" || n.type === "brace");
|
||
const i = w.length && (n.type === "pipe" || n.type === "paren");
|
||
if (!s && n.type !== "paren" && !a && !i) {
|
||
push({
|
||
type: "star",
|
||
value: G,
|
||
output: ""
|
||
});
|
||
continue;
|
||
}
|
||
while(e.slice(0, 3) === "/**"){
|
||
const u = t[m.index + 4];
|
||
if (u && u !== "/") {
|
||
break;
|
||
}
|
||
e = e.slice(3);
|
||
consume("/**", 3);
|
||
}
|
||
if (n.type === "bos" && eos()) {
|
||
B.type = "globstar";
|
||
B.value += G;
|
||
B.output = globstar(u);
|
||
m.output = B.output;
|
||
m.globstar = true;
|
||
consume(G);
|
||
continue;
|
||
}
|
||
if (n.type === "slash" && n.prev.type !== "bos" && !r && eos()) {
|
||
m.output = m.output.slice(0, -(n.output + B.output).length);
|
||
n.output = `(?:${n.output}`;
|
||
B.type = "globstar";
|
||
B.output = globstar(u) + (u.strictSlashes ? ")" : "|$)");
|
||
B.value += G;
|
||
m.globstar = true;
|
||
m.output += n.output + B.output;
|
||
consume(G);
|
||
continue;
|
||
}
|
||
if (n.type === "slash" && n.prev.type !== "bos" && e[0] === "/") {
|
||
const t = e[1] !== void 0 ? "|$" : "";
|
||
m.output = m.output.slice(0, -(n.output + B.output).length);
|
||
n.output = `(?:${n.output}`;
|
||
B.type = "globstar";
|
||
B.output = `${globstar(u)}${b}|${b}${t})`;
|
||
B.value += G;
|
||
m.output += n.output + B.output;
|
||
m.globstar = true;
|
||
consume(G + M());
|
||
push({
|
||
type: "slash",
|
||
value: "/",
|
||
output: ""
|
||
});
|
||
continue;
|
||
}
|
||
if (n.type === "bos" && e[0] === "/") {
|
||
B.type = "globstar";
|
||
B.value += G;
|
||
B.output = `(?:^|${b}|${globstar(u)}${b})`;
|
||
m.output = B.output;
|
||
m.globstar = true;
|
||
consume(G + M());
|
||
push({
|
||
type: "slash",
|
||
value: "/",
|
||
output: ""
|
||
});
|
||
continue;
|
||
}
|
||
m.output = m.output.slice(0, -B.output.length);
|
||
B.type = "globstar";
|
||
B.output = globstar(u);
|
||
B.value += G;
|
||
m.output += B.output;
|
||
m.globstar = true;
|
||
consume(G);
|
||
continue;
|
||
}
|
||
const n = {
|
||
type: "star",
|
||
value: G,
|
||
output: k
|
||
};
|
||
if (u.bash === true) {
|
||
n.output = ".*?";
|
||
if (B.type === "bos" || B.type === "slash") {
|
||
n.output = T + n.output;
|
||
}
|
||
push(n);
|
||
continue;
|
||
}
|
||
if (B && (B.type === "bracket" || B.type === "paren") && u.regex === true) {
|
||
n.output = G;
|
||
push(n);
|
||
continue;
|
||
}
|
||
if (m.index === m.start || B.type === "slash" || B.type === "dot") {
|
||
if (B.type === "dot") {
|
||
m.output += x;
|
||
B.output += x;
|
||
} else if (u.dot === true) {
|
||
m.output += S;
|
||
B.output += S;
|
||
} else {
|
||
m.output += T;
|
||
B.output += T;
|
||
}
|
||
if (D() !== "*") {
|
||
m.output += C;
|
||
B.output += C;
|
||
}
|
||
}
|
||
push(n);
|
||
}
|
||
while(m.brackets > 0){
|
||
if (u.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "]"));
|
||
m.output = o.escapeLast(m.output, "[");
|
||
decrement("brackets");
|
||
}
|
||
while(m.parens > 0){
|
||
if (u.strictBrackets === true) throw new SyntaxError(syntaxError("closing", ")"));
|
||
m.output = o.escapeLast(m.output, "(");
|
||
decrement("parens");
|
||
}
|
||
while(m.braces > 0){
|
||
if (u.strictBrackets === true) throw new SyntaxError(syntaxError("closing", "}"));
|
||
m.output = o.escapeLast(m.output, "{");
|
||
decrement("braces");
|
||
}
|
||
if (u.strictSlashes !== true && (B.type === "star" || B.type === "bracket")) {
|
||
push({
|
||
type: "maybe_slash",
|
||
value: "",
|
||
output: `${b}?`
|
||
});
|
||
}
|
||
if (m.backtrack === true) {
|
||
m.output = "";
|
||
for (const t of m.tokens){
|
||
m.output += t.output != null ? t.output : t.value;
|
||
if (t.suffix) {
|
||
m.output += t.suffix;
|
||
}
|
||
}
|
||
}
|
||
return m;
|
||
};
|
||
parse.fastpaths = (t, e)=>{
|
||
const u = {
|
||
...e
|
||
};
|
||
const r = typeof u.maxLength === "number" ? Math.min(s, u.maxLength) : s;
|
||
const a = t.length;
|
||
if (a > r) {
|
||
throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${r}`);
|
||
}
|
||
t = c[t] || t;
|
||
const { DOT_LITERAL: i, SLASH_LITERAL: p, ONE_CHAR: l, DOTS_SLASH: f, NO_DOT: A, NO_DOTS: _, NO_DOTS_SLASH: R, STAR: E, START_ANCHOR: h } = n.globChars(u.windows);
|
||
const g = u.dot ? _ : A;
|
||
const b = u.dot ? R : A;
|
||
const C = u.capture ? "" : "?:";
|
||
const y = {
|
||
negated: false,
|
||
prefix: ""
|
||
};
|
||
let $ = u.bash === true ? ".*?" : E;
|
||
if (u.capture) {
|
||
$ = `(${$})`;
|
||
}
|
||
const globstar = (t)=>{
|
||
if (t.noglobstar === true) return $;
|
||
return `(${C}(?:(?!${h}${t.dot ? f : i}).)*?)`;
|
||
};
|
||
const create = (t)=>{
|
||
switch(t){
|
||
case "*":
|
||
return `${g}${l}${$}`;
|
||
case ".*":
|
||
return `${i}${l}${$}`;
|
||
case "*.*":
|
||
return `${g}${$}${i}${l}${$}`;
|
||
case "*/*":
|
||
return `${g}${$}${p}${l}${b}${$}`;
|
||
case "**":
|
||
return g + globstar(u);
|
||
case "**/*":
|
||
return `(?:${g}${globstar(u)}${p})?${b}${l}${$}`;
|
||
case "**/*.*":
|
||
return `(?:${g}${globstar(u)}${p})?${b}${$}${i}${l}${$}`;
|
||
case "**/.*":
|
||
return `(?:${g}${globstar(u)}${p})?${i}${l}${$}`;
|
||
default:
|
||
{
|
||
const e = /^(.*?)\.(\w+)$/.exec(t);
|
||
if (!e) return;
|
||
const u = create(e[1]);
|
||
if (!u) return;
|
||
return u + i + e[2];
|
||
}
|
||
}
|
||
};
|
||
const x = o.removePrefix(t, y);
|
||
let S = create(x);
|
||
if (S && u.strictSlashes !== true) {
|
||
S += `${p}?`;
|
||
}
|
||
return S;
|
||
};
|
||
t.exports = parse;
|
||
},
|
||
510: (t, e, u)=>{
|
||
const n = u(716);
|
||
const o = u(697);
|
||
const s = u(96);
|
||
const r = u(154);
|
||
const isObject = (t)=>t && typeof t === "object" && !Array.isArray(t);
|
||
const picomatch = (t, e, u = false)=>{
|
||
if (Array.isArray(t)) {
|
||
const n = t.map((t)=>picomatch(t, e, u));
|
||
const arrayMatcher = (t)=>{
|
||
for (const e of n){
|
||
const u = e(t);
|
||
if (u) return u;
|
||
}
|
||
return false;
|
||
};
|
||
return arrayMatcher;
|
||
}
|
||
const n = isObject(t) && t.tokens && t.input;
|
||
if (t === "" || typeof t !== "string" && !n) {
|
||
throw new TypeError("Expected pattern to be a non-empty string");
|
||
}
|
||
const o = e || {};
|
||
const s = o.windows;
|
||
const r = n ? picomatch.compileRe(t, e) : picomatch.makeRe(t, e, false, true);
|
||
const a = r.state;
|
||
delete r.state;
|
||
let isIgnored = ()=>false;
|
||
if (o.ignore) {
|
||
const t = {
|
||
...e,
|
||
ignore: null,
|
||
onMatch: null,
|
||
onResult: null
|
||
};
|
||
isIgnored = picomatch(o.ignore, t, u);
|
||
}
|
||
const matcher = (u, n = false)=>{
|
||
const { isMatch: i, match: c, output: p } = picomatch.test(u, r, e, {
|
||
glob: t,
|
||
posix: s
|
||
});
|
||
const l = {
|
||
glob: t,
|
||
state: a,
|
||
regex: r,
|
||
posix: s,
|
||
input: u,
|
||
output: p,
|
||
match: c,
|
||
isMatch: i
|
||
};
|
||
if (typeof o.onResult === "function") {
|
||
o.onResult(l);
|
||
}
|
||
if (i === false) {
|
||
l.isMatch = false;
|
||
return n ? l : false;
|
||
}
|
||
if (isIgnored(u)) {
|
||
if (typeof o.onIgnore === "function") {
|
||
o.onIgnore(l);
|
||
}
|
||
l.isMatch = false;
|
||
return n ? l : false;
|
||
}
|
||
if (typeof o.onMatch === "function") {
|
||
o.onMatch(l);
|
||
}
|
||
return n ? l : true;
|
||
};
|
||
if (u) {
|
||
matcher.state = a;
|
||
}
|
||
return matcher;
|
||
};
|
||
picomatch.test = (t, e, u, { glob: n, posix: o } = {})=>{
|
||
if (typeof t !== "string") {
|
||
throw new TypeError("Expected input to be a string");
|
||
}
|
||
if (t === "") {
|
||
return {
|
||
isMatch: false,
|
||
output: ""
|
||
};
|
||
}
|
||
const r = u || {};
|
||
const a = r.format || (o ? s.toPosixSlashes : null);
|
||
let i = t === n;
|
||
let c = i && a ? a(t) : t;
|
||
if (i === false) {
|
||
c = a ? a(t) : t;
|
||
i = c === n;
|
||
}
|
||
if (i === false || r.capture === true) {
|
||
if (r.matchBase === true || r.basename === true) {
|
||
i = picomatch.matchBase(t, e, u, o);
|
||
} else {
|
||
i = e.exec(c);
|
||
}
|
||
}
|
||
return {
|
||
isMatch: Boolean(i),
|
||
match: i,
|
||
output: c
|
||
};
|
||
};
|
||
picomatch.matchBase = (t, e, u)=>{
|
||
const n = e instanceof RegExp ? e : picomatch.makeRe(e, u);
|
||
return n.test(s.basename(t));
|
||
};
|
||
picomatch.isMatch = (t, e, u)=>picomatch(e, u)(t);
|
||
picomatch.parse = (t, e)=>{
|
||
if (Array.isArray(t)) return t.map((t)=>picomatch.parse(t, e));
|
||
return o(t, {
|
||
...e,
|
||
fastpaths: false
|
||
});
|
||
};
|
||
picomatch.scan = (t, e)=>n(t, e);
|
||
picomatch.compileRe = (t, e, u = false, n = false)=>{
|
||
if (u === true) {
|
||
return t.output;
|
||
}
|
||
const o = e || {};
|
||
const s = o.contains ? "" : "^";
|
||
const r = o.contains ? "" : "$";
|
||
let a = `${s}(?:${t.output})${r}`;
|
||
if (t && t.negated === true) {
|
||
a = `^(?!${a}).*$`;
|
||
}
|
||
const i = picomatch.toRegex(a, e);
|
||
if (n === true) {
|
||
i.state = t;
|
||
}
|
||
return i;
|
||
};
|
||
picomatch.makeRe = (t, e = {}, u = false, n = false)=>{
|
||
if (!t || typeof t !== "string") {
|
||
throw new TypeError("Expected a non-empty string");
|
||
}
|
||
let s = {
|
||
negated: false,
|
||
fastpaths: true
|
||
};
|
||
if (e.fastpaths !== false && (t[0] === "." || t[0] === "*")) {
|
||
s.output = o.fastpaths(t, e);
|
||
}
|
||
if (!s.output) {
|
||
s = o(t, e);
|
||
}
|
||
return picomatch.compileRe(s, e, u, n);
|
||
};
|
||
picomatch.toRegex = (t, e)=>{
|
||
try {
|
||
const u = e || {};
|
||
return new RegExp(t, u.flags || (u.nocase ? "i" : ""));
|
||
} catch (t) {
|
||
if (e && e.debug === true) throw t;
|
||
return /$^/;
|
||
}
|
||
};
|
||
picomatch.constants = r;
|
||
t.exports = picomatch;
|
||
},
|
||
716: (t, e, u)=>{
|
||
const n = u(96);
|
||
const { CHAR_ASTERISK: o, CHAR_AT: s, CHAR_BACKWARD_SLASH: r, CHAR_COMMA: a, CHAR_DOT: i, CHAR_EXCLAMATION_MARK: c, CHAR_FORWARD_SLASH: p, CHAR_LEFT_CURLY_BRACE: l, CHAR_LEFT_PARENTHESES: f, CHAR_LEFT_SQUARE_BRACKET: A, CHAR_PLUS: _, CHAR_QUESTION_MARK: R, CHAR_RIGHT_CURLY_BRACE: E, CHAR_RIGHT_PARENTHESES: h, CHAR_RIGHT_SQUARE_BRACKET: g } = u(154);
|
||
const isPathSeparator = (t)=>t === p || t === r;
|
||
const depth = (t)=>{
|
||
if (t.isPrefix !== true) {
|
||
t.depth = t.isGlobstar ? Infinity : 1;
|
||
}
|
||
};
|
||
const scan = (t, e)=>{
|
||
const u = e || {};
|
||
const b = t.length - 1;
|
||
const C = u.parts === true || u.scanToEnd === true;
|
||
const y = [];
|
||
const $ = [];
|
||
const x = [];
|
||
let S = t;
|
||
let H = -1;
|
||
let v = 0;
|
||
let d = 0;
|
||
let L = false;
|
||
let T = false;
|
||
let O = false;
|
||
let k = false;
|
||
let m = false;
|
||
let w = false;
|
||
let N = false;
|
||
let I = false;
|
||
let B = false;
|
||
let G = false;
|
||
let D = 0;
|
||
let M;
|
||
let P;
|
||
let K = {
|
||
value: "",
|
||
depth: 0,
|
||
isGlob: false
|
||
};
|
||
const eos = ()=>H >= b;
|
||
const peek = ()=>S.charCodeAt(H + 1);
|
||
const advance = ()=>{
|
||
M = P;
|
||
return S.charCodeAt(++H);
|
||
};
|
||
while(H < b){
|
||
P = advance();
|
||
let t;
|
||
if (P === r) {
|
||
N = K.backslashes = true;
|
||
P = advance();
|
||
if (P === l) {
|
||
w = true;
|
||
}
|
||
continue;
|
||
}
|
||
if (w === true || P === l) {
|
||
D++;
|
||
while(eos() !== true && (P = advance())){
|
||
if (P === r) {
|
||
N = K.backslashes = true;
|
||
advance();
|
||
continue;
|
||
}
|
||
if (P === l) {
|
||
D++;
|
||
continue;
|
||
}
|
||
if (w !== true && P === i && (P = advance()) === i) {
|
||
L = K.isBrace = true;
|
||
O = K.isGlob = true;
|
||
G = true;
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (w !== true && P === a) {
|
||
L = K.isBrace = true;
|
||
O = K.isGlob = true;
|
||
G = true;
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (P === E) {
|
||
D--;
|
||
if (D === 0) {
|
||
w = false;
|
||
L = K.isBrace = true;
|
||
G = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (P === p) {
|
||
y.push(H);
|
||
$.push(K);
|
||
K = {
|
||
value: "",
|
||
depth: 0,
|
||
isGlob: false
|
||
};
|
||
if (G === true) continue;
|
||
if (M === i && H === v + 1) {
|
||
v += 2;
|
||
continue;
|
||
}
|
||
d = H + 1;
|
||
continue;
|
||
}
|
||
if (u.noext !== true) {
|
||
const t = P === _ || P === s || P === o || P === R || P === c;
|
||
if (t === true && peek() === f) {
|
||
O = K.isGlob = true;
|
||
k = K.isExtglob = true;
|
||
G = true;
|
||
if (P === c && H === v) {
|
||
B = true;
|
||
}
|
||
if (C === true) {
|
||
while(eos() !== true && (P = advance())){
|
||
if (P === r) {
|
||
N = K.backslashes = true;
|
||
P = advance();
|
||
continue;
|
||
}
|
||
if (P === h) {
|
||
O = K.isGlob = true;
|
||
G = true;
|
||
break;
|
||
}
|
||
}
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
if (P === o) {
|
||
if (M === o) m = K.isGlobstar = true;
|
||
O = K.isGlob = true;
|
||
G = true;
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (P === R) {
|
||
O = K.isGlob = true;
|
||
G = true;
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (P === A) {
|
||
while(eos() !== true && (t = advance())){
|
||
if (t === r) {
|
||
N = K.backslashes = true;
|
||
advance();
|
||
continue;
|
||
}
|
||
if (t === g) {
|
||
T = K.isBracket = true;
|
||
O = K.isGlob = true;
|
||
G = true;
|
||
break;
|
||
}
|
||
}
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (u.nonegate !== true && P === c && H === v) {
|
||
I = K.negated = true;
|
||
v++;
|
||
continue;
|
||
}
|
||
if (u.noparen !== true && P === f) {
|
||
O = K.isGlob = true;
|
||
if (C === true) {
|
||
while(eos() !== true && (P = advance())){
|
||
if (P === f) {
|
||
N = K.backslashes = true;
|
||
P = advance();
|
||
continue;
|
||
}
|
||
if (P === h) {
|
||
G = true;
|
||
break;
|
||
}
|
||
}
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if (O === true) {
|
||
G = true;
|
||
if (C === true) {
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
if (u.noext === true) {
|
||
k = false;
|
||
O = false;
|
||
}
|
||
let U = S;
|
||
let X = "";
|
||
let F = "";
|
||
if (v > 0) {
|
||
X = S.slice(0, v);
|
||
S = S.slice(v);
|
||
d -= v;
|
||
}
|
||
if (U && O === true && d > 0) {
|
||
U = S.slice(0, d);
|
||
F = S.slice(d);
|
||
} else if (O === true) {
|
||
U = "";
|
||
F = S;
|
||
} else {
|
||
U = S;
|
||
}
|
||
if (U && U !== "" && U !== "/" && U !== S) {
|
||
if (isPathSeparator(U.charCodeAt(U.length - 1))) {
|
||
U = U.slice(0, -1);
|
||
}
|
||
}
|
||
if (u.unescape === true) {
|
||
if (F) F = n.removeBackslashes(F);
|
||
if (U && N === true) {
|
||
U = n.removeBackslashes(U);
|
||
}
|
||
}
|
||
const Q = {
|
||
prefix: X,
|
||
input: t,
|
||
start: v,
|
||
base: U,
|
||
glob: F,
|
||
isBrace: L,
|
||
isBracket: T,
|
||
isGlob: O,
|
||
isExtglob: k,
|
||
isGlobstar: m,
|
||
negated: I,
|
||
negatedExtglob: B
|
||
};
|
||
if (u.tokens === true) {
|
||
Q.maxDepth = 0;
|
||
if (!isPathSeparator(P)) {
|
||
$.push(K);
|
||
}
|
||
Q.tokens = $;
|
||
}
|
||
if (u.parts === true || u.tokens === true) {
|
||
let e;
|
||
for(let n = 0; n < y.length; n++){
|
||
const o = e ? e + 1 : v;
|
||
const s = y[n];
|
||
const r = t.slice(o, s);
|
||
if (u.tokens) {
|
||
if (n === 0 && v !== 0) {
|
||
$[n].isPrefix = true;
|
||
$[n].value = X;
|
||
} else {
|
||
$[n].value = r;
|
||
}
|
||
depth($[n]);
|
||
Q.maxDepth += $[n].depth;
|
||
}
|
||
if (n !== 0 || r !== "") {
|
||
x.push(r);
|
||
}
|
||
e = s;
|
||
}
|
||
if (e && e + 1 < t.length) {
|
||
const n = t.slice(e + 1);
|
||
x.push(n);
|
||
if (u.tokens) {
|
||
$[$.length - 1].value = n;
|
||
depth($[$.length - 1]);
|
||
Q.maxDepth += $[$.length - 1].depth;
|
||
}
|
||
}
|
||
Q.slashes = y;
|
||
Q.parts = x;
|
||
}
|
||
return Q;
|
||
};
|
||
t.exports = scan;
|
||
},
|
||
96: (t, e, u)=>{
|
||
const { REGEX_BACKSLASH: n, REGEX_REMOVE_BACKSLASH: o, REGEX_SPECIAL_CHARS: s, REGEX_SPECIAL_CHARS_GLOBAL: r } = u(154);
|
||
e.isObject = (t)=>t !== null && typeof t === "object" && !Array.isArray(t);
|
||
e.hasRegexChars = (t)=>s.test(t);
|
||
e.isRegexChar = (t)=>t.length === 1 && e.hasRegexChars(t);
|
||
e.escapeRegex = (t)=>t.replace(r, "\\$1");
|
||
e.toPosixSlashes = (t)=>t.replace(n, "/");
|
||
e.removeBackslashes = (t)=>t.replace(o, (t)=>t === "\\" ? "" : t);
|
||
e.escapeLast = (t, u, n)=>{
|
||
const o = t.lastIndexOf(u, n);
|
||
if (o === -1) return t;
|
||
if (t[o - 1] === "\\") return e.escapeLast(t, u, o - 1);
|
||
return `${t.slice(0, o)}\\${t.slice(o)}`;
|
||
};
|
||
e.removePrefix = (t, e = {})=>{
|
||
let u = t;
|
||
if (u.startsWith("./")) {
|
||
u = u.slice(2);
|
||
e.prefix = "./";
|
||
}
|
||
return u;
|
||
};
|
||
e.wrapOutput = (t, e = {}, u = {})=>{
|
||
const n = u.contains ? "" : "^";
|
||
const o = u.contains ? "" : "$";
|
||
let s = `${n}(?:${t})${o}`;
|
||
if (e.negated === true) {
|
||
s = `(?:^(?!${s}).*$)`;
|
||
}
|
||
return s;
|
||
};
|
||
e.basename = (t, { windows: e } = {})=>{
|
||
const u = t.split(e ? /[\\/]/ : "/");
|
||
const n = u[u.length - 1];
|
||
if (n === "") {
|
||
return u[u.length - 2];
|
||
}
|
||
return n;
|
||
};
|
||
}
|
||
};
|
||
var e = {};
|
||
function __nccwpck_require__(u) {
|
||
var n = e[u];
|
||
if (n !== undefined) {
|
||
return n.exports;
|
||
}
|
||
var o = e[u] = {
|
||
exports: {}
|
||
};
|
||
var s = true;
|
||
try {
|
||
t[u](o, o.exports, __nccwpck_require__);
|
||
s = false;
|
||
} finally{
|
||
if (s) delete e[u];
|
||
}
|
||
return o.exports;
|
||
}
|
||
if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/picomatch") + "/";
|
||
var u = __nccwpck_require__(170);
|
||
module.exports = u;
|
||
})();
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/match-local-pattern.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
hasLocalMatch: null,
|
||
matchLocalPattern: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
hasLocalMatch: function() {
|
||
return hasLocalMatch;
|
||
},
|
||
matchLocalPattern: function() {
|
||
return matchLocalPattern;
|
||
}
|
||
});
|
||
const _picomatch = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/picomatch/index.js [app-client] (ecmascript)");
|
||
function matchLocalPattern(pattern, url) {
|
||
if (pattern.search !== undefined) {
|
||
if (pattern.search !== url.search) {
|
||
return false;
|
||
}
|
||
}
|
||
if (!(0, _picomatch.makeRe)(pattern.pathname ?? '**', {
|
||
dot: true
|
||
}).test(url.pathname)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function hasLocalMatch(localPatterns, urlPathAndQuery) {
|
||
if (!localPatterns) {
|
||
// if the user didn't define "localPatterns", we allow all local images
|
||
return true;
|
||
}
|
||
const url = new URL(urlPathAndQuery, 'http://n');
|
||
return localPatterns.some((p)=>matchLocalPattern(p, url));
|
||
} //# sourceMappingURL=match-local-pattern.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/match-remote-pattern.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
hasRemoteMatch: null,
|
||
matchRemotePattern: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
hasRemoteMatch: function() {
|
||
return hasRemoteMatch;
|
||
},
|
||
matchRemotePattern: function() {
|
||
return matchRemotePattern;
|
||
}
|
||
});
|
||
const _picomatch = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/picomatch/index.js [app-client] (ecmascript)");
|
||
function matchRemotePattern(pattern, url) {
|
||
if (pattern.protocol !== undefined) {
|
||
if (pattern.protocol.replace(/:$/, '') !== url.protocol.replace(/:$/, '')) {
|
||
return false;
|
||
}
|
||
}
|
||
if (pattern.port !== undefined) {
|
||
if (pattern.port !== url.port) {
|
||
return false;
|
||
}
|
||
}
|
||
if (pattern.hostname === undefined) {
|
||
throw Object.defineProperty(new Error(`Pattern should define hostname but found\n${JSON.stringify(pattern)}`), "__NEXT_ERROR_CODE", {
|
||
value: "E410",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
} else {
|
||
if (!(0, _picomatch.makeRe)(pattern.hostname).test(url.hostname)) {
|
||
return false;
|
||
}
|
||
}
|
||
if (pattern.search !== undefined) {
|
||
if (pattern.search !== url.search) {
|
||
return false;
|
||
}
|
||
}
|
||
// Should be the same as writeImagesManifest()
|
||
if (!(0, _picomatch.makeRe)(pattern.pathname ?? '**', {
|
||
dot: true
|
||
}).test(url.pathname)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
function hasRemoteMatch(domains, remotePatterns, url) {
|
||
return domains.some((domain)=>url.hostname === domain) || remotePatterns.some((p)=>matchRemotePattern(p, url));
|
||
} //# sourceMappingURL=match-remote-pattern.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/image-loader.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "default", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return _default;
|
||
}
|
||
});
|
||
const _findclosestquality = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/find-closest-quality.js [app-client] (ecmascript)");
|
||
function defaultLoader({ config, src, width, quality }) {
|
||
if (src.startsWith('/') && src.includes('?') && config.localPatterns?.length === 1 && config.localPatterns[0].pathname === '**' && config.localPatterns[0].search === '') {
|
||
throw Object.defineProperty(new Error(`Image with src "${src}" is using a query string which is not configured in images.localPatterns.` + `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`), "__NEXT_ERROR_CODE", {
|
||
value: "E871",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
const missingValues = [];
|
||
// these should always be provided but make sure they are
|
||
if (!src) missingValues.push('src');
|
||
if (!width) missingValues.push('width');
|
||
if (missingValues.length > 0) {
|
||
throw Object.defineProperty(new Error(`Next Image Optimization requires ${missingValues.join(', ')} to be provided. Make sure you pass them as props to the \`next/image\` component. Received: ${JSON.stringify({
|
||
src,
|
||
width,
|
||
quality
|
||
})}`), "__NEXT_ERROR_CODE", {
|
||
value: "E188",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (src.startsWith('//')) {
|
||
throw Object.defineProperty(new Error(`Failed to parse src "${src}" on \`next/image\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`), "__NEXT_ERROR_CODE", {
|
||
value: "E360",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (src.startsWith('/') && config.localPatterns) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
// We use dynamic require because this should only error in development
|
||
const { hasLocalMatch } = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/match-local-pattern.js [app-client] (ecmascript)");
|
||
if (!hasLocalMatch(config.localPatterns, src)) {
|
||
throw Object.defineProperty(new Error(`Invalid src prop (${src}) on \`next/image\` does not match \`images.localPatterns\` configured in your \`next.config.js\`\n` + `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`), "__NEXT_ERROR_CODE", {
|
||
value: "E426",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
if (!src.startsWith('/') && (config.domains || config.remotePatterns)) {
|
||
let parsedSrc;
|
||
try {
|
||
parsedSrc = new URL(src);
|
||
} catch (err) {
|
||
console.error(err);
|
||
throw Object.defineProperty(new Error(`Failed to parse src "${src}" on \`next/image\`, if using relative image it must start with a leading slash "/" or be an absolute URL (http:// or https://)`), "__NEXT_ERROR_CODE", {
|
||
value: "E63",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
// We use dynamic require because this should only error in development
|
||
const { hasRemoteMatch } = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/match-remote-pattern.js [app-client] (ecmascript)");
|
||
if (!hasRemoteMatch(config.domains, config.remotePatterns, parsedSrc)) {
|
||
throw Object.defineProperty(new Error(`Invalid src prop (${src}) on \`next/image\`, hostname "${parsedSrc.hostname}" is not configured under images in your \`next.config.js\`\n` + `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host`), "__NEXT_ERROR_CODE", {
|
||
value: "E231",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const q = (0, _findclosestquality.findClosestQuality)(quality, config);
|
||
return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}${src.startsWith('/_next/static/media/') && ("TURBOPACK compile-time value", false) ? "TURBOPACK unreachable" : ''}`;
|
||
}
|
||
// We use this to determine if the import is the default loader
|
||
// or a custom loader defined by the user in next.config.js
|
||
defaultLoader.__next_img_default = true;
|
||
const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/client/image-component.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
'use client';
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "Image", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return Image;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [app-client] (ecmascript)");
|
||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-client] (ecmascript)");
|
||
const _jsxruntime = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/jsx-runtime.js [app-client] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"));
|
||
const _reactdom = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/react-dom/index.js [app-client] (ecmascript)"));
|
||
const _head = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/head.js [app-client] (ecmascript)"));
|
||
const _getimgprops = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/get-img-props.js [app-client] (ecmascript)");
|
||
const _imageconfig = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-config.js [app-client] (ecmascript)");
|
||
const _imageconfigcontextsharedruntime = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js [app-client] (ecmascript)");
|
||
const _warnonce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [app-client] (ecmascript)");
|
||
const _routercontextsharedruntime = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router-context.shared-runtime.js [app-client] (ecmascript)");
|
||
const _imageloader = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-loader.js [app-client] (ecmascript)"));
|
||
const _usemergedref = __turbopack_context__.r("[project]/node_modules/next/dist/client/use-merged-ref.js [app-client] (ecmascript)");
|
||
// This is replaced by webpack define plugin
|
||
const configEnv = ("TURBOPACK compile-time value", {
|
||
"deviceSizes": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", 640),
|
||
("TURBOPACK compile-time value", 750),
|
||
("TURBOPACK compile-time value", 828),
|
||
("TURBOPACK compile-time value", 1080),
|
||
("TURBOPACK compile-time value", 1200),
|
||
("TURBOPACK compile-time value", 1920),
|
||
("TURBOPACK compile-time value", 2048),
|
||
("TURBOPACK compile-time value", 3840)
|
||
]),
|
||
"imageSizes": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", 32),
|
||
("TURBOPACK compile-time value", 48),
|
||
("TURBOPACK compile-time value", 64),
|
||
("TURBOPACK compile-time value", 96),
|
||
("TURBOPACK compile-time value", 128),
|
||
("TURBOPACK compile-time value", 256),
|
||
("TURBOPACK compile-time value", 384)
|
||
]),
|
||
"qualities": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", 75)
|
||
]),
|
||
"path": ("TURBOPACK compile-time value", "/_next/image"),
|
||
"loader": ("TURBOPACK compile-time value", "default"),
|
||
"dangerouslyAllowSVG": ("TURBOPACK compile-time value", false),
|
||
"unoptimized": ("TURBOPACK compile-time value", true),
|
||
"domains": ("TURBOPACK compile-time value", []),
|
||
"remotePatterns": ("TURBOPACK compile-time value", []),
|
||
"localPatterns": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", {
|
||
"pathname": ("TURBOPACK compile-time value", "**"),
|
||
"search": ("TURBOPACK compile-time value", "")
|
||
})
|
||
])
|
||
});
|
||
if (typeof window === 'undefined') {
|
||
;
|
||
globalThis.__NEXT_IMAGE_IMPORTED = true;
|
||
}
|
||
// See https://stackoverflow.com/q/39777833/266535 for why we use this ref
|
||
// handler instead of the img's onLoad attribute.
|
||
function handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized, sizesInput) {
|
||
const src = img?.src;
|
||
if (!img || img['data-loaded-src'] === src) {
|
||
return;
|
||
}
|
||
img['data-loaded-src'] = src;
|
||
const p = 'decode' in img ? img.decode() : Promise.resolve();
|
||
p.catch(()=>{}).then(()=>{
|
||
if (!img.parentElement || !img.isConnected) {
|
||
// Exit early in case of race condition:
|
||
// - onload() is called
|
||
// - decode() is called but incomplete
|
||
// - unmount is called
|
||
// - decode() completes
|
||
return;
|
||
}
|
||
if (placeholder !== 'empty') {
|
||
setBlurComplete(true);
|
||
}
|
||
if (onLoadRef?.current) {
|
||
// Since we don't have the SyntheticEvent here,
|
||
// we must create one with the same shape.
|
||
// See https://reactjs.org/docs/events.html
|
||
const event = new Event('load');
|
||
Object.defineProperty(event, 'target', {
|
||
writable: false,
|
||
value: img
|
||
});
|
||
let prevented = false;
|
||
let stopped = false;
|
||
onLoadRef.current({
|
||
...event,
|
||
nativeEvent: event,
|
||
currentTarget: img,
|
||
target: img,
|
||
isDefaultPrevented: ()=>prevented,
|
||
isPropagationStopped: ()=>stopped,
|
||
persist: ()=>{},
|
||
preventDefault: ()=>{
|
||
prevented = true;
|
||
event.preventDefault();
|
||
},
|
||
stopPropagation: ()=>{
|
||
stopped = true;
|
||
event.stopPropagation();
|
||
}
|
||
});
|
||
}
|
||
if (onLoadingCompleteRef?.current) {
|
||
onLoadingCompleteRef.current(img);
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
const origSrc = new URL(src, 'http://n').searchParams.get('url') || src;
|
||
if (img.getAttribute('data-nimg') === 'fill') {
|
||
if (!unoptimized && (!sizesInput || sizesInput === '100vw')) {
|
||
let widthViewportRatio = img.getBoundingClientRect().width / window.innerWidth;
|
||
if (widthViewportRatio < 0.6) {
|
||
if (sizesInput === '100vw') {
|
||
(0, _warnonce.warnOnce)(`Image with src "${origSrc}" has "fill" prop and "sizes" prop of "100vw", but image is not rendered at full viewport width. Please adjust "sizes" to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`);
|
||
} else {
|
||
(0, _warnonce.warnOnce)(`Image with src "${origSrc}" has "fill" but is missing "sizes" prop. Please add it to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`);
|
||
}
|
||
}
|
||
}
|
||
if (img.parentElement) {
|
||
const { position } = window.getComputedStyle(img.parentElement);
|
||
const valid = [
|
||
'absolute',
|
||
'fixed',
|
||
'relative'
|
||
];
|
||
if (!valid.includes(position)) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${origSrc}" has "fill" and parent element with invalid "position". Provided "${position}" should be one of ${valid.map(String).join(',')}.`);
|
||
}
|
||
}
|
||
if (img.height === 0) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${origSrc}" has "fill" and a height value of 0. This is likely because the parent element of the image has not been styled to have a set height.`);
|
||
}
|
||
}
|
||
const heightModified = img.height.toString() !== img.getAttribute('height');
|
||
const widthModified = img.width.toString() !== img.getAttribute('width');
|
||
if (heightModified && !widthModified || !heightModified && widthModified) {
|
||
(0, _warnonce.warnOnce)(`Image with src "${origSrc}" has either width or height modified, but not the other. If you use CSS to change the size of your image, also include the styles 'width: "auto"' or 'height: "auto"' to maintain the aspect ratio.`);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
function getDynamicProps(fetchPriority) {
|
||
if (Boolean(_react.use)) {
|
||
// In React 19.0.0 or newer, we must use camelCase
|
||
// prop to avoid "Warning: Invalid DOM property".
|
||
// See https://github.com/facebook/react/pull/25927
|
||
return {
|
||
fetchPriority
|
||
};
|
||
}
|
||
// In React 18.2.0 or older, we must use lowercase prop
|
||
// to avoid "Warning: Invalid DOM property".
|
||
return {
|
||
fetchpriority: fetchPriority
|
||
};
|
||
}
|
||
const ImageElement = /*#__PURE__*/ (0, _react.forwardRef)(({ src, srcSet, sizes, height, width, decoding, className, style, fetchPriority, placeholder, loading, unoptimized, fill, onLoadRef, onLoadingCompleteRef, setBlurComplete, setShowAltText, sizesInput, onLoad, onError, ...rest }, forwardedRef)=>{
|
||
const ownRef = (0, _react.useCallback)((img)=>{
|
||
if (!img) {
|
||
return;
|
||
}
|
||
if (onError) {
|
||
// If the image has an error before react hydrates, then the error is lost.
|
||
// The workaround is to wait until the image is mounted which is after hydration,
|
||
// then we set the src again to trigger the error handler (if there was an error).
|
||
// eslint-disable-next-line no-self-assign
|
||
img.src = img.src;
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (!src) {
|
||
console.error(`Image is missing required "src" property:`, img);
|
||
}
|
||
if (img.getAttribute('alt') === null) {
|
||
console.error(`Image is missing required "alt" property. Please add Alternative Text to describe the image for screen readers and search engines.`);
|
||
}
|
||
}
|
||
if (img.complete) {
|
||
handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized, sizesInput);
|
||
}
|
||
}, [
|
||
src,
|
||
placeholder,
|
||
onLoadRef,
|
||
onLoadingCompleteRef,
|
||
setBlurComplete,
|
||
onError,
|
||
unoptimized,
|
||
sizesInput
|
||
]);
|
||
const ref = (0, _usemergedref.useMergedRef)(forwardedRef, ownRef);
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsx)("img", {
|
||
...rest,
|
||
...getDynamicProps(fetchPriority),
|
||
// It's intended to keep `loading` before `src` because React updates
|
||
// props in order which causes Safari/Firefox to not lazy load properly.
|
||
// See https://github.com/facebook/react/issues/25883
|
||
loading: loading,
|
||
width: width,
|
||
height: height,
|
||
decoding: decoding,
|
||
"data-nimg": fill ? 'fill' : '1',
|
||
className: className,
|
||
style: style,
|
||
// It's intended to keep `src` the last attribute because React updates
|
||
// attributes in order. If we keep `src` the first one, Safari will
|
||
// immediately start to fetch `src`, before `sizes` and `srcSet` are even
|
||
// updated by React. That causes multiple unnecessary requests if `srcSet`
|
||
// and `sizes` are defined.
|
||
// This bug cannot be reproduced in Chrome or Firefox.
|
||
sizes: sizes,
|
||
srcSet: srcSet,
|
||
src: src,
|
||
ref: ref,
|
||
onLoad: (event)=>{
|
||
const img = event.currentTarget;
|
||
handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized, sizesInput);
|
||
},
|
||
onError: (event)=>{
|
||
// if the real image fails to load, this will ensure "alt" is visible
|
||
setShowAltText(true);
|
||
if (placeholder !== 'empty') {
|
||
// If the real image fails to load, this will still remove the placeholder.
|
||
setBlurComplete(true);
|
||
}
|
||
if (onError) {
|
||
onError(event);
|
||
}
|
||
}
|
||
});
|
||
});
|
||
function ImagePreload({ isAppRouter, imgAttributes }) {
|
||
const opts = {
|
||
as: 'image',
|
||
imageSrcSet: imgAttributes.srcSet,
|
||
imageSizes: imgAttributes.sizes,
|
||
crossOrigin: imgAttributes.crossOrigin,
|
||
referrerPolicy: imgAttributes.referrerPolicy,
|
||
...getDynamicProps(imgAttributes.fetchPriority)
|
||
};
|
||
if (isAppRouter && _reactdom.default.preload) {
|
||
_reactdom.default.preload(imgAttributes.src, opts);
|
||
return null;
|
||
}
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {
|
||
children: /*#__PURE__*/ (0, _jsxruntime.jsx)("link", {
|
||
rel: "preload",
|
||
// Note how we omit the `href` attribute, as it would only be relevant
|
||
// for browsers that do not support `imagesrcset`, and in those cases
|
||
// it would cause the incorrect image to be preloaded.
|
||
//
|
||
// https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset
|
||
href: imgAttributes.srcSet ? undefined : imgAttributes.src,
|
||
...opts
|
||
}, '__nimg-' + imgAttributes.src + imgAttributes.srcSet + imgAttributes.sizes)
|
||
});
|
||
}
|
||
const Image = /*#__PURE__*/ (0, _react.forwardRef)((props, forwardedRef)=>{
|
||
const pagesRouter = (0, _react.useContext)(_routercontextsharedruntime.RouterContext);
|
||
// We're in the app directory if there is no pages router.
|
||
const isAppRouter = !pagesRouter;
|
||
const configContext = (0, _react.useContext)(_imageconfigcontextsharedruntime.ImageConfigContext);
|
||
const config = (0, _react.useMemo)(()=>{
|
||
const c = configEnv || configContext || _imageconfig.imageConfigDefault;
|
||
const allSizes = [
|
||
...c.deviceSizes,
|
||
...c.imageSizes
|
||
].sort((a, b)=>a - b);
|
||
const deviceSizes = c.deviceSizes.sort((a, b)=>a - b);
|
||
const qualities = c.qualities?.sort((a, b)=>a - b);
|
||
return {
|
||
...c,
|
||
allSizes,
|
||
deviceSizes,
|
||
qualities,
|
||
// During the SSR, configEnv (__NEXT_IMAGE_OPTS) does not include
|
||
// security sensitive configs like `localPatterns`, which is needed
|
||
// during the server render to ensure it's validated. Therefore use
|
||
// configContext, which holds the config from the server for validation.
|
||
localPatterns: typeof window === 'undefined' ? configContext?.localPatterns : c.localPatterns
|
||
};
|
||
}, [
|
||
configContext
|
||
]);
|
||
const { onLoad, onLoadingComplete } = props;
|
||
const onLoadRef = (0, _react.useRef)(onLoad);
|
||
(0, _react.useEffect)(()=>{
|
||
onLoadRef.current = onLoad;
|
||
}, [
|
||
onLoad
|
||
]);
|
||
const onLoadingCompleteRef = (0, _react.useRef)(onLoadingComplete);
|
||
(0, _react.useEffect)(()=>{
|
||
onLoadingCompleteRef.current = onLoadingComplete;
|
||
}, [
|
||
onLoadingComplete
|
||
]);
|
||
const [blurComplete, setBlurComplete] = (0, _react.useState)(false);
|
||
const [showAltText, setShowAltText] = (0, _react.useState)(false);
|
||
const { props: imgAttributes, meta: imgMeta } = (0, _getimgprops.getImgProps)(props, {
|
||
defaultLoader: _imageloader.default,
|
||
imgConf: config,
|
||
blurComplete,
|
||
showAltText
|
||
});
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||
children: [
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)(ImageElement, {
|
||
...imgAttributes,
|
||
unoptimized: imgMeta.unoptimized,
|
||
placeholder: imgMeta.placeholder,
|
||
fill: imgMeta.fill,
|
||
onLoadRef: onLoadRef,
|
||
onLoadingCompleteRef: onLoadingCompleteRef,
|
||
setBlurComplete: setBlurComplete,
|
||
setShowAltText: setShowAltText,
|
||
sizesInput: props.sizes,
|
||
ref: forwardedRef
|
||
}),
|
||
imgMeta.preload ? /*#__PURE__*/ (0, _jsxruntime.jsx)(ImagePreload, {
|
||
isAppRouter: isAppRouter,
|
||
imgAttributes: imgAttributes
|
||
}) : null
|
||
]
|
||
});
|
||
});
|
||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||
Object.defineProperty(exports.default, '__esModule', {
|
||
value: true
|
||
});
|
||
Object.assign(exports.default, exports);
|
||
module.exports = exports.default;
|
||
} //# sourceMappingURL=image-component.js.map
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/image-external.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)");
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
default: null,
|
||
getImageProps: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
default: function() {
|
||
return _default;
|
||
},
|
||
getImageProps: function() {
|
||
return getImageProps;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [app-client] (ecmascript)");
|
||
const _getimgprops = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/get-img-props.js [app-client] (ecmascript)");
|
||
const _imagecomponent = __turbopack_context__.r("[project]/node_modules/next/dist/client/image-component.js [app-client] (ecmascript)");
|
||
const _imageloader = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-loader.js [app-client] (ecmascript)"));
|
||
function getImageProps(imgProps) {
|
||
const { props } = (0, _getimgprops.getImgProps)(imgProps, {
|
||
defaultLoader: _imageloader.default,
|
||
// This is replaced by webpack define plugin
|
||
imgConf: ("TURBOPACK compile-time value", {
|
||
"deviceSizes": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", 640),
|
||
("TURBOPACK compile-time value", 750),
|
||
("TURBOPACK compile-time value", 828),
|
||
("TURBOPACK compile-time value", 1080),
|
||
("TURBOPACK compile-time value", 1200),
|
||
("TURBOPACK compile-time value", 1920),
|
||
("TURBOPACK compile-time value", 2048),
|
||
("TURBOPACK compile-time value", 3840)
|
||
]),
|
||
"imageSizes": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", 32),
|
||
("TURBOPACK compile-time value", 48),
|
||
("TURBOPACK compile-time value", 64),
|
||
("TURBOPACK compile-time value", 96),
|
||
("TURBOPACK compile-time value", 128),
|
||
("TURBOPACK compile-time value", 256),
|
||
("TURBOPACK compile-time value", 384)
|
||
]),
|
||
"qualities": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", 75)
|
||
]),
|
||
"path": ("TURBOPACK compile-time value", "/_next/image"),
|
||
"loader": ("TURBOPACK compile-time value", "default"),
|
||
"dangerouslyAllowSVG": ("TURBOPACK compile-time value", false),
|
||
"unoptimized": ("TURBOPACK compile-time value", true),
|
||
"domains": ("TURBOPACK compile-time value", []),
|
||
"remotePatterns": ("TURBOPACK compile-time value", []),
|
||
"localPatterns": ("TURBOPACK compile-time value", [
|
||
("TURBOPACK compile-time value", {
|
||
"pathname": ("TURBOPACK compile-time value", "**"),
|
||
"search": ("TURBOPACK compile-time value", "")
|
||
})
|
||
])
|
||
})
|
||
});
|
||
// Normally we don't care about undefined props because we pass to JSX,
|
||
// but this exported function could be used by the end user for anything
|
||
// so we delete undefined props to clean it up a little.
|
||
for (const [key, value] of Object.entries(props)){
|
||
if (value === undefined) {
|
||
delete props[key];
|
||
}
|
||
}
|
||
return {
|
||
props
|
||
};
|
||
}
|
||
const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
|
||
}),
|
||
"[project]/node_modules/next/image.js [app-client] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
|
||
module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/image-external.js [app-client] (ecmascript)");
|
||
}),
|
||
]);
|
||
|
||
//# sourceMappingURL=node_modules_3e8607cf._.js.map
|