Files
Mycontent/.next/dev/static/chunks/node_modules_3e8607cf._.js
2025-12-29 14:01:37 +08:00

9779 lines
361 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(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 browsers 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 browsers 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