22102 lines
1.1 MiB
Plaintext
22102 lines
1.1 MiB
Plaintext
module.exports = [
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/querystring.js [app-ssr] (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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/format-url.js [app-ssr] (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.
|
||
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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-ssr] (ecmascript)");
|
||
const _querystring = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/querystring.js [app-ssr] (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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/use-merged-ref.js [app-ssr] (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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Given a path this function will find the pathname, query and hash and return
|
||
* them. This is useful to parse full paths on the client side.
|
||
* @param path A path to parse e.g. /foo/bar?id=1#hash
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "parsePath", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return parsePath;
|
||
}
|
||
});
|
||
function parsePath(path) {
|
||
const hashIndex = path.indexOf('#');
|
||
const queryIndex = path.indexOf('?');
|
||
const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);
|
||
if (hasQuery || hashIndex > -1) {
|
||
return {
|
||
pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),
|
||
query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '',
|
||
hash: hashIndex > -1 ? path.slice(hashIndex) : ''
|
||
};
|
||
}
|
||
return {
|
||
pathname: path,
|
||
query: '',
|
||
hash: ''
|
||
};
|
||
} //# sourceMappingURL=parse-path.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "addPathPrefix", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return addPathPrefix;
|
||
}
|
||
});
|
||
const _parsepath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-ssr] (ecmascript)");
|
||
function addPathPrefix(path, prefix) {
|
||
if (!path.startsWith('/') || !prefix) {
|
||
return path;
|
||
}
|
||
const { pathname, query, hash } = (0, _parsepath.parsePath)(path);
|
||
return `${prefix}${pathname}${query}${hash}`;
|
||
} //# sourceMappingURL=add-path-prefix.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Removes the trailing slash for a given route or page path. Preserves the
|
||
* root page. Examples:
|
||
* - `/foo/bar/` -> `/foo/bar`
|
||
* - `/foo/bar` -> `/foo/bar`
|
||
* - `/` -> `/`
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "removeTrailingSlash", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return removeTrailingSlash;
|
||
}
|
||
});
|
||
function removeTrailingSlash(route) {
|
||
return route.replace(/\/$/, '') || '/';
|
||
} //# sourceMappingURL=remove-trailing-slash.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/normalize-trailing-slash.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "normalizePathTrailingSlash", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return normalizePathTrailingSlash;
|
||
}
|
||
});
|
||
const _removetrailingslash = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [app-ssr] (ecmascript)");
|
||
const _parsepath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-ssr] (ecmascript)");
|
||
const normalizePathTrailingSlash = (path)=>{
|
||
if (!path.startsWith('/') || ("TURBOPACK compile-time value", void 0)) {
|
||
return path;
|
||
}
|
||
const { pathname, query, hash } = (0, _parsepath.parsePath)(path);
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
return `${(0, _removetrailingslash.removeTrailingSlash)(pathname)}${query}${hash}`;
|
||
};
|
||
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=normalize-trailing-slash.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/add-base-path.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "addBasePath", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return addBasePath;
|
||
}
|
||
});
|
||
const _addpathprefix = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-ssr] (ecmascript)");
|
||
const _normalizetrailingslash = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/normalize-trailing-slash.js [app-ssr] (ecmascript)");
|
||
const basePath = ("TURBOPACK compile-time value", "") || '';
|
||
function addBasePath(path, required) {
|
||
return (0, _normalizetrailingslash.normalizePathTrailingSlash)(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : (0, _addpathprefix.addPathPrefix)(path, basePath));
|
||
}
|
||
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=add-base-path.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils/warn-once.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "warnOnce", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return warnOnce;
|
||
}
|
||
});
|
||
let warnOnce = (_)=>{};
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
const warnings = new Set();
|
||
warnOnce = (msg)=>{
|
||
if (!warnings.has(msg)) {
|
||
console.warn(msg);
|
||
}
|
||
warnings.add(msg);
|
||
};
|
||
} //# sourceMappingURL=warn-once.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Shared types and constants for the Segment Cache.
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
FetchStrategy: null,
|
||
NavigationResultTag: null,
|
||
PrefetchPriority: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
FetchStrategy: function() {
|
||
return FetchStrategy;
|
||
},
|
||
NavigationResultTag: function() {
|
||
return NavigationResultTag;
|
||
},
|
||
PrefetchPriority: function() {
|
||
return PrefetchPriority;
|
||
}
|
||
});
|
||
var NavigationResultTag = /*#__PURE__*/ function(NavigationResultTag) {
|
||
NavigationResultTag[NavigationResultTag["MPA"] = 0] = "MPA";
|
||
NavigationResultTag[NavigationResultTag["Success"] = 1] = "Success";
|
||
NavigationResultTag[NavigationResultTag["NoOp"] = 2] = "NoOp";
|
||
NavigationResultTag[NavigationResultTag["Async"] = 3] = "Async";
|
||
return NavigationResultTag;
|
||
}({});
|
||
var PrefetchPriority = /*#__PURE__*/ function(PrefetchPriority) {
|
||
/**
|
||
* Assigned to the most recently hovered/touched link. Special network
|
||
* bandwidth is reserved for this task only. There's only ever one Intent-
|
||
* priority task at a time; when a new Intent task is scheduled, the previous
|
||
* one is bumped down to Default.
|
||
*/ PrefetchPriority[PrefetchPriority["Intent"] = 2] = "Intent";
|
||
/**
|
||
* The default priority for prefetch tasks.
|
||
*/ PrefetchPriority[PrefetchPriority["Default"] = 1] = "Default";
|
||
/**
|
||
* Assigned to tasks when they spawn non-blocking background work, like
|
||
* revalidating a partially cached entry to see if more data is available.
|
||
*/ PrefetchPriority[PrefetchPriority["Background"] = 0] = "Background";
|
||
return PrefetchPriority;
|
||
}({});
|
||
var FetchStrategy = /*#__PURE__*/ function(FetchStrategy) {
|
||
// Deliberately ordered so we can easily compare two segments
|
||
// and determine if one segment is "more specific" than another
|
||
// (i.e. if it's likely that it contains more data)
|
||
FetchStrategy[FetchStrategy["LoadingBoundary"] = 0] = "LoadingBoundary";
|
||
FetchStrategy[FetchStrategy["PPR"] = 1] = "PPR";
|
||
FetchStrategy[FetchStrategy["PPRRuntime"] = 2] = "PPRRuntime";
|
||
FetchStrategy[FetchStrategy["Full"] = 3] = "Full";
|
||
return FetchStrategy;
|
||
}({});
|
||
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=types.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-key.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
// TypeScript trick to simulate opaque types, like in Flow.
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "createCacheKey", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return createCacheKey;
|
||
}
|
||
});
|
||
function createCacheKey(originalHref, nextUrl) {
|
||
const originalUrl = new URL(originalHref);
|
||
const cacheKey = {
|
||
pathname: originalUrl.pathname,
|
||
search: originalUrl.search,
|
||
nextUrl: nextUrl
|
||
};
|
||
return cacheKey;
|
||
}
|
||
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=cache-key.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/app-router-types.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* App Router types - Client-safe types for the Next.js App Router
|
||
*
|
||
* This file contains type definitions that can be safely imported
|
||
* by both client-side and server-side code without circular dependencies.
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "HasLoadingBoundary", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return HasLoadingBoundary;
|
||
}
|
||
});
|
||
var HasLoadingBoundary = /*#__PURE__*/ function(HasLoadingBoundary) {
|
||
// There is a loading boundary in this particular segment
|
||
HasLoadingBoundary[HasLoadingBoundary["SegmentHasLoadingBoundary"] = 1] = "SegmentHasLoadingBoundary";
|
||
// There is a loading boundary somewhere in the subtree (but not in
|
||
// this segment)
|
||
HasLoadingBoundary[HasLoadingBoundary["SubtreeHasLoadingBoundary"] = 2] = "SubtreeHasLoadingBoundary";
|
||
// There is no loading boundary in this segment or any of its descendants
|
||
HasLoadingBoundary[HasLoadingBoundary["SubtreeHasNoLoadingBoundary"] = 3] = "SubtreeHasNoLoadingBoundary";
|
||
return HasLoadingBoundary;
|
||
}({}); //# sourceMappingURL=app-router-types.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/match-segments.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "matchSegment", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return matchSegment;
|
||
}
|
||
});
|
||
const matchSegment = (existingSegment, segment)=>{
|
||
// segment is either Array or string
|
||
if (typeof existingSegment === 'string') {
|
||
if (typeof segment === 'string') {
|
||
// Common case: segment is just a string
|
||
return existingSegment === segment;
|
||
}
|
||
return false;
|
||
}
|
||
if (typeof segment === 'string') {
|
||
return false;
|
||
}
|
||
return existingSegment[0] === segment[0] && existingSegment[1] === segment[1];
|
||
};
|
||
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=match-segments.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/app-router-headers.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
ACTION_HEADER: null,
|
||
FLIGHT_HEADERS: null,
|
||
NEXT_ACTION_NOT_FOUND_HEADER: null,
|
||
NEXT_DID_POSTPONE_HEADER: null,
|
||
NEXT_HMR_REFRESH_HASH_COOKIE: null,
|
||
NEXT_HMR_REFRESH_HEADER: null,
|
||
NEXT_HTML_REQUEST_ID_HEADER: null,
|
||
NEXT_IS_PRERENDER_HEADER: null,
|
||
NEXT_REQUEST_ID_HEADER: null,
|
||
NEXT_REWRITTEN_PATH_HEADER: null,
|
||
NEXT_REWRITTEN_QUERY_HEADER: null,
|
||
NEXT_ROUTER_PREFETCH_HEADER: null,
|
||
NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: null,
|
||
NEXT_ROUTER_STALE_TIME_HEADER: null,
|
||
NEXT_ROUTER_STATE_TREE_HEADER: null,
|
||
NEXT_RSC_UNION_QUERY: null,
|
||
NEXT_URL: null,
|
||
RSC_CONTENT_TYPE_HEADER: null,
|
||
RSC_HEADER: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
ACTION_HEADER: function() {
|
||
return ACTION_HEADER;
|
||
},
|
||
FLIGHT_HEADERS: function() {
|
||
return FLIGHT_HEADERS;
|
||
},
|
||
NEXT_ACTION_NOT_FOUND_HEADER: function() {
|
||
return NEXT_ACTION_NOT_FOUND_HEADER;
|
||
},
|
||
NEXT_DID_POSTPONE_HEADER: function() {
|
||
return NEXT_DID_POSTPONE_HEADER;
|
||
},
|
||
NEXT_HMR_REFRESH_HASH_COOKIE: function() {
|
||
return NEXT_HMR_REFRESH_HASH_COOKIE;
|
||
},
|
||
NEXT_HMR_REFRESH_HEADER: function() {
|
||
return NEXT_HMR_REFRESH_HEADER;
|
||
},
|
||
NEXT_HTML_REQUEST_ID_HEADER: function() {
|
||
return NEXT_HTML_REQUEST_ID_HEADER;
|
||
},
|
||
NEXT_IS_PRERENDER_HEADER: function() {
|
||
return NEXT_IS_PRERENDER_HEADER;
|
||
},
|
||
NEXT_REQUEST_ID_HEADER: function() {
|
||
return NEXT_REQUEST_ID_HEADER;
|
||
},
|
||
NEXT_REWRITTEN_PATH_HEADER: function() {
|
||
return NEXT_REWRITTEN_PATH_HEADER;
|
||
},
|
||
NEXT_REWRITTEN_QUERY_HEADER: function() {
|
||
return NEXT_REWRITTEN_QUERY_HEADER;
|
||
},
|
||
NEXT_ROUTER_PREFETCH_HEADER: function() {
|
||
return NEXT_ROUTER_PREFETCH_HEADER;
|
||
},
|
||
NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: function() {
|
||
return NEXT_ROUTER_SEGMENT_PREFETCH_HEADER;
|
||
},
|
||
NEXT_ROUTER_STALE_TIME_HEADER: function() {
|
||
return NEXT_ROUTER_STALE_TIME_HEADER;
|
||
},
|
||
NEXT_ROUTER_STATE_TREE_HEADER: function() {
|
||
return NEXT_ROUTER_STATE_TREE_HEADER;
|
||
},
|
||
NEXT_RSC_UNION_QUERY: function() {
|
||
return NEXT_RSC_UNION_QUERY;
|
||
},
|
||
NEXT_URL: function() {
|
||
return NEXT_URL;
|
||
},
|
||
RSC_CONTENT_TYPE_HEADER: function() {
|
||
return RSC_CONTENT_TYPE_HEADER;
|
||
},
|
||
RSC_HEADER: function() {
|
||
return RSC_HEADER;
|
||
}
|
||
});
|
||
const RSC_HEADER = 'rsc';
|
||
const ACTION_HEADER = 'next-action';
|
||
const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree';
|
||
const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch';
|
||
const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch';
|
||
const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh';
|
||
const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__';
|
||
const NEXT_URL = 'next-url';
|
||
const RSC_CONTENT_TYPE_HEADER = 'text/x-component';
|
||
const FLIGHT_HEADERS = [
|
||
RSC_HEADER,
|
||
NEXT_ROUTER_STATE_TREE_HEADER,
|
||
NEXT_ROUTER_PREFETCH_HEADER,
|
||
NEXT_HMR_REFRESH_HEADER,
|
||
NEXT_ROUTER_SEGMENT_PREFETCH_HEADER
|
||
];
|
||
const NEXT_RSC_UNION_QUERY = '_rsc';
|
||
const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time';
|
||
const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed';
|
||
const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path';
|
||
const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query';
|
||
const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender';
|
||
const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found';
|
||
const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id';
|
||
const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id';
|
||
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=app-router-headers.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
module.exports = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-ssr] (ecmascript)").vendored['react-ssr'].ReactServerDOMTurbopackClient; //# sourceMappingURL=react-server-dom-turbopack-client.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
ACTION_HMR_REFRESH: null,
|
||
ACTION_NAVIGATE: null,
|
||
ACTION_REFRESH: null,
|
||
ACTION_RESTORE: null,
|
||
ACTION_SERVER_ACTION: null,
|
||
ACTION_SERVER_PATCH: null,
|
||
PrefetchKind: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
ACTION_HMR_REFRESH: function() {
|
||
return ACTION_HMR_REFRESH;
|
||
},
|
||
ACTION_NAVIGATE: function() {
|
||
return ACTION_NAVIGATE;
|
||
},
|
||
ACTION_REFRESH: function() {
|
||
return ACTION_REFRESH;
|
||
},
|
||
ACTION_RESTORE: function() {
|
||
return ACTION_RESTORE;
|
||
},
|
||
ACTION_SERVER_ACTION: function() {
|
||
return ACTION_SERVER_ACTION;
|
||
},
|
||
ACTION_SERVER_PATCH: function() {
|
||
return ACTION_SERVER_PATCH;
|
||
},
|
||
PrefetchKind: function() {
|
||
return PrefetchKind;
|
||
}
|
||
});
|
||
const ACTION_REFRESH = 'refresh';
|
||
const ACTION_NAVIGATE = 'navigate';
|
||
const ACTION_RESTORE = 'restore';
|
||
const ACTION_SERVER_PATCH = 'server-patch';
|
||
const ACTION_HMR_REFRESH = 'hmr-refresh';
|
||
const ACTION_SERVER_ACTION = 'server-action';
|
||
var PrefetchKind = /*#__PURE__*/ function(PrefetchKind) {
|
||
PrefetchKind["AUTO"] = "auto";
|
||
PrefetchKind["FULL"] = "full";
|
||
PrefetchKind["TEMPORARY"] = "temporary";
|
||
return PrefetchKind;
|
||
}({});
|
||
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=router-reducer-types.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/is-thenable.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Check to see if a value is Thenable.
|
||
*
|
||
* @param promise the maybe-thenable value
|
||
* @returns true if the value is thenable
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "isThenable", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return isThenable;
|
||
}
|
||
});
|
||
function isThenable(promise) {
|
||
return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function';
|
||
} //# sourceMappingURL=is-thenable.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/dev-overlay.shim.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
dispatcher: null,
|
||
renderAppDevOverlay: null,
|
||
renderPagesDevOverlay: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
dispatcher: function() {
|
||
return dispatcher;
|
||
},
|
||
renderAppDevOverlay: function() {
|
||
return renderAppDevOverlay;
|
||
},
|
||
renderPagesDevOverlay: function() {
|
||
return renderPagesDevOverlay;
|
||
}
|
||
});
|
||
function renderAppDevOverlay() {
|
||
throw Object.defineProperty(new Error("Next DevTools: Can't render in this environment. This is a bug in Next.js"), "__NEXT_ERROR_CODE", {
|
||
value: "E697",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
function renderPagesDevOverlay() {
|
||
throw Object.defineProperty(new Error("Next DevTools: Can't render in this environment. This is a bug in Next.js"), "__NEXT_ERROR_CODE", {
|
||
value: "E697",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
const dispatcher = new Proxy({}, {
|
||
get: (_, prop)=>{
|
||
return ()=>{
|
||
throw Object.defineProperty(new Error(`Next DevTools: Can't dispatch ${String(prop)} in this environment. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
|
||
value: "E698",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
};
|
||
}
|
||
});
|
||
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=dev-overlay.shim.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "useAppDevRenderingIndicator", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return useAppDevRenderingIndicator;
|
||
}
|
||
});
|
||
const _react = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
const _nextdevtools = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/dev-overlay.shim.js [app-ssr] (ecmascript)");
|
||
const useAppDevRenderingIndicator = ()=>{
|
||
const [isPending, startTransition] = (0, _react.useTransition)();
|
||
(0, _react.useEffect)(()=>{
|
||
if (isPending) {
|
||
_nextdevtools.dispatcher.renderingIndicatorShow();
|
||
} else {
|
||
_nextdevtools.dispatcher.renderingIndicatorHide();
|
||
}
|
||
}, [
|
||
isPending
|
||
]);
|
||
return startTransition;
|
||
};
|
||
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-app-dev-rendering-indicator.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/use-action-queue.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
dispatchAppRouterAction: null,
|
||
useActionQueue: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
dispatchAppRouterAction: function() {
|
||
return dispatchAppRouterAction;
|
||
},
|
||
useActionQueue: function() {
|
||
return useActionQueue;
|
||
}
|
||
});
|
||
const _interop_require_wildcard = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-ssr] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"));
|
||
const _isthenable = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/is-thenable.js [app-ssr] (ecmascript)");
|
||
// The app router state lives outside of React, so we can import the dispatch
|
||
// method directly wherever we need it, rather than passing it around via props
|
||
// or context.
|
||
let dispatch = null;
|
||
function dispatchAppRouterAction(action) {
|
||
if (dispatch === null) {
|
||
throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), "__NEXT_ERROR_CODE", {
|
||
value: "E668",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
dispatch(action);
|
||
}
|
||
const __DEV__ = ("TURBOPACK compile-time value", "development") !== 'production';
|
||
const promisesWithDebugInfo = ("TURBOPACK compile-time truthy", 1) ? new WeakMap() : "TURBOPACK unreachable";
|
||
function useActionQueue(actionQueue) {
|
||
const [state, setState] = _react.default.useState(actionQueue.state);
|
||
// Because of a known issue that requires to decode Flight streams inside the
|
||
// render phase, we have to be a bit clever and assign the dispatch method to
|
||
// a module-level variable upon initialization. The useState hook in this
|
||
// module only exists to synchronize state that lives outside of React.
|
||
// Ideally, what we'd do instead is pass the state as a prop to root.render;
|
||
// this is conceptually how we're modeling the app router state, despite the
|
||
// weird implementation details.
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
const { useAppDevRenderingIndicator } = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js [app-ssr] (ecmascript)");
|
||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
||
const appDevRenderingIndicator = useAppDevRenderingIndicator();
|
||
dispatch = (action)=>{
|
||
appDevRenderingIndicator(()=>{
|
||
actionQueue.dispatch(action, setState);
|
||
});
|
||
};
|
||
} else //TURBOPACK unreachable
|
||
;
|
||
// When navigating to a non-prefetched route, then App Router state will be
|
||
// blocked until the server responds. We need to transfer the `_debugInfo`
|
||
// from the underlying Flight response onto the top-level promise that is
|
||
// passed to React (via `use`) so that the latency is accurately represented
|
||
// in the React DevTools.
|
||
const stateWithDebugInfo = (0, _react.useMemo)(()=>{
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
if ((0, _isthenable.isThenable)(state)) {
|
||
// useMemo can't be used to cache a Promise since the memoized value is thrown
|
||
// away when we suspend. So we use a WeakMap to cache the Promise with debug info.
|
||
let promiseWithDebugInfo = promisesWithDebugInfo.get(state);
|
||
if (promiseWithDebugInfo === undefined) {
|
||
const debugInfo = [];
|
||
promiseWithDebugInfo = Promise.resolve(state).then((asyncState)=>{
|
||
if (asyncState.debugInfo !== null) {
|
||
debugInfo.push(...asyncState.debugInfo);
|
||
}
|
||
return asyncState;
|
||
});
|
||
promiseWithDebugInfo._debugInfo = debugInfo;
|
||
promisesWithDebugInfo.set(state, promiseWithDebugInfo);
|
||
}
|
||
return promiseWithDebugInfo;
|
||
}
|
||
return state;
|
||
}, [
|
||
state
|
||
]);
|
||
return (0, _isthenable.isThenable)(stateWithDebugInfo) ? (0, _react.use)(stateWithDebugInfo) : stateWithDebugInfo;
|
||
}
|
||
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-action-queue.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-call-server.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "callServer", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return callServer;
|
||
}
|
||
});
|
||
const _react = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
const _routerreducertypes = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js [app-ssr] (ecmascript)");
|
||
const _useactionqueue = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/use-action-queue.js [app-ssr] (ecmascript)");
|
||
async function callServer(actionId, actionArgs) {
|
||
return new Promise((resolve, reject)=>{
|
||
(0, _react.startTransition)(()=>{
|
||
(0, _useactionqueue.dispatchAppRouterAction)({
|
||
type: _routerreducertypes.ACTION_SERVER_ACTION,
|
||
actionId,
|
||
actionArgs,
|
||
resolve,
|
||
reject
|
||
});
|
||
});
|
||
});
|
||
}
|
||
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=app-call-server.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-find-source-map-url.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "findSourceMapURL", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return findSourceMapURL;
|
||
}
|
||
});
|
||
const basePath = ("TURBOPACK compile-time value", "") || '';
|
||
const pathname = `${basePath}/__nextjs_source-map`;
|
||
const findSourceMapURL = ("TURBOPACK compile-time truthy", 1) ? function findSourceMapURL(filename) {
|
||
if (filename === '') {
|
||
return null;
|
||
}
|
||
if (filename.startsWith(document.location.origin) && filename.includes('/_next/static')) {
|
||
// This is a request for a client chunk. This can only happen when
|
||
// using Turbopack. In this case, since we control how those source
|
||
// maps are generated, we can safely assume that the sourceMappingURL
|
||
// is relative to the filename, with an added `.map` extension. The
|
||
// browser can just request this file, and it gets served through the
|
||
// normal dev server, without the need to route this through
|
||
// the `/__nextjs_source-map` dev middleware.
|
||
return `${filename}.map`;
|
||
}
|
||
const url = new URL(pathname, document.location.origin);
|
||
url.searchParams.set('filename', filename);
|
||
return url.href;
|
||
} : "TURBOPACK unreachable";
|
||
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=app-find-source-map-url.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
HEAD_REQUEST_KEY: null,
|
||
ROOT_SEGMENT_REQUEST_KEY: null,
|
||
appendSegmentRequestKeyPart: null,
|
||
convertSegmentPathToStaticExportFilename: null,
|
||
createSegmentRequestKeyPart: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
HEAD_REQUEST_KEY: function() {
|
||
return HEAD_REQUEST_KEY;
|
||
},
|
||
ROOT_SEGMENT_REQUEST_KEY: function() {
|
||
return ROOT_SEGMENT_REQUEST_KEY;
|
||
},
|
||
appendSegmentRequestKeyPart: function() {
|
||
return appendSegmentRequestKeyPart;
|
||
},
|
||
convertSegmentPathToStaticExportFilename: function() {
|
||
return convertSegmentPathToStaticExportFilename;
|
||
},
|
||
createSegmentRequestKeyPart: function() {
|
||
return createSegmentRequestKeyPart;
|
||
}
|
||
});
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const ROOT_SEGMENT_REQUEST_KEY = '';
|
||
const HEAD_REQUEST_KEY = '/_head';
|
||
function createSegmentRequestKeyPart(segment) {
|
||
if (typeof segment === 'string') {
|
||
if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) {
|
||
// The Flight Router State type sometimes includes the search params in
|
||
// the page segment. However, the Segment Cache tracks this as a separate
|
||
// key. So, we strip the search params here, and then add them back when
|
||
// the cache entry is turned back into a FlightRouterState. This is an
|
||
// unfortunate consequence of the FlightRouteState being used both as a
|
||
// transport type and as a cache key; we'll address this once more of the
|
||
// Segment Cache implementation has settled.
|
||
// TODO: We should hoist the search params out of the FlightRouterState
|
||
// type entirely, This is our plan for dynamic route params, too.
|
||
return _segment.PAGE_SEGMENT_KEY;
|
||
}
|
||
const safeName = // But params typically don't include the leading slash. We should use
|
||
// a different encoding to avoid this special case.
|
||
segment === '/_not-found' ? '_not-found' : encodeToFilesystemAndURLSafeString(segment);
|
||
// Since this is not a dynamic segment, it's fully encoded. It does not
|
||
// need to be "hydrated" with a param value.
|
||
return safeName;
|
||
}
|
||
const name = segment[0];
|
||
const paramType = segment[2];
|
||
const safeName = encodeToFilesystemAndURLSafeString(name);
|
||
const encodedName = '$' + paramType + '$' + safeName;
|
||
return encodedName;
|
||
}
|
||
function appendSegmentRequestKeyPart(parentRequestKey, parallelRouteKey, childRequestKeyPart) {
|
||
// Aside from being filesystem safe, segment keys are also designed so that
|
||
// each segment and parallel route creates its own subdirectory. Roughly in
|
||
// the same shape as the source app directory. This is mostly just for easier
|
||
// debugging (you can open up the build folder and navigate the output); if
|
||
// we wanted to do we could just use a flat structure.
|
||
// Omit the parallel route key for children, since this is the most
|
||
// common case. Saves some bytes (and it's what the app directory does).
|
||
const slotKey = parallelRouteKey === 'children' ? childRequestKeyPart : `@${encodeToFilesystemAndURLSafeString(parallelRouteKey)}/${childRequestKeyPart}`;
|
||
return parentRequestKey + '/' + slotKey;
|
||
}
|
||
// Define a regex pattern to match the most common characters found in a route
|
||
// param. It excludes anything that might not be cross-platform filesystem
|
||
// compatible, like |. It does not need to be precise because the fallback is to
|
||
// just base64url-encode the whole parameter, which is fine; we just don't do it
|
||
// by default for compactness, and for easier debugging.
|
||
const simpleParamValueRegex = /^[a-zA-Z0-9\-_@]+$/;
|
||
function encodeToFilesystemAndURLSafeString(value) {
|
||
if (simpleParamValueRegex.test(value)) {
|
||
return value;
|
||
}
|
||
// If there are any unsafe characters, base64url-encode the entire value.
|
||
// We also add a ! prefix so it doesn't collide with the simple case.
|
||
const base64url = btoa(value).replace(/\+/g, '-') // Replace '+' with '-'
|
||
.replace(/\//g, '_') // Replace '/' with '_'
|
||
.replace(/=+$/, '') // Remove trailing '='
|
||
;
|
||
return '!' + base64url;
|
||
}
|
||
function convertSegmentPathToStaticExportFilename(segmentPath) {
|
||
return `__next${segmentPath.replace(/\//g, '.')}.txt`;
|
||
} //# sourceMappingURL=segment-value-encoding.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/route-params.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
doesStaticSegmentAppearInURL: null,
|
||
getCacheKeyForDynamicParam: null,
|
||
getParamValueFromCacheKey: null,
|
||
getRenderedPathname: null,
|
||
getRenderedSearch: null,
|
||
parseDynamicParamFromURLPart: null,
|
||
urlSearchParamsToParsedUrlQuery: null,
|
||
urlToUrlWithoutFlightMarker: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
doesStaticSegmentAppearInURL: function() {
|
||
return doesStaticSegmentAppearInURL;
|
||
},
|
||
getCacheKeyForDynamicParam: function() {
|
||
return getCacheKeyForDynamicParam;
|
||
},
|
||
getParamValueFromCacheKey: function() {
|
||
return getParamValueFromCacheKey;
|
||
},
|
||
getRenderedPathname: function() {
|
||
return getRenderedPathname;
|
||
},
|
||
getRenderedSearch: function() {
|
||
return getRenderedSearch;
|
||
},
|
||
parseDynamicParamFromURLPart: function() {
|
||
return parseDynamicParamFromURLPart;
|
||
},
|
||
urlSearchParamsToParsedUrlQuery: function() {
|
||
return urlSearchParamsToParsedUrlQuery;
|
||
},
|
||
urlToUrlWithoutFlightMarker: function() {
|
||
return urlToUrlWithoutFlightMarker;
|
||
}
|
||
});
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const _segmentvalueencoding = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js [app-ssr] (ecmascript)");
|
||
const _approuterheaders = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/app-router-headers.js [app-ssr] (ecmascript)");
|
||
function getRenderedSearch(response) {
|
||
// If the server performed a rewrite, the search params used to render the
|
||
// page will be different from the params in the request URL. In this case,
|
||
// the response will include a header that gives the rewritten search query.
|
||
const rewrittenQuery = response.headers.get(_approuterheaders.NEXT_REWRITTEN_QUERY_HEADER);
|
||
if (rewrittenQuery !== null) {
|
||
return rewrittenQuery === '' ? '' : '?' + rewrittenQuery;
|
||
}
|
||
// If the header is not present, there was no rewrite, so we use the search
|
||
// query of the response URL.
|
||
return urlToUrlWithoutFlightMarker(new URL(response.url)).search;
|
||
}
|
||
function getRenderedPathname(response) {
|
||
// If the server performed a rewrite, the pathname used to render the
|
||
// page will be different from the pathname in the request URL. In this case,
|
||
// the response will include a header that gives the rewritten pathname.
|
||
const rewrittenPath = response.headers.get(_approuterheaders.NEXT_REWRITTEN_PATH_HEADER);
|
||
return rewrittenPath ?? urlToUrlWithoutFlightMarker(new URL(response.url)).pathname;
|
||
}
|
||
function parseDynamicParamFromURLPart(paramType, pathnameParts, partIndex) {
|
||
// This needs to match the behavior in get-dynamic-param.ts.
|
||
switch(paramType){
|
||
// Catchalls
|
||
case 'c':
|
||
{
|
||
// Catchalls receive all the remaining URL parts. If there are no
|
||
// remaining pathname parts, return an empty array.
|
||
return partIndex < pathnameParts.length ? pathnameParts.slice(partIndex).map((s)=>encodeURIComponent(s)) : [];
|
||
}
|
||
// Catchall intercepted
|
||
case 'ci(..)(..)':
|
||
case 'ci(.)':
|
||
case 'ci(..)':
|
||
case 'ci(...)':
|
||
{
|
||
const prefix = paramType.length - 2;
|
||
return partIndex < pathnameParts.length ? pathnameParts.slice(partIndex).map((s, i)=>{
|
||
if (i === 0) {
|
||
return encodeURIComponent(s.slice(prefix));
|
||
}
|
||
return encodeURIComponent(s);
|
||
}) : [];
|
||
}
|
||
// Optional catchalls
|
||
case 'oc':
|
||
{
|
||
// Optional catchalls receive all the remaining URL parts, unless this is
|
||
// the end of the pathname, in which case they return null.
|
||
return partIndex < pathnameParts.length ? pathnameParts.slice(partIndex).map((s)=>encodeURIComponent(s)) : null;
|
||
}
|
||
// Dynamic
|
||
case 'd':
|
||
{
|
||
if (partIndex >= pathnameParts.length) {
|
||
// The route tree expected there to be more parts in the URL than there
|
||
// actually are. This could happen if the x-nextjs-rewritten-path header
|
||
// is incorrectly set, or potentially due to bug in Next.js. TODO:
|
||
// Should this be a hard error? During a prefetch, we can just abort.
|
||
// During a client navigation, we could trigger a hard refresh. But if
|
||
// it happens during initial render, we don't really have any
|
||
// recovery options.
|
||
return '';
|
||
}
|
||
return encodeURIComponent(pathnameParts[partIndex]);
|
||
}
|
||
// Dynamic intercepted
|
||
case 'di(..)(..)':
|
||
case 'di(.)':
|
||
case 'di(..)':
|
||
case 'di(...)':
|
||
{
|
||
const prefix = paramType.length - 2;
|
||
if (partIndex >= pathnameParts.length) {
|
||
// The route tree expected there to be more parts in the URL than there
|
||
// actually are. This could happen if the x-nextjs-rewritten-path header
|
||
// is incorrectly set, or potentially due to bug in Next.js. TODO:
|
||
// Should this be a hard error? During a prefetch, we can just abort.
|
||
// During a client navigation, we could trigger a hard refresh. But if
|
||
// it happens during initial render, we don't really have any
|
||
// recovery options.
|
||
return '';
|
||
}
|
||
return encodeURIComponent(pathnameParts[partIndex].slice(prefix));
|
||
}
|
||
default:
|
||
paramType;
|
||
return '';
|
||
}
|
||
}
|
||
function doesStaticSegmentAppearInURL(segment) {
|
||
// This is not a parameterized segment; however, we need to determine
|
||
// whether or not this segment appears in the URL. For example, this route
|
||
// groups do not appear in the URL, so they should be skipped. Any other
|
||
// special cases must be handled here.
|
||
// TODO: Consider encoding this directly into the router tree instead of
|
||
// inferring it on the client based on the segment type. Something like
|
||
// a `doesAppearInURL` flag in FlightRouterState.
|
||
if (segment === _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY || // For some reason, the loader tree sometimes includes extra __PAGE__
|
||
// "layouts" when part of a parallel route. But it's not a leaf node.
|
||
// Otherwise, we wouldn't need this special case because pages are
|
||
// always leaf nodes.
|
||
// TODO: Investigate why the loader produces these fake page segments.
|
||
segment.startsWith(_segment.PAGE_SEGMENT_KEY) || // Route groups.
|
||
segment[0] === '(' && segment.endsWith(')') || segment === _segment.DEFAULT_SEGMENT_KEY || segment === '/_not-found') {
|
||
return false;
|
||
} else {
|
||
// All other segment types appear in the URL
|
||
return true;
|
||
}
|
||
}
|
||
function getCacheKeyForDynamicParam(paramValue, renderedSearch) {
|
||
// This needs to match the logic in get-dynamic-param.ts, until we're able to
|
||
// unify the various implementations so that these are always computed on
|
||
// the client.
|
||
if (typeof paramValue === 'string') {
|
||
// TODO: Refactor or remove this helper function to accept a string rather
|
||
// than the whole segment type. Also we can probably just append the
|
||
// search string instead of turning it into JSON.
|
||
const pageSegmentWithSearchParams = (0, _segment.addSearchParamsIfPageSegment)(paramValue, Object.fromEntries(new URLSearchParams(renderedSearch)));
|
||
return pageSegmentWithSearchParams;
|
||
} else if (paramValue === null) {
|
||
return '';
|
||
} else {
|
||
return paramValue.join('/');
|
||
}
|
||
}
|
||
function urlToUrlWithoutFlightMarker(url) {
|
||
const urlWithoutFlightParameters = new URL(url);
|
||
urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
return urlWithoutFlightParameters;
|
||
}
|
||
function getParamValueFromCacheKey(paramCacheKey, paramType) {
|
||
// Turn the cache key string sent by the server (as part of FlightRouterState)
|
||
// into a value that can be passed to `useParams` and client components.
|
||
const isCatchAll = paramType === 'c' || paramType === 'oc';
|
||
if (isCatchAll) {
|
||
// Catch-all param keys are a concatenation of the path segments.
|
||
// See equivalent logic in `getSelectedParams`.
|
||
// TODO: We should just pass the array directly, rather than concatenate
|
||
// it to a string and then split it back to an array. It needs to be an
|
||
// array in some places, like when passing a key React, but we can convert
|
||
// it at runtime in those places.
|
||
return paramCacheKey.split('/');
|
||
}
|
||
return paramCacheKey;
|
||
}
|
||
function urlSearchParamsToParsedUrlQuery(searchParams) {
|
||
// Converts a URLSearchParams object to the same type used by the server when
|
||
// creating search params props, i.e. the type returned by Node's
|
||
// "querystring" module.
|
||
const result = {};
|
||
for (const [key, value] of searchParams.entries()){
|
||
if (result[key] === undefined) {
|
||
result[key] = value;
|
||
} else if (Array.isArray(result[key])) {
|
||
result[key].push(value);
|
||
} else {
|
||
result[key] = [
|
||
result[key],
|
||
value
|
||
];
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
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=route-params.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "createHrefFromUrl", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return createHrefFromUrl;
|
||
}
|
||
});
|
||
function createHrefFromUrl(url, includeHash = true) {
|
||
return url.pathname + url.search + (includeHash ? url.hash : '');
|
||
}
|
||
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=create-href-from-url.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/flight-data-helpers.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
createInitialRSCPayloadFromFallbackPrerender: null,
|
||
getFlightDataPartsFromPath: null,
|
||
getNextFlightSegmentPath: null,
|
||
normalizeFlightData: null,
|
||
prepareFlightRouterStateForRequest: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
createInitialRSCPayloadFromFallbackPrerender: function() {
|
||
return createInitialRSCPayloadFromFallbackPrerender;
|
||
},
|
||
getFlightDataPartsFromPath: function() {
|
||
return getFlightDataPartsFromPath;
|
||
},
|
||
getNextFlightSegmentPath: function() {
|
||
return getNextFlightSegmentPath;
|
||
},
|
||
normalizeFlightData: function() {
|
||
return normalizeFlightData;
|
||
},
|
||
prepareFlightRouterStateForRequest: function() {
|
||
return prepareFlightRouterStateForRequest;
|
||
}
|
||
});
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const _routeparams = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/route-params.js [app-ssr] (ecmascript)");
|
||
const _createhreffromurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js [app-ssr] (ecmascript)");
|
||
function getFlightDataPartsFromPath(flightDataPath) {
|
||
// Pick the last 4 items from the `FlightDataPath` to get the [tree, seedData, viewport, isHeadPartial].
|
||
const flightDataPathLength = 4;
|
||
// tree, seedData, and head are *always* the last three items in the `FlightDataPath`.
|
||
const [tree, seedData, head, isHeadPartial] = flightDataPath.slice(-flightDataPathLength);
|
||
// The `FlightSegmentPath` is everything except the last three items. For a root render, it won't be present.
|
||
const segmentPath = flightDataPath.slice(0, -flightDataPathLength);
|
||
return {
|
||
// TODO: Unify these two segment path helpers. We are inconsistently pushing an empty segment ("")
|
||
// to the start of the segment path in some places which makes it hard to use solely the segment path.
|
||
// Look for "// TODO-APP: remove ''" in the codebase.
|
||
pathToSegment: segmentPath.slice(0, -1),
|
||
segmentPath,
|
||
// if the `FlightDataPath` corresponds with the root, there'll be no segment path,
|
||
// in which case we default to ''.
|
||
segment: segmentPath[segmentPath.length - 1] ?? '',
|
||
tree,
|
||
seedData,
|
||
head,
|
||
isHeadPartial,
|
||
isRootRender: flightDataPath.length === flightDataPathLength
|
||
};
|
||
}
|
||
function createInitialRSCPayloadFromFallbackPrerender(response, fallbackInitialRSCPayload) {
|
||
// This is a static fallback page. In order to hydrate the page, we need to
|
||
// parse the client params from the URL, but to account for the possibility
|
||
// that the page was rewritten, we need to check the response headers
|
||
// for x-nextjs-rewritten-path or x-nextjs-rewritten-query headers. Since
|
||
// we can't access the headers of the initial document response, the client
|
||
// performs a fetch request to the current location. Since it's possible that
|
||
// the fetch request will be dynamically rewritten to a different path than
|
||
// the initial document, this fetch request delivers _all_ the hydration data
|
||
// for the page; it was not inlined into the document, like it normally
|
||
// would be.
|
||
//
|
||
// TODO: Consider treating the case where fetch is rewritten to a different
|
||
// path from the document as a special deopt case. We should optimistically
|
||
// assume this won't happen, inline the data into the document, and perform
|
||
// a minimal request (like a HEAD or range request) to verify that the
|
||
// response matches. Tricky to get right because we need to account for
|
||
// all the different deployment environments we support, like output:
|
||
// "export" mode, where we currently don't assume that custom response
|
||
// headers are present.
|
||
// Patch the Flight data sent by the server with the correct params parsed
|
||
// from the URL + response object.
|
||
const renderedPathname = (0, _routeparams.getRenderedPathname)(response);
|
||
const renderedSearch = (0, _routeparams.getRenderedSearch)(response);
|
||
const canonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(new URL(location.href));
|
||
const originalFlightDataPath = fallbackInitialRSCPayload.f[0];
|
||
const originalFlightRouterState = originalFlightDataPath[0];
|
||
return {
|
||
b: fallbackInitialRSCPayload.b,
|
||
c: canonicalUrl.split('/'),
|
||
q: renderedSearch,
|
||
i: fallbackInitialRSCPayload.i,
|
||
f: [
|
||
[
|
||
fillInFallbackFlightRouterState(originalFlightRouterState, renderedPathname, renderedSearch),
|
||
originalFlightDataPath[1],
|
||
originalFlightDataPath[2],
|
||
originalFlightDataPath[2]
|
||
]
|
||
],
|
||
m: fallbackInitialRSCPayload.m,
|
||
G: fallbackInitialRSCPayload.G,
|
||
S: fallbackInitialRSCPayload.S
|
||
};
|
||
}
|
||
function fillInFallbackFlightRouterState(flightRouterState, renderedPathname, renderedSearch) {
|
||
const pathnameParts = renderedPathname.split('/').filter((p)=>p !== '');
|
||
const index = 0;
|
||
return fillInFallbackFlightRouterStateImpl(flightRouterState, renderedSearch, pathnameParts, index);
|
||
}
|
||
function fillInFallbackFlightRouterStateImpl(flightRouterState, renderedSearch, pathnameParts, pathnamePartsIndex) {
|
||
const originalSegment = flightRouterState[0];
|
||
let newSegment;
|
||
let doesAppearInURL;
|
||
if (typeof originalSegment === 'string') {
|
||
newSegment = originalSegment;
|
||
doesAppearInURL = (0, _routeparams.doesStaticSegmentAppearInURL)(originalSegment);
|
||
} else {
|
||
const paramName = originalSegment[0];
|
||
const paramType = originalSegment[2];
|
||
const paramValue = (0, _routeparams.parseDynamicParamFromURLPart)(paramType, pathnameParts, pathnamePartsIndex);
|
||
const cacheKey = (0, _routeparams.getCacheKeyForDynamicParam)(paramValue, renderedSearch);
|
||
newSegment = [
|
||
paramName,
|
||
cacheKey,
|
||
paramType
|
||
];
|
||
doesAppearInURL = true;
|
||
}
|
||
// Only increment the index if the segment appears in the URL. If it's a
|
||
// "virtual" segment, like a route group, it remains the same.
|
||
const childPathnamePartsIndex = doesAppearInURL ? pathnamePartsIndex + 1 : pathnamePartsIndex;
|
||
const children = flightRouterState[1];
|
||
const newChildren = {};
|
||
for(let key in children){
|
||
const childFlightRouterState = children[key];
|
||
newChildren[key] = fillInFallbackFlightRouterStateImpl(childFlightRouterState, renderedSearch, pathnameParts, childPathnamePartsIndex);
|
||
}
|
||
const newState = [
|
||
newSegment,
|
||
newChildren,
|
||
null,
|
||
flightRouterState[3],
|
||
flightRouterState[4]
|
||
];
|
||
return newState;
|
||
}
|
||
function getNextFlightSegmentPath(flightSegmentPath) {
|
||
// Since `FlightSegmentPath` is a repeated tuple of `Segment` and `ParallelRouteKey`, we slice off two items
|
||
// to get the next segment path.
|
||
return flightSegmentPath.slice(2);
|
||
}
|
||
function normalizeFlightData(flightData) {
|
||
// FlightData can be a string when the server didn't respond with a proper flight response,
|
||
// or when a redirect happens, to signal to the client that it needs to perform an MPA navigation.
|
||
if (typeof flightData === 'string') {
|
||
return flightData;
|
||
}
|
||
return flightData.map((flightDataPath)=>getFlightDataPartsFromPath(flightDataPath));
|
||
}
|
||
function prepareFlightRouterStateForRequest(flightRouterState, isHmrRefresh) {
|
||
// HMR requests need the complete, unmodified state for proper functionality
|
||
if (isHmrRefresh) {
|
||
return encodeURIComponent(JSON.stringify(flightRouterState));
|
||
}
|
||
return encodeURIComponent(JSON.stringify(stripClientOnlyDataFromFlightRouterState(flightRouterState)));
|
||
}
|
||
/**
|
||
* Recursively strips client-only data from FlightRouterState while preserving
|
||
* server-needed information for proper rendering decisions.
|
||
*/ function stripClientOnlyDataFromFlightRouterState(flightRouterState) {
|
||
const [segment, parallelRoutes, _url, refreshMarker, isRootLayout, hasLoadingBoundary] = flightRouterState;
|
||
// __PAGE__ segments are always fetched from the server, so there's
|
||
// no need to send them up
|
||
const cleanedSegment = stripSearchParamsFromPageSegment(segment);
|
||
// Recursively process parallel routes
|
||
const cleanedParallelRoutes = {};
|
||
for (const [key, childState] of Object.entries(parallelRoutes)){
|
||
cleanedParallelRoutes[key] = stripClientOnlyDataFromFlightRouterState(childState);
|
||
}
|
||
const result = [
|
||
cleanedSegment,
|
||
cleanedParallelRoutes,
|
||
null,
|
||
shouldPreserveRefreshMarker(refreshMarker) ? refreshMarker : null
|
||
];
|
||
// Append optional fields if present
|
||
if (isRootLayout !== undefined) {
|
||
result[4] = isRootLayout;
|
||
}
|
||
if (hasLoadingBoundary !== undefined) {
|
||
result[5] = hasLoadingBoundary;
|
||
}
|
||
return result;
|
||
}
|
||
/**
|
||
* Strips search parameters from __PAGE__ segments to prevent sensitive
|
||
* client-side data from being sent to the server.
|
||
*/ function stripSearchParamsFromPageSegment(segment) {
|
||
if (typeof segment === 'string' && segment.startsWith(_segment.PAGE_SEGMENT_KEY + '?')) {
|
||
return _segment.PAGE_SEGMENT_KEY;
|
||
}
|
||
return segment;
|
||
}
|
||
/**
|
||
* Determines whether the refresh marker should be sent to the server
|
||
* Client-only markers like 'refresh' are stripped, while server-needed markers
|
||
* like 'refetch' and 'inside-shared-layout' are preserved.
|
||
*/ function shouldPreserveRefreshMarker(refreshMarker) {
|
||
return Boolean(refreshMarker && refreshMarker !== 'refresh');
|
||
}
|
||
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=flight-data-helpers.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-build-id.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
// This gets assigned as a side-effect during app initialization. Because it
|
||
// represents the build used to create the JS bundle, it should never change
|
||
// after being set, so we store it in a global variable.
|
||
//
|
||
// When performing RSC requests, if the incoming data has a different build ID,
|
||
// we perform an MPA navigation/refresh to load the updated build and ensure
|
||
// that the client and server in sync.
|
||
// Starts as an empty string. In practice, because setAppBuildId is called
|
||
// during initialization before hydration starts, this will always get
|
||
// reassigned to the actual build ID before it's ever needed by a navigation.
|
||
// If for some reasons it didn't, due to a bug or race condition, then on
|
||
// navigation the build comparision would fail and trigger an MPA navigation.
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
getAppBuildId: null,
|
||
setAppBuildId: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
getAppBuildId: function() {
|
||
return getAppBuildId;
|
||
},
|
||
setAppBuildId: function() {
|
||
return setAppBuildId;
|
||
}
|
||
});
|
||
let globalBuildId = '';
|
||
function setAppBuildId(buildId) {
|
||
globalBuildId = buildId;
|
||
}
|
||
function getAppBuildId() {
|
||
return globalBuildId;
|
||
}
|
||
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=app-build-id.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/hash.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
// http://www.cse.yorku.ca/~oz/hash.html
|
||
// More specifically, 32-bit hash via djbxor
|
||
// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)
|
||
// This is due to number type differences between rust for turbopack to js number types,
|
||
// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching
|
||
// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation
|
||
// as can gaurantee determinstic output from 32bit hash.
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
djb2Hash: null,
|
||
hexHash: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
djb2Hash: function() {
|
||
return djb2Hash;
|
||
},
|
||
hexHash: function() {
|
||
return hexHash;
|
||
}
|
||
});
|
||
function djb2Hash(str) {
|
||
let hash = 5381;
|
||
for(let i = 0; i < str.length; i++){
|
||
const char = str.charCodeAt(i);
|
||
hash = (hash << 5) + hash + char & 0xffffffff;
|
||
}
|
||
return hash >>> 0;
|
||
}
|
||
function hexHash(str) {
|
||
return djb2Hash(str).toString(36).slice(0, 5);
|
||
} //# sourceMappingURL=hash.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "computeCacheBustingSearchParam", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return computeCacheBustingSearchParam;
|
||
}
|
||
});
|
||
const _hash = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/hash.js [app-ssr] (ecmascript)");
|
||
function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {
|
||
if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) {
|
||
return '';
|
||
}
|
||
return (0, _hash.hexHash)([
|
||
prefetchHeader || '0',
|
||
segmentPrefetchHeader || '0',
|
||
stateTreeHeader || '0',
|
||
nextUrlHeader || '0'
|
||
].join(','));
|
||
} //# sourceMappingURL=cache-busting-search-param.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
setCacheBustingSearchParam: null,
|
||
setCacheBustingSearchParamWithHash: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
setCacheBustingSearchParam: function() {
|
||
return setCacheBustingSearchParam;
|
||
},
|
||
setCacheBustingSearchParamWithHash: function() {
|
||
return setCacheBustingSearchParamWithHash;
|
||
}
|
||
});
|
||
const _cachebustingsearchparam = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js [app-ssr] (ecmascript)");
|
||
const _approuterheaders = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/app-router-headers.js [app-ssr] (ecmascript)");
|
||
const setCacheBustingSearchParam = (url, headers)=>{
|
||
const uniqueCacheKey = (0, _cachebustingsearchparam.computeCacheBustingSearchParam)(headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]);
|
||
setCacheBustingSearchParamWithHash(url, uniqueCacheKey);
|
||
};
|
||
const setCacheBustingSearchParamWithHash = (url, hash)=>{
|
||
/**
|
||
* Note that we intentionally do not use `url.searchParams.set` here:
|
||
*
|
||
* const url = new URL('https://example.com/search?q=custom%20spacing');
|
||
* url.searchParams.set('_rsc', 'abc123');
|
||
* console.log(url.toString()); // Outputs: https://example.com/search?q=custom+spacing&_rsc=abc123
|
||
* ^ <--- this is causing confusion
|
||
* This is in fact intended based on https://url.spec.whatwg.org/#interface-urlsearchparams, but
|
||
* we want to preserve the %20 as %20 if that's what the user passed in, hence the custom
|
||
* logic below.
|
||
*/ const existingSearch = url.search;
|
||
const rawQuery = existingSearch.startsWith('?') ? existingSearch.slice(1) : existingSearch;
|
||
// Always remove any existing cache busting param and add a fresh one to ensure
|
||
// we have the correct value based on current request headers
|
||
const pairs = rawQuery.split('&').filter((pair)=>pair && !pair.startsWith(`${_approuterheaders.NEXT_RSC_UNION_QUERY}=`));
|
||
if (hash.length > 0) {
|
||
pairs.push(`${_approuterheaders.NEXT_RSC_UNION_QUERY}=${hash}`);
|
||
} else {
|
||
pairs.push(`${_approuterheaders.NEXT_RSC_UNION_QUERY}`);
|
||
}
|
||
url.search = pairs.length ? `?${pairs.join('&')}` : '';
|
||
};
|
||
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=set-cache-busting-search-param.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
createFetch: null,
|
||
createFromNextReadableStream: null,
|
||
fetchServerResponse: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
createFetch: function() {
|
||
return createFetch;
|
||
},
|
||
createFromNextReadableStream: function() {
|
||
return createFromNextReadableStream;
|
||
},
|
||
fetchServerResponse: function() {
|
||
return fetchServerResponse;
|
||
}
|
||
});
|
||
const _client = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js [app-ssr] (ecmascript)");
|
||
const _approuterheaders = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/app-router-headers.js [app-ssr] (ecmascript)");
|
||
const _appcallserver = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-call-server.js [app-ssr] (ecmascript)");
|
||
const _appfindsourcemapurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-find-source-map-url.js [app-ssr] (ecmascript)");
|
||
const _routerreducertypes = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js [app-ssr] (ecmascript)");
|
||
const _flightdatahelpers = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/flight-data-helpers.js [app-ssr] (ecmascript)");
|
||
const _appbuildid = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-build-id.js [app-ssr] (ecmascript)");
|
||
const _setcachebustingsearchparam = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js [app-ssr] (ecmascript)");
|
||
const _routeparams = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/route-params.js [app-ssr] (ecmascript)");
|
||
const createFromReadableStream = _client.createFromReadableStream;
|
||
const createFromFetch = _client.createFromFetch;
|
||
let createDebugChannel;
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
function doMpaNavigation(url) {
|
||
return (0, _routeparams.urlToUrlWithoutFlightMarker)(new URL(url, location.origin)).toString();
|
||
}
|
||
let abortController = new AbortController();
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
async function fetchServerResponse(url, options) {
|
||
const { flightRouterState, nextUrl, prefetchKind } = options;
|
||
const headers = {
|
||
// Enable flight response
|
||
[_approuterheaders.RSC_HEADER]: '1',
|
||
// Provide the current router state
|
||
[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(flightRouterState, options.isHmrRefresh)
|
||
};
|
||
/**
|
||
* Three cases:
|
||
* - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully
|
||
* - `prefetchKind` is `full` - we want to prefetch the whole page so same as above
|
||
* - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully
|
||
*/ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {
|
||
headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1';
|
||
}
|
||
if (("TURBOPACK compile-time value", "development") === 'development' && options.isHmrRefresh) {
|
||
headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] = '1';
|
||
}
|
||
if (nextUrl) {
|
||
headers[_approuterheaders.NEXT_URL] = nextUrl;
|
||
}
|
||
// In static export mode, we need to modify the URL to request the .txt file,
|
||
// but we should preserve the original URL for the canonical URL and error handling.
|
||
const originalUrl = url;
|
||
try {
|
||
// When creating a "temporary" prefetch (the "on-demand" prefetch that gets created on navigation, if one doesn't exist)
|
||
// we send the request with a "high" priority as it's in response to a user interaction that could be blocking a transition.
|
||
// Otherwise, all other prefetches are sent with a "low" priority.
|
||
// We use "auto" for in all other cases to match the existing default, as this function is shared outside of prefetching.
|
||
const fetchPriority = prefetchKind ? prefetchKind === _routerreducertypes.PrefetchKind.TEMPORARY ? 'high' : 'low' : 'auto';
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
// Typically, during a navigation, we decode the response using Flight's
|
||
// `createFromFetch` API, which accepts a `fetch` promise.
|
||
// TODO: Remove this check once the old PPR flag is removed
|
||
const isLegacyPPR = ("TURBOPACK compile-time value", false) && !("TURBOPACK compile-time value", false);
|
||
const shouldImmediatelyDecode = !isLegacyPPR;
|
||
const res = await createFetch(url, headers, fetchPriority, shouldImmediatelyDecode, abortController.signal);
|
||
const responseUrl = (0, _routeparams.urlToUrlWithoutFlightMarker)(new URL(res.url));
|
||
const canonicalUrl = res.redirected ? responseUrl : originalUrl;
|
||
const contentType = res.headers.get('content-type') || '';
|
||
const interception = !!res.headers.get('vary')?.includes(_approuterheaders.NEXT_URL);
|
||
const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);
|
||
const staleTimeHeaderSeconds = res.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER);
|
||
const staleTime = staleTimeHeaderSeconds !== null ? parseInt(staleTimeHeaderSeconds, 10) * 1000 : -1;
|
||
let isFlightResponse = contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER);
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
// If fetch returns something different than flight response handle it like a mpa navigation
|
||
// If the fetch was not 200, we also handle it like a mpa navigation
|
||
if (!isFlightResponse || !res.ok || !res.body) {
|
||
// in case the original URL came with a hash, preserve it before redirecting to the new URL
|
||
if (url.hash) {
|
||
responseUrl.hash = url.hash;
|
||
}
|
||
return doMpaNavigation(responseUrl.toString());
|
||
}
|
||
// We may navigate to a page that requires a different Webpack runtime.
|
||
// In prod, every page will have the same Webpack runtime.
|
||
// In dev, the Webpack runtime is minimal for each page.
|
||
// We need to ensure the Webpack runtime is updated before executing client-side JS of the new page.
|
||
// TODO: This needs to happen in the Flight Client.
|
||
// Or Webpack needs to include the runtime update in the Flight response as
|
||
// a blocking script.
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
let flightResponsePromise = res.flightResponse;
|
||
if (flightResponsePromise === null) {
|
||
// Typically, `createFetch` would have already started decoding the
|
||
// Flight response. If it hasn't, though, we need to decode it now.
|
||
// TODO: This should only be reachable if legacy PPR is enabled (i.e. PPR
|
||
// without Cache Components). Remove this branch once legacy PPR
|
||
// is deleted.
|
||
const flightStream = postponed ? createUnclosingPrefetchStream(res.body) : res.body;
|
||
flightResponsePromise = createFromNextReadableStream(flightStream, headers);
|
||
}
|
||
const flightResponse = await flightResponsePromise;
|
||
if ((0, _appbuildid.getAppBuildId)() !== flightResponse.b) {
|
||
return doMpaNavigation(res.url);
|
||
}
|
||
const normalizedFlightData = (0, _flightdatahelpers.normalizeFlightData)(flightResponse.f);
|
||
if (typeof normalizedFlightData === 'string') {
|
||
return doMpaNavigation(normalizedFlightData);
|
||
}
|
||
return {
|
||
flightData: normalizedFlightData,
|
||
canonicalUrl: canonicalUrl,
|
||
renderedSearch: (0, _routeparams.getRenderedSearch)(res),
|
||
couldBeIntercepted: interception,
|
||
prerendered: flightResponse.S,
|
||
postponed,
|
||
staleTime,
|
||
debugInfo: flightResponsePromise._debugInfo ?? null
|
||
};
|
||
} catch (err) {
|
||
if (!abortController.signal.aborted) {
|
||
console.error(`Failed to fetch RSC payload for ${originalUrl}. Falling back to browser navigation.`, err);
|
||
}
|
||
// If fetch fails handle it like a mpa navigation
|
||
// TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.
|
||
// See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.
|
||
return originalUrl.toString();
|
||
}
|
||
}
|
||
async function createFetch(url, headers, fetchPriority, shouldImmediatelyDecode, signal) {
|
||
// TODO: In output: "export" mode, the headers do nothing. Omit them (and the
|
||
// cache busting search param) from the request so they're
|
||
// maximally cacheable.
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (self.__next_r) {
|
||
headers[_approuterheaders.NEXT_HTML_REQUEST_ID_HEADER] = self.__next_r;
|
||
}
|
||
// Create a new request ID for the server action request. The server uses
|
||
// this to tag debug information sent via WebSocket to the client, which
|
||
// then routes those chunks to the debug channel associated with this ID.
|
||
headers[_approuterheaders.NEXT_REQUEST_ID_HEADER] = crypto.getRandomValues(new Uint32Array(1))[0].toString(16);
|
||
}
|
||
const fetchOptions = {
|
||
// Backwards compat for older browsers. `same-origin` is the default in modern browsers.
|
||
credentials: 'same-origin',
|
||
headers,
|
||
priority: fetchPriority || undefined,
|
||
signal
|
||
};
|
||
// `fetchUrl` is slightly different from `url` because we add a cache-busting
|
||
// search param to it. This should not leak outside of this function, so we
|
||
// track them separately.
|
||
let fetchUrl = new URL(url);
|
||
(0, _setcachebustingsearchparam.setCacheBustingSearchParam)(fetchUrl, headers);
|
||
let fetchPromise = fetch(fetchUrl, fetchOptions);
|
||
// Immediately pass the fetch promise to the Flight client so that the debug
|
||
// info includes the latency from the client to the server. The internal timer
|
||
// in React starts as soon as `createFromFetch` is called.
|
||
//
|
||
// The only case where we don't do this is during a prefetch, because we have
|
||
// to do some extra processing of the response stream (see
|
||
// `createUnclosingPrefetchStream`). But this is fine, because a top-level
|
||
// prefetch response never blocks a navigation; if it hasn't already been
|
||
// written into the cache by the time the navigation happens, the router will
|
||
// go straight to a dynamic request.
|
||
let flightResponsePromise = shouldImmediatelyDecode ? createFromNextFetch(fetchPromise, headers) : null;
|
||
let browserResponse = await fetchPromise;
|
||
// If the server responds with a redirect (e.g. 307), and the redirected
|
||
// location does not contain the cache busting search param set in the
|
||
// original request, the response is likely invalid — when following the
|
||
// redirect, the browser forwards the request headers, but since the cache
|
||
// busting search param is missing, the server will reject the request due to
|
||
// a mismatch.
|
||
//
|
||
// Ideally, we would be able to intercept the redirect response and perform it
|
||
// manually, instead of letting the browser automatically follow it, but this
|
||
// is not allowed by the fetch API.
|
||
//
|
||
// So instead, we must "replay" the redirect by fetching the new location
|
||
// again, but this time we'll append the cache busting search param to prevent
|
||
// a mismatch.
|
||
//
|
||
// TODO: We can optimize Next.js's built-in middleware APIs by returning a
|
||
// custom status code, to prevent the browser from automatically following it.
|
||
//
|
||
// This does not affect Server Action-based redirects; those are encoded
|
||
// differently, as part of the Flight body. It only affects redirects that
|
||
// occur in a middleware or a third-party proxy.
|
||
let redirected = browserResponse.redirected;
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
// Remove the cache busting search param from the response URL, to prevent it
|
||
// from leaking outside of this function.
|
||
const responseUrl = new URL(browserResponse.url, fetchUrl);
|
||
responseUrl.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);
|
||
const rscResponse = {
|
||
url: responseUrl.href,
|
||
// This is true if any redirects occurred, either automatically by the
|
||
// browser, or manually by us. So it's different from
|
||
// `browserResponse.redirected`, which only tells us whether the browser
|
||
// followed a redirect, and only for the last response in the chain.
|
||
redirected,
|
||
// These can be copied from the last browser response we received. We
|
||
// intentionally only expose the subset of fields that are actually used
|
||
// elsewhere in the codebase.
|
||
ok: browserResponse.ok,
|
||
headers: browserResponse.headers,
|
||
body: browserResponse.body,
|
||
status: browserResponse.status,
|
||
// This is the exact promise returned by `createFromFetch`. It contains
|
||
// debug information that we need to transfer to any derived promises that
|
||
// are later rendered by React.
|
||
flightResponse: flightResponsePromise
|
||
};
|
||
return rscResponse;
|
||
}
|
||
function createFromNextReadableStream(flightStream, requestHeaders) {
|
||
return createFromReadableStream(flightStream, {
|
||
callServer: _appcallserver.callServer,
|
||
findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,
|
||
debugChannel: createDebugChannel && createDebugChannel(requestHeaders)
|
||
});
|
||
}
|
||
function createFromNextFetch(promiseForResponse, requestHeaders) {
|
||
return createFromFetch(promiseForResponse, {
|
||
callServer: _appcallserver.callServer,
|
||
findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,
|
||
debugChannel: createDebugChannel && createDebugChannel(requestHeaders)
|
||
});
|
||
}
|
||
function createUnclosingPrefetchStream(originalFlightStream) {
|
||
// When PPR is enabled, prefetch streams may contain references that never
|
||
// resolve, because that's how we encode dynamic data access. In the decoded
|
||
// object returned by the Flight client, these are reified into hanging
|
||
// promises that suspend during render, which is effectively what we want.
|
||
// The UI resolves when it switches to the dynamic data stream
|
||
// (via useDeferredValue(dynamic, static)).
|
||
//
|
||
// However, the Flight implementation currently errors if the server closes
|
||
// the response before all the references are resolved. As a cheat to work
|
||
// around this, we wrap the original stream in a new stream that never closes,
|
||
// and therefore doesn't error.
|
||
const reader = originalFlightStream.getReader();
|
||
return new ReadableStream({
|
||
async pull (controller) {
|
||
while(true){
|
||
const { done, value } = await reader.read();
|
||
if (!done) {
|
||
// Pass to the target stream and keep consuming the Flight response
|
||
// from the server.
|
||
controller.enqueue(value);
|
||
continue;
|
||
}
|
||
// The server stream has closed. Exit, but intentionally do not close
|
||
// the target stream.
|
||
return;
|
||
}
|
||
}
|
||
});
|
||
}
|
||
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=fetch-server-response.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/lru.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
deleteFromLru: null,
|
||
lruPut: null,
|
||
updateLruSize: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
deleteFromLru: function() {
|
||
return deleteFromLru;
|
||
},
|
||
lruPut: function() {
|
||
return lruPut;
|
||
},
|
||
updateLruSize: function() {
|
||
return updateLruSize;
|
||
}
|
||
});
|
||
const _cachemap = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-map.js [app-ssr] (ecmascript)");
|
||
let head = null;
|
||
let didScheduleCleanup = false;
|
||
let lruSize = 0;
|
||
// TODO: I chose the max size somewhat arbitrarily. Consider setting this based
|
||
// on navigator.deviceMemory, or some other heuristic. We should make this
|
||
// customizable via the Next.js config, too.
|
||
const maxLruSize = 50 * 1024 * 1024 // 50 MB
|
||
;
|
||
function lruPut(node) {
|
||
if (head === node) {
|
||
// Already at the head
|
||
return;
|
||
}
|
||
const prev = node.prev;
|
||
const next = node.next;
|
||
if (next === null || prev === null) {
|
||
// This is an insertion
|
||
lruSize += node.size;
|
||
// Whenever we add an entry, we need to check if we've exceeded the
|
||
// max size. We don't evict entries immediately; they're evicted later in
|
||
// an asynchronous task.
|
||
ensureCleanupIsScheduled();
|
||
} else {
|
||
// This is a move. Remove from its current position.
|
||
prev.next = next;
|
||
next.prev = prev;
|
||
}
|
||
// Move to the front of the list
|
||
if (head === null) {
|
||
// This is the first entry
|
||
node.prev = node;
|
||
node.next = node;
|
||
} else {
|
||
// Add to the front of the list
|
||
const tail = head.prev;
|
||
node.prev = tail;
|
||
// In practice, this is never null, but that isn't encoded in the type
|
||
if (tail !== null) {
|
||
tail.next = node;
|
||
}
|
||
node.next = head;
|
||
head.prev = node;
|
||
}
|
||
head = node;
|
||
}
|
||
function updateLruSize(node, newNodeSize) {
|
||
// This is a separate function from `put` so that we can resize the entry
|
||
// regardless of whether it's currently being tracked by the LRU.
|
||
const prevNodeSize = node.size;
|
||
node.size = newNodeSize;
|
||
if (node.next === null) {
|
||
// This entry is not currently being tracked by the LRU.
|
||
return;
|
||
}
|
||
// Update the total LRU size
|
||
lruSize = lruSize - prevNodeSize + newNodeSize;
|
||
ensureCleanupIsScheduled();
|
||
}
|
||
function deleteFromLru(deleted) {
|
||
const next = deleted.next;
|
||
const prev = deleted.prev;
|
||
if (next !== null && prev !== null) {
|
||
lruSize -= deleted.size;
|
||
deleted.next = null;
|
||
deleted.prev = null;
|
||
// Remove from the list
|
||
if (head === deleted) {
|
||
// Update the head
|
||
if (next === head) {
|
||
// This was the last entry
|
||
head = null;
|
||
} else {
|
||
head = next;
|
||
}
|
||
} else {
|
||
prev.next = next;
|
||
next.prev = prev;
|
||
}
|
||
} else {
|
||
// Already deleted
|
||
}
|
||
}
|
||
function ensureCleanupIsScheduled() {
|
||
if (didScheduleCleanup || lruSize <= maxLruSize) {
|
||
return;
|
||
}
|
||
didScheduleCleanup = true;
|
||
requestCleanupCallback(cleanup);
|
||
}
|
||
function cleanup() {
|
||
didScheduleCleanup = false;
|
||
// Evict entries until we're at 90% capacity. We can assume this won't
|
||
// infinite loop because even if `maxLruSize` were 0, eventually
|
||
// `deleteFromLru` sets `head` to `null` when we run out entries.
|
||
const ninetyPercentMax = maxLruSize * 0.9;
|
||
while(lruSize > ninetyPercentMax && head !== null){
|
||
const tail = head.prev;
|
||
// In practice, this is never null, but that isn't encoded in the type
|
||
if (tail !== null) {
|
||
// Delete the entry from the map. In turn, this will remove it from
|
||
// the LRU.
|
||
(0, _cachemap.deleteFromCacheMap)(tail.value);
|
||
}
|
||
}
|
||
}
|
||
const requestCleanupCallback = typeof requestIdleCallback === 'function' ? requestIdleCallback : (cb)=>setTimeout(cb, 0);
|
||
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=lru.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-map.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
Fallback: null,
|
||
createCacheMap: null,
|
||
deleteFromCacheMap: null,
|
||
getFromCacheMap: null,
|
||
isValueExpired: null,
|
||
setInCacheMap: null,
|
||
setSizeInCacheMap: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
Fallback: function() {
|
||
return Fallback;
|
||
},
|
||
createCacheMap: function() {
|
||
return createCacheMap;
|
||
},
|
||
deleteFromCacheMap: function() {
|
||
return deleteFromCacheMap;
|
||
},
|
||
getFromCacheMap: function() {
|
||
return getFromCacheMap;
|
||
},
|
||
isValueExpired: function() {
|
||
return isValueExpired;
|
||
},
|
||
setInCacheMap: function() {
|
||
return setInCacheMap;
|
||
},
|
||
setSizeInCacheMap: function() {
|
||
return setSizeInCacheMap;
|
||
}
|
||
});
|
||
const _lru = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/lru.js [app-ssr] (ecmascript)");
|
||
const Fallback = {};
|
||
// This is a special internal key that is used for "revalidation" entries. It's
|
||
// an implementation detail that shouldn't leak outside of this module.
|
||
const Revalidation = {};
|
||
function createCacheMap() {
|
||
const cacheMap = {
|
||
parent: null,
|
||
key: null,
|
||
value: null,
|
||
map: null,
|
||
// LRU-related fields
|
||
prev: null,
|
||
next: null,
|
||
size: 0
|
||
};
|
||
return cacheMap;
|
||
}
|
||
function getOrInitialize(cacheMap, keys, isRevalidation) {
|
||
// Go through each level of keys until we find the entry that matches, or
|
||
// create a new entry if one doesn't exist.
|
||
//
|
||
// This function will only return entries that match the keypath _exactly_.
|
||
// Unlike getWithFallback, it will not access fallback entries unless it's
|
||
// explicitly part of the keypath.
|
||
let entry = cacheMap;
|
||
let remainingKeys = keys;
|
||
let key = null;
|
||
while(true){
|
||
const previousKey = key;
|
||
if (remainingKeys !== null) {
|
||
key = remainingKeys.value;
|
||
remainingKeys = remainingKeys.parent;
|
||
} else if (isRevalidation && previousKey !== Revalidation) {
|
||
// During a revalidation, we append an internal "Revalidation" key to
|
||
// the end of the keypath. The "normal" entry is its parent.
|
||
// However, if the parent entry is currently empty, we don't need to store
|
||
// this as a revalidation entry. Just insert the revalidation into the
|
||
// normal slot.
|
||
if (entry.value === null) {
|
||
return entry;
|
||
}
|
||
// Otheriwse, create a child entry.
|
||
key = Revalidation;
|
||
} else {
|
||
break;
|
||
}
|
||
let map = entry.map;
|
||
if (map !== null) {
|
||
const existingEntry = map.get(key);
|
||
if (existingEntry !== undefined) {
|
||
// Found a match. Keep going.
|
||
entry = existingEntry;
|
||
continue;
|
||
}
|
||
} else {
|
||
map = new Map();
|
||
entry.map = map;
|
||
}
|
||
// No entry exists yet at this level. Create a new one.
|
||
const newEntry = {
|
||
parent: entry,
|
||
key,
|
||
value: null,
|
||
map: null,
|
||
// LRU-related fields
|
||
prev: null,
|
||
next: null,
|
||
size: 0
|
||
};
|
||
map.set(key, newEntry);
|
||
entry = newEntry;
|
||
}
|
||
return entry;
|
||
}
|
||
function getFromCacheMap(now, currentCacheVersion, rootEntry, keys, isRevalidation) {
|
||
const entry = getEntryWithFallbackImpl(now, currentCacheVersion, rootEntry, keys, isRevalidation, 0);
|
||
if (entry === null || entry.value === null) {
|
||
return null;
|
||
}
|
||
// This is an LRU access. Move the entry to the front of the list.
|
||
(0, _lru.lruPut)(entry);
|
||
return entry.value;
|
||
}
|
||
function isValueExpired(now, currentCacheVersion, value) {
|
||
return value.staleAt <= now || value.version < currentCacheVersion;
|
||
}
|
||
function lazilyEvictIfNeeded(now, currentCacheVersion, entry) {
|
||
// We have a matching entry, but before we can return it, we need to check if
|
||
// it's still fresh. Otherwise it should be treated the same as a cache miss.
|
||
if (entry.value === null) {
|
||
// This entry has no value, so there's nothing to evict.
|
||
return entry;
|
||
}
|
||
const value = entry.value;
|
||
if (isValueExpired(now, currentCacheVersion, value)) {
|
||
// The value expired. Lazily evict it from the cache, and return null. This
|
||
// is conceptually the same as a cache miss.
|
||
deleteMapEntry(entry);
|
||
return null;
|
||
}
|
||
// The matched entry has not expired. Return it.
|
||
return entry;
|
||
}
|
||
function getEntryWithFallbackImpl(now, currentCacheVersion, entry, keys, isRevalidation, previousKey) {
|
||
// This is similar to getExactEntry, but if an exact match is not found for
|
||
// a key, it will return the fallback entry instead. This is recursive at
|
||
// every level, e.g. an entry with keypath [a, Fallback, c, Fallback] is
|
||
// valid match for [a, b, c, d].
|
||
//
|
||
// It will return the most specific match available.
|
||
let key;
|
||
let remainingKeys;
|
||
if (keys !== null) {
|
||
key = keys.value;
|
||
remainingKeys = keys.parent;
|
||
} else if (isRevalidation && previousKey !== Revalidation) {
|
||
// During a revalidation, we append an internal "Revalidation" key to
|
||
// the end of the keypath.
|
||
key = Revalidation;
|
||
remainingKeys = null;
|
||
} else {
|
||
// There are no more keys. This is the terminal entry.
|
||
// TODO: When performing a lookup during a navigation, as opposed to a
|
||
// prefetch, we may want to skip entries that are Pending if there's also
|
||
// a Fulfilled fallback entry. Tricky to say, though, since if it's
|
||
// already pending, it's likely to stream in soon. Maybe we could do this
|
||
// just on slow connections and offline mode.
|
||
return lazilyEvictIfNeeded(now, currentCacheVersion, entry);
|
||
}
|
||
const map = entry.map;
|
||
if (map !== null) {
|
||
const existingEntry = map.get(key);
|
||
if (existingEntry !== undefined) {
|
||
// Found an exact match for this key. Keep searching.
|
||
const result = getEntryWithFallbackImpl(now, currentCacheVersion, existingEntry, remainingKeys, isRevalidation, key);
|
||
if (result !== null) {
|
||
return result;
|
||
}
|
||
}
|
||
// No match found for this key. Check if there's a fallback.
|
||
const fallbackEntry = map.get(Fallback);
|
||
if (fallbackEntry !== undefined) {
|
||
// Found a fallback for this key. Keep searching.
|
||
return getEntryWithFallbackImpl(now, currentCacheVersion, fallbackEntry, remainingKeys, isRevalidation, key);
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
function setInCacheMap(cacheMap, keys, value, isRevalidation) {
|
||
// Add a value to the map at the given keypath. If the value is already
|
||
// part of the map, it's removed from its previous keypath. (NOTE: This is
|
||
// unlike a regular JS map, but the behavior is intentional.)
|
||
const entry = getOrInitialize(cacheMap, keys, isRevalidation);
|
||
setMapEntryValue(entry, value);
|
||
// This is an LRU access. Move the entry to the front of the list.
|
||
(0, _lru.lruPut)(entry);
|
||
(0, _lru.updateLruSize)(entry, value.size);
|
||
}
|
||
function setMapEntryValue(entry, value) {
|
||
if (entry.value !== null) {
|
||
// There's already a value at the given keypath. Disconnect the old value
|
||
// from the map. We're not calling `deleteMapEntry` here because the
|
||
// entry itself is still in the map. We just want to overwrite its value.
|
||
dropRef(entry.value);
|
||
// Fill the entry with the updated value.
|
||
const emptyEntry = entry;
|
||
emptyEntry.value = null;
|
||
fillEmptyReference(emptyEntry, value);
|
||
} else {
|
||
fillEmptyReference(entry, value);
|
||
}
|
||
}
|
||
function fillEmptyReference(entry, value) {
|
||
// This value may already be in the map at a different keypath.
|
||
// Grab a reference before we overwrite it.
|
||
const oldEntry = value.ref;
|
||
const fullEntry = entry;
|
||
fullEntry.value = value;
|
||
value.ref = fullEntry;
|
||
(0, _lru.updateLruSize)(fullEntry, value.size);
|
||
if (oldEntry !== null && oldEntry !== entry && oldEntry.value === value) {
|
||
// This value is already in the map at a different keypath in the map.
|
||
// Values only exist at a single keypath at a time. Remove it from the
|
||
// previous keypath.
|
||
//
|
||
// Note that only the internal map entry is garbage collected; we don't
|
||
// call `dropRef` here because it's still in the map, just
|
||
// at a new keypath (the one we just set, above).
|
||
deleteMapEntry(oldEntry);
|
||
}
|
||
}
|
||
function deleteFromCacheMap(value) {
|
||
const entry = value.ref;
|
||
if (entry === null) {
|
||
// This value is not a member of any map.
|
||
return;
|
||
}
|
||
dropRef(value);
|
||
deleteMapEntry(entry);
|
||
}
|
||
function dropRef(value) {
|
||
// Drop the value from the map by setting its `ref` backpointer to
|
||
// null. This is a separate operation from `deleteMapEntry` because when
|
||
// re-keying a value we need to be able to delete the old, internal map
|
||
// entry without garbage collecting the value itself.
|
||
value.ref = null;
|
||
}
|
||
function deleteMapEntry(entry) {
|
||
// Delete the entry from the cache.
|
||
const emptyEntry = entry;
|
||
emptyEntry.value = null;
|
||
(0, _lru.deleteFromLru)(entry);
|
||
// Check if we can garbage collect the entry.
|
||
const map = emptyEntry.map;
|
||
if (map === null) {
|
||
// Since this entry has no value, and also no child entries, we can
|
||
// garbage collect it. Remove it from its parent, and keep garbage
|
||
// collecting the parents until we reach a non-empty entry.
|
||
let parent = emptyEntry.parent;
|
||
let key = emptyEntry.key;
|
||
while(parent !== null){
|
||
const parentMap = parent.map;
|
||
if (parentMap !== null) {
|
||
parentMap.delete(key);
|
||
if (parentMap.size === 0) {
|
||
// We just removed the last entry in the parent map.
|
||
parent.map = null;
|
||
if (parent.value === null) {
|
||
// The parent node has no child entries, nor does it have a value
|
||
// on itself. It can be garbage collected. Keep going.
|
||
key = parent.key;
|
||
parent = parent.parent;
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
} else {
|
||
// Check if there's a revalidating entry. If so, promote it to a
|
||
// "normal" entry, since the normal one was just deleted.
|
||
const revalidatingEntry = map.get(Revalidation);
|
||
if (revalidatingEntry !== undefined && revalidatingEntry.value !== null) {
|
||
setMapEntryValue(emptyEntry, revalidatingEntry.value);
|
||
}
|
||
}
|
||
}
|
||
function setSizeInCacheMap(value, size) {
|
||
const entry = value.ref;
|
||
if (entry === null) {
|
||
// This value is not a member of any map.
|
||
return;
|
||
}
|
||
// Except during initialization (when the size is set to 0), this is the only
|
||
// place the `size` field should be updated, to ensure it's in sync with the
|
||
// the LRU.
|
||
value.size = size;
|
||
(0, _lru.updateLruSize)(entry, size);
|
||
}
|
||
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=cache-map.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/vary-path.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
appendLayoutVaryPath: null,
|
||
clonePageVaryPathWithNewSearchParams: null,
|
||
finalizeLayoutVaryPath: null,
|
||
finalizeMetadataVaryPath: null,
|
||
finalizePageVaryPath: null,
|
||
getFulfilledRouteVaryPath: null,
|
||
getRouteVaryPath: null,
|
||
getSegmentVaryPathForRequest: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
appendLayoutVaryPath: function() {
|
||
return appendLayoutVaryPath;
|
||
},
|
||
clonePageVaryPathWithNewSearchParams: function() {
|
||
return clonePageVaryPathWithNewSearchParams;
|
||
},
|
||
finalizeLayoutVaryPath: function() {
|
||
return finalizeLayoutVaryPath;
|
||
},
|
||
finalizeMetadataVaryPath: function() {
|
||
return finalizeMetadataVaryPath;
|
||
},
|
||
finalizePageVaryPath: function() {
|
||
return finalizePageVaryPath;
|
||
},
|
||
getFulfilledRouteVaryPath: function() {
|
||
return getFulfilledRouteVaryPath;
|
||
},
|
||
getRouteVaryPath: function() {
|
||
return getRouteVaryPath;
|
||
},
|
||
getSegmentVaryPathForRequest: function() {
|
||
return getSegmentVaryPathForRequest;
|
||
}
|
||
});
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
const _cachemap = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-map.js [app-ssr] (ecmascript)");
|
||
const _segmentvalueencoding = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js [app-ssr] (ecmascript)");
|
||
function getRouteVaryPath(pathname, search, nextUrl) {
|
||
// requestKey -> searchParams -> nextUrl
|
||
const varyPath = {
|
||
value: pathname,
|
||
parent: {
|
||
value: search,
|
||
parent: {
|
||
value: nextUrl,
|
||
parent: null
|
||
}
|
||
}
|
||
};
|
||
return varyPath;
|
||
}
|
||
function getFulfilledRouteVaryPath(pathname, search, nextUrl, couldBeIntercepted) {
|
||
// This is called when a route's data is fulfilled. The cache entry will be
|
||
// re-keyed based on which inputs the response varies by.
|
||
// requestKey -> searchParams -> nextUrl
|
||
const varyPath = {
|
||
value: pathname,
|
||
parent: {
|
||
value: search,
|
||
parent: {
|
||
value: couldBeIntercepted ? nextUrl : _cachemap.Fallback,
|
||
parent: null
|
||
}
|
||
}
|
||
};
|
||
return varyPath;
|
||
}
|
||
function appendLayoutVaryPath(parentPath, cacheKey) {
|
||
const varyPathPart = {
|
||
value: cacheKey,
|
||
parent: parentPath
|
||
};
|
||
return varyPathPart;
|
||
}
|
||
function finalizeLayoutVaryPath(requestKey, varyPath) {
|
||
const layoutVaryPath = {
|
||
value: requestKey,
|
||
parent: varyPath
|
||
};
|
||
return layoutVaryPath;
|
||
}
|
||
function finalizePageVaryPath(requestKey, renderedSearch, varyPath) {
|
||
// Unlike layouts, a page segment's vary path also includes the search string.
|
||
// requestKey -> searchParams -> pathParams
|
||
const pageVaryPath = {
|
||
value: requestKey,
|
||
parent: {
|
||
value: renderedSearch,
|
||
parent: varyPath
|
||
}
|
||
};
|
||
return pageVaryPath;
|
||
}
|
||
function finalizeMetadataVaryPath(pageRequestKey, renderedSearch, varyPath) {
|
||
// The metadata "segment" is not a real segment because it doesn't exist in
|
||
// the normal structure of the route tree, but in terms of caching, it
|
||
// behaves like a page segment because it varies by all the same params as
|
||
// a page.
|
||
//
|
||
// To keep the protocol for querying the server simple, the request key for
|
||
// the metadata does not include any path information. It's unnecessary from
|
||
// the server's perspective, because unlike page segments, there's only one
|
||
// metadata response per URL, i.e. there's no need to distinguish multiple
|
||
// parallel pages.
|
||
//
|
||
// However, this means the metadata request key is insufficient for
|
||
// caching the the metadata in the client cache, because on the client we
|
||
// use the request key to distinguish the metadata entry from all other
|
||
// page's metadata entries.
|
||
//
|
||
// So instead we create a simulated request key based on the page segment.
|
||
// Conceptually this is equivalent to the request key the server would have
|
||
// assigned the metadata segment if it treated it as part of the actual
|
||
// route structure.
|
||
// If there are multiple parallel pages, we use whichever is the first one.
|
||
// This is fine because the only difference between request keys for
|
||
// different parallel pages are things like route groups and parallel
|
||
// route slots. As long as it's always the same one, it doesn't matter.
|
||
const pageVaryPath = {
|
||
// Append the actual metadata request key to the page request key. Note
|
||
// that we're not using a separate vary path part; it's unnecessary because
|
||
// these are not conceptually separate inputs.
|
||
value: pageRequestKey + _segmentvalueencoding.HEAD_REQUEST_KEY,
|
||
parent: {
|
||
value: renderedSearch,
|
||
parent: varyPath
|
||
}
|
||
};
|
||
return pageVaryPath;
|
||
}
|
||
function getSegmentVaryPathForRequest(fetchStrategy, tree) {
|
||
// This is used for storing pending requests in the cache. We want to choose
|
||
// the most generic vary path based on the strategy used to fetch it, i.e.
|
||
// static/PPR versus runtime prefetching, so that it can be reused as much
|
||
// as possible.
|
||
//
|
||
// We may be able to re-key the response to something even more generic once
|
||
// we receive it — for example, if the server tells us that the response
|
||
// doesn't vary on a particular param — but even before we send the request,
|
||
// we know some params are reusable based on the fetch strategy alone. For
|
||
// example, a static prefetch will never vary on search params.
|
||
//
|
||
// The original vary path with all the params filled in is stored on the
|
||
// route tree object. We will clone this one to create a new vary path
|
||
// where certain params are replaced with Fallback.
|
||
//
|
||
// This result of this function is not stored anywhere. It's only used to
|
||
// access the cache a single time.
|
||
//
|
||
// TODO: Rather than create a new list object just to access the cache, the
|
||
// plan is to add the concept of a "vary mask". This will represent all the
|
||
// params that can be treated as Fallback. (Or perhaps the inverse.)
|
||
const originalVaryPath = tree.varyPath;
|
||
// Only page segments (and the special "metadata" segment, which is treated
|
||
// like a page segment for the purposes of caching) may contain search
|
||
// params. There's no reason to include them in the vary path otherwise.
|
||
if (tree.isPage) {
|
||
// Only a runtime prefetch will include search params in the vary path.
|
||
// Static prefetches never include search params, so they can be reused
|
||
// across all possible search param values.
|
||
const doesVaryOnSearchParams = fetchStrategy === _types.FetchStrategy.Full || fetchStrategy === _types.FetchStrategy.PPRRuntime;
|
||
if (!doesVaryOnSearchParams) {
|
||
// The response from the the server will not vary on search params. Clone
|
||
// the end of the original vary path to replace the search params
|
||
// with Fallback.
|
||
//
|
||
// requestKey -> searchParams -> pathParams
|
||
// ^ This part gets replaced with Fallback
|
||
const searchParamsVaryPath = originalVaryPath.parent;
|
||
const pathParamsVaryPath = searchParamsVaryPath.parent;
|
||
const patchedVaryPath = {
|
||
value: originalVaryPath.value,
|
||
parent: {
|
||
value: _cachemap.Fallback,
|
||
parent: pathParamsVaryPath
|
||
}
|
||
};
|
||
return patchedVaryPath;
|
||
}
|
||
}
|
||
// The request does vary on search params. We don't need to modify anything.
|
||
return originalVaryPath;
|
||
}
|
||
function clonePageVaryPathWithNewSearchParams(originalVaryPath, newSearch) {
|
||
// requestKey -> searchParams -> pathParams
|
||
// ^ This part gets replaced with newSearch
|
||
const searchParamsVaryPath = originalVaryPath.parent;
|
||
const clonedVaryPath = {
|
||
value: originalVaryPath.value,
|
||
parent: {
|
||
value: newSearch,
|
||
parent: searchParamsVaryPath.parent
|
||
}
|
||
};
|
||
return clonedVaryPath;
|
||
}
|
||
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=vary-path.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* For a given page path, this function ensures that there is a leading slash.
|
||
* If there is not a leading slash, one is added, otherwise it is noop.
|
||
*/ Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "ensureLeadingSlash", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return ensureLeadingSlash;
|
||
}
|
||
});
|
||
function ensureLeadingSlash(path) {
|
||
return path.startsWith('/') ? path : `/${path}`;
|
||
} //# sourceMappingURL=ensure-leading-slash.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/app-paths.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
normalizeAppPath: null,
|
||
normalizeRscURL: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
normalizeAppPath: function() {
|
||
return normalizeAppPath;
|
||
},
|
||
normalizeRscURL: function() {
|
||
return normalizeRscURL;
|
||
}
|
||
});
|
||
const _ensureleadingslash = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js [app-ssr] (ecmascript)");
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
function normalizeAppPath(route) {
|
||
return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{
|
||
// Empty segments are ignored.
|
||
if (!segment) {
|
||
return pathname;
|
||
}
|
||
// Groups are ignored.
|
||
if ((0, _segment.isGroupSegment)(segment)) {
|
||
return pathname;
|
||
}
|
||
// Parallel segments are ignored.
|
||
if (segment[0] === '@') {
|
||
return pathname;
|
||
}
|
||
// The last segment (if it's a leaf) should be ignored.
|
||
if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {
|
||
return pathname;
|
||
}
|
||
return `${pathname}/${segment}`;
|
||
}, ''));
|
||
}
|
||
function normalizeRscURL(url) {
|
||
return url.replace(/\.rsc($|\?)/, '$1');
|
||
} //# sourceMappingURL=app-paths.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
INTERCEPTION_ROUTE_MARKERS: null,
|
||
extractInterceptionRouteInformation: null,
|
||
isInterceptionRouteAppPath: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
INTERCEPTION_ROUTE_MARKERS: function() {
|
||
return INTERCEPTION_ROUTE_MARKERS;
|
||
},
|
||
extractInterceptionRouteInformation: function() {
|
||
return extractInterceptionRouteInformation;
|
||
},
|
||
isInterceptionRouteAppPath: function() {
|
||
return isInterceptionRouteAppPath;
|
||
}
|
||
});
|
||
const _apppaths = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/app-paths.js [app-ssr] (ecmascript)");
|
||
const INTERCEPTION_ROUTE_MARKERS = [
|
||
'(..)(..)',
|
||
'(.)',
|
||
'(..)',
|
||
'(...)'
|
||
];
|
||
function isInterceptionRouteAppPath(path) {
|
||
// TODO-APP: add more serious validation
|
||
return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;
|
||
}
|
||
function extractInterceptionRouteInformation(path) {
|
||
let interceptingRoute;
|
||
let marker;
|
||
let interceptedRoute;
|
||
for (const segment of path.split('/')){
|
||
marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));
|
||
if (marker) {
|
||
;
|
||
[interceptingRoute, interceptedRoute] = path.split(marker, 2);
|
||
break;
|
||
}
|
||
}
|
||
if (!interceptingRoute || !marker || !interceptedRoute) {
|
||
throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`), "__NEXT_ERROR_CODE", {
|
||
value: "E269",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed
|
||
;
|
||
switch(marker){
|
||
case '(.)':
|
||
// (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route
|
||
if (interceptingRoute === '/') {
|
||
interceptedRoute = `/${interceptedRoute}`;
|
||
} else {
|
||
interceptedRoute = interceptingRoute + '/' + interceptedRoute;
|
||
}
|
||
break;
|
||
case '(..)':
|
||
// (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route
|
||
if (interceptingRoute === '/') {
|
||
throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`), "__NEXT_ERROR_CODE", {
|
||
value: "E207",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/');
|
||
break;
|
||
case '(...)':
|
||
// (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route
|
||
interceptedRoute = '/' + interceptedRoute;
|
||
break;
|
||
case '(..)(..)':
|
||
// (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route
|
||
const splitInterceptingRoute = interceptingRoute.split('/');
|
||
if (splitInterceptingRoute.length <= 2) {
|
||
throw Object.defineProperty(new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`), "__NEXT_ERROR_CODE", {
|
||
value: "E486",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/');
|
||
break;
|
||
default:
|
||
throw Object.defineProperty(new Error('Invariant: unexpected marker'), "__NEXT_ERROR_CODE", {
|
||
value: "E112",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
return {
|
||
interceptingRoute,
|
||
interceptedRoute
|
||
};
|
||
} //# sourceMappingURL=interception-routes.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
computeChangedPath: null,
|
||
extractPathFromFlightRouterState: null,
|
||
getSelectedParams: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
computeChangedPath: function() {
|
||
return computeChangedPath;
|
||
},
|
||
extractPathFromFlightRouterState: function() {
|
||
return extractPathFromFlightRouterState;
|
||
},
|
||
getSelectedParams: function() {
|
||
return getSelectedParams;
|
||
}
|
||
});
|
||
const _interceptionroutes = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/interception-routes.js [app-ssr] (ecmascript)");
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const _matchsegments = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/match-segments.js [app-ssr] (ecmascript)");
|
||
const removeLeadingSlash = (segment)=>{
|
||
return segment[0] === '/' ? segment.slice(1) : segment;
|
||
};
|
||
const segmentToPathname = (segment)=>{
|
||
if (typeof segment === 'string') {
|
||
// 'children' is not a valid path -- it's technically a parallel route that corresponds with the current segment's page
|
||
// if we don't skip it, then the computed pathname might be something like `/children` which doesn't make sense.
|
||
if (segment === 'children') return '';
|
||
return segment;
|
||
}
|
||
return segment[1];
|
||
};
|
||
function normalizeSegments(segments) {
|
||
return segments.reduce((acc, segment)=>{
|
||
segment = removeLeadingSlash(segment);
|
||
if (segment === '' || (0, _segment.isGroupSegment)(segment)) {
|
||
return acc;
|
||
}
|
||
return `${acc}/${segment}`;
|
||
}, '') || '/';
|
||
}
|
||
function extractPathFromFlightRouterState(flightRouterState) {
|
||
const segment = Array.isArray(flightRouterState[0]) ? flightRouterState[0][1] : flightRouterState[0];
|
||
if (segment === _segment.DEFAULT_SEGMENT_KEY || _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m))) return undefined;
|
||
if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return '';
|
||
const segments = [
|
||
segmentToPathname(segment)
|
||
];
|
||
const parallelRoutes = flightRouterState[1] ?? {};
|
||
const childrenPath = parallelRoutes.children ? extractPathFromFlightRouterState(parallelRoutes.children) : undefined;
|
||
if (childrenPath !== undefined) {
|
||
segments.push(childrenPath);
|
||
} else {
|
||
for (const [key, value] of Object.entries(parallelRoutes)){
|
||
if (key === 'children') continue;
|
||
const childPath = extractPathFromFlightRouterState(value);
|
||
if (childPath !== undefined) {
|
||
segments.push(childPath);
|
||
}
|
||
}
|
||
}
|
||
return normalizeSegments(segments);
|
||
}
|
||
function computeChangedPathImpl(treeA, treeB) {
|
||
const [segmentA, parallelRoutesA] = treeA;
|
||
const [segmentB, parallelRoutesB] = treeB;
|
||
const normalizedSegmentA = segmentToPathname(segmentA);
|
||
const normalizedSegmentB = segmentToPathname(segmentB);
|
||
if (_interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m))) {
|
||
return '';
|
||
}
|
||
if (!(0, _matchsegments.matchSegment)(segmentA, segmentB)) {
|
||
// once we find where the tree changed, we compute the rest of the path by traversing the tree
|
||
return extractPathFromFlightRouterState(treeB) ?? '';
|
||
}
|
||
for(const parallelRouterKey in parallelRoutesA){
|
||
if (parallelRoutesB[parallelRouterKey]) {
|
||
const changedPath = computeChangedPathImpl(parallelRoutesA[parallelRouterKey], parallelRoutesB[parallelRouterKey]);
|
||
if (changedPath !== null) {
|
||
return `${segmentToPathname(segmentB)}/${changedPath}`;
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
function computeChangedPath(treeA, treeB) {
|
||
const changedPath = computeChangedPathImpl(treeA, treeB);
|
||
if (changedPath == null || changedPath === '/') {
|
||
return changedPath;
|
||
}
|
||
// lightweight normalization to remove route groups
|
||
return normalizeSegments(changedPath.split('/'));
|
||
}
|
||
function getSelectedParams(currentTree, params = {}) {
|
||
const parallelRoutes = currentTree[1];
|
||
for (const parallelRoute of Object.values(parallelRoutes)){
|
||
const segment = parallelRoute[0];
|
||
const isDynamicParameter = Array.isArray(segment);
|
||
const segmentValue = isDynamicParameter ? segment[1] : segment;
|
||
if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) continue;
|
||
// Ensure catchAll and optional catchall are turned into an array
|
||
const isCatchAll = isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc');
|
||
if (isCatchAll) {
|
||
params[segment[0]] = segment[1].split('/');
|
||
} else if (isDynamicParameter) {
|
||
params[segment[0]] = segment[1];
|
||
}
|
||
params = getSelectedParams(parallelRoute, params);
|
||
}
|
||
return params;
|
||
}
|
||
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=compute-changed-path.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/handle-mutable.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "handleMutable", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return handleMutable;
|
||
}
|
||
});
|
||
const _computechangedpath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js [app-ssr] (ecmascript)");
|
||
function isNotUndefined(value) {
|
||
return typeof value !== 'undefined';
|
||
}
|
||
function handleMutable(state, mutable) {
|
||
// shouldScroll is true by default, can override to false.
|
||
const shouldScroll = mutable.shouldScroll ?? true;
|
||
let previousNextUrl = state.previousNextUrl;
|
||
let nextUrl = state.nextUrl;
|
||
if (isNotUndefined(mutable.patchedTree)) {
|
||
// If we received a patched tree, we need to compute the changed path.
|
||
const changedPath = (0, _computechangedpath.computeChangedPath)(state.tree, mutable.patchedTree);
|
||
if (changedPath) {
|
||
// If the tree changed, we need to update the nextUrl
|
||
previousNextUrl = nextUrl;
|
||
nextUrl = changedPath;
|
||
} else if (!nextUrl) {
|
||
// if the tree ends up being the same (ie, no changed path), and we don't have a nextUrl, then we should use the canonicalUrl
|
||
nextUrl = state.canonicalUrl;
|
||
}
|
||
// otherwise this will be a no-op and continue to use the existing nextUrl
|
||
}
|
||
return {
|
||
// Set href.
|
||
canonicalUrl: mutable.canonicalUrl ?? state.canonicalUrl,
|
||
renderedSearch: mutable.renderedSearch ?? state.renderedSearch,
|
||
pushRef: {
|
||
pendingPush: isNotUndefined(mutable.pendingPush) ? mutable.pendingPush : state.pushRef.pendingPush,
|
||
mpaNavigation: isNotUndefined(mutable.mpaNavigation) ? mutable.mpaNavigation : state.pushRef.mpaNavigation,
|
||
preserveCustomHistoryState: isNotUndefined(mutable.preserveCustomHistoryState) ? mutable.preserveCustomHistoryState : state.pushRef.preserveCustomHistoryState
|
||
},
|
||
// All navigation requires scroll and focus management to trigger.
|
||
focusAndScrollRef: {
|
||
apply: shouldScroll ? isNotUndefined(mutable?.scrollableSegments) ? true : state.focusAndScrollRef.apply : false,
|
||
onlyHashChange: mutable.onlyHashChange || false,
|
||
hashFragment: shouldScroll ? mutable.hashFragment && mutable.hashFragment !== '' ? decodeURIComponent(mutable.hashFragment.slice(1)) : state.focusAndScrollRef.hashFragment : null,
|
||
segmentPaths: shouldScroll ? mutable?.scrollableSegments ?? state.focusAndScrollRef.segmentPaths : []
|
||
},
|
||
// Apply cache.
|
||
cache: mutable.cache ? mutable.cache : state.cache,
|
||
// Apply patched router state.
|
||
tree: isNotUndefined(mutable.patchedTree) ? mutable.patchedTree : state.tree,
|
||
nextUrl,
|
||
previousNextUrl: previousNextUrl,
|
||
debugInfo: mutable.collectedDebugInfo ?? 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=handle-mutable.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "createRouterCacheKey", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return createRouterCacheKey;
|
||
}
|
||
});
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
function createRouterCacheKey(segment, withoutSearchParameters = false) {
|
||
// if the segment is an array, it means it's a dynamic segment
|
||
// for example, ['lang', 'en', 'd']. We need to convert it to a string to store it as a cache node key.
|
||
if (Array.isArray(segment)) {
|
||
return `${segment[0]}|${segment[1]}|${segment[2]}`;
|
||
}
|
||
// Page segments might have search parameters, ie __PAGE__?foo=bar
|
||
// When `withoutSearchParameters` is true, we only want to return the page segment
|
||
if (withoutSearchParameters && segment.startsWith(_segment.PAGE_SEGMENT_KEY)) {
|
||
return _segment.PAGE_SEGMENT_KEY;
|
||
}
|
||
return segment;
|
||
}
|
||
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=create-router-cache-key.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "isNavigatingToNewRootLayout", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return isNavigatingToNewRootLayout;
|
||
}
|
||
});
|
||
function isNavigatingToNewRootLayout(currentTree, nextTree) {
|
||
// Compare segments
|
||
const currentTreeSegment = currentTree[0];
|
||
const nextTreeSegment = nextTree[0];
|
||
// If any segment is different before we find the root layout, the root layout has changed.
|
||
// E.g. /same/(group1)/layout.js -> /same/(group2)/layout.js
|
||
// First segment is 'same' for both, keep looking. (group1) changed to (group2) before the root layout was found, it must have changed.
|
||
if (Array.isArray(currentTreeSegment) && Array.isArray(nextTreeSegment)) {
|
||
// Compare dynamic param name and type but ignore the value, different values would not affect the current root layout
|
||
// /[name] - /slug1 and /slug2, both values (slug1 & slug2) still has the same layout /[name]/layout.js
|
||
if (currentTreeSegment[0] !== nextTreeSegment[0] || currentTreeSegment[2] !== nextTreeSegment[2]) {
|
||
return true;
|
||
}
|
||
} else if (currentTreeSegment !== nextTreeSegment) {
|
||
return true;
|
||
}
|
||
// Current tree root layout found
|
||
if (currentTree[4]) {
|
||
// If the next tree doesn't have the root layout flag, it must have changed.
|
||
return !nextTree[4];
|
||
}
|
||
// Current tree didn't have its root layout here, must have changed.
|
||
if (nextTree[4]) {
|
||
return true;
|
||
}
|
||
// We can't assume it's `parallelRoutes.children` here in case the root layout is `app/@something/layout.js`
|
||
// But it's not possible to be more than one parallelRoutes before the root layout is found
|
||
// TODO-APP: change to traverse all parallel routes
|
||
const currentTreeChild = Object.values(currentTree[1])[0];
|
||
const nextTreeChild = Object.values(nextTree[1])[0];
|
||
if (!currentTreeChild || !nextTreeChild) return true;
|
||
return isNavigatingToNewRootLayout(currentTreeChild, nextTreeChild);
|
||
}
|
||
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=is-navigating-to-new-root-layout.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
abortTask: null,
|
||
listenForDynamicRequest: null,
|
||
startPPRNavigation: null,
|
||
updateCacheNodeOnPopstateRestoration: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
abortTask: function() {
|
||
return abortTask;
|
||
},
|
||
listenForDynamicRequest: function() {
|
||
return listenForDynamicRequest;
|
||
},
|
||
startPPRNavigation: function() {
|
||
return startPPRNavigation;
|
||
},
|
||
updateCacheNodeOnPopstateRestoration: function() {
|
||
return updateCacheNodeOnPopstateRestoration;
|
||
}
|
||
});
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const _matchsegments = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/match-segments.js [app-ssr] (ecmascript)");
|
||
const _createhreffromurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js [app-ssr] (ecmascript)");
|
||
const _createroutercachekey = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js [app-ssr] (ecmascript)");
|
||
const _isnavigatingtonewrootlayout = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js [app-ssr] (ecmascript)");
|
||
const _navigatereducer = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js [app-ssr] (ecmascript)");
|
||
const MPA_NAVIGATION_TASK = {
|
||
route: null,
|
||
node: null,
|
||
dynamicRequestTree: null,
|
||
children: null
|
||
};
|
||
function startPPRNavigation(navigatedAt, oldUrl, oldCacheNode, oldRouterState, newRouterState, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, scrollableSegmentsResult) {
|
||
const segmentPath = [];
|
||
return updateCacheNodeOnNavigation(navigatedAt, oldUrl, oldCacheNode, oldRouterState, newRouterState, false, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, segmentPath, scrollableSegmentsResult);
|
||
}
|
||
function updateCacheNodeOnNavigation(navigatedAt, oldUrl, oldCacheNode, oldRouterState, newRouterState, didFindRootLayout, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, segmentPath, scrollableSegmentsResult) {
|
||
// Diff the old and new trees to reuse the shared layouts.
|
||
const oldRouterStateChildren = oldRouterState[1];
|
||
const newRouterStateChildren = newRouterState[1];
|
||
const prefetchDataChildren = prefetchData !== null ? prefetchData[1] : null;
|
||
if (!didFindRootLayout) {
|
||
// We're currently traversing the part of the tree that was also part of
|
||
// the previous route. If we discover a root layout, then we don't need to
|
||
// trigger an MPA navigation. See beginRenderingNewRouteTree for context.
|
||
const isRootLayout = newRouterState[4] === true;
|
||
if (isRootLayout) {
|
||
// Found a matching root layout.
|
||
didFindRootLayout = true;
|
||
}
|
||
}
|
||
const oldParallelRoutes = oldCacheNode.parallelRoutes;
|
||
// Clone the current set of segment children, even if they aren't active in
|
||
// the new tree.
|
||
// TODO: We currently retain all the inactive segments indefinitely, until
|
||
// there's an explicit refresh, or a parent layout is lazily refreshed. We
|
||
// rely on this for popstate navigations, which update the Router State Tree
|
||
// but do not eagerly perform a data fetch, because they expect the segment
|
||
// data to already be in the Cache Node tree. For highly static sites that
|
||
// are mostly read-only, this may happen only rarely, causing memory to
|
||
// leak. We should figure out a better model for the lifetime of inactive
|
||
// segments, so we can maintain instant back/forward navigations without
|
||
// leaking memory indefinitely.
|
||
const prefetchParallelRoutes = new Map(oldParallelRoutes);
|
||
// As we diff the trees, we may sometimes modify (copy-on-write, not mutate)
|
||
// the Route Tree that was returned by the server — for example, in the case
|
||
// of default parallel routes, we preserve the currently active segment. To
|
||
// avoid mutating the original tree, we clone the router state children along
|
||
// the return path.
|
||
let patchedRouterStateChildren = {};
|
||
let taskChildren = null;
|
||
// Most navigations require a request to fetch additional data from the
|
||
// server, either because the data was not already prefetched, or because the
|
||
// target route contains dynamic data that cannot be prefetched.
|
||
//
|
||
// However, if the target route is fully static, and it's already completely
|
||
// loaded into the segment cache, then we can skip the server request.
|
||
//
|
||
// This starts off as `false`, and is set to `true` if any of the child
|
||
// routes requires a dynamic request.
|
||
let needsDynamicRequest = false;
|
||
// As we traverse the children, we'll construct a FlightRouterState that can
|
||
// be sent to the server to request the dynamic data. If it turns out that
|
||
// nothing in the subtree is dynamic (i.e. needsDynamicRequest is false at the
|
||
// end), then this will be discarded.
|
||
// TODO: We can probably optimize the format of this data structure to only
|
||
// include paths that are dynamic. Instead of reusing the
|
||
// FlightRouterState type.
|
||
let dynamicRequestTreeChildren = {};
|
||
for(let parallelRouteKey in newRouterStateChildren){
|
||
const newRouterStateChild = newRouterStateChildren[parallelRouteKey];
|
||
const oldRouterStateChild = oldRouterStateChildren[parallelRouteKey];
|
||
const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);
|
||
const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;
|
||
const newSegmentChild = newRouterStateChild[0];
|
||
const newSegmentPathChild = segmentPath.concat([
|
||
parallelRouteKey,
|
||
newSegmentChild
|
||
]);
|
||
const newSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(newSegmentChild);
|
||
const oldSegmentChild = oldRouterStateChild !== undefined ? oldRouterStateChild[0] : undefined;
|
||
const oldCacheNodeChild = oldSegmentMapChild !== undefined ? oldSegmentMapChild.get(newSegmentKeyChild) : undefined;
|
||
let taskChild;
|
||
if (newSegmentChild === _segment.DEFAULT_SEGMENT_KEY) {
|
||
// This is another kind of leaf segment — a default route.
|
||
//
|
||
// Default routes have special behavior. When there's no matching segment
|
||
// for a parallel route, Next.js preserves the currently active segment
|
||
// during a client navigation — but not for initial render. The server
|
||
// leaves it to the client to account for this. So we need to handle
|
||
// it here.
|
||
if (oldRouterStateChild !== undefined) {
|
||
// Reuse the existing Router State for this segment. We spawn a "task"
|
||
// just to keep track of the updated router state; unlike most, it's
|
||
// already fulfilled and won't be affected by the dynamic response.
|
||
taskChild = reuseActiveSegmentInDefaultSlot(oldUrl, oldRouterStateChild);
|
||
} else {
|
||
// There's no currently active segment. Switch to the "create" path.
|
||
taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);
|
||
}
|
||
} else if (isSamePageNavigation && // Check if this is a page segment.
|
||
// TODO: We're not consistent about how we do this check. Some places
|
||
// check if the segment starts with PAGE_SEGMENT_KEY, but most seem to
|
||
// check if there any any children, which is why I'm doing it here. We
|
||
// should probably encode an empty children set as `null` though. Either
|
||
// way, we should update all the checks to be consistent.
|
||
Object.keys(newRouterStateChild[1]).length === 0) {
|
||
// We special case navigations to the exact same URL as the current
|
||
// location. It's a common UI pattern for apps to refresh when you click a
|
||
// link to the current page. So when this happens, we refresh the dynamic
|
||
// data in the page segments.
|
||
//
|
||
// Note that this does not apply if the any part of the hash or search
|
||
// query has changed. This might feel a bit weird but it makes more sense
|
||
// when you consider that the way to trigger this behavior is to click
|
||
// the same link multiple times.
|
||
//
|
||
// TODO: We should probably refresh the *entire* route when this case
|
||
// occurs, not just the page segments. Essentially treating it the same as
|
||
// a refresh() triggered by an action, which is the more explicit way of
|
||
// modeling the UI pattern described above.
|
||
//
|
||
// Also note that this only refreshes the dynamic data, not static/
|
||
// cached data. If the page segment is fully static and prefetched, the
|
||
// request is skipped. (This is also how refresh() works.)
|
||
taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);
|
||
} else if (oldRouterStateChild !== undefined && oldSegmentChild !== undefined && (0, _matchsegments.matchSegment)(newSegmentChild, oldSegmentChild)) {
|
||
if (oldCacheNodeChild !== undefined && oldRouterStateChild !== undefined) {
|
||
// This segment exists in both the old and new trees. Recursively update
|
||
// the children.
|
||
taskChild = updateCacheNodeOnNavigation(navigatedAt, oldUrl, oldCacheNodeChild, oldRouterStateChild, newRouterStateChild, didFindRootLayout, prefetchDataChild, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, newSegmentPathChild, scrollableSegmentsResult);
|
||
} else {
|
||
// There's no existing Cache Node for this segment. Switch to the
|
||
// "create" path.
|
||
taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);
|
||
}
|
||
} else {
|
||
// This is a new tree. Switch to the "create" path.
|
||
taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);
|
||
}
|
||
if (taskChild !== null) {
|
||
// Recursively propagate up the child tasks.
|
||
if (taskChild.route === null) {
|
||
// One of the child tasks discovered a change to the root layout.
|
||
// Immediately unwind from this recursive traversal.
|
||
return MPA_NAVIGATION_TASK;
|
||
}
|
||
if (taskChildren === null) {
|
||
taskChildren = new Map();
|
||
}
|
||
taskChildren.set(parallelRouteKey, taskChild);
|
||
const newCacheNodeChild = taskChild.node;
|
||
if (newCacheNodeChild !== null) {
|
||
const newSegmentMapChild = new Map(oldSegmentMapChild);
|
||
newSegmentMapChild.set(newSegmentKeyChild, newCacheNodeChild);
|
||
prefetchParallelRoutes.set(parallelRouteKey, newSegmentMapChild);
|
||
}
|
||
// The child tree's route state may be different from the prefetched
|
||
// route sent by the server. We need to clone it as we traverse back up
|
||
// the tree.
|
||
const taskChildRoute = taskChild.route;
|
||
patchedRouterStateChildren[parallelRouteKey] = taskChildRoute;
|
||
const dynamicRequestTreeChild = taskChild.dynamicRequestTree;
|
||
if (dynamicRequestTreeChild !== null) {
|
||
// Something in the child tree is dynamic.
|
||
needsDynamicRequest = true;
|
||
dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild;
|
||
} else {
|
||
dynamicRequestTreeChildren[parallelRouteKey] = taskChildRoute;
|
||
}
|
||
} else {
|
||
// The child didn't change. We can use the prefetched router state.
|
||
patchedRouterStateChildren[parallelRouteKey] = newRouterStateChild;
|
||
dynamicRequestTreeChildren[parallelRouteKey] = newRouterStateChild;
|
||
}
|
||
}
|
||
if (taskChildren === null) {
|
||
// No new tasks were spawned.
|
||
return null;
|
||
}
|
||
const newCacheNode = {
|
||
lazyData: null,
|
||
rsc: oldCacheNode.rsc,
|
||
// We intentionally aren't updating the prefetchRsc field, since this node
|
||
// is already part of the current tree, because it would be weird for
|
||
// prefetch data to be newer than the final data. It probably won't ever be
|
||
// observable anyway, but it could happen if the segment is unmounted then
|
||
// mounted again, because LayoutRouter will momentarily switch to rendering
|
||
// prefetchRsc, via useDeferredValue.
|
||
prefetchRsc: oldCacheNode.prefetchRsc,
|
||
head: oldCacheNode.head,
|
||
prefetchHead: oldCacheNode.prefetchHead,
|
||
loading: oldCacheNode.loading,
|
||
// Everything is cloned except for the children, which we computed above.
|
||
parallelRoutes: prefetchParallelRoutes,
|
||
navigatedAt
|
||
};
|
||
return {
|
||
// Return a cloned copy of the router state with updated children.
|
||
route: patchRouterStateWithNewChildren(newRouterState, patchedRouterStateChildren),
|
||
node: newCacheNode,
|
||
dynamicRequestTree: needsDynamicRequest ? patchRouterStateWithNewChildren(newRouterState, dynamicRequestTreeChildren) : null,
|
||
children: taskChildren
|
||
};
|
||
}
|
||
function beginRenderingNewRouteTree(navigatedAt, oldRouterState, newRouterState, existingCacheNode, didFindRootLayout, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {
|
||
if (!didFindRootLayout) {
|
||
// The route tree changed before we reached a layout. (The highest-level
|
||
// layout in a route tree is referred to as the "root" layout.) This could
|
||
// mean that we're navigating between two different root layouts. When this
|
||
// happens, we perform a full-page (MPA-style) navigation.
|
||
//
|
||
// However, the algorithm for deciding where to start rendering a route
|
||
// (i.e. the one performed in order to reach this function) is stricter
|
||
// than the one used to detect a change in the root layout. So just because
|
||
// we're re-rendering a segment outside of the root layout does not mean we
|
||
// should trigger a full-page navigation.
|
||
//
|
||
// Specifically, we handle dynamic parameters differently: two segments are
|
||
// considered the same even if their parameter values are different.
|
||
//
|
||
// Refer to isNavigatingToNewRootLayout for details.
|
||
//
|
||
// Note that we only have to perform this extra traversal if we didn't
|
||
// already discover a root layout in the part of the tree that is unchanged.
|
||
// In the common case, this branch is skipped completely.
|
||
if (oldRouterState === undefined || (0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(oldRouterState, newRouterState)) {
|
||
// The root layout changed. Perform a full-page navigation.
|
||
return MPA_NAVIGATION_TASK;
|
||
}
|
||
}
|
||
return createCacheNodeOnNavigation(navigatedAt, newRouterState, existingCacheNode, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);
|
||
}
|
||
function createCacheNodeOnNavigation(navigatedAt, routerState, existingCacheNode, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {
|
||
// Same traversal as updateCacheNodeNavigation, but we switch to this path
|
||
// once we reach the part of the tree that was not in the previous route. We
|
||
// don't need to diff against the old tree, we just need to create a new one.
|
||
// The head is assigned to every leaf segment delivered by the server. Based
|
||
// on corresponding logic in fill-lazy-items-till-leaf-with-head.ts
|
||
const routerStateChildren = routerState[1];
|
||
const isLeafSegment = Object.keys(routerStateChildren).length === 0;
|
||
// Even we're rendering inside the "new" part of the target tree, we may have
|
||
// a locally cached segment that we can reuse. This may come from either 1)
|
||
// the CacheNode tree, which lives in React state and is populated by previous
|
||
// navigations; or 2) the prefetch cache, which is a separate cache that is
|
||
// populated by prefetches.
|
||
let rsc;
|
||
let loading;
|
||
let head;
|
||
let cacheNodeNavigatedAt;
|
||
if (existingCacheNode !== undefined && // DYNAMIC_STALETIME_MS defaults to 0, but it can be increased using
|
||
// the experimental.staleTimes.dynamic config. When set, we'll avoid
|
||
// refetching dynamic data if it was fetched within the given threshold.
|
||
existingCacheNode.navigatedAt + _navigatereducer.DYNAMIC_STALETIME_MS > navigatedAt) {
|
||
// We have an existing CacheNode for this segment, and it's not stale. We
|
||
// should reuse it rather than request a new one.
|
||
rsc = existingCacheNode.rsc;
|
||
loading = existingCacheNode.loading;
|
||
head = existingCacheNode.head;
|
||
// Don't update the navigatedAt timestamp, since we're reusing stale data.
|
||
cacheNodeNavigatedAt = existingCacheNode.navigatedAt;
|
||
} else if (prefetchData !== null) {
|
||
// There's no existing CacheNode for this segment, but we do have prefetch
|
||
// data. If the prefetch data is fully static (i.e. does not contain any
|
||
// dynamic holes), we don't need to request it from the server.
|
||
rsc = prefetchData[0];
|
||
loading = prefetchData[2];
|
||
head = isLeafSegment ? possiblyPartialPrefetchHead : null;
|
||
// Even though we're accessing the data from the prefetch cache, this is
|
||
// conceptually a new segment, not a reused one. So we should update the
|
||
// navigatedAt timestamp.
|
||
cacheNodeNavigatedAt = navigatedAt;
|
||
const isPrefetchRscPartial = prefetchData[3];
|
||
if (isPrefetchRscPartial || // Check if the head is partial (only relevant if this is a leaf segment)
|
||
isPrefetchHeadPartial && isLeafSegment) {
|
||
// We only have partial data from this segment. Like missing segments, we
|
||
// must request the full data from the server.
|
||
return spawnPendingTask(navigatedAt, routerState, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);
|
||
} else {
|
||
// The prefetch data is fully static, so we can omit it from the
|
||
// navigation request.
|
||
}
|
||
} else {
|
||
// There's no prefetch for this segment. Everything from this point will be
|
||
// requested from the server, even if there are static children below it.
|
||
// Create a terminal task node that will later be fulfilled by
|
||
// server response.
|
||
return spawnPendingTask(navigatedAt, routerState, null, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);
|
||
}
|
||
// We already have a full segment we can render, so we don't need to request a
|
||
// new one from the server. Keep traversing down the tree until we reach
|
||
// something that requires a dynamic request.
|
||
const prefetchDataChildren = prefetchData !== null ? prefetchData[1] : null;
|
||
const taskChildren = new Map();
|
||
const existingCacheNodeChildren = existingCacheNode !== undefined ? existingCacheNode.parallelRoutes : null;
|
||
const cacheNodeChildren = new Map(existingCacheNodeChildren);
|
||
let dynamicRequestTreeChildren = {};
|
||
let needsDynamicRequest = false;
|
||
if (isLeafSegment) {
|
||
// The segment path of every leaf segment (i.e. page) is collected into
|
||
// a result array. This is used by the LayoutRouter to scroll to ensure that
|
||
// new pages are visible after a navigation.
|
||
// TODO: We should use a string to represent the segment path instead of
|
||
// an array. We already use a string representation for the path when
|
||
// accessing the Segment Cache, so we can use the same one.
|
||
scrollableSegmentsResult.push(segmentPath);
|
||
} else {
|
||
for(let parallelRouteKey in routerStateChildren){
|
||
const routerStateChild = routerStateChildren[parallelRouteKey];
|
||
const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;
|
||
const existingSegmentMapChild = existingCacheNodeChildren !== null ? existingCacheNodeChildren.get(parallelRouteKey) : undefined;
|
||
const segmentChild = routerStateChild[0];
|
||
const segmentPathChild = segmentPath.concat([
|
||
parallelRouteKey,
|
||
segmentChild
|
||
]);
|
||
const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);
|
||
const existingCacheNodeChild = existingSegmentMapChild !== undefined ? existingSegmentMapChild.get(segmentKeyChild) : undefined;
|
||
const taskChild = createCacheNodeOnNavigation(navigatedAt, routerStateChild, existingCacheNodeChild, prefetchDataChild, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPathChild, scrollableSegmentsResult);
|
||
taskChildren.set(parallelRouteKey, taskChild);
|
||
const dynamicRequestTreeChild = taskChild.dynamicRequestTree;
|
||
if (dynamicRequestTreeChild !== null) {
|
||
// Something in the child tree is dynamic.
|
||
needsDynamicRequest = true;
|
||
dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild;
|
||
} else {
|
||
dynamicRequestTreeChildren[parallelRouteKey] = routerStateChild;
|
||
}
|
||
const newCacheNodeChild = taskChild.node;
|
||
if (newCacheNodeChild !== null) {
|
||
const newSegmentMapChild = new Map();
|
||
newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);
|
||
cacheNodeChildren.set(parallelRouteKey, newSegmentMapChild);
|
||
}
|
||
}
|
||
}
|
||
return {
|
||
// Since we're inside a new route tree, unlike the
|
||
// `updateCacheNodeOnNavigation` path, the router state on the children
|
||
// tasks is always the same as the router state we pass in. So we don't need
|
||
// to clone/modify it.
|
||
route: routerState,
|
||
node: {
|
||
lazyData: null,
|
||
// Since this segment is already full, we don't need to use the
|
||
// `prefetchRsc` field.
|
||
rsc,
|
||
prefetchRsc: null,
|
||
head,
|
||
prefetchHead: null,
|
||
loading,
|
||
parallelRoutes: cacheNodeChildren,
|
||
navigatedAt: cacheNodeNavigatedAt
|
||
},
|
||
dynamicRequestTree: needsDynamicRequest ? patchRouterStateWithNewChildren(routerState, dynamicRequestTreeChildren) : null,
|
||
children: taskChildren
|
||
};
|
||
}
|
||
function patchRouterStateWithNewChildren(baseRouterState, newChildren) {
|
||
const clone = [
|
||
baseRouterState[0],
|
||
newChildren
|
||
];
|
||
// Based on equivalent logic in apply-router-state-patch-to-tree, but should
|
||
// confirm whether we need to copy all of these fields. Not sure the server
|
||
// ever sends, e.g. the refetch marker.
|
||
if (2 in baseRouterState) {
|
||
clone[2] = baseRouterState[2];
|
||
}
|
||
if (3 in baseRouterState) {
|
||
clone[3] = baseRouterState[3];
|
||
}
|
||
if (4 in baseRouterState) {
|
||
clone[4] = baseRouterState[4];
|
||
}
|
||
return clone;
|
||
}
|
||
function spawnPendingTask(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {
|
||
// Create a task that will later be fulfilled by data from the server.
|
||
// Clone the prefetched route tree and the `refetch` marker to it. We'll send
|
||
// this to the server so it knows where to start rendering.
|
||
const dynamicRequestTree = patchRouterStateWithNewChildren(routerState, routerState[1]);
|
||
dynamicRequestTree[3] = 'refetch';
|
||
const newTask = {
|
||
route: routerState,
|
||
// Corresponds to the part of the route that will be rendered on the server.
|
||
node: createPendingCacheNode(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult),
|
||
// Because this is non-null, and it gets propagated up through the parent
|
||
// tasks, the root task will know that it needs to perform a server request.
|
||
dynamicRequestTree,
|
||
children: null
|
||
};
|
||
return newTask;
|
||
}
|
||
function reuseActiveSegmentInDefaultSlot(oldUrl, oldRouterState) {
|
||
// This is a "default" segment. These are never sent by the server during a
|
||
// soft navigation; instead, the client reuses whatever segment was already
|
||
// active in that slot on the previous route. This means if we later need to
|
||
// refresh the segment, it will have to be refetched from the previous route's
|
||
// URL. We store it in the Flight Router State.
|
||
//
|
||
// TODO: We also mark the segment with a "refresh" marker but I think we can
|
||
// get rid of that eventually by making sure we only add URLs to page segments
|
||
// that are reused. Then the presence of the URL alone is enough.
|
||
let reusedRouterState;
|
||
const oldRefreshMarker = oldRouterState[3];
|
||
if (oldRefreshMarker === 'refresh') {
|
||
// This segment was already reused from an even older route. Keep its
|
||
// existing URL and refresh marker.
|
||
reusedRouterState = oldRouterState;
|
||
} else {
|
||
// This segment was not previously reused, and it's not on the new route.
|
||
// So it must have been delivered in the old route.
|
||
reusedRouterState = patchRouterStateWithNewChildren(oldRouterState, oldRouterState[1]);
|
||
reusedRouterState[2] = (0, _createhreffromurl.createHrefFromUrl)(oldUrl);
|
||
reusedRouterState[3] = 'refresh';
|
||
}
|
||
return {
|
||
route: reusedRouterState,
|
||
node: null,
|
||
dynamicRequestTree: null,
|
||
children: null
|
||
};
|
||
}
|
||
function listenForDynamicRequest(task, responsePromise) {
|
||
responsePromise.then((result)=>{
|
||
if (typeof result === 'string') {
|
||
// Happens when navigating to page in `pages` from `app`. We shouldn't
|
||
// get here because should have already handled this during
|
||
// the prefetch.
|
||
return;
|
||
}
|
||
const { flightData, debugInfo } = result;
|
||
for (const normalizedFlightData of flightData){
|
||
const { segmentPath, tree: serverRouterState, seedData: dynamicData, head: dynamicHead } = normalizedFlightData;
|
||
if (!dynamicData) {
|
||
continue;
|
||
}
|
||
writeDynamicDataIntoPendingTask(task, segmentPath, serverRouterState, dynamicData, dynamicHead, debugInfo);
|
||
}
|
||
// Now that we've exhausted all the data we received from the server, if
|
||
// there are any remaining pending tasks in the tree, abort them now.
|
||
// If there's any missing data, it will trigger a lazy fetch.
|
||
abortTask(task, null, debugInfo);
|
||
}, (error)=>{
|
||
// This will trigger an error during render
|
||
abortTask(task, error, null);
|
||
});
|
||
}
|
||
function writeDynamicDataIntoPendingTask(rootTask, segmentPath, serverRouterState, dynamicData, dynamicHead, debugInfo) {
|
||
// The data sent by the server represents only a subtree of the app. We need
|
||
// to find the part of the task tree that matches the server response, and
|
||
// fulfill it using the dynamic data.
|
||
//
|
||
// segmentPath represents the parent path of subtree. It's a repeating pattern
|
||
// of parallel route key and segment:
|
||
//
|
||
// [string, Segment, string, Segment, string, Segment, ...]
|
||
//
|
||
// Iterate through the path and finish any tasks that match this payload.
|
||
let task = rootTask;
|
||
for(let i = 0; i < segmentPath.length; i += 2){
|
||
const parallelRouteKey = segmentPath[i];
|
||
const segment = segmentPath[i + 1];
|
||
const taskChildren = task.children;
|
||
if (taskChildren !== null) {
|
||
const taskChild = taskChildren.get(parallelRouteKey);
|
||
if (taskChild !== undefined) {
|
||
const taskSegment = taskChild.route[0];
|
||
if ((0, _matchsegments.matchSegment)(segment, taskSegment)) {
|
||
// Found a match for this task. Keep traversing down the task tree.
|
||
task = taskChild;
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
// We didn't find a child task that matches the server data. Exit. We won't
|
||
// abort the task, though, because a different FlightDataPath may be able to
|
||
// fulfill it (see loop in listenForDynamicRequest). We only abort tasks
|
||
// once we've run out of data.
|
||
return;
|
||
}
|
||
finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead, debugInfo);
|
||
}
|
||
function finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead, debugInfo) {
|
||
if (task.dynamicRequestTree === null) {
|
||
// Everything in this subtree is already complete. Bail out.
|
||
return;
|
||
}
|
||
// dynamicData may represent a larger subtree than the task. Before we can
|
||
// finish the task, we need to line them up.
|
||
const taskChildren = task.children;
|
||
const taskNode = task.node;
|
||
if (taskChildren === null) {
|
||
// We've reached the leaf node of the pending task. The server data tree
|
||
// lines up the pending Cache Node tree. We can now switch to the
|
||
// normal algorithm.
|
||
if (taskNode !== null) {
|
||
finishPendingCacheNode(taskNode, task.route, serverRouterState, dynamicData, dynamicHead, debugInfo);
|
||
// Set this to null to indicate that this task is now complete.
|
||
task.dynamicRequestTree = null;
|
||
}
|
||
return;
|
||
}
|
||
// The server returned more data than we need to finish the task. Skip over
|
||
// the extra segments until we reach the leaf task node.
|
||
const serverChildren = serverRouterState[1];
|
||
const dynamicDataChildren = dynamicData[1];
|
||
for(const parallelRouteKey in serverRouterState){
|
||
const serverRouterStateChild = serverChildren[parallelRouteKey];
|
||
const dynamicDataChild = dynamicDataChildren[parallelRouteKey];
|
||
const taskChild = taskChildren.get(parallelRouteKey);
|
||
if (taskChild !== undefined) {
|
||
const taskSegment = taskChild.route[0];
|
||
if ((0, _matchsegments.matchSegment)(serverRouterStateChild[0], taskSegment) && dynamicDataChild !== null && dynamicDataChild !== undefined) {
|
||
// Found a match for this task. Keep traversing down the task tree.
|
||
return finishTaskUsingDynamicDataPayload(taskChild, serverRouterStateChild, dynamicDataChild, dynamicHead, debugInfo);
|
||
}
|
||
}
|
||
// We didn't find a child task that matches the server data. We won't abort
|
||
// the task, though, because a different FlightDataPath may be able to
|
||
// fulfill it (see loop in listenForDynamicRequest). We only abort tasks
|
||
// once we've run out of data.
|
||
}
|
||
}
|
||
function createPendingCacheNode(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {
|
||
const routerStateChildren = routerState[1];
|
||
const prefetchDataChildren = prefetchData !== null ? prefetchData[1] : null;
|
||
const parallelRoutes = new Map();
|
||
for(let parallelRouteKey in routerStateChildren){
|
||
const routerStateChild = routerStateChildren[parallelRouteKey];
|
||
const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;
|
||
const segmentChild = routerStateChild[0];
|
||
const segmentPathChild = segmentPath.concat([
|
||
parallelRouteKey,
|
||
segmentChild
|
||
]);
|
||
const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);
|
||
const newCacheNodeChild = createPendingCacheNode(navigatedAt, routerStateChild, prefetchDataChild === undefined ? null : prefetchDataChild, prefetchHead, isPrefetchHeadPartial, segmentPathChild, scrollableSegmentsResult);
|
||
const newSegmentMapChild = new Map();
|
||
newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);
|
||
parallelRoutes.set(parallelRouteKey, newSegmentMapChild);
|
||
}
|
||
// The head is assigned to every leaf segment delivered by the server. Based
|
||
// on corresponding logic in fill-lazy-items-till-leaf-with-head.ts
|
||
const isLeafSegment = parallelRoutes.size === 0;
|
||
if (isLeafSegment) {
|
||
// The segment path of every leaf segment (i.e. page) is collected into
|
||
// a result array. This is used by the LayoutRouter to scroll to ensure that
|
||
// new pages are visible after a navigation.
|
||
// TODO: We should use a string to represent the segment path instead of
|
||
// an array. We already use a string representation for the path when
|
||
// accessing the Segment Cache, so we can use the same one.
|
||
scrollableSegmentsResult.push(segmentPath);
|
||
}
|
||
const maybePrefetchRsc = prefetchData !== null ? prefetchData[0] : null;
|
||
return {
|
||
lazyData: null,
|
||
parallelRoutes: parallelRoutes,
|
||
prefetchRsc: maybePrefetchRsc !== undefined ? maybePrefetchRsc : null,
|
||
prefetchHead: isLeafSegment ? prefetchHead : [
|
||
null,
|
||
null
|
||
],
|
||
// Create a deferred promise. This will be fulfilled once the dynamic
|
||
// response is received from the server.
|
||
rsc: createDeferredRsc(),
|
||
head: isLeafSegment ? createDeferredRsc() : null,
|
||
// TODO: Technically, a loading boundary could contain dynamic data. We must
|
||
// have separate `loading` and `prefetchLoading` fields to handle this, like
|
||
// we do for the segment data and head.
|
||
loading: prefetchData !== null ? prefetchData[2] ?? null : createDeferredRsc(),
|
||
navigatedAt
|
||
};
|
||
}
|
||
function finishPendingCacheNode(cacheNode, taskState, serverState, dynamicData, dynamicHead, debugInfo) {
|
||
// Writes a dynamic response into an existing Cache Node tree. This does _not_
|
||
// create a new tree, it updates the existing tree in-place. So it must follow
|
||
// the Suspense rules of cache safety — it can resolve pending promises, but
|
||
// it cannot overwrite existing data. It can add segments to the tree (because
|
||
// a missing segment will cause the layout router to suspend).
|
||
// but it cannot delete them.
|
||
//
|
||
// We must resolve every promise in the tree, or else it will suspend
|
||
// indefinitely. If we did not receive data for a segment, we will resolve its
|
||
// data promise to `null` to trigger a lazy fetch during render.
|
||
const taskStateChildren = taskState[1];
|
||
const serverStateChildren = serverState[1];
|
||
const dataChildren = dynamicData[1];
|
||
// The router state that we traverse the tree with (taskState) is the same one
|
||
// that we used to construct the pending Cache Node tree. That way we're sure
|
||
// to resolve all the pending promises.
|
||
const parallelRoutes = cacheNode.parallelRoutes;
|
||
for(let parallelRouteKey in taskStateChildren){
|
||
const taskStateChild = taskStateChildren[parallelRouteKey];
|
||
const serverStateChild = serverStateChildren[parallelRouteKey];
|
||
const dataChild = dataChildren[parallelRouteKey];
|
||
const segmentMapChild = parallelRoutes.get(parallelRouteKey);
|
||
const taskSegmentChild = taskStateChild[0];
|
||
const taskSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(taskSegmentChild);
|
||
const cacheNodeChild = segmentMapChild !== undefined ? segmentMapChild.get(taskSegmentKeyChild) : undefined;
|
||
if (cacheNodeChild !== undefined) {
|
||
if (serverStateChild !== undefined && (0, _matchsegments.matchSegment)(taskSegmentChild, serverStateChild[0])) {
|
||
if (dataChild !== undefined && dataChild !== null) {
|
||
// This is the happy path. Recursively update all the children.
|
||
finishPendingCacheNode(cacheNodeChild, taskStateChild, serverStateChild, dataChild, dynamicHead, debugInfo);
|
||
} else {
|
||
// The server never returned data for this segment. Trigger a lazy
|
||
// fetch during render. This shouldn't happen because the Route Tree
|
||
// and the Seed Data tree sent by the server should always be the same
|
||
// shape when part of the same server response.
|
||
abortPendingCacheNode(taskStateChild, cacheNodeChild, null, debugInfo);
|
||
}
|
||
} else {
|
||
// The server never returned data for this segment. Trigger a lazy
|
||
// fetch during render.
|
||
abortPendingCacheNode(taskStateChild, cacheNodeChild, null, debugInfo);
|
||
}
|
||
} else {
|
||
// The server response matches what was expected to receive, but there's
|
||
// no matching Cache Node in the task tree. This is a bug in the
|
||
// implementation because we should have created a node for every
|
||
// segment in the tree that's associated with this task.
|
||
}
|
||
}
|
||
// Use the dynamic data from the server to fulfill the deferred RSC promise
|
||
// on the Cache Node.
|
||
const rsc = cacheNode.rsc;
|
||
const dynamicSegmentData = dynamicData[0];
|
||
if (rsc === null) {
|
||
// This is a lazy cache node. We can overwrite it. This is only safe
|
||
// because we know that the LayoutRouter suspends if `rsc` is `null`.
|
||
cacheNode.rsc = dynamicSegmentData;
|
||
} else if (isDeferredRsc(rsc)) {
|
||
// This is a deferred RSC promise. We can fulfill it with the data we just
|
||
// received from the server. If it was already resolved by a different
|
||
// navigation, then this does nothing because we can't overwrite data.
|
||
rsc.resolve(dynamicSegmentData, debugInfo);
|
||
} else {
|
||
// This is not a deferred RSC promise, nor is it empty, so it must have
|
||
// been populated by a different navigation. We must not overwrite it.
|
||
}
|
||
// If we navigated without a prefetch, then `loading` will be a deferred promise too.
|
||
// Fulfill it using the dynamic response so that we can display the loading boundary.
|
||
const loading = cacheNode.loading;
|
||
if (isDeferredRsc(loading)) {
|
||
const dynamicLoading = dynamicData[2];
|
||
loading.resolve(dynamicLoading, debugInfo);
|
||
}
|
||
// Check if this is a leaf segment. If so, it will have a `head` property with
|
||
// a pending promise that needs to be resolved with the dynamic head from
|
||
// the server.
|
||
const head = cacheNode.head;
|
||
if (isDeferredRsc(head)) {
|
||
head.resolve(dynamicHead, debugInfo);
|
||
}
|
||
}
|
||
function abortTask(task, error, debugInfo) {
|
||
const cacheNode = task.node;
|
||
if (cacheNode === null) {
|
||
// This indicates the task is already complete.
|
||
return;
|
||
}
|
||
const taskChildren = task.children;
|
||
if (taskChildren === null) {
|
||
// Reached the leaf task node. This is the root of a pending cache
|
||
// node tree.
|
||
abortPendingCacheNode(task.route, cacheNode, error, debugInfo);
|
||
} else {
|
||
// This is an intermediate task node. Keep traversing until we reach a
|
||
// task node with no children. That will be the root of the cache node tree
|
||
// that needs to be resolved.
|
||
for (const taskChild of taskChildren.values()){
|
||
abortTask(taskChild, error, debugInfo);
|
||
}
|
||
}
|
||
// Set this to null to indicate that this task is now complete.
|
||
task.dynamicRequestTree = null;
|
||
}
|
||
function abortPendingCacheNode(routerState, cacheNode, error, debugInfo) {
|
||
// For every pending segment in the tree, resolve its `rsc` promise to `null`
|
||
// to trigger a lazy fetch during render.
|
||
//
|
||
// Or, if an error object is provided, it will error instead.
|
||
const routerStateChildren = routerState[1];
|
||
const parallelRoutes = cacheNode.parallelRoutes;
|
||
for(let parallelRouteKey in routerStateChildren){
|
||
const routerStateChild = routerStateChildren[parallelRouteKey];
|
||
const segmentMapChild = parallelRoutes.get(parallelRouteKey);
|
||
if (segmentMapChild === undefined) {
|
||
continue;
|
||
}
|
||
const segmentChild = routerStateChild[0];
|
||
const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);
|
||
const cacheNodeChild = segmentMapChild.get(segmentKeyChild);
|
||
if (cacheNodeChild !== undefined) {
|
||
abortPendingCacheNode(routerStateChild, cacheNodeChild, error, debugInfo);
|
||
} else {
|
||
// This shouldn't happen because we're traversing the same tree that was
|
||
// used to construct the cache nodes in the first place.
|
||
}
|
||
}
|
||
const rsc = cacheNode.rsc;
|
||
if (isDeferredRsc(rsc)) {
|
||
if (error === null) {
|
||
// This will trigger a lazy fetch during render.
|
||
rsc.resolve(null, debugInfo);
|
||
} else {
|
||
// This will trigger an error during rendering.
|
||
rsc.reject(error, debugInfo);
|
||
}
|
||
}
|
||
const loading = cacheNode.loading;
|
||
if (isDeferredRsc(loading)) {
|
||
loading.resolve(null, debugInfo);
|
||
}
|
||
// Check if this is a leaf segment. If so, it will have a `head` property with
|
||
// a pending promise that needs to be resolved. If an error was provided, we
|
||
// will not resolve it with an error, since this is rendered at the root of
|
||
// the app. We want the segment to error, not the entire app.
|
||
const head = cacheNode.head;
|
||
if (isDeferredRsc(head)) {
|
||
head.resolve(null, debugInfo);
|
||
}
|
||
}
|
||
function updateCacheNodeOnPopstateRestoration(oldCacheNode, routerState) {
|
||
// A popstate navigation reads data from the local cache. It does not issue
|
||
// new network requests (unless the cache entries have been evicted). So, we
|
||
// update the cache to drop the prefetch data for any segment whose dynamic
|
||
// data was already received. This prevents an unnecessary flash back to PPR
|
||
// state during a back/forward navigation.
|
||
//
|
||
// This function clones the entire cache node tree and sets the `prefetchRsc`
|
||
// field to `null` to prevent it from being rendered. We can't mutate the node
|
||
// in place because this is a concurrent data structure.
|
||
const routerStateChildren = routerState[1];
|
||
const oldParallelRoutes = oldCacheNode.parallelRoutes;
|
||
const newParallelRoutes = new Map(oldParallelRoutes);
|
||
for(let parallelRouteKey in routerStateChildren){
|
||
const routerStateChild = routerStateChildren[parallelRouteKey];
|
||
const segmentChild = routerStateChild[0];
|
||
const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);
|
||
const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);
|
||
if (oldSegmentMapChild !== undefined) {
|
||
const oldCacheNodeChild = oldSegmentMapChild.get(segmentKeyChild);
|
||
if (oldCacheNodeChild !== undefined) {
|
||
const newCacheNodeChild = updateCacheNodeOnPopstateRestoration(oldCacheNodeChild, routerStateChild);
|
||
const newSegmentMapChild = new Map(oldSegmentMapChild);
|
||
newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);
|
||
newParallelRoutes.set(parallelRouteKey, newSegmentMapChild);
|
||
}
|
||
}
|
||
}
|
||
// Only show prefetched data if the dynamic data is still pending.
|
||
//
|
||
// Tehnically, what we're actually checking is whether the dynamic network
|
||
// response was received. But since it's a streaming response, this does not
|
||
// mean that all the dynamic data has fully streamed in. It just means that
|
||
// _some_ of the dynamic data was received. But as a heuristic, we assume that
|
||
// the rest dynamic data will stream in quickly, so it's still better to skip
|
||
// the prefetch state.
|
||
const rsc = oldCacheNode.rsc;
|
||
const shouldUsePrefetch = isDeferredRsc(rsc) && rsc.status === 'pending';
|
||
return {
|
||
lazyData: null,
|
||
rsc,
|
||
head: oldCacheNode.head,
|
||
prefetchHead: shouldUsePrefetch ? oldCacheNode.prefetchHead : [
|
||
null,
|
||
null
|
||
],
|
||
prefetchRsc: shouldUsePrefetch ? oldCacheNode.prefetchRsc : null,
|
||
loading: oldCacheNode.loading,
|
||
// These are the cloned children we computed above
|
||
parallelRoutes: newParallelRoutes,
|
||
navigatedAt: oldCacheNode.navigatedAt
|
||
};
|
||
}
|
||
const DEFERRED = Symbol();
|
||
// This type exists to distinguish a DeferredRsc from a Flight promise. It's a
|
||
// compromise to avoid adding an extra field on every Cache Node, which would be
|
||
// awkward because the pre-PPR parts of codebase would need to account for it,
|
||
// too. We can remove it once type Cache Node type is more settled.
|
||
function isDeferredRsc(value) {
|
||
return value && typeof value === 'object' && value.tag === DEFERRED;
|
||
}
|
||
function createDeferredRsc() {
|
||
// Create an unresolved promise that represents data derived from a Flight
|
||
// response. The promise will be resolved later as soon as we start receiving
|
||
// data from the server, i.e. as soon as the Flight client decodes and returns
|
||
// the top-level response object.
|
||
// The `_debugInfo` field contains profiling information. Promises that are
|
||
// created by Flight already have this info added by React; for any derived
|
||
// promise created by the router, we need to transfer the Flight debug info
|
||
// onto the derived promise.
|
||
//
|
||
// The debug info represents the latency between the start of the navigation
|
||
// and the start of rendering. (It does not represent the time it takes for
|
||
// whole stream to finish.)
|
||
const debugInfo = [];
|
||
let resolve;
|
||
let reject;
|
||
const pendingRsc = new Promise((res, rej)=>{
|
||
resolve = res;
|
||
reject = rej;
|
||
});
|
||
pendingRsc.status = 'pending';
|
||
pendingRsc.resolve = (value, responseDebugInfo)=>{
|
||
if (pendingRsc.status === 'pending') {
|
||
const fulfilledRsc = pendingRsc;
|
||
fulfilledRsc.status = 'fulfilled';
|
||
fulfilledRsc.value = value;
|
||
if (responseDebugInfo !== null) {
|
||
// Transfer the debug info to the derived promise.
|
||
debugInfo.push.apply(debugInfo, responseDebugInfo);
|
||
}
|
||
resolve(value);
|
||
}
|
||
};
|
||
pendingRsc.reject = (error, responseDebugInfo)=>{
|
||
if (pendingRsc.status === 'pending') {
|
||
const rejectedRsc = pendingRsc;
|
||
rejectedRsc.status = 'rejected';
|
||
rejectedRsc.reason = error;
|
||
if (responseDebugInfo !== null) {
|
||
// Transfer the debug info to the derived promise.
|
||
debugInfo.push.apply(debugInfo, responseDebugInfo);
|
||
}
|
||
reject(error);
|
||
}
|
||
};
|
||
pendingRsc.tag = DEFERRED;
|
||
pendingRsc._debugInfo = debugInfo;
|
||
return pendingRsc;
|
||
}
|
||
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=ppr-navigations.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/navigation.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "navigate", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return navigate;
|
||
}
|
||
});
|
||
const _fetchserverresponse = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js [app-ssr] (ecmascript)");
|
||
const _pprnavigations = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js [app-ssr] (ecmascript)");
|
||
const _createhreffromurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js [app-ssr] (ecmascript)");
|
||
const _cache = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache.js [app-ssr] (ecmascript)");
|
||
const _cachekey = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-key.js [app-ssr] (ecmascript)");
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
function navigate(url, currentUrl, currentCacheNode, currentFlightRouterState, nextUrl, shouldScroll, accumulation) {
|
||
const now = Date.now();
|
||
const href = url.href;
|
||
// We special case navigations to the exact same URL as the current location.
|
||
// It's a common UI pattern for apps to refresh when you click a link to the
|
||
// current page. So when this happens, we refresh the dynamic data in the page
|
||
// segments.
|
||
//
|
||
// Note that this does not apply if the any part of the hash or search query
|
||
// has changed. This might feel a bit weird but it makes more sense when you
|
||
// consider that the way to trigger this behavior is to click the same link
|
||
// multiple times.
|
||
//
|
||
// TODO: We should probably refresh the *entire* route when this case occurs,
|
||
// not just the page segments. Essentially treating it the same as a refresh()
|
||
// triggered by an action, which is the more explicit way of modeling the UI
|
||
// pattern described above.
|
||
//
|
||
// Also note that this only refreshes the dynamic data, not static/ cached
|
||
// data. If the page segment is fully static and prefetched, the request is
|
||
// skipped. (This is also how refresh() works.)
|
||
const isSamePageNavigation = // consider storing the current URL in the router state instead of reading
|
||
// from the location object. In practice I don't think this matters much
|
||
// since we keep them in sync anyway, but having two sources of truth can
|
||
// lead to subtle bugs and race conditions.
|
||
href === window.location.href;
|
||
const cacheKey = (0, _cachekey.createCacheKey)(href, nextUrl);
|
||
const route = (0, _cache.readRouteCacheEntry)(now, cacheKey);
|
||
if (route !== null && route.status === _cache.EntryStatus.Fulfilled) {
|
||
// We have a matching prefetch.
|
||
const snapshot = readRenderSnapshotFromCache(now, route, route.tree);
|
||
const prefetchFlightRouterState = snapshot.flightRouterState;
|
||
const prefetchSeedData = snapshot.seedData;
|
||
const headSnapshot = readHeadSnapshotFromCache(now, route);
|
||
const prefetchHead = headSnapshot.rsc;
|
||
const isPrefetchHeadPartial = headSnapshot.isPartial;
|
||
// TODO: The "canonicalUrl" stored in the cache doesn't include the hash,
|
||
// because hash entries do not vary by hash fragment. However, the one
|
||
// we set in the router state *does* include the hash, and it's used to
|
||
// sync with the actual browser location. To make this less of a refactor
|
||
// hazard, we should always track the hash separately from the rest of
|
||
// the URL.
|
||
const newCanonicalUrl = route.canonicalUrl + url.hash;
|
||
const renderedSearch = route.renderedSearch;
|
||
return navigateUsingPrefetchedRouteTree(now, url, currentUrl, nextUrl, isSamePageNavigation, currentCacheNode, currentFlightRouterState, prefetchFlightRouterState, prefetchSeedData, prefetchHead, isPrefetchHeadPartial, newCanonicalUrl, renderedSearch, shouldScroll, url.hash);
|
||
}
|
||
// There was no matching route tree in the cache. Let's see if we can
|
||
// construct an "optimistic" route tree.
|
||
//
|
||
// Do not construct an optimistic route tree if there was a cache hit, but
|
||
// the entry has a rejected status, since it may have been rejected due to a
|
||
// rewrite or redirect based on the search params.
|
||
//
|
||
// TODO: There are multiple reasons a prefetch might be rejected; we should
|
||
// track them explicitly and choose what to do here based on that.
|
||
if (route === null || route.status !== _cache.EntryStatus.Rejected) {
|
||
const optimisticRoute = (0, _cache.requestOptimisticRouteCacheEntry)(now, url, nextUrl);
|
||
if (optimisticRoute !== null) {
|
||
// We have an optimistic route tree. Proceed with the normal flow.
|
||
const snapshot = readRenderSnapshotFromCache(now, optimisticRoute, optimisticRoute.tree);
|
||
const prefetchFlightRouterState = snapshot.flightRouterState;
|
||
const prefetchSeedData = snapshot.seedData;
|
||
const headSnapshot = readHeadSnapshotFromCache(now, optimisticRoute);
|
||
const prefetchHead = headSnapshot.rsc;
|
||
const isPrefetchHeadPartial = headSnapshot.isPartial;
|
||
const newCanonicalUrl = optimisticRoute.canonicalUrl + url.hash;
|
||
const newRenderedSearch = optimisticRoute.renderedSearch;
|
||
return navigateUsingPrefetchedRouteTree(now, url, currentUrl, nextUrl, isSamePageNavigation, currentCacheNode, currentFlightRouterState, prefetchFlightRouterState, prefetchSeedData, prefetchHead, isPrefetchHeadPartial, newCanonicalUrl, newRenderedSearch, shouldScroll, url.hash);
|
||
}
|
||
}
|
||
// There's no matching prefetch for this route in the cache.
|
||
let collectedDebugInfo = accumulation.collectedDebugInfo ?? [];
|
||
if (accumulation.collectedDebugInfo === undefined) {
|
||
collectedDebugInfo = accumulation.collectedDebugInfo = [];
|
||
}
|
||
return {
|
||
tag: _types.NavigationResultTag.Async,
|
||
data: navigateDynamicallyWithNoPrefetch(now, url, currentUrl, nextUrl, isSamePageNavigation, currentCacheNode, currentFlightRouterState, shouldScroll, url.hash, collectedDebugInfo)
|
||
};
|
||
}
|
||
function navigateUsingPrefetchedRouteTree(now, url, currentUrl, nextUrl, isSamePageNavigation, currentCacheNode, currentFlightRouterState, prefetchFlightRouterState, prefetchSeedData, prefetchHead, isPrefetchHeadPartial, canonicalUrl, renderedSearch, shouldScroll, hash) {
|
||
// Recursively construct a prefetch tree by reading from the Segment Cache. To
|
||
// maintain compatibility, we output the same data structures as the old
|
||
// prefetching implementation: FlightRouterState and CacheNodeSeedData.
|
||
// TODO: Eventually updateCacheNodeOnNavigation (or the equivalent) should
|
||
// read from the Segment Cache directly. It's only structured this way for now
|
||
// so we can share code with the old prefetching implementation.
|
||
const scrollableSegments = [];
|
||
const task = (0, _pprnavigations.startPPRNavigation)(now, currentUrl, currentCacheNode, currentFlightRouterState, prefetchFlightRouterState, prefetchSeedData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, scrollableSegments);
|
||
if (task !== null) {
|
||
const dynamicRequestTree = task.dynamicRequestTree;
|
||
if (dynamicRequestTree !== null) {
|
||
const promiseForDynamicServerResponse = (0, _fetchserverresponse.fetchServerResponse)(new URL(canonicalUrl, url.origin), {
|
||
flightRouterState: dynamicRequestTree,
|
||
nextUrl
|
||
});
|
||
(0, _pprnavigations.listenForDynamicRequest)(task, promiseForDynamicServerResponse);
|
||
} else {
|
||
// The prefetched tree does not contain dynamic holes — it's
|
||
// fully static. We can skip the dynamic request.
|
||
}
|
||
return navigationTaskToResult(task, currentCacheNode, canonicalUrl, renderedSearch, scrollableSegments, shouldScroll, hash);
|
||
}
|
||
// The server sent back an empty tree patch. There's nothing to update, except
|
||
// possibly the URL.
|
||
return {
|
||
tag: _types.NavigationResultTag.NoOp,
|
||
data: {
|
||
canonicalUrl,
|
||
shouldScroll
|
||
}
|
||
};
|
||
}
|
||
function navigationTaskToResult(task, currentCacheNode, canonicalUrl, renderedSearch, scrollableSegments, shouldScroll, hash) {
|
||
const flightRouterState = task.route;
|
||
if (flightRouterState === null) {
|
||
// When no router state is provided, it signals that we should perform an
|
||
// MPA navigation.
|
||
return {
|
||
tag: _types.NavigationResultTag.MPA,
|
||
data: canonicalUrl
|
||
};
|
||
}
|
||
const newCacheNode = task.node;
|
||
return {
|
||
tag: _types.NavigationResultTag.Success,
|
||
data: {
|
||
flightRouterState,
|
||
cacheNode: newCacheNode !== null ? newCacheNode : currentCacheNode,
|
||
canonicalUrl,
|
||
renderedSearch,
|
||
scrollableSegments,
|
||
shouldScroll,
|
||
hash
|
||
}
|
||
};
|
||
}
|
||
function readRenderSnapshotFromCache(now, route, tree) {
|
||
let childRouterStates = {};
|
||
let childSeedDatas = {};
|
||
const slots = tree.slots;
|
||
if (slots !== null) {
|
||
for(const parallelRouteKey in slots){
|
||
const childTree = slots[parallelRouteKey];
|
||
const childResult = readRenderSnapshotFromCache(now, route, childTree);
|
||
childRouterStates[parallelRouteKey] = childResult.flightRouterState;
|
||
childSeedDatas[parallelRouteKey] = childResult.seedData;
|
||
}
|
||
}
|
||
let rsc = null;
|
||
let loading = null;
|
||
let isPartial = true;
|
||
const segmentEntry = (0, _cache.readSegmentCacheEntry)(now, tree.varyPath);
|
||
if (segmentEntry !== null) {
|
||
switch(segmentEntry.status){
|
||
case _cache.EntryStatus.Fulfilled:
|
||
{
|
||
// Happy path: a cache hit
|
||
rsc = segmentEntry.rsc;
|
||
loading = segmentEntry.loading;
|
||
isPartial = segmentEntry.isPartial;
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Pending:
|
||
{
|
||
// We haven't received data for this segment yet, but there's already
|
||
// an in-progress request. Since it's extremely likely to arrive
|
||
// before the dynamic data response, we might as well use it.
|
||
const promiseForFulfilledEntry = (0, _cache.waitForSegmentCacheEntry)(segmentEntry);
|
||
rsc = promiseForFulfilledEntry.then((entry)=>entry !== null ? entry.rsc : null);
|
||
loading = promiseForFulfilledEntry.then((entry)=>entry !== null ? entry.loading : null);
|
||
// Since we don't know yet whether the segment is partial or fully
|
||
// static, we must assume it's partial; we can't skip the
|
||
// dynamic request.
|
||
isPartial = true;
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Empty:
|
||
case _cache.EntryStatus.Rejected:
|
||
break;
|
||
default:
|
||
segmentEntry;
|
||
}
|
||
}
|
||
// The navigation implementation expects the search params to be
|
||
// included in the segment. However, the Segment Cache tracks search
|
||
// params separately from the rest of the segment key. So we need to
|
||
// add them back here.
|
||
//
|
||
// See corresponding comment in convertFlightRouterStateToTree.
|
||
//
|
||
// TODO: What we should do instead is update the navigation diffing
|
||
// logic to compare search params explicitly. This is a temporary
|
||
// solution until more of the Segment Cache implementation has settled.
|
||
const segment = (0, _segment.addSearchParamsIfPageSegment)(tree.segment, Object.fromEntries(new URLSearchParams(route.renderedSearch)));
|
||
// We don't need this information in a render snapshot, so this can just be a placeholder.
|
||
const hasRuntimePrefetch = false;
|
||
return {
|
||
flightRouterState: [
|
||
segment,
|
||
childRouterStates,
|
||
null,
|
||
null,
|
||
tree.isRootLayout
|
||
],
|
||
seedData: [
|
||
rsc,
|
||
childSeedDatas,
|
||
loading,
|
||
isPartial,
|
||
hasRuntimePrefetch
|
||
]
|
||
};
|
||
}
|
||
function readHeadSnapshotFromCache(now, route) {
|
||
// Same as readRenderSnapshotFromCache, but for the head
|
||
let rsc = null;
|
||
let isPartial = true;
|
||
const segmentEntry = (0, _cache.readSegmentCacheEntry)(now, route.metadata.varyPath);
|
||
if (segmentEntry !== null) {
|
||
switch(segmentEntry.status){
|
||
case _cache.EntryStatus.Fulfilled:
|
||
{
|
||
rsc = segmentEntry.rsc;
|
||
isPartial = segmentEntry.isPartial;
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Pending:
|
||
{
|
||
const promiseForFulfilledEntry = (0, _cache.waitForSegmentCacheEntry)(segmentEntry);
|
||
rsc = promiseForFulfilledEntry.then((entry)=>entry !== null ? entry.rsc : null);
|
||
isPartial = true;
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Empty:
|
||
case _cache.EntryStatus.Rejected:
|
||
break;
|
||
default:
|
||
segmentEntry;
|
||
}
|
||
}
|
||
return {
|
||
rsc,
|
||
isPartial
|
||
};
|
||
}
|
||
async function navigateDynamicallyWithNoPrefetch(now, url, currentUrl, nextUrl, isSamePageNavigation, currentCacheNode, currentFlightRouterState, shouldScroll, hash, collectedDebugInfo) {
|
||
// Runs when a navigation happens but there's no cached prefetch we can use.
|
||
// Don't bother to wait for a prefetch response; go straight to a full
|
||
// navigation that contains both static and dynamic data in a single stream.
|
||
// (This is unlike the old navigation implementation, which instead blocks
|
||
// the dynamic request until a prefetch request is received.)
|
||
//
|
||
// To avoid duplication of logic, we're going to pretend that the tree
|
||
// returned by the dynamic request is, in fact, a prefetch tree. Then we can
|
||
// use the same server response to write the actual data into the CacheNode
|
||
// tree. So it's the same flow as the "happy path" (prefetch, then
|
||
// navigation), except we use a single server response for both stages.
|
||
const promiseForDynamicServerResponse = (0, _fetchserverresponse.fetchServerResponse)(url, {
|
||
flightRouterState: currentFlightRouterState,
|
||
nextUrl
|
||
});
|
||
const result = await promiseForDynamicServerResponse;
|
||
if (typeof result === 'string') {
|
||
// This is an MPA navigation.
|
||
const newUrl = result;
|
||
return {
|
||
tag: _types.NavigationResultTag.MPA,
|
||
data: newUrl
|
||
};
|
||
}
|
||
const { flightData, canonicalUrl, renderedSearch, debugInfo: debugInfoFromResponse } = result;
|
||
if (debugInfoFromResponse !== null) {
|
||
collectedDebugInfo.push(...debugInfoFromResponse);
|
||
}
|
||
// Since the response format of dynamic requests and prefetches is slightly
|
||
// different, we'll need to massage the data a bit. Create FlightRouterState
|
||
// tree that simulates what we'd receive as the result of a prefetch.
|
||
const prefetchFlightRouterState = simulatePrefetchTreeUsingDynamicTreePatch(currentFlightRouterState, flightData);
|
||
// In our simulated prefetch payload, we pretend that there's no seed data
|
||
// nor a prefetch head.
|
||
const prefetchSeedData = null;
|
||
const prefetchHead = null;
|
||
const isPrefetchHeadPartial = true;
|
||
// Now we proceed exactly as we would for normal navigation.
|
||
const scrollableSegments = [];
|
||
const task = (0, _pprnavigations.startPPRNavigation)(now, currentUrl, currentCacheNode, currentFlightRouterState, prefetchFlightRouterState, prefetchSeedData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, scrollableSegments);
|
||
if (task !== null) {
|
||
// In this case, we've already sent the dynamic request, so we don't
|
||
// actually use the request tree created by `startPPRNavigation`,
|
||
// except to check if it contains dynamic holes.
|
||
//
|
||
// This is almost always true, but it could be false if all the segment data
|
||
// was present in the cache, but the route tree was not. E.g. navigating
|
||
// to a URL that was not prefetched but rewrites to a different URL
|
||
// that was.
|
||
const hasDynamicHoles = task.dynamicRequestTree !== null;
|
||
if (hasDynamicHoles) {
|
||
(0, _pprnavigations.listenForDynamicRequest)(task, promiseForDynamicServerResponse);
|
||
} else {
|
||
// The prefetched tree does not contain dynamic holes — it's
|
||
// fully static. We don't need to process the server response further.
|
||
}
|
||
return navigationTaskToResult(task, currentCacheNode, (0, _createhreffromurl.createHrefFromUrl)(canonicalUrl), renderedSearch, scrollableSegments, shouldScroll, hash);
|
||
}
|
||
// The server sent back an empty tree patch. There's nothing to update, except
|
||
// possibly the URL.
|
||
return {
|
||
tag: _types.NavigationResultTag.NoOp,
|
||
data: {
|
||
canonicalUrl: (0, _createhreffromurl.createHrefFromUrl)(canonicalUrl),
|
||
shouldScroll
|
||
}
|
||
};
|
||
}
|
||
function simulatePrefetchTreeUsingDynamicTreePatch(currentTree, flightData) {
|
||
// Takes the current FlightRouterState and applies the router state patch
|
||
// received from the server, to create a full FlightRouterState tree that we
|
||
// can pretend was returned by a prefetch.
|
||
//
|
||
// (It sounds similar to what applyRouterStatePatch does, but it doesn't need
|
||
// to handle stuff like interception routes or diffing since that will be
|
||
// handled later.)
|
||
let baseTree = currentTree;
|
||
for (const { segmentPath, tree: treePatch } of flightData){
|
||
// If the server sends us multiple tree patches, we only need to clone the
|
||
// base tree when applying the first patch. After the first patch, we can
|
||
// apply the remaining patches in place without copying.
|
||
const canMutateInPlace = baseTree !== currentTree;
|
||
baseTree = simulatePrefetchTreeUsingDynamicTreePatchImpl(baseTree, treePatch, segmentPath, canMutateInPlace, 0);
|
||
}
|
||
return baseTree;
|
||
}
|
||
function simulatePrefetchTreeUsingDynamicTreePatchImpl(baseRouterState, patch, segmentPath, canMutateInPlace, index) {
|
||
if (index === segmentPath.length) {
|
||
// We reached the part of the tree that we need to patch.
|
||
return patch;
|
||
}
|
||
// segmentPath represents the parent path of subtree. It's a repeating
|
||
// pattern of parallel route key and segment:
|
||
//
|
||
// [string, Segment, string, Segment, string, Segment, ...]
|
||
//
|
||
// This path tells us which part of the base tree to apply the tree patch.
|
||
//
|
||
// NOTE: In the case of a fully dynamic request with no prefetch, we receive
|
||
// the FlightRouterState patch in the same request as the dynamic data.
|
||
// Therefore we don't need to worry about diffing the segment values; we can
|
||
// assume the server sent us a correct result.
|
||
const updatedParallelRouteKey = segmentPath[index];
|
||
// const segment: Segment = segmentPath[index + 1] <-- Not used, see note above
|
||
const baseChildren = baseRouterState[1];
|
||
const newChildren = {};
|
||
for(const parallelRouteKey in baseChildren){
|
||
if (parallelRouteKey === updatedParallelRouteKey) {
|
||
const childBaseRouterState = baseChildren[parallelRouteKey];
|
||
newChildren[parallelRouteKey] = simulatePrefetchTreeUsingDynamicTreePatchImpl(childBaseRouterState, patch, segmentPath, canMutateInPlace, // the end of the segment path.
|
||
index + 2);
|
||
} else {
|
||
// This child is not being patched. Copy it over as-is.
|
||
newChildren[parallelRouteKey] = baseChildren[parallelRouteKey];
|
||
}
|
||
}
|
||
if (canMutateInPlace) {
|
||
// We can mutate the base tree in place, because the base tree is already
|
||
// a clone.
|
||
baseRouterState[1] = newChildren;
|
||
return baseRouterState;
|
||
}
|
||
// Clone all the fields except the children.
|
||
//
|
||
// Based on equivalent logic in apply-router-state-patch-to-tree, but should
|
||
// confirm whether we need to copy all of these fields. Not sure the server
|
||
// ever sends, e.g. the refetch marker.
|
||
const clone = [
|
||
baseRouterState[0],
|
||
newChildren
|
||
];
|
||
if (2 in baseRouterState) {
|
||
clone[2] = baseRouterState[2];
|
||
}
|
||
if (3 in baseRouterState) {
|
||
clone[3] = baseRouterState[3];
|
||
}
|
||
if (4 in baseRouterState) {
|
||
clone[4] = baseRouterState[4];
|
||
}
|
||
return clone;
|
||
}
|
||
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=navigation.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
DYNAMIC_STALETIME_MS: null,
|
||
STATIC_STALETIME_MS: null,
|
||
generateSegmentsFromPatch: null,
|
||
handleExternalUrl: null,
|
||
navigateReducer: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
DYNAMIC_STALETIME_MS: function() {
|
||
return DYNAMIC_STALETIME_MS;
|
||
},
|
||
STATIC_STALETIME_MS: function() {
|
||
return STATIC_STALETIME_MS;
|
||
},
|
||
generateSegmentsFromPatch: function() {
|
||
return generateSegmentsFromPatch;
|
||
},
|
||
handleExternalUrl: function() {
|
||
return handleExternalUrl;
|
||
},
|
||
navigateReducer: function() {
|
||
return navigateReducer;
|
||
}
|
||
});
|
||
const _createhreffromurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js [app-ssr] (ecmascript)");
|
||
const _handlemutable = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/handle-mutable.js [app-ssr] (ecmascript)");
|
||
const _navigation = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/navigation.js [app-ssr] (ecmascript)");
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
const _cache = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache.js [app-ssr] (ecmascript)");
|
||
const DYNAMIC_STALETIME_MS = Number(("TURBOPACK compile-time value", "0")) * 1000;
|
||
const STATIC_STALETIME_MS = (0, _cache.getStaleTimeMs)(Number(("TURBOPACK compile-time value", "300")));
|
||
function handleExternalUrl(state, mutable, url, pendingPush) {
|
||
mutable.mpaNavigation = true;
|
||
mutable.canonicalUrl = url;
|
||
mutable.pendingPush = pendingPush;
|
||
mutable.scrollableSegments = undefined;
|
||
return (0, _handlemutable.handleMutable)(state, mutable);
|
||
}
|
||
function generateSegmentsFromPatch(flightRouterPatch) {
|
||
const segments = [];
|
||
const [segment, parallelRoutes] = flightRouterPatch;
|
||
if (Object.keys(parallelRoutes).length === 0) {
|
||
return [
|
||
[
|
||
segment
|
||
]
|
||
];
|
||
}
|
||
for (const [parallelRouteKey, parallelRoute] of Object.entries(parallelRoutes)){
|
||
for (const childSegment of generateSegmentsFromPatch(parallelRoute)){
|
||
// If the segment is empty, it means we are at the root of the tree
|
||
if (segment === '') {
|
||
segments.push([
|
||
parallelRouteKey,
|
||
...childSegment
|
||
]);
|
||
} else {
|
||
segments.push([
|
||
segment,
|
||
parallelRouteKey,
|
||
...childSegment
|
||
]);
|
||
}
|
||
}
|
||
}
|
||
return segments;
|
||
}
|
||
function handleNavigationResult(url, state, mutable, pendingPush, result) {
|
||
switch(result.tag){
|
||
case _types.NavigationResultTag.MPA:
|
||
{
|
||
// Perform an MPA navigation.
|
||
const newUrl = result.data;
|
||
return handleExternalUrl(state, mutable, newUrl, pendingPush);
|
||
}
|
||
case _types.NavigationResultTag.NoOp:
|
||
{
|
||
// The server responded with no change to the current page. However, if
|
||
// the URL changed, we still need to update that.
|
||
const newCanonicalUrl = result.data.canonicalUrl;
|
||
mutable.canonicalUrl = newCanonicalUrl;
|
||
// Check if the only thing that changed was the hash fragment.
|
||
const oldUrl = new URL(state.canonicalUrl, url);
|
||
const onlyHashChange = // navigations are always same-origin.
|
||
url.pathname === oldUrl.pathname && url.search === oldUrl.search && url.hash !== oldUrl.hash;
|
||
if (onlyHashChange) {
|
||
// The only updated part of the URL is the hash.
|
||
mutable.onlyHashChange = true;
|
||
mutable.shouldScroll = result.data.shouldScroll;
|
||
mutable.hashFragment = url.hash;
|
||
// Setting this to an empty array triggers a scroll for all new and
|
||
// updated segments. See `ScrollAndFocusHandler` for more details.
|
||
mutable.scrollableSegments = [];
|
||
}
|
||
return (0, _handlemutable.handleMutable)(state, mutable);
|
||
}
|
||
case _types.NavigationResultTag.Success:
|
||
{
|
||
// Received a new result.
|
||
mutable.cache = result.data.cacheNode;
|
||
mutable.patchedTree = result.data.flightRouterState;
|
||
mutable.renderedSearch = result.data.renderedSearch;
|
||
mutable.canonicalUrl = result.data.canonicalUrl;
|
||
mutable.scrollableSegments = result.data.scrollableSegments;
|
||
mutable.shouldScroll = result.data.shouldScroll;
|
||
mutable.hashFragment = result.data.hash;
|
||
return (0, _handlemutable.handleMutable)(state, mutable);
|
||
}
|
||
case _types.NavigationResultTag.Async:
|
||
{
|
||
return result.data.then((asyncResult)=>handleNavigationResult(url, state, mutable, pendingPush, asyncResult), // TODO: This matches the current behavior but we need to do something
|
||
// better here if the network fails.
|
||
()=>{
|
||
return state;
|
||
});
|
||
}
|
||
default:
|
||
{
|
||
result;
|
||
return state;
|
||
}
|
||
}
|
||
}
|
||
function navigateReducer(state, action) {
|
||
const { url, isExternalUrl, navigateType, shouldScroll } = action;
|
||
const mutable = {};
|
||
const href = (0, _createhreffromurl.createHrefFromUrl)(url);
|
||
const pendingPush = navigateType === 'push';
|
||
mutable.preserveCustomHistoryState = false;
|
||
mutable.pendingPush = pendingPush;
|
||
if (isExternalUrl) {
|
||
return handleExternalUrl(state, mutable, url.toString(), pendingPush);
|
||
}
|
||
// Handles case where `<meta http-equiv="refresh">` tag is present,
|
||
// which will trigger an MPA navigation.
|
||
if (document.getElementById('__next-page-redirect')) {
|
||
return handleExternalUrl(state, mutable, href, pendingPush);
|
||
}
|
||
// Temporary glue code between the router reducer and the new navigation
|
||
// implementation. Eventually we'll rewrite the router reducer to a
|
||
// state machine.
|
||
const currentUrl = new URL(state.canonicalUrl, location.origin);
|
||
const result = (0, _navigation.navigate)(url, currentUrl, state.cache, state.tree, state.nextUrl, shouldScroll, mutable);
|
||
return handleNavigationResult(url, state, mutable, pendingPush, result);
|
||
}
|
||
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=navigate-reducer.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
// In output: export mode, the build id is added to the start of the HTML
|
||
// document, directly after the doctype declaration. During a prefetch, the
|
||
// client performs a range request to get the build id, so it can check whether
|
||
// the target page belongs to the same build.
|
||
//
|
||
// The first 64 bytes of the document are requested. The exact number isn't
|
||
// too important; it must be larger than the build id + doctype + closing and
|
||
// ending comment markers, but it doesn't need to match the end of the
|
||
// comment exactly.
|
||
//
|
||
// Build ids are 21 bytes long in the default implementation, though this
|
||
// can be overridden in the Next.js config. For the purposes of this check,
|
||
// it's OK to only match the start of the id, so we'll truncate it if exceeds
|
||
// a certain length.
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
DOC_PREFETCH_RANGE_HEADER_VALUE: null,
|
||
doesExportedHtmlMatchBuildId: null,
|
||
insertBuildIdComment: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
DOC_PREFETCH_RANGE_HEADER_VALUE: function() {
|
||
return DOC_PREFETCH_RANGE_HEADER_VALUE;
|
||
},
|
||
doesExportedHtmlMatchBuildId: function() {
|
||
return doesExportedHtmlMatchBuildId;
|
||
},
|
||
insertBuildIdComment: function() {
|
||
return insertBuildIdComment;
|
||
}
|
||
});
|
||
const DOCTYPE_PREFIX = '<!DOCTYPE html>' // 15 bytes
|
||
;
|
||
const MAX_BUILD_ID_LENGTH = 24;
|
||
const DOC_PREFETCH_RANGE_HEADER_VALUE = 'bytes=0-63';
|
||
function escapeBuildId(buildId) {
|
||
// If the build id is longer than the given limit, it's OK for our purposes
|
||
// to only match the beginning.
|
||
const truncated = buildId.slice(0, MAX_BUILD_ID_LENGTH);
|
||
// Replace hyphens with underscores so it doesn't break the HTML comment.
|
||
// (Unlikely, but if this did happen it would break the whole document.)
|
||
return truncated.replace(/-/g, '_');
|
||
}
|
||
function insertBuildIdComment(originalHtml, buildId) {
|
||
if (buildId.includes('-->') || // React always inserts a doctype at the start of the document. Skip if it
|
||
// isn't present. Shouldn't happen; suggests an issue elsewhere.
|
||
!originalHtml.startsWith(DOCTYPE_PREFIX)) {
|
||
// Return the original HTML unchanged. This means the document will not
|
||
// be prefetched.
|
||
// TODO: The build id comment is currently only used during prefetches, but
|
||
// if we eventually use this mechanism for regular navigations, we may need
|
||
// to error during build if we fail to insert it for some reason.
|
||
return originalHtml;
|
||
}
|
||
// The comment must be inserted after the doctype.
|
||
return originalHtml.replace(DOCTYPE_PREFIX, DOCTYPE_PREFIX + '<!--' + escapeBuildId(buildId) + '-->');
|
||
}
|
||
function doesExportedHtmlMatchBuildId(partialHtmlDocument, buildId) {
|
||
// Check whether the document starts with the expected buildId.
|
||
return partialHtmlDocument.startsWith(DOCTYPE_PREFIX + '<!--' + escapeBuildId(buildId) + '-->');
|
||
} //# sourceMappingURL=output-export-prefetch-encoding.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
EntryStatus: null,
|
||
canNewFetchStrategyProvideMoreContent: null,
|
||
convertRouteTreeToFlightRouterState: null,
|
||
createDetachedSegmentCacheEntry: null,
|
||
fetchRouteOnCacheMiss: null,
|
||
fetchSegmentOnCacheMiss: null,
|
||
fetchSegmentPrefetchesUsingDynamicRequest: null,
|
||
getCurrentCacheVersion: null,
|
||
getStaleTimeMs: null,
|
||
overwriteRevalidatingSegmentCacheEntry: null,
|
||
pingInvalidationListeners: null,
|
||
readOrCreateRevalidatingSegmentEntry: null,
|
||
readOrCreateRouteCacheEntry: null,
|
||
readOrCreateSegmentCacheEntry: null,
|
||
readRouteCacheEntry: null,
|
||
readSegmentCacheEntry: null,
|
||
requestOptimisticRouteCacheEntry: null,
|
||
revalidateEntireCache: null,
|
||
upgradeToPendingSegment: null,
|
||
upsertSegmentEntry: null,
|
||
waitForSegmentCacheEntry: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
EntryStatus: function() {
|
||
return EntryStatus;
|
||
},
|
||
canNewFetchStrategyProvideMoreContent: function() {
|
||
return canNewFetchStrategyProvideMoreContent;
|
||
},
|
||
convertRouteTreeToFlightRouterState: function() {
|
||
return convertRouteTreeToFlightRouterState;
|
||
},
|
||
createDetachedSegmentCacheEntry: function() {
|
||
return createDetachedSegmentCacheEntry;
|
||
},
|
||
fetchRouteOnCacheMiss: function() {
|
||
return fetchRouteOnCacheMiss;
|
||
},
|
||
fetchSegmentOnCacheMiss: function() {
|
||
return fetchSegmentOnCacheMiss;
|
||
},
|
||
fetchSegmentPrefetchesUsingDynamicRequest: function() {
|
||
return fetchSegmentPrefetchesUsingDynamicRequest;
|
||
},
|
||
getCurrentCacheVersion: function() {
|
||
return getCurrentCacheVersion;
|
||
},
|
||
getStaleTimeMs: function() {
|
||
return getStaleTimeMs;
|
||
},
|
||
overwriteRevalidatingSegmentCacheEntry: function() {
|
||
return overwriteRevalidatingSegmentCacheEntry;
|
||
},
|
||
pingInvalidationListeners: function() {
|
||
return pingInvalidationListeners;
|
||
},
|
||
readOrCreateRevalidatingSegmentEntry: function() {
|
||
return readOrCreateRevalidatingSegmentEntry;
|
||
},
|
||
readOrCreateRouteCacheEntry: function() {
|
||
return readOrCreateRouteCacheEntry;
|
||
},
|
||
readOrCreateSegmentCacheEntry: function() {
|
||
return readOrCreateSegmentCacheEntry;
|
||
},
|
||
readRouteCacheEntry: function() {
|
||
return readRouteCacheEntry;
|
||
},
|
||
readSegmentCacheEntry: function() {
|
||
return readSegmentCacheEntry;
|
||
},
|
||
requestOptimisticRouteCacheEntry: function() {
|
||
return requestOptimisticRouteCacheEntry;
|
||
},
|
||
revalidateEntireCache: function() {
|
||
return revalidateEntireCache;
|
||
},
|
||
upgradeToPendingSegment: function() {
|
||
return upgradeToPendingSegment;
|
||
},
|
||
upsertSegmentEntry: function() {
|
||
return upsertSegmentEntry;
|
||
},
|
||
waitForSegmentCacheEntry: function() {
|
||
return waitForSegmentCacheEntry;
|
||
}
|
||
});
|
||
const _approutertypes = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/app-router-types.js [app-ssr] (ecmascript)");
|
||
const _approuterheaders = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/app-router-headers.js [app-ssr] (ecmascript)");
|
||
const _fetchserverresponse = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js [app-ssr] (ecmascript)");
|
||
const _scheduler = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/scheduler.js [app-ssr] (ecmascript)");
|
||
const _varypath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/vary-path.js [app-ssr] (ecmascript)");
|
||
const _appbuildid = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-build-id.js [app-ssr] (ecmascript)");
|
||
const _createhreffromurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js [app-ssr] (ecmascript)");
|
||
const _cachekey = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-key.js [app-ssr] (ecmascript)");
|
||
const _routeparams = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/route-params.js [app-ssr] (ecmascript)");
|
||
const _cachemap = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-map.js [app-ssr] (ecmascript)");
|
||
const _segmentvalueencoding = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js [app-ssr] (ecmascript)");
|
||
const _flightdatahelpers = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/flight-data-helpers.js [app-ssr] (ecmascript)");
|
||
const _navigatereducer = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js [app-ssr] (ecmascript)");
|
||
const _links = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/links.js [app-ssr] (ecmascript)");
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const _outputexportprefetchencoding = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment-cache/output-export-prefetch-encoding.js [app-ssr] (ecmascript)");
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
const _promisewithresolvers = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/promise-with-resolvers.js [app-ssr] (ecmascript)");
|
||
function getStaleTimeMs(staleTimeSeconds) {
|
||
return Math.max(staleTimeSeconds, 30) * 1000;
|
||
}
|
||
var EntryStatus = /*#__PURE__*/ function(EntryStatus) {
|
||
EntryStatus[EntryStatus["Empty"] = 0] = "Empty";
|
||
EntryStatus[EntryStatus["Pending"] = 1] = "Pending";
|
||
EntryStatus[EntryStatus["Fulfilled"] = 2] = "Fulfilled";
|
||
EntryStatus[EntryStatus["Rejected"] = 3] = "Rejected";
|
||
return EntryStatus;
|
||
}({});
|
||
const isOutputExportMode = ("TURBOPACK compile-time value", "development") === 'production' && ("TURBOPACK compile-time value", void 0) === 'export';
|
||
const MetadataOnlyRequestTree = [
|
||
'',
|
||
{},
|
||
null,
|
||
'metadata-only'
|
||
];
|
||
let routeCacheMap = (0, _cachemap.createCacheMap)();
|
||
let segmentCacheMap = (0, _cachemap.createCacheMap)();
|
||
// All invalidation listeners for the whole cache are tracked in single set.
|
||
// Since we don't yet support tag or path-based invalidation, there's no point
|
||
// tracking them any more granularly than this. Once we add granular
|
||
// invalidation, that may change, though generally the model is to just notify
|
||
// the listeners and allow the caller to poll the prefetch cache with a new
|
||
// prefetch task if desired.
|
||
let invalidationListeners = null;
|
||
// Incrementing counter used to track cache invalidations.
|
||
let currentCacheVersion = 0;
|
||
function getCurrentCacheVersion() {
|
||
return currentCacheVersion;
|
||
}
|
||
function revalidateEntireCache(nextUrl, tree) {
|
||
// Increment the current cache version. This does not eagerly evict anything
|
||
// from the cache, but because all the entries are versioned, and we check
|
||
// the version when reading from the cache, this effectively causes all
|
||
// entries to be evicted lazily. We do it lazily because in the future,
|
||
// actions like revalidateTag or refresh will not evict the entire cache,
|
||
// but rather some subset of the entries.
|
||
currentCacheVersion++;
|
||
// Start a cooldown before re-prefetching to allow CDN cache propagation.
|
||
(0, _scheduler.startRevalidationCooldown)();
|
||
// Prefetch all the currently visible links again, to re-fill the cache.
|
||
(0, _links.pingVisibleLinks)(nextUrl, tree);
|
||
// Similarly, notify all invalidation listeners (i.e. those passed to
|
||
// `router.prefetch(onInvalidate)`), so they can trigger a new prefetch
|
||
// if needed.
|
||
pingInvalidationListeners(nextUrl, tree);
|
||
}
|
||
function attachInvalidationListener(task) {
|
||
// This function is called whenever a prefetch task reads a cache entry. If
|
||
// the task has an onInvalidate function associated with it — i.e. the one
|
||
// optionally passed to router.prefetch(onInvalidate) — then we attach that
|
||
// listener to the every cache entry that the task reads. Then, if an entry
|
||
// is invalidated, we call the function.
|
||
if (task.onInvalidate !== null) {
|
||
if (invalidationListeners === null) {
|
||
invalidationListeners = new Set([
|
||
task
|
||
]);
|
||
} else {
|
||
invalidationListeners.add(task);
|
||
}
|
||
}
|
||
}
|
||
function notifyInvalidationListener(task) {
|
||
const onInvalidate = task.onInvalidate;
|
||
if (onInvalidate !== null) {
|
||
// Clear the callback from the task object to guarantee it's not called more
|
||
// than once.
|
||
task.onInvalidate = null;
|
||
// This is a user-space function, so we must wrap in try/catch.
|
||
try {
|
||
onInvalidate();
|
||
} catch (error) {
|
||
if (typeof reportError === 'function') {
|
||
reportError(error);
|
||
} else {
|
||
console.error(error);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function pingInvalidationListeners(nextUrl, tree) {
|
||
// The rough equivalent of pingVisibleLinks, but for onInvalidate callbacks.
|
||
// This is called when the Next-Url or the base tree changes, since those
|
||
// may affect the result of a prefetch task. It's also called after a
|
||
// cache invalidation.
|
||
if (invalidationListeners !== null) {
|
||
const tasks = invalidationListeners;
|
||
invalidationListeners = null;
|
||
for (const task of tasks){
|
||
if ((0, _scheduler.isPrefetchTaskDirty)(task, nextUrl, tree)) {
|
||
notifyInvalidationListener(task);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function readRouteCacheEntry(now, key) {
|
||
const varyPath = (0, _varypath.getRouteVaryPath)(key.pathname, key.search, key.nextUrl);
|
||
const isRevalidation = false;
|
||
return (0, _cachemap.getFromCacheMap)(now, getCurrentCacheVersion(), routeCacheMap, varyPath, isRevalidation);
|
||
}
|
||
function readSegmentCacheEntry(now, varyPath) {
|
||
const isRevalidation = false;
|
||
return (0, _cachemap.getFromCacheMap)(now, getCurrentCacheVersion(), segmentCacheMap, varyPath, isRevalidation);
|
||
}
|
||
function readRevalidatingSegmentCacheEntry(now, varyPath) {
|
||
const isRevalidation = true;
|
||
return (0, _cachemap.getFromCacheMap)(now, getCurrentCacheVersion(), segmentCacheMap, varyPath, isRevalidation);
|
||
}
|
||
function waitForSegmentCacheEntry(pendingEntry) {
|
||
// Because the entry is pending, there's already a in-progress request.
|
||
// Attach a promise to the entry that will resolve when the server responds.
|
||
let promiseWithResolvers = pendingEntry.promise;
|
||
if (promiseWithResolvers === null) {
|
||
promiseWithResolvers = pendingEntry.promise = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
||
} else {
|
||
// There's already a promise we can use
|
||
}
|
||
return promiseWithResolvers.promise;
|
||
}
|
||
function readOrCreateRouteCacheEntry(now, task, key) {
|
||
attachInvalidationListener(task);
|
||
const existingEntry = readRouteCacheEntry(now, key);
|
||
if (existingEntry !== null) {
|
||
return existingEntry;
|
||
}
|
||
// Create a pending entry and add it to the cache.
|
||
const pendingEntry = {
|
||
canonicalUrl: null,
|
||
status: 0,
|
||
blockedTasks: null,
|
||
tree: null,
|
||
metadata: null,
|
||
// This is initialized to true because we don't know yet whether the route
|
||
// could be intercepted. It's only set to false once we receive a response
|
||
// from the server.
|
||
couldBeIntercepted: true,
|
||
// Similarly, we don't yet know if the route supports PPR.
|
||
isPPREnabled: false,
|
||
renderedSearch: null,
|
||
// Map-related fields
|
||
ref: null,
|
||
size: 0,
|
||
// Since this is an empty entry, there's no reason to ever evict it. It will
|
||
// be updated when the data is populated.
|
||
staleAt: Infinity,
|
||
version: getCurrentCacheVersion()
|
||
};
|
||
const varyPath = (0, _varypath.getRouteVaryPath)(key.pathname, key.search, key.nextUrl);
|
||
const isRevalidation = false;
|
||
(0, _cachemap.setInCacheMap)(routeCacheMap, varyPath, pendingEntry, isRevalidation);
|
||
return pendingEntry;
|
||
}
|
||
function requestOptimisticRouteCacheEntry(now, requestedUrl, nextUrl) {
|
||
// This function is called during a navigation when there was no matching
|
||
// route tree in the prefetch cache. Before de-opting to a blocking,
|
||
// unprefetched navigation, we will first attempt to construct an "optimistic"
|
||
// route tree by checking the cache for similar routes.
|
||
//
|
||
// Check if there's a route with the same pathname, but with different
|
||
// search params. We can then base our optimistic route tree on this entry.
|
||
//
|
||
// Conceptually, we are simulating what would happen if we did perform a
|
||
// prefetch the requested URL, under the assumption that the server will
|
||
// not redirect or rewrite the request in a different manner than the
|
||
// base route tree. This assumption might not hold, in which case we'll have
|
||
// to recover when we perform the dynamic navigation request. However, this
|
||
// is what would happen if a route were dynamically rewritten/redirected
|
||
// in between the prefetch and the navigation. So the logic needs to exist
|
||
// to handle this case regardless.
|
||
// Look for a route with the same pathname, but with an empty search string.
|
||
// TODO: There's nothing inherently special about the empty search string;
|
||
// it's chosen somewhat arbitrarily, with the rationale that it's the most
|
||
// likely one to exist. But we should update this to match _any_ search
|
||
// string. The plan is to generalize this logic alongside other improvements
|
||
// related to "fallback" cache entries.
|
||
const requestedSearch = requestedUrl.search;
|
||
if (requestedSearch === '') {
|
||
// The caller would have already checked if a route with an empty search
|
||
// string is in the cache. So we can bail out here.
|
||
return null;
|
||
}
|
||
const urlWithoutSearchParams = new URL(requestedUrl);
|
||
urlWithoutSearchParams.search = '';
|
||
const routeWithNoSearchParams = readRouteCacheEntry(now, (0, _cachekey.createCacheKey)(urlWithoutSearchParams.href, nextUrl));
|
||
if (routeWithNoSearchParams === null || routeWithNoSearchParams.status !== 2) {
|
||
// Bail out of constructing an optimistic route tree. This will result in
|
||
// a blocking, unprefetched navigation.
|
||
return null;
|
||
}
|
||
// Now we have a base route tree we can "patch" with our optimistic values.
|
||
// Optimistically assume that redirects for the requested pathname do
|
||
// not vary on the search string. Therefore, if the base route was
|
||
// redirected to a different search string, then the optimistic route
|
||
// should be redirected to the same search string. Otherwise, we use
|
||
// the requested search string.
|
||
const canonicalUrlForRouteWithNoSearchParams = new URL(routeWithNoSearchParams.canonicalUrl, requestedUrl.origin);
|
||
const optimisticCanonicalSearch = canonicalUrlForRouteWithNoSearchParams.search !== '' ? canonicalUrlForRouteWithNoSearchParams.search : requestedSearch;
|
||
// Similarly, optimistically assume that rewrites for the requested
|
||
// pathname do not vary on the search string. Therefore, if the base
|
||
// route was rewritten to a different search string, then the optimistic
|
||
// route should be rewritten to the same search string. Otherwise, we use
|
||
// the requested search string.
|
||
const optimisticRenderedSearch = routeWithNoSearchParams.renderedSearch !== '' ? routeWithNoSearchParams.renderedSearch : requestedSearch;
|
||
const optimisticUrl = new URL(routeWithNoSearchParams.canonicalUrl, location.origin);
|
||
optimisticUrl.search = optimisticCanonicalSearch;
|
||
const optimisticCanonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(optimisticUrl);
|
||
const optimisticRouteTree = createOptimisticRouteTree(routeWithNoSearchParams.tree, optimisticRenderedSearch);
|
||
const optimisticMetadataTree = createOptimisticRouteTree(routeWithNoSearchParams.metadata, optimisticRenderedSearch);
|
||
// Clone the base route tree, and override the relevant fields with our
|
||
// optimistic values.
|
||
const optimisticEntry = {
|
||
canonicalUrl: optimisticCanonicalUrl,
|
||
status: 2,
|
||
// This isn't cloned because it's instance-specific
|
||
blockedTasks: null,
|
||
tree: optimisticRouteTree,
|
||
metadata: optimisticMetadataTree,
|
||
couldBeIntercepted: routeWithNoSearchParams.couldBeIntercepted,
|
||
isPPREnabled: routeWithNoSearchParams.isPPREnabled,
|
||
// Override the rendered search with the optimistic value.
|
||
renderedSearch: optimisticRenderedSearch,
|
||
// Map-related fields
|
||
ref: null,
|
||
size: 0,
|
||
staleAt: routeWithNoSearchParams.staleAt,
|
||
version: routeWithNoSearchParams.version
|
||
};
|
||
// Do not insert this entry into the cache. It only exists so we can
|
||
// perform the current navigation. Just return it to the caller.
|
||
return optimisticEntry;
|
||
}
|
||
function createOptimisticRouteTree(tree, newRenderedSearch) {
|
||
// Create a new route tree that identical to the original one except for
|
||
// the rendered search string, which is contained in the vary path.
|
||
let clonedSlots = null;
|
||
const originalSlots = tree.slots;
|
||
if (originalSlots !== null) {
|
||
clonedSlots = {};
|
||
for(const parallelRouteKey in originalSlots){
|
||
const childTree = originalSlots[parallelRouteKey];
|
||
clonedSlots[parallelRouteKey] = createOptimisticRouteTree(childTree, newRenderedSearch);
|
||
}
|
||
}
|
||
// We only need to clone the vary path if the route is a page.
|
||
if (tree.isPage) {
|
||
return {
|
||
requestKey: tree.requestKey,
|
||
segment: tree.segment,
|
||
varyPath: (0, _varypath.clonePageVaryPathWithNewSearchParams)(tree.varyPath, newRenderedSearch),
|
||
isPage: true,
|
||
slots: clonedSlots,
|
||
isRootLayout: tree.isRootLayout,
|
||
hasLoadingBoundary: tree.hasLoadingBoundary,
|
||
hasRuntimePrefetch: tree.hasRuntimePrefetch
|
||
};
|
||
}
|
||
return {
|
||
requestKey: tree.requestKey,
|
||
segment: tree.segment,
|
||
varyPath: tree.varyPath,
|
||
isPage: false,
|
||
slots: clonedSlots,
|
||
isRootLayout: tree.isRootLayout,
|
||
hasLoadingBoundary: tree.hasLoadingBoundary,
|
||
hasRuntimePrefetch: tree.hasRuntimePrefetch
|
||
};
|
||
}
|
||
function readOrCreateSegmentCacheEntry(now, fetchStrategy, route, tree) {
|
||
const existingEntry = readSegmentCacheEntry(now, tree.varyPath);
|
||
if (existingEntry !== null) {
|
||
return existingEntry;
|
||
}
|
||
// Create a pending entry and add it to the cache.
|
||
const varyPathForRequest = (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree);
|
||
const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt);
|
||
const isRevalidation = false;
|
||
(0, _cachemap.setInCacheMap)(segmentCacheMap, varyPathForRequest, pendingEntry, isRevalidation);
|
||
return pendingEntry;
|
||
}
|
||
function readOrCreateRevalidatingSegmentEntry(now, fetchStrategy, route, tree) {
|
||
// This function is called when we've already confirmed that a particular
|
||
// segment is cached, but we want to perform another request anyway in case it
|
||
// returns more complete and/or fresher data than we already have. The logic
|
||
// for deciding whether to replace the existing entry is handled elsewhere;
|
||
// this function just handles retrieving a cache entry that we can use to
|
||
// track the revalidation.
|
||
//
|
||
// The reason revalidations are stored in the cache is because we need to be
|
||
// able to dedupe multiple revalidation requests. The reason they have to be
|
||
// handled specially is because we shouldn't overwrite a "normal" entry if
|
||
// one exists at the same keypath. So, for each internal cache location, there
|
||
// is a special "revalidation" slot that is used solely for this purpose.
|
||
//
|
||
// You can think of it as if all the revalidation entries were stored in a
|
||
// separate cache map from the canonical entries, and then transfered to the
|
||
// canonical cache map once the request is complete — this isn't how it's
|
||
// actually implemented, since it's more efficient to store them in the same
|
||
// data structure as the normal entries, but that's how it's modeled
|
||
// conceptually.
|
||
// TODO: Once we implement Fallback behavior for params, where an entry is
|
||
// re-keyed based on response information, we'll need to account for the
|
||
// possibility that the keypath of the previous entry is more generic than
|
||
// the keypath of the revalidating entry. In other words, the server could
|
||
// return a less generic entry upon revalidation. For now, though, this isn't
|
||
// a concern because the keypath is based solely on the prefetch strategy,
|
||
// not on data contained in the response.
|
||
const existingEntry = readRevalidatingSegmentCacheEntry(now, tree.varyPath);
|
||
if (existingEntry !== null) {
|
||
return existingEntry;
|
||
}
|
||
// Create a pending entry and add it to the cache.
|
||
const varyPathForRequest = (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree);
|
||
const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt);
|
||
const isRevalidation = true;
|
||
(0, _cachemap.setInCacheMap)(segmentCacheMap, varyPathForRequest, pendingEntry, isRevalidation);
|
||
return pendingEntry;
|
||
}
|
||
function overwriteRevalidatingSegmentCacheEntry(fetchStrategy, route, tree) {
|
||
// This function is called when we've already decided to replace an existing
|
||
// revalidation entry. Create a new entry and write it into the cache,
|
||
// overwriting the previous value.
|
||
const varyPathForRequest = (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree);
|
||
const pendingEntry = createDetachedSegmentCacheEntry(route.staleAt);
|
||
const isRevalidation = true;
|
||
(0, _cachemap.setInCacheMap)(segmentCacheMap, varyPathForRequest, pendingEntry, isRevalidation);
|
||
return pendingEntry;
|
||
}
|
||
function upsertSegmentEntry(now, varyPath, candidateEntry) {
|
||
// We have a new entry that has not yet been inserted into the cache. Before
|
||
// we do so, we need to confirm whether it takes precedence over the existing
|
||
// entry (if one exists).
|
||
// TODO: We should not upsert an entry if its key was invalidated in the time
|
||
// since the request was made. We can do that by passing the "owner" entry to
|
||
// this function and confirming it's the same as `existingEntry`.
|
||
if ((0, _cachemap.isValueExpired)(now, getCurrentCacheVersion(), candidateEntry)) {
|
||
// The entry is expired. We cannot upsert it.
|
||
return null;
|
||
}
|
||
const existingEntry = readSegmentCacheEntry(now, varyPath);
|
||
if (existingEntry !== null) {
|
||
// Don't replace a more specific segment with a less-specific one. A case where this
|
||
// might happen is if the existing segment was fetched via
|
||
// `<Link prefetch={true}>`.
|
||
if (// than the segment we already have in the cache, so it can't have more content.
|
||
candidateEntry.fetchStrategy !== existingEntry.fetchStrategy && !canNewFetchStrategyProvideMoreContent(existingEntry.fetchStrategy, candidateEntry.fetchStrategy) || // The existing entry isn't partial, but the new one is.
|
||
// (TODO: can this be true if `candidateEntry.fetchStrategy >= existingEntry.fetchStrategy`?)
|
||
!existingEntry.isPartial && candidateEntry.isPartial) {
|
||
// We're going to leave revalidating entry in the cache so that it doesn't
|
||
// get revalidated again unnecessarily. Downgrade the Fulfilled entry to
|
||
// Rejected and null out the data so it can be garbage collected. We leave
|
||
// `staleAt` intact to prevent subsequent revalidation attempts only until
|
||
// the entry expires.
|
||
const rejectedEntry = candidateEntry;
|
||
rejectedEntry.status = 3;
|
||
rejectedEntry.loading = null;
|
||
rejectedEntry.rsc = null;
|
||
return null;
|
||
}
|
||
// Evict the existing entry from the cache.
|
||
(0, _cachemap.deleteFromCacheMap)(existingEntry);
|
||
}
|
||
const isRevalidation = false;
|
||
(0, _cachemap.setInCacheMap)(segmentCacheMap, varyPath, candidateEntry, isRevalidation);
|
||
return candidateEntry;
|
||
}
|
||
function createDetachedSegmentCacheEntry(staleAt) {
|
||
const emptyEntry = {
|
||
status: 0,
|
||
// Default to assuming the fetch strategy will be PPR. This will be updated
|
||
// when a fetch is actually initiated.
|
||
fetchStrategy: _types.FetchStrategy.PPR,
|
||
rsc: null,
|
||
loading: null,
|
||
isPartial: true,
|
||
promise: null,
|
||
// Map-related fields
|
||
ref: null,
|
||
size: 0,
|
||
staleAt,
|
||
version: 0
|
||
};
|
||
return emptyEntry;
|
||
}
|
||
function upgradeToPendingSegment(emptyEntry, fetchStrategy) {
|
||
const pendingEntry = emptyEntry;
|
||
pendingEntry.status = 1;
|
||
pendingEntry.fetchStrategy = fetchStrategy;
|
||
// Set the version here, since this is right before the request is initiated.
|
||
// The next time the global cache version is incremented, the entry will
|
||
// effectively be evicted. This happens before initiating the request, rather
|
||
// than when receiving the response, because it's guaranteed to happen
|
||
// before the data is read on the server.
|
||
pendingEntry.version = getCurrentCacheVersion();
|
||
return pendingEntry;
|
||
}
|
||
function pingBlockedTasks(entry) {
|
||
const blockedTasks = entry.blockedTasks;
|
||
if (blockedTasks !== null) {
|
||
for (const task of blockedTasks){
|
||
(0, _scheduler.pingPrefetchTask)(task);
|
||
}
|
||
entry.blockedTasks = null;
|
||
}
|
||
}
|
||
function fulfillRouteCacheEntry(entry, tree, metadataVaryPath, staleAt, couldBeIntercepted, canonicalUrl, renderedSearch, isPPREnabled) {
|
||
// The Head is not actually part of the route tree, but other than that, it's
|
||
// fetched and cached like a segment. Some functions expect a RouteTree
|
||
// object, so rather than fork the logic in all those places, we use this
|
||
// "fake" one.
|
||
const metadata = {
|
||
requestKey: _segmentvalueencoding.HEAD_REQUEST_KEY,
|
||
segment: _segmentvalueencoding.HEAD_REQUEST_KEY,
|
||
varyPath: metadataVaryPath,
|
||
// The metadata isn't really a "page" (though it isn't really a "segment"
|
||
// either) but for the purposes of how this field is used, it behaves like
|
||
// one. If this logic ever gets more complex we can change this to an enum.
|
||
isPage: true,
|
||
slots: null,
|
||
isRootLayout: false,
|
||
hasLoadingBoundary: _approutertypes.HasLoadingBoundary.SubtreeHasNoLoadingBoundary,
|
||
hasRuntimePrefetch: false
|
||
};
|
||
const fulfilledEntry = entry;
|
||
fulfilledEntry.status = 2;
|
||
fulfilledEntry.tree = tree;
|
||
fulfilledEntry.metadata = metadata;
|
||
fulfilledEntry.staleAt = staleAt;
|
||
fulfilledEntry.couldBeIntercepted = couldBeIntercepted;
|
||
fulfilledEntry.canonicalUrl = canonicalUrl;
|
||
fulfilledEntry.renderedSearch = renderedSearch;
|
||
fulfilledEntry.isPPREnabled = isPPREnabled;
|
||
pingBlockedTasks(entry);
|
||
return fulfilledEntry;
|
||
}
|
||
function fulfillSegmentCacheEntry(segmentCacheEntry, rsc, loading, staleAt, isPartial) {
|
||
const fulfilledEntry = segmentCacheEntry;
|
||
fulfilledEntry.status = 2;
|
||
fulfilledEntry.rsc = rsc;
|
||
fulfilledEntry.loading = loading;
|
||
fulfilledEntry.staleAt = staleAt;
|
||
fulfilledEntry.isPartial = isPartial;
|
||
// Resolve any listeners that were waiting for this data.
|
||
if (segmentCacheEntry.promise !== null) {
|
||
segmentCacheEntry.promise.resolve(fulfilledEntry);
|
||
// Free the promise for garbage collection.
|
||
fulfilledEntry.promise = null;
|
||
}
|
||
return fulfilledEntry;
|
||
}
|
||
function rejectRouteCacheEntry(entry, staleAt) {
|
||
const rejectedEntry = entry;
|
||
rejectedEntry.status = 3;
|
||
rejectedEntry.staleAt = staleAt;
|
||
pingBlockedTasks(entry);
|
||
}
|
||
function rejectSegmentCacheEntry(entry, staleAt) {
|
||
const rejectedEntry = entry;
|
||
rejectedEntry.status = 3;
|
||
rejectedEntry.staleAt = staleAt;
|
||
if (entry.promise !== null) {
|
||
// NOTE: We don't currently propagate the reason the prefetch was canceled
|
||
// but we could by accepting a `reason` argument.
|
||
entry.promise.resolve(null);
|
||
entry.promise = null;
|
||
}
|
||
}
|
||
function convertRootTreePrefetchToRouteTree(rootTree, renderedPathname, renderedSearch, acc) {
|
||
// Remove trailing and leading slashes
|
||
const pathnameParts = renderedPathname.split('/').filter((p)=>p !== '');
|
||
const index = 0;
|
||
const rootSegment = _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY;
|
||
return convertTreePrefetchToRouteTree(rootTree.tree, rootSegment, null, _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY, pathnameParts, index, renderedSearch, acc);
|
||
}
|
||
function convertTreePrefetchToRouteTree(prefetch, segment, partialVaryPath, requestKey, pathnameParts, pathnamePartsIndex, renderedSearch, acc) {
|
||
// Converts the route tree sent by the server into the format used by the
|
||
// cache. The cached version of the tree includes additional fields, such as a
|
||
// cache key for each segment. Since this is frequently accessed, we compute
|
||
// it once instead of on every access. This same cache key is also used to
|
||
// request the segment from the server.
|
||
let slots = null;
|
||
let isPage;
|
||
let varyPath;
|
||
const prefetchSlots = prefetch.slots;
|
||
if (prefetchSlots !== null) {
|
||
isPage = false;
|
||
varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath);
|
||
slots = {};
|
||
for(let parallelRouteKey in prefetchSlots){
|
||
const childPrefetch = prefetchSlots[parallelRouteKey];
|
||
const childParamName = childPrefetch.name;
|
||
const childParamType = childPrefetch.paramType;
|
||
const childServerSentParamKey = childPrefetch.paramKey;
|
||
let childDoesAppearInURL;
|
||
let childSegment;
|
||
let childPartialVaryPath;
|
||
if (childParamType !== null) {
|
||
// This segment is parameterized. Get the param from the pathname.
|
||
const childParamValue = (0, _routeparams.parseDynamicParamFromURLPart)(childParamType, pathnameParts, pathnamePartsIndex);
|
||
// Assign a cache key to the segment, based on the param value. In the
|
||
// pre-Segment Cache implementation, the server computes this and sends
|
||
// it in the body of the response. In the Segment Cache implementation,
|
||
// the server sends an empty string and we fill it in here.
|
||
// TODO: We're intentionally not adding the search param to page
|
||
// segments here; it's tracked separately and added back during a read.
|
||
// This would clearer if we waited to construct the segment until it's
|
||
// read from the cache, since that's effectively what we're
|
||
// doing anyway.
|
||
const childParamKey = // cacheComponents is enabled.
|
||
childServerSentParamKey !== null ? childServerSentParamKey : (0, _routeparams.getCacheKeyForDynamicParam)(childParamValue, '');
|
||
childPartialVaryPath = (0, _varypath.appendLayoutVaryPath)(partialVaryPath, childParamKey);
|
||
childSegment = [
|
||
childParamName,
|
||
childParamKey,
|
||
childParamType
|
||
];
|
||
childDoesAppearInURL = true;
|
||
} else {
|
||
// This segment does not have a param. Inherit the partial vary path of
|
||
// the parent.
|
||
childPartialVaryPath = partialVaryPath;
|
||
childSegment = childParamName;
|
||
childDoesAppearInURL = (0, _routeparams.doesStaticSegmentAppearInURL)(childParamName);
|
||
}
|
||
// Only increment the index if the segment appears in the URL. If it's a
|
||
// "virtual" segment, like a route group, it remains the same.
|
||
const childPathnamePartsIndex = childDoesAppearInURL ? pathnamePartsIndex + 1 : pathnamePartsIndex;
|
||
const childRequestKeyPart = (0, _segmentvalueencoding.createSegmentRequestKeyPart)(childSegment);
|
||
const childRequestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(requestKey, parallelRouteKey, childRequestKeyPart);
|
||
slots[parallelRouteKey] = convertTreePrefetchToRouteTree(childPrefetch, childSegment, childPartialVaryPath, childRequestKey, pathnameParts, childPathnamePartsIndex, renderedSearch, acc);
|
||
}
|
||
} else {
|
||
if (requestKey.endsWith(_segment.PAGE_SEGMENT_KEY)) {
|
||
// This is a page segment.
|
||
isPage = true;
|
||
varyPath = (0, _varypath.finalizePageVaryPath)(requestKey, renderedSearch, partialVaryPath);
|
||
// The metadata "segment" is not part the route tree, but it has the same
|
||
// conceptual params as a page segment. Write the vary path into the
|
||
// accumulator object. If there are multiple parallel pages, we use the
|
||
// first one. Which page we choose is arbitrary as long as it's
|
||
// consistently the same one every time every time. See
|
||
// finalizeMetadataVaryPath for more details.
|
||
if (acc.metadataVaryPath === null) {
|
||
acc.metadataVaryPath = (0, _varypath.finalizeMetadataVaryPath)(requestKey, renderedSearch, partialVaryPath);
|
||
}
|
||
} else {
|
||
// This is a layout segment.
|
||
isPage = false;
|
||
varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath);
|
||
}
|
||
}
|
||
return {
|
||
requestKey,
|
||
segment,
|
||
varyPath,
|
||
// TODO: Cheating the type system here a bit because TypeScript can't tell
|
||
// that the type of isPage and varyPath are consistent. The fix would be to
|
||
// create separate constructors and call the appropriate one from each of
|
||
// the branches above. Just seems a bit overkill only for one field so I'll
|
||
// leave it as-is for now. If isPage were wrong it would break the behavior
|
||
// and we'd catch it quickly, anyway.
|
||
isPage: isPage,
|
||
slots,
|
||
isRootLayout: prefetch.isRootLayout,
|
||
// This field is only relevant to dynamic routes. For a PPR/static route,
|
||
// there's always some partial loading state we can fetch.
|
||
hasLoadingBoundary: _approutertypes.HasLoadingBoundary.SegmentHasLoadingBoundary,
|
||
hasRuntimePrefetch: prefetch.hasRuntimePrefetch
|
||
};
|
||
}
|
||
function convertRootFlightRouterStateToRouteTree(flightRouterState, renderedSearch, acc) {
|
||
return convertFlightRouterStateToRouteTree(flightRouterState, _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY, null, renderedSearch, acc);
|
||
}
|
||
function convertFlightRouterStateToRouteTree(flightRouterState, requestKey, parentPartialVaryPath, renderedSearch, acc) {
|
||
const originalSegment = flightRouterState[0];
|
||
let segment;
|
||
let partialVaryPath;
|
||
let isPage;
|
||
let varyPath;
|
||
if (Array.isArray(originalSegment)) {
|
||
isPage = false;
|
||
const paramCacheKey = originalSegment[1];
|
||
partialVaryPath = (0, _varypath.appendLayoutVaryPath)(parentPartialVaryPath, paramCacheKey);
|
||
varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath);
|
||
segment = originalSegment;
|
||
} else {
|
||
// This segment does not have a param. Inherit the partial vary path of
|
||
// the parent.
|
||
partialVaryPath = parentPartialVaryPath;
|
||
if (requestKey.endsWith(_segment.PAGE_SEGMENT_KEY)) {
|
||
// This is a page segment.
|
||
isPage = true;
|
||
// The navigation implementation expects the search params to be included
|
||
// in the segment. However, in the case of a static response, the search
|
||
// params are omitted. So the client needs to add them back in when reading
|
||
// from the Segment Cache.
|
||
//
|
||
// For consistency, we'll do this for dynamic responses, too.
|
||
//
|
||
// TODO: We should move search params out of FlightRouterState and handle
|
||
// them entirely on the client, similar to our plan for dynamic params.
|
||
segment = _segment.PAGE_SEGMENT_KEY;
|
||
varyPath = (0, _varypath.finalizePageVaryPath)(requestKey, renderedSearch, partialVaryPath);
|
||
// The metadata "segment" is not part the route tree, but it has the same
|
||
// conceptual params as a page segment. Write the vary path into the
|
||
// accumulator object. If there are multiple parallel pages, we use the
|
||
// first one. Which page we choose is arbitrary as long as it's
|
||
// consistently the same one every time every time. See
|
||
// finalizeMetadataVaryPath for more details.
|
||
if (acc.metadataVaryPath === null) {
|
||
acc.metadataVaryPath = (0, _varypath.finalizeMetadataVaryPath)(requestKey, renderedSearch, partialVaryPath);
|
||
}
|
||
} else {
|
||
// This is a layout segment.
|
||
isPage = false;
|
||
segment = originalSegment;
|
||
varyPath = (0, _varypath.finalizeLayoutVaryPath)(requestKey, partialVaryPath);
|
||
}
|
||
}
|
||
let slots = null;
|
||
const parallelRoutes = flightRouterState[1];
|
||
for(let parallelRouteKey in parallelRoutes){
|
||
const childRouterState = parallelRoutes[parallelRouteKey];
|
||
const childSegment = childRouterState[0];
|
||
// TODO: Eventually, the param values will not be included in the response
|
||
// from the server. We'll instead fill them in on the client by parsing
|
||
// the URL. This is where we'll do that.
|
||
const childRequestKeyPart = (0, _segmentvalueencoding.createSegmentRequestKeyPart)(childSegment);
|
||
const childRequestKey = (0, _segmentvalueencoding.appendSegmentRequestKeyPart)(requestKey, parallelRouteKey, childRequestKeyPart);
|
||
const childTree = convertFlightRouterStateToRouteTree(childRouterState, childRequestKey, partialVaryPath, renderedSearch, acc);
|
||
if (slots === null) {
|
||
slots = {
|
||
[parallelRouteKey]: childTree
|
||
};
|
||
} else {
|
||
slots[parallelRouteKey] = childTree;
|
||
}
|
||
}
|
||
return {
|
||
requestKey,
|
||
segment,
|
||
varyPath,
|
||
// TODO: Cheating the type system here a bit because TypeScript can't tell
|
||
// that the type of isPage and varyPath are consistent. The fix would be to
|
||
// create separate constructors and call the appropriate one from each of
|
||
// the branches above. Just seems a bit overkill only for one field so I'll
|
||
// leave it as-is for now. If isPage were wrong it would break the behavior
|
||
// and we'd catch it quickly, anyway.
|
||
isPage: isPage,
|
||
slots,
|
||
isRootLayout: flightRouterState[4] === true,
|
||
hasLoadingBoundary: flightRouterState[5] !== undefined ? flightRouterState[5] : _approutertypes.HasLoadingBoundary.SubtreeHasNoLoadingBoundary,
|
||
// Non-static tree responses are only used by apps that haven't adopted
|
||
// Cache Components. So this is always false.
|
||
hasRuntimePrefetch: false
|
||
};
|
||
}
|
||
function convertRouteTreeToFlightRouterState(routeTree) {
|
||
const parallelRoutes = {};
|
||
if (routeTree.slots !== null) {
|
||
for(const parallelRouteKey in routeTree.slots){
|
||
parallelRoutes[parallelRouteKey] = convertRouteTreeToFlightRouterState(routeTree.slots[parallelRouteKey]);
|
||
}
|
||
}
|
||
const flightRouterState = [
|
||
routeTree.segment,
|
||
parallelRoutes,
|
||
null,
|
||
null,
|
||
routeTree.isRootLayout
|
||
];
|
||
return flightRouterState;
|
||
}
|
||
async function fetchRouteOnCacheMiss(entry, task, key) {
|
||
// This function is allowed to use async/await because it contains the actual
|
||
// fetch that gets issued on a cache miss. Notice it writes the result to the
|
||
// cache entry directly, rather than return data that is then written by
|
||
// the caller.
|
||
const pathname = key.pathname;
|
||
const search = key.search;
|
||
const nextUrl = key.nextUrl;
|
||
const segmentPath = '/_tree';
|
||
const headers = {
|
||
[_approuterheaders.RSC_HEADER]: '1',
|
||
[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER]: '1',
|
||
[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: segmentPath
|
||
};
|
||
if (nextUrl !== null) {
|
||
headers[_approuterheaders.NEXT_URL] = nextUrl;
|
||
}
|
||
try {
|
||
const url = new URL(pathname + search, location.origin);
|
||
let response;
|
||
let urlAfterRedirects;
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
// "Server" mode. We can use request headers instead of the pathname.
|
||
// TODO: The eventual plan is to get rid of our custom request headers and
|
||
// encode everything into the URL, using a similar strategy to the
|
||
// "output: export" block above.
|
||
response = await fetchPrefetchResponse(url, headers);
|
||
urlAfterRedirects = response !== null && response.redirected ? new URL(response.url) : url;
|
||
}
|
||
if (!response || !response.ok || // 204 is a Cache miss. Though theoretically this shouldn't happen when
|
||
// PPR is enabled, because we always respond to route tree requests, even
|
||
// if it needs to be blockingly generated on demand.
|
||
response.status === 204 || !response.body) {
|
||
// Server responded with an error, or with a miss. We should still cache
|
||
// the response, but we can try again after 10 seconds.
|
||
rejectRouteCacheEntry(entry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
// TODO: The canonical URL is the href without the origin. I think
|
||
// historically the reason for this is because the initial canonical URL
|
||
// gets passed as a prop to the top-level React component, which means it
|
||
// needs to be computed during SSR. If it were to include the origin, it
|
||
// would need to always be same as location.origin on the client, to prevent
|
||
// a hydration mismatch. To sidestep this complexity, we omit the origin.
|
||
//
|
||
// However, since this is neither a native URL object nor a fully qualified
|
||
// URL string, we need to be careful about how we use it. To prevent subtle
|
||
// mistakes, we should create a special type for it, instead of just string.
|
||
// Or, we should just use a (readonly) URL object instead. The type of the
|
||
// prop that we pass to seed the initial state does not need to be the same
|
||
// type as the state itself.
|
||
const canonicalUrl = (0, _createhreffromurl.createHrefFromUrl)(urlAfterRedirects);
|
||
// Check whether the response varies based on the Next-Url header.
|
||
const varyHeader = response.headers.get('vary');
|
||
const couldBeIntercepted = varyHeader !== null && varyHeader.includes(_approuterheaders.NEXT_URL);
|
||
// Track when the network connection closes.
|
||
const closed = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
||
// This checks whether the response was served from the per-segment cache,
|
||
// rather than the old prefetching flow. If it fails, it implies that PPR
|
||
// is disabled on this route.
|
||
const routeIsPPREnabled = response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) === '2' || // In output: "export" mode, we can't rely on response headers. But if we
|
||
// receive a well-formed response, we can assume it's a static response,
|
||
// because all data is static in this mode.
|
||
isOutputExportMode;
|
||
if (routeIsPPREnabled) {
|
||
const prefetchStream = createPrefetchResponseStream(response.body, closed.resolve, function onResponseSizeUpdate(size) {
|
||
(0, _cachemap.setSizeInCacheMap)(entry, size);
|
||
});
|
||
const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers);
|
||
if (serverData.buildId !== (0, _appbuildid.getAppBuildId)()) {
|
||
// The server build does not match the client. Treat as a 404. During
|
||
// an actual navigation, the router will trigger an MPA navigation.
|
||
// TODO: Consider moving the build ID to a response header so we can check
|
||
// it before decoding the response, and so there's one way of checking
|
||
// across all response types.
|
||
// TODO: We should cache the fact that this is an MPA navigation.
|
||
rejectRouteCacheEntry(entry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
// Get the params that were used to render the target page. These may
|
||
// be different from the params in the request URL, if the page
|
||
// was rewritten.
|
||
const renderedPathname = (0, _routeparams.getRenderedPathname)(response);
|
||
const renderedSearch = (0, _routeparams.getRenderedSearch)(response);
|
||
// Convert the server-sent data into the RouteTree format used by the
|
||
// client cache.
|
||
//
|
||
// During this traversal, we accumulate additional data into this
|
||
// "accumulator" object.
|
||
const acc = {
|
||
metadataVaryPath: null
|
||
};
|
||
const routeTree = convertRootTreePrefetchToRouteTree(serverData, renderedPathname, renderedSearch, acc);
|
||
const metadataVaryPath = acc.metadataVaryPath;
|
||
if (metadataVaryPath === null) {
|
||
rejectRouteCacheEntry(entry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
const staleTimeMs = getStaleTimeMs(serverData.staleTime);
|
||
fulfillRouteCacheEntry(entry, routeTree, metadataVaryPath, Date.now() + staleTimeMs, couldBeIntercepted, canonicalUrl, renderedSearch, routeIsPPREnabled);
|
||
} else {
|
||
// PPR is not enabled for this route. The server responds with a
|
||
// different format (FlightRouterState) that we need to convert.
|
||
// TODO: We will unify the responses eventually. I'm keeping the types
|
||
// separate for now because FlightRouterState has so many
|
||
// overloaded concerns.
|
||
const prefetchStream = createPrefetchResponseStream(response.body, closed.resolve, function onResponseSizeUpdate(size) {
|
||
(0, _cachemap.setSizeInCacheMap)(entry, size);
|
||
});
|
||
const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers);
|
||
if (serverData.b !== (0, _appbuildid.getAppBuildId)()) {
|
||
// The server build does not match the client. Treat as a 404. During
|
||
// an actual navigation, the router will trigger an MPA navigation.
|
||
// TODO: Consider moving the build ID to a response header so we can check
|
||
// it before decoding the response, and so there's one way of checking
|
||
// across all response types.
|
||
// TODO: We should cache the fact that this is an MPA navigation.
|
||
rejectRouteCacheEntry(entry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
writeDynamicTreeResponseIntoCache(Date.now(), task, // using the LoadingBoundary fetch strategy, so mark their cache entries accordingly.
|
||
_types.FetchStrategy.LoadingBoundary, response, serverData, entry, couldBeIntercepted, canonicalUrl, routeIsPPREnabled);
|
||
}
|
||
if (!couldBeIntercepted) {
|
||
// This route will never be intercepted. So we can use this entry for all
|
||
// requests to this route, regardless of the Next-Url header. This works
|
||
// because when reading the cache we always check for a valid
|
||
// non-intercepted entry first.
|
||
// Re-key the entry. The `set` implementation handles removing it from
|
||
// its previous position in the cache. We don't need to do anything to
|
||
// update the LRU, because the entry is already in it.
|
||
// TODO: Treat this as an upsert — should check if an entry already
|
||
// exists at the new keypath, and if so, whether we should keep that
|
||
// one instead.
|
||
const fulfilledVaryPath = (0, _varypath.getFulfilledRouteVaryPath)(pathname, search, nextUrl, couldBeIntercepted);
|
||
const isRevalidation = false;
|
||
(0, _cachemap.setInCacheMap)(routeCacheMap, fulfilledVaryPath, entry, isRevalidation);
|
||
}
|
||
// Return a promise that resolves when the network connection closes, so
|
||
// the scheduler can track the number of concurrent network connections.
|
||
return {
|
||
value: null,
|
||
closed: closed.promise
|
||
};
|
||
} catch (error) {
|
||
// Either the connection itself failed, or something bad happened while
|
||
// decoding the response.
|
||
rejectRouteCacheEntry(entry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
}
|
||
async function fetchSegmentOnCacheMiss(route, segmentCacheEntry, routeKey, tree) {
|
||
// This function is allowed to use async/await because it contains the actual
|
||
// fetch that gets issued on a cache miss. Notice it writes the result to the
|
||
// cache entry directly, rather than return data that is then written by
|
||
// the caller.
|
||
//
|
||
// Segment fetches are non-blocking so we don't need to ping the scheduler
|
||
// on completion.
|
||
// Use the canonical URL to request the segment, not the original URL. These
|
||
// are usually the same, but the canonical URL will be different if the route
|
||
// tree response was redirected. To avoid an extra waterfall on every segment
|
||
// request, we pass the redirected URL instead of the original one.
|
||
const url = new URL(route.canonicalUrl, location.origin);
|
||
const nextUrl = routeKey.nextUrl;
|
||
const requestKey = tree.requestKey;
|
||
const normalizedRequestKey = requestKey === _segmentvalueencoding.ROOT_SEGMENT_REQUEST_KEY ? // `_index` instead of as an empty string. This should be treated as
|
||
// an implementation detail and not as a stable part of the protocol.
|
||
// It just needs to match the equivalent logic that happens when
|
||
// prerendering the responses. It should not leak outside of Next.js.
|
||
'/_index' : requestKey;
|
||
const headers = {
|
||
[_approuterheaders.RSC_HEADER]: '1',
|
||
[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER]: '1',
|
||
[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]: normalizedRequestKey
|
||
};
|
||
if (nextUrl !== null) {
|
||
headers[_approuterheaders.NEXT_URL] = nextUrl;
|
||
}
|
||
const requestUrl = ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : url;
|
||
try {
|
||
const response = await fetchPrefetchResponse(requestUrl, headers);
|
||
if (!response || !response.ok || response.status === 204 || // Cache miss
|
||
// This checks whether the response was served from the per-segment cache,
|
||
// rather than the old prefetching flow. If it fails, it implies that PPR
|
||
// is disabled on this route. Theoretically this should never happen
|
||
// because we only issue requests for segments once we've verified that
|
||
// the route supports PPR.
|
||
response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) !== '2' && // In output: "export" mode, we can't rely on response headers. But if
|
||
// we receive a well-formed response, we can assume it's a static
|
||
// response, because all data is static in this mode.
|
||
!isOutputExportMode || !response.body) {
|
||
// Server responded with an error, or with a miss. We should still cache
|
||
// the response, but we can try again after 10 seconds.
|
||
rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
// Track when the network connection closes.
|
||
const closed = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
||
// Wrap the original stream in a new stream that never closes. That way the
|
||
// Flight client doesn't error if there's a hanging promise.
|
||
const prefetchStream = createPrefetchResponseStream(response.body, closed.resolve, function onResponseSizeUpdate(size) {
|
||
(0, _cachemap.setSizeInCacheMap)(segmentCacheEntry, size);
|
||
});
|
||
const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers);
|
||
if (serverData.buildId !== (0, _appbuildid.getAppBuildId)()) {
|
||
// The server build does not match the client. Treat as a 404. During
|
||
// an actual navigation, the router will trigger an MPA navigation.
|
||
// TODO: Consider moving the build ID to a response header so we can check
|
||
// it before decoding the response, and so there's one way of checking
|
||
// across all response types.
|
||
rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
return {
|
||
value: fulfillSegmentCacheEntry(segmentCacheEntry, serverData.rsc, serverData.loading, // So we use the stale time of the route.
|
||
route.staleAt, serverData.isPartial),
|
||
// Return a promise that resolves when the network connection closes, so
|
||
// the scheduler can track the number of concurrent network connections.
|
||
closed: closed.promise
|
||
};
|
||
} catch (error) {
|
||
// Either the connection itself failed, or something bad happened while
|
||
// decoding the response.
|
||
rejectSegmentCacheEntry(segmentCacheEntry, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
}
|
||
async function fetchSegmentPrefetchesUsingDynamicRequest(task, route, fetchStrategy, dynamicRequestTree, spawnedEntries) {
|
||
const key = task.key;
|
||
const url = new URL(route.canonicalUrl, location.origin);
|
||
const nextUrl = key.nextUrl;
|
||
if (spawnedEntries.size === 1 && spawnedEntries.has(route.metadata.requestKey)) {
|
||
// The only thing pending is the head. Instruct the server to
|
||
// skip over everything else.
|
||
dynamicRequestTree = MetadataOnlyRequestTree;
|
||
}
|
||
const headers = {
|
||
[_approuterheaders.RSC_HEADER]: '1',
|
||
[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(dynamicRequestTree)
|
||
};
|
||
if (nextUrl !== null) {
|
||
headers[_approuterheaders.NEXT_URL] = nextUrl;
|
||
}
|
||
switch(fetchStrategy){
|
||
case _types.FetchStrategy.Full:
|
||
{
|
||
break;
|
||
}
|
||
case _types.FetchStrategy.PPRRuntime:
|
||
{
|
||
headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '2';
|
||
break;
|
||
}
|
||
case _types.FetchStrategy.LoadingBoundary:
|
||
{
|
||
headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1';
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
fetchStrategy;
|
||
}
|
||
}
|
||
try {
|
||
const response = await fetchPrefetchResponse(url, headers);
|
||
if (!response || !response.ok || !response.body) {
|
||
// Server responded with an error, or with a miss. We should still cache
|
||
// the response, but we can try again after 10 seconds.
|
||
rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
const renderedSearch = (0, _routeparams.getRenderedSearch)(response);
|
||
if (renderedSearch !== route.renderedSearch) {
|
||
// The search params that were used to render the target page are
|
||
// different from the search params in the request URL. This only happens
|
||
// when there's a dynamic rewrite in between the tree prefetch and the
|
||
// data prefetch.
|
||
// TODO: For now, since this is an edge case, we reject the prefetch, but
|
||
// the proper way to handle this is to evict the stale route tree entry
|
||
// then fill the cache with the new response.
|
||
rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
// Track when the network connection closes.
|
||
const closed = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
||
let fulfilledEntries = null;
|
||
const prefetchStream = createPrefetchResponseStream(response.body, closed.resolve, function onResponseSizeUpdate(totalBytesReceivedSoFar) {
|
||
// When processing a dynamic response, we don't know how large each
|
||
// individual segment is, so approximate by assiging each segment
|
||
// the average of the total response size.
|
||
if (fulfilledEntries === null) {
|
||
// Haven't received enough data yet to know which segments
|
||
// were included.
|
||
return;
|
||
}
|
||
const averageSize = totalBytesReceivedSoFar / fulfilledEntries.length;
|
||
for (const entry of fulfilledEntries){
|
||
(0, _cachemap.setSizeInCacheMap)(entry, averageSize);
|
||
}
|
||
});
|
||
const serverData = await (0, _fetchserverresponse.createFromNextReadableStream)(prefetchStream, headers);
|
||
const isResponsePartial = fetchStrategy === _types.FetchStrategy.PPRRuntime ? serverData.rp?.[0] === true : false;
|
||
// Aside from writing the data into the cache, this function also returns
|
||
// the entries that were fulfilled, so we can streamingly update their sizes
|
||
// in the LRU as more data comes in.
|
||
fulfilledEntries = writeDynamicRenderResponseIntoCache(Date.now(), task, fetchStrategy, response, serverData, isResponsePartial, route, spawnedEntries);
|
||
// Return a promise that resolves when the network connection closes, so
|
||
// the scheduler can track the number of concurrent network connections.
|
||
return {
|
||
value: null,
|
||
closed: closed.promise
|
||
};
|
||
} catch (error) {
|
||
rejectSegmentEntriesIfStillPending(spawnedEntries, Date.now() + 10 * 1000);
|
||
return null;
|
||
}
|
||
}
|
||
function writeDynamicTreeResponseIntoCache(now, task, fetchStrategy, response, serverData, entry, couldBeIntercepted, canonicalUrl, routeIsPPREnabled) {
|
||
// Get the URL that was used to render the target page. This may be different
|
||
// from the URL in the request URL, if the page was rewritten.
|
||
const renderedSearch = (0, _routeparams.getRenderedSearch)(response);
|
||
const normalizedFlightDataResult = (0, _flightdatahelpers.normalizeFlightData)(serverData.f);
|
||
if (// MPA navigation.
|
||
typeof normalizedFlightDataResult === 'string' || normalizedFlightDataResult.length !== 1) {
|
||
rejectRouteCacheEntry(entry, now + 10 * 1000);
|
||
return;
|
||
}
|
||
const flightData = normalizedFlightDataResult[0];
|
||
if (!flightData.isRootRender) {
|
||
// Unexpected response format.
|
||
rejectRouteCacheEntry(entry, now + 10 * 1000);
|
||
return;
|
||
}
|
||
const flightRouterState = flightData.tree;
|
||
// For runtime prefetches, stale time is in the payload at rp[1].
|
||
// For other responses, fall back to the header.
|
||
const staleTimeSeconds = typeof serverData.rp?.[1] === 'number' ? serverData.rp[1] : parseInt(response.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10);
|
||
const staleTimeMs = !isNaN(staleTimeSeconds) ? getStaleTimeMs(staleTimeSeconds) : _navigatereducer.STATIC_STALETIME_MS;
|
||
// If the response contains dynamic holes, then we must conservatively assume
|
||
// that any individual segment might contain dynamic holes, and also the
|
||
// head. If it did not contain dynamic holes, then we can assume every segment
|
||
// and the head is completely static.
|
||
const isResponsePartial = response.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER) === '1';
|
||
// Convert the server-sent data into the RouteTree format used by the
|
||
// client cache.
|
||
//
|
||
// During this traversal, we accumulate additional data into this
|
||
// "accumulator" object.
|
||
const acc = {
|
||
metadataVaryPath: null
|
||
};
|
||
const routeTree = convertRootFlightRouterStateToRouteTree(flightRouterState, renderedSearch, acc);
|
||
const metadataVaryPath = acc.metadataVaryPath;
|
||
if (metadataVaryPath === null) {
|
||
rejectRouteCacheEntry(entry, now + 10 * 1000);
|
||
return;
|
||
}
|
||
const fulfilledEntry = fulfillRouteCacheEntry(entry, routeTree, metadataVaryPath, now + staleTimeMs, couldBeIntercepted, canonicalUrl, renderedSearch, routeIsPPREnabled);
|
||
// If the server sent segment data as part of the response, we should write
|
||
// it into the cache to prevent a second, redundant prefetch request.
|
||
//
|
||
// TODO: When `clientSegmentCache` is enabled, the server does not include
|
||
// segment data when responding to a route tree prefetch request. However,
|
||
// when `clientSegmentCache` is set to "client-only", and PPR is enabled (or
|
||
// the page is fully static), the normal check is bypassed and the server
|
||
// responds with the full page. This is a temporary situation until we can
|
||
// remove the "client-only" option. Then, we can delete this function call.
|
||
writeDynamicRenderResponseIntoCache(now, task, fetchStrategy, response, serverData, isResponsePartial, fulfilledEntry, null);
|
||
}
|
||
function rejectSegmentEntriesIfStillPending(entries, staleAt) {
|
||
const fulfilledEntries = [];
|
||
for (const entry of entries.values()){
|
||
if (entry.status === 1) {
|
||
rejectSegmentCacheEntry(entry, staleAt);
|
||
} else if (entry.status === 2) {
|
||
fulfilledEntries.push(entry);
|
||
}
|
||
}
|
||
return fulfilledEntries;
|
||
}
|
||
function writeDynamicRenderResponseIntoCache(now, task, fetchStrategy, response, serverData, isResponsePartial, route, spawnedEntries) {
|
||
if (serverData.b !== (0, _appbuildid.getAppBuildId)()) {
|
||
// The server build does not match the client. Treat as a 404. During
|
||
// an actual navigation, the router will trigger an MPA navigation.
|
||
// TODO: Consider moving the build ID to a response header so we can check
|
||
// it before decoding the response, and so there's one way of checking
|
||
// across all response types.
|
||
if (spawnedEntries !== null) {
|
||
rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000);
|
||
}
|
||
return null;
|
||
}
|
||
const flightDatas = (0, _flightdatahelpers.normalizeFlightData)(serverData.f);
|
||
if (typeof flightDatas === 'string') {
|
||
// This means navigating to this route will result in an MPA navigation.
|
||
// TODO: We should cache this, too, so that the MPA navigation is immediate.
|
||
return null;
|
||
}
|
||
// For runtime prefetches, stale time is in the payload at rp[1].
|
||
// For other responses, fall back to the header.
|
||
const staleTimeSeconds = typeof serverData.rp?.[1] === 'number' ? serverData.rp[1] : parseInt(response.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER) ?? '', 10);
|
||
const staleTimeMs = !isNaN(staleTimeSeconds) ? getStaleTimeMs(staleTimeSeconds) : _navigatereducer.STATIC_STALETIME_MS;
|
||
const staleAt = now + staleTimeMs;
|
||
for (const flightData of flightDatas){
|
||
const seedData = flightData.seedData;
|
||
if (seedData !== null) {
|
||
// The data sent by the server represents only a subtree of the app. We
|
||
// need to find the part of the task tree that matches the response.
|
||
//
|
||
// segmentPath represents the parent path of subtree. It's a repeating
|
||
// pattern of parallel route key and segment:
|
||
//
|
||
// [string, Segment, string, Segment, string, Segment, ...]
|
||
const segmentPath = flightData.segmentPath;
|
||
let tree = route.tree;
|
||
for(let i = 0; i < segmentPath.length; i += 2){
|
||
const parallelRouteKey = segmentPath[i];
|
||
if (tree?.slots?.[parallelRouteKey] !== undefined) {
|
||
tree = tree.slots[parallelRouteKey];
|
||
} else {
|
||
if (spawnedEntries !== null) {
|
||
rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000);
|
||
}
|
||
return null;
|
||
}
|
||
}
|
||
writeSeedDataIntoCache(now, task, fetchStrategy, route, tree, staleAt, seedData, isResponsePartial, spawnedEntries);
|
||
}
|
||
const head = flightData.head;
|
||
if (head !== null) {
|
||
fulfillEntrySpawnedByRuntimePrefetch(now, fetchStrategy, route, head, null, flightData.isHeadPartial, staleAt, route.metadata, spawnedEntries);
|
||
}
|
||
}
|
||
// Any entry that's still pending was intentionally not rendered by the
|
||
// server, because it was inside the loading boundary. Mark them as rejected
|
||
// so we know not to fetch them again.
|
||
// TODO: If PPR is enabled on some routes but not others, then it's possible
|
||
// that a different page is able to do a per-segment prefetch of one of the
|
||
// segments we're marking as rejected here. We should mark on the segment
|
||
// somehow that the reason for the rejection is because of a non-PPR prefetch.
|
||
// That way a per-segment prefetch knows to disregard the rejection.
|
||
if (spawnedEntries !== null) {
|
||
const fulfilledEntries = rejectSegmentEntriesIfStillPending(spawnedEntries, now + 10 * 1000);
|
||
return fulfilledEntries;
|
||
}
|
||
return null;
|
||
}
|
||
function writeSeedDataIntoCache(now, task, fetchStrategy, route, tree, staleAt, seedData, isResponsePartial, entriesOwnedByCurrentTask) {
|
||
// This function is used to write the result of a runtime server request
|
||
// (CacheNodeSeedData) into the prefetch cache.
|
||
const rsc = seedData[0];
|
||
const loading = seedData[2];
|
||
const isPartial = rsc === null || isResponsePartial;
|
||
fulfillEntrySpawnedByRuntimePrefetch(now, fetchStrategy, route, rsc, loading, isPartial, staleAt, tree, entriesOwnedByCurrentTask);
|
||
// Recursively write the child data into the cache.
|
||
const slots = tree.slots;
|
||
if (slots !== null) {
|
||
const seedDataChildren = seedData[1];
|
||
for(const parallelRouteKey in slots){
|
||
const childTree = slots[parallelRouteKey];
|
||
const childSeedData = seedDataChildren[parallelRouteKey];
|
||
if (childSeedData !== null && childSeedData !== undefined) {
|
||
writeSeedDataIntoCache(now, task, fetchStrategy, route, childTree, staleAt, childSeedData, isResponsePartial, entriesOwnedByCurrentTask);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function fulfillEntrySpawnedByRuntimePrefetch(now, fetchStrategy, route, rsc, loading, isPartial, staleAt, tree, entriesOwnedByCurrentTask) {
|
||
// We should only write into cache entries that are owned by us. Or create
|
||
// a new one and write into that. We must never write over an entry that was
|
||
// created by a different task, because that causes data races.
|
||
const ownedEntry = entriesOwnedByCurrentTask !== null ? entriesOwnedByCurrentTask.get(tree.requestKey) : undefined;
|
||
if (ownedEntry !== undefined) {
|
||
fulfillSegmentCacheEntry(ownedEntry, rsc, loading, staleAt, isPartial);
|
||
} else {
|
||
// There's no matching entry. Attempt to create a new one.
|
||
const possiblyNewEntry = readOrCreateSegmentCacheEntry(now, fetchStrategy, route, tree);
|
||
if (possiblyNewEntry.status === 0) {
|
||
// Confirmed this is a new entry. We can fulfill it.
|
||
const newEntry = possiblyNewEntry;
|
||
fulfillSegmentCacheEntry(upgradeToPendingSegment(newEntry, fetchStrategy), rsc, loading, staleAt, isPartial);
|
||
} else {
|
||
// There was already an entry in the cache. But we may be able to
|
||
// replace it with the new one from the server.
|
||
const newEntry = fulfillSegmentCacheEntry(upgradeToPendingSegment(createDetachedSegmentCacheEntry(staleAt), fetchStrategy), rsc, loading, staleAt, isPartial);
|
||
upsertSegmentEntry(now, (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree), newEntry);
|
||
}
|
||
}
|
||
}
|
||
async function fetchPrefetchResponse(url, headers) {
|
||
const fetchPriority = 'low';
|
||
// When issuing a prefetch request, don't immediately decode the response; we
|
||
// use the lower level `createFromResponse` API instead because we need to do
|
||
// some extra processing of the response stream. See
|
||
// `createPrefetchResponseStream` for more details.
|
||
const shouldImmediatelyDecode = false;
|
||
const response = await (0, _fetchserverresponse.createFetch)(url, headers, fetchPriority, shouldImmediatelyDecode);
|
||
if (!response.ok) {
|
||
return null;
|
||
}
|
||
// Check the content type
|
||
if ("TURBOPACK compile-time falsy", 0) {
|
||
// In output: "export" mode, we relaxed about the content type, since it's
|
||
// not Next.js that's serving the response. If the status is OK, assume the
|
||
// response is valid. If it's not a valid response, the Flight client won't
|
||
// be able to decode it, and we'll treat it as a miss.
|
||
} else {
|
||
const contentType = response.headers.get('content-type');
|
||
const isFlightResponse = contentType && contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER);
|
||
if (!isFlightResponse) {
|
||
return null;
|
||
}
|
||
}
|
||
return response;
|
||
}
|
||
function createPrefetchResponseStream(originalFlightStream, onStreamClose, onResponseSizeUpdate) {
|
||
// When PPR is enabled, prefetch streams may contain references that never
|
||
// resolve, because that's how we encode dynamic data access. In the decoded
|
||
// object returned by the Flight client, these are reified into hanging
|
||
// promises that suspend during render, which is effectively what we want.
|
||
// The UI resolves when it switches to the dynamic data stream
|
||
// (via useDeferredValue(dynamic, static)).
|
||
//
|
||
// However, the Flight implementation currently errors if the server closes
|
||
// the response before all the references are resolved. As a cheat to work
|
||
// around this, we wrap the original stream in a new stream that never closes,
|
||
// and therefore doesn't error.
|
||
//
|
||
// While processing the original stream, we also incrementally update the size
|
||
// of the cache entry in the LRU.
|
||
let totalByteLength = 0;
|
||
const reader = originalFlightStream.getReader();
|
||
return new ReadableStream({
|
||
async pull (controller) {
|
||
while(true){
|
||
const { done, value } = await reader.read();
|
||
if (!done) {
|
||
// Pass to the target stream and keep consuming the Flight response
|
||
// from the server.
|
||
controller.enqueue(value);
|
||
// Incrementally update the size of the cache entry in the LRU.
|
||
// NOTE: Since prefetch responses are delivered in a single chunk,
|
||
// it's not really necessary to do this streamingly, but I'm doing it
|
||
// anyway in case this changes in the future.
|
||
totalByteLength += value.byteLength;
|
||
onResponseSizeUpdate(totalByteLength);
|
||
continue;
|
||
}
|
||
// The server stream has closed. Exit, but intentionally do not close
|
||
// the target stream. We do notify the caller, though.
|
||
onStreamClose();
|
||
return;
|
||
}
|
||
}
|
||
});
|
||
}
|
||
function addSegmentPathToUrlInOutputExportMode(url, segmentPath) {
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
return url;
|
||
}
|
||
function canNewFetchStrategyProvideMoreContent(currentStrategy, newStrategy) {
|
||
return currentStrategy < newStrategy;
|
||
}
|
||
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=cache.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/scheduler.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
cancelPrefetchTask: null,
|
||
isPrefetchTaskDirty: null,
|
||
pingPrefetchTask: null,
|
||
reschedulePrefetchTask: null,
|
||
schedulePrefetchTask: null,
|
||
startRevalidationCooldown: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
cancelPrefetchTask: function() {
|
||
return cancelPrefetchTask;
|
||
},
|
||
isPrefetchTaskDirty: function() {
|
||
return isPrefetchTaskDirty;
|
||
},
|
||
pingPrefetchTask: function() {
|
||
return pingPrefetchTask;
|
||
},
|
||
reschedulePrefetchTask: function() {
|
||
return reschedulePrefetchTask;
|
||
},
|
||
schedulePrefetchTask: function() {
|
||
return schedulePrefetchTask;
|
||
},
|
||
startRevalidationCooldown: function() {
|
||
return startRevalidationCooldown;
|
||
}
|
||
});
|
||
const _approutertypes = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/app-router-types.js [app-ssr] (ecmascript)");
|
||
const _matchsegments = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/match-segments.js [app-ssr] (ecmascript)");
|
||
const _cache = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache.js [app-ssr] (ecmascript)");
|
||
const _varypath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/vary-path.js [app-ssr] (ecmascript)");
|
||
const _cachekey = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-key.js [app-ssr] (ecmascript)");
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
const _segment = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/segment.js [app-ssr] (ecmascript)");
|
||
const scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : (fn)=>Promise.resolve().then(fn).catch((error)=>setTimeout(()=>{
|
||
throw error;
|
||
}));
|
||
const taskHeap = [];
|
||
let inProgressRequests = 0;
|
||
let sortIdCounter = 0;
|
||
let didScheduleMicrotask = false;
|
||
// The most recently hovered (or touched, etc) link, i.e. the most recent task
|
||
// scheduled at Intent priority. There's only ever a single task at Intent
|
||
// priority at a time. We reserve special network bandwidth for this task only.
|
||
let mostRecentlyHoveredLink = null;
|
||
// CDN cache propagation delay after revalidation (in milliseconds)
|
||
const REVALIDATION_COOLDOWN_MS = 300;
|
||
// Timeout handle for the revalidation cooldown. When non-null, prefetch
|
||
// requests are blocked to allow CDN cache propagation.
|
||
let revalidationCooldownTimeoutHandle = null;
|
||
function startRevalidationCooldown() {
|
||
// Clear any existing timeout in case multiple revalidations happen
|
||
// in quick succession.
|
||
if (revalidationCooldownTimeoutHandle !== null) {
|
||
clearTimeout(revalidationCooldownTimeoutHandle);
|
||
}
|
||
// Schedule the cooldown to expire after the delay.
|
||
revalidationCooldownTimeoutHandle = setTimeout(()=>{
|
||
revalidationCooldownTimeoutHandle = null;
|
||
// Retry the prefetch queue now that the cooldown has expired.
|
||
ensureWorkIsScheduled();
|
||
}, REVALIDATION_COOLDOWN_MS);
|
||
}
|
||
function schedulePrefetchTask(key, treeAtTimeOfPrefetch, fetchStrategy, priority, onInvalidate) {
|
||
// Spawn a new prefetch task
|
||
const task = {
|
||
key,
|
||
treeAtTimeOfPrefetch,
|
||
cacheVersion: (0, _cache.getCurrentCacheVersion)(),
|
||
priority,
|
||
phase: 1,
|
||
hasBackgroundWork: false,
|
||
spawnedRuntimePrefetches: null,
|
||
fetchStrategy,
|
||
sortId: sortIdCounter++,
|
||
isCanceled: false,
|
||
onInvalidate,
|
||
_heapIndex: -1
|
||
};
|
||
trackMostRecentlyHoveredLink(task);
|
||
heapPush(taskHeap, task);
|
||
// Schedule an async task to process the queue.
|
||
//
|
||
// The main reason we process the queue in an async task is for batching.
|
||
// It's common for a single JS task/event to trigger multiple prefetches.
|
||
// By deferring to a microtask, we only process the queue once per JS task.
|
||
// If they have different priorities, it also ensures they are processed in
|
||
// the optimal order.
|
||
ensureWorkIsScheduled();
|
||
return task;
|
||
}
|
||
function cancelPrefetchTask(task) {
|
||
// Remove the prefetch task from the queue. If the task already completed,
|
||
// then this is a no-op.
|
||
//
|
||
// We must also explicitly mark the task as canceled so that a blocked task
|
||
// does not get added back to the queue when it's pinged by the network.
|
||
task.isCanceled = true;
|
||
heapDelete(taskHeap, task);
|
||
}
|
||
function reschedulePrefetchTask(task, treeAtTimeOfPrefetch, fetchStrategy, priority) {
|
||
// Bump the prefetch task to the top of the queue, as if it were a fresh
|
||
// task. This is essentially the same as canceling the task and scheduling
|
||
// a new one, except it reuses the original object.
|
||
//
|
||
// The primary use case is to increase the priority of a Link-initated
|
||
// prefetch on hover.
|
||
// Un-cancel the task, in case it was previously canceled.
|
||
task.isCanceled = false;
|
||
task.phase = 1;
|
||
// Assign a new sort ID to move it ahead of all other tasks at the same
|
||
// priority level. (Higher sort IDs are processed first.)
|
||
task.sortId = sortIdCounter++;
|
||
task.priority = // Intent priority, even if the rescheduled priority is lower.
|
||
task === mostRecentlyHoveredLink ? _types.PrefetchPriority.Intent : priority;
|
||
task.treeAtTimeOfPrefetch = treeAtTimeOfPrefetch;
|
||
task.fetchStrategy = fetchStrategy;
|
||
trackMostRecentlyHoveredLink(task);
|
||
if (task._heapIndex !== -1) {
|
||
// The task is already in the queue.
|
||
heapResift(taskHeap, task);
|
||
} else {
|
||
heapPush(taskHeap, task);
|
||
}
|
||
ensureWorkIsScheduled();
|
||
}
|
||
function isPrefetchTaskDirty(task, nextUrl, tree) {
|
||
// This is used to quickly bail out of a prefetch task if the result is
|
||
// guaranteed to not have changed since the task was initiated. This is
|
||
// strictly an optimization — theoretically, if it always returned true, no
|
||
// behavior should change because a full prefetch task will effectively
|
||
// perform the same checks.
|
||
const currentCacheVersion = (0, _cache.getCurrentCacheVersion)();
|
||
return task.cacheVersion !== currentCacheVersion || task.treeAtTimeOfPrefetch !== tree || task.key.nextUrl !== nextUrl;
|
||
}
|
||
function trackMostRecentlyHoveredLink(task) {
|
||
// Track the mostly recently hovered link, i.e. the most recently scheduled
|
||
// task at Intent priority. There must only be one such task at a time.
|
||
if (task.priority === _types.PrefetchPriority.Intent && task !== mostRecentlyHoveredLink) {
|
||
if (mostRecentlyHoveredLink !== null) {
|
||
// Bump the previously hovered link's priority down to Default.
|
||
if (mostRecentlyHoveredLink.priority !== _types.PrefetchPriority.Background) {
|
||
mostRecentlyHoveredLink.priority = _types.PrefetchPriority.Default;
|
||
heapResift(taskHeap, mostRecentlyHoveredLink);
|
||
}
|
||
}
|
||
mostRecentlyHoveredLink = task;
|
||
}
|
||
}
|
||
function ensureWorkIsScheduled() {
|
||
if (didScheduleMicrotask) {
|
||
// Already scheduled a task to process the queue
|
||
return;
|
||
}
|
||
didScheduleMicrotask = true;
|
||
scheduleMicrotask(processQueueInMicrotask);
|
||
}
|
||
/**
|
||
* Checks if we've exceeded the maximum number of concurrent prefetch requests,
|
||
* to avoid saturating the browser's internal network queue. This is a
|
||
* cooperative limit — prefetch tasks should check this before issuing
|
||
* new requests.
|
||
*
|
||
* Also checks if we're within the revalidation cooldown window, during which
|
||
* prefetch requests are delayed to allow CDN cache propagation.
|
||
*/ function hasNetworkBandwidth(task) {
|
||
// Check if we're within the revalidation cooldown window
|
||
if (revalidationCooldownTimeoutHandle !== null) {
|
||
// We're within the cooldown window. Return false to prevent prefetching.
|
||
// When the cooldown expires, the timeout will call ensureWorkIsScheduled()
|
||
// to retry the queue.
|
||
return false;
|
||
}
|
||
// TODO: Also check if there's an in-progress navigation. We should never
|
||
// add prefetch requests to the network queue if an actual navigation is
|
||
// taking place, to ensure there's sufficient bandwidth for render-blocking
|
||
// data and resources.
|
||
// TODO: Consider reserving some amount of bandwidth for static prefetches.
|
||
if (task.priority === _types.PrefetchPriority.Intent) {
|
||
// The most recently hovered link is allowed to exceed the default limit.
|
||
//
|
||
// The goal is to always have enough bandwidth to start a new prefetch
|
||
// request when hovering over a link.
|
||
//
|
||
// However, because we don't abort in-progress requests, it's still possible
|
||
// we'll run out of bandwidth. When links are hovered in quick succession,
|
||
// there could be multiple hover requests running simultaneously.
|
||
return inProgressRequests < 12;
|
||
}
|
||
// The default limit is lower than the limit for a hovered link.
|
||
return inProgressRequests < 4;
|
||
}
|
||
function spawnPrefetchSubtask(prefetchSubtask) {
|
||
// When the scheduler spawns an async task, we don't await its result.
|
||
// Instead, the async task writes its result directly into the cache, then
|
||
// pings the scheduler to continue.
|
||
//
|
||
// We process server responses streamingly, so the prefetch subtask will
|
||
// likely resolve before we're finished receiving all the data. The subtask
|
||
// result includes a promise that resolves once the network connection is
|
||
// closed. The scheduler uses this to control network bandwidth by tracking
|
||
// and limiting the number of concurrent requests.
|
||
inProgressRequests++;
|
||
return prefetchSubtask.then((result)=>{
|
||
if (result === null) {
|
||
// The prefetch task errored before it could start processing the
|
||
// network stream. Assume the connection is closed.
|
||
onPrefetchConnectionClosed();
|
||
return null;
|
||
}
|
||
// Wait for the connection to close before freeing up more bandwidth.
|
||
result.closed.then(onPrefetchConnectionClosed);
|
||
return result.value;
|
||
});
|
||
}
|
||
function onPrefetchConnectionClosed() {
|
||
inProgressRequests--;
|
||
// Notify the scheduler that we have more bandwidth, and can continue
|
||
// processing tasks.
|
||
ensureWorkIsScheduled();
|
||
}
|
||
function pingPrefetchTask(task) {
|
||
// "Ping" a prefetch that's already in progress to notify it of new data.
|
||
if (task.isCanceled || // Check if prefetch is already queued.
|
||
task._heapIndex !== -1) {
|
||
return;
|
||
}
|
||
// Add the task back to the queue.
|
||
heapPush(taskHeap, task);
|
||
ensureWorkIsScheduled();
|
||
}
|
||
function processQueueInMicrotask() {
|
||
didScheduleMicrotask = false;
|
||
// We aim to minimize how often we read the current time. Since nearly all
|
||
// functions in the prefetch scheduler are synchronous, we can read the time
|
||
// once and pass it as an argument wherever it's needed.
|
||
const now = Date.now();
|
||
// Process the task queue until we run out of network bandwidth.
|
||
let task = heapPeek(taskHeap);
|
||
while(task !== null && hasNetworkBandwidth(task)){
|
||
task.cacheVersion = (0, _cache.getCurrentCacheVersion)();
|
||
const exitStatus = pingRoute(now, task);
|
||
// These fields are only valid for a single attempt. Reset them after each
|
||
// iteration of the task queue.
|
||
const hasBackgroundWork = task.hasBackgroundWork;
|
||
task.hasBackgroundWork = false;
|
||
task.spawnedRuntimePrefetches = null;
|
||
switch(exitStatus){
|
||
case 0:
|
||
// The task yielded because there are too many requests in progress.
|
||
// Stop processing tasks until we have more bandwidth.
|
||
return;
|
||
case 1:
|
||
// The task is blocked. It needs more data before it can proceed.
|
||
// Keep the task out of the queue until the server responds.
|
||
heapPop(taskHeap);
|
||
// Continue to the next task
|
||
task = heapPeek(taskHeap);
|
||
continue;
|
||
case 2:
|
||
if (task.phase === 1) {
|
||
// Finished prefetching the route tree. Proceed to prefetching
|
||
// the segments.
|
||
task.phase = 0;
|
||
heapResift(taskHeap, task);
|
||
} else if (hasBackgroundWork) {
|
||
// The task spawned additional background work. Reschedule the task
|
||
// at background priority.
|
||
task.priority = _types.PrefetchPriority.Background;
|
||
heapResift(taskHeap, task);
|
||
} else {
|
||
// The prefetch is complete. Continue to the next task.
|
||
heapPop(taskHeap);
|
||
}
|
||
task = heapPeek(taskHeap);
|
||
continue;
|
||
default:
|
||
exitStatus;
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Check this during a prefetch task to determine if background work can be
|
||
* performed. If so, it evaluates to `true`. Otherwise, it returns `false`,
|
||
* while also scheduling a background task to run later. Usage:
|
||
*
|
||
* @example
|
||
* if (background(task)) {
|
||
* // Perform background-pri work
|
||
* }
|
||
*/ function background(task) {
|
||
if (task.priority === _types.PrefetchPriority.Background) {
|
||
return true;
|
||
}
|
||
task.hasBackgroundWork = true;
|
||
return false;
|
||
}
|
||
function pingRoute(now, task) {
|
||
const key = task.key;
|
||
const route = (0, _cache.readOrCreateRouteCacheEntry)(now, task, key);
|
||
const exitStatus = pingRootRouteTree(now, task, route);
|
||
if (exitStatus !== 0 && key.search !== '') {
|
||
// If the URL has a non-empty search string, also prefetch the pathname
|
||
// without the search string. We use the searchless route tree as a base for
|
||
// optimistic routing; see requestOptimisticRouteCacheEntry for details.
|
||
//
|
||
// Note that we don't need to prefetch any of the segment data. Just the
|
||
// route tree.
|
||
//
|
||
// TODO: This is a temporary solution; the plan is to replace this by adding
|
||
// a wildcard lookup method to the TupleMap implementation. This is
|
||
// non-trivial to implement because it needs to account for things like
|
||
// fallback route entries, hence this temporary workaround.
|
||
const url = new URL(key.pathname, location.origin);
|
||
const keyWithoutSearch = (0, _cachekey.createCacheKey)(url.href, key.nextUrl);
|
||
const routeWithoutSearch = (0, _cache.readOrCreateRouteCacheEntry)(now, task, keyWithoutSearch);
|
||
switch(routeWithoutSearch.status){
|
||
case _cache.EntryStatus.Empty:
|
||
{
|
||
if (background(task)) {
|
||
routeWithoutSearch.status = _cache.EntryStatus.Pending;
|
||
spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(routeWithoutSearch, task, keyWithoutSearch));
|
||
}
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Pending:
|
||
case _cache.EntryStatus.Fulfilled:
|
||
case _cache.EntryStatus.Rejected:
|
||
{
|
||
break;
|
||
}
|
||
default:
|
||
routeWithoutSearch;
|
||
}
|
||
}
|
||
return exitStatus;
|
||
}
|
||
function pingRootRouteTree(now, task, route) {
|
||
switch(route.status){
|
||
case _cache.EntryStatus.Empty:
|
||
{
|
||
// Route is not yet cached, and there's no request already in progress.
|
||
// Spawn a task to request the route, load it into the cache, and ping
|
||
// the task to continue.
|
||
// TODO: There are multiple strategies in the <Link> API for prefetching
|
||
// a route. Currently we've only implemented the main one: per-segment,
|
||
// static-data only.
|
||
//
|
||
// There's also `<Link prefetch={true}>`
|
||
// which prefetch both static *and* dynamic data.
|
||
// Similarly, we need to fallback to the old, per-page
|
||
// behavior if PPR is disabled for a route (via the incremental opt-in).
|
||
//
|
||
// Those cases will be handled here.
|
||
spawnPrefetchSubtask((0, _cache.fetchRouteOnCacheMiss)(route, task, task.key));
|
||
// If the request takes longer than a minute, a subsequent request should
|
||
// retry instead of waiting for this one. When the response is received,
|
||
// this value will be replaced by a new value based on the stale time sent
|
||
// from the server.
|
||
// TODO: We should probably also manually abort the fetch task, to reclaim
|
||
// server bandwidth.
|
||
route.staleAt = now + 60 * 1000;
|
||
// Upgrade to Pending so we know there's already a request in progress
|
||
route.status = _cache.EntryStatus.Pending;
|
||
// Intentional fallthrough to the Pending branch
|
||
}
|
||
case _cache.EntryStatus.Pending:
|
||
{
|
||
// Still pending. We can't start prefetching the segments until the route
|
||
// tree has loaded. Add the task to the set of blocked tasks so that it
|
||
// is notified when the route tree is ready.
|
||
const blockedTasks = route.blockedTasks;
|
||
if (blockedTasks === null) {
|
||
route.blockedTasks = new Set([
|
||
task
|
||
]);
|
||
} else {
|
||
blockedTasks.add(task);
|
||
}
|
||
return 1;
|
||
}
|
||
case _cache.EntryStatus.Rejected:
|
||
{
|
||
// Route tree failed to load. Treat as a 404.
|
||
return 2;
|
||
}
|
||
case _cache.EntryStatus.Fulfilled:
|
||
{
|
||
if (task.phase !== 0) {
|
||
// Do not prefetch segment data until we've entered the segment phase.
|
||
return 2;
|
||
}
|
||
// Recursively fill in the segment tree.
|
||
if (!hasNetworkBandwidth(task)) {
|
||
// Stop prefetching segments until there's more bandwidth.
|
||
return 0;
|
||
}
|
||
const tree = route.tree;
|
||
// A task's fetch strategy gets set to `PPR` for any "auto" prefetch.
|
||
// If it turned out that the route isn't PPR-enabled, we need to use `LoadingBoundary` instead.
|
||
// We don't need to do this for runtime prefetches, because those are only available in
|
||
// `cacheComponents`, where every route is PPR.
|
||
const fetchStrategy = task.fetchStrategy === _types.FetchStrategy.PPR ? route.isPPREnabled ? _types.FetchStrategy.PPR : _types.FetchStrategy.LoadingBoundary : task.fetchStrategy;
|
||
switch(fetchStrategy){
|
||
case _types.FetchStrategy.PPR:
|
||
{
|
||
// For Cache Components pages, each segment may be prefetched
|
||
// statically or using a runtime request, based on various
|
||
// configurations and heuristics. We'll do this in two passes: first
|
||
// traverse the tree and perform all the static prefetches.
|
||
//
|
||
// Then, if there are any segments that need a runtime request,
|
||
// do another pass to perform a runtime prefetch.
|
||
pingStaticHead(now, task, route);
|
||
const exitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, task.treeAtTimeOfPrefetch, tree);
|
||
if (exitStatus === 0) {
|
||
// Child yielded without finishing.
|
||
return 0;
|
||
}
|
||
const spawnedRuntimePrefetches = task.spawnedRuntimePrefetches;
|
||
if (spawnedRuntimePrefetches !== null) {
|
||
// During the first pass, we discovered segments that require a
|
||
// runtime prefetch. Do a second pass to construct a request tree.
|
||
const spawnedEntries = new Map();
|
||
pingRuntimeHead(now, task, route, spawnedEntries, _types.FetchStrategy.PPRRuntime);
|
||
const requestTree = pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries);
|
||
let needsDynamicRequest = spawnedEntries.size > 0;
|
||
if (needsDynamicRequest) {
|
||
// Perform a dynamic prefetch request and populate the cache with
|
||
// the result.
|
||
spawnPrefetchSubtask((0, _cache.fetchSegmentPrefetchesUsingDynamicRequest)(task, route, _types.FetchStrategy.PPRRuntime, requestTree, spawnedEntries));
|
||
}
|
||
}
|
||
return 2;
|
||
}
|
||
case _types.FetchStrategy.Full:
|
||
case _types.FetchStrategy.PPRRuntime:
|
||
case _types.FetchStrategy.LoadingBoundary:
|
||
{
|
||
// Prefetch multiple segments using a single dynamic request.
|
||
// TODO: We can consolidate this branch with previous one by modeling
|
||
// it as if the first segment in the new tree has runtime prefetching
|
||
// enabled. Will do this as a follow-up refactor. Might want to remove
|
||
// the special metatdata case below first. In the meantime, it's not
|
||
// really that much duplication, just would be nice to remove one of
|
||
// these codepaths.
|
||
const spawnedEntries = new Map();
|
||
pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy);
|
||
const dynamicRequestTree = diffRouteTreeAgainstCurrent(now, task, route, task.treeAtTimeOfPrefetch, tree, spawnedEntries, fetchStrategy);
|
||
let needsDynamicRequest = spawnedEntries.size > 0;
|
||
if (needsDynamicRequest) {
|
||
spawnPrefetchSubtask((0, _cache.fetchSegmentPrefetchesUsingDynamicRequest)(task, route, fetchStrategy, dynamicRequestTree, spawnedEntries));
|
||
}
|
||
return 2;
|
||
}
|
||
default:
|
||
fetchStrategy;
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
route;
|
||
}
|
||
}
|
||
return 2;
|
||
}
|
||
function pingStaticHead(now, task, route) {
|
||
// The Head data for a page (metadata, viewport) is not really a route
|
||
// segment, in the sense that it doesn't appear in the route tree. But we
|
||
// store it in the cache as if it were, using a special key.
|
||
pingStaticSegmentData(now, task, route, (0, _cache.readOrCreateSegmentCacheEntry)(now, _types.FetchStrategy.PPR, route, route.metadata), task.key, route.metadata);
|
||
}
|
||
function pingRuntimeHead(now, task, route, spawnedEntries, fetchStrategy) {
|
||
pingRouteTreeAndIncludeDynamicData(now, task, route, route.metadata, false, spawnedEntries, // and LoadingBoundary
|
||
fetchStrategy === _types.FetchStrategy.LoadingBoundary ? _types.FetchStrategy.Full : fetchStrategy);
|
||
}
|
||
// TODO: Rename dynamic -> runtime throughout this module
|
||
function pingSharedPartOfCacheComponentsTree(now, task, route, oldTree, newTree) {
|
||
// When Cache Components is enabled (or PPR, or a fully static route when PPR
|
||
// is disabled; those cases are treated equivalently to Cache Components), we
|
||
// start by prefetching each segment individually. Once we reach the "new"
|
||
// part of the tree — the part that doesn't exist on the current page — we
|
||
// may choose to switch to a runtime prefetch instead, based on the
|
||
// information sent by the server in the route tree.
|
||
//
|
||
// The traversal starts in the "shared" part of the tree. Once we reach the
|
||
// "new" part of the tree, we switch to a different traversal,
|
||
// pingNewPartOfCacheComponentsTree.
|
||
// Prefetch this segment's static data.
|
||
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, route, newTree);
|
||
pingStaticSegmentData(now, task, route, segment, task.key, newTree);
|
||
// Recursively ping the children.
|
||
const oldTreeChildren = oldTree[1];
|
||
const newTreeChildren = newTree.slots;
|
||
if (newTreeChildren !== null) {
|
||
for(const parallelRouteKey in newTreeChildren){
|
||
if (!hasNetworkBandwidth(task)) {
|
||
// Stop prefetching segments until there's more bandwidth.
|
||
return 0;
|
||
}
|
||
const newTreeChild = newTreeChildren[parallelRouteKey];
|
||
const newTreeChildSegment = newTreeChild.segment;
|
||
const oldTreeChild = oldTreeChildren[parallelRouteKey];
|
||
const oldTreeChildSegment = oldTreeChild?.[0];
|
||
let childExitStatus;
|
||
if (oldTreeChildSegment !== undefined && doesCurrentSegmentMatchCachedSegment(route, newTreeChildSegment, oldTreeChildSegment)) {
|
||
// We're still in the "shared" part of the tree.
|
||
childExitStatus = pingSharedPartOfCacheComponentsTree(now, task, route, oldTreeChild, newTreeChild);
|
||
} else {
|
||
// We've entered the "new" part of the tree. Switch
|
||
// traversal functions.
|
||
childExitStatus = pingNewPartOfCacheComponentsTree(now, task, route, newTreeChild);
|
||
}
|
||
if (childExitStatus === 0) {
|
||
// Child yielded without finishing.
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
return 2;
|
||
}
|
||
function pingNewPartOfCacheComponentsTree(now, task, route, tree) {
|
||
// We're now prefetching in the "new" part of the tree, the part that doesn't
|
||
// exist on the current page. (In other words, we're deeper than the
|
||
// shared layouts.) Segments in here default to being prefetched statically.
|
||
// However, if the server instructs us to, we may switch to a runtime
|
||
// prefetch instead. Traverse the tree and check at each segment.
|
||
if (tree.hasRuntimePrefetch) {
|
||
// This route has a runtime prefetch response. Since we're below the shared
|
||
// layout, everything from this point should be prefetched using a single,
|
||
// combined runtime request, rather than using per-segment static requests.
|
||
// This is true even if some of the child segments are known to be fully
|
||
// static — once we've decided to perform a runtime prefetch, we might as
|
||
// well respond with the static segments in the same roundtrip. (That's how
|
||
// regular navigations work, too.) We'll still skip over segments that are
|
||
// already cached, though.
|
||
//
|
||
// It's the server's responsibility to set a reasonable value of
|
||
// `hasRuntimePrefetch`. Currently it's user-defined, but eventually, the
|
||
// server may send a value of `false` even if the user opts in, if it
|
||
// determines during build that the route is always fully static. There are
|
||
// more optimizations we can do once we implement fallback param
|
||
// tracking, too.
|
||
//
|
||
// Use the task object to collect the segments that need a runtime prefetch.
|
||
// This will signal to the outer task queue that a second traversal is
|
||
// required to construct a request tree.
|
||
if (task.spawnedRuntimePrefetches === null) {
|
||
task.spawnedRuntimePrefetches = new Set([
|
||
tree.requestKey
|
||
]);
|
||
} else {
|
||
task.spawnedRuntimePrefetches.add(tree.requestKey);
|
||
}
|
||
// Then exit the traversal without prefetching anything further.
|
||
return 2;
|
||
}
|
||
// This segment should not be runtime prefetched. Prefetch its static data.
|
||
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, route, tree);
|
||
pingStaticSegmentData(now, task, route, segment, task.key, tree);
|
||
if (tree.slots !== null) {
|
||
if (!hasNetworkBandwidth(task)) {
|
||
// Stop prefetching segments until there's more bandwidth.
|
||
return 0;
|
||
}
|
||
// Recursively ping the children.
|
||
for(const parallelRouteKey in tree.slots){
|
||
const childTree = tree.slots[parallelRouteKey];
|
||
const childExitStatus = pingNewPartOfCacheComponentsTree(now, task, route, childTree);
|
||
if (childExitStatus === 0) {
|
||
// Child yielded without finishing.
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
// This segment and all its children have finished prefetching.
|
||
return 2;
|
||
}
|
||
function diffRouteTreeAgainstCurrent(now, task, route, oldTree, newTree, spawnedEntries, fetchStrategy) {
|
||
// This is a single recursive traversal that does multiple things:
|
||
// - Finds the parts of the target route (newTree) that are not part of
|
||
// of the current page (oldTree) by diffing them, using the same algorithm
|
||
// as a real navigation.
|
||
// - Constructs a request tree (FlightRouterState) that describes which
|
||
// segments need to be prefetched and which ones are already cached.
|
||
// - Creates a set of pending cache entries for the segments that need to
|
||
// be prefetched, so that a subsequent prefetch task does not request the
|
||
// same segments again.
|
||
const oldTreeChildren = oldTree[1];
|
||
const newTreeChildren = newTree.slots;
|
||
let requestTreeChildren = {};
|
||
if (newTreeChildren !== null) {
|
||
for(const parallelRouteKey in newTreeChildren){
|
||
const newTreeChild = newTreeChildren[parallelRouteKey];
|
||
const newTreeChildSegment = newTreeChild.segment;
|
||
const oldTreeChild = oldTreeChildren[parallelRouteKey];
|
||
const oldTreeChildSegment = oldTreeChild?.[0];
|
||
if (oldTreeChildSegment !== undefined && doesCurrentSegmentMatchCachedSegment(route, newTreeChildSegment, oldTreeChildSegment)) {
|
||
// This segment is already part of the current route. Keep traversing.
|
||
const requestTreeChild = diffRouteTreeAgainstCurrent(now, task, route, oldTreeChild, newTreeChild, spawnedEntries, fetchStrategy);
|
||
requestTreeChildren[parallelRouteKey] = requestTreeChild;
|
||
} else {
|
||
// This segment is not part of the current route. We're entering a
|
||
// part of the tree that we need to prefetch (unless everything is
|
||
// already cached).
|
||
switch(fetchStrategy){
|
||
case _types.FetchStrategy.LoadingBoundary:
|
||
{
|
||
// When PPR is disabled, we can't prefetch per segment. We must
|
||
// fallback to the old prefetch behavior and send a dynamic request.
|
||
// Only routes that include a loading boundary can be prefetched in
|
||
// this way.
|
||
//
|
||
// This is simlar to a "full" prefetch, but we're much more
|
||
// conservative about which segments to include in the request.
|
||
//
|
||
// The server will only render up to the first loading boundary
|
||
// inside new part of the tree. If there's no loading boundary
|
||
// anywhere in the tree, the server will never return any data, so
|
||
// we can skip the request.
|
||
const subtreeHasLoadingBoundary = newTreeChild.hasLoadingBoundary !== _approutertypes.HasLoadingBoundary.SubtreeHasNoLoadingBoundary;
|
||
const requestTreeChild = subtreeHasLoadingBoundary ? pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, newTreeChild, null, spawnedEntries) : (0, _cache.convertRouteTreeToFlightRouterState)(newTreeChild);
|
||
requestTreeChildren[parallelRouteKey] = requestTreeChild;
|
||
break;
|
||
}
|
||
case _types.FetchStrategy.PPRRuntime:
|
||
{
|
||
// This is a runtime prefetch. Fetch all cacheable data in the tree,
|
||
// not just the static PPR shell.
|
||
const requestTreeChild = pingRouteTreeAndIncludeDynamicData(now, task, route, newTreeChild, false, spawnedEntries, fetchStrategy);
|
||
requestTreeChildren[parallelRouteKey] = requestTreeChild;
|
||
break;
|
||
}
|
||
case _types.FetchStrategy.Full:
|
||
{
|
||
// This is a "full" prefetch. Fetch all the data in the tree, both
|
||
// static and dynamic. We issue roughly the same request that we
|
||
// would during a real navigation. The goal is that once the
|
||
// navigation occurs, the router should not have to fetch any
|
||
// additional data.
|
||
//
|
||
// Although the response will include dynamic data, opting into a
|
||
// Full prefetch — via <Link prefetch={true}> — implicitly
|
||
// instructs the cache to treat the response as "static", or non-
|
||
// dynamic, since the whole point is to cache it for
|
||
// future navigations.
|
||
//
|
||
// Construct a tree (currently a FlightRouterState) that represents
|
||
// which segments need to be prefetched and which ones are already
|
||
// cached. If the tree is empty, then we can exit. Otherwise, we'll
|
||
// send the request tree to the server and use the response to
|
||
// populate the segment cache.
|
||
const requestTreeChild = pingRouteTreeAndIncludeDynamicData(now, task, route, newTreeChild, false, spawnedEntries, fetchStrategy);
|
||
requestTreeChildren[parallelRouteKey] = requestTreeChild;
|
||
break;
|
||
}
|
||
default:
|
||
fetchStrategy;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const requestTree = [
|
||
newTree.segment,
|
||
requestTreeChildren,
|
||
null,
|
||
null,
|
||
newTree.isRootLayout
|
||
];
|
||
return requestTree;
|
||
}
|
||
function pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, tree, refetchMarkerContext, spawnedEntries) {
|
||
// This function is similar to pingRouteTreeAndIncludeDynamicData, except the
|
||
// server is only going to return a minimal loading state — it will stop
|
||
// rendering at the first loading boundary. Whereas a Full prefetch is
|
||
// intentionally aggressive and tries to pretfetch all the data that will be
|
||
// needed for a navigation, a LoadingBoundary prefetch is much more
|
||
// conservative. For example, it will omit from the request tree any segment
|
||
// that is already cached, regardles of whether it's partial or full. By
|
||
// contrast, a Full prefetch will refetch partial segments.
|
||
// "inside-shared-layout" tells the server where to start looking for a
|
||
// loading boundary.
|
||
let refetchMarker = refetchMarkerContext === null ? 'inside-shared-layout' : null;
|
||
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, task.fetchStrategy, route, tree);
|
||
switch(segment.status){
|
||
case _cache.EntryStatus.Empty:
|
||
{
|
||
// This segment is not cached. Add a refetch marker so the server knows
|
||
// to start rendering here.
|
||
// TODO: Instead of a "refetch" marker, we could just omit this subtree's
|
||
// FlightRouterState from the request tree. I think this would probably
|
||
// already work even without any updates to the server. For consistency,
|
||
// though, I'll send the full tree and we'll look into this later as part
|
||
// of a larger redesign of the request protocol.
|
||
// Add the pending cache entry to the result map.
|
||
spawnedEntries.set(tree.requestKey, (0, _cache.upgradeToPendingSegment)(segment, // might not include it in the pending response. If another route is able
|
||
// to issue a per-segment request, we'll do that in the background.
|
||
_types.FetchStrategy.LoadingBoundary));
|
||
if (refetchMarkerContext !== 'refetch') {
|
||
refetchMarker = refetchMarkerContext = 'refetch';
|
||
} else {
|
||
// There's already a parent with a refetch marker, so we don't need
|
||
// to add another one.
|
||
}
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Fulfilled:
|
||
{
|
||
// The segment is already cached.
|
||
const segmentHasLoadingBoundary = tree.hasLoadingBoundary === _approutertypes.HasLoadingBoundary.SegmentHasLoadingBoundary;
|
||
if (segmentHasLoadingBoundary) {
|
||
// This segment has a loading boundary, which means the server won't
|
||
// render its children. So there's nothing left to prefetch along this
|
||
// path. We can bail out.
|
||
return (0, _cache.convertRouteTreeToFlightRouterState)(tree);
|
||
}
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Pending:
|
||
{
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Rejected:
|
||
{
|
||
break;
|
||
}
|
||
default:
|
||
segment;
|
||
}
|
||
const requestTreeChildren = {};
|
||
if (tree.slots !== null) {
|
||
for(const parallelRouteKey in tree.slots){
|
||
const childTree = tree.slots[parallelRouteKey];
|
||
requestTreeChildren[parallelRouteKey] = pingPPRDisabledRouteTreeUpToLoadingBoundary(now, task, route, childTree, refetchMarkerContext, spawnedEntries);
|
||
}
|
||
}
|
||
const requestTree = [
|
||
tree.segment,
|
||
requestTreeChildren,
|
||
null,
|
||
refetchMarker,
|
||
tree.isRootLayout
|
||
];
|
||
return requestTree;
|
||
}
|
||
function pingRouteTreeAndIncludeDynamicData(now, task, route, tree, isInsideRefetchingParent, spawnedEntries, fetchStrategy) {
|
||
// The tree we're constructing is the same shape as the tree we're navigating
|
||
// to. But even though this is a "new" tree, some of the individual segments
|
||
// may be cached as a result of other route prefetches.
|
||
//
|
||
// So we need to find the first uncached segment along each path add an
|
||
// explicit "refetch" marker so the server knows where to start rendering.
|
||
// Once the server starts rendering along a path, it keeps rendering the
|
||
// entire subtree.
|
||
const segment = (0, _cache.readOrCreateSegmentCacheEntry)(now, // and we have to use the former here.
|
||
// We can have a task with `FetchStrategy.PPR` where some of its segments are configured to
|
||
// always use runtime prefetching (via `export const prefetch`), and those should check for
|
||
// entries that include search params.
|
||
fetchStrategy, route, tree);
|
||
let spawnedSegment = null;
|
||
switch(segment.status){
|
||
case _cache.EntryStatus.Empty:
|
||
{
|
||
// This segment is not cached. Include it in the request.
|
||
spawnedSegment = (0, _cache.upgradeToPendingSegment)(segment, fetchStrategy);
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Fulfilled:
|
||
{
|
||
// The segment is already cached.
|
||
if (segment.isPartial && (0, _cache.canNewFetchStrategyProvideMoreContent)(segment.fetchStrategy, fetchStrategy)) {
|
||
// The cached segment contains dynamic holes, and was prefetched using a less specific strategy than the current one.
|
||
// This means we're in one of these cases:
|
||
// - we have a static prefetch, and we're doing a runtime prefetch
|
||
// - we have a static or runtime prefetch, and we're doing a Full prefetch (or a navigation).
|
||
// In either case, we need to include it in the request to get a more specific (or full) version.
|
||
spawnedSegment = pingFullSegmentRevalidation(now, route, tree, fetchStrategy);
|
||
}
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Pending:
|
||
case _cache.EntryStatus.Rejected:
|
||
{
|
||
// There's either another prefetch currently in progress, or the previous
|
||
// attempt failed. If the new strategy can provide more content, fetch it again.
|
||
if ((0, _cache.canNewFetchStrategyProvideMoreContent)(segment.fetchStrategy, fetchStrategy)) {
|
||
spawnedSegment = pingFullSegmentRevalidation(now, route, tree, fetchStrategy);
|
||
}
|
||
break;
|
||
}
|
||
default:
|
||
segment;
|
||
}
|
||
const requestTreeChildren = {};
|
||
if (tree.slots !== null) {
|
||
for(const parallelRouteKey in tree.slots){
|
||
const childTree = tree.slots[parallelRouteKey];
|
||
requestTreeChildren[parallelRouteKey] = pingRouteTreeAndIncludeDynamicData(now, task, route, childTree, isInsideRefetchingParent || spawnedSegment !== null, spawnedEntries, fetchStrategy);
|
||
}
|
||
}
|
||
if (spawnedSegment !== null) {
|
||
// Add the pending entry to the result map.
|
||
spawnedEntries.set(tree.requestKey, spawnedSegment);
|
||
}
|
||
// Don't bother to add a refetch marker if one is already present in a parent.
|
||
const refetchMarker = !isInsideRefetchingParent && spawnedSegment !== null ? 'refetch' : null;
|
||
const requestTree = [
|
||
tree.segment,
|
||
requestTreeChildren,
|
||
null,
|
||
refetchMarker,
|
||
tree.isRootLayout
|
||
];
|
||
return requestTree;
|
||
}
|
||
function pingRuntimePrefetches(now, task, route, tree, spawnedRuntimePrefetches, spawnedEntries) {
|
||
// Construct a request tree (FlightRouterState) for a runtime prefetch. If
|
||
// a segment is part of the runtime prefetch, the tree is constructed by
|
||
// diffing against what's already in the prefetch cache. Otherwise, we send
|
||
// a regular FlightRouterState with no special markers.
|
||
//
|
||
// See pingRouteTreeAndIncludeDynamicData for details.
|
||
if (spawnedRuntimePrefetches.has(tree.requestKey)) {
|
||
// This segment needs a runtime prefetch.
|
||
return pingRouteTreeAndIncludeDynamicData(now, task, route, tree, false, spawnedEntries, _types.FetchStrategy.PPRRuntime);
|
||
}
|
||
let requestTreeChildren = {};
|
||
const slots = tree.slots;
|
||
if (slots !== null) {
|
||
for(const parallelRouteKey in slots){
|
||
const childTree = slots[parallelRouteKey];
|
||
requestTreeChildren[parallelRouteKey] = pingRuntimePrefetches(now, task, route, childTree, spawnedRuntimePrefetches, spawnedEntries);
|
||
}
|
||
}
|
||
// This segment is not part of the runtime prefetch. Clone the base tree.
|
||
const requestTree = [
|
||
tree.segment,
|
||
requestTreeChildren,
|
||
null,
|
||
null
|
||
];
|
||
return requestTree;
|
||
}
|
||
function pingStaticSegmentData(now, task, route, segment, routeKey, tree) {
|
||
switch(segment.status){
|
||
case _cache.EntryStatus.Empty:
|
||
// Upgrade to Pending so we know there's already a request in progress
|
||
spawnPrefetchSubtask((0, _cache.fetchSegmentOnCacheMiss)(route, (0, _cache.upgradeToPendingSegment)(segment, _types.FetchStrategy.PPR), routeKey, tree));
|
||
break;
|
||
case _cache.EntryStatus.Pending:
|
||
{
|
||
// There's already a request in progress. Depending on what kind of
|
||
// request it is, we may want to revalidate it.
|
||
switch(segment.fetchStrategy){
|
||
case _types.FetchStrategy.PPR:
|
||
case _types.FetchStrategy.PPRRuntime:
|
||
case _types.FetchStrategy.Full:
|
||
break;
|
||
case _types.FetchStrategy.LoadingBoundary:
|
||
// There's a pending request, but because it's using the old
|
||
// prefetching strategy, we can't be sure if it will be fulfilled by
|
||
// the response — it might be inside the loading boundary. Perform
|
||
// a revalidation, but because it's speculative, wait to do it at
|
||
// background priority.
|
||
if (background(task)) {
|
||
// TODO: Instead of speculatively revalidating, consider including
|
||
// `hasLoading` in the route tree prefetch response.
|
||
pingPPRSegmentRevalidation(now, route, routeKey, tree);
|
||
}
|
||
break;
|
||
default:
|
||
segment.fetchStrategy;
|
||
}
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Rejected:
|
||
{
|
||
// The existing entry in the cache was rejected. Depending on how it
|
||
// was originally fetched, we may or may not want to revalidate it.
|
||
switch(segment.fetchStrategy){
|
||
case _types.FetchStrategy.PPR:
|
||
case _types.FetchStrategy.PPRRuntime:
|
||
case _types.FetchStrategy.Full:
|
||
break;
|
||
case _types.FetchStrategy.LoadingBoundary:
|
||
// There's a rejected entry, but it was fetched using the loading
|
||
// boundary strategy. So the reason it wasn't returned by the server
|
||
// might just be because it was inside a loading boundary. Or because
|
||
// there was a dynamic rewrite. Revalidate it using the per-
|
||
// segment strategy.
|
||
//
|
||
// Because a rejected segment will definitely prevent the segment (and
|
||
// all of its children) from rendering, we perform this revalidation
|
||
// immediately instead of deferring it to a background task.
|
||
pingPPRSegmentRevalidation(now, route, routeKey, tree);
|
||
break;
|
||
default:
|
||
segment.fetchStrategy;
|
||
}
|
||
break;
|
||
}
|
||
case _cache.EntryStatus.Fulfilled:
|
||
break;
|
||
default:
|
||
segment;
|
||
}
|
||
// Segments do not have dependent tasks, so once the prefetch is initiated,
|
||
// there's nothing else for us to do (except write the server data into the
|
||
// entry, which is handled by `fetchSegmentOnCacheMiss`).
|
||
}
|
||
function pingPPRSegmentRevalidation(now, route, routeKey, tree) {
|
||
const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, _types.FetchStrategy.PPR, route, tree);
|
||
switch(revalidatingSegment.status){
|
||
case _cache.EntryStatus.Empty:
|
||
// Spawn a prefetch request and upsert the segment into the cache
|
||
// upon completion.
|
||
upsertSegmentOnCompletion(spawnPrefetchSubtask((0, _cache.fetchSegmentOnCacheMiss)(route, (0, _cache.upgradeToPendingSegment)(revalidatingSegment, _types.FetchStrategy.PPR), routeKey, tree)), (0, _varypath.getSegmentVaryPathForRequest)(_types.FetchStrategy.PPR, tree));
|
||
break;
|
||
case _cache.EntryStatus.Pending:
|
||
break;
|
||
case _cache.EntryStatus.Fulfilled:
|
||
case _cache.EntryStatus.Rejected:
|
||
break;
|
||
default:
|
||
revalidatingSegment;
|
||
}
|
||
}
|
||
function pingFullSegmentRevalidation(now, route, tree, fetchStrategy) {
|
||
const revalidatingSegment = (0, _cache.readOrCreateRevalidatingSegmentEntry)(now, fetchStrategy, route, tree);
|
||
if (revalidatingSegment.status === _cache.EntryStatus.Empty) {
|
||
// During a Full/PPRRuntime prefetch, a single dynamic request is made for all the
|
||
// segments that we need. So we don't initiate a request here directly. By
|
||
// returning a pending entry from this function, it signals to the caller
|
||
// that this segment should be included in the request that's sent to
|
||
// the server.
|
||
const pendingSegment = (0, _cache.upgradeToPendingSegment)(revalidatingSegment, fetchStrategy);
|
||
upsertSegmentOnCompletion((0, _cache.waitForSegmentCacheEntry)(pendingSegment), (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree));
|
||
return pendingSegment;
|
||
} else {
|
||
// There's already a revalidation in progress.
|
||
const nonEmptyRevalidatingSegment = revalidatingSegment;
|
||
if ((0, _cache.canNewFetchStrategyProvideMoreContent)(nonEmptyRevalidatingSegment.fetchStrategy, fetchStrategy)) {
|
||
// The existing revalidation was fetched using a less specific strategy.
|
||
// Reset it and start a new revalidation.
|
||
const emptySegment = (0, _cache.overwriteRevalidatingSegmentCacheEntry)(fetchStrategy, route, tree);
|
||
const pendingSegment = (0, _cache.upgradeToPendingSegment)(emptySegment, fetchStrategy);
|
||
upsertSegmentOnCompletion((0, _cache.waitForSegmentCacheEntry)(pendingSegment), (0, _varypath.getSegmentVaryPathForRequest)(fetchStrategy, tree));
|
||
return pendingSegment;
|
||
}
|
||
switch(nonEmptyRevalidatingSegment.status){
|
||
case _cache.EntryStatus.Pending:
|
||
// There's already an in-progress prefetch that includes this segment.
|
||
return null;
|
||
case _cache.EntryStatus.Fulfilled:
|
||
case _cache.EntryStatus.Rejected:
|
||
// A previous revalidation attempt finished, but we chose not to replace
|
||
// the existing entry in the cache. Don't try again until or unless the
|
||
// revalidation entry expires.
|
||
return null;
|
||
default:
|
||
nonEmptyRevalidatingSegment;
|
||
return null;
|
||
}
|
||
}
|
||
}
|
||
const noop = ()=>{};
|
||
function upsertSegmentOnCompletion(promise, varyPath) {
|
||
// Wait for a segment to finish loading, then upsert it into the cache
|
||
promise.then((fulfilled)=>{
|
||
if (fulfilled !== null) {
|
||
// Received new data. Attempt to replace the existing entry in the cache.
|
||
(0, _cache.upsertSegmentEntry)(Date.now(), varyPath, fulfilled);
|
||
}
|
||
}, noop);
|
||
}
|
||
function doesCurrentSegmentMatchCachedSegment(route, currentSegment, cachedSegment) {
|
||
if (cachedSegment === _segment.PAGE_SEGMENT_KEY) {
|
||
// In the FlightRouterState stored by the router, the page segment has the
|
||
// rendered search params appended to the name of the segment. In the
|
||
// prefetch cache, however, this is stored separately. So, when comparing
|
||
// the router's current FlightRouterState to the cached FlightRouterState,
|
||
// we need to make sure we compare both parts of the segment.
|
||
// TODO: This is not modeled clearly. We use the same type,
|
||
// FlightRouterState, for both the CacheNode tree _and_ the prefetch cache
|
||
// _and_ the server response format, when conceptually those are three
|
||
// different things and treated in different ways. We should encode more of
|
||
// this information into the type design so mistakes are less likely.
|
||
return currentSegment === (0, _segment.addSearchParamsIfPageSegment)(_segment.PAGE_SEGMENT_KEY, Object.fromEntries(new URLSearchParams(route.renderedSearch)));
|
||
}
|
||
// Non-page segments are compared using the same function as the server
|
||
return (0, _matchsegments.matchSegment)(cachedSegment, currentSegment);
|
||
}
|
||
// -----------------------------------------------------------------------------
|
||
// The remainder of the module is a MinHeap implementation. Try not to put any
|
||
// logic below here unless it's related to the heap algorithm. We can extract
|
||
// this to a separate module if/when we need multiple kinds of heaps.
|
||
// -----------------------------------------------------------------------------
|
||
function compareQueuePriority(a, b) {
|
||
// Since the queue is a MinHeap, this should return a positive number if b is
|
||
// higher priority than a, and a negative number if a is higher priority
|
||
// than b.
|
||
// `priority` is an integer, where higher numbers are higher priority.
|
||
const priorityDiff = b.priority - a.priority;
|
||
if (priorityDiff !== 0) {
|
||
return priorityDiff;
|
||
}
|
||
// If the priority is the same, check which phase the prefetch is in — is it
|
||
// prefetching the route tree, or the segments? Route trees are prioritized.
|
||
const phaseDiff = b.phase - a.phase;
|
||
if (phaseDiff !== 0) {
|
||
return phaseDiff;
|
||
}
|
||
// Finally, check the insertion order. `sortId` is an incrementing counter
|
||
// assigned to prefetches. We want to process the newest prefetches first.
|
||
return b.sortId - a.sortId;
|
||
}
|
||
function heapPush(heap, node) {
|
||
const index = heap.length;
|
||
heap.push(node);
|
||
node._heapIndex = index;
|
||
heapSiftUp(heap, node, index);
|
||
}
|
||
function heapPeek(heap) {
|
||
return heap.length === 0 ? null : heap[0];
|
||
}
|
||
function heapPop(heap) {
|
||
if (heap.length === 0) {
|
||
return null;
|
||
}
|
||
const first = heap[0];
|
||
first._heapIndex = -1;
|
||
const last = heap.pop();
|
||
if (last !== first) {
|
||
heap[0] = last;
|
||
last._heapIndex = 0;
|
||
heapSiftDown(heap, last, 0);
|
||
}
|
||
return first;
|
||
}
|
||
function heapDelete(heap, node) {
|
||
const index = node._heapIndex;
|
||
if (index !== -1) {
|
||
node._heapIndex = -1;
|
||
if (heap.length !== 0) {
|
||
const last = heap.pop();
|
||
if (last !== node) {
|
||
heap[index] = last;
|
||
last._heapIndex = index;
|
||
heapSiftDown(heap, last, index);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function heapResift(heap, node) {
|
||
const index = node._heapIndex;
|
||
if (index !== -1) {
|
||
if (index === 0) {
|
||
heapSiftDown(heap, node, 0);
|
||
} else {
|
||
const parentIndex = index - 1 >>> 1;
|
||
const parent = heap[parentIndex];
|
||
if (compareQueuePriority(parent, node) > 0) {
|
||
// The parent is larger. Sift up.
|
||
heapSiftUp(heap, node, index);
|
||
} else {
|
||
// The parent is smaller (or equal). Sift down.
|
||
heapSiftDown(heap, node, index);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function heapSiftUp(heap, node, i) {
|
||
let index = i;
|
||
while(index > 0){
|
||
const parentIndex = index - 1 >>> 1;
|
||
const parent = heap[parentIndex];
|
||
if (compareQueuePriority(parent, node) > 0) {
|
||
// The parent is larger. Swap positions.
|
||
heap[parentIndex] = node;
|
||
node._heapIndex = parentIndex;
|
||
heap[index] = parent;
|
||
parent._heapIndex = index;
|
||
index = parentIndex;
|
||
} else {
|
||
// The parent is smaller. Exit.
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
function heapSiftDown(heap, node, i) {
|
||
let index = i;
|
||
const length = heap.length;
|
||
const halfLength = length >>> 1;
|
||
while(index < halfLength){
|
||
const leftIndex = (index + 1) * 2 - 1;
|
||
const left = heap[leftIndex];
|
||
const rightIndex = leftIndex + 1;
|
||
const right = heap[rightIndex];
|
||
// If the left or right node is smaller, swap with the smaller of those.
|
||
if (compareQueuePriority(left, node) < 0) {
|
||
if (rightIndex < length && compareQueuePriority(right, left) < 0) {
|
||
heap[index] = right;
|
||
right._heapIndex = index;
|
||
heap[rightIndex] = node;
|
||
node._heapIndex = rightIndex;
|
||
index = rightIndex;
|
||
} else {
|
||
heap[index] = left;
|
||
left._heapIndex = index;
|
||
heap[leftIndex] = node;
|
||
node._heapIndex = leftIndex;
|
||
index = leftIndex;
|
||
}
|
||
} else if (rightIndex < length && compareQueuePriority(right, node) < 0) {
|
||
heap[index] = right;
|
||
right._heapIndex = index;
|
||
heap[rightIndex] = node;
|
||
node._heapIndex = rightIndex;
|
||
index = rightIndex;
|
||
} else {
|
||
// Neither child is smaller. Exit.
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
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=scheduler.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/links.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
IDLE_LINK_STATUS: null,
|
||
PENDING_LINK_STATUS: null,
|
||
mountFormInstance: null,
|
||
mountLinkInstance: null,
|
||
onLinkVisibilityChanged: null,
|
||
onNavigationIntent: null,
|
||
pingVisibleLinks: null,
|
||
setLinkForCurrentNavigation: null,
|
||
unmountLinkForCurrentNavigation: null,
|
||
unmountPrefetchableInstance: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
IDLE_LINK_STATUS: function() {
|
||
return IDLE_LINK_STATUS;
|
||
},
|
||
PENDING_LINK_STATUS: function() {
|
||
return PENDING_LINK_STATUS;
|
||
},
|
||
mountFormInstance: function() {
|
||
return mountFormInstance;
|
||
},
|
||
mountLinkInstance: function() {
|
||
return mountLinkInstance;
|
||
},
|
||
onLinkVisibilityChanged: function() {
|
||
return onLinkVisibilityChanged;
|
||
},
|
||
onNavigationIntent: function() {
|
||
return onNavigationIntent;
|
||
},
|
||
pingVisibleLinks: function() {
|
||
return pingVisibleLinks;
|
||
},
|
||
setLinkForCurrentNavigation: function() {
|
||
return setLinkForCurrentNavigation;
|
||
},
|
||
unmountLinkForCurrentNavigation: function() {
|
||
return unmountLinkForCurrentNavigation;
|
||
},
|
||
unmountPrefetchableInstance: function() {
|
||
return unmountPrefetchableInstance;
|
||
}
|
||
});
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
const _cachekey = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/cache-key.js [app-ssr] (ecmascript)");
|
||
const _scheduler = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/scheduler.js [app-ssr] (ecmascript)");
|
||
const _react = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
// Tracks the most recently navigated link instance. When null, indicates
|
||
// the current navigation was not initiated by a link click.
|
||
let linkForMostRecentNavigation = null;
|
||
const PENDING_LINK_STATUS = {
|
||
pending: true
|
||
};
|
||
const IDLE_LINK_STATUS = {
|
||
pending: false
|
||
};
|
||
function setLinkForCurrentNavigation(link) {
|
||
(0, _react.startTransition)(()=>{
|
||
linkForMostRecentNavigation?.setOptimisticLinkStatus(IDLE_LINK_STATUS);
|
||
link?.setOptimisticLinkStatus(PENDING_LINK_STATUS);
|
||
linkForMostRecentNavigation = link;
|
||
});
|
||
}
|
||
function unmountLinkForCurrentNavigation(link) {
|
||
if (linkForMostRecentNavigation === link) {
|
||
linkForMostRecentNavigation = null;
|
||
}
|
||
}
|
||
// Use a WeakMap to associate a Link instance with its DOM element. This is
|
||
// used by the IntersectionObserver to track the link's visibility.
|
||
const prefetchable = typeof WeakMap === 'function' ? new WeakMap() : new Map();
|
||
// A Set of the currently visible links. We re-prefetch visible links after a
|
||
// cache invalidation, or when the current URL changes. It's a separate data
|
||
// structure from the WeakMap above because only the visible links need to
|
||
// be enumerated.
|
||
const prefetchableAndVisible = new Set();
|
||
// A single IntersectionObserver instance shared by all <Link> components.
|
||
const observer = typeof IntersectionObserver === 'function' ? new IntersectionObserver(handleIntersect, {
|
||
rootMargin: '200px'
|
||
}) : null;
|
||
function observeVisibility(element, instance) {
|
||
const existingInstance = prefetchable.get(element);
|
||
if (existingInstance !== undefined) {
|
||
// This shouldn't happen because each <Link> component should have its own
|
||
// anchor tag instance, but it's defensive coding to avoid a memory leak in
|
||
// case there's a logical error somewhere else.
|
||
unmountPrefetchableInstance(element);
|
||
}
|
||
// Only track prefetchable links that have a valid prefetch URL
|
||
prefetchable.set(element, instance);
|
||
if (observer !== null) {
|
||
observer.observe(element);
|
||
}
|
||
}
|
||
function coercePrefetchableUrl(href) {
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
return null;
|
||
}
|
||
}
|
||
function mountLinkInstance(element, href, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus) {
|
||
if (prefetchEnabled) {
|
||
const prefetchURL = coercePrefetchableUrl(href);
|
||
if (prefetchURL !== null) {
|
||
const instance = {
|
||
router,
|
||
fetchStrategy,
|
||
isVisible: false,
|
||
prefetchTask: null,
|
||
prefetchHref: prefetchURL.href,
|
||
setOptimisticLinkStatus
|
||
};
|
||
// We only observe the link's visibility if it's prefetchable. For
|
||
// example, this excludes links to external URLs.
|
||
observeVisibility(element, instance);
|
||
return instance;
|
||
}
|
||
}
|
||
// If the link is not prefetchable, we still create an instance so we can
|
||
// track its optimistic state (i.e. useLinkStatus).
|
||
const instance = {
|
||
router,
|
||
fetchStrategy,
|
||
isVisible: false,
|
||
prefetchTask: null,
|
||
prefetchHref: null,
|
||
setOptimisticLinkStatus
|
||
};
|
||
return instance;
|
||
}
|
||
function mountFormInstance(element, href, router, fetchStrategy) {
|
||
const prefetchURL = coercePrefetchableUrl(href);
|
||
if (prefetchURL === null) {
|
||
// This href is not prefetchable, so we don't track it.
|
||
// TODO: We currently observe/unobserve a form every time its href changes.
|
||
// For Links, this isn't a big deal because the href doesn't usually change,
|
||
// but for forms it's extremely common. We should optimize this.
|
||
return;
|
||
}
|
||
const instance = {
|
||
router,
|
||
fetchStrategy,
|
||
isVisible: false,
|
||
prefetchTask: null,
|
||
prefetchHref: prefetchURL.href,
|
||
setOptimisticLinkStatus: null
|
||
};
|
||
observeVisibility(element, instance);
|
||
}
|
||
function unmountPrefetchableInstance(element) {
|
||
const instance = prefetchable.get(element);
|
||
if (instance !== undefined) {
|
||
prefetchable.delete(element);
|
||
prefetchableAndVisible.delete(instance);
|
||
const prefetchTask = instance.prefetchTask;
|
||
if (prefetchTask !== null) {
|
||
(0, _scheduler.cancelPrefetchTask)(prefetchTask);
|
||
}
|
||
}
|
||
if (observer !== null) {
|
||
observer.unobserve(element);
|
||
}
|
||
}
|
||
function handleIntersect(entries) {
|
||
for (const entry of entries){
|
||
// Some extremely old browsers or polyfills don't reliably support
|
||
// isIntersecting so we check intersectionRatio instead. (Do we care? Not
|
||
// really. But whatever this is fine.)
|
||
const isVisible = entry.intersectionRatio > 0;
|
||
onLinkVisibilityChanged(entry.target, isVisible);
|
||
}
|
||
}
|
||
function onLinkVisibilityChanged(element, isVisible) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
// Prefetching on viewport is disabled in development for performance
|
||
// reasons, because it requires compiling the target page.
|
||
// TODO: Investigate re-enabling this.
|
||
return;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
const instance = undefined;
|
||
}
|
||
function onNavigationIntent(element, unstable_upgradeToDynamicPrefetch) {
|
||
const instance = prefetchable.get(element);
|
||
if (instance === undefined) {
|
||
return;
|
||
}
|
||
// Prefetch the link on hover/touchstart.
|
||
if (instance !== undefined) {
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
rescheduleLinkPrefetch(instance, _types.PrefetchPriority.Intent);
|
||
}
|
||
}
|
||
function rescheduleLinkPrefetch(instance, priority) {
|
||
// Ensures that app-router-instance is not compiled in the server bundle
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
}
|
||
function pingVisibleLinks(nextUrl, tree) {
|
||
// For each currently visible link, cancel the existing prefetch task (if it
|
||
// exists) and schedule a new one. This is effectively the same as if all the
|
||
// visible links left and then re-entered the viewport.
|
||
//
|
||
// This is called when the Next-Url or the base tree changes, since those
|
||
// may affect the result of a prefetch task. It's also called after a
|
||
// cache invalidation.
|
||
for (const instance of prefetchableAndVisible){
|
||
const task = instance.prefetchTask;
|
||
if (task !== null && !(0, _scheduler.isPrefetchTaskDirty)(task, nextUrl, tree)) {
|
||
continue;
|
||
}
|
||
// Something changed. Cancel the existing prefetch task and schedule a
|
||
// new one.
|
||
if (task !== null) {
|
||
(0, _scheduler.cancelPrefetchTask)(task);
|
||
}
|
||
const cacheKey = (0, _cachekey.createCacheKey)(instance.prefetchHref, nextUrl);
|
||
instance.prefetchTask = (0, _scheduler.schedulePrefetchTask)(cacheKey, tree, instance.fetchStrategy, _types.PrefetchPriority.Default, 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=links.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "pathHasPrefix", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return pathHasPrefix;
|
||
}
|
||
});
|
||
const _parsepath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-ssr] (ecmascript)");
|
||
function pathHasPrefix(path, prefix) {
|
||
if (typeof path !== 'string') {
|
||
return false;
|
||
}
|
||
const { pathname } = (0, _parsepath.parsePath)(path);
|
||
return pathname === prefix || pathname.startsWith(prefix + '/');
|
||
} //# sourceMappingURL=path-has-prefix.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/has-base-path.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "hasBasePath", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return hasBasePath;
|
||
}
|
||
});
|
||
const _pathhasprefix = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-ssr] (ecmascript)");
|
||
const basePath = ("TURBOPACK compile-time value", "") || '';
|
||
function hasBasePath(path) {
|
||
return (0, _pathhasprefix.pathHasPrefix)(path, basePath);
|
||
}
|
||
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=has-base-path.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js [app-ssr] (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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils.js [app-ssr] (ecmascript)");
|
||
const _hasbasepath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/has-base-path.js [app-ssr] (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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils/error-once.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [app-ssr] (ecmascript)");
|
||
const _jsxruntime = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"));
|
||
const _formaturl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/format-url.js [app-ssr] (ecmascript)");
|
||
const _approutercontextsharedruntime = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js [app-ssr] (ecmascript)");
|
||
const _usemergedref = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/use-merged-ref.js [app-ssr] (ecmascript)");
|
||
const _utils = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils.js [app-ssr] (ecmascript)");
|
||
const _addbasepath = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/add-base-path.js [app-ssr] (ecmascript)");
|
||
const _warnonce = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils/warn-once.js [app-ssr] (ecmascript)");
|
||
const _links = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/links.js [app-ssr] (ecmascript)");
|
||
const _islocalurl = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/router/utils/is-local-url.js [app-ssr] (ecmascript)");
|
||
const _types = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/segment-cache/types.js [app-ssr] (ecmascript)");
|
||
const _erroronce = __turbopack_context__.r("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/shared/lib/utils/error-once.js [app-ssr] (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 ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
}
|
||
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.` + (("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : '')), "__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(()=>{
|
||
const resolvedHref = formatStringOrUrl(hrefProp);
|
||
return {
|
||
href: resolvedHref,
|
||
as: asProp ? formatStringOrUrl(asProp) : resolvedHref
|
||
};
|
||
}, [
|
||
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` + (("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : '')), "__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((element)=>{
|
||
if (router !== null) {
|
||
linkInstanceRef.current = (0, _links.mountLinkInstance)(element, href, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus);
|
||
}
|
||
return ()=>{
|
||
if (linkInstanceRef.current) {
|
||
(0, _links.unmountLinkForCurrentNavigation)(linkInstanceRef.current);
|
||
linkInstanceRef.current = null;
|
||
}
|
||
(0, _links.unmountPrefetchableInstance)(element);
|
||
};
|
||
}, [
|
||
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]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (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",
|
||
()=>BookOpen
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const BookOpen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("BookOpen", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M12 7v14",
|
||
key: "1akyts"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",
|
||
key: "ruj8y"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=book-open.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript) <export default as BookOpen>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"BookOpen",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/book-open.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (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",
|
||
()=>Search
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Search = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Search", [
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "11",
|
||
cy: "11",
|
||
r: "8",
|
||
key: "4ej97u"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "m21 21-4.3-4.3",
|
||
key: "1qie3q"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=search.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (ecmascript) <export default as Search>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Search",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$search$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/search.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (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",
|
||
()=>Bell
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Bell = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Bell", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",
|
||
key: "1qo2s2"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M10.3 21a1.94 1.94 0 0 0 3.4 0",
|
||
key: "qgo35s"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=bell.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (ecmascript) <export default as Bell>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Bell",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$bell$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$bell$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/bell.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (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",
|
||
()=>Settings
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Settings = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Settings", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",
|
||
key: "1qme2f"
|
||
}
|
||
],
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "12",
|
||
cy: "12",
|
||
r: "3",
|
||
key: "1v7zrd"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=settings.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (ecmascript) <export default as Settings>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Settings",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$settings$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/settings.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (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",
|
||
()=>LogOut
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const LogOut = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("LogOut", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",
|
||
key: "1uf3rs"
|
||
}
|
||
],
|
||
[
|
||
"polyline",
|
||
{
|
||
points: "16 17 21 12 16 7",
|
||
key: "1gabdz"
|
||
}
|
||
],
|
||
[
|
||
"line",
|
||
{
|
||
x1: "21",
|
||
x2: "9",
|
||
y1: "12",
|
||
y2: "12",
|
||
key: "1uyos4"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=log-out.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (ecmascript) <export default as LogOut>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"LogOut",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/log-out.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (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",
|
||
()=>ChevronDown
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const ChevronDown = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("ChevronDown", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "m6 9 6 6 6-6",
|
||
key: "qrunsl"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=chevron-down.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) <export default as ChevronDown>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ChevronDown",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (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",
|
||
()=>Plus
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Plus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Plus", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M5 12h14",
|
||
key: "1ays0h"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M12 5v14",
|
||
key: "s699le"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=plus.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript) <export default as Plus>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Plus",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/plus.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (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",
|
||
()=>Trash2
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Trash2 = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Trash2", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M3 6h18",
|
||
key: "d0wm0j"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",
|
||
key: "4alrt4"
|
||
}
|
||
],
|
||
[
|
||
"path",
|
||
{
|
||
d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",
|
||
key: "v07s0e"
|
||
}
|
||
],
|
||
[
|
||
"line",
|
||
{
|
||
x1: "10",
|
||
x2: "10",
|
||
y1: "11",
|
||
y2: "17",
|
||
key: "1uufr5"
|
||
}
|
||
],
|
||
[
|
||
"line",
|
||
{
|
||
x1: "14",
|
||
x2: "14",
|
||
y1: "11",
|
||
y2: "17",
|
||
key: "xtxkd"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=trash-2.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript) <export default as Trash2>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Trash2",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-avatar@1.1.2_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_3ee3dafa662d71951c1a3d5b289c96d1/node_modules/@radix-ui/react-avatar/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Avatar",
|
||
()=>Avatar,
|
||
"AvatarFallback",
|
||
()=>AvatarFallback,
|
||
"AvatarImage",
|
||
()=>AvatarImage,
|
||
"Fallback",
|
||
()=>Fallback,
|
||
"Image",
|
||
()=>Image,
|
||
"Root",
|
||
()=>Root,
|
||
"createAvatarScope",
|
||
()=>createAvatarScope
|
||
]);
|
||
// packages/react/avatar/src/Avatar.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var AVATAR_NAME = "Avatar";
|
||
var [createAvatarContext, createAvatarScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(AVATAR_NAME);
|
||
var [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);
|
||
var Avatar = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeAvatar, ...avatarProps } = props;
|
||
const [imageLoadingStatus, setImageLoadingStatus] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]("idle");
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(AvatarProvider, {
|
||
scope: __scopeAvatar,
|
||
imageLoadingStatus,
|
||
onImageLoadingStatusChange: setImageLoadingStatus,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
...avatarProps,
|
||
ref: forwardedRef
|
||
})
|
||
});
|
||
});
|
||
Avatar.displayName = AVATAR_NAME;
|
||
var IMAGE_NAME = "AvatarImage";
|
||
var AvatarImage = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeAvatar, src, onLoadingStatusChange = ()=>{}, ...imageProps } = props;
|
||
const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);
|
||
const imageLoadingStatus = useImageLoadingStatus(src, imageProps.referrerPolicy);
|
||
const handleLoadingStatusChange = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])((status)=>{
|
||
onLoadingStatusChange(status);
|
||
context.onImageLoadingStatusChange(status);
|
||
});
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (imageLoadingStatus !== "idle") {
|
||
handleLoadingStatusChange(imageLoadingStatus);
|
||
}
|
||
}, [
|
||
imageLoadingStatus,
|
||
handleLoadingStatusChange
|
||
]);
|
||
return imageLoadingStatus === "loaded" ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].img, {
|
||
...imageProps,
|
||
ref: forwardedRef,
|
||
src
|
||
}) : null;
|
||
});
|
||
AvatarImage.displayName = IMAGE_NAME;
|
||
var FALLBACK_NAME = "AvatarFallback";
|
||
var AvatarFallback = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeAvatar, delayMs, ...fallbackProps } = props;
|
||
const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);
|
||
const [canRender, setCanRender] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](delayMs === void 0);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
if (delayMs !== void 0) {
|
||
const timerId = window.setTimeout(()=>setCanRender(true), delayMs);
|
||
return ()=>window.clearTimeout(timerId);
|
||
}
|
||
}, [
|
||
delayMs
|
||
]);
|
||
return canRender && context.imageLoadingStatus !== "loaded" ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
...fallbackProps,
|
||
ref: forwardedRef
|
||
}) : null;
|
||
});
|
||
AvatarFallback.displayName = FALLBACK_NAME;
|
||
function useImageLoadingStatus(src, referrerPolicy) {
|
||
const [loadingStatus, setLoadingStatus] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]("idle");
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (!src) {
|
||
setLoadingStatus("error");
|
||
return;
|
||
}
|
||
let isMounted = true;
|
||
const image = new window.Image();
|
||
const updateStatus = (status)=>()=>{
|
||
if (!isMounted) return;
|
||
setLoadingStatus(status);
|
||
};
|
||
setLoadingStatus("loading");
|
||
image.onload = updateStatus("loaded");
|
||
image.onerror = updateStatus("error");
|
||
image.src = src;
|
||
if (referrerPolicy) {
|
||
image.referrerPolicy = referrerPolicy;
|
||
}
|
||
return ()=>{
|
||
isMounted = false;
|
||
};
|
||
}, [
|
||
src,
|
||
referrerPolicy
|
||
]);
|
||
return loadingStatus;
|
||
}
|
||
var Root = Avatar;
|
||
var Image = AvatarImage;
|
||
var Fallback = AvatarFallback;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-collection@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+re_1ad17166111274b6b451c5ad4817bfc8/node_modules/@radix-ui/react-collection/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"createCollection",
|
||
()=>createCollection
|
||
]);
|
||
// packages/react/collection/src/Collection.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-slot@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-slot/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
function createCollection(name) {
|
||
const PROVIDER_NAME = name + "CollectionProvider";
|
||
const [createCollectionContext, createCollectionScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(PROVIDER_NAME);
|
||
const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(PROVIDER_NAME, {
|
||
collectionRef: {
|
||
current: null
|
||
},
|
||
itemMap: /* @__PURE__ */ new Map()
|
||
});
|
||
const CollectionProvider = (props)=>{
|
||
const { scope, children } = props;
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useRef(null);
|
||
const itemMap = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useRef(/* @__PURE__ */ new Map()).current;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(CollectionProviderImpl, {
|
||
scope,
|
||
itemMap,
|
||
collectionRef: ref,
|
||
children
|
||
});
|
||
};
|
||
CollectionProvider.displayName = PROVIDER_NAME;
|
||
const COLLECTION_SLOT_NAME = name + "CollectionSlot";
|
||
const CollectionSlot = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].forwardRef((props, forwardedRef)=>{
|
||
const { scope, children } = props;
|
||
const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, context.collectionRef);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slot"], {
|
||
ref: composedRefs,
|
||
children
|
||
});
|
||
});
|
||
CollectionSlot.displayName = COLLECTION_SLOT_NAME;
|
||
const ITEM_SLOT_NAME = name + "CollectionItemSlot";
|
||
const ITEM_DATA_ATTR = "data-radix-collection-item";
|
||
const CollectionItemSlot = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].forwardRef((props, forwardedRef)=>{
|
||
const { scope, children, ...itemData } = props;
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useRef(null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
const context = useCollectionContext(ITEM_SLOT_NAME, scope);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useEffect(()=>{
|
||
context.itemMap.set(ref, {
|
||
ref,
|
||
...itemData
|
||
});
|
||
return ()=>void context.itemMap.delete(ref);
|
||
});
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slot"], {
|
||
...{
|
||
[ITEM_DATA_ATTR]: ""
|
||
},
|
||
ref: composedRefs,
|
||
children
|
||
});
|
||
});
|
||
CollectionItemSlot.displayName = ITEM_SLOT_NAME;
|
||
function useCollection(scope) {
|
||
const context = useCollectionContext(name + "CollectionConsumer", scope);
|
||
const getItems = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].useCallback(()=>{
|
||
const collectionNode = context.collectionRef.current;
|
||
if (!collectionNode) return [];
|
||
const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));
|
||
const items = Array.from(context.itemMap.values());
|
||
const orderedItems = items.sort((a, b)=>orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current));
|
||
return orderedItems;
|
||
}, [
|
||
context.collectionRef,
|
||
context.itemMap
|
||
]);
|
||
return getItems;
|
||
}
|
||
return [
|
||
{
|
||
Provider: CollectionProvider,
|
||
Slot: CollectionSlot,
|
||
ItemSlot: CollectionItemSlot
|
||
},
|
||
useCollection,
|
||
createCollectionScope
|
||
];
|
||
}
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-direction@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-direction/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/direction/src/Direction.tsx
|
||
__turbopack_context__.s([
|
||
"DirectionProvider",
|
||
()=>DirectionProvider,
|
||
"Provider",
|
||
()=>Provider,
|
||
"useDirection",
|
||
()=>useDirection
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
var DirectionContext = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContext"](void 0);
|
||
var DirectionProvider = (props)=>{
|
||
const { dir, children } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(DirectionContext.Provider, {
|
||
value: dir,
|
||
children
|
||
});
|
||
};
|
||
function useDirection(localDir) {
|
||
const globalDir = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useContext"](DirectionContext);
|
||
return localDir || globalDir || "ltr";
|
||
}
|
||
var Provider = DirectionProvider;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Custom positioning reference element.
|
||
* @see https://floating-ui.com/docs/virtual-elements
|
||
*/ __turbopack_context__.s([
|
||
"alignments",
|
||
()=>alignments,
|
||
"clamp",
|
||
()=>clamp,
|
||
"createCoords",
|
||
()=>createCoords,
|
||
"evaluate",
|
||
()=>evaluate,
|
||
"expandPaddingObject",
|
||
()=>expandPaddingObject,
|
||
"floor",
|
||
()=>floor,
|
||
"getAlignment",
|
||
()=>getAlignment,
|
||
"getAlignmentAxis",
|
||
()=>getAlignmentAxis,
|
||
"getAlignmentSides",
|
||
()=>getAlignmentSides,
|
||
"getAxisLength",
|
||
()=>getAxisLength,
|
||
"getExpandedPlacements",
|
||
()=>getExpandedPlacements,
|
||
"getOppositeAlignmentPlacement",
|
||
()=>getOppositeAlignmentPlacement,
|
||
"getOppositeAxis",
|
||
()=>getOppositeAxis,
|
||
"getOppositeAxisPlacements",
|
||
()=>getOppositeAxisPlacements,
|
||
"getOppositePlacement",
|
||
()=>getOppositePlacement,
|
||
"getPaddingObject",
|
||
()=>getPaddingObject,
|
||
"getSide",
|
||
()=>getSide,
|
||
"getSideAxis",
|
||
()=>getSideAxis,
|
||
"max",
|
||
()=>max,
|
||
"min",
|
||
()=>min,
|
||
"placements",
|
||
()=>placements,
|
||
"rectToClientRect",
|
||
()=>rectToClientRect,
|
||
"round",
|
||
()=>round,
|
||
"sides",
|
||
()=>sides
|
||
]);
|
||
const sides = [
|
||
'top',
|
||
'right',
|
||
'bottom',
|
||
'left'
|
||
];
|
||
const alignments = [
|
||
'start',
|
||
'end'
|
||
];
|
||
const placements = /*#__PURE__*/ sides.reduce((acc, side)=>acc.concat(side, side + "-" + alignments[0], side + "-" + alignments[1]), []);
|
||
const min = Math.min;
|
||
const max = Math.max;
|
||
const round = Math.round;
|
||
const floor = Math.floor;
|
||
const createCoords = (v)=>({
|
||
x: v,
|
||
y: v
|
||
});
|
||
const oppositeSideMap = {
|
||
left: 'right',
|
||
right: 'left',
|
||
bottom: 'top',
|
||
top: 'bottom'
|
||
};
|
||
const oppositeAlignmentMap = {
|
||
start: 'end',
|
||
end: 'start'
|
||
};
|
||
function clamp(start, value, end) {
|
||
return max(start, min(value, end));
|
||
}
|
||
function evaluate(value, param) {
|
||
return typeof value === 'function' ? value(param) : value;
|
||
}
|
||
function getSide(placement) {
|
||
return placement.split('-')[0];
|
||
}
|
||
function getAlignment(placement) {
|
||
return placement.split('-')[1];
|
||
}
|
||
function getOppositeAxis(axis) {
|
||
return axis === 'x' ? 'y' : 'x';
|
||
}
|
||
function getAxisLength(axis) {
|
||
return axis === 'y' ? 'height' : 'width';
|
||
}
|
||
const yAxisSides = /*#__PURE__*/ new Set([
|
||
'top',
|
||
'bottom'
|
||
]);
|
||
function getSideAxis(placement) {
|
||
return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
|
||
}
|
||
function getAlignmentAxis(placement) {
|
||
return getOppositeAxis(getSideAxis(placement));
|
||
}
|
||
function getAlignmentSides(placement, rects, rtl) {
|
||
if (rtl === void 0) {
|
||
rtl = false;
|
||
}
|
||
const alignment = getAlignment(placement);
|
||
const alignmentAxis = getAlignmentAxis(placement);
|
||
const length = getAxisLength(alignmentAxis);
|
||
let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
|
||
if (rects.reference[length] > rects.floating[length]) {
|
||
mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
|
||
}
|
||
return [
|
||
mainAlignmentSide,
|
||
getOppositePlacement(mainAlignmentSide)
|
||
];
|
||
}
|
||
function getExpandedPlacements(placement) {
|
||
const oppositePlacement = getOppositePlacement(placement);
|
||
return [
|
||
getOppositeAlignmentPlacement(placement),
|
||
oppositePlacement,
|
||
getOppositeAlignmentPlacement(oppositePlacement)
|
||
];
|
||
}
|
||
function getOppositeAlignmentPlacement(placement) {
|
||
return placement.replace(/start|end/g, (alignment)=>oppositeAlignmentMap[alignment]);
|
||
}
|
||
const lrPlacement = [
|
||
'left',
|
||
'right'
|
||
];
|
||
const rlPlacement = [
|
||
'right',
|
||
'left'
|
||
];
|
||
const tbPlacement = [
|
||
'top',
|
||
'bottom'
|
||
];
|
||
const btPlacement = [
|
||
'bottom',
|
||
'top'
|
||
];
|
||
function getSideList(side, isStart, rtl) {
|
||
switch(side){
|
||
case 'top':
|
||
case 'bottom':
|
||
if (rtl) return isStart ? rlPlacement : lrPlacement;
|
||
return isStart ? lrPlacement : rlPlacement;
|
||
case 'left':
|
||
case 'right':
|
||
return isStart ? tbPlacement : btPlacement;
|
||
default:
|
||
return [];
|
||
}
|
||
}
|
||
function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
|
||
const alignment = getAlignment(placement);
|
||
let list = getSideList(getSide(placement), direction === 'start', rtl);
|
||
if (alignment) {
|
||
list = list.map((side)=>side + "-" + alignment);
|
||
if (flipAlignment) {
|
||
list = list.concat(list.map(getOppositeAlignmentPlacement));
|
||
}
|
||
}
|
||
return list;
|
||
}
|
||
function getOppositePlacement(placement) {
|
||
return placement.replace(/left|right|bottom|top/g, (side)=>oppositeSideMap[side]);
|
||
}
|
||
function expandPaddingObject(padding) {
|
||
return {
|
||
top: 0,
|
||
right: 0,
|
||
bottom: 0,
|
||
left: 0,
|
||
...padding
|
||
};
|
||
}
|
||
function getPaddingObject(padding) {
|
||
return typeof padding !== 'number' ? expandPaddingObject(padding) : {
|
||
top: padding,
|
||
right: padding,
|
||
bottom: padding,
|
||
left: padding
|
||
};
|
||
}
|
||
function rectToClientRect(rect) {
|
||
const { x, y, width, height } = rect;
|
||
return {
|
||
width,
|
||
height,
|
||
top: y,
|
||
left: x,
|
||
right: x + width,
|
||
bottom: y + height,
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
;
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs [app-ssr] (ecmascript) <locals>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"arrow",
|
||
()=>arrow,
|
||
"autoPlacement",
|
||
()=>autoPlacement,
|
||
"computePosition",
|
||
()=>computePosition,
|
||
"detectOverflow",
|
||
()=>detectOverflow,
|
||
"flip",
|
||
()=>flip,
|
||
"hide",
|
||
()=>hide,
|
||
"inline",
|
||
()=>inline,
|
||
"limitShift",
|
||
()=>limitShift,
|
||
"offset",
|
||
()=>offset,
|
||
"shift",
|
||
()=>shift,
|
||
"size",
|
||
()=>size
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
function computeCoordsFromPlacement(_ref, placement, rtl) {
|
||
let { reference, floating } = _ref;
|
||
const sideAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement);
|
||
const alignmentAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentAxis"])(placement);
|
||
const alignLength = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAxisLength"])(alignmentAxis);
|
||
const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement);
|
||
const isVertical = sideAxis === 'y';
|
||
const commonX = reference.x + reference.width / 2 - floating.width / 2;
|
||
const commonY = reference.y + reference.height / 2 - floating.height / 2;
|
||
const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
|
||
let coords;
|
||
switch(side){
|
||
case 'top':
|
||
coords = {
|
||
x: commonX,
|
||
y: reference.y - floating.height
|
||
};
|
||
break;
|
||
case 'bottom':
|
||
coords = {
|
||
x: commonX,
|
||
y: reference.y + reference.height
|
||
};
|
||
break;
|
||
case 'right':
|
||
coords = {
|
||
x: reference.x + reference.width,
|
||
y: commonY
|
||
};
|
||
break;
|
||
case 'left':
|
||
coords = {
|
||
x: reference.x - floating.width,
|
||
y: commonY
|
||
};
|
||
break;
|
||
default:
|
||
coords = {
|
||
x: reference.x,
|
||
y: reference.y
|
||
};
|
||
}
|
||
switch((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement)){
|
||
case 'start':
|
||
coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
|
||
break;
|
||
case 'end':
|
||
coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
|
||
break;
|
||
}
|
||
return coords;
|
||
}
|
||
/**
|
||
* Computes the `x` and `y` coordinates that will place the floating element
|
||
* next to a given reference element.
|
||
*
|
||
* This export does not have any `platform` interface logic. You will need to
|
||
* write one for the platform you are using Floating UI with.
|
||
*/ const computePosition = async (reference, floating, config)=>{
|
||
const { placement = 'bottom', strategy = 'absolute', middleware = [], platform } = config;
|
||
const validMiddleware = middleware.filter(Boolean);
|
||
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
|
||
let rects = await platform.getElementRects({
|
||
reference,
|
||
floating,
|
||
strategy
|
||
});
|
||
let { x, y } = computeCoordsFromPlacement(rects, placement, rtl);
|
||
let statefulPlacement = placement;
|
||
let middlewareData = {};
|
||
let resetCount = 0;
|
||
for(let i = 0; i < validMiddleware.length; i++){
|
||
const { name, fn } = validMiddleware[i];
|
||
const { x: nextX, y: nextY, data, reset } = await fn({
|
||
x,
|
||
y,
|
||
initialPlacement: placement,
|
||
placement: statefulPlacement,
|
||
strategy,
|
||
middlewareData,
|
||
rects,
|
||
platform,
|
||
elements: {
|
||
reference,
|
||
floating
|
||
}
|
||
});
|
||
x = nextX != null ? nextX : x;
|
||
y = nextY != null ? nextY : y;
|
||
middlewareData = {
|
||
...middlewareData,
|
||
[name]: {
|
||
...middlewareData[name],
|
||
...data
|
||
}
|
||
};
|
||
if (reset && resetCount <= 50) {
|
||
resetCount++;
|
||
if (typeof reset === 'object') {
|
||
if (reset.placement) {
|
||
statefulPlacement = reset.placement;
|
||
}
|
||
if (reset.rects) {
|
||
rects = reset.rects === true ? await platform.getElementRects({
|
||
reference,
|
||
floating,
|
||
strategy
|
||
}) : reset.rects;
|
||
}
|
||
({ x, y } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
|
||
}
|
||
i = -1;
|
||
}
|
||
}
|
||
return {
|
||
x,
|
||
y,
|
||
placement: statefulPlacement,
|
||
strategy,
|
||
middlewareData
|
||
};
|
||
};
|
||
/**
|
||
* Resolves with an object of overflow side offsets that determine how much the
|
||
* element is overflowing a given clipping boundary on each side.
|
||
* - positive = overflowing the boundary by that number of pixels
|
||
* - negative = how many pixels left before it will overflow
|
||
* - 0 = lies flush with the boundary
|
||
* @see https://floating-ui.com/docs/detectOverflow
|
||
*/ async function detectOverflow(state, options) {
|
||
var _await$platform$isEle;
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
const { x, y, platform, rects, elements, strategy } = state;
|
||
const { boundary = 'clippingAncestors', rootBoundary = 'viewport', elementContext = 'floating', altBoundary = false, padding = 0 } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
const paddingObject = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getPaddingObject"])(padding);
|
||
const altContext = elementContext === 'floating' ? 'reference' : 'floating';
|
||
const element = elements[altBoundary ? altContext : elementContext];
|
||
const clippingClientRect = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(await platform.getClippingRect({
|
||
element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating)),
|
||
boundary,
|
||
rootBoundary,
|
||
strategy
|
||
}));
|
||
const rect = elementContext === 'floating' ? {
|
||
x,
|
||
y,
|
||
width: rects.floating.width,
|
||
height: rects.floating.height
|
||
} : rects.reference;
|
||
const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
|
||
const offsetScale = await (platform.isElement == null ? void 0 : platform.isElement(offsetParent)) ? await (platform.getScale == null ? void 0 : platform.getScale(offsetParent)) || {
|
||
x: 1,
|
||
y: 1
|
||
} : {
|
||
x: 1,
|
||
y: 1
|
||
};
|
||
const elementClientRect = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
|
||
elements,
|
||
rect,
|
||
offsetParent,
|
||
strategy
|
||
}) : rect);
|
||
return {
|
||
top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
|
||
bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
|
||
left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
|
||
right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
|
||
};
|
||
}
|
||
/**
|
||
* Provides data to position an inner element of the floating element so that it
|
||
* appears centered to the reference element.
|
||
* @see https://floating-ui.com/docs/arrow
|
||
*/ const arrow = (options)=>({
|
||
name: 'arrow',
|
||
options,
|
||
async fn (state) {
|
||
const { x, y, placement, rects, platform, elements, middlewareData } = state;
|
||
// Since `element` is required, we don't Partial<> the type.
|
||
const { element, padding = 0 } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state) || {};
|
||
if (element == null) {
|
||
return {};
|
||
}
|
||
const paddingObject = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getPaddingObject"])(padding);
|
||
const coords = {
|
||
x,
|
||
y
|
||
};
|
||
const axis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentAxis"])(placement);
|
||
const length = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAxisLength"])(axis);
|
||
const arrowDimensions = await platform.getDimensions(element);
|
||
const isYAxis = axis === 'y';
|
||
const minProp = isYAxis ? 'top' : 'left';
|
||
const maxProp = isYAxis ? 'bottom' : 'right';
|
||
const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';
|
||
const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
|
||
const startDiff = coords[axis] - rects.reference[axis];
|
||
const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));
|
||
let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;
|
||
// DOM platform can return `window` as the `offsetParent`.
|
||
if (!clientSize || !await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent))) {
|
||
clientSize = elements.floating[clientProp] || rects.floating[length];
|
||
}
|
||
const centerToReference = endDiff / 2 - startDiff / 2;
|
||
// If the padding is large enough that it causes the arrow to no longer be
|
||
// centered, modify the padding so that it is centered.
|
||
const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
|
||
const minPadding = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(paddingObject[minProp], largestPossiblePadding);
|
||
const maxPadding = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(paddingObject[maxProp], largestPossiblePadding);
|
||
// Make sure the arrow doesn't overflow the floating element if the center
|
||
// point is outside the floating element's bounds.
|
||
const min$1 = minPadding;
|
||
const max = clientSize - arrowDimensions[length] - maxPadding;
|
||
const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
|
||
const offset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(min$1, center, max);
|
||
// If the reference is small enough that the arrow's padding causes it to
|
||
// to point to nothing for an aligned placement, adjust the offset of the
|
||
// floating element itself. To ensure `shift()` continues to take action,
|
||
// a single reset is performed when this is true.
|
||
const shouldAddOffset = !middlewareData.arrow && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
|
||
const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;
|
||
return {
|
||
[axis]: coords[axis] + alignmentOffset,
|
||
data: {
|
||
[axis]: offset,
|
||
centerOffset: center - offset - alignmentOffset,
|
||
...shouldAddOffset && {
|
||
alignmentOffset
|
||
}
|
||
},
|
||
reset: shouldAddOffset
|
||
};
|
||
}
|
||
});
|
||
function getPlacementList(alignment, autoAlignment, allowedPlacements) {
|
||
const allowedPlacementsSortedByAlignment = alignment ? [
|
||
...allowedPlacements.filter((placement)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) === alignment),
|
||
...allowedPlacements.filter((placement)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) !== alignment)
|
||
] : allowedPlacements.filter((placement)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement) === placement);
|
||
return allowedPlacementsSortedByAlignment.filter((placement)=>{
|
||
if (alignment) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement) === alignment || (autoAlignment ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAlignmentPlacement"])(placement) !== placement : false);
|
||
}
|
||
return true;
|
||
});
|
||
}
|
||
/**
|
||
* Optimizes the visibility of the floating element by choosing the placement
|
||
* that has the most space available automatically, without needing to specify a
|
||
* preferred placement. Alternative to `flip`.
|
||
* @see https://floating-ui.com/docs/autoPlacement
|
||
*/ const autoPlacement = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
name: 'autoPlacement',
|
||
options,
|
||
async fn (state) {
|
||
var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;
|
||
const { rects, middlewareData, placement, platform, elements } = state;
|
||
const { crossAxis = false, alignment, allowedPlacements = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["placements"], autoAlignment = true, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
const placements$1 = alignment !== undefined || allowedPlacements === __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["placements"] ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;
|
||
const overflow = await detectOverflow(state, detectOverflowOptions);
|
||
const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;
|
||
const currentPlacement = placements$1[currentIndex];
|
||
if (currentPlacement == null) {
|
||
return {};
|
||
}
|
||
const alignmentSides = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentSides"])(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));
|
||
// Make `computeCoords` start from the right place.
|
||
if (placement !== currentPlacement) {
|
||
return {
|
||
reset: {
|
||
placement: placements$1[0]
|
||
}
|
||
};
|
||
}
|
||
const currentOverflows = [
|
||
overflow[(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(currentPlacement)],
|
||
overflow[alignmentSides[0]],
|
||
overflow[alignmentSides[1]]
|
||
];
|
||
const allOverflows = [
|
||
...((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || [],
|
||
{
|
||
placement: currentPlacement,
|
||
overflows: currentOverflows
|
||
}
|
||
];
|
||
const nextPlacement = placements$1[currentIndex + 1];
|
||
// There are more placements to check.
|
||
if (nextPlacement) {
|
||
return {
|
||
data: {
|
||
index: currentIndex + 1,
|
||
overflows: allOverflows
|
||
},
|
||
reset: {
|
||
placement: nextPlacement
|
||
}
|
||
};
|
||
}
|
||
const placementsSortedByMostSpace = allOverflows.map((d)=>{
|
||
const alignment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(d.placement);
|
||
return [
|
||
d.placement,
|
||
alignment && crossAxis ? // Check along the mainAxis and main crossAxis side.
|
||
d.overflows.slice(0, 2).reduce((acc, v)=>acc + v, 0) : // Check only the mainAxis.
|
||
d.overflows[0],
|
||
d.overflows
|
||
];
|
||
}).sort((a, b)=>a[1] - b[1]);
|
||
const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter((d)=>d[2].slice(0, // Aligned placements should not check their opposite crossAxis
|
||
// side.
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(d[0]) ? 2 : 3).every((v)=>v <= 0));
|
||
const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];
|
||
if (resetPlacement !== placement) {
|
||
return {
|
||
data: {
|
||
index: currentIndex + 1,
|
||
overflows: allOverflows
|
||
},
|
||
reset: {
|
||
placement: resetPlacement
|
||
}
|
||
};
|
||
}
|
||
return {};
|
||
}
|
||
};
|
||
};
|
||
/**
|
||
* Optimizes the visibility of the floating element by flipping the `placement`
|
||
* in order to keep it in view when the preferred placement(s) will overflow the
|
||
* clipping boundary. Alternative to `autoPlacement`.
|
||
* @see https://floating-ui.com/docs/flip
|
||
*/ const flip = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
name: 'flip',
|
||
options,
|
||
async fn (state) {
|
||
var _middlewareData$arrow, _middlewareData$flip;
|
||
const { placement, middlewareData, rects, initialPlacement, platform, elements } = state;
|
||
const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = 'bestFit', fallbackAxisSideDirection = 'none', flipAlignment = true, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
// If a reset by the arrow was caused due to an alignment offset being
|
||
// added, we should skip any logic now since `flip()` has already done its
|
||
// work.
|
||
// https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643
|
||
if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
|
||
return {};
|
||
}
|
||
const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement);
|
||
const initialSideAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(initialPlacement);
|
||
const isBasePlacement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(initialPlacement) === initialPlacement;
|
||
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
|
||
const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositePlacement"])(initialPlacement)
|
||
] : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getExpandedPlacements"])(initialPlacement));
|
||
const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';
|
||
if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
|
||
fallbackPlacements.push(...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAxisPlacements"])(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
|
||
}
|
||
const placements = [
|
||
initialPlacement,
|
||
...fallbackPlacements
|
||
];
|
||
const overflow = await detectOverflow(state, detectOverflowOptions);
|
||
const overflows = [];
|
||
let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
|
||
if (checkMainAxis) {
|
||
overflows.push(overflow[side]);
|
||
}
|
||
if (checkCrossAxis) {
|
||
const sides = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignmentSides"])(placement, rects, rtl);
|
||
overflows.push(overflow[sides[0]], overflow[sides[1]]);
|
||
}
|
||
overflowsData = [
|
||
...overflowsData,
|
||
{
|
||
placement,
|
||
overflows
|
||
}
|
||
];
|
||
// One or more sides is overflowing.
|
||
if (!overflows.every((side)=>side <= 0)) {
|
||
var _middlewareData$flip2, _overflowsData$filter;
|
||
const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
|
||
const nextPlacement = placements[nextIndex];
|
||
if (nextPlacement) {
|
||
const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(nextPlacement) : false;
|
||
if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
|
||
// overflows the main axis.
|
||
overflowsData.every((d)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
|
||
// Try next placement and re-run the lifecycle.
|
||
return {
|
||
data: {
|
||
index: nextIndex,
|
||
overflows: overflowsData
|
||
},
|
||
reset: {
|
||
placement: nextPlacement
|
||
}
|
||
};
|
||
}
|
||
}
|
||
// First, find the candidates that fit on the mainAxis side of overflow,
|
||
// then find the placement that fits the best on the main crossAxis side.
|
||
let resetPlacement = (_overflowsData$filter = overflowsData.filter((d)=>d.overflows[0] <= 0).sort((a, b)=>a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
|
||
// Otherwise fallback.
|
||
if (!resetPlacement) {
|
||
switch(fallbackStrategy){
|
||
case 'bestFit':
|
||
{
|
||
var _overflowsData$filter2;
|
||
const placement = (_overflowsData$filter2 = overflowsData.filter((d)=>{
|
||
if (hasFallbackAxisSideDirection) {
|
||
const currentSideAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(d.placement);
|
||
return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
|
||
// reading directions favoring greater width.
|
||
currentSideAxis === 'y';
|
||
}
|
||
return true;
|
||
}).map((d)=>[
|
||
d.placement,
|
||
d.overflows.filter((overflow)=>overflow > 0).reduce((acc, overflow)=>acc + overflow, 0)
|
||
]).sort((a, b)=>a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
|
||
if (placement) {
|
||
resetPlacement = placement;
|
||
}
|
||
break;
|
||
}
|
||
case 'initialPlacement':
|
||
resetPlacement = initialPlacement;
|
||
break;
|
||
}
|
||
}
|
||
if (placement !== resetPlacement) {
|
||
return {
|
||
reset: {
|
||
placement: resetPlacement
|
||
}
|
||
};
|
||
}
|
||
}
|
||
return {};
|
||
}
|
||
};
|
||
};
|
||
function getSideOffsets(overflow, rect) {
|
||
return {
|
||
top: overflow.top - rect.height,
|
||
right: overflow.right - rect.width,
|
||
bottom: overflow.bottom - rect.height,
|
||
left: overflow.left - rect.width
|
||
};
|
||
}
|
||
function isAnySideFullyClipped(overflow) {
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["sides"].some((side)=>overflow[side] >= 0);
|
||
}
|
||
/**
|
||
* Provides data to hide the floating element in applicable situations, such as
|
||
* when it is not in the same clipping context as the reference element.
|
||
* @see https://floating-ui.com/docs/hide
|
||
*/ const hide = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
name: 'hide',
|
||
options,
|
||
async fn (state) {
|
||
const { rects } = state;
|
||
const { strategy = 'referenceHidden', ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
switch(strategy){
|
||
case 'referenceHidden':
|
||
{
|
||
const overflow = await detectOverflow(state, {
|
||
...detectOverflowOptions,
|
||
elementContext: 'reference'
|
||
});
|
||
const offsets = getSideOffsets(overflow, rects.reference);
|
||
return {
|
||
data: {
|
||
referenceHiddenOffsets: offsets,
|
||
referenceHidden: isAnySideFullyClipped(offsets)
|
||
}
|
||
};
|
||
}
|
||
case 'escaped':
|
||
{
|
||
const overflow = await detectOverflow(state, {
|
||
...detectOverflowOptions,
|
||
altBoundary: true
|
||
});
|
||
const offsets = getSideOffsets(overflow, rects.floating);
|
||
return {
|
||
data: {
|
||
escapedOffsets: offsets,
|
||
escaped: isAnySideFullyClipped(offsets)
|
||
}
|
||
};
|
||
}
|
||
default:
|
||
{
|
||
return {};
|
||
}
|
||
}
|
||
}
|
||
};
|
||
};
|
||
function getBoundingRect(rects) {
|
||
const minX = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(...rects.map((rect)=>rect.left));
|
||
const minY = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(...rects.map((rect)=>rect.top));
|
||
const maxX = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(...rects.map((rect)=>rect.right));
|
||
const maxY = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(...rects.map((rect)=>rect.bottom));
|
||
return {
|
||
x: minX,
|
||
y: minY,
|
||
width: maxX - minX,
|
||
height: maxY - minY
|
||
};
|
||
}
|
||
function getRectsByLine(rects) {
|
||
const sortedRects = rects.slice().sort((a, b)=>a.y - b.y);
|
||
const groups = [];
|
||
let prevRect = null;
|
||
for(let i = 0; i < sortedRects.length; i++){
|
||
const rect = sortedRects[i];
|
||
if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {
|
||
groups.push([
|
||
rect
|
||
]);
|
||
} else {
|
||
groups[groups.length - 1].push(rect);
|
||
}
|
||
prevRect = rect;
|
||
}
|
||
return groups.map((rect)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(getBoundingRect(rect)));
|
||
}
|
||
/**
|
||
* Provides improved positioning for inline reference elements that can span
|
||
* over multiple lines, such as hyperlinks or range selections.
|
||
* @see https://floating-ui.com/docs/inline
|
||
*/ const inline = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
name: 'inline',
|
||
options,
|
||
async fn (state) {
|
||
const { placement, elements, rects, platform, strategy } = state;
|
||
// A MouseEvent's client{X,Y} coords can be up to 2 pixels off a
|
||
// ClientRect's bounds, despite the event listener being triggered. A
|
||
// padding of 2 seems to handle this issue.
|
||
const { padding = 2, x, y } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
const nativeClientRects = Array.from(await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference)) || []);
|
||
const clientRects = getRectsByLine(nativeClientRects);
|
||
const fallback = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(getBoundingRect(nativeClientRects));
|
||
const paddingObject = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getPaddingObject"])(padding);
|
||
function getBoundingClientRect() {
|
||
// There are two rects and they are disjoined.
|
||
if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {
|
||
// Find the first rect in which the point is fully inside.
|
||
return clientRects.find((rect)=>x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;
|
||
}
|
||
// There are 2 or more connected rects.
|
||
if (clientRects.length >= 2) {
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement) === 'y') {
|
||
const firstRect = clientRects[0];
|
||
const lastRect = clientRects[clientRects.length - 1];
|
||
const isTop = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement) === 'top';
|
||
const top = firstRect.top;
|
||
const bottom = lastRect.bottom;
|
||
const left = isTop ? firstRect.left : lastRect.left;
|
||
const right = isTop ? firstRect.right : lastRect.right;
|
||
const width = right - left;
|
||
const height = bottom - top;
|
||
return {
|
||
top,
|
||
bottom,
|
||
left,
|
||
right,
|
||
width,
|
||
height,
|
||
x: left,
|
||
y: top
|
||
};
|
||
}
|
||
const isLeftSide = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement) === 'left';
|
||
const maxRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(...clientRects.map((rect)=>rect.right));
|
||
const minLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(...clientRects.map((rect)=>rect.left));
|
||
const measureRects = clientRects.filter((rect)=>isLeftSide ? rect.left === minLeft : rect.right === maxRight);
|
||
const top = measureRects[0].top;
|
||
const bottom = measureRects[measureRects.length - 1].bottom;
|
||
const left = minLeft;
|
||
const right = maxRight;
|
||
const width = right - left;
|
||
const height = bottom - top;
|
||
return {
|
||
top,
|
||
bottom,
|
||
left,
|
||
right,
|
||
width,
|
||
height,
|
||
x: left,
|
||
y: top
|
||
};
|
||
}
|
||
return fallback;
|
||
}
|
||
const resetRects = await platform.getElementRects({
|
||
reference: {
|
||
getBoundingClientRect
|
||
},
|
||
floating: elements.floating,
|
||
strategy
|
||
});
|
||
if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {
|
||
return {
|
||
reset: {
|
||
rects: resetRects
|
||
}
|
||
};
|
||
}
|
||
return {};
|
||
}
|
||
};
|
||
};
|
||
const originSides = /*#__PURE__*/ new Set([
|
||
'left',
|
||
'top'
|
||
]);
|
||
// For type backwards-compatibility, the `OffsetOptions` type was also
|
||
// Derivable.
|
||
async function convertValueToCoords(state, options) {
|
||
const { placement, platform, elements } = state;
|
||
const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
|
||
const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement);
|
||
const alignment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement);
|
||
const isVertical = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement) === 'y';
|
||
const mainAxisMulti = originSides.has(side) ? -1 : 1;
|
||
const crossAxisMulti = rtl && isVertical ? -1 : 1;
|
||
const rawValue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
// eslint-disable-next-line prefer-const
|
||
let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === 'number' ? {
|
||
mainAxis: rawValue,
|
||
crossAxis: 0,
|
||
alignmentAxis: null
|
||
} : {
|
||
mainAxis: rawValue.mainAxis || 0,
|
||
crossAxis: rawValue.crossAxis || 0,
|
||
alignmentAxis: rawValue.alignmentAxis
|
||
};
|
||
if (alignment && typeof alignmentAxis === 'number') {
|
||
crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;
|
||
}
|
||
return isVertical ? {
|
||
x: crossAxis * crossAxisMulti,
|
||
y: mainAxis * mainAxisMulti
|
||
} : {
|
||
x: mainAxis * mainAxisMulti,
|
||
y: crossAxis * crossAxisMulti
|
||
};
|
||
}
|
||
/**
|
||
* Modifies the placement by translating the floating element along the
|
||
* specified axes.
|
||
* A number (shorthand for `mainAxis` or distance), or an axes configuration
|
||
* object may be passed.
|
||
* @see https://floating-ui.com/docs/offset
|
||
*/ const offset = function(options) {
|
||
if (options === void 0) {
|
||
options = 0;
|
||
}
|
||
return {
|
||
name: 'offset',
|
||
options,
|
||
async fn (state) {
|
||
var _middlewareData$offse, _middlewareData$arrow;
|
||
const { x, y, placement, middlewareData } = state;
|
||
const diffCoords = await convertValueToCoords(state, options);
|
||
// If the placement is the same and the arrow caused an alignment offset
|
||
// then we don't need to change the positioning coordinates.
|
||
if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
|
||
return {};
|
||
}
|
||
return {
|
||
x: x + diffCoords.x,
|
||
y: y + diffCoords.y,
|
||
data: {
|
||
...diffCoords,
|
||
placement
|
||
}
|
||
};
|
||
}
|
||
};
|
||
};
|
||
/**
|
||
* Optimizes the visibility of the floating element by shifting it in order to
|
||
* keep it in view when it will overflow the clipping boundary.
|
||
* @see https://floating-ui.com/docs/shift
|
||
*/ const shift = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
name: 'shift',
|
||
options,
|
||
async fn (state) {
|
||
const { x, y, placement } = state;
|
||
const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = false, limiter = {
|
||
fn: (_ref)=>{
|
||
let { x, y } = _ref;
|
||
return {
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
}, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
const coords = {
|
||
x,
|
||
y
|
||
};
|
||
const overflow = await detectOverflow(state, detectOverflowOptions);
|
||
const crossAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement));
|
||
const mainAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAxis"])(crossAxis);
|
||
let mainAxisCoord = coords[mainAxis];
|
||
let crossAxisCoord = coords[crossAxis];
|
||
if (checkMainAxis) {
|
||
const minSide = mainAxis === 'y' ? 'top' : 'left';
|
||
const maxSide = mainAxis === 'y' ? 'bottom' : 'right';
|
||
const min = mainAxisCoord + overflow[minSide];
|
||
const max = mainAxisCoord - overflow[maxSide];
|
||
mainAxisCoord = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(min, mainAxisCoord, max);
|
||
}
|
||
if (checkCrossAxis) {
|
||
const minSide = crossAxis === 'y' ? 'top' : 'left';
|
||
const maxSide = crossAxis === 'y' ? 'bottom' : 'right';
|
||
const min = crossAxisCoord + overflow[minSide];
|
||
const max = crossAxisCoord - overflow[maxSide];
|
||
crossAxisCoord = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(min, crossAxisCoord, max);
|
||
}
|
||
const limitedCoords = limiter.fn({
|
||
...state,
|
||
[mainAxis]: mainAxisCoord,
|
||
[crossAxis]: crossAxisCoord
|
||
});
|
||
return {
|
||
...limitedCoords,
|
||
data: {
|
||
x: limitedCoords.x - x,
|
||
y: limitedCoords.y - y,
|
||
enabled: {
|
||
[mainAxis]: checkMainAxis,
|
||
[crossAxis]: checkCrossAxis
|
||
}
|
||
}
|
||
};
|
||
}
|
||
};
|
||
};
|
||
/**
|
||
* Built-in `limiter` that will stop `shift()` at a certain point.
|
||
*/ const limitShift = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
options,
|
||
fn (state) {
|
||
const { x, y, placement, rects, middlewareData } = state;
|
||
const { offset = 0, mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
const coords = {
|
||
x,
|
||
y
|
||
};
|
||
const crossAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement);
|
||
const mainAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOppositeAxis"])(crossAxis);
|
||
let mainAxisCoord = coords[mainAxis];
|
||
let crossAxisCoord = coords[crossAxis];
|
||
const rawOffset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(offset, state);
|
||
const computedOffset = typeof rawOffset === 'number' ? {
|
||
mainAxis: rawOffset,
|
||
crossAxis: 0
|
||
} : {
|
||
mainAxis: 0,
|
||
crossAxis: 0,
|
||
...rawOffset
|
||
};
|
||
if (checkMainAxis) {
|
||
const len = mainAxis === 'y' ? 'height' : 'width';
|
||
const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;
|
||
const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;
|
||
if (mainAxisCoord < limitMin) {
|
||
mainAxisCoord = limitMin;
|
||
} else if (mainAxisCoord > limitMax) {
|
||
mainAxisCoord = limitMax;
|
||
}
|
||
}
|
||
if (checkCrossAxis) {
|
||
var _middlewareData$offse, _middlewareData$offse2;
|
||
const len = mainAxis === 'y' ? 'width' : 'height';
|
||
const isOriginSide = originSides.has((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement));
|
||
const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);
|
||
const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);
|
||
if (crossAxisCoord < limitMin) {
|
||
crossAxisCoord = limitMin;
|
||
} else if (crossAxisCoord > limitMax) {
|
||
crossAxisCoord = limitMax;
|
||
}
|
||
}
|
||
return {
|
||
[mainAxis]: mainAxisCoord,
|
||
[crossAxis]: crossAxisCoord
|
||
};
|
||
}
|
||
};
|
||
};
|
||
/**
|
||
* Provides data that allows you to change the size of the floating element —
|
||
* for instance, prevent it from overflowing the clipping boundary or match the
|
||
* width of the reference element.
|
||
* @see https://floating-ui.com/docs/size
|
||
*/ const size = function(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
return {
|
||
name: 'size',
|
||
options,
|
||
async fn (state) {
|
||
var _state$middlewareData, _state$middlewareData2;
|
||
const { placement, rects, platform, elements } = state;
|
||
const { apply = ()=>{}, ...detectOverflowOptions } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["evaluate"])(options, state);
|
||
const overflow = await detectOverflow(state, detectOverflowOptions);
|
||
const side = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSide"])(placement);
|
||
const alignment = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getAlignment"])(placement);
|
||
const isYAxis = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getSideAxis"])(placement) === 'y';
|
||
const { width, height } = rects.floating;
|
||
let heightSide;
|
||
let widthSide;
|
||
if (side === 'top' || side === 'bottom') {
|
||
heightSide = side;
|
||
widthSide = alignment === (await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)) ? 'start' : 'end') ? 'left' : 'right';
|
||
} else {
|
||
widthSide = side;
|
||
heightSide = alignment === 'end' ? 'top' : 'bottom';
|
||
}
|
||
const maximumClippingHeight = height - overflow.top - overflow.bottom;
|
||
const maximumClippingWidth = width - overflow.left - overflow.right;
|
||
const overflowAvailableHeight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(height - overflow[heightSide], maximumClippingHeight);
|
||
const overflowAvailableWidth = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(width - overflow[widthSide], maximumClippingWidth);
|
||
const noShift = !state.middlewareData.shift;
|
||
let availableHeight = overflowAvailableHeight;
|
||
let availableWidth = overflowAvailableWidth;
|
||
if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {
|
||
availableWidth = maximumClippingWidth;
|
||
}
|
||
if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {
|
||
availableHeight = maximumClippingHeight;
|
||
}
|
||
if (noShift && !alignment) {
|
||
const xMin = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.left, 0);
|
||
const xMax = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.right, 0);
|
||
const yMin = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.top, 0);
|
||
const yMax = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.bottom, 0);
|
||
if (isYAxis) {
|
||
availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.left, overflow.right));
|
||
} else {
|
||
availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(overflow.top, overflow.bottom));
|
||
}
|
||
}
|
||
await apply({
|
||
...state,
|
||
availableWidth,
|
||
availableHeight
|
||
});
|
||
const nextDimensions = await platform.getDimensions(elements.floating);
|
||
if (width !== nextDimensions.width || height !== nextDimensions.height) {
|
||
return {
|
||
reset: {
|
||
rects: true
|
||
}
|
||
};
|
||
}
|
||
return {};
|
||
}
|
||
};
|
||
};
|
||
;
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getComputedStyle",
|
||
()=>getComputedStyle,
|
||
"getContainingBlock",
|
||
()=>getContainingBlock,
|
||
"getDocumentElement",
|
||
()=>getDocumentElement,
|
||
"getFrameElement",
|
||
()=>getFrameElement,
|
||
"getNearestOverflowAncestor",
|
||
()=>getNearestOverflowAncestor,
|
||
"getNodeName",
|
||
()=>getNodeName,
|
||
"getNodeScroll",
|
||
()=>getNodeScroll,
|
||
"getOverflowAncestors",
|
||
()=>getOverflowAncestors,
|
||
"getParentNode",
|
||
()=>getParentNode,
|
||
"getWindow",
|
||
()=>getWindow,
|
||
"isContainingBlock",
|
||
()=>isContainingBlock,
|
||
"isElement",
|
||
()=>isElement,
|
||
"isHTMLElement",
|
||
()=>isHTMLElement,
|
||
"isLastTraversableNode",
|
||
()=>isLastTraversableNode,
|
||
"isNode",
|
||
()=>isNode,
|
||
"isOverflowElement",
|
||
()=>isOverflowElement,
|
||
"isShadowRoot",
|
||
()=>isShadowRoot,
|
||
"isTableElement",
|
||
()=>isTableElement,
|
||
"isTopLayer",
|
||
()=>isTopLayer,
|
||
"isWebKit",
|
||
()=>isWebKit
|
||
]);
|
||
function hasWindow() {
|
||
return ("TURBOPACK compile-time value", "undefined") !== 'undefined';
|
||
}
|
||
function getNodeName(node) {
|
||
if (isNode(node)) {
|
||
return (node.nodeName || '').toLowerCase();
|
||
}
|
||
// Mocked nodes in testing environments may not be instances of Node. By
|
||
// returning `#document` an infinite loop won't occur.
|
||
// https://github.com/floating-ui/floating-ui/issues/2317
|
||
return '#document';
|
||
}
|
||
function getWindow(node) {
|
||
var _node$ownerDocument;
|
||
return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
|
||
}
|
||
function getDocumentElement(node) {
|
||
var _ref;
|
||
return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
|
||
}
|
||
function isNode(value) {
|
||
if (!hasWindow()) {
|
||
return false;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
}
|
||
function isElement(value) {
|
||
if (!hasWindow()) {
|
||
return false;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
}
|
||
function isHTMLElement(value) {
|
||
if (!hasWindow()) {
|
||
return false;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
}
|
||
function isShadowRoot(value) {
|
||
if (!hasWindow() || typeof ShadowRoot === 'undefined') {
|
||
return false;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
}
|
||
const invalidOverflowDisplayValues = /*#__PURE__*/ new Set([
|
||
'inline',
|
||
'contents'
|
||
]);
|
||
function isOverflowElement(element) {
|
||
const { overflow, overflowX, overflowY, display } = getComputedStyle(element);
|
||
return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
|
||
}
|
||
const tableElements = /*#__PURE__*/ new Set([
|
||
'table',
|
||
'td',
|
||
'th'
|
||
]);
|
||
function isTableElement(element) {
|
||
return tableElements.has(getNodeName(element));
|
||
}
|
||
const topLayerSelectors = [
|
||
':popover-open',
|
||
':modal'
|
||
];
|
||
function isTopLayer(element) {
|
||
return topLayerSelectors.some((selector)=>{
|
||
try {
|
||
return element.matches(selector);
|
||
} catch (_e) {
|
||
return false;
|
||
}
|
||
});
|
||
}
|
||
const transformProperties = [
|
||
'transform',
|
||
'translate',
|
||
'scale',
|
||
'rotate',
|
||
'perspective'
|
||
];
|
||
const willChangeValues = [
|
||
'transform',
|
||
'translate',
|
||
'scale',
|
||
'rotate',
|
||
'perspective',
|
||
'filter'
|
||
];
|
||
const containValues = [
|
||
'paint',
|
||
'layout',
|
||
'strict',
|
||
'content'
|
||
];
|
||
function isContainingBlock(elementOrCss) {
|
||
const webkit = isWebKit();
|
||
const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;
|
||
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
||
// https://drafts.csswg.org/css-transforms-2/#individual-transforms
|
||
return transformProperties.some((value)=>css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some((value)=>(css.willChange || '').includes(value)) || containValues.some((value)=>(css.contain || '').includes(value));
|
||
}
|
||
function getContainingBlock(element) {
|
||
let currentNode = getParentNode(element);
|
||
while(isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)){
|
||
if (isContainingBlock(currentNode)) {
|
||
return currentNode;
|
||
} else if (isTopLayer(currentNode)) {
|
||
return null;
|
||
}
|
||
currentNode = getParentNode(currentNode);
|
||
}
|
||
return null;
|
||
}
|
||
function isWebKit() {
|
||
if (typeof CSS === 'undefined' || !CSS.supports) return false;
|
||
return CSS.supports('-webkit-backdrop-filter', 'none');
|
||
}
|
||
const lastTraversableNodeNames = /*#__PURE__*/ new Set([
|
||
'html',
|
||
'body',
|
||
'#document'
|
||
]);
|
||
function isLastTraversableNode(node) {
|
||
return lastTraversableNodeNames.has(getNodeName(node));
|
||
}
|
||
function getComputedStyle(element) {
|
||
return getWindow(element).getComputedStyle(element);
|
||
}
|
||
function getNodeScroll(element) {
|
||
if (isElement(element)) {
|
||
return {
|
||
scrollLeft: element.scrollLeft,
|
||
scrollTop: element.scrollTop
|
||
};
|
||
}
|
||
return {
|
||
scrollLeft: element.scrollX,
|
||
scrollTop: element.scrollY
|
||
};
|
||
}
|
||
function getParentNode(node) {
|
||
if (getNodeName(node) === 'html') {
|
||
return node;
|
||
}
|
||
const result = // Step into the shadow DOM of the parent of a slotted node.
|
||
node.assignedSlot || // DOM Element detected.
|
||
node.parentNode || // ShadowRoot detected.
|
||
isShadowRoot(node) && node.host || // Fallback.
|
||
getDocumentElement(node);
|
||
return isShadowRoot(result) ? result.host : result;
|
||
}
|
||
function getNearestOverflowAncestor(node) {
|
||
const parentNode = getParentNode(node);
|
||
if (isLastTraversableNode(parentNode)) {
|
||
return node.ownerDocument ? node.ownerDocument.body : node.body;
|
||
}
|
||
if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
|
||
return parentNode;
|
||
}
|
||
return getNearestOverflowAncestor(parentNode);
|
||
}
|
||
function getOverflowAncestors(node, list, traverseIframes) {
|
||
var _node$ownerDocument2;
|
||
if (list === void 0) {
|
||
list = [];
|
||
}
|
||
if (traverseIframes === void 0) {
|
||
traverseIframes = true;
|
||
}
|
||
const scrollableAncestor = getNearestOverflowAncestor(node);
|
||
const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
|
||
const win = getWindow(scrollableAncestor);
|
||
if (isBody) {
|
||
const frameElement = getFrameElement(win);
|
||
return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
|
||
}
|
||
return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
|
||
}
|
||
function getFrameElement(win) {
|
||
return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
|
||
}
|
||
;
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs [app-ssr] (ecmascript) <locals>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"arrow",
|
||
()=>arrow,
|
||
"autoPlacement",
|
||
()=>autoPlacement,
|
||
"autoUpdate",
|
||
()=>autoUpdate,
|
||
"computePosition",
|
||
()=>computePosition,
|
||
"detectOverflow",
|
||
()=>detectOverflow,
|
||
"flip",
|
||
()=>flip,
|
||
"hide",
|
||
()=>hide,
|
||
"inline",
|
||
()=>inline,
|
||
"limitShift",
|
||
()=>limitShift,
|
||
"offset",
|
||
()=>offset,
|
||
"platform",
|
||
()=>platform,
|
||
"shift",
|
||
()=>shift,
|
||
"size",
|
||
()=>size
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+core@1.7.3/node_modules/@floating-ui/core/dist/floating-ui.core.mjs [app-ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
function getCssDimensions(element) {
|
||
const css = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element);
|
||
// In testing environments, the `width` and `height` properties are empty
|
||
// strings for SVG elements, returning NaN. Fallback to `0` in this case.
|
||
let width = parseFloat(css.width) || 0;
|
||
let height = parseFloat(css.height) || 0;
|
||
const hasOffset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element);
|
||
const offsetWidth = hasOffset ? element.offsetWidth : width;
|
||
const offsetHeight = hasOffset ? element.offsetHeight : height;
|
||
const shouldFallback = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(width) !== offsetWidth || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(height) !== offsetHeight;
|
||
if (shouldFallback) {
|
||
width = offsetWidth;
|
||
height = offsetHeight;
|
||
}
|
||
return {
|
||
width,
|
||
height,
|
||
$: shouldFallback
|
||
};
|
||
}
|
||
function unwrapElement(element) {
|
||
return !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(element) ? element.contextElement : element;
|
||
}
|
||
function getScale(element) {
|
||
const domElement = unwrapElement(element);
|
||
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(domElement)) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1);
|
||
}
|
||
const rect = domElement.getBoundingClientRect();
|
||
const { width, height, $ } = getCssDimensions(domElement);
|
||
let x = ($ ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(rect.width) : rect.width) / width;
|
||
let y = ($ ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["round"])(rect.height) : rect.height) / height;
|
||
// 0, NaN, or Infinity should always fallback to 1.
|
||
if (!x || !Number.isFinite(x)) {
|
||
x = 1;
|
||
}
|
||
if (!y || !Number.isFinite(y)) {
|
||
y = 1;
|
||
}
|
||
return {
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
const noOffsets = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0);
|
||
function getVisualOffsets(element) {
|
||
const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element);
|
||
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isWebKit"])() || !win.visualViewport) {
|
||
return noOffsets;
|
||
}
|
||
return {
|
||
x: win.visualViewport.offsetLeft,
|
||
y: win.visualViewport.offsetTop
|
||
};
|
||
}
|
||
function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
|
||
if (isFixed === void 0) {
|
||
isFixed = false;
|
||
}
|
||
if (!floatingOffsetParent || isFixed && floatingOffsetParent !== (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element)) {
|
||
return false;
|
||
}
|
||
return isFixed;
|
||
}
|
||
function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
|
||
if (includeScale === void 0) {
|
||
includeScale = false;
|
||
}
|
||
if (isFixedStrategy === void 0) {
|
||
isFixedStrategy = false;
|
||
}
|
||
const clientRect = element.getBoundingClientRect();
|
||
const domElement = unwrapElement(element);
|
||
let scale = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1);
|
||
if (includeScale) {
|
||
if (offsetParent) {
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(offsetParent)) {
|
||
scale = getScale(offsetParent);
|
||
}
|
||
} else {
|
||
scale = getScale(element);
|
||
}
|
||
}
|
||
const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0);
|
||
let x = (clientRect.left + visualOffsets.x) / scale.x;
|
||
let y = (clientRect.top + visualOffsets.y) / scale.y;
|
||
let width = clientRect.width / scale.x;
|
||
let height = clientRect.height / scale.y;
|
||
if (domElement) {
|
||
const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(domElement);
|
||
const offsetWin = offsetParent && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(offsetParent) ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(offsetParent) : offsetParent;
|
||
let currentWin = win;
|
||
let currentIFrame = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getFrameElement"])(currentWin);
|
||
while(currentIFrame && offsetParent && offsetWin !== currentWin){
|
||
const iframeScale = getScale(currentIFrame);
|
||
const iframeRect = currentIFrame.getBoundingClientRect();
|
||
const css = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(currentIFrame);
|
||
const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
|
||
const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
|
||
x *= iframeScale.x;
|
||
y *= iframeScale.y;
|
||
width *= iframeScale.x;
|
||
height *= iframeScale.y;
|
||
x += left;
|
||
y += top;
|
||
currentWin = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(currentIFrame);
|
||
currentIFrame = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getFrameElement"])(currentWin);
|
||
}
|
||
}
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])({
|
||
width,
|
||
height,
|
||
x,
|
||
y
|
||
});
|
||
}
|
||
// If <html> has a CSS width greater than the viewport, then this will be
|
||
// incorrect for RTL.
|
||
function getWindowScrollBarX(element, rect) {
|
||
const leftScroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(element).scrollLeft;
|
||
if (!rect) {
|
||
return getBoundingClientRect((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element)).left + leftScroll;
|
||
}
|
||
return rect.left + leftScroll;
|
||
}
|
||
function getHTMLOffset(documentElement, scroll) {
|
||
const htmlRect = documentElement.getBoundingClientRect();
|
||
const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
|
||
const y = htmlRect.top + scroll.scrollTop;
|
||
return {
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
|
||
let { elements, rect, offsetParent, strategy } = _ref;
|
||
const isFixed = strategy === 'fixed';
|
||
const documentElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(offsetParent);
|
||
const topLayer = elements ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTopLayer"])(elements.floating) : false;
|
||
if (offsetParent === documentElement || topLayer && isFixed) {
|
||
return rect;
|
||
}
|
||
let scroll = {
|
||
scrollLeft: 0,
|
||
scrollTop: 0
|
||
};
|
||
let scale = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1);
|
||
const offsets = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0);
|
||
const isOffsetParentAnElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(offsetParent);
|
||
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeName"])(offsetParent) !== 'body' || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isOverflowElement"])(documentElement)) {
|
||
scroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(offsetParent);
|
||
}
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(offsetParent)) {
|
||
const offsetRect = getBoundingClientRect(offsetParent);
|
||
scale = getScale(offsetParent);
|
||
offsets.x = offsetRect.x + offsetParent.clientLeft;
|
||
offsets.y = offsetRect.y + offsetParent.clientTop;
|
||
}
|
||
}
|
||
const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0);
|
||
return {
|
||
width: rect.width * scale.x,
|
||
height: rect.height * scale.y,
|
||
x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
|
||
y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
|
||
};
|
||
}
|
||
function getClientRects(element) {
|
||
return Array.from(element.getClientRects());
|
||
}
|
||
// Gets the entire size of the scrollable document area, even extending outside
|
||
// of the `<html>` and `<body>` rect bounds if horizontally scrollable.
|
||
function getDocumentRect(element) {
|
||
const html = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element);
|
||
const scroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(element);
|
||
const body = element.ownerDocument.body;
|
||
const width = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
|
||
const height = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
|
||
let x = -scroll.scrollLeft + getWindowScrollBarX(element);
|
||
const y = -scroll.scrollTop;
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(body).direction === 'rtl') {
|
||
x += (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(html.clientWidth, body.clientWidth) - width;
|
||
}
|
||
return {
|
||
width,
|
||
height,
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
// Safety check: ensure the scrollbar space is reasonable in case this
|
||
// calculation is affected by unusual styles.
|
||
// Most scrollbars leave 15-18px of space.
|
||
const SCROLLBAR_MAX = 25;
|
||
function getViewportRect(element, strategy) {
|
||
const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element);
|
||
const html = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element);
|
||
const visualViewport = win.visualViewport;
|
||
let width = html.clientWidth;
|
||
let height = html.clientHeight;
|
||
let x = 0;
|
||
let y = 0;
|
||
if (visualViewport) {
|
||
width = visualViewport.width;
|
||
height = visualViewport.height;
|
||
const visualViewportBased = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isWebKit"])();
|
||
if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {
|
||
x = visualViewport.offsetLeft;
|
||
y = visualViewport.offsetTop;
|
||
}
|
||
}
|
||
const windowScrollbarX = getWindowScrollBarX(html);
|
||
// <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
|
||
// visual width of the <html> but this is not considered in the size
|
||
// of `html.clientWidth`.
|
||
if (windowScrollbarX <= 0) {
|
||
const doc = html.ownerDocument;
|
||
const body = doc.body;
|
||
const bodyStyles = getComputedStyle(body);
|
||
const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
|
||
const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
|
||
if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
|
||
width -= clippingStableScrollbarWidth;
|
||
}
|
||
} else if (windowScrollbarX <= SCROLLBAR_MAX) {
|
||
// If the <body> scrollbar is on the left, the width needs to be extended
|
||
// by the scrollbar amount so there isn't extra space on the right.
|
||
width += windowScrollbarX;
|
||
}
|
||
return {
|
||
width,
|
||
height,
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
const absoluteOrFixed = /*#__PURE__*/ new Set([
|
||
'absolute',
|
||
'fixed'
|
||
]);
|
||
// Returns the inner client rect, subtracting scrollbars if present.
|
||
function getInnerBoundingClientRect(element, strategy) {
|
||
const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
|
||
const top = clientRect.top + element.clientTop;
|
||
const left = clientRect.left + element.clientLeft;
|
||
const scale = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element) ? getScale(element) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(1);
|
||
const width = element.clientWidth * scale.x;
|
||
const height = element.clientHeight * scale.y;
|
||
const x = left * scale.x;
|
||
const y = top * scale.y;
|
||
return {
|
||
width,
|
||
height,
|
||
x,
|
||
y
|
||
};
|
||
}
|
||
function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
|
||
let rect;
|
||
if (clippingAncestor === 'viewport') {
|
||
rect = getViewportRect(element, strategy);
|
||
} else if (clippingAncestor === 'document') {
|
||
rect = getDocumentRect((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element));
|
||
} else if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(clippingAncestor)) {
|
||
rect = getInnerBoundingClientRect(clippingAncestor, strategy);
|
||
} else {
|
||
const visualOffsets = getVisualOffsets(element);
|
||
rect = {
|
||
x: clippingAncestor.x - visualOffsets.x,
|
||
y: clippingAncestor.y - visualOffsets.y,
|
||
width: clippingAncestor.width,
|
||
height: clippingAncestor.height
|
||
};
|
||
}
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["rectToClientRect"])(rect);
|
||
}
|
||
function hasFixedPositionAncestor(element, stopNode) {
|
||
const parentNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(element);
|
||
if (parentNode === stopNode || !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(parentNode) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(parentNode)) {
|
||
return false;
|
||
}
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
|
||
}
|
||
// A "clipping ancestor" is an `overflow` element with the characteristic of
|
||
// clipping (or hiding) child elements. This returns all clipping ancestors
|
||
// of the given element up the tree.
|
||
function getClippingElementAncestors(element, cache) {
|
||
const cachedResult = cache.get(element);
|
||
if (cachedResult) {
|
||
return cachedResult;
|
||
}
|
||
let result = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOverflowAncestors"])(element, [], false).filter((el)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(el) && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeName"])(el) !== 'body');
|
||
let currentContainingBlockComputedStyle = null;
|
||
const elementIsFixed = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).position === 'fixed';
|
||
let currentNode = elementIsFixed ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(element) : element;
|
||
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
||
while((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(currentNode) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(currentNode)){
|
||
const computedStyle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(currentNode);
|
||
const currentNodeIsContaining = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isContainingBlock"])(currentNode);
|
||
if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
|
||
currentContainingBlockComputedStyle = null;
|
||
}
|
||
const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isOverflowElement"])(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
|
||
if (shouldDropCurrentNode) {
|
||
// Drop non-containing blocks.
|
||
result = result.filter((ancestor)=>ancestor !== currentNode);
|
||
} else {
|
||
// Record last containing block for next iteration.
|
||
currentContainingBlockComputedStyle = computedStyle;
|
||
}
|
||
currentNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(currentNode);
|
||
}
|
||
cache.set(element, result);
|
||
return result;
|
||
}
|
||
// Gets the maximum area that the element is visible in due to any number of
|
||
// clipping ancestors.
|
||
function getClippingRect(_ref) {
|
||
let { element, boundary, rootBoundary, strategy } = _ref;
|
||
const elementClippingAncestors = boundary === 'clippingAncestors' ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTopLayer"])(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
|
||
const clippingAncestors = [
|
||
...elementClippingAncestors,
|
||
rootBoundary
|
||
];
|
||
const firstClippingAncestor = clippingAncestors[0];
|
||
const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor)=>{
|
||
const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
|
||
accRect.top = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(rect.top, accRect.top);
|
||
accRect.right = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(rect.right, accRect.right);
|
||
accRect.bottom = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(rect.bottom, accRect.bottom);
|
||
accRect.left = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(rect.left, accRect.left);
|
||
return accRect;
|
||
}, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
|
||
return {
|
||
width: clippingRect.right - clippingRect.left,
|
||
height: clippingRect.bottom - clippingRect.top,
|
||
x: clippingRect.left,
|
||
y: clippingRect.top
|
||
};
|
||
}
|
||
function getDimensions(element) {
|
||
const { width, height } = getCssDimensions(element);
|
||
return {
|
||
width,
|
||
height
|
||
};
|
||
}
|
||
function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
|
||
const isOffsetParentAnElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(offsetParent);
|
||
const documentElement = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(offsetParent);
|
||
const isFixed = strategy === 'fixed';
|
||
const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
|
||
let scroll = {
|
||
scrollLeft: 0,
|
||
scrollTop: 0
|
||
};
|
||
const offsets = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0);
|
||
// If the <body> scrollbar appears on the left (e.g. RTL systems). Use
|
||
// Firefox with layout.scrollbar.side = 3 in about:config to test this.
|
||
function setLeftRTLScrollbarOffset() {
|
||
offsets.x = getWindowScrollBarX(documentElement);
|
||
}
|
||
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeName"])(offsetParent) !== 'body' || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isOverflowElement"])(documentElement)) {
|
||
scroll = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getNodeScroll"])(offsetParent);
|
||
}
|
||
if (isOffsetParentAnElement) {
|
||
const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
|
||
offsets.x = offsetRect.x + offsetParent.clientLeft;
|
||
offsets.y = offsetRect.y + offsetParent.clientTop;
|
||
} else if (documentElement) {
|
||
setLeftRTLScrollbarOffset();
|
||
}
|
||
}
|
||
if (isFixed && !isOffsetParentAnElement && documentElement) {
|
||
setLeftRTLScrollbarOffset();
|
||
}
|
||
const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCoords"])(0);
|
||
const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
|
||
const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
|
||
return {
|
||
x,
|
||
y,
|
||
width: rect.width,
|
||
height: rect.height
|
||
};
|
||
}
|
||
function isStaticPositioned(element) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).position === 'static';
|
||
}
|
||
function getTrueOffsetParent(element, polyfill) {
|
||
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).position === 'fixed') {
|
||
return null;
|
||
}
|
||
if (polyfill) {
|
||
return polyfill(element);
|
||
}
|
||
let rawOffsetParent = element.offsetParent;
|
||
// Firefox returns the <html> element as the offsetParent if it's non-static,
|
||
// while Chrome and Safari return the <body> element. The <body> element must
|
||
// be used to perform the correct calculations even if the <html> element is
|
||
// non-static.
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element) === rawOffsetParent) {
|
||
rawOffsetParent = rawOffsetParent.ownerDocument.body;
|
||
}
|
||
return rawOffsetParent;
|
||
}
|
||
// Gets the closest ancestor positioned element. Handles some edge cases,
|
||
// such as table ancestors and cross browser bugs.
|
||
function getOffsetParent(element, polyfill) {
|
||
const win = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getWindow"])(element);
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTopLayer"])(element)) {
|
||
return win;
|
||
}
|
||
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isHTMLElement"])(element)) {
|
||
let svgOffsetParent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(element);
|
||
while(svgOffsetParent && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(svgOffsetParent)){
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"])(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
|
||
return svgOffsetParent;
|
||
}
|
||
svgOffsetParent = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getParentNode"])(svgOffsetParent);
|
||
}
|
||
return win;
|
||
}
|
||
let offsetParent = getTrueOffsetParent(element, polyfill);
|
||
while(offsetParent && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isTableElement"])(offsetParent) && isStaticPositioned(offsetParent)){
|
||
offsetParent = getTrueOffsetParent(offsetParent, polyfill);
|
||
}
|
||
if (offsetParent && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isLastTraversableNode"])(offsetParent) && isStaticPositioned(offsetParent) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isContainingBlock"])(offsetParent)) {
|
||
return win;
|
||
}
|
||
return offsetParent || (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getContainingBlock"])(element) || win;
|
||
}
|
||
const getElementRects = async function(data) {
|
||
const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
|
||
const getDimensionsFn = this.getDimensions;
|
||
const floatingDimensions = await getDimensionsFn(data.floating);
|
||
return {
|
||
reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
|
||
floating: {
|
||
x: 0,
|
||
y: 0,
|
||
width: floatingDimensions.width,
|
||
height: floatingDimensions.height
|
||
}
|
||
};
|
||
};
|
||
function isRTL(element) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getComputedStyle"])(element).direction === 'rtl';
|
||
}
|
||
const platform = {
|
||
convertOffsetParentRelativeRectToViewportRelativeRect,
|
||
getDocumentElement: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"],
|
||
getClippingRect,
|
||
getOffsetParent,
|
||
getElementRects,
|
||
getClientRects,
|
||
getDimensions,
|
||
getScale,
|
||
isElement: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["isElement"],
|
||
isRTL
|
||
};
|
||
function rectsAreEqual(a, b) {
|
||
return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
|
||
}
|
||
// https://samthor.au/2021/observing-dom/
|
||
function observeMove(element, onMove) {
|
||
let io = null;
|
||
let timeoutId;
|
||
const root = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getDocumentElement"])(element);
|
||
function cleanup() {
|
||
var _io;
|
||
clearTimeout(timeoutId);
|
||
(_io = io) == null || _io.disconnect();
|
||
io = null;
|
||
}
|
||
function refresh(skip, threshold) {
|
||
if (skip === void 0) {
|
||
skip = false;
|
||
}
|
||
if (threshold === void 0) {
|
||
threshold = 1;
|
||
}
|
||
cleanup();
|
||
const elementRectForRootMargin = element.getBoundingClientRect();
|
||
const { left, top, width, height } = elementRectForRootMargin;
|
||
if (!skip) {
|
||
onMove();
|
||
}
|
||
if (!width || !height) {
|
||
return;
|
||
}
|
||
const insetTop = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(top);
|
||
const insetRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(root.clientWidth - (left + width));
|
||
const insetBottom = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(root.clientHeight - (top + height));
|
||
const insetLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["floor"])(left);
|
||
const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
|
||
const options = {
|
||
rootMargin,
|
||
threshold: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["max"])(0, (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["min"])(1, threshold)) || 1
|
||
};
|
||
let isFirstUpdate = true;
|
||
function handleObserve(entries) {
|
||
const ratio = entries[0].intersectionRatio;
|
||
if (ratio !== threshold) {
|
||
if (!isFirstUpdate) {
|
||
return refresh();
|
||
}
|
||
if (!ratio) {
|
||
// If the reference is clipped, the ratio is 0. Throttle the refresh
|
||
// to prevent an infinite loop of updates.
|
||
timeoutId = setTimeout(()=>{
|
||
refresh(false, 1e-7);
|
||
}, 1000);
|
||
} else {
|
||
refresh(false, ratio);
|
||
}
|
||
}
|
||
if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
|
||
// It's possible that even though the ratio is reported as 1, the
|
||
// element is not actually fully within the IntersectionObserver's root
|
||
// area anymore. This can happen under performance constraints. This may
|
||
// be a bug in the browser's IntersectionObserver implementation. To
|
||
// work around this, we compare the element's bounding rect now with
|
||
// what it was at the time we created the IntersectionObserver. If they
|
||
// are not equal then the element moved, so we refresh.
|
||
refresh();
|
||
}
|
||
isFirstUpdate = false;
|
||
}
|
||
// Older browsers don't support a `document` as the root and will throw an
|
||
// error.
|
||
try {
|
||
io = new IntersectionObserver(handleObserve, {
|
||
...options,
|
||
// Handle <iframe>s
|
||
root: root.ownerDocument
|
||
});
|
||
} catch (_e) {
|
||
io = new IntersectionObserver(handleObserve, options);
|
||
}
|
||
io.observe(element);
|
||
}
|
||
refresh(true);
|
||
return cleanup;
|
||
}
|
||
/**
|
||
* Automatically updates the position of the floating element when necessary.
|
||
* Should only be called when the floating element is mounted on the DOM or
|
||
* visible on the screen.
|
||
* @returns cleanup function that should be invoked when the floating element is
|
||
* removed from the DOM or hidden from the screen.
|
||
* @see https://floating-ui.com/docs/autoUpdate
|
||
*/ function autoUpdate(reference, floating, update, options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
const { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === 'function', layoutShift = typeof IntersectionObserver === 'function', animationFrame = false } = options;
|
||
const referenceEl = unwrapElement(reference);
|
||
const ancestors = ancestorScroll || ancestorResize ? [
|
||
...referenceEl ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOverflowAncestors"])(referenceEl) : [],
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$utils$40$0$2e$2$2e$10$2f$node_modules$2f40$floating$2d$ui$2f$utils$2f$dist$2f$floating$2d$ui$2e$utils$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["getOverflowAncestors"])(floating)
|
||
] : [];
|
||
ancestors.forEach((ancestor)=>{
|
||
ancestorScroll && ancestor.addEventListener('scroll', update, {
|
||
passive: true
|
||
});
|
||
ancestorResize && ancestor.addEventListener('resize', update);
|
||
});
|
||
const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
|
||
let reobserveFrame = -1;
|
||
let resizeObserver = null;
|
||
if (elementResize) {
|
||
resizeObserver = new ResizeObserver((_ref)=>{
|
||
let [firstEntry] = _ref;
|
||
if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {
|
||
// Prevent update loops when using the `size` middleware.
|
||
// https://github.com/floating-ui/floating-ui/issues/1740
|
||
resizeObserver.unobserve(floating);
|
||
cancelAnimationFrame(reobserveFrame);
|
||
reobserveFrame = requestAnimationFrame(()=>{
|
||
var _resizeObserver;
|
||
(_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
|
||
});
|
||
}
|
||
update();
|
||
});
|
||
if (referenceEl && !animationFrame) {
|
||
resizeObserver.observe(referenceEl);
|
||
}
|
||
resizeObserver.observe(floating);
|
||
}
|
||
let frameId;
|
||
let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
|
||
if (animationFrame) {
|
||
frameLoop();
|
||
}
|
||
function frameLoop() {
|
||
const nextRefRect = getBoundingClientRect(reference);
|
||
if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
|
||
update();
|
||
}
|
||
prevRefRect = nextRefRect;
|
||
frameId = requestAnimationFrame(frameLoop);
|
||
}
|
||
update();
|
||
return ()=>{
|
||
var _resizeObserver2;
|
||
ancestors.forEach((ancestor)=>{
|
||
ancestorScroll && ancestor.removeEventListener('scroll', update);
|
||
ancestorResize && ancestor.removeEventListener('resize', update);
|
||
});
|
||
cleanupIo == null || cleanupIo();
|
||
(_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
|
||
resizeObserver = null;
|
||
if (animationFrame) {
|
||
cancelAnimationFrame(frameId);
|
||
}
|
||
};
|
||
}
|
||
/**
|
||
* Resolves with an object of overflow side offsets that determine how much the
|
||
* element is overflowing a given clipping boundary on each side.
|
||
* - positive = overflowing the boundary by that number of pixels
|
||
* - negative = how many pixels left before it will overflow
|
||
* - 0 = lies flush with the boundary
|
||
* @see https://floating-ui.com/docs/detectOverflow
|
||
*/ const detectOverflow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["detectOverflow"];
|
||
/**
|
||
* Modifies the placement by translating the floating element along the
|
||
* specified axes.
|
||
* A number (shorthand for `mainAxis` or distance), or an axes configuration
|
||
* object may be passed.
|
||
* @see https://floating-ui.com/docs/offset
|
||
*/ const offset = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["offset"];
|
||
/**
|
||
* Optimizes the visibility of the floating element by choosing the placement
|
||
* that has the most space available automatically, without needing to specify a
|
||
* preferred placement. Alternative to `flip`.
|
||
* @see https://floating-ui.com/docs/autoPlacement
|
||
*/ const autoPlacement = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["autoPlacement"];
|
||
/**
|
||
* Optimizes the visibility of the floating element by shifting it in order to
|
||
* keep it in view when it will overflow the clipping boundary.
|
||
* @see https://floating-ui.com/docs/shift
|
||
*/ const shift = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["shift"];
|
||
/**
|
||
* Optimizes the visibility of the floating element by flipping the `placement`
|
||
* in order to keep it in view when the preferred placement(s) will overflow the
|
||
* clipping boundary. Alternative to `autoPlacement`.
|
||
* @see https://floating-ui.com/docs/flip
|
||
*/ const flip = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["flip"];
|
||
/**
|
||
* Provides data that allows you to change the size of the floating element —
|
||
* for instance, prevent it from overflowing the clipping boundary or match the
|
||
* width of the reference element.
|
||
* @see https://floating-ui.com/docs/size
|
||
*/ const size = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["size"];
|
||
/**
|
||
* Provides data to hide the floating element in applicable situations, such as
|
||
* when it is not in the same clipping context as the reference element.
|
||
* @see https://floating-ui.com/docs/hide
|
||
*/ const hide = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["hide"];
|
||
/**
|
||
* Provides data to position an inner element of the floating element so that it
|
||
* appears centered to the reference element.
|
||
* @see https://floating-ui.com/docs/arrow
|
||
*/ const arrow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["arrow"];
|
||
/**
|
||
* Provides improved positioning for inline reference elements that can span
|
||
* over multiple lines, such as hyperlinks or range selections.
|
||
* @see https://floating-ui.com/docs/inline
|
||
*/ const inline = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["inline"];
|
||
/**
|
||
* Built-in `limiter` that will stop `shift()` at a certain point.
|
||
*/ const limitShift = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["limitShift"];
|
||
/**
|
||
* Computes the `x` and `y` coordinates that will place the floating element
|
||
* next to a given reference element.
|
||
*/ const computePosition = (reference, floating, options)=>{
|
||
// This caches the expensive `getClippingElementAncestors` function so that
|
||
// multiple lifecycle resets re-use the same result. It only lives for a
|
||
// single call. If other functions become expensive, we can add them as well.
|
||
const cache = new Map();
|
||
const mergedOptions = {
|
||
platform,
|
||
...options
|
||
};
|
||
const platformWithCache = {
|
||
...mergedOptions.platform,
|
||
_c: cache
|
||
};
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$core$40$1$2e$7$2e$3$2f$node_modules$2f40$floating$2d$ui$2f$core$2f$dist$2f$floating$2d$ui$2e$core$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["computePosition"])(reference, floating, {
|
||
...mergedOptions,
|
||
platform: platformWithCache
|
||
});
|
||
};
|
||
;
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+react-dom@2.1.6_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs [app-ssr] (ecmascript) <locals>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"arrow",
|
||
()=>arrow,
|
||
"autoPlacement",
|
||
()=>autoPlacement,
|
||
"flip",
|
||
()=>flip,
|
||
"hide",
|
||
()=>hide,
|
||
"inline",
|
||
()=>inline,
|
||
"limitShift",
|
||
()=>limitShift,
|
||
"offset",
|
||
()=>offset,
|
||
"shift",
|
||
()=>shift,
|
||
"size",
|
||
()=>size,
|
||
"useFloating",
|
||
()=>useFloating
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs [app-ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$dom$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var isClient = typeof document !== 'undefined';
|
||
var noop = function noop() {};
|
||
var index = isClient ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"] : noop;
|
||
// Fork of `fast-deep-equal` that only does the comparisons we need and compares
|
||
// functions
|
||
function deepEqual(a, b) {
|
||
if (a === b) {
|
||
return true;
|
||
}
|
||
if (typeof a !== typeof b) {
|
||
return false;
|
||
}
|
||
if (typeof a === 'function' && a.toString() === b.toString()) {
|
||
return true;
|
||
}
|
||
let length;
|
||
let i;
|
||
let keys;
|
||
if (a && b && typeof a === 'object') {
|
||
if (Array.isArray(a)) {
|
||
length = a.length;
|
||
if (length !== b.length) return false;
|
||
for(i = length; i-- !== 0;){
|
||
if (!deepEqual(a[i], b[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
keys = Object.keys(a);
|
||
length = keys.length;
|
||
if (length !== Object.keys(b).length) {
|
||
return false;
|
||
}
|
||
for(i = length; i-- !== 0;){
|
||
if (!({}).hasOwnProperty.call(b, keys[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
for(i = length; i-- !== 0;){
|
||
const key = keys[i];
|
||
if (key === '_owner' && a.$$typeof) {
|
||
continue;
|
||
}
|
||
if (!deepEqual(a[key], b[key])) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
return a !== a && b !== b;
|
||
}
|
||
function getDPR(element) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
return 1;
|
||
}
|
||
//TURBOPACK unreachable
|
||
;
|
||
const win = undefined;
|
||
}
|
||
function roundByDPR(element, value) {
|
||
const dpr = getDPR(element);
|
||
return Math.round(value * dpr) / dpr;
|
||
}
|
||
function useLatestRef(value) {
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](value);
|
||
index(()=>{
|
||
ref.current = value;
|
||
});
|
||
return ref;
|
||
}
|
||
/**
|
||
* Provides data to position a floating element.
|
||
* @see https://floating-ui.com/docs/useFloating
|
||
*/ function useFloating(options) {
|
||
if (options === void 0) {
|
||
options = {};
|
||
}
|
||
const { placement = 'bottom', strategy = 'absolute', middleware = [], platform, elements: { reference: externalReference, floating: externalFloating } = {}, transform = true, whileElementsMounted, open } = options;
|
||
const [data, setData] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]({
|
||
x: 0,
|
||
y: 0,
|
||
strategy,
|
||
placement,
|
||
middlewareData: {},
|
||
isPositioned: false
|
||
});
|
||
const [latestMiddleware, setLatestMiddleware] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](middleware);
|
||
if (!deepEqual(latestMiddleware, middleware)) {
|
||
setLatestMiddleware(middleware);
|
||
}
|
||
const [_reference, _setReference] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [_floating, _setFloating] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const setReference = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((node)=>{
|
||
if (node !== referenceRef.current) {
|
||
referenceRef.current = node;
|
||
_setReference(node);
|
||
}
|
||
}, []);
|
||
const setFloating = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((node)=>{
|
||
if (node !== floatingRef.current) {
|
||
floatingRef.current = node;
|
||
_setFloating(node);
|
||
}
|
||
}, []);
|
||
const referenceEl = externalReference || _reference;
|
||
const floatingEl = externalFloating || _floating;
|
||
const referenceRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const floatingRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const dataRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](data);
|
||
const hasWhileElementsMounted = whileElementsMounted != null;
|
||
const whileElementsMountedRef = useLatestRef(whileElementsMounted);
|
||
const platformRef = useLatestRef(platform);
|
||
const openRef = useLatestRef(open);
|
||
const update = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>{
|
||
if (!referenceRef.current || !floatingRef.current) {
|
||
return;
|
||
}
|
||
const config = {
|
||
placement,
|
||
strategy,
|
||
middleware: latestMiddleware
|
||
};
|
||
if (platformRef.current) {
|
||
config.platform = platformRef.current;
|
||
}
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["computePosition"])(referenceRef.current, floatingRef.current, config).then((data)=>{
|
||
const fullData = {
|
||
...data,
|
||
// The floating element's position may be recomputed while it's closed
|
||
// but still mounted (such as when transitioning out). To ensure
|
||
// `isPositioned` will be `false` initially on the next open, avoid
|
||
// setting it to `true` when `open === false` (must be specified).
|
||
isPositioned: openRef.current !== false
|
||
};
|
||
if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
|
||
dataRef.current = fullData;
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$dom$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["flushSync"](()=>{
|
||
setData(fullData);
|
||
});
|
||
}
|
||
});
|
||
}, [
|
||
latestMiddleware,
|
||
placement,
|
||
strategy,
|
||
platformRef,
|
||
openRef
|
||
]);
|
||
index(()=>{
|
||
if (open === false && dataRef.current.isPositioned) {
|
||
dataRef.current.isPositioned = false;
|
||
setData((data)=>({
|
||
...data,
|
||
isPositioned: false
|
||
}));
|
||
}
|
||
}, [
|
||
open
|
||
]);
|
||
const isMountedRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
index(()=>{
|
||
isMountedRef.current = true;
|
||
return ()=>{
|
||
isMountedRef.current = false;
|
||
};
|
||
}, []);
|
||
index(()=>{
|
||
if (referenceEl) referenceRef.current = referenceEl;
|
||
if (floatingEl) floatingRef.current = floatingEl;
|
||
if (referenceEl && floatingEl) {
|
||
if (whileElementsMountedRef.current) {
|
||
return whileElementsMountedRef.current(referenceEl, floatingEl, update);
|
||
}
|
||
update();
|
||
}
|
||
}, [
|
||
referenceEl,
|
||
floatingEl,
|
||
update,
|
||
whileElementsMountedRef,
|
||
hasWhileElementsMounted
|
||
]);
|
||
const refs = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"](()=>({
|
||
reference: referenceRef,
|
||
floating: floatingRef,
|
||
setReference,
|
||
setFloating
|
||
}), [
|
||
setReference,
|
||
setFloating
|
||
]);
|
||
const elements = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"](()=>({
|
||
reference: referenceEl,
|
||
floating: floatingEl
|
||
}), [
|
||
referenceEl,
|
||
floatingEl
|
||
]);
|
||
const floatingStyles = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"](()=>{
|
||
const initialStyles = {
|
||
position: strategy,
|
||
left: 0,
|
||
top: 0
|
||
};
|
||
if (!elements.floating) {
|
||
return initialStyles;
|
||
}
|
||
const x = roundByDPR(elements.floating, data.x);
|
||
const y = roundByDPR(elements.floating, data.y);
|
||
if (transform) {
|
||
return {
|
||
...initialStyles,
|
||
transform: "translate(" + x + "px, " + y + "px)",
|
||
...getDPR(elements.floating) >= 1.5 && {
|
||
willChange: 'transform'
|
||
}
|
||
};
|
||
}
|
||
return {
|
||
position: strategy,
|
||
left: x,
|
||
top: y
|
||
};
|
||
}, [
|
||
strategy,
|
||
transform,
|
||
elements.floating,
|
||
data.x,
|
||
data.y
|
||
]);
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"](()=>({
|
||
...data,
|
||
update,
|
||
refs,
|
||
elements,
|
||
floatingStyles
|
||
}), [
|
||
data,
|
||
update,
|
||
refs,
|
||
elements,
|
||
floatingStyles
|
||
]);
|
||
}
|
||
/**
|
||
* Provides data to position an inner element of the floating element so that it
|
||
* appears centered to the reference element.
|
||
* This wraps the core `arrow` middleware to allow React refs as the element.
|
||
* @see https://floating-ui.com/docs/arrow
|
||
*/ const arrow$1 = (options)=>{
|
||
function isRef(value) {
|
||
return ({}).hasOwnProperty.call(value, 'current');
|
||
}
|
||
return {
|
||
name: 'arrow',
|
||
options,
|
||
fn (state) {
|
||
const { element, padding } = typeof options === 'function' ? options(state) : options;
|
||
if (element && isRef(element)) {
|
||
if (element.current != null) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["arrow"])({
|
||
element: element.current,
|
||
padding
|
||
}).fn(state);
|
||
}
|
||
return {};
|
||
}
|
||
if (element) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["arrow"])({
|
||
element,
|
||
padding
|
||
}).fn(state);
|
||
}
|
||
return {};
|
||
}
|
||
};
|
||
};
|
||
/**
|
||
* Modifies the placement by translating the floating element along the
|
||
* specified axes.
|
||
* A number (shorthand for `mainAxis` or distance), or an axes configuration
|
||
* object may be passed.
|
||
* @see https://floating-ui.com/docs/offset
|
||
*/ const offset = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["offset"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Optimizes the visibility of the floating element by shifting it in order to
|
||
* keep it in view when it will overflow the clipping boundary.
|
||
* @see https://floating-ui.com/docs/shift
|
||
*/ const shift = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["shift"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Built-in `limiter` that will stop `shift()` at a certain point.
|
||
*/ const limitShift = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["limitShift"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Optimizes the visibility of the floating element by flipping the `placement`
|
||
* in order to keep it in view when the preferred placement(s) will overflow the
|
||
* clipping boundary. Alternative to `autoPlacement`.
|
||
* @see https://floating-ui.com/docs/flip
|
||
*/ const flip = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["flip"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Provides data that allows you to change the size of the floating element —
|
||
* for instance, prevent it from overflowing the clipping boundary or match the
|
||
* width of the reference element.
|
||
* @see https://floating-ui.com/docs/size
|
||
*/ const size = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["size"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Optimizes the visibility of the floating element by choosing the placement
|
||
* that has the most space available automatically, without needing to specify a
|
||
* preferred placement. Alternative to `flip`.
|
||
* @see https://floating-ui.com/docs/autoPlacement
|
||
*/ const autoPlacement = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["autoPlacement"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Provides data to hide the floating element in applicable situations, such as
|
||
* when it is not in the same clipping context as the reference element.
|
||
* @see https://floating-ui.com/docs/hide
|
||
*/ const hide = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["hide"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Provides improved positioning for inline reference elements that can span
|
||
* over multiple lines, such as hyperlinks or range selections.
|
||
* @see https://floating-ui.com/docs/inline
|
||
*/ const inline = (options, deps)=>({
|
||
...(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["inline"])(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
/**
|
||
* Provides data to position an inner element of the floating element so that it
|
||
* appears centered to the reference element.
|
||
* This wraps the core `arrow` middleware to allow React refs as the element.
|
||
* @see https://floating-ui.com/docs/arrow
|
||
*/ const arrow = (options, deps)=>({
|
||
...arrow$1(options),
|
||
options: [
|
||
options,
|
||
deps
|
||
]
|
||
});
|
||
;
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-arrow@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@1_39cf57811aaff0943ff6c638b98c5bc2/node_modules/@radix-ui/react-arrow/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/arrow/src/Arrow.tsx
|
||
__turbopack_context__.s([
|
||
"Arrow",
|
||
()=>Arrow,
|
||
"Root",
|
||
()=>Root
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
var NAME = "Arrow";
|
||
var Arrow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { children, width = 10, height = 5, ...arrowProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].svg, {
|
||
...arrowProps,
|
||
ref: forwardedRef,
|
||
width,
|
||
height,
|
||
viewBox: "0 0 30 10",
|
||
preserveAspectRatio: "none",
|
||
children: props.asChild ? children : /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("polygon", {
|
||
points: "0,0 30,0 15,10"
|
||
})
|
||
});
|
||
});
|
||
Arrow.displayName = NAME;
|
||
var Root = Arrow;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-size@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-size/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/use-size/src/useSize.tsx
|
||
__turbopack_context__.s([
|
||
"useSize",
|
||
()=>useSize
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
function useSize(element) {
|
||
const [size, setSize] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](void 0);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (element) {
|
||
setSize({
|
||
width: element.offsetWidth,
|
||
height: element.offsetHeight
|
||
});
|
||
const resizeObserver = new ResizeObserver((entries)=>{
|
||
if (!Array.isArray(entries)) {
|
||
return;
|
||
}
|
||
if (!entries.length) {
|
||
return;
|
||
}
|
||
const entry = entries[0];
|
||
let width;
|
||
let height;
|
||
if ("borderBoxSize" in entry) {
|
||
const borderSizeEntry = entry["borderBoxSize"];
|
||
const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;
|
||
width = borderSize["inlineSize"];
|
||
height = borderSize["blockSize"];
|
||
} else {
|
||
width = element.offsetWidth;
|
||
height = element.offsetHeight;
|
||
}
|
||
setSize({
|
||
width,
|
||
height
|
||
});
|
||
});
|
||
resizeObserver.observe(element, {
|
||
box: "border-box"
|
||
});
|
||
return ()=>resizeObserver.unobserve(element);
|
||
} else {
|
||
setSize(void 0);
|
||
}
|
||
}, [
|
||
element
|
||
]);
|
||
return size;
|
||
}
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-popper@1.2.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_f51937a6043c1687ec731d0ff356eddd/node_modules/@radix-ui/react-popper/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ALIGN_OPTIONS",
|
||
()=>ALIGN_OPTIONS,
|
||
"Anchor",
|
||
()=>Anchor,
|
||
"Arrow",
|
||
()=>Arrow,
|
||
"Content",
|
||
()=>Content,
|
||
"Popper",
|
||
()=>Popper,
|
||
"PopperAnchor",
|
||
()=>PopperAnchor,
|
||
"PopperArrow",
|
||
()=>PopperArrow,
|
||
"PopperContent",
|
||
()=>PopperContent,
|
||
"Root",
|
||
()=>Root2,
|
||
"SIDE_OPTIONS",
|
||
()=>SIDE_OPTIONS,
|
||
"createPopperScope",
|
||
()=>createPopperScope
|
||
]);
|
||
// packages/react/popper/src/Popper.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+react-dom@2.1.6_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs [app-ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@floating-ui+dom@1.7.4/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs [app-ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$arrow$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$1_39cf57811aaff0943ff6c638b98c5bc2$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$arrow$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-arrow@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@1_39cf57811aaff0943ff6c638b98c5bc2/node_modules/@radix-ui/react-arrow/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$size$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$size$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-size@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-size/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var SIDE_OPTIONS = [
|
||
"top",
|
||
"right",
|
||
"bottom",
|
||
"left"
|
||
];
|
||
var ALIGN_OPTIONS = [
|
||
"start",
|
||
"center",
|
||
"end"
|
||
];
|
||
var POPPER_NAME = "Popper";
|
||
var [createPopperContext, createPopperScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(POPPER_NAME);
|
||
var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);
|
||
var Popper = (props)=>{
|
||
const { __scopePopper, children } = props;
|
||
const [anchor, setAnchor] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(PopperProvider, {
|
||
scope: __scopePopper,
|
||
anchor,
|
||
onAnchorChange: setAnchor,
|
||
children
|
||
});
|
||
};
|
||
Popper.displayName = POPPER_NAME;
|
||
var ANCHOR_NAME = "PopperAnchor";
|
||
var PopperAnchor = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopePopper, virtualRef, ...anchorProps } = props;
|
||
const context = usePopperContext(ANCHOR_NAME, __scopePopper);
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
context.onAnchorChange(virtualRef?.current || ref.current);
|
||
});
|
||
return virtualRef ? null : /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
...anchorProps,
|
||
ref: composedRefs
|
||
});
|
||
});
|
||
PopperAnchor.displayName = ANCHOR_NAME;
|
||
var CONTENT_NAME = "PopperContent";
|
||
var [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);
|
||
var PopperContent = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopePopper, side = "bottom", sideOffset = 0, align = "center", alignOffset = 0, arrowPadding = 0, avoidCollisions = true, collisionBoundary = [], collisionPadding: collisionPaddingProp = 0, sticky = "partial", hideWhenDetached = false, updatePositionStrategy = "optimized", onPlaced, ...contentProps } = props;
|
||
const context = usePopperContext(CONTENT_NAME, __scopePopper);
|
||
const [content, setContent] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, (node)=>setContent(node));
|
||
const [arrow, setArrow] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const arrowSize = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$size$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$size$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useSize"])(arrow);
|
||
const arrowWidth = arrowSize?.width ?? 0;
|
||
const arrowHeight = arrowSize?.height ?? 0;
|
||
const desiredPlacement = side + (align !== "center" ? "-" + align : "");
|
||
const collisionPadding = typeof collisionPaddingProp === "number" ? collisionPaddingProp : {
|
||
top: 0,
|
||
right: 0,
|
||
bottom: 0,
|
||
left: 0,
|
||
...collisionPaddingProp
|
||
};
|
||
const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [
|
||
collisionBoundary
|
||
];
|
||
const hasExplicitBoundaries = boundary.length > 0;
|
||
const detectOverflowOptions = {
|
||
padding: collisionPadding,
|
||
boundary: boundary.filter(isNotNull),
|
||
// with `strategy: 'fixed'`, this is the only way to get it to respect boundaries
|
||
altBoundary: hasExplicitBoundaries
|
||
};
|
||
const { refs, floatingStyles, placement, isPositioned, middlewareData } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useFloating"])({
|
||
// default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues
|
||
strategy: "fixed",
|
||
placement: desiredPlacement,
|
||
whileElementsMounted: (...args)=>{
|
||
const cleanup = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$dom$40$1$2e$7$2e$4$2f$node_modules$2f40$floating$2d$ui$2f$dom$2f$dist$2f$floating$2d$ui$2e$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["autoUpdate"])(...args, {
|
||
animationFrame: updatePositionStrategy === "always"
|
||
});
|
||
return cleanup;
|
||
},
|
||
elements: {
|
||
reference: context.anchor
|
||
},
|
||
middleware: [
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["offset"])({
|
||
mainAxis: sideOffset + arrowHeight,
|
||
alignmentAxis: alignOffset
|
||
}),
|
||
avoidCollisions && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["shift"])({
|
||
mainAxis: true,
|
||
crossAxis: false,
|
||
limiter: sticky === "partial" ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["limitShift"])() : void 0,
|
||
...detectOverflowOptions
|
||
}),
|
||
avoidCollisions && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["flip"])({
|
||
...detectOverflowOptions
|
||
}),
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["size"])({
|
||
...detectOverflowOptions,
|
||
apply: ({ elements, rects, availableWidth, availableHeight })=>{
|
||
const { width: anchorWidth, height: anchorHeight } = rects.reference;
|
||
const contentStyle = elements.floating.style;
|
||
contentStyle.setProperty("--radix-popper-available-width", `${availableWidth}px`);
|
||
contentStyle.setProperty("--radix-popper-available-height", `${availableHeight}px`);
|
||
contentStyle.setProperty("--radix-popper-anchor-width", `${anchorWidth}px`);
|
||
contentStyle.setProperty("--radix-popper-anchor-height", `${anchorHeight}px`);
|
||
}
|
||
}),
|
||
arrow && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["arrow"])({
|
||
element: arrow,
|
||
padding: arrowPadding
|
||
}),
|
||
transformOrigin({
|
||
arrowWidth,
|
||
arrowHeight
|
||
}),
|
||
hideWhenDetached && (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$floating$2d$ui$2b$react$2d$dom$40$2$2e$1$2e$6_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f40$floating$2d$ui$2f$react$2d$dom$2f$dist$2f$floating$2d$ui$2e$react$2d$dom$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["hide"])({
|
||
strategy: "referenceHidden",
|
||
...detectOverflowOptions
|
||
})
|
||
]
|
||
});
|
||
const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
|
||
const handlePlaced = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])(onPlaced);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (isPositioned) {
|
||
handlePlaced?.();
|
||
}
|
||
}, [
|
||
isPositioned,
|
||
handlePlaced
|
||
]);
|
||
const arrowX = middlewareData.arrow?.x;
|
||
const arrowY = middlewareData.arrow?.y;
|
||
const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
|
||
const [contentZIndex, setContentZIndex] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]();
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
|
||
}, [
|
||
content
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("div", {
|
||
ref: refs.setFloating,
|
||
"data-radix-popper-content-wrapper": "",
|
||
style: {
|
||
...floatingStyles,
|
||
transform: isPositioned ? floatingStyles.transform : "translate(0, -200%)",
|
||
// keep off the page when measuring
|
||
minWidth: "max-content",
|
||
zIndex: contentZIndex,
|
||
["--radix-popper-transform-origin"]: [
|
||
middlewareData.transformOrigin?.x,
|
||
middlewareData.transformOrigin?.y
|
||
].join(" "),
|
||
// hide the content if using the hide middleware and should be hidden
|
||
// set visibility to hidden and disable pointer events so the UI behaves
|
||
// as if the PopperContent isn't there at all
|
||
...middlewareData.hide?.referenceHidden && {
|
||
visibility: "hidden",
|
||
pointerEvents: "none"
|
||
}
|
||
},
|
||
dir: props.dir,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(PopperContentProvider, {
|
||
scope: __scopePopper,
|
||
placedSide,
|
||
onArrowChange: setArrow,
|
||
arrowX,
|
||
arrowY,
|
||
shouldHideArrow: cannotCenterArrow,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
"data-side": placedSide,
|
||
"data-align": placedAlign,
|
||
...contentProps,
|
||
ref: composedRefs,
|
||
style: {
|
||
...contentProps.style,
|
||
// if the PopperContent hasn't been placed yet (not all measurements done)
|
||
// we prevent animations so that users's animation don't kick in too early referring wrong sides
|
||
animation: !isPositioned ? "none" : void 0
|
||
}
|
||
})
|
||
})
|
||
});
|
||
});
|
||
PopperContent.displayName = CONTENT_NAME;
|
||
var ARROW_NAME = "PopperArrow";
|
||
var OPPOSITE_SIDE = {
|
||
top: "bottom",
|
||
right: "left",
|
||
bottom: "top",
|
||
left: "right"
|
||
};
|
||
var PopperArrow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"](function PopperArrow2(props, forwardedRef) {
|
||
const { __scopePopper, ...arrowProps } = props;
|
||
const contentContext = useContentContext(ARROW_NAME, __scopePopper);
|
||
const baseSide = OPPOSITE_SIDE[contentContext.placedSide];
|
||
return(// we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)
|
||
// doesn't report size as we'd expect on SVG elements.
|
||
// it reports their bounding box which is effectively the largest path inside the SVG.
|
||
/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("span", {
|
||
ref: contentContext.onArrowChange,
|
||
style: {
|
||
position: "absolute",
|
||
left: contentContext.arrowX,
|
||
top: contentContext.arrowY,
|
||
[baseSide]: 0,
|
||
transformOrigin: {
|
||
top: "",
|
||
right: "0 0",
|
||
bottom: "center 0",
|
||
left: "100% 0"
|
||
}[contentContext.placedSide],
|
||
transform: {
|
||
top: "translateY(100%)",
|
||
right: "translateY(50%) rotate(90deg) translateX(-50%)",
|
||
bottom: `rotate(180deg)`,
|
||
left: "translateY(50%) rotate(-90deg) translateX(50%)"
|
||
}[contentContext.placedSide],
|
||
visibility: contentContext.shouldHideArrow ? "hidden" : void 0
|
||
},
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$arrow$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$1_39cf57811aaff0943ff6c638b98c5bc2$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$arrow$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], {
|
||
...arrowProps,
|
||
ref: forwardedRef,
|
||
style: {
|
||
...arrowProps.style,
|
||
// ensures the element can be measured correctly (mostly for if SVG)
|
||
display: "block"
|
||
}
|
||
})
|
||
}));
|
||
});
|
||
PopperArrow.displayName = ARROW_NAME;
|
||
function isNotNull(value) {
|
||
return value !== null;
|
||
}
|
||
var transformOrigin = (options)=>({
|
||
name: "transformOrigin",
|
||
options,
|
||
fn (data) {
|
||
const { placement, rects, middlewareData } = data;
|
||
const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
|
||
const isArrowHidden = cannotCenterArrow;
|
||
const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;
|
||
const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;
|
||
const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
|
||
const noArrowAlign = {
|
||
start: "0%",
|
||
center: "50%",
|
||
end: "100%"
|
||
}[placedAlign];
|
||
const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;
|
||
const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;
|
||
let x = "";
|
||
let y = "";
|
||
if (placedSide === "bottom") {
|
||
x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
|
||
y = `${-arrowHeight}px`;
|
||
} else if (placedSide === "top") {
|
||
x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
|
||
y = `${rects.floating.height + arrowHeight}px`;
|
||
} else if (placedSide === "right") {
|
||
x = `${-arrowHeight}px`;
|
||
y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
|
||
} else if (placedSide === "left") {
|
||
x = `${rects.floating.width + arrowHeight}px`;
|
||
y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
|
||
}
|
||
return {
|
||
data: {
|
||
x,
|
||
y
|
||
}
|
||
};
|
||
}
|
||
});
|
||
function getSideAndAlignFromPlacement(placement) {
|
||
const [side, align = "center"] = placement.split("-");
|
||
return [
|
||
side,
|
||
align
|
||
];
|
||
}
|
||
var Root2 = Popper;
|
||
var Anchor = PopperAnchor;
|
||
var Content = PopperContent;
|
||
var Arrow = PopperArrow;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+_a18e46462387af707d972c0ffe7a229b/node_modules/@radix-ui/react-roving-focus/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Item",
|
||
()=>Item,
|
||
"Root",
|
||
()=>Root,
|
||
"RovingFocusGroup",
|
||
()=>RovingFocusGroup,
|
||
"RovingFocusGroupItem",
|
||
()=>RovingFocusGroupItem,
|
||
"createRovingFocusGroupScope",
|
||
()=>createRovingFocusGroupScope
|
||
]);
|
||
// packages/react/roving-focus/src/RovingFocusGroup.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+primitive@1.1.1/node_modules/@radix-ui/primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$collection$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$re_1ad17166111274b6b451c5ad4817bfc8$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$collection$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-collection@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+re_1ad17166111274b6b451c5ad4817bfc8/node_modules/@radix-ui/react-collection/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-id@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-id/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$direction$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$direction$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-direction@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-direction/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var ENTRY_FOCUS = "rovingFocusGroup.onEntryFocus";
|
||
var EVENT_OPTIONS = {
|
||
bubbles: false,
|
||
cancelable: true
|
||
};
|
||
var GROUP_NAME = "RovingFocusGroup";
|
||
var [Collection, useCollection, createCollectionScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$collection$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$re_1ad17166111274b6b451c5ad4817bfc8$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$collection$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCollection"])(GROUP_NAME);
|
||
var [createRovingFocusGroupContext, createRovingFocusGroupScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(GROUP_NAME, [
|
||
createCollectionScope
|
||
]);
|
||
var [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);
|
||
var RovingFocusGroup = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Provider, {
|
||
scope: props.__scopeRovingFocusGroup,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Slot, {
|
||
scope: props.__scopeRovingFocusGroup,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(RovingFocusGroupImpl, {
|
||
...props,
|
||
ref: forwardedRef
|
||
})
|
||
})
|
||
});
|
||
});
|
||
RovingFocusGroup.displayName = GROUP_NAME;
|
||
var RovingFocusGroupImpl = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeRovingFocusGroup, orientation, loop = false, dir, currentTabStopId: currentTabStopIdProp, defaultCurrentTabStopId, onCurrentTabStopIdChange, onEntryFocus, preventScrollOnEntryFocus = false, ...groupProps } = props;
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
const direction = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$direction$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$direction$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDirection"])(dir);
|
||
const [currentTabStopId = null, setCurrentTabStopId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useControllableState"])({
|
||
prop: currentTabStopIdProp,
|
||
defaultProp: defaultCurrentTabStopId,
|
||
onChange: onCurrentTabStopIdChange
|
||
});
|
||
const [isTabbingBackOut, setIsTabbingBackOut] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const handleEntryFocus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])(onEntryFocus);
|
||
const getItems = useCollection(__scopeRovingFocusGroup);
|
||
const isClickFocusRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
const [focusableItemsCount, setFocusableItemsCount] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](0);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const node = ref.current;
|
||
if (node) {
|
||
node.addEventListener(ENTRY_FOCUS, handleEntryFocus);
|
||
return ()=>node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);
|
||
}
|
||
}, [
|
||
handleEntryFocus
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(RovingFocusProvider, {
|
||
scope: __scopeRovingFocusGroup,
|
||
orientation,
|
||
dir: direction,
|
||
loop,
|
||
currentTabStopId,
|
||
onItemFocus: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((tabStopId)=>setCurrentTabStopId(tabStopId), [
|
||
setCurrentTabStopId
|
||
]),
|
||
onItemShiftTab: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>setIsTabbingBackOut(true), []),
|
||
onFocusableItemAdd: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>setFocusableItemsCount((prevCount)=>prevCount + 1), []),
|
||
onFocusableItemRemove: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>setFocusableItemsCount((prevCount)=>prevCount - 1), []),
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,
|
||
"data-orientation": orientation,
|
||
...groupProps,
|
||
ref: composedRefs,
|
||
style: {
|
||
outline: "none",
|
||
...props.style
|
||
},
|
||
onMouseDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onMouseDown, ()=>{
|
||
isClickFocusRef.current = true;
|
||
}),
|
||
onFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onFocus, (event)=>{
|
||
const isKeyboardFocus = !isClickFocusRef.current;
|
||
if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {
|
||
const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);
|
||
event.currentTarget.dispatchEvent(entryFocusEvent);
|
||
if (!entryFocusEvent.defaultPrevented) {
|
||
const items = getItems().filter((item)=>item.focusable);
|
||
const activeItem = items.find((item)=>item.active);
|
||
const currentItem = items.find((item)=>item.id === currentTabStopId);
|
||
const candidateItems = [
|
||
activeItem,
|
||
currentItem,
|
||
...items
|
||
].filter(Boolean);
|
||
const candidateNodes = candidateItems.map((item)=>item.ref.current);
|
||
focusFirst(candidateNodes, preventScrollOnEntryFocus);
|
||
}
|
||
}
|
||
isClickFocusRef.current = false;
|
||
}),
|
||
onBlur: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onBlur, ()=>setIsTabbingBackOut(false))
|
||
})
|
||
});
|
||
});
|
||
var ITEM_NAME = "RovingFocusGroupItem";
|
||
var RovingFocusGroupItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeRovingFocusGroup, focusable = true, active = false, tabStopId, ...itemProps } = props;
|
||
const autoId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])();
|
||
const id = tabStopId || autoId;
|
||
const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);
|
||
const isCurrentTabStop = context.currentTabStopId === id;
|
||
const getItems = useCollection(__scopeRovingFocusGroup);
|
||
const { onFocusableItemAdd, onFocusableItemRemove } = context;
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
if (focusable) {
|
||
onFocusableItemAdd();
|
||
return ()=>onFocusableItemRemove();
|
||
}
|
||
}, [
|
||
focusable,
|
||
onFocusableItemAdd,
|
||
onFocusableItemRemove
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.ItemSlot, {
|
||
scope: __scopeRovingFocusGroup,
|
||
id,
|
||
focusable,
|
||
active,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
tabIndex: isCurrentTabStop ? 0 : -1,
|
||
"data-orientation": context.orientation,
|
||
...itemProps,
|
||
ref: forwardedRef,
|
||
onMouseDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onMouseDown, (event)=>{
|
||
if (!focusable) event.preventDefault();
|
||
else context.onItemFocus(id);
|
||
}),
|
||
onFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onFocus, ()=>context.onItemFocus(id)),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onKeyDown, (event)=>{
|
||
if (event.key === "Tab" && event.shiftKey) {
|
||
context.onItemShiftTab();
|
||
return;
|
||
}
|
||
if (event.target !== event.currentTarget) return;
|
||
const focusIntent = getFocusIntent(event, context.orientation, context.dir);
|
||
if (focusIntent !== void 0) {
|
||
if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;
|
||
event.preventDefault();
|
||
const items = getItems().filter((item)=>item.focusable);
|
||
let candidateNodes = items.map((item)=>item.ref.current);
|
||
if (focusIntent === "last") candidateNodes.reverse();
|
||
else if (focusIntent === "prev" || focusIntent === "next") {
|
||
if (focusIntent === "prev") candidateNodes.reverse();
|
||
const currentIndex = candidateNodes.indexOf(event.currentTarget);
|
||
candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);
|
||
}
|
||
setTimeout(()=>focusFirst(candidateNodes));
|
||
}
|
||
})
|
||
})
|
||
});
|
||
});
|
||
RovingFocusGroupItem.displayName = ITEM_NAME;
|
||
var MAP_KEY_TO_FOCUS_INTENT = {
|
||
ArrowLeft: "prev",
|
||
ArrowUp: "prev",
|
||
ArrowRight: "next",
|
||
ArrowDown: "next",
|
||
PageUp: "first",
|
||
Home: "first",
|
||
PageDown: "last",
|
||
End: "last"
|
||
};
|
||
function getDirectionAwareKey(key, dir) {
|
||
if (dir !== "rtl") return key;
|
||
return key === "ArrowLeft" ? "ArrowRight" : key === "ArrowRight" ? "ArrowLeft" : key;
|
||
}
|
||
function getFocusIntent(event, orientation, dir) {
|
||
const key = getDirectionAwareKey(event.key, dir);
|
||
if (orientation === "vertical" && [
|
||
"ArrowLeft",
|
||
"ArrowRight"
|
||
].includes(key)) return void 0;
|
||
if (orientation === "horizontal" && [
|
||
"ArrowUp",
|
||
"ArrowDown"
|
||
].includes(key)) return void 0;
|
||
return MAP_KEY_TO_FOCUS_INTENT[key];
|
||
}
|
||
function focusFirst(candidates, preventScroll = false) {
|
||
const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
|
||
for (const candidate of candidates){
|
||
if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
|
||
candidate.focus({
|
||
preventScroll
|
||
});
|
||
if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
|
||
}
|
||
}
|
||
function wrapArray(array, startIndex) {
|
||
return array.map((_, index)=>array[(startIndex + index) % array.length]);
|
||
}
|
||
var Root = RovingFocusGroup;
|
||
var Item = RovingFocusGroupItem;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-menu@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@19_0d4b96092e17d5c8c1f962859072e800/node_modules/@radix-ui/react-menu/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Anchor",
|
||
()=>Anchor2,
|
||
"Arrow",
|
||
()=>Arrow2,
|
||
"CheckboxItem",
|
||
()=>CheckboxItem,
|
||
"Content",
|
||
()=>Content2,
|
||
"Group",
|
||
()=>Group,
|
||
"Item",
|
||
()=>Item2,
|
||
"ItemIndicator",
|
||
()=>ItemIndicator,
|
||
"Label",
|
||
()=>Label,
|
||
"Menu",
|
||
()=>Menu,
|
||
"MenuAnchor",
|
||
()=>MenuAnchor,
|
||
"MenuArrow",
|
||
()=>MenuArrow,
|
||
"MenuCheckboxItem",
|
||
()=>MenuCheckboxItem,
|
||
"MenuContent",
|
||
()=>MenuContent,
|
||
"MenuGroup",
|
||
()=>MenuGroup,
|
||
"MenuItem",
|
||
()=>MenuItem,
|
||
"MenuItemIndicator",
|
||
()=>MenuItemIndicator,
|
||
"MenuLabel",
|
||
()=>MenuLabel,
|
||
"MenuPortal",
|
||
()=>MenuPortal,
|
||
"MenuRadioGroup",
|
||
()=>MenuRadioGroup,
|
||
"MenuRadioItem",
|
||
()=>MenuRadioItem,
|
||
"MenuSeparator",
|
||
()=>MenuSeparator,
|
||
"MenuSub",
|
||
()=>MenuSub,
|
||
"MenuSubContent",
|
||
()=>MenuSubContent,
|
||
"MenuSubTrigger",
|
||
()=>MenuSubTrigger,
|
||
"Portal",
|
||
()=>Portal,
|
||
"RadioGroup",
|
||
()=>RadioGroup,
|
||
"RadioItem",
|
||
()=>RadioItem,
|
||
"Root",
|
||
()=>Root3,
|
||
"Separator",
|
||
()=>Separator,
|
||
"Sub",
|
||
()=>Sub,
|
||
"SubContent",
|
||
()=>SubContent,
|
||
"SubTrigger",
|
||
()=>SubTrigger,
|
||
"createMenuScope",
|
||
()=>createMenuScope
|
||
]);
|
||
// packages/react/menu/src/Menu.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+primitive@1.1.1/node_modules/@radix-ui/primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$collection$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$re_1ad17166111274b6b451c5ad4817bfc8$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$collection$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-collection@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+re_1ad17166111274b6b451c5ad4817bfc8/node_modules/@radix-ui/react-collection/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$direction$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$direction$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-direction@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-direction/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dismissable$2d$layer$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$t_93e149627c30a83695c926d31c853576$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dismissable$2d$layer$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.3_@types+react-dom@19.2.3_@types+react@19.2.6__@t_93e149627c30a83695c926d31c853576/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$guards$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$guards$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-focus-guards/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$scope$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$r_d785daf6985fc8350fb3781de275c6b6$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$scope$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+r_d785daf6985fc8350fb3781de275c6b6/node_modules/@radix-ui/react-focus-scope/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-id@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-id/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-popper@1.2.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_f51937a6043c1687ec731d0ff356eddd/node_modules/@radix-ui/react-popper/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$portal$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_046b67df02e5a46cef606421f30d033b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$portal$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-portal@1.1.3_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_046b67df02e5a46cef606421f30d033b/node_modules/@radix-ui/react-portal/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$presence$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$reac_4990595ea432be9a74aea0197efb306c$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$presence$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-presence@1.1.2_@types+react-dom@19.2.3_@types+react@19.2.6__@types+reac_4990595ea432be9a74aea0197efb306c/node_modules/@radix-ui/react-presence/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$roving$2d$focus$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$_a18e46462387af707d972c0ffe7a229b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$roving$2d$focus$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-roving-focus@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+_a18e46462387af707d972c0ffe7a229b/node_modules/@radix-ui/react-roving-focus/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-slot@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-slot/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$aria$2d$hidden$40$1$2e$2$2e$6$2f$node_modules$2f$aria$2d$hidden$2f$dist$2f$es2015$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$react$2d$remove$2d$scroll$40$2$2e$7$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f$react$2d$remove$2d$scroll$2f$dist$2f$es2015$2f$Combination$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__RemoveScroll$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.6_react@19.2.0/node_modules/react-remove-scroll/dist/es2015/Combination.js [app-ssr] (ecmascript) <export default as RemoveScroll>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var SELECTION_KEYS = [
|
||
"Enter",
|
||
" "
|
||
];
|
||
var FIRST_KEYS = [
|
||
"ArrowDown",
|
||
"PageUp",
|
||
"Home"
|
||
];
|
||
var LAST_KEYS = [
|
||
"ArrowUp",
|
||
"PageDown",
|
||
"End"
|
||
];
|
||
var FIRST_LAST_KEYS = [
|
||
...FIRST_KEYS,
|
||
...LAST_KEYS
|
||
];
|
||
var SUB_OPEN_KEYS = {
|
||
ltr: [
|
||
...SELECTION_KEYS,
|
||
"ArrowRight"
|
||
],
|
||
rtl: [
|
||
...SELECTION_KEYS,
|
||
"ArrowLeft"
|
||
]
|
||
};
|
||
var SUB_CLOSE_KEYS = {
|
||
ltr: [
|
||
"ArrowLeft"
|
||
],
|
||
rtl: [
|
||
"ArrowRight"
|
||
]
|
||
};
|
||
var MENU_NAME = "Menu";
|
||
var [Collection, useCollection, createCollectionScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$collection$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$re_1ad17166111274b6b451c5ad4817bfc8$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$collection$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCollection"])(MENU_NAME);
|
||
var [createMenuContext, createMenuScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(MENU_NAME, [
|
||
createCollectionScope,
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createPopperScope"],
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$roving$2d$focus$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$_a18e46462387af707d972c0ffe7a229b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$roving$2d$focus$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createRovingFocusGroupScope"]
|
||
]);
|
||
var usePopperScope = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createPopperScope"])();
|
||
var useRovingFocusGroupScope = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$roving$2d$focus$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$_a18e46462387af707d972c0ffe7a229b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$roving$2d$focus$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createRovingFocusGroupScope"])();
|
||
var [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);
|
||
var [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);
|
||
var Menu = (props)=>{
|
||
const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;
|
||
const popperScope = usePopperScope(__scopeMenu);
|
||
const [content, setContent] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const isUsingKeyboardRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
const handleOpenChange = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])(onOpenChange);
|
||
const direction = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$direction$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$direction$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDirection"])(dir);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const handleKeyDown = ()=>{
|
||
isUsingKeyboardRef.current = true;
|
||
document.addEventListener("pointerdown", handlePointer, {
|
||
capture: true,
|
||
once: true
|
||
});
|
||
document.addEventListener("pointermove", handlePointer, {
|
||
capture: true,
|
||
once: true
|
||
});
|
||
};
|
||
const handlePointer = ()=>isUsingKeyboardRef.current = false;
|
||
document.addEventListener("keydown", handleKeyDown, {
|
||
capture: true
|
||
});
|
||
return ()=>{
|
||
document.removeEventListener("keydown", handleKeyDown, {
|
||
capture: true
|
||
});
|
||
document.removeEventListener("pointerdown", handlePointer, {
|
||
capture: true
|
||
});
|
||
document.removeEventListener("pointermove", handlePointer, {
|
||
capture: true
|
||
});
|
||
};
|
||
}, []);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], {
|
||
...popperScope,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuProvider, {
|
||
scope: __scopeMenu,
|
||
open,
|
||
onOpenChange: handleOpenChange,
|
||
content,
|
||
onContentChange: setContent,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuRootProvider, {
|
||
scope: __scopeMenu,
|
||
onClose: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>handleOpenChange(false), [
|
||
handleOpenChange
|
||
]),
|
||
isUsingKeyboardRef,
|
||
dir: direction,
|
||
modal,
|
||
children
|
||
})
|
||
})
|
||
});
|
||
};
|
||
Menu.displayName = MENU_NAME;
|
||
var ANCHOR_NAME = "MenuAnchor";
|
||
var MenuAnchor = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, ...anchorProps } = props;
|
||
const popperScope = usePopperScope(__scopeMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Anchor"], {
|
||
...popperScope,
|
||
...anchorProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
MenuAnchor.displayName = ANCHOR_NAME;
|
||
var PORTAL_NAME = "MenuPortal";
|
||
var [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME, {
|
||
forceMount: void 0
|
||
});
|
||
var MenuPortal = (props)=>{
|
||
const { __scopeMenu, forceMount, children, container } = props;
|
||
const context = useMenuContext(PORTAL_NAME, __scopeMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(PortalProvider, {
|
||
scope: __scopeMenu,
|
||
forceMount,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$presence$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$reac_4990595ea432be9a74aea0197efb306c$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$presence$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Presence"], {
|
||
present: forceMount || context.open,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$portal$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_046b67df02e5a46cef606421f30d033b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$portal$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], {
|
||
asChild: true,
|
||
container,
|
||
children
|
||
})
|
||
})
|
||
});
|
||
};
|
||
MenuPortal.displayName = PORTAL_NAME;
|
||
var CONTENT_NAME = "MenuContent";
|
||
var [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME);
|
||
var MenuContent = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);
|
||
const { forceMount = portalContext.forceMount, ...contentProps } = props;
|
||
const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);
|
||
const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Provider, {
|
||
scope: props.__scopeMenu,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$presence$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$reac_4990595ea432be9a74aea0197efb306c$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$presence$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Presence"], {
|
||
present: forceMount || context.open,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Slot, {
|
||
scope: props.__scopeMenu,
|
||
children: rootContext.modal ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuRootContentModal, {
|
||
...contentProps,
|
||
ref: forwardedRef
|
||
}) : /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuRootContentNonModal, {
|
||
...contentProps,
|
||
ref: forwardedRef
|
||
})
|
||
})
|
||
})
|
||
});
|
||
});
|
||
var MenuRootContentModal = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const content = ref.current;
|
||
if (content) return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$aria$2d$hidden$40$1$2e$2$2e$6$2f$node_modules$2f$aria$2d$hidden$2f$dist$2f$es2015$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["hideOthers"])(content);
|
||
}, []);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuContentImpl, {
|
||
...props,
|
||
ref: composedRefs,
|
||
trapFocus: context.open,
|
||
disableOutsidePointerEvents: context.open,
|
||
disableOutsideScroll: true,
|
||
onFocusOutside: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onFocusOutside, (event)=>event.preventDefault(), {
|
||
checkForDefaultPrevented: false
|
||
}),
|
||
onDismiss: ()=>context.onOpenChange(false)
|
||
});
|
||
});
|
||
var MenuRootContentNonModal = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuContentImpl, {
|
||
...props,
|
||
ref: forwardedRef,
|
||
trapFocus: false,
|
||
disableOutsidePointerEvents: false,
|
||
disableOutsideScroll: false,
|
||
onDismiss: ()=>context.onOpenChange(false)
|
||
});
|
||
});
|
||
var MenuContentImpl = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, loop = false, trapFocus, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEntryFocus, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, onDismiss, disableOutsideScroll, ...contentProps } = props;
|
||
const context = useMenuContext(CONTENT_NAME, __scopeMenu);
|
||
const rootContext = useMenuRootContext(CONTENT_NAME, __scopeMenu);
|
||
const popperScope = usePopperScope(__scopeMenu);
|
||
const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);
|
||
const getItems = useCollection(__scopeMenu);
|
||
const [currentItemId, setCurrentItemId] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const contentRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, contentRef, context.onContentChange);
|
||
const timerRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](0);
|
||
const searchRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"]("");
|
||
const pointerGraceTimerRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](0);
|
||
const pointerGraceIntentRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const pointerDirRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"]("right");
|
||
const lastPointerXRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](0);
|
||
const ScrollLockWrapper = disableOutsideScroll ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$react$2d$remove$2d$scroll$40$2$2e$7$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f$react$2d$remove$2d$scroll$2f$dist$2f$es2015$2f$Combination$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__RemoveScroll$3e$__["RemoveScroll"] : __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fragment"];
|
||
const scrollLockWrapperProps = disableOutsideScroll ? {
|
||
as: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slot"],
|
||
allowPinchZoom: true
|
||
} : void 0;
|
||
const handleTypeaheadSearch = (key)=>{
|
||
const search = searchRef.current + key;
|
||
const items = getItems().filter((item)=>!item.disabled);
|
||
const currentItem = document.activeElement;
|
||
const currentMatch = items.find((item)=>item.ref.current === currentItem)?.textValue;
|
||
const values = items.map((item)=>item.textValue);
|
||
const nextMatch = getNextMatch(values, search, currentMatch);
|
||
const newItem = items.find((item)=>item.textValue === nextMatch)?.ref.current;
|
||
(function updateSearch(value) {
|
||
searchRef.current = value;
|
||
window.clearTimeout(timerRef.current);
|
||
if (value !== "") timerRef.current = window.setTimeout(()=>updateSearch(""), 1e3);
|
||
})(search);
|
||
if (newItem) {
|
||
setTimeout(()=>newItem.focus());
|
||
}
|
||
};
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
return ()=>window.clearTimeout(timerRef.current);
|
||
}, []);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$guards$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$guards$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useFocusGuards"])();
|
||
const isPointerMovingToSubmenu = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((event)=>{
|
||
const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;
|
||
return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);
|
||
}, []);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuContentProvider, {
|
||
scope: __scopeMenu,
|
||
searchRef,
|
||
onItemEnter: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((event)=>{
|
||
if (isPointerMovingToSubmenu(event)) event.preventDefault();
|
||
}, [
|
||
isPointerMovingToSubmenu
|
||
]),
|
||
onItemLeave: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((event)=>{
|
||
if (isPointerMovingToSubmenu(event)) return;
|
||
contentRef.current?.focus();
|
||
setCurrentItemId(null);
|
||
}, [
|
||
isPointerMovingToSubmenu
|
||
]),
|
||
onTriggerLeave: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((event)=>{
|
||
if (isPointerMovingToSubmenu(event)) event.preventDefault();
|
||
}, [
|
||
isPointerMovingToSubmenu
|
||
]),
|
||
pointerGraceTimerRef,
|
||
onPointerGraceIntentChange: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((intent)=>{
|
||
pointerGraceIntentRef.current = intent;
|
||
}, []),
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(ScrollLockWrapper, {
|
||
...scrollLockWrapperProps,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$scope$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$r_d785daf6985fc8350fb3781de275c6b6$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$scope$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["FocusScope"], {
|
||
asChild: true,
|
||
trapped: trapFocus,
|
||
onMountAutoFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(onOpenAutoFocus, (event)=>{
|
||
event.preventDefault();
|
||
contentRef.current?.focus({
|
||
preventScroll: true
|
||
});
|
||
}),
|
||
onUnmountAutoFocus: onCloseAutoFocus,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dismissable$2d$layer$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$t_93e149627c30a83695c926d31c853576$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dismissable$2d$layer$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DismissableLayer"], {
|
||
asChild: true,
|
||
disableOutsidePointerEvents,
|
||
onEscapeKeyDown,
|
||
onPointerDownOutside,
|
||
onFocusOutside,
|
||
onInteractOutside,
|
||
onDismiss,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$roving$2d$focus$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$_a18e46462387af707d972c0ffe7a229b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$roving$2d$focus$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], {
|
||
asChild: true,
|
||
...rovingFocusGroupScope,
|
||
dir: rootContext.dir,
|
||
orientation: "vertical",
|
||
loop,
|
||
currentTabStopId: currentItemId,
|
||
onCurrentTabStopIdChange: setCurrentItemId,
|
||
onEntryFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(onEntryFocus, (event)=>{
|
||
if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
|
||
}),
|
||
preventScrollOnEntryFocus: true,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Content"], {
|
||
role: "menu",
|
||
"aria-orientation": "vertical",
|
||
"data-state": getOpenState(context.open),
|
||
"data-radix-menu-content": "",
|
||
dir: rootContext.dir,
|
||
...popperScope,
|
||
...contentProps,
|
||
ref: composedRefs,
|
||
style: {
|
||
outline: "none",
|
||
...contentProps.style
|
||
},
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(contentProps.onKeyDown, (event)=>{
|
||
const target = event.target;
|
||
const isKeyDownInside = target.closest("[data-radix-menu-content]") === event.currentTarget;
|
||
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
|
||
const isCharacterKey = event.key.length === 1;
|
||
if (isKeyDownInside) {
|
||
if (event.key === "Tab") event.preventDefault();
|
||
if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);
|
||
}
|
||
const content = contentRef.current;
|
||
if (event.target !== content) return;
|
||
if (!FIRST_LAST_KEYS.includes(event.key)) return;
|
||
event.preventDefault();
|
||
const items = getItems().filter((item)=>!item.disabled);
|
||
const candidateNodes = items.map((item)=>item.ref.current);
|
||
if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();
|
||
focusFirst(candidateNodes);
|
||
}),
|
||
onBlur: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onBlur, (event)=>{
|
||
if (!event.currentTarget.contains(event.target)) {
|
||
window.clearTimeout(timerRef.current);
|
||
searchRef.current = "";
|
||
}
|
||
}),
|
||
onPointerMove: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerMove, whenMouse((event)=>{
|
||
const target = event.target;
|
||
const pointerXHasChanged = lastPointerXRef.current !== event.clientX;
|
||
if (event.currentTarget.contains(target) && pointerXHasChanged) {
|
||
const newDir = event.clientX > lastPointerXRef.current ? "right" : "left";
|
||
pointerDirRef.current = newDir;
|
||
lastPointerXRef.current = event.clientX;
|
||
}
|
||
}))
|
||
})
|
||
})
|
||
})
|
||
})
|
||
})
|
||
});
|
||
});
|
||
MenuContent.displayName = CONTENT_NAME;
|
||
var GROUP_NAME = "MenuGroup";
|
||
var MenuGroup = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, ...groupProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
role: "group",
|
||
...groupProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
MenuGroup.displayName = GROUP_NAME;
|
||
var LABEL_NAME = "MenuLabel";
|
||
var MenuLabel = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, ...labelProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
...labelProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
MenuLabel.displayName = LABEL_NAME;
|
||
var ITEM_NAME = "MenuItem";
|
||
var ITEM_SELECT = "menu.itemSelect";
|
||
var MenuItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { disabled = false, onSelect, ...itemProps } = props;
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const rootContext = useMenuRootContext(ITEM_NAME, props.__scopeMenu);
|
||
const contentContext = useMenuContentContext(ITEM_NAME, props.__scopeMenu);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
const isPointerDownRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
const handleSelect = ()=>{
|
||
const menuItem = ref.current;
|
||
if (!disabled && menuItem) {
|
||
const itemSelectEvent = new CustomEvent(ITEM_SELECT, {
|
||
bubbles: true,
|
||
cancelable: true
|
||
});
|
||
menuItem.addEventListener(ITEM_SELECT, (event)=>onSelect?.(event), {
|
||
once: true
|
||
});
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["dispatchDiscreteCustomEvent"])(menuItem, itemSelectEvent);
|
||
if (itemSelectEvent.defaultPrevented) {
|
||
isPointerDownRef.current = false;
|
||
} else {
|
||
rootContext.onClose();
|
||
}
|
||
}
|
||
};
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuItemImpl, {
|
||
...itemProps,
|
||
ref: composedRefs,
|
||
disabled,
|
||
onClick: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onClick, handleSelect),
|
||
onPointerDown: (event)=>{
|
||
props.onPointerDown?.(event);
|
||
isPointerDownRef.current = true;
|
||
},
|
||
onPointerUp: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerUp, (event)=>{
|
||
if (!isPointerDownRef.current) event.currentTarget?.click();
|
||
}),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onKeyDown, (event)=>{
|
||
const isTypingAhead = contentContext.searchRef.current !== "";
|
||
if (disabled || isTypingAhead && event.key === " ") return;
|
||
if (SELECTION_KEYS.includes(event.key)) {
|
||
event.currentTarget.click();
|
||
event.preventDefault();
|
||
}
|
||
})
|
||
});
|
||
});
|
||
MenuItem.displayName = ITEM_NAME;
|
||
var MenuItemImpl = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;
|
||
const contentContext = useMenuContentContext(ITEM_NAME, __scopeMenu);
|
||
const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
const [isFocused, setIsFocused] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const [textContent, setTextContent] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]("");
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const menuItem = ref.current;
|
||
if (menuItem) {
|
||
setTextContent((menuItem.textContent ?? "").trim());
|
||
}
|
||
}, [
|
||
itemProps.children
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.ItemSlot, {
|
||
scope: __scopeMenu,
|
||
disabled,
|
||
textValue: textValue ?? textContent,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$roving$2d$focus$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$_a18e46462387af707d972c0ffe7a229b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$roving$2d$focus$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Item"], {
|
||
asChild: true,
|
||
...rovingFocusGroupScope,
|
||
focusable: !disabled,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
role: "menuitem",
|
||
"data-highlighted": isFocused ? "" : void 0,
|
||
"aria-disabled": disabled || void 0,
|
||
"data-disabled": disabled ? "" : void 0,
|
||
...itemProps,
|
||
ref: composedRefs,
|
||
onPointerMove: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerMove, whenMouse((event)=>{
|
||
if (disabled) {
|
||
contentContext.onItemLeave(event);
|
||
} else {
|
||
contentContext.onItemEnter(event);
|
||
if (!event.defaultPrevented) {
|
||
const item = event.currentTarget;
|
||
item.focus({
|
||
preventScroll: true
|
||
});
|
||
}
|
||
}
|
||
})),
|
||
onPointerLeave: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerLeave, whenMouse((event)=>contentContext.onItemLeave(event))),
|
||
onFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onFocus, ()=>setIsFocused(true)),
|
||
onBlur: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onBlur, ()=>setIsFocused(false))
|
||
})
|
||
})
|
||
});
|
||
});
|
||
var CHECKBOX_ITEM_NAME = "MenuCheckboxItem";
|
||
var MenuCheckboxItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { checked = false, onCheckedChange, ...checkboxItemProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(ItemIndicatorProvider, {
|
||
scope: props.__scopeMenu,
|
||
checked,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuItem, {
|
||
role: "menuitemcheckbox",
|
||
"aria-checked": isIndeterminate(checked) ? "mixed" : checked,
|
||
...checkboxItemProps,
|
||
ref: forwardedRef,
|
||
"data-state": getCheckedState(checked),
|
||
onSelect: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(checkboxItemProps.onSelect, ()=>onCheckedChange?.(isIndeterminate(checked) ? true : !checked), {
|
||
checkForDefaultPrevented: false
|
||
})
|
||
})
|
||
});
|
||
});
|
||
MenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
|
||
var RADIO_GROUP_NAME = "MenuRadioGroup";
|
||
var [RadioGroupProvider, useRadioGroupContext] = createMenuContext(RADIO_GROUP_NAME, {
|
||
value: void 0,
|
||
onValueChange: ()=>{}
|
||
});
|
||
var MenuRadioGroup = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { value, onValueChange, ...groupProps } = props;
|
||
const handleValueChange = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])(onValueChange);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(RadioGroupProvider, {
|
||
scope: props.__scopeMenu,
|
||
value,
|
||
onValueChange: handleValueChange,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuGroup, {
|
||
...groupProps,
|
||
ref: forwardedRef
|
||
})
|
||
});
|
||
});
|
||
MenuRadioGroup.displayName = RADIO_GROUP_NAME;
|
||
var RADIO_ITEM_NAME = "MenuRadioItem";
|
||
var MenuRadioItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { value, ...radioItemProps } = props;
|
||
const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);
|
||
const checked = value === context.value;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(ItemIndicatorProvider, {
|
||
scope: props.__scopeMenu,
|
||
checked,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuItem, {
|
||
role: "menuitemradio",
|
||
"aria-checked": checked,
|
||
...radioItemProps,
|
||
ref: forwardedRef,
|
||
"data-state": getCheckedState(checked),
|
||
onSelect: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(radioItemProps.onSelect, ()=>context.onValueChange?.(value), {
|
||
checkForDefaultPrevented: false
|
||
})
|
||
})
|
||
});
|
||
});
|
||
MenuRadioItem.displayName = RADIO_ITEM_NAME;
|
||
var ITEM_INDICATOR_NAME = "MenuItemIndicator";
|
||
var [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(ITEM_INDICATOR_NAME, {
|
||
checked: false
|
||
});
|
||
var MenuItemIndicator = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;
|
||
const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$presence$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$reac_4990595ea432be9a74aea0197efb306c$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$presence$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Presence"], {
|
||
present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
...itemIndicatorProps,
|
||
ref: forwardedRef,
|
||
"data-state": getCheckedState(indicatorContext.checked)
|
||
})
|
||
});
|
||
});
|
||
MenuItemIndicator.displayName = ITEM_INDICATOR_NAME;
|
||
var SEPARATOR_NAME = "MenuSeparator";
|
||
var MenuSeparator = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, ...separatorProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
role: "separator",
|
||
"aria-orientation": "horizontal",
|
||
...separatorProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
MenuSeparator.displayName = SEPARATOR_NAME;
|
||
var ARROW_NAME = "MenuArrow";
|
||
var MenuArrow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeMenu, ...arrowProps } = props;
|
||
const popperScope = usePopperScope(__scopeMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Arrow"], {
|
||
...popperScope,
|
||
...arrowProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
MenuArrow.displayName = ARROW_NAME;
|
||
var SUB_NAME = "MenuSub";
|
||
var [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);
|
||
var MenuSub = (props)=>{
|
||
const { __scopeMenu, children, open = false, onOpenChange } = props;
|
||
const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);
|
||
const popperScope = usePopperScope(__scopeMenu);
|
||
const [trigger, setTrigger] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [content, setContent] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const handleOpenChange = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])(onOpenChange);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
if (parentMenuContext.open === false) handleOpenChange(false);
|
||
return ()=>handleOpenChange(false);
|
||
}, [
|
||
parentMenuContext.open,
|
||
handleOpenChange
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], {
|
||
...popperScope,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuProvider, {
|
||
scope: __scopeMenu,
|
||
open,
|
||
onOpenChange: handleOpenChange,
|
||
content,
|
||
onContentChange: setContent,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuSubProvider, {
|
||
scope: __scopeMenu,
|
||
contentId: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])(),
|
||
triggerId: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])(),
|
||
trigger,
|
||
onTriggerChange: setTrigger,
|
||
children
|
||
})
|
||
})
|
||
});
|
||
};
|
||
MenuSub.displayName = SUB_NAME;
|
||
var SUB_TRIGGER_NAME = "MenuSubTrigger";
|
||
var MenuSubTrigger = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);
|
||
const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);
|
||
const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);
|
||
const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);
|
||
const openTimerRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;
|
||
const scope = {
|
||
__scopeMenu: props.__scopeMenu
|
||
};
|
||
const clearOpenTimer = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>{
|
||
if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
|
||
openTimerRef.current = null;
|
||
}, []);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>clearOpenTimer, [
|
||
clearOpenTimer
|
||
]);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const pointerGraceTimer = pointerGraceTimerRef.current;
|
||
return ()=>{
|
||
window.clearTimeout(pointerGraceTimer);
|
||
onPointerGraceIntentChange(null);
|
||
};
|
||
}, [
|
||
pointerGraceTimerRef,
|
||
onPointerGraceIntentChange
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuAnchor, {
|
||
asChild: true,
|
||
...scope,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuItemImpl, {
|
||
id: subContext.triggerId,
|
||
"aria-haspopup": "menu",
|
||
"aria-expanded": context.open,
|
||
"aria-controls": subContext.contentId,
|
||
"data-state": getOpenState(context.open),
|
||
...props,
|
||
ref: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeRefs"])(forwardedRef, subContext.onTriggerChange),
|
||
onClick: (event)=>{
|
||
props.onClick?.(event);
|
||
if (props.disabled || event.defaultPrevented) return;
|
||
event.currentTarget.focus();
|
||
if (!context.open) context.onOpenChange(true);
|
||
},
|
||
onPointerMove: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerMove, whenMouse((event)=>{
|
||
contentContext.onItemEnter(event);
|
||
if (event.defaultPrevented) return;
|
||
if (!props.disabled && !context.open && !openTimerRef.current) {
|
||
contentContext.onPointerGraceIntentChange(null);
|
||
openTimerRef.current = window.setTimeout(()=>{
|
||
context.onOpenChange(true);
|
||
clearOpenTimer();
|
||
}, 100);
|
||
}
|
||
})),
|
||
onPointerLeave: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerLeave, whenMouse((event)=>{
|
||
clearOpenTimer();
|
||
const contentRect = context.content?.getBoundingClientRect();
|
||
if (contentRect) {
|
||
const side = context.content?.dataset.side;
|
||
const rightSide = side === "right";
|
||
const bleed = rightSide ? -5 : 5;
|
||
const contentNearEdge = contentRect[rightSide ? "left" : "right"];
|
||
const contentFarEdge = contentRect[rightSide ? "right" : "left"];
|
||
contentContext.onPointerGraceIntentChange({
|
||
area: [
|
||
// Apply a bleed on clientX to ensure that our exit point is
|
||
// consistently within polygon bounds
|
||
{
|
||
x: event.clientX + bleed,
|
||
y: event.clientY
|
||
},
|
||
{
|
||
x: contentNearEdge,
|
||
y: contentRect.top
|
||
},
|
||
{
|
||
x: contentFarEdge,
|
||
y: contentRect.top
|
||
},
|
||
{
|
||
x: contentFarEdge,
|
||
y: contentRect.bottom
|
||
},
|
||
{
|
||
x: contentNearEdge,
|
||
y: contentRect.bottom
|
||
}
|
||
],
|
||
side
|
||
});
|
||
window.clearTimeout(pointerGraceTimerRef.current);
|
||
pointerGraceTimerRef.current = window.setTimeout(()=>contentContext.onPointerGraceIntentChange(null), 300);
|
||
} else {
|
||
contentContext.onTriggerLeave(event);
|
||
if (event.defaultPrevented) return;
|
||
contentContext.onPointerGraceIntentChange(null);
|
||
}
|
||
})),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onKeyDown, (event)=>{
|
||
const isTypingAhead = contentContext.searchRef.current !== "";
|
||
if (props.disabled || isTypingAhead && event.key === " ") return;
|
||
if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
|
||
context.onOpenChange(true);
|
||
context.content?.focus();
|
||
event.preventDefault();
|
||
}
|
||
})
|
||
})
|
||
});
|
||
});
|
||
MenuSubTrigger.displayName = SUB_TRIGGER_NAME;
|
||
var SUB_CONTENT_NAME = "MenuSubContent";
|
||
var MenuSubContent = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const portalContext = usePortalContext(CONTENT_NAME, props.__scopeMenu);
|
||
const { forceMount = portalContext.forceMount, ...subContentProps } = props;
|
||
const context = useMenuContext(CONTENT_NAME, props.__scopeMenu);
|
||
const rootContext = useMenuRootContext(CONTENT_NAME, props.__scopeMenu);
|
||
const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Provider, {
|
||
scope: props.__scopeMenu,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$presence$40$1$2e$1$2e$2_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$reac_4990595ea432be9a74aea0197efb306c$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$presence$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Presence"], {
|
||
present: forceMount || context.open,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Slot, {
|
||
scope: props.__scopeMenu,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(MenuContentImpl, {
|
||
id: subContext.contentId,
|
||
"aria-labelledby": subContext.triggerId,
|
||
...subContentProps,
|
||
ref: composedRefs,
|
||
align: "start",
|
||
side: rootContext.dir === "rtl" ? "left" : "right",
|
||
disableOutsidePointerEvents: false,
|
||
disableOutsideScroll: false,
|
||
trapFocus: false,
|
||
onOpenAutoFocus: (event)=>{
|
||
if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();
|
||
event.preventDefault();
|
||
},
|
||
onCloseAutoFocus: (event)=>event.preventDefault(),
|
||
onFocusOutside: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onFocusOutside, (event)=>{
|
||
if (event.target !== subContext.trigger) context.onOpenChange(false);
|
||
}),
|
||
onEscapeKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onEscapeKeyDown, (event)=>{
|
||
rootContext.onClose();
|
||
event.preventDefault();
|
||
}),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onKeyDown, (event)=>{
|
||
const isKeyDownInside = event.currentTarget.contains(event.target);
|
||
const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
|
||
if (isKeyDownInside && isCloseKey) {
|
||
context.onOpenChange(false);
|
||
subContext.trigger?.focus();
|
||
event.preventDefault();
|
||
}
|
||
})
|
||
})
|
||
})
|
||
})
|
||
});
|
||
});
|
||
MenuSubContent.displayName = SUB_CONTENT_NAME;
|
||
function getOpenState(open) {
|
||
return open ? "open" : "closed";
|
||
}
|
||
function isIndeterminate(checked) {
|
||
return checked === "indeterminate";
|
||
}
|
||
function getCheckedState(checked) {
|
||
return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
|
||
}
|
||
function focusFirst(candidates) {
|
||
const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
|
||
for (const candidate of candidates){
|
||
if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
|
||
candidate.focus();
|
||
if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
|
||
}
|
||
}
|
||
function wrapArray(array, startIndex) {
|
||
return array.map((_, index)=>array[(startIndex + index) % array.length]);
|
||
}
|
||
function getNextMatch(values, search, currentMatch) {
|
||
const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0]);
|
||
const normalizedSearch = isRepeated ? search[0] : search;
|
||
const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;
|
||
let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));
|
||
const excludeCurrentMatch = normalizedSearch.length === 1;
|
||
if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v)=>v !== currentMatch);
|
||
const nextMatch = wrappedValues.find((value)=>value.toLowerCase().startsWith(normalizedSearch.toLowerCase()));
|
||
return nextMatch !== currentMatch ? nextMatch : void 0;
|
||
}
|
||
function isPointInPolygon(point, polygon) {
|
||
const { x, y } = point;
|
||
let inside = false;
|
||
for(let i = 0, j = polygon.length - 1; i < polygon.length; j = i++){
|
||
const xi = polygon[i].x;
|
||
const yi = polygon[i].y;
|
||
const xj = polygon[j].x;
|
||
const yj = polygon[j].y;
|
||
const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
|
||
if (intersect) inside = !inside;
|
||
}
|
||
return inside;
|
||
}
|
||
function isPointerInGraceArea(event, area) {
|
||
if (!area) return false;
|
||
const cursorPos = {
|
||
x: event.clientX,
|
||
y: event.clientY
|
||
};
|
||
return isPointInPolygon(cursorPos, area);
|
||
}
|
||
function whenMouse(handler) {
|
||
return (event)=>event.pointerType === "mouse" ? handler(event) : void 0;
|
||
}
|
||
var Root3 = Menu;
|
||
var Anchor2 = MenuAnchor;
|
||
var Portal = MenuPortal;
|
||
var Content2 = MenuContent;
|
||
var Group = MenuGroup;
|
||
var Label = MenuLabel;
|
||
var Item2 = MenuItem;
|
||
var CheckboxItem = MenuCheckboxItem;
|
||
var RadioGroup = MenuRadioGroup;
|
||
var RadioItem = MenuRadioItem;
|
||
var ItemIndicator = MenuItemIndicator;
|
||
var Separator = MenuSeparator;
|
||
var Arrow2 = MenuArrow;
|
||
var Sub = MenuSub;
|
||
var SubTrigger = MenuSubTrigger;
|
||
var SubContent = MenuSubContent;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-dropdown-menu@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types_aefad4ac5851d46557f75f368796c888/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Arrow",
|
||
()=>Arrow2,
|
||
"CheckboxItem",
|
||
()=>CheckboxItem2,
|
||
"Content",
|
||
()=>Content2,
|
||
"DropdownMenu",
|
||
()=>DropdownMenu,
|
||
"DropdownMenuArrow",
|
||
()=>DropdownMenuArrow,
|
||
"DropdownMenuCheckboxItem",
|
||
()=>DropdownMenuCheckboxItem,
|
||
"DropdownMenuContent",
|
||
()=>DropdownMenuContent,
|
||
"DropdownMenuGroup",
|
||
()=>DropdownMenuGroup,
|
||
"DropdownMenuItem",
|
||
()=>DropdownMenuItem,
|
||
"DropdownMenuItemIndicator",
|
||
()=>DropdownMenuItemIndicator,
|
||
"DropdownMenuLabel",
|
||
()=>DropdownMenuLabel,
|
||
"DropdownMenuPortal",
|
||
()=>DropdownMenuPortal,
|
||
"DropdownMenuRadioGroup",
|
||
()=>DropdownMenuRadioGroup,
|
||
"DropdownMenuRadioItem",
|
||
()=>DropdownMenuRadioItem,
|
||
"DropdownMenuSeparator",
|
||
()=>DropdownMenuSeparator,
|
||
"DropdownMenuSub",
|
||
()=>DropdownMenuSub,
|
||
"DropdownMenuSubContent",
|
||
()=>DropdownMenuSubContent,
|
||
"DropdownMenuSubTrigger",
|
||
()=>DropdownMenuSubTrigger,
|
||
"DropdownMenuTrigger",
|
||
()=>DropdownMenuTrigger,
|
||
"Group",
|
||
()=>Group2,
|
||
"Item",
|
||
()=>Item2,
|
||
"ItemIndicator",
|
||
()=>ItemIndicator2,
|
||
"Label",
|
||
()=>Label2,
|
||
"Portal",
|
||
()=>Portal2,
|
||
"RadioGroup",
|
||
()=>RadioGroup2,
|
||
"RadioItem",
|
||
()=>RadioItem2,
|
||
"Root",
|
||
()=>Root2,
|
||
"Separator",
|
||
()=>Separator2,
|
||
"Sub",
|
||
()=>Sub2,
|
||
"SubContent",
|
||
()=>SubContent2,
|
||
"SubTrigger",
|
||
()=>SubTrigger2,
|
||
"Trigger",
|
||
()=>Trigger,
|
||
"createDropdownMenuScope",
|
||
()=>createDropdownMenuScope
|
||
]);
|
||
// packages/react/dropdown-menu/src/DropdownMenu.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+primitive@1.1.1/node_modules/@radix-ui/primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-menu@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@19_0d4b96092e17d5c8c1f962859072e800/node_modules/@radix-ui/react-menu/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-id@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-id/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var DROPDOWN_MENU_NAME = "DropdownMenu";
|
||
var [createDropdownMenuContext, createDropdownMenuScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(DROPDOWN_MENU_NAME, [
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createMenuScope"]
|
||
]);
|
||
var useMenuScope = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createMenuScope"])();
|
||
var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
|
||
var DropdownMenu = (props)=>{
|
||
const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
const triggerRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const [open = false, setOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useControllableState"])({
|
||
prop: openProp,
|
||
defaultProp: defaultOpen,
|
||
onChange: onOpenChange
|
||
});
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(DropdownMenuProvider, {
|
||
scope: __scopeDropdownMenu,
|
||
triggerId: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])(),
|
||
triggerRef,
|
||
contentId: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])(),
|
||
open,
|
||
onOpenChange: setOpen,
|
||
onOpenToggle: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>setOpen((prevOpen)=>!prevOpen), [
|
||
setOpen
|
||
]),
|
||
modal,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], {
|
||
...menuScope,
|
||
open,
|
||
onOpenChange: setOpen,
|
||
dir,
|
||
modal,
|
||
children
|
||
})
|
||
});
|
||
};
|
||
DropdownMenu.displayName = DROPDOWN_MENU_NAME;
|
||
var TRIGGER_NAME = "DropdownMenuTrigger";
|
||
var DropdownMenuTrigger = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
|
||
const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Anchor"], {
|
||
asChild: true,
|
||
...menuScope,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].button, {
|
||
type: "button",
|
||
id: context.triggerId,
|
||
"aria-haspopup": "menu",
|
||
"aria-expanded": context.open,
|
||
"aria-controls": context.open ? context.contentId : void 0,
|
||
"data-state": context.open ? "open" : "closed",
|
||
"data-disabled": disabled ? "" : void 0,
|
||
disabled,
|
||
...triggerProps,
|
||
ref: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeRefs"])(forwardedRef, context.triggerRef),
|
||
onPointerDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onPointerDown, (event)=>{
|
||
if (!disabled && event.button === 0 && event.ctrlKey === false) {
|
||
context.onOpenToggle();
|
||
if (!context.open) event.preventDefault();
|
||
}
|
||
}),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onKeyDown, (event)=>{
|
||
if (disabled) return;
|
||
if ([
|
||
"Enter",
|
||
" "
|
||
].includes(event.key)) context.onOpenToggle();
|
||
if (event.key === "ArrowDown") context.onOpenChange(true);
|
||
if ([
|
||
"Enter",
|
||
" ",
|
||
"ArrowDown"
|
||
].includes(event.key)) event.preventDefault();
|
||
})
|
||
})
|
||
});
|
||
});
|
||
DropdownMenuTrigger.displayName = TRIGGER_NAME;
|
||
var PORTAL_NAME = "DropdownMenuPortal";
|
||
var DropdownMenuPortal = (props)=>{
|
||
const { __scopeDropdownMenu, ...portalProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], {
|
||
...menuScope,
|
||
...portalProps
|
||
});
|
||
};
|
||
DropdownMenuPortal.displayName = PORTAL_NAME;
|
||
var CONTENT_NAME = "DropdownMenuContent";
|
||
var DropdownMenuContent = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...contentProps } = props;
|
||
const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
const hasInteractedOutsideRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Content"], {
|
||
id: context.contentId,
|
||
"aria-labelledby": context.triggerId,
|
||
...menuScope,
|
||
...contentProps,
|
||
ref: forwardedRef,
|
||
onCloseAutoFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onCloseAutoFocus, (event)=>{
|
||
if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();
|
||
hasInteractedOutsideRef.current = false;
|
||
event.preventDefault();
|
||
}),
|
||
onInteractOutside: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(props.onInteractOutside, (event)=>{
|
||
const originalEvent = event.detail.originalEvent;
|
||
const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
|
||
const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
|
||
if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;
|
||
}),
|
||
style: {
|
||
...props.style,
|
||
// re-namespace exposed content custom properties
|
||
...{
|
||
"--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
|
||
"--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
|
||
"--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
|
||
"--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
|
||
"--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
|
||
}
|
||
}
|
||
});
|
||
});
|
||
DropdownMenuContent.displayName = CONTENT_NAME;
|
||
var GROUP_NAME = "DropdownMenuGroup";
|
||
var DropdownMenuGroup = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...groupProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Group"], {
|
||
...menuScope,
|
||
...groupProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuGroup.displayName = GROUP_NAME;
|
||
var LABEL_NAME = "DropdownMenuLabel";
|
||
var DropdownMenuLabel = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...labelProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Label"], {
|
||
...menuScope,
|
||
...labelProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuLabel.displayName = LABEL_NAME;
|
||
var ITEM_NAME = "DropdownMenuItem";
|
||
var DropdownMenuItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...itemProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Item"], {
|
||
...menuScope,
|
||
...itemProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuItem.displayName = ITEM_NAME;
|
||
var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
|
||
var DropdownMenuCheckboxItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...checkboxItemProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["CheckboxItem"], {
|
||
...menuScope,
|
||
...checkboxItemProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
|
||
var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
|
||
var DropdownMenuRadioGroup = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...radioGroupProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["RadioGroup"], {
|
||
...menuScope,
|
||
...radioGroupProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
|
||
var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
|
||
var DropdownMenuRadioItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...radioItemProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["RadioItem"], {
|
||
...menuScope,
|
||
...radioItemProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
|
||
var INDICATOR_NAME = "DropdownMenuItemIndicator";
|
||
var DropdownMenuItemIndicator = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["ItemIndicator"], {
|
||
...menuScope,
|
||
...itemIndicatorProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
|
||
var SEPARATOR_NAME = "DropdownMenuSeparator";
|
||
var DropdownMenuSeparator = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...separatorProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Separator"], {
|
||
...menuScope,
|
||
...separatorProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuSeparator.displayName = SEPARATOR_NAME;
|
||
var ARROW_NAME = "DropdownMenuArrow";
|
||
var DropdownMenuArrow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...arrowProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Arrow"], {
|
||
...menuScope,
|
||
...arrowProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuArrow.displayName = ARROW_NAME;
|
||
var DropdownMenuSub = (props)=>{
|
||
const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
const [open = false, setOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useControllableState"])({
|
||
prop: openProp,
|
||
defaultProp: defaultOpen,
|
||
onChange: onOpenChange
|
||
});
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Sub"], {
|
||
...menuScope,
|
||
open,
|
||
onOpenChange: setOpen,
|
||
children
|
||
});
|
||
};
|
||
var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
|
||
var DropdownMenuSubTrigger = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...subTriggerProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SubTrigger"], {
|
||
...menuScope,
|
||
...subTriggerProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
|
||
var SUB_CONTENT_NAME = "DropdownMenuSubContent";
|
||
var DropdownMenuSubContent = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeDropdownMenu, ...subContentProps } = props;
|
||
const menuScope = useMenuScope(__scopeDropdownMenu);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$menu$40$2$2e$1$2e$4_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$19_0d4b96092e17d5c8c1f962859072e800$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$menu$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["SubContent"], {
|
||
...menuScope,
|
||
...subContentProps,
|
||
ref: forwardedRef,
|
||
style: {
|
||
...props.style,
|
||
// re-namespace exposed content custom properties
|
||
...{
|
||
"--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
|
||
"--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
|
||
"--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
|
||
"--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
|
||
"--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
|
||
}
|
||
}
|
||
});
|
||
});
|
||
DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
|
||
var Root2 = DropdownMenu;
|
||
var Trigger = DropdownMenuTrigger;
|
||
var Portal2 = DropdownMenuPortal;
|
||
var Content2 = DropdownMenuContent;
|
||
var Group2 = DropdownMenuGroup;
|
||
var Label2 = DropdownMenuLabel;
|
||
var Item2 = DropdownMenuItem;
|
||
var CheckboxItem2 = DropdownMenuCheckboxItem;
|
||
var RadioGroup2 = DropdownMenuRadioGroup;
|
||
var RadioItem2 = DropdownMenuRadioItem;
|
||
var ItemIndicator2 = DropdownMenuItemIndicator;
|
||
var Separator2 = DropdownMenuSeparator;
|
||
var Arrow2 = DropdownMenuArrow;
|
||
var Sub2 = DropdownMenuSub;
|
||
var SubTrigger2 = DropdownMenuSubTrigger;
|
||
var SubContent2 = DropdownMenuSubContent;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (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",
|
||
()=>Check
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Check = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Check", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "M20 6 9 17l-5-5",
|
||
key: "1gmf2c"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=check.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript) <export default as CheckIcon>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"CheckIcon",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/check.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (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",
|
||
()=>ChevronRight
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const ChevronRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("ChevronRight", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "m9 18 6-6-6-6",
|
||
key: "mthhwq"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=chevron-right.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (ecmascript) <export default as ChevronRightIcon>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ChevronRightIcon",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (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",
|
||
()=>Circle
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const Circle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("Circle", [
|
||
[
|
||
"circle",
|
||
{
|
||
cx: "12",
|
||
cy: "12",
|
||
r: "10",
|
||
key: "1mglay"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=circle.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (ecmascript) <export default as CircleIcon>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"CircleIcon",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/circle.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/relationship.js@1.2.7/node_modules/relationship.js/dist/relationship.min.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/*!
|
||
* relationship.js v1.2.6
|
||
* Chinese kinship library
|
||
* https://passer-by.com/relationship/
|
||
*
|
||
* Copyright (c) 2016-present, HaoLe Zheng
|
||
*
|
||
* Released under the MIT License
|
||
* https://github.com/mumuy/relationship
|
||
*
|
||
* Created on: 2024-07-24
|
||
*/ __turbopack_context__.s([
|
||
"default",
|
||
()=>Q
|
||
]);
|
||
function s(s, f) {
|
||
(null == f || f > s.length) && (f = s.length);
|
||
for(var x = 0, d = new Array(f); x < f; x++)d[x] = s[x];
|
||
return d;
|
||
}
|
||
function f(f, x) {
|
||
if (f) {
|
||
if ("string" == typeof f) return s(f, x);
|
||
var d = Object.prototype.toString.call(f).slice(8, -1);
|
||
return "Object" === d && f.constructor && (d = f.constructor.name), "Map" === d || "Set" === d ? Array.from(f) : "Arguments" === d || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(d) ? s(f, x) : void 0;
|
||
}
|
||
}
|
||
function x(x) {
|
||
return function(f) {
|
||
if (Array.isArray(f)) return s(f);
|
||
}(x) || function(s) {
|
||
if ("undefined" != typeof Symbol && null != s[Symbol.iterator] || null != s["@@iterator"]) return Array.from(s);
|
||
}(x) || f(x) || function() {
|
||
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}();
|
||
}
|
||
var d = [
|
||
{
|
||
exp: /^(\S+?)(应该|得)?(称呼|叫|喊)(\S+?)(什么|啥)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[4],
|
||
target: s[1]
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)(\S+?)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[5],
|
||
target: s[1]
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)是(\S+?)的(谁|什么|什么亲戚|啥亲戚|什么人)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1],
|
||
target: s[2],
|
||
type: s[1].includes("的") ? "default" : "chain"
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)(应该|得)?管(\S+?)叫(什么|啥)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[3],
|
||
target: s[1]
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)(和|与)(\S+?)(之间)?是(什么|啥)关系??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1],
|
||
target: s[3],
|
||
type: "pair"
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)对于(\S+?)是(什么|啥)关系??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1],
|
||
target: s[2],
|
||
type: "chain"
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)(指的)?是(什么|啥)(意思|关系|亲戚关系|辈分|人)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1],
|
||
type: "chain"
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)(应该|得)?(称呼|叫|喊)(什么|啥)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1]
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)(应该|得)?(如何|怎么)(称呼|叫|喊)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1]
|
||
};
|
||
}
|
||
},
|
||
{
|
||
exp: /^(\S+?)是(谁|什么|什么亲戚|啥亲戚|什么人|什么辈分|啥辈分)??$/,
|
||
opt: function(s) {
|
||
return {
|
||
text: s[1],
|
||
type: s[1].includes("的") ? "default" : "chain"
|
||
};
|
||
}
|
||
}
|
||
];
|
||
function m(s, f) {
|
||
var x = "undefined" != typeof Symbol && s[Symbol.iterator] || s["@@iterator"];
|
||
if (!x) {
|
||
if (Array.isArray(s) || (x = function(s, f) {
|
||
if (!s) return;
|
||
if ("string" == typeof s) return b(s, f);
|
||
var x = Object.prototype.toString.call(s).slice(8, -1);
|
||
"Object" === x && s.constructor && (x = s.constructor.name);
|
||
if ("Map" === x || "Set" === x) return Array.from(s);
|
||
if ("Arguments" === x || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x)) return b(s, f);
|
||
}(s)) || f && s && "number" == typeof s.length) {
|
||
x && (s = x);
|
||
var d = 0, m = function() {};
|
||
return {
|
||
s: m,
|
||
n: function() {
|
||
return d >= s.length ? {
|
||
done: !0
|
||
} : {
|
||
done: !1,
|
||
value: s[d++]
|
||
};
|
||
},
|
||
e: function(s) {
|
||
throw s;
|
||
},
|
||
f: m
|
||
};
|
||
}
|
||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}
|
||
var o, r = !0, h = !1;
|
||
return {
|
||
s: function() {
|
||
x = x.call(s);
|
||
},
|
||
n: function() {
|
||
var s = x.next();
|
||
return r = s.done, s;
|
||
},
|
||
e: function(s) {
|
||
h = !0, o = s;
|
||
},
|
||
f: function() {
|
||
try {
|
||
r || null == x.return || x.return();
|
||
} finally{
|
||
if (h) throw o;
|
||
}
|
||
}
|
||
};
|
||
}
|
||
function b(s, f) {
|
||
(null == f || f > s.length) && (f = s.length);
|
||
for(var x = 0, d = new Array(f); x < f; x++)d[x] = s[x];
|
||
return d;
|
||
}
|
||
var o = [
|
||
{
|
||
exp: /^(.+)&o([^#]+)&l/g,
|
||
str: "$1$2"
|
||
},
|
||
{
|
||
exp: /^(.+)&l([^#]+)&o/g,
|
||
str: "$1$2"
|
||
},
|
||
{
|
||
exp: /^(.+)?,o([sb](&\d+)?)([^#]+)&l/g,
|
||
str: "$1,x$2$4"
|
||
},
|
||
{
|
||
exp: /^(.+)?,l([sb](&\d+)?)([^#]+)&o/g,
|
||
str: "$1,x$2$4"
|
||
},
|
||
{
|
||
exp: /(,o[sb](&\d+)?)+(,o[sb])(&\d+)?/,
|
||
str: "$3$4"
|
||
},
|
||
{
|
||
exp: /(,l[sb](&\d+)?)+(,l[sb])(&\d+)?/,
|
||
str: "$3$4"
|
||
},
|
||
{
|
||
exp: /^(.*,[fh1])(,[olx][sb](&\d+)?)+,[olx]b(.*)$/,
|
||
str: "$1,xb$4#$1$4"
|
||
},
|
||
{
|
||
exp: /^(.*,[mw0])(,[olx][sb](&\d+)?)+,[olx]s(.*)$/,
|
||
str: "$1,xs$4#$1$4"
|
||
},
|
||
{
|
||
exp: /(,[fh1])(,[olx][sb](&\d+)?)+,[olx]s/g,
|
||
str: "$1,xs"
|
||
},
|
||
{
|
||
exp: /(,[mw0])(,[olx][sb](&\d+)?)+,[olx]b/g,
|
||
str: "$1,xb"
|
||
},
|
||
{
|
||
exp: /^,[olx][sb](&\d+)?,[olx]b(.+)?$/,
|
||
str: ",xb$2#$2"
|
||
},
|
||
{
|
||
exp: /^,[olx][sb](&\d+)?,[olx]s(.+)?$/,
|
||
str: ",xs$2#$2"
|
||
},
|
||
{
|
||
exp: /^,x([sb])$/,
|
||
str: ",o$1#,l$1"
|
||
},
|
||
{
|
||
exp: /m,h/g,
|
||
str: "f"
|
||
},
|
||
{
|
||
exp: /f,w/g,
|
||
str: "m"
|
||
},
|
||
{
|
||
exp: /,[xol][sb](&\d+)?(,[mf])/g,
|
||
str: "$2"
|
||
},
|
||
{
|
||
exp: /,[mf],d(&\d+)/,
|
||
str: ",xs$1"
|
||
},
|
||
{
|
||
exp: /,[mf],d&([ol])/,
|
||
str: ",$1s"
|
||
},
|
||
{
|
||
exp: /,[mf],s(&\d+)/,
|
||
str: ",xb$1"
|
||
},
|
||
{
|
||
exp: /,[mf],s&([ol])/,
|
||
str: ",$1b"
|
||
},
|
||
{
|
||
exp: /^(.*,[fh1]|[xol]b(&\d+)?),[mf],s(.*)$/,
|
||
str: "$1,xb$3#$1$3"
|
||
},
|
||
{
|
||
exp: /^(.*,[mw0]|[xol]s(&\d+)?),[mf],d(.*)$/,
|
||
str: "$1,xs$3#$1$3"
|
||
},
|
||
{
|
||
exp: /(,[mw0]|[xol]s(&\d+)?),[mf],s/,
|
||
str: "$1,xb"
|
||
},
|
||
{
|
||
exp: /(,[fh1]|[xol]b(&\d+)?),[mf],d/,
|
||
str: "$1,xs"
|
||
},
|
||
{
|
||
exp: /^,[mf],s(.+)?$/,
|
||
str: ",xb$1#,1$1"
|
||
},
|
||
{
|
||
exp: /^,[mf],d(.+)?$/,
|
||
str: ",xs$1#,0$1"
|
||
},
|
||
{
|
||
exp: /,[ds](&[ol\d]+)?,[olx]b(&\d+)/g,
|
||
str: ",s$2"
|
||
},
|
||
{
|
||
exp: /,[ds](&[ol\d]+)?,[olx]s(&\d+)/g,
|
||
str: ",d$2"
|
||
},
|
||
{
|
||
exp: /,[ds]&o,ob/g,
|
||
str: ",s&o"
|
||
},
|
||
{
|
||
exp: /,[ds]&o,os/g,
|
||
str: ",d&o"
|
||
},
|
||
{
|
||
exp: /,[ds]&l,lb/g,
|
||
str: ",s&l"
|
||
},
|
||
{
|
||
exp: /,[ds]&l,ls/g,
|
||
str: ",d&l"
|
||
},
|
||
{
|
||
exp: /,[ds](&[ol\d]+)?,[olx]s(&\d+)?/g,
|
||
str: ",d$2"
|
||
},
|
||
{
|
||
exp: /,[ds](&[ol\d]+)?,[olx]b(&\d+)?/g,
|
||
str: ",s$2"
|
||
},
|
||
{
|
||
exp: /(,[mwd0]|,[olx]s)(&[ol\d]+)?,[ds](&[ol\d]+)?,m/g,
|
||
str: "$1"
|
||
},
|
||
{
|
||
exp: /(,[mwd0]|,[olx]s)(&[ol\d]+)?,[ds](&[ol\d]+)?,f/g,
|
||
str: "$1,h"
|
||
},
|
||
{
|
||
exp: /(,[fhs1]|,[olx]b)(&[ol\d]+)?,[ds](&[ol\d]+)?,f/g,
|
||
str: "$1"
|
||
},
|
||
{
|
||
exp: /(,[fhs1]|,[olx]b)(&[ol\d]+)?,[ds](&[ol\d]+)?,m/g,
|
||
str: "$1,w"
|
||
},
|
||
{
|
||
exp: /^,[ds],m(.+)?$/,
|
||
str: ",w$1#$1"
|
||
},
|
||
{
|
||
exp: /^,[ds],f(.+)?$/,
|
||
str: ",h$1#$1"
|
||
},
|
||
{
|
||
exp: /,[wh](,[ds])/g,
|
||
str: "$1"
|
||
},
|
||
{
|
||
exp: /,w,h|,h,w/g,
|
||
str: ""
|
||
},
|
||
{
|
||
exp: /(.+)?\[([^\|]+?)\|([^\[\]]*\|[^\[\]]*)\](.+)?/g,
|
||
str: "$1$2$4#$1[$3]$4"
|
||
},
|
||
{
|
||
exp: /(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,
|
||
str: "$1$2$4#$1$3$4"
|
||
}
|
||
], r = [
|
||
{
|
||
exp: /^从表/,
|
||
arr: [
|
||
"从父姑表",
|
||
"从父舅表",
|
||
"从父姨表",
|
||
"从母姑表",
|
||
"从母舅表",
|
||
"从母叔表"
|
||
]
|
||
},
|
||
{
|
||
exp: /^表表/,
|
||
arr: [
|
||
"姑表叔表",
|
||
"姑表姑表",
|
||
"姑表舅表",
|
||
"姑表姨表",
|
||
"舅表叔表",
|
||
"舅表姑表",
|
||
"舅表舅表",
|
||
"舅表姨表"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([夫妻内外]?)表/,
|
||
arr: [
|
||
"$1姑表",
|
||
"$1舅表"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([姑舅])表(?=[^伯叔])/,
|
||
arr: [
|
||
"$1表伯",
|
||
"$1表叔"
|
||
]
|
||
},
|
||
{
|
||
exp: /^姻/,
|
||
arr: [
|
||
"姑姻",
|
||
"姨姻",
|
||
"姊妹姻",
|
||
"女姻"
|
||
]
|
||
},
|
||
{
|
||
exp: /^眷/,
|
||
arr: [
|
||
"叔眷",
|
||
"舅眷",
|
||
"兄弟眷",
|
||
"男眷"
|
||
]
|
||
},
|
||
{
|
||
exp: /^亲家/,
|
||
arr: [
|
||
"姊妹姻",
|
||
"兄弟眷"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([堂表姨]?)([曾高天烈太远鼻]?)(祖?)([伯叔姑舅姨])/,
|
||
arr: [
|
||
"$1$4$2$3"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([曾高天烈太远鼻]?)祖?王姑/,
|
||
arr: [
|
||
"姑$1祖母"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([曾玄元来晜仍云耳])([侄甥])/,
|
||
arr: [
|
||
"$2$1"
|
||
]
|
||
},
|
||
{
|
||
exp: /^外表([伯叔姑舅姨])/,
|
||
arr: [
|
||
"姑表$1外",
|
||
"舅表$1外"
|
||
]
|
||
},
|
||
{
|
||
exp: /([堂表姨]?)外甥/,
|
||
arr: [
|
||
"$1甥"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([舅叔])([曾玄外]*)孙/,
|
||
arr: [
|
||
"$1侄$2孙"
|
||
]
|
||
},
|
||
{
|
||
exp: /^([姨姑])([曾玄外]*)孙/,
|
||
arr: [
|
||
"$1甥$2孙"
|
||
]
|
||
},
|
||
{
|
||
exp: /([孙甥侄])$/,
|
||
arr: [
|
||
"$1男",
|
||
"$1女"
|
||
]
|
||
},
|
||
{
|
||
exp: /([姑舅姨叔])([孙外]*)([男女])$/,
|
||
arr: [
|
||
"$1表侄$2$3",
|
||
"$1表甥$2$3"
|
||
]
|
||
},
|
||
{
|
||
exp: /(.+)父母$/,
|
||
arr: [
|
||
"$1父",
|
||
"$1母"
|
||
]
|
||
},
|
||
{
|
||
exp: /(.+)公婆$/,
|
||
arr: [
|
||
"$1公",
|
||
"$1婆"
|
||
]
|
||
},
|
||
{
|
||
exp: /祖$/,
|
||
arr: [
|
||
"祖父"
|
||
]
|
||
},
|
||
{
|
||
exp: /(新妇|媳)$/,
|
||
arr: [
|
||
"媳妇"
|
||
]
|
||
},
|
||
{
|
||
exp: /嫂$/,
|
||
arr: [
|
||
"兄妇"
|
||
]
|
||
},
|
||
{
|
||
exp: /女儿$/,
|
||
arr: [
|
||
"女"
|
||
]
|
||
}
|
||
], h = {
|
||
"晜": "兄",
|
||
"哥": "兄",
|
||
"姐": "姊",
|
||
"侄": "姪",
|
||
"婿": "壻",
|
||
"嬷": "嫲",
|
||
"祖父": "王父",
|
||
"祖母": "王母",
|
||
"孙女婿": "孙婿",
|
||
"甥女婿": "甥婿",
|
||
"侄女婿": "侄婿",
|
||
"孙媳妇": "孙妇",
|
||
"甥媳妇": "甥妇",
|
||
"侄媳妇": "侄妇",
|
||
"弟媳妇": "弟妇"
|
||
};
|
||
function e(s, x) {
|
||
return function(s) {
|
||
if (Array.isArray(s)) return s;
|
||
}(s) || function(s, f) {
|
||
var x = null == s ? null : "undefined" != typeof Symbol && s[Symbol.iterator] || s["@@iterator"];
|
||
if (null != x) {
|
||
var d, m, b, o, r = [], h = !0, e = !1;
|
||
try {
|
||
if (b = (x = x.call(s)).next, 0 === f) {
|
||
if (Object(x) !== x) return;
|
||
h = !1;
|
||
} else for(; !(h = (d = b.call(x)).done) && (r.push(d.value), r.length !== f); h = !0);
|
||
} catch (s) {
|
||
e = !0, m = s;
|
||
} finally{
|
||
try {
|
||
if (!h && null != x.return && (o = x.return(), Object(o) !== o)) return;
|
||
} finally{
|
||
if (e) throw m;
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
}(s, x) || f(s, x) || function() {
|
||
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}();
|
||
}
|
||
var l = [
|
||
"",
|
||
"一",
|
||
"二",
|
||
"三",
|
||
"四",
|
||
"五",
|
||
"六",
|
||
"七",
|
||
"八",
|
||
"九",
|
||
"十"
|
||
];
|
||
var t = {
|
||
"f#s": [
|
||
"父子"
|
||
],
|
||
"m#s": [
|
||
"母子"
|
||
],
|
||
"f#d": [
|
||
"父女"
|
||
],
|
||
"m#d": [
|
||
"母女"
|
||
],
|
||
"h#w": [
|
||
"夫妻"
|
||
],
|
||
"ob#lb": [
|
||
"兄弟"
|
||
],
|
||
"ob#ls": [
|
||
"兄妹"
|
||
],
|
||
"os#ls": [
|
||
"姐妹"
|
||
],
|
||
"os#lb": [
|
||
"姐弟"
|
||
],
|
||
"w,f#d,h": [
|
||
"翁婿"
|
||
],
|
||
"w,m#d,h": [
|
||
"母婿"
|
||
],
|
||
"h,f#s,w": [
|
||
"翁媳"
|
||
],
|
||
"h,m#s,w": [
|
||
"婆媳"
|
||
],
|
||
"f,[f|m]#s,[s|d]": [
|
||
"祖孙"
|
||
],
|
||
"m,f#d,[s|d]": [
|
||
"公孙"
|
||
],
|
||
"m,m#d,[s|d]": [
|
||
"婆孙"
|
||
],
|
||
"f,[ob|ob,w]#[lb|h,lb],[s|d]": [
|
||
"伯侄"
|
||
],
|
||
"f,lb#ob,[s|d]": [
|
||
"叔侄"
|
||
],
|
||
"f,lb,w#h,ob,[s|d]": [
|
||
"婶侄"
|
||
],
|
||
"f,[xs|xs,h]#[xb|w,xb],[s|d]": [
|
||
"姑侄"
|
||
],
|
||
"m,[xb|xb,w]#[xs|h,xs],[s|d]": [
|
||
"舅甥"
|
||
],
|
||
"m,[xs|xs,h]#[xs|w,xs],[s|d]": [
|
||
"姨甥"
|
||
],
|
||
"f,xb,s&o#f,xb,s&l": [
|
||
"堂兄弟"
|
||
],
|
||
"f,xb,s&o#f,xb,d&l": [
|
||
"堂兄妹"
|
||
],
|
||
"f,xb,d&o#f,xb,s&l": [
|
||
"堂姐弟"
|
||
],
|
||
"f,xb,d&o#f,xb,d&l": [
|
||
"堂姐妹"
|
||
],
|
||
"f,xs,s&o#m,xb,s&l": [
|
||
"表兄弟"
|
||
],
|
||
"m,xb,s&o#f,xs,s&l": [
|
||
"表兄弟"
|
||
],
|
||
"f,xs,s&o#m,xb,d&l": [
|
||
"表兄妹"
|
||
],
|
||
"m,xb,s&o#f,xs,d&l": [
|
||
"表兄妹"
|
||
],
|
||
"f,xs,d&o#m,xb,d&l": [
|
||
"表姐妹"
|
||
],
|
||
"m,xb,d&o#f,xs,d&l": [
|
||
"表姐妹"
|
||
],
|
||
"f,xs,d&o#m,xb,s&l": [
|
||
"表姐弟"
|
||
],
|
||
"m,xb,d&o#f,xs,s&l": [
|
||
"表姐弟"
|
||
],
|
||
"m,xs,s&o#m,xs,s&l": [
|
||
"姨兄弟"
|
||
],
|
||
"m,xs,s&o#m,xs,d&l": [
|
||
"姨兄妹"
|
||
],
|
||
"m,xs,d&o#m,xs,s&l": [
|
||
"姨姐弟"
|
||
],
|
||
"m,xs,d&o#m,xs,d&l": [
|
||
"姨姐妹"
|
||
],
|
||
"h,ob,w#h,lb,w": [
|
||
"妯娌"
|
||
],
|
||
"w,os,h#w,ls,h": [
|
||
"连襟"
|
||
],
|
||
"w,os#ls,h": [
|
||
"襟姐弟"
|
||
],
|
||
"w,ls#os,h": [
|
||
"襟兄妹"
|
||
],
|
||
"xs,h#w,xb": [
|
||
"郎舅"
|
||
],
|
||
"xs,h#w,xs": [
|
||
"郎姨"
|
||
],
|
||
"lb,w#h,ob": [
|
||
"伯媳"
|
||
],
|
||
"ob,w#h,lb": [
|
||
"叔嫂"
|
||
],
|
||
"xb,w#h,xs": [
|
||
"姑嫂"
|
||
],
|
||
"d,h,[f|m]#s,w,[f|m]": [
|
||
"儿女亲家"
|
||
]
|
||
}, w = {
|
||
"{G2}": {
|
||
"f,f,xb": [
|
||
"从祖"
|
||
],
|
||
"m,f,xb": [
|
||
"外从祖"
|
||
]
|
||
},
|
||
"{G1}": {
|
||
"f,xb": [
|
||
"堂",
|
||
"同堂",
|
||
"亲堂",
|
||
"从父",
|
||
"叔伯",
|
||
"堂房",
|
||
"从"
|
||
],
|
||
"f,xs": [
|
||
"姑表",
|
||
"姑家"
|
||
],
|
||
"m,xb": [
|
||
"舅表",
|
||
"舅家"
|
||
],
|
||
"m,xs": [
|
||
"姨",
|
||
"从母",
|
||
"两姨",
|
||
"姨表",
|
||
"从"
|
||
],
|
||
"f,f,xb,s": [
|
||
"从堂",
|
||
"再从父",
|
||
"远堂",
|
||
"堂叔伯",
|
||
"叔伯叔伯",
|
||
"再从"
|
||
],
|
||
"f,f,xb,d": [
|
||
"堂姑表",
|
||
"从父姑表"
|
||
],
|
||
"f,f,xs,s": [
|
||
"姑表叔表"
|
||
],
|
||
"f,f,xs,d": [
|
||
"姑表姑表"
|
||
],
|
||
"f,m,xb,s": [
|
||
"舅表叔表"
|
||
],
|
||
"f,m,xb,d": [
|
||
"舅表姑表"
|
||
],
|
||
"f,m,xs,s": [
|
||
"从母叔表"
|
||
],
|
||
"f,m,xs,d": [
|
||
"从母姑表"
|
||
],
|
||
"m,f,xb,s": [
|
||
"堂舅表",
|
||
"从父舅表"
|
||
],
|
||
"m,f,xb,d": [
|
||
"堂姨表",
|
||
"从父姨表"
|
||
],
|
||
"m,f,xs,s": [
|
||
"姑表舅表"
|
||
],
|
||
"m,f,xs,d": [
|
||
"姑表姨表"
|
||
],
|
||
"m,m,xb,s": [
|
||
"舅表舅表"
|
||
],
|
||
"m,m,xb,d": [
|
||
"舅表姨表"
|
||
],
|
||
"m,m,xs,s": [
|
||
"从母舅表"
|
||
],
|
||
"m,m,xs,d": [
|
||
"再从母",
|
||
"姨姨",
|
||
"再从"
|
||
],
|
||
"f,f,f,xb,s,s": [
|
||
"三从父",
|
||
"再从堂",
|
||
"远堂",
|
||
"族",
|
||
"三从"
|
||
],
|
||
"m,m,m,xs,d,d": [
|
||
"三从母",
|
||
"三从"
|
||
],
|
||
"f,f,f,f,xb,s,s,s": [
|
||
"四从父",
|
||
"三从堂",
|
||
"远堂",
|
||
"族",
|
||
"四从"
|
||
],
|
||
"m,m,m,m,xs,d,d,d": [
|
||
"四从母",
|
||
"四从"
|
||
],
|
||
"[f|m],[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],[s|d]": [
|
||
"重表"
|
||
],
|
||
"[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d]": [
|
||
"重表"
|
||
]
|
||
},
|
||
"{G1M}": {
|
||
"f,ob": [
|
||
"伯"
|
||
],
|
||
"f,lb": [
|
||
"叔",
|
||
"仲",
|
||
"季"
|
||
],
|
||
"m,xb": [
|
||
"舅"
|
||
],
|
||
"f,f,xb,s": [
|
||
"堂",
|
||
"从父",
|
||
"叔伯",
|
||
"从"
|
||
],
|
||
"f,f,xb,s&o": [
|
||
"堂伯",
|
||
"从父伯",
|
||
"叔伯伯",
|
||
"从伯"
|
||
],
|
||
"f,f,xb,s&l": [
|
||
"堂叔",
|
||
"从父叔",
|
||
"叔伯叔",
|
||
"从叔"
|
||
],
|
||
"f,f,f,xb,s,s": [
|
||
"从堂"
|
||
],
|
||
"f,f,f,xb,s,s&o": [
|
||
"从堂伯"
|
||
],
|
||
"f,f,f,xb,s,s&l": [
|
||
"从堂叔"
|
||
],
|
||
"f,f,f,f,xb,s,s,s": [
|
||
"族"
|
||
],
|
||
"f,f,xs,s&o": [
|
||
"姑表伯"
|
||
],
|
||
"f,f,xs,s&l": [
|
||
"姑表叔"
|
||
],
|
||
"f,m,xb,s&o": [
|
||
"舅表伯"
|
||
],
|
||
"f,m,xb,s&l": [
|
||
"舅表叔"
|
||
],
|
||
"f,m,xs,s&o": [
|
||
"姨伯",
|
||
"从母伯",
|
||
"从伯"
|
||
],
|
||
"f,m,xs,s&l": [
|
||
"姨叔",
|
||
"从母叔",
|
||
"从叔"
|
||
],
|
||
"m,f,xb,s": [
|
||
"堂舅",
|
||
"从父舅",
|
||
"叔伯舅"
|
||
],
|
||
"m,f,xs,s": [
|
||
"姑表舅"
|
||
],
|
||
"m,m,xb,s": [
|
||
"舅表舅"
|
||
],
|
||
"m,m,xs,s": [
|
||
"姨舅",
|
||
"从母舅"
|
||
],
|
||
"f,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],s&o": [
|
||
"重表伯"
|
||
],
|
||
"f,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],s&l": [
|
||
"重表叔"
|
||
],
|
||
"f,[f|m],[f,xs|m,xb],[s|d],s&o": [
|
||
"重表伯"
|
||
],
|
||
"f,[f|m],[f,xs|m,xb],[s|d],s&l": [
|
||
"重表叔"
|
||
],
|
||
"m,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],s": [
|
||
"重表舅"
|
||
],
|
||
"m,[f|m],[f,xs|m,xb],[s|d],s": [
|
||
"重表舅"
|
||
]
|
||
},
|
||
"{G1W}": {
|
||
"f,xs": [
|
||
"姑"
|
||
],
|
||
"m,xs": [
|
||
"姨",
|
||
"姏",
|
||
"茙",
|
||
"荻"
|
||
],
|
||
"f,f,xb,d": [
|
||
"堂姑",
|
||
"从父姑"
|
||
],
|
||
"f,f,f,xb,s,d": [
|
||
"从堂姑"
|
||
],
|
||
"f,f,xs,d": [
|
||
"姑表姑"
|
||
],
|
||
"f,m,xb,d": [
|
||
"舅表姑"
|
||
],
|
||
"f,m,xs,d": [
|
||
"姨姑",
|
||
"从母姑"
|
||
],
|
||
"m,f,xb,d": [
|
||
"堂姨",
|
||
"从父姨",
|
||
"叔伯姨"
|
||
],
|
||
"m,f,xs,d": [
|
||
"姑表姨"
|
||
],
|
||
"m,m,xb,d": [
|
||
"舅表姨"
|
||
],
|
||
"m,m,xs,d": [
|
||
"姨姨",
|
||
"从母姨"
|
||
],
|
||
"f,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],d": [
|
||
"重表姑"
|
||
],
|
||
"f,[f|m],[f,xs|m,xb],[s|d],d": [
|
||
"重表姑"
|
||
],
|
||
"m,[f|m],[f|m],[f,xs|m,xb],[s|d],[s|d],d": [
|
||
"重表姨"
|
||
],
|
||
"m,[f|m],[f,xs|m,xb],[s|d],d": [
|
||
"重表姨"
|
||
]
|
||
},
|
||
"{G0}": {
|
||
xb: [
|
||
"侄"
|
||
],
|
||
"1,xb": [
|
||
"从"
|
||
],
|
||
"1,f,xb,s": [
|
||
"再从"
|
||
],
|
||
"1,f,f,xb,s,s": [
|
||
"三从"
|
||
],
|
||
"h,xb": [
|
||
"叔侄",
|
||
"叔伯"
|
||
],
|
||
"w,xb": [
|
||
"舅侄"
|
||
],
|
||
xs: [
|
||
"甥",
|
||
"外甥"
|
||
],
|
||
"0,xs": [
|
||
"从"
|
||
],
|
||
"0,m,xs,d": [
|
||
"再从"
|
||
],
|
||
"0,m,m,xs,d,d": [
|
||
"三从"
|
||
],
|
||
"h,xs": [
|
||
"姑甥"
|
||
],
|
||
"w,xs": [
|
||
"姨甥",
|
||
"襟侄"
|
||
]
|
||
},
|
||
"{M2W}": {
|
||
"f,f,xb,w": [
|
||
"叔祖眷"
|
||
],
|
||
"m,f,xb,w": [
|
||
"叔外祖眷"
|
||
],
|
||
"f,m,xb,w": [
|
||
"舅祖眷"
|
||
],
|
||
"m,m,xb,w": [
|
||
"舅外祖眷"
|
||
]
|
||
},
|
||
"{M2M}": {
|
||
"f,f,xs,h": [
|
||
"姑祖姻"
|
||
],
|
||
"m,f,xs,h": [
|
||
"姑外祖姻"
|
||
],
|
||
"f,m,xs,h": [
|
||
"姨祖姻"
|
||
],
|
||
"m,m,xs,h": [
|
||
"姨外祖姻"
|
||
]
|
||
},
|
||
"{M1W}": {
|
||
"f,xb,w": [
|
||
"叔眷"
|
||
],
|
||
"f,f,xb,s,w": [
|
||
"从父叔眷"
|
||
],
|
||
"f,f,xs,s,w": [
|
||
"姑表叔眷"
|
||
],
|
||
"f,m,xb,s,w": [
|
||
"舅表叔眷"
|
||
],
|
||
"f,m,xs,s,w": [
|
||
"从母叔眷"
|
||
],
|
||
"m,xb,w": [
|
||
"舅眷"
|
||
],
|
||
"m,f,xb,s,w": [
|
||
"从父舅眷"
|
||
],
|
||
"m,f,xs,s,w": [
|
||
"姑表舅眷"
|
||
],
|
||
"m,m,xb,s,w": [
|
||
"舅表舅眷"
|
||
],
|
||
"m,m,xs,s,w": [
|
||
"从母舅眷"
|
||
]
|
||
},
|
||
"{M1M}": {
|
||
"f,xs,h": [
|
||
"姑姻"
|
||
],
|
||
"f,f,xb,d,h": [
|
||
"从父姑姻"
|
||
],
|
||
"f,f,xs,d,h": [
|
||
"姑表姑姻"
|
||
],
|
||
"f,m,xb,d,h": [
|
||
"舅表姑姻"
|
||
],
|
||
"f,m,xs,d,h": [
|
||
"从母姑姻"
|
||
],
|
||
"m,xs,h": [
|
||
"姨姻"
|
||
],
|
||
"m,f,xb,d,h": [
|
||
"从父姨姻"
|
||
],
|
||
"m,f,xs,d,h": [
|
||
"姑表姨姻"
|
||
],
|
||
"m,m,xb,d,h": [
|
||
"舅表姨姻"
|
||
],
|
||
"m,m,xs,d,h": [
|
||
"从母姨姻"
|
||
]
|
||
},
|
||
"{M0}": {
|
||
"xb,w": [
|
||
"兄弟眷"
|
||
],
|
||
"xs,h": [
|
||
"姊妹姻"
|
||
],
|
||
"w,xb,w": [
|
||
"舅兄弟眷",
|
||
"内兄弟眷"
|
||
],
|
||
"w,xs,h": [
|
||
"姨姊妹姻",
|
||
"内姊妹姻"
|
||
],
|
||
"h,xb,w": [
|
||
"叔兄弟眷",
|
||
"外兄弟眷"
|
||
],
|
||
"h,xs,h": [
|
||
"姑姊妹姻",
|
||
"外姊妹姻"
|
||
],
|
||
"f,xb,s,w": [
|
||
"从父兄弟眷"
|
||
],
|
||
"f,xb,d,h": [
|
||
"从父姊妹姻"
|
||
],
|
||
"f,xs,s,w": [
|
||
"姑表兄弟眷"
|
||
],
|
||
"f,xs,d,h": [
|
||
"姑表姊妹姻"
|
||
],
|
||
"m,xb,s,w": [
|
||
"舅表兄弟眷"
|
||
],
|
||
"m,xb,d,h": [
|
||
"舅表姊妹姻"
|
||
],
|
||
"m,xs,s,w": [
|
||
"从母兄弟眷"
|
||
],
|
||
"m,xs,d,h": [
|
||
"从母姊妹姻"
|
||
]
|
||
},
|
||
"{M-1}": {
|
||
"s,w": [
|
||
"男眷",
|
||
"息眷"
|
||
],
|
||
"d,h": [
|
||
"女姻",
|
||
"息姻"
|
||
],
|
||
"xb,s,w": [
|
||
"侄眷"
|
||
],
|
||
"xb,d,h": [
|
||
"侄姻"
|
||
],
|
||
"xs,s,w": [
|
||
"甥眷"
|
||
],
|
||
"xs,d,h": [
|
||
"甥姻"
|
||
],
|
||
"h,xb,s,w": [
|
||
"叔侄眷"
|
||
],
|
||
"h,xb,d,h": [
|
||
"叔侄姻"
|
||
],
|
||
"h,xs,s,w": [
|
||
"姑甥眷"
|
||
],
|
||
"h,xs,d,h": [
|
||
"姑甥姻"
|
||
],
|
||
"w,xb,s,w": [
|
||
"舅侄眷"
|
||
],
|
||
"w,xb,d,h": [
|
||
"舅侄姻"
|
||
],
|
||
"w,xs,s,w": [
|
||
"姨甥眷"
|
||
],
|
||
"w,xs,d,h": [
|
||
"姨甥姻"
|
||
],
|
||
"f,xb,s,s,w": [
|
||
"堂侄眷"
|
||
],
|
||
"f,xb,s,d,h": [
|
||
"堂侄姻"
|
||
],
|
||
"f,xb,d,s,w": [
|
||
"堂甥眷"
|
||
],
|
||
"f,xb,d,d,h": [
|
||
"堂甥姻"
|
||
],
|
||
"f,xs,s,s,w": [
|
||
"姑表侄眷"
|
||
],
|
||
"f,xs,s,d,h": [
|
||
"姑表侄姻"
|
||
],
|
||
"f,xs,d,s,w": [
|
||
"姑表甥眷"
|
||
],
|
||
"f,xs,d,d,h": [
|
||
"姑表甥姻"
|
||
],
|
||
"m,xb,s,s,w": [
|
||
"舅表侄眷"
|
||
],
|
||
"m,xb,s,d,h": [
|
||
"舅表侄姻"
|
||
],
|
||
"m,xb,d,s,w": [
|
||
"舅表甥眷"
|
||
],
|
||
"m,xb,d,d,h": [
|
||
"舅表甥姻"
|
||
],
|
||
"m,xs,s,s,w": [
|
||
"姨侄眷"
|
||
],
|
||
"m,xs,s,d,h": [
|
||
"姨侄姻"
|
||
],
|
||
"m,xs,d,s,w": [
|
||
"姨甥眷"
|
||
],
|
||
"m,xs,d,d,h": [
|
||
"姨甥姻"
|
||
]
|
||
},
|
||
"{M-2}": {
|
||
"s,s,w": [
|
||
"孙眷"
|
||
],
|
||
"s,d,h": [
|
||
"孙姻"
|
||
],
|
||
"d,s,w": [
|
||
"外孙眷"
|
||
],
|
||
"d,d,h": [
|
||
"外孙姻"
|
||
],
|
||
"xb,s,s,w": [
|
||
"侄孙眷"
|
||
],
|
||
"xb,s,d,h": [
|
||
"侄孙姻"
|
||
],
|
||
"xb,d,s,w": [
|
||
"侄外孙眷"
|
||
],
|
||
"xb,d,d,h": [
|
||
"侄外孙姻"
|
||
],
|
||
"xs,s,s,w": [
|
||
"甥孙眷"
|
||
],
|
||
"xs,s,d,h": [
|
||
"甥孙姻"
|
||
],
|
||
"xs,d,s,w": [
|
||
"甥外孙眷"
|
||
],
|
||
"xs,d,d,h": [
|
||
"甥外孙姻"
|
||
],
|
||
"h,xb,s,s,w": [
|
||
"叔侄孙眷",
|
||
"叔伯孙眷",
|
||
"叔孙眷"
|
||
],
|
||
"h,xb,s,d,h": [
|
||
"叔侄孙姻",
|
||
"叔伯孙姻",
|
||
"叔孙姻"
|
||
],
|
||
"h,xb,d,s,w": [
|
||
"叔侄外孙眷",
|
||
"叔伯外孙眷",
|
||
"叔外孙眷"
|
||
],
|
||
"h,xb,d,d,h": [
|
||
"叔侄外孙姻",
|
||
"叔伯外孙姻",
|
||
"叔外孙姻"
|
||
],
|
||
"h,xs,s,s,w": [
|
||
"姑甥孙眷",
|
||
"姑孙眷"
|
||
],
|
||
"h,xs,s,d,h": [
|
||
"姑甥孙姻",
|
||
"姑孙姻"
|
||
],
|
||
"h,xs,d,s,w": [
|
||
"姑甥外孙眷",
|
||
"姑外孙眷"
|
||
],
|
||
"h,xs,d,d,h": [
|
||
"姑甥外孙姻",
|
||
"姑外孙姻"
|
||
],
|
||
"w,xb,s,s,w": [
|
||
"舅侄孙眷",
|
||
"舅孙眷"
|
||
],
|
||
"w,xb,s,d,h": [
|
||
"舅侄孙姻",
|
||
"舅孙姻"
|
||
],
|
||
"w,xb,d,s,w": [
|
||
"舅侄外孙眷",
|
||
"舅外孙眷"
|
||
],
|
||
"w,xb,d,d,h": [
|
||
"舅侄外孙姻",
|
||
"舅外孙姻"
|
||
],
|
||
"w,xs,s,s,w": [
|
||
"姨甥孙眷",
|
||
"姨孙眷"
|
||
],
|
||
"w,xs,s,d,h": [
|
||
"姨甥孙姻",
|
||
"姨孙姻"
|
||
],
|
||
"w,xs,d,s,w": [
|
||
"姨甥外孙眷",
|
||
"姨外孙眷"
|
||
],
|
||
"w,xs,d,d,h": [
|
||
"姨甥外孙姻",
|
||
"姨外孙姻"
|
||
]
|
||
}
|
||
}, M = {
|
||
"{G2}": [
|
||
"祖父"
|
||
],
|
||
"{G2},w": [
|
||
"祖母"
|
||
],
|
||
"{G2},s": [
|
||
"父"
|
||
],
|
||
"{G2},s,w": [
|
||
"母"
|
||
],
|
||
"{G2},s,s": [
|
||
"兄弟"
|
||
],
|
||
"{G2},s,s&o": [
|
||
"兄"
|
||
],
|
||
"{G2},s,s&l": [
|
||
"弟"
|
||
],
|
||
"{G2},s,d": [
|
||
"姊妹"
|
||
],
|
||
"{G2},s,d&o": [
|
||
"姊"
|
||
],
|
||
"{G2},s,d&l": [
|
||
"妹"
|
||
],
|
||
"{G2},s,s,s": [
|
||
"男",
|
||
"子"
|
||
],
|
||
"{G2},s,s,d": [
|
||
"女"
|
||
],
|
||
"f,f,f,f,f,f,f,f,[{G1M}|{G1W},h]": [
|
||
"鼻祖父"
|
||
],
|
||
"f,f,f,f,f,f,f,f,[{G1M},w|{G1W}]": [
|
||
"鼻祖母"
|
||
],
|
||
"f,f,f,f,f,f,f,[{G1M}|{G1W},h]": [
|
||
"远祖父"
|
||
],
|
||
"f,f,f,f,f,f,f,[{G1M},w|{G1W}]": [
|
||
"远祖母"
|
||
],
|
||
"f,f,f,f,f,f,[{G1M}|{G1W},h]": [
|
||
"太祖父"
|
||
],
|
||
"f,f,f,f,f,f,[{G1M},w|{G1W}]": [
|
||
"太祖母"
|
||
],
|
||
"f,f,f,f,f,[{G1M}|{G1W},h]": [
|
||
"烈祖父"
|
||
],
|
||
"f,f,f,f,f,[{G1M},w|{G1W}]": [
|
||
"烈祖母"
|
||
],
|
||
"f,f,f,f,[{G1M}|{G1W},h]": [
|
||
"天祖父"
|
||
],
|
||
"f,f,f,f,[{G1M},w|{G1W}]": [
|
||
"天祖母"
|
||
],
|
||
"f,f,f,[{G1M}|{G1W},h]": [
|
||
"高祖父",
|
||
"外曾外曾外毑父"
|
||
],
|
||
"f,f,f,[{G1M},w|{G1W}]": [
|
||
"高祖母",
|
||
"外曾外曾外毑母"
|
||
],
|
||
"f,f,m,[{G1M}|{G1W},h]": [
|
||
"高外祖父",
|
||
"外曾外曾毑父"
|
||
],
|
||
"f,f,m,[{G1M},w|{G1W}]": [
|
||
"高外祖母",
|
||
"外曾外曾毑母"
|
||
],
|
||
"f,m,f,[{G1M}|{G1W},h]": [
|
||
"曾外曾祖父",
|
||
"外高外毑父"
|
||
],
|
||
"f,m,f,[{G1M},w|{G1W}]": [
|
||
"曾外曾祖母",
|
||
"外高外毑母"
|
||
],
|
||
"f,m,m,[{G1M}|{G1W},h]": [
|
||
"曾外曾外祖父",
|
||
"外高毑父"
|
||
],
|
||
"f,m,m,[{G1M},w|{G1W}]": [
|
||
"曾外曾外祖母",
|
||
"外高毑母"
|
||
],
|
||
"m,f,f,[{G1M}|{G1W},h]": [
|
||
"外高祖父",
|
||
"曾外曾外毑父"
|
||
],
|
||
"m,f,f,[{G1M},w|{G1W}]": [
|
||
"外高祖母",
|
||
"曾外曾外毑母"
|
||
],
|
||
"m,f,m,[{G1M}|{G1W},h]": [
|
||
"外高外祖父",
|
||
"曾外曾祖毑父"
|
||
],
|
||
"m,f,m,[{G1M},w|{G1W}]": [
|
||
"外高外祖母",
|
||
"曾外曾祖毑母"
|
||
],
|
||
"m,m,f,[{G1M}|{G1W},h]": [
|
||
"外曾外曾祖父",
|
||
"高外毑父"
|
||
],
|
||
"m,m,f,[{G1M},w|{G1W}]": [
|
||
"外曾外曾祖母",
|
||
"高外毑母"
|
||
],
|
||
"m,m,m,[{G1M}|{G1W},h]": [
|
||
"外曾外曾外祖父",
|
||
"高毑父"
|
||
],
|
||
"m,m,m,[{G1M},w|{G1W}]": [
|
||
"外曾外曾外祖母",
|
||
"高毑母"
|
||
],
|
||
"f,f,[{G1M}|{G1W},h]": [
|
||
"?曾祖父",
|
||
"曾?祖父",
|
||
"?太公",
|
||
"太?公",
|
||
"?公太",
|
||
"太?爷",
|
||
"?太爷",
|
||
"?太爷爷",
|
||
"太?爷爷"
|
||
],
|
||
"f,f,[{G1M},w|{G1W}]": [
|
||
"?曾祖母",
|
||
"曾?祖母",
|
||
"?太婆",
|
||
"太?婆",
|
||
"?婆太",
|
||
"太?奶",
|
||
"?太奶",
|
||
"?太奶奶",
|
||
"太?奶奶"
|
||
],
|
||
"f,m,[{G1M}|{G1W},h]": [
|
||
"?曾外祖父",
|
||
"曾外?祖父",
|
||
"?太外公",
|
||
"太外?公",
|
||
"太外?爷",
|
||
"?太外爷",
|
||
"?太外爷爷",
|
||
"太外?爷爷"
|
||
],
|
||
"f,m,[{G1M},w|{G1W}]": [
|
||
"?曾外祖母",
|
||
"曾外?祖母",
|
||
"?太外婆",
|
||
"太外?婆",
|
||
"太外?奶",
|
||
"?太外奶",
|
||
"?太外奶奶",
|
||
"太外?奶奶"
|
||
],
|
||
"m,f,[{G1M}|{G1W},h]": [
|
||
"?外曾祖父",
|
||
"外曾?祖父",
|
||
"?外太公",
|
||
"外太?公",
|
||
"外太?爷",
|
||
"?外太爷",
|
||
"?外太爷爷",
|
||
"外太?爷爷"
|
||
],
|
||
"m,f,[{G1M},w|{G1W}]": [
|
||
"?外曾祖母",
|
||
"外曾?祖母",
|
||
"?外太婆",
|
||
"外太?婆",
|
||
"外太?奶",
|
||
"?外太奶",
|
||
"?外太奶奶",
|
||
"外太?奶奶"
|
||
],
|
||
"m,m,[{G1M}|{G1W},h]": [
|
||
"?外曾外祖父",
|
||
"外曾外?祖父",
|
||
"?外太外公",
|
||
"外太外?公",
|
||
"外太外?爷",
|
||
"?外太外爷",
|
||
"?外太外爷爷",
|
||
"外太外?爷爷"
|
||
],
|
||
"m,m,[{G1M},w|{G1W}]": [
|
||
"?外曾外祖母",
|
||
"外曾外?祖母",
|
||
"?外太外婆",
|
||
"外太外?婆",
|
||
"外太外?奶",
|
||
"?外太外奶",
|
||
"?外太外奶奶",
|
||
"外太外?奶奶"
|
||
],
|
||
"f,[{G1M}|{G1W},h]": [
|
||
"祖父",
|
||
"公",
|
||
"太?父",
|
||
"奶爷",
|
||
"爷爷",
|
||
"爷"
|
||
],
|
||
"f,[{G1M},w|{G1W}]": [
|
||
"祖母",
|
||
"婆",
|
||
"太?母",
|
||
"奶奶",
|
||
"奶"
|
||
],
|
||
"m,[{G1M}|{G1W},h]": [
|
||
"外祖父",
|
||
"外公",
|
||
"外爷",
|
||
"外?公",
|
||
"外?祖父",
|
||
"外太?父",
|
||
"太外?父",
|
||
"姥爷",
|
||
"姥公",
|
||
"毑公",
|
||
"毑爷",
|
||
"毑父",
|
||
"嘎公"
|
||
],
|
||
"m,[{G1M},w|{G1W}]": [
|
||
"外祖母",
|
||
"外婆",
|
||
"外奶",
|
||
"外?婆",
|
||
"外?祖母",
|
||
"外太?母",
|
||
"太外?母",
|
||
"姥姥",
|
||
"姥娘",
|
||
"姥婆",
|
||
"毑婆",
|
||
"毑毑",
|
||
"毑母",
|
||
"嘎嘎",
|
||
"嫏嫏",
|
||
"嫏娘",
|
||
"姥"
|
||
],
|
||
"f,f,{G1},s&o": [
|
||
"伯祖父",
|
||
"伯爷爷"
|
||
],
|
||
"f,f,{G1},s&o,w": [
|
||
"伯祖母",
|
||
"伯奶奶"
|
||
],
|
||
"f,f,{G1},s&l": [
|
||
"叔祖父",
|
||
"叔爷爷"
|
||
],
|
||
"f,f,{G1},s&l,w": [
|
||
"叔祖母",
|
||
"叔奶奶"
|
||
],
|
||
"f,f,{G1},d": [
|
||
"姑祖母",
|
||
"姑奶奶"
|
||
],
|
||
"f,f,{G1},d,h": [
|
||
"姑祖父",
|
||
"姑爷爷"
|
||
],
|
||
"f,m,{G1},s": [
|
||
"舅祖父",
|
||
"舅爷爷"
|
||
],
|
||
"f,m,{G1},s,w": [
|
||
"舅祖母",
|
||
"舅奶奶"
|
||
],
|
||
"f,m,{G1},d": [
|
||
"姨祖母",
|
||
"姨奶奶"
|
||
],
|
||
"f,m,{G1},d,h": [
|
||
"姨祖父",
|
||
"姨爷爷"
|
||
],
|
||
"m,f,{G1},s&o": [
|
||
"伯外祖父",
|
||
"伯外公",
|
||
"伯姥爷"
|
||
],
|
||
"m,f,{G1},s&o,w": [
|
||
"伯外祖母",
|
||
"伯外婆",
|
||
"伯姥姥"
|
||
],
|
||
"m,f,{G1},s&l": [
|
||
"叔外祖父",
|
||
"叔外公",
|
||
"叔姥爷"
|
||
],
|
||
"m,f,{G1},s&l,w": [
|
||
"叔外祖母",
|
||
"叔外婆",
|
||
"叔姥姥"
|
||
],
|
||
"m,f,{G1},d": [
|
||
"姑外祖母",
|
||
"姑外婆",
|
||
"姑姥姥"
|
||
],
|
||
"m,f,{G1},d,h": [
|
||
"姑外祖父",
|
||
"姑外公",
|
||
"姑姥爷"
|
||
],
|
||
"m,m,{G1},s": [
|
||
"舅外祖父",
|
||
"舅外公",
|
||
"舅姥爷"
|
||
],
|
||
"m,m,{G1},s,w": [
|
||
"舅外祖母",
|
||
"舅外婆",
|
||
"舅姥姥"
|
||
],
|
||
"m,m,{G1},d": [
|
||
"姨外祖母",
|
||
"姨外公",
|
||
"姨姥爷"
|
||
],
|
||
"m,m,{G1},d,h": [
|
||
"姨外祖父",
|
||
"姨外婆",
|
||
"姨姥姥"
|
||
],
|
||
"{G1M}#{G1W},h": [
|
||
"父"
|
||
],
|
||
"{G1M},w#{G1W}": [
|
||
"母"
|
||
],
|
||
"f,{G1},s&o": [
|
||
"伯父",
|
||
"伯伯",
|
||
"伯",
|
||
"大爷"
|
||
],
|
||
"f,{G1},s&o,w": [
|
||
"伯母",
|
||
"大娘"
|
||
],
|
||
"f,{G1},s&l": [
|
||
"叔父",
|
||
"叔爸",
|
||
"叔叔",
|
||
"叔"
|
||
],
|
||
"f,{G1},s&l,w": [
|
||
"叔母",
|
||
"婶"
|
||
],
|
||
"f,{G1},d": [
|
||
"姑母",
|
||
"姑姑",
|
||
"姑妈",
|
||
"姑"
|
||
],
|
||
"f,{G1},d,h": [
|
||
"姑父",
|
||
"姑丈",
|
||
"姑爸",
|
||
"姑夫"
|
||
],
|
||
"m,{G1},s": [
|
||
"舅父",
|
||
"舅舅",
|
||
"舅爸",
|
||
"舅"
|
||
],
|
||
"m,{G1},s,w": [
|
||
"舅母",
|
||
"舅妈"
|
||
],
|
||
"m,{G1},d": [
|
||
"姨母",
|
||
"姨姨",
|
||
"姨妈",
|
||
"姨"
|
||
],
|
||
"m,{G1},d,h": [
|
||
"姨父",
|
||
"姨丈",
|
||
"姨爸",
|
||
"姨夫"
|
||
],
|
||
"{G1},s": [
|
||
"兄弟"
|
||
],
|
||
"{G1},s,w": [
|
||
"兄弟妇"
|
||
],
|
||
"{G1},s&o": [
|
||
"哥",
|
||
"哥哥",
|
||
"阿哥",
|
||
"兄"
|
||
],
|
||
"{G1},s&o,w": [
|
||
"嫂",
|
||
"嫂子",
|
||
"兄妇"
|
||
],
|
||
"{G1},s&l": [
|
||
"弟",
|
||
"弟弟",
|
||
"阿弟"
|
||
],
|
||
"{G1},s&l,w": [
|
||
"弟媳",
|
||
"弟妇"
|
||
],
|
||
"{G1},s,s": [
|
||
"侄男",
|
||
"侄子",
|
||
"侄儿"
|
||
],
|
||
"{G1},s,s,w": [
|
||
"侄妇"
|
||
],
|
||
"{G1},s,s,s": [
|
||
"侄孙男"
|
||
],
|
||
"{G1},s,s,s,w": [
|
||
"侄孙妇"
|
||
],
|
||
"{G1},s,s,s,s": [
|
||
"侄曾孙男"
|
||
],
|
||
"{G1},s,s,s,s,w": [
|
||
"侄曾孙妇"
|
||
],
|
||
"{G1},s,s,s,s,s": [
|
||
"侄玄孙男"
|
||
],
|
||
"{G1},s,s,s,s,s,w": [
|
||
"侄玄孙妇"
|
||
],
|
||
"{G1},s,s,s,s,d": [
|
||
"侄玄孙女"
|
||
],
|
||
"{G1},s,s,s,s,d,h": [
|
||
"侄玄孙婿"
|
||
],
|
||
"{G1},s,s,d": [
|
||
"侄孙女"
|
||
],
|
||
"{G1},s,s,d,h": [
|
||
"侄孙婿"
|
||
],
|
||
"{G1},s,s,s,d": [
|
||
"侄曾孙女"
|
||
],
|
||
"{G1},s,s,s,d,h": [
|
||
"侄曾孙婿"
|
||
],
|
||
"{G1},s,d": [
|
||
"侄女",
|
||
"侄女儿"
|
||
],
|
||
"{G1},s,d,h": [
|
||
"侄婿"
|
||
],
|
||
"{G1},s,d,s": [
|
||
"侄外孙男",
|
||
"外孙男"
|
||
],
|
||
"{G1},s,d,s,w": [
|
||
"侄外孙妇"
|
||
],
|
||
"{G1},s,d,d": [
|
||
"侄外孙女",
|
||
"外孙女"
|
||
],
|
||
"{G1},s,d,d,h": [
|
||
"侄外孙婿"
|
||
],
|
||
"{G1},d": [
|
||
"姐妹"
|
||
],
|
||
"{G1},d,h": [
|
||
"姐妹壻"
|
||
],
|
||
"{G1},d&o": [
|
||
"姐",
|
||
"姐姐",
|
||
"阿姐"
|
||
],
|
||
"{G1},d&o,h": [
|
||
"姐夫"
|
||
],
|
||
"{G1},d&l": [
|
||
"妹",
|
||
"妹妹",
|
||
"阿妹"
|
||
],
|
||
"{G1},d&l,h": [
|
||
"妹夫"
|
||
],
|
||
"{G1},d,s": [
|
||
"甥男"
|
||
],
|
||
"{G1},d,s,w": [
|
||
"甥妇"
|
||
],
|
||
"{G1},d,s,s": [
|
||
"甥孙男"
|
||
],
|
||
"{G1},d,s,s,w": [
|
||
"甥孙妇"
|
||
],
|
||
"{G1},d,s,d": [
|
||
"甥孙女"
|
||
],
|
||
"{G1},d,s,d,h": [
|
||
"甥孙婿"
|
||
],
|
||
"{G1},d,d": [
|
||
"甥女"
|
||
],
|
||
"{G1},d,d,h": [
|
||
"甥婿"
|
||
],
|
||
"{G1},d,d,s": [
|
||
"甥外孙男",
|
||
"外孙男"
|
||
],
|
||
"{G1},d,d,s,w": [
|
||
"甥外孙妇"
|
||
],
|
||
"{G1},d,d,d": [
|
||
"甥外孙女",
|
||
"外孙女"
|
||
],
|
||
"{G1},d,d,d,h": [
|
||
"甥外孙婿"
|
||
],
|
||
"h,f,[{G1M}|{G1W},h]": [
|
||
"祖公父",
|
||
"祖公",
|
||
"祖翁",
|
||
"奶公"
|
||
],
|
||
"h,f,[{G1M},w|{G1W}]": [
|
||
"祖婆母",
|
||
"祖婆",
|
||
"祖姆",
|
||
"奶婆"
|
||
],
|
||
"h,m,[{G1M}|{G1W},h]": [
|
||
"外祖公父",
|
||
"外祖公",
|
||
"外祖翁",
|
||
"姥公"
|
||
],
|
||
"h,m,[{G1M},w|{G1W}]": [
|
||
"外祖婆母",
|
||
"外祖婆",
|
||
"外祖姆",
|
||
"姥婆"
|
||
],
|
||
"h,[{G1M}|{G1W},h]": [
|
||
"公父",
|
||
"公公"
|
||
],
|
||
"h,[{G1M},w|{G1W}]": [
|
||
"婆母",
|
||
"婆婆"
|
||
],
|
||
"h,{G1},s&o": [
|
||
"大伯子",
|
||
"大伯兄"
|
||
],
|
||
"h,{G1},s&o,w": [
|
||
"大婶子",
|
||
"大伯嫂"
|
||
],
|
||
"h,{G1},s&l": [
|
||
"小叔子",
|
||
"小叔弟"
|
||
],
|
||
"h,{G1},s&l,w": [
|
||
"小婶子",
|
||
"小叔弟妇"
|
||
],
|
||
"h,{G1},s": [
|
||
"伯叔"
|
||
],
|
||
"h,{G1},s,w": [
|
||
"妯娌"
|
||
],
|
||
"h,{G1},d&o": [
|
||
"大姑子",
|
||
"大姑姐"
|
||
],
|
||
"h,{G1},d&o,h": [
|
||
"大姑夫",
|
||
"大姑姐夫"
|
||
],
|
||
"h,{G1},d&l": [
|
||
"小姑子",
|
||
"小姑妹"
|
||
],
|
||
"h,{G1},d&l,h": [
|
||
"小姑夫",
|
||
"小姑妹夫"
|
||
],
|
||
"h,{G1},d": [
|
||
"姑子"
|
||
],
|
||
"h,{G1},d,h": [
|
||
"姑夫"
|
||
],
|
||
"w,f,[{G1M}|{G1W},h]": [
|
||
"祖岳父",
|
||
"太?岳",
|
||
"祖丈人",
|
||
"爷丈人",
|
||
"奶爷丈人"
|
||
],
|
||
"w,f,[{G1M},w|{G1W}]": [
|
||
"祖岳母",
|
||
"太?岳母",
|
||
"祖丈母",
|
||
"祖丈母娘",
|
||
"奶丈母娘",
|
||
"奶丈母"
|
||
],
|
||
"w,m,[{G1M}|{G1W},h]": [
|
||
"外祖岳父",
|
||
"外太?岳父",
|
||
"太外?岳父",
|
||
"外祖丈人",
|
||
"姥爷丈人"
|
||
],
|
||
"w,m,[{G1M},w|{G1W}]": [
|
||
"外祖岳母",
|
||
"外太?岳母",
|
||
"太外?岳母",
|
||
"外祖丈母",
|
||
"外祖丈母娘",
|
||
"姥丈母娘",
|
||
"姥丈母"
|
||
],
|
||
"w,[{G1M}|{G1W},h]": [
|
||
"岳父",
|
||
"丈人",
|
||
"丈人爹"
|
||
],
|
||
"w,[{G1M},w|{G1W}]": [
|
||
"岳母",
|
||
"丈母",
|
||
"丈母娘"
|
||
],
|
||
"w,{G1},s&o": [
|
||
"大舅子",
|
||
"大舅兄",
|
||
"舅兄"
|
||
],
|
||
"w,{G1},s&o,w": [
|
||
"大舅妇",
|
||
"大舅姆",
|
||
"大舅兄妇",
|
||
"舅兄妇",
|
||
"舅姐",
|
||
"大舅姐",
|
||
"大妗子",
|
||
"大妗儿"
|
||
],
|
||
"w,{G1},s&l": [
|
||
"小舅子",
|
||
"小舅弟",
|
||
"舅弟"
|
||
],
|
||
"w,{G1},s&l,w": [
|
||
"小舅妇",
|
||
"小舅姆",
|
||
"小舅弟妇",
|
||
"舅弟妇",
|
||
"舅妹",
|
||
"小舅妹",
|
||
"小妗子",
|
||
"小妗儿"
|
||
],
|
||
"w,{G1},s": [
|
||
"舅子"
|
||
],
|
||
"w,{G1},s,w": [
|
||
"舅嫂"
|
||
],
|
||
"w,{G1},d&o": [
|
||
"大姨子",
|
||
"大姨姐",
|
||
"姨姐"
|
||
],
|
||
"w,{G1},d&o,h": [
|
||
"大姨夫",
|
||
"大姨姐夫",
|
||
"襟兄",
|
||
"姨兄",
|
||
"大姨哥",
|
||
"大尹子"
|
||
],
|
||
"w,{G1},d&l": [
|
||
"小姨子",
|
||
"小姨妹",
|
||
"姨妹"
|
||
],
|
||
"w,{G1},d&l,h": [
|
||
"小姨夫",
|
||
"小姨妹夫",
|
||
"襟弟",
|
||
"姨弟",
|
||
"小姨弟",
|
||
"小尹子"
|
||
],
|
||
"w,{G1},d": [
|
||
"姨子"
|
||
],
|
||
"w,{G1},d,h": [
|
||
"连襟",
|
||
"连桥"
|
||
],
|
||
"{G0},s": [
|
||
"男",
|
||
"男儿",
|
||
"儿",
|
||
"子",
|
||
"儿子"
|
||
],
|
||
"{G0},s,w": [
|
||
"媳妇",
|
||
"媳",
|
||
"妇"
|
||
],
|
||
"{G0},s,s": [
|
||
"孙",
|
||
"孙男",
|
||
"孙子"
|
||
],
|
||
"{G0},s,s,w": [
|
||
"孙妇"
|
||
],
|
||
"{G0},s,s,s": [
|
||
"曾孙",
|
||
"曾孙男"
|
||
],
|
||
"{G0},s,s,s,w": [
|
||
"曾孙妇"
|
||
],
|
||
"{G0},s,s,s,s": [
|
||
"玄孙",
|
||
"玄孙男",
|
||
"元孙",
|
||
"元孙男"
|
||
],
|
||
"{G0},s,s,s,s,w": [
|
||
"玄孙妇"
|
||
],
|
||
"{G0},s,s,s,d": [
|
||
"玄孙女",
|
||
"元孙女"
|
||
],
|
||
"{G0},s,s,s,d,h": [
|
||
"玄孙婿"
|
||
],
|
||
"{G0},s,s,d": [
|
||
"曾孙女"
|
||
],
|
||
"{G0},s,s,d,h": [
|
||
"曾孙婿"
|
||
],
|
||
"{G0},s,s,d,s": [
|
||
"玄外孙",
|
||
"玄外孙男"
|
||
],
|
||
"{G0},s,s,d,s,w": [
|
||
"玄外孙妇"
|
||
],
|
||
"{G0},s,s,d,d": [
|
||
"玄外孙女"
|
||
],
|
||
"{G0},s,s,d,d,h": [
|
||
"玄外孙婿"
|
||
],
|
||
"{G0},s,d": [
|
||
"孙女"
|
||
],
|
||
"{G0},s,d,h": [
|
||
"孙婿"
|
||
],
|
||
"{G0},s,d,s": [
|
||
"曾外孙",
|
||
"曾外孙男"
|
||
],
|
||
"{G0},s,d,s,w": [
|
||
"曾外孙妇"
|
||
],
|
||
"{G0},s,d,s,s": [
|
||
"曾外曾孙",
|
||
"曾外曾孙男"
|
||
],
|
||
"{G0},s,d,s,s,w": [
|
||
"曾外曾孙妇"
|
||
],
|
||
"{G0},s,d,s,d": [
|
||
"曾外曾孙女"
|
||
],
|
||
"{G0},s,d,s,d,h": [
|
||
"曾外曾孙婿"
|
||
],
|
||
"{G0},s,d,d": [
|
||
"曾外孙女"
|
||
],
|
||
"{G0},s,d,d,h": [
|
||
"曾外孙婿"
|
||
],
|
||
"{G0},s,d,d,s": [
|
||
"曾外曾外孙",
|
||
"曾外曾外孙男"
|
||
],
|
||
"{G0},s,d,d,s,w": [
|
||
"曾外曾外孙妇"
|
||
],
|
||
"{G0},s,d,d,d": [
|
||
"曾外曾外孙女"
|
||
],
|
||
"{G0},s,d,d,d,h": [
|
||
"曾外曾外孙婿"
|
||
],
|
||
"{G0},d": [
|
||
"女",
|
||
"女儿"
|
||
],
|
||
"{G0},d,h": [
|
||
"女婿",
|
||
"婿"
|
||
],
|
||
"{G0},d,s": [
|
||
"外孙",
|
||
"外孙男"
|
||
],
|
||
"{G0},d,s,w": [
|
||
"外孙妇"
|
||
],
|
||
"{G0},d,s,s": [
|
||
"外曾孙",
|
||
"外曾孙男"
|
||
],
|
||
"{G0},d,s,s,w": [
|
||
"外曾孙妇"
|
||
],
|
||
"{G0},d,s,s,s": [
|
||
"外玄孙",
|
||
"外玄孙男"
|
||
],
|
||
"{G0},d,s,s,d": [
|
||
"外玄孙女"
|
||
],
|
||
"{G0},d,s,d": [
|
||
"外曾孙女"
|
||
],
|
||
"{G0},d,s,d,h": [
|
||
"外曾孙婿"
|
||
],
|
||
"{G0},d,s,d,s": [
|
||
"外玄外孙",
|
||
"外玄外孙男"
|
||
],
|
||
"{G0},d,s,d,d": [
|
||
"外玄外孙女"
|
||
],
|
||
"{G0},d,d": [
|
||
"外孙女"
|
||
],
|
||
"{G0},d,d,h": [
|
||
"外孙婿"
|
||
],
|
||
"{G0},d,d,s": [
|
||
"外曾外孙",
|
||
"外曾外孙男"
|
||
],
|
||
"{G0},d,d,s,w": [
|
||
"外曾外孙妇"
|
||
],
|
||
"{G0},d,d,s,s": [
|
||
"外曾外曾孙",
|
||
"外曾外曾孙男"
|
||
],
|
||
"{G0},d,d,s,d": [
|
||
"外曾外曾孙女"
|
||
],
|
||
"{G0},d,d,d": [
|
||
"外曾外孙女"
|
||
],
|
||
"{G0},d,d,d,h": [
|
||
"外曾外孙婿"
|
||
],
|
||
"{G0},d,d,d,s": [
|
||
"外曾外曾外孙"
|
||
],
|
||
"{G0},d,d,d,d": [
|
||
"外曾外曾外孙女"
|
||
],
|
||
"{M2W},xb": [
|
||
"舅祖父"
|
||
],
|
||
"{M2W},xb,w": [
|
||
"舅祖母"
|
||
],
|
||
"{M2W},xb,s&o": [
|
||
"舅表伯父"
|
||
],
|
||
"{M2W},xb,s&o,w": [
|
||
"舅表伯母"
|
||
],
|
||
"{M2W},xb,s&l": [
|
||
"舅表叔父"
|
||
],
|
||
"{M2W},xb,s&l,w": [
|
||
"舅表叔母"
|
||
],
|
||
"{M2W},xb,d": [
|
||
"舅表姑母"
|
||
],
|
||
"{M2W},xb,d,h": [
|
||
"舅表姑父"
|
||
],
|
||
"{M2W},xs": [
|
||
"姨祖母"
|
||
],
|
||
"{M2W},xs,h": [
|
||
"姨祖父"
|
||
],
|
||
"{M2W},xs,s&o": [
|
||
"姨伯父"
|
||
],
|
||
"{M2W},xs,s&o,w": [
|
||
"姨伯母"
|
||
],
|
||
"{M2W},xs,s&l": [
|
||
"姨叔父"
|
||
],
|
||
"{M2W},xs,s&l,w": [
|
||
"姨叔母"
|
||
],
|
||
"{M2W},xs,d": [
|
||
"姨姑母"
|
||
],
|
||
"{M2W},xs,d,h": [
|
||
"姨姑父"
|
||
],
|
||
"{M2M},xb": [
|
||
"叔祖父"
|
||
],
|
||
"{M2M},xb,w": [
|
||
"叔祖母"
|
||
],
|
||
"{M2M},xb,s&o": [
|
||
"堂伯父"
|
||
],
|
||
"{M2M},xb,s&o,w": [
|
||
"堂伯母"
|
||
],
|
||
"{M2M},xb,s&l": [
|
||
"堂叔父"
|
||
],
|
||
"{M2M},xb,s&l,w": [
|
||
"堂叔母"
|
||
],
|
||
"{M2M},xb,d": [
|
||
"堂姑母"
|
||
],
|
||
"{M2M},xb,d,h": [
|
||
"堂姑父"
|
||
],
|
||
"{M2M},xs": [
|
||
"姑祖母"
|
||
],
|
||
"{M2M},xs,h": [
|
||
"姑祖父"
|
||
],
|
||
"{M2M},xs,s&o": [
|
||
"姑表伯父"
|
||
],
|
||
"{M2M},xs,s&o,w": [
|
||
"姑表伯母"
|
||
],
|
||
"{M2M},xs,s&l": [
|
||
"姑表叔父"
|
||
],
|
||
"{M2M},xs,s&l,w": [
|
||
"姑表叔母"
|
||
],
|
||
"{M2M},xs,d": [
|
||
"姑表姑母"
|
||
],
|
||
"{M2M},xs,d,h": [
|
||
"姑表姑父"
|
||
],
|
||
"{M1W},f": [
|
||
"外祖父"
|
||
],
|
||
"{M1W},f,xb,s": [
|
||
"堂舅父"
|
||
],
|
||
"{M1W},f,xb,s,w": [
|
||
"堂舅母"
|
||
],
|
||
"{M1W},f,xb,d": [
|
||
"堂姨母"
|
||
],
|
||
"{M1W},f,xb,d,h": [
|
||
"堂姨父"
|
||
],
|
||
"{M1W},f,ob": [
|
||
"伯外祖父"
|
||
],
|
||
"{M1W},f,ob,w": [
|
||
"伯外祖母"
|
||
],
|
||
"{M1W},f,lb": [
|
||
"叔外祖父"
|
||
],
|
||
"{M1W},f,lb,w": [
|
||
"叔外祖母"
|
||
],
|
||
"{M1W},f,xs": [
|
||
"姑外祖母"
|
||
],
|
||
"{M1W},f,xs,h": [
|
||
"姑外祖父"
|
||
],
|
||
"{M1W},f,xs,s": [
|
||
"姑表舅父"
|
||
],
|
||
"{M1W},f,xs,s,w": [
|
||
"姑表舅母"
|
||
],
|
||
"{M1W},f,xs,d": [
|
||
"姑表姨母"
|
||
],
|
||
"{M1W},f,xs,d,h": [
|
||
"姑表姨父"
|
||
],
|
||
"{M1W},m": [
|
||
"外祖母"
|
||
],
|
||
"{M1W},m,xb": [
|
||
"舅外祖父"
|
||
],
|
||
"{M1W},m,xb,w": [
|
||
"舅外祖母"
|
||
],
|
||
"{M1W},m,xb,s": [
|
||
"舅表舅父"
|
||
],
|
||
"{M1W},m,xb,s,w": [
|
||
"舅表舅母"
|
||
],
|
||
"{M1W},m,xb,d": [
|
||
"舅表姨母"
|
||
],
|
||
"{M1W},m,xb,d,h": [
|
||
"舅表姨父"
|
||
],
|
||
"{M1W},m,xs": [
|
||
"姨外祖母"
|
||
],
|
||
"{M1W},m,xs,h": [
|
||
"姨外祖父"
|
||
],
|
||
"{M1W},m,xs,s": [
|
||
"姨舅父"
|
||
],
|
||
"{M1W},m,xs,s,w": [
|
||
"姨舅母"
|
||
],
|
||
"{M1W},m,xs,d": [
|
||
"姨姨母"
|
||
],
|
||
"{M1W},m,xs,d,h": [
|
||
"姨姨父"
|
||
],
|
||
"{M1W},xb": [
|
||
"舅父"
|
||
],
|
||
"{M1W},xb,w": [
|
||
"舅母"
|
||
],
|
||
"{M1W},xb,[s|d]": [
|
||
"舅表兄弟姊妹"
|
||
],
|
||
"{M1W},xb,s": [
|
||
"舅表兄弟"
|
||
],
|
||
"{M1W},xb,s,w": [
|
||
"舅表兄弟妇"
|
||
],
|
||
"{M1W},xb,s&o": [
|
||
"舅表兄"
|
||
],
|
||
"{M1W},xb,s&o,w": [
|
||
"舅表兄妇"
|
||
],
|
||
"{M1W},xb,s&l": [
|
||
"舅表弟"
|
||
],
|
||
"{M1W},xb,s&l,w": [
|
||
"舅表弟妇"
|
||
],
|
||
"{M1W},xb,s,s": [
|
||
"舅表侄男",
|
||
"侄男"
|
||
],
|
||
"{M1W},xb,s,s,w": [
|
||
"舅表侄妇",
|
||
"侄妇"
|
||
],
|
||
"{M1W},xb,s,d": [
|
||
"舅表侄女",
|
||
"侄女"
|
||
],
|
||
"{M1W},xb,s,d,h": [
|
||
"舅表侄婿",
|
||
"侄婿"
|
||
],
|
||
"{M1W},xb,d": [
|
||
"舅表姊妹"
|
||
],
|
||
"{M1W},xb,d,h": [
|
||
"舅表姊妹壻"
|
||
],
|
||
"{M1W},xb,d&o": [
|
||
"舅表姊"
|
||
],
|
||
"{M1W},xb,d&o,h": [
|
||
"舅表姊壻"
|
||
],
|
||
"{M1W},xb,d&l": [
|
||
"舅表妹"
|
||
],
|
||
"{M1W},xb,d&l,h": [
|
||
"舅表妹壻"
|
||
],
|
||
"{M1W},xb,d,s": [
|
||
"舅表甥男",
|
||
"甥男"
|
||
],
|
||
"{M1W},xb,d,s,w": [
|
||
"舅表甥妇",
|
||
"甥妇"
|
||
],
|
||
"{M1W},xb,d,d": [
|
||
"舅表甥女",
|
||
"甥女"
|
||
],
|
||
"{M1W},xb,d,d,h": [
|
||
"舅表甥婿",
|
||
"甥婿"
|
||
],
|
||
"{M1W},xs": [
|
||
"姨母",
|
||
"姨妈"
|
||
],
|
||
"{M1W},xs,h": [
|
||
"姨父",
|
||
"姨丈",
|
||
"姨夫"
|
||
],
|
||
"{M1W},xs,[s|d]": [
|
||
"姨表兄弟姊妹"
|
||
],
|
||
"{M1W},xs,s": [
|
||
"姨表兄弟"
|
||
],
|
||
"{M1W},xs,s,w": [
|
||
"姨表兄弟妇"
|
||
],
|
||
"{M1W},xs,s&o": [
|
||
"姨表兄"
|
||
],
|
||
"{M1W},xs,s&o,w": [
|
||
"姨表兄妇"
|
||
],
|
||
"{M1W},xs,s&l": [
|
||
"姨表弟"
|
||
],
|
||
"{M1W},xs,s&l,w": [
|
||
"姨表弟妇"
|
||
],
|
||
"{M1W},xs,s,s": [
|
||
"姨表侄男",
|
||
"侄男"
|
||
],
|
||
"{M1W},xs,s,s,w": [
|
||
"姨表侄妇",
|
||
"侄妇"
|
||
],
|
||
"{M1W},xs,s,d": [
|
||
"姨表侄女",
|
||
"侄女"
|
||
],
|
||
"{M1W},xs,s,d,h": [
|
||
"姨表侄婿",
|
||
"侄婿"
|
||
],
|
||
"{M1W},xs,d": [
|
||
"姨表姊妹"
|
||
],
|
||
"{M1W},xs,d,h": [
|
||
"姨表姊妹壻"
|
||
],
|
||
"{M1W},xs,d&o": [
|
||
"姨表姊"
|
||
],
|
||
"{M1W},xs,d&o,h": [
|
||
"姨表姊壻"
|
||
],
|
||
"{M1W},xs,d&l": [
|
||
"姨表妹"
|
||
],
|
||
"{M1W},xs,d&l,h": [
|
||
"姨表妹壻"
|
||
],
|
||
"{M1W},xs,d,s": [
|
||
"姨表甥男",
|
||
"甥男"
|
||
],
|
||
"{M1W},xs,d,s,w": [
|
||
"姨表甥妇",
|
||
"甥妇"
|
||
],
|
||
"{M1W},xs,d,d": [
|
||
"姨表甥女",
|
||
"甥女"
|
||
],
|
||
"{M1W},xs,d,d,h": [
|
||
"姨表甥婿",
|
||
"甥婿"
|
||
],
|
||
"{M1M},f": [
|
||
"祖父"
|
||
],
|
||
"{M1M},f,xb,s&o": [
|
||
"堂伯父"
|
||
],
|
||
"{M1M},f,xb,s&o,w": [
|
||
"堂伯母"
|
||
],
|
||
"{M1M},f,xb,s&l": [
|
||
"堂叔父"
|
||
],
|
||
"{M1M},f,xb,s&l,w": [
|
||
"堂叔母"
|
||
],
|
||
"{M1M},f,xb,d": [
|
||
"堂姑母"
|
||
],
|
||
"{M1M},f,xb,d,h": [
|
||
"堂姑父"
|
||
],
|
||
"{M1M},f,ob": [
|
||
"伯祖父"
|
||
],
|
||
"{M1M},f,ob,w": [
|
||
"伯祖母"
|
||
],
|
||
"{M1M},f,lb": [
|
||
"叔祖父"
|
||
],
|
||
"{M1M},f,lb,w": [
|
||
"叔祖母"
|
||
],
|
||
"{M1M},f,xs": [
|
||
"姑祖母"
|
||
],
|
||
"{M1M},f,xs,h": [
|
||
"姑祖父"
|
||
],
|
||
"{M1M},f,xs,s&o": [
|
||
"姑表伯父"
|
||
],
|
||
"{M1M},f,xs,s&o,w": [
|
||
"姑表伯母"
|
||
],
|
||
"{M1M},f,xs,s&l": [
|
||
"姑表叔父"
|
||
],
|
||
"{M1M},f,xs,s&l,w": [
|
||
"姑表叔母"
|
||
],
|
||
"{M1M},f,xs,d": [
|
||
"姑表姑母"
|
||
],
|
||
"{M1M},f,xs,d,h": [
|
||
"姑表姑父"
|
||
],
|
||
"{M1M},m": [
|
||
"祖母"
|
||
],
|
||
"{M1M},m,xb": [
|
||
"舅祖父"
|
||
],
|
||
"{M1M},m,xb,w": [
|
||
"舅祖母"
|
||
],
|
||
"{M1M},m,xb,s&o": [
|
||
"舅表伯父"
|
||
],
|
||
"{M1M},m,xb,s&o,w": [
|
||
"舅表伯母"
|
||
],
|
||
"{M1M},m,xb,s&l": [
|
||
"舅表叔父"
|
||
],
|
||
"{M1M},m,xb,s&l,w": [
|
||
"舅表叔母"
|
||
],
|
||
"{M1M},m,xb,d": [
|
||
"舅表姑母"
|
||
],
|
||
"{M1M},m,xb,d,h": [
|
||
"舅表姑父"
|
||
],
|
||
"{M1M},m,xs": [
|
||
"姨祖母"
|
||
],
|
||
"{M1M},m,xs,h": [
|
||
"姨祖父"
|
||
],
|
||
"{M1M},m,xs,s&o": [
|
||
"姨伯父"
|
||
],
|
||
"{M1M},m,xs,s&o,w": [
|
||
"姨伯母"
|
||
],
|
||
"{M1M},m,xs,s&l": [
|
||
"姨叔父"
|
||
],
|
||
"{M1M},m,xs,s&l,w": [
|
||
"姨叔母"
|
||
],
|
||
"{M1M},m,xs,d": [
|
||
"姨姑母"
|
||
],
|
||
"{M1M},m,xs,d,h": [
|
||
"姨姑父"
|
||
],
|
||
"{M1M},xb": [
|
||
"叔伯父"
|
||
],
|
||
"{M1M},xb,w": [
|
||
"叔伯母"
|
||
],
|
||
"{M1M},ob": [
|
||
"伯父"
|
||
],
|
||
"{M1M},ob,w": [
|
||
"伯母"
|
||
],
|
||
"{M1M},lb": [
|
||
"叔父"
|
||
],
|
||
"{M1M},lb,w": [
|
||
"叔母"
|
||
],
|
||
"{M1M},xb,[s|d]": [
|
||
"叔表兄弟姊妹"
|
||
],
|
||
"{M1M},xb,s": [
|
||
"叔表兄弟"
|
||
],
|
||
"{M1M},xb,s,w": [
|
||
"叔表兄弟妇"
|
||
],
|
||
"{M1M},xb,s&o": [
|
||
"叔表兄"
|
||
],
|
||
"{M1M},xb,s&o,w": [
|
||
"叔表兄妇"
|
||
],
|
||
"{M1M},xb,s&l": [
|
||
"叔表弟"
|
||
],
|
||
"{M1M},xb,s&l,w": [
|
||
"叔表弟妇"
|
||
],
|
||
"{M1M},xb,s,s": [
|
||
"叔表侄男",
|
||
"侄男"
|
||
],
|
||
"{M1M},xb,s,s,w": [
|
||
"叔表侄妇",
|
||
"侄妇"
|
||
],
|
||
"{M1M},xb,s,d": [
|
||
"叔表侄女",
|
||
"侄女"
|
||
],
|
||
"{M1M},xb,s,d,h": [
|
||
"叔表侄婿",
|
||
"侄婿"
|
||
],
|
||
"{M1M},xb,d": [
|
||
"叔表姊妹"
|
||
],
|
||
"{M1M},xb,d,h": [
|
||
"叔表姊妹壻"
|
||
],
|
||
"{M1M},xb,d&o": [
|
||
"叔表姊"
|
||
],
|
||
"{M1M},xb,d&o,h": [
|
||
"叔表姊壻"
|
||
],
|
||
"{M1M},xb,d&l": [
|
||
"叔表妹"
|
||
],
|
||
"{M1M},xb,d&l,h": [
|
||
"叔表妹壻"
|
||
],
|
||
"{M1M},xb,d,s": [
|
||
"叔表甥男",
|
||
"甥男"
|
||
],
|
||
"{M1M},xb,d,s,w": [
|
||
"叔表甥妇",
|
||
"甥妇"
|
||
],
|
||
"{M1M},xb,d,d": [
|
||
"叔表甥女",
|
||
"甥女"
|
||
],
|
||
"{M1M},xb,d,d,h": [
|
||
"叔表甥婿",
|
||
"甥婿"
|
||
],
|
||
"{M1M},xs": [
|
||
"姑母",
|
||
"姑妈"
|
||
],
|
||
"{M1M},xs,h": [
|
||
"姑父",
|
||
"姑丈",
|
||
"姑夫"
|
||
],
|
||
"{M1M},xs,[s|d]": [
|
||
"姑表兄弟姊妹"
|
||
],
|
||
"{M1M},xs,s": [
|
||
"姑表兄弟"
|
||
],
|
||
"{M1M},xs,s,w": [
|
||
"姑表兄弟妇"
|
||
],
|
||
"{M1M},xs,s&o": [
|
||
"姑表兄"
|
||
],
|
||
"{M1M},xs,s&o,w": [
|
||
"姑表兄妇"
|
||
],
|
||
"{M1M},xs,s&l": [
|
||
"姑表弟"
|
||
],
|
||
"{M1M},xs,s&l,w": [
|
||
"姑表弟妇"
|
||
],
|
||
"{M1M},xs,s,s": [
|
||
"姑表侄男",
|
||
"侄男"
|
||
],
|
||
"{M1M},xs,s,s,w": [
|
||
"姑表侄妇",
|
||
"侄妇"
|
||
],
|
||
"{M1M},xs,s,d": [
|
||
"姑表侄女",
|
||
"侄女"
|
||
],
|
||
"{M1M},xs,s,d,h": [
|
||
"姑表侄婿",
|
||
"侄婿"
|
||
],
|
||
"{M1M},xs,d": [
|
||
"姑表姊妹"
|
||
],
|
||
"{M1M},xs,d,h": [
|
||
"姑表姊妹壻"
|
||
],
|
||
"{M1M},xs,d&o": [
|
||
"姑表姊"
|
||
],
|
||
"{M1M},xs,d&o,h": [
|
||
"姑表姊壻"
|
||
],
|
||
"{M1M},xs,d&l": [
|
||
"姑表妹"
|
||
],
|
||
"{M1M},xs,d&l,h": [
|
||
"姑表妹壻"
|
||
],
|
||
"{M1M},xs,d,s": [
|
||
"姑表甥男",
|
||
"甥男"
|
||
],
|
||
"{M1M},xs,d,s,w": [
|
||
"姑表甥妇",
|
||
"甥妇"
|
||
],
|
||
"{M1M},xs,d,d": [
|
||
"姑表甥女",
|
||
"甥女"
|
||
],
|
||
"{M1M},xs,d,d,h": [
|
||
"姑表甥婿",
|
||
"甥婿"
|
||
],
|
||
"{M0},f": [
|
||
"父"
|
||
],
|
||
"{M0},f,f": [
|
||
"祖父"
|
||
],
|
||
"{M0},f,f,ob": [
|
||
"伯祖父"
|
||
],
|
||
"{M0},f,f,ob,w": [
|
||
"伯祖母"
|
||
],
|
||
"{M0},f,f,lb": [
|
||
"叔祖父"
|
||
],
|
||
"{M0},f,f,lb,w": [
|
||
"叔祖母"
|
||
],
|
||
"{M0},f,f,xs": [
|
||
"姑祖母"
|
||
],
|
||
"{M0},f,f,xs,h": [
|
||
"姑祖父"
|
||
],
|
||
"{M0},f,m": [
|
||
"祖母"
|
||
],
|
||
"{M0},f,m,xb": [
|
||
"舅祖父"
|
||
],
|
||
"{M0},f,m,xb,w": [
|
||
"舅祖母"
|
||
],
|
||
"{M0},f,m,xs": [
|
||
"姨祖母"
|
||
],
|
||
"{M0},f,m,xs,h": [
|
||
"姨祖父"
|
||
],
|
||
"{M0},f,ob": [
|
||
"伯父"
|
||
],
|
||
"{M0},f,ob,w": [
|
||
"伯母"
|
||
],
|
||
"{M0},f,lb": [
|
||
"叔父"
|
||
],
|
||
"{M0},f,lb,w": [
|
||
"叔母"
|
||
],
|
||
"{M0},f,xb,[s|d]": [
|
||
"叔表兄弟姊妹",
|
||
"叔表姊妹兄弟"
|
||
],
|
||
"{M0},f,xb,s": [
|
||
"叔表兄弟"
|
||
],
|
||
"{M0},f,xb,s,w": [
|
||
"叔表兄弟妇"
|
||
],
|
||
"{M0},f,xb,s&o": [
|
||
"叔表兄"
|
||
],
|
||
"{M0},f,xb,s&o,w": [
|
||
"叔表兄妇"
|
||
],
|
||
"{M0},f,xb,s&l": [
|
||
"叔表弟"
|
||
],
|
||
"{M0},f,xb,s&l,w": [
|
||
"叔表弟妇"
|
||
],
|
||
"{M0},f,xb,d": [
|
||
"叔表姊妹"
|
||
],
|
||
"{M0},f,xb,d,h": [
|
||
"叔表姊妹壻"
|
||
],
|
||
"{M0},f,xb,d&o": [
|
||
"叔表姊"
|
||
],
|
||
"{M0},f,xb,d&o,h": [
|
||
"叔表姊壻"
|
||
],
|
||
"{M0},f,xb,d&l": [
|
||
"叔表妹"
|
||
],
|
||
"{M0},f,xb,d&l,h": [
|
||
"叔表妹壻"
|
||
],
|
||
"{M0},f,xs": [
|
||
"姑母",
|
||
"姑妈"
|
||
],
|
||
"{M0},f,xs,h": [
|
||
"姑父",
|
||
"姑丈",
|
||
"姑夫"
|
||
],
|
||
"{M0},f,xs,[s|d]": [
|
||
"姑表兄弟姊妹",
|
||
"姑表姊妹兄弟"
|
||
],
|
||
"{M0},f,xs,s": [
|
||
"姑表兄弟"
|
||
],
|
||
"{M0},f,xs,s,w": [
|
||
"姑表兄弟妇"
|
||
],
|
||
"{M0},f,xs,s&o": [
|
||
"姑表兄"
|
||
],
|
||
"{M0},f,xs,s&o,w": [
|
||
"姑表兄妇"
|
||
],
|
||
"{M0},f,xs,s&l": [
|
||
"姑表弟"
|
||
],
|
||
"{M0},f,xs,s&l,w": [
|
||
"姑表弟妇"
|
||
],
|
||
"{M0},f,xs,d": [
|
||
"姑表姊妹"
|
||
],
|
||
"{M0},f,xs,d,h": [
|
||
"姑表姊妹壻"
|
||
],
|
||
"{M0},f,xs,d&o": [
|
||
"姑表姊"
|
||
],
|
||
"{M0},f,xs,d&o,h": [
|
||
"姑表姊壻"
|
||
],
|
||
"{M0},f,xs,d&l": [
|
||
"姑表妹"
|
||
],
|
||
"{M0},f,xs,d&l,h": [
|
||
"姑表妹壻"
|
||
],
|
||
"{M0},m": [
|
||
"母"
|
||
],
|
||
"{M0},m,f": [
|
||
"外祖父"
|
||
],
|
||
"{M0},m,f,ob": [
|
||
"伯外祖父"
|
||
],
|
||
"{M0},m,f,ob,w": [
|
||
"伯外祖母"
|
||
],
|
||
"{M0},m,f,lb": [
|
||
"叔外祖父"
|
||
],
|
||
"{M0},m,f,lb,w": [
|
||
"叔外祖母"
|
||
],
|
||
"{M0},m,f,xs": [
|
||
"姑外祖母"
|
||
],
|
||
"{M0},m,f,xs,h": [
|
||
"姑外祖父"
|
||
],
|
||
"{M0},m,m": [
|
||
"外祖母"
|
||
],
|
||
"{M0},m,m,xb": [
|
||
"舅外祖父"
|
||
],
|
||
"{M0},m,m,xb,w": [
|
||
"舅外祖母"
|
||
],
|
||
"{M0},m,m,xs": [
|
||
"姨外祖母"
|
||
],
|
||
"{M0},m,m,xs,h": [
|
||
"姨外祖父"
|
||
],
|
||
"{M0},m,xb": [
|
||
"舅父"
|
||
],
|
||
"{M0},m,xb,w": [
|
||
"舅母"
|
||
],
|
||
"{M0},m,xb,[s|d]": [
|
||
"舅表兄弟姊妹",
|
||
"舅表姊妹兄弟"
|
||
],
|
||
"{M0},m,xb,s": [
|
||
"舅表兄弟"
|
||
],
|
||
"{M0},m,xb,s,w": [
|
||
"舅表兄弟妇"
|
||
],
|
||
"{M0},m,xb,s&o": [
|
||
"舅表兄"
|
||
],
|
||
"{M0},m,xb,s&o,w": [
|
||
"舅表兄妇"
|
||
],
|
||
"{M0},m,xb,s&l": [
|
||
"舅表弟"
|
||
],
|
||
"{M0},m,xb,s&l,w": [
|
||
"舅表弟妇"
|
||
],
|
||
"{M0},m,xb,d": [
|
||
"舅表姊妹"
|
||
],
|
||
"{M0},m,xb,d,h": [
|
||
"舅表姊妹壻"
|
||
],
|
||
"{M0},m,xb,d&o": [
|
||
"舅表姊"
|
||
],
|
||
"{M0},m,xb,d&o,h": [
|
||
"舅表姊壻"
|
||
],
|
||
"{M0},m,xb,d&l": [
|
||
"舅表妹"
|
||
],
|
||
"{M0},m,xb,d&l,h": [
|
||
"舅表妹壻"
|
||
],
|
||
"{M0},m,xs": [
|
||
"姨母",
|
||
"姨妈"
|
||
],
|
||
"{M0},m,xs,h": [
|
||
"姨父",
|
||
"姨丈",
|
||
"姨夫"
|
||
],
|
||
"{M0},m,xs,[s|d]": [
|
||
"姨兄弟姊妹",
|
||
"姨姊妹兄弟"
|
||
],
|
||
"{M0},m,xs,s": [
|
||
"姨兄弟"
|
||
],
|
||
"{M0},m,xs,s,w": [
|
||
"姨兄弟妇"
|
||
],
|
||
"{M0},m,xs,s&o": [
|
||
"姨兄"
|
||
],
|
||
"{M0},m,xs,s&o,w": [
|
||
"姨兄妇"
|
||
],
|
||
"{M0},m,xs,s&l": [
|
||
"姨弟"
|
||
],
|
||
"{M0},m,xs,s&l,w": [
|
||
"姨弟妇"
|
||
],
|
||
"{M0},m,xs,d": [
|
||
"姨姊妹"
|
||
],
|
||
"{M0},m,xs,d,h": [
|
||
"姨姊妹壻"
|
||
],
|
||
"{M0},m,xs,d&o": [
|
||
"姨姊"
|
||
],
|
||
"{M0},m,xs,d&o,h": [
|
||
"姨姊壻"
|
||
],
|
||
"{M0},m,xs,d&l": [
|
||
"姨妹"
|
||
],
|
||
"{M0},m,xs,d&l,h": [
|
||
"姨妹壻"
|
||
],
|
||
"{M0},xb": [
|
||
"兄弟"
|
||
],
|
||
"{M0},xb,w": [
|
||
"兄弟妇"
|
||
],
|
||
"{M0},xb&o": [
|
||
"兄"
|
||
],
|
||
"{M0},xb&o,w": [
|
||
"兄妇",
|
||
"兄嫂",
|
||
"嫂子"
|
||
],
|
||
"{M0},xb&l": [
|
||
"弟"
|
||
],
|
||
"{M0},xb&l,w": [
|
||
"弟妇",
|
||
"弟妹"
|
||
],
|
||
"{M0},xb,s": [
|
||
"侄男",
|
||
"侄子",
|
||
"侄儿"
|
||
],
|
||
"{M0},xb,s,w": [
|
||
"侄妇"
|
||
],
|
||
"{M0},xb,d": [
|
||
"侄女"
|
||
],
|
||
"{M0},xb,d,h": [
|
||
"侄婿"
|
||
],
|
||
"{M0},xs": [
|
||
"姊妹"
|
||
],
|
||
"{M0},xs,h": [
|
||
"姊妹壻"
|
||
],
|
||
"{M0},xs&o": [
|
||
"姊"
|
||
],
|
||
"{M0},xs&o,h": [
|
||
"姊壻",
|
||
"姐夫"
|
||
],
|
||
"{M0},xs&l": [
|
||
"妹"
|
||
],
|
||
"{M0},xs&l,h": [
|
||
"妹壻",
|
||
"妹夫"
|
||
],
|
||
"{M0},xs,s": [
|
||
"甥男"
|
||
],
|
||
"{M0},xs,s,w": [
|
||
"甥妇"
|
||
],
|
||
"{M0},xs,d": [
|
||
"甥女"
|
||
],
|
||
"{M0},xs,d,h": [
|
||
"甥婿"
|
||
],
|
||
"{M-1},f": [
|
||
"兄弟"
|
||
],
|
||
"{M-1},f&o": [
|
||
"兄"
|
||
],
|
||
"{M-1},f&l": [
|
||
"弟"
|
||
],
|
||
"{M-1},f,f": [
|
||
"父"
|
||
],
|
||
"{M-1},f,f,f": [
|
||
"祖父"
|
||
],
|
||
"{M-1},f,f,m": [
|
||
"祖母"
|
||
],
|
||
"{M-1},f,f,ob": [
|
||
"伯父"
|
||
],
|
||
"{M-1},f,f,ob,w": [
|
||
"伯母"
|
||
],
|
||
"{M-1},f,f,lb": [
|
||
"叔父"
|
||
],
|
||
"{M-1},f,f,lb,w": [
|
||
"叔母"
|
||
],
|
||
"{M-1},f,m": [
|
||
"母"
|
||
],
|
||
"{M-1},f,m,f": [
|
||
"外祖父"
|
||
],
|
||
"{M-1},f,m,m": [
|
||
"外祖母"
|
||
],
|
||
"{M-1},f,xb": [
|
||
"叔兄弟"
|
||
],
|
||
"{M-1},f,xb,w": [
|
||
"叔兄弟妇"
|
||
],
|
||
"{M-1},f,ob": [
|
||
"叔兄"
|
||
],
|
||
"{M-1},f,ob,w": [
|
||
"叔兄妇"
|
||
],
|
||
"{M-1},f,lb": [
|
||
"叔弟"
|
||
],
|
||
"{M-1},f,lb,w": [
|
||
"叔弟妇"
|
||
],
|
||
"{M-1},f,xb,s": [
|
||
"叔男"
|
||
],
|
||
"{M-1},f,xb,d": [
|
||
"叔女"
|
||
],
|
||
"{M-1},f,xs": [
|
||
"姑姊妹"
|
||
],
|
||
"{M-1},f,xs,h": [
|
||
"姑姊妹壻"
|
||
],
|
||
"{M-1},f,os": [
|
||
"姑姊"
|
||
],
|
||
"{M-1},f,os,h": [
|
||
"姑姊壻"
|
||
],
|
||
"{M-1},f,ls": [
|
||
"姑妹"
|
||
],
|
||
"{M-1},f,ls,h": [
|
||
"姑妹壻"
|
||
],
|
||
"{M-1},f,xs,s": [
|
||
"姑男"
|
||
],
|
||
"{M-1},f,xs,d": [
|
||
"姑女"
|
||
],
|
||
"{M-1},m": [
|
||
"姊妹"
|
||
],
|
||
"{M-1},m&o": [
|
||
"姊"
|
||
],
|
||
"{M-1},m&l": [
|
||
"妹"
|
||
],
|
||
"{M-1},m,f": [
|
||
"父"
|
||
],
|
||
"{M-1},m,f,f": [
|
||
"祖父"
|
||
],
|
||
"{M-1},m,f,m": [
|
||
"祖母"
|
||
],
|
||
"{M-1},m,m": [
|
||
"母"
|
||
],
|
||
"{M-1},m,m,f": [
|
||
"外祖父"
|
||
],
|
||
"{M-1},m,m,m": [
|
||
"外祖母"
|
||
],
|
||
"{M-1},m,xb": [
|
||
"舅兄弟"
|
||
],
|
||
"{M-1},m,xb,w": [
|
||
"舅兄弟妇"
|
||
],
|
||
"{M-1},m,ob": [
|
||
"舅兄"
|
||
],
|
||
"{M-1},m,ob,w": [
|
||
"舅兄妇"
|
||
],
|
||
"{M-1},m,lb": [
|
||
"舅弟"
|
||
],
|
||
"{M-1},m,lb,w": [
|
||
"舅弟妇"
|
||
],
|
||
"{M-1},m,xb,s": [
|
||
"舅男"
|
||
],
|
||
"{M-1},m,xb,d": [
|
||
"舅女"
|
||
],
|
||
"{M-1},m,xs": [
|
||
"姨姊妹"
|
||
],
|
||
"{M-1},m,xs,h": [
|
||
"姨姊妹壻"
|
||
],
|
||
"{M-1},m,os": [
|
||
"姨姊"
|
||
],
|
||
"{M-1},m,os,h": [
|
||
"姨姊壻"
|
||
],
|
||
"{M-1},m,ls": [
|
||
"姨妹"
|
||
],
|
||
"{M-1},m,ls,h": [
|
||
"姨妹壻"
|
||
],
|
||
"{M-1},m,xs,s": [
|
||
"姨男"
|
||
],
|
||
"{M-1},m,xs,d": [
|
||
"姨女"
|
||
],
|
||
"{M-1},xb": [
|
||
"男"
|
||
],
|
||
"{M-1},xb,w": [
|
||
"妇"
|
||
],
|
||
"{M-1},xb,s": [
|
||
"孙男"
|
||
],
|
||
"{M-1},xb,s,w": [
|
||
"孙妇"
|
||
],
|
||
"{M-1},xb,d": [
|
||
"孙女"
|
||
],
|
||
"{M-1},xb,d,h": [
|
||
"孙婿"
|
||
],
|
||
"{M-1},xs": [
|
||
"女"
|
||
],
|
||
"{M-1},xs,h": [
|
||
"婿"
|
||
],
|
||
"{M-1},xs,s": [
|
||
"外孙男"
|
||
],
|
||
"{M-1},xs,s,w": [
|
||
"外孙妇"
|
||
],
|
||
"{M-1},xs,d": [
|
||
"外孙女"
|
||
],
|
||
"{M-1},xs,d,h": [
|
||
"外孙婿"
|
||
],
|
||
"{M-2},f": [
|
||
"男"
|
||
],
|
||
"{M-2},m": [
|
||
"女"
|
||
],
|
||
"{M-2},[f|m],f&o": [
|
||
"兄"
|
||
],
|
||
"{M-2},[f|m],f&l": [
|
||
"弟"
|
||
],
|
||
"{M-2},[f|m],m&o": [
|
||
"姊"
|
||
],
|
||
"{M-2},[f|m],m&l": [
|
||
"妹"
|
||
],
|
||
"{M-2},xb": [
|
||
"孙男"
|
||
],
|
||
"{M-2},xb,w": [
|
||
"孙妇"
|
||
],
|
||
"{M-2},xs": [
|
||
"孙女"
|
||
],
|
||
"{M-2},xs,h": [
|
||
"孙婿"
|
||
]
|
||
}, n = {
|
||
"": [
|
||
"自己",
|
||
"我",
|
||
"俺",
|
||
"吾",
|
||
"本人",
|
||
"在下"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f,f,f,f": [
|
||
"先祖父",
|
||
"先太爷",
|
||
"十二世祖"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f,f,f,m": [
|
||
"先祖母",
|
||
"先太奶"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f,f,f": [
|
||
"始祖父",
|
||
"始太爷",
|
||
"十一世祖"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f,f,m": [
|
||
"始祖母",
|
||
"始太奶"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f,f": [
|
||
"开祖父",
|
||
"开太爷",
|
||
"十世祖"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f,m": [
|
||
"开祖母",
|
||
"开太奶"
|
||
],
|
||
"f,f,f,f,f,f,f,f,f": [
|
||
"鼻祖父",
|
||
"鼻太爷",
|
||
"九世祖"
|
||
],
|
||
"f,f,f,f,f,f,f,f,m": [
|
||
"鼻祖母",
|
||
"鼻太奶"
|
||
],
|
||
"f,f,f,f,f,f,f,f": [
|
||
"远祖父",
|
||
"远太爷",
|
||
"八世祖"
|
||
],
|
||
"f,f,f,f,f,f,f,m": [
|
||
"远祖母",
|
||
"远太奶"
|
||
],
|
||
"f,f,f,f,f,f,f": [
|
||
"太祖父",
|
||
"太太爷",
|
||
"七世祖"
|
||
],
|
||
"f,f,f,f,f,f,m": [
|
||
"太祖母",
|
||
"太太奶"
|
||
],
|
||
"f,f,f,f,f,f": [
|
||
"烈祖父",
|
||
"烈太爷",
|
||
"六世祖"
|
||
],
|
||
"f,f,f,f,f,m": [
|
||
"烈祖母",
|
||
"烈太奶"
|
||
],
|
||
"f,f,f,f,f": [
|
||
"天祖父",
|
||
"天太爷",
|
||
"五世祖"
|
||
],
|
||
"f,f,f,f,m": [
|
||
"天祖母",
|
||
"天太奶"
|
||
],
|
||
"f,f,f,f": [
|
||
"高祖父",
|
||
"外曾外曾外毑父",
|
||
"曾曾祖父",
|
||
"祖太公",
|
||
"祖太爷",
|
||
"高太爷",
|
||
"祖太翁",
|
||
"祖太爷爷",
|
||
"四世祖"
|
||
],
|
||
"f,f,f,m": [
|
||
"高祖母",
|
||
"外曾外曾外毑母",
|
||
"曾曾祖母",
|
||
"祖太婆",
|
||
"祖太奶",
|
||
"高太奶",
|
||
"祖太姆",
|
||
"祖太奶奶"
|
||
],
|
||
"f,f,m,f": [
|
||
"高外祖父",
|
||
"外曾外曾毑父",
|
||
"高外翁"
|
||
],
|
||
"f,f,m,m": [
|
||
"高外祖母",
|
||
"外曾外曾毑母",
|
||
"高外婆"
|
||
],
|
||
"f,m,f,f": [
|
||
"曾外曾祖父",
|
||
"外高外毑父"
|
||
],
|
||
"f,m,f,m": [
|
||
"曾外曾祖母",
|
||
"外高外毑母"
|
||
],
|
||
"f,m,m,f": [
|
||
"曾外曾外祖父",
|
||
"外高毑父"
|
||
],
|
||
"f,m,m,m": [
|
||
"曾外曾外祖母",
|
||
"外高毑母"
|
||
],
|
||
"m,f,f,f": [
|
||
"外高祖父",
|
||
"曾外曾外毑父"
|
||
],
|
||
"m,f,f,m": [
|
||
"外高祖母",
|
||
"曾外曾外毑母"
|
||
],
|
||
"m,f,m,f": [
|
||
"外高外祖父",
|
||
"曾外曾祖毑父"
|
||
],
|
||
"m,f,m,m": [
|
||
"外高外祖母",
|
||
"曾外曾祖毑母"
|
||
],
|
||
"m,m,f,f": [
|
||
"外曾外曾祖父",
|
||
"高外毑父"
|
||
],
|
||
"m,m,f,m": [
|
||
"外曾外曾祖母",
|
||
"高外毑母"
|
||
],
|
||
"m,m,m,f": [
|
||
"外曾外曾外祖父",
|
||
"高毑父"
|
||
],
|
||
"m,m,m,m": [
|
||
"外曾外曾外祖母",
|
||
"高毑母"
|
||
],
|
||
"f,f,f": [
|
||
"曾祖父",
|
||
"曾祖",
|
||
"外曾外毑父",
|
||
"太公",
|
||
"太爷",
|
||
"老太爷",
|
||
"太翁",
|
||
"太爷爷",
|
||
"曾爷爷",
|
||
"公太",
|
||
"佬嗲",
|
||
"祖爷",
|
||
"三世祖"
|
||
],
|
||
"f,f,m": [
|
||
"曾祖母",
|
||
"外曾外毑母",
|
||
"太婆",
|
||
"太奶",
|
||
"老太奶",
|
||
"太嬷",
|
||
"太姆",
|
||
"太奶奶",
|
||
"曾奶奶",
|
||
"婆太",
|
||
"老娭毑"
|
||
],
|
||
"f,m,f": [
|
||
"曾外祖父",
|
||
"曾外祖",
|
||
"外曾毑父",
|
||
"太外公",
|
||
"太外爷",
|
||
"太外翁",
|
||
"太外爷爷"
|
||
],
|
||
"f,m,m": [
|
||
"曾外祖母",
|
||
"外曾毑母",
|
||
"太外婆",
|
||
"太外奶",
|
||
"太外嬷",
|
||
"太外姆",
|
||
"太外奶奶"
|
||
],
|
||
"m,f,f": [
|
||
"外曾祖父",
|
||
"外曾祖",
|
||
"曾外毑父",
|
||
"外太公",
|
||
"外太爷",
|
||
"外太翁",
|
||
"外太爷爷"
|
||
],
|
||
"m,f,m": [
|
||
"外曾祖母",
|
||
"曾外毑母",
|
||
"外太婆",
|
||
"外太奶",
|
||
"外太嬷",
|
||
"外太姆",
|
||
"外太奶奶"
|
||
],
|
||
"m,m,f": [
|
||
"外曾外祖父",
|
||
"外曾外祖",
|
||
"曾毑父",
|
||
"外太外公",
|
||
"外太外爷",
|
||
"外太外翁",
|
||
"外太外爷爷",
|
||
"外太姥爷"
|
||
],
|
||
"m,m,m": [
|
||
"外曾外祖母",
|
||
"曾毑母",
|
||
"外太外婆",
|
||
"外太外奶",
|
||
"外太外嬷",
|
||
"外太外姆",
|
||
"外太外奶奶",
|
||
"外太姥姥"
|
||
],
|
||
"f,f": [
|
||
"爷爷",
|
||
"祖父",
|
||
"奶爷",
|
||
"奶爹",
|
||
"阿爷",
|
||
"阿公",
|
||
"亚爷",
|
||
"亚公",
|
||
"依爷",
|
||
"嗲嗲",
|
||
"大父",
|
||
"祖君",
|
||
"爷",
|
||
"爷儿",
|
||
"爷老",
|
||
"爷老子",
|
||
"爷老倌",
|
||
"二世祖"
|
||
],
|
||
"f,m": [
|
||
"奶奶",
|
||
"祖母",
|
||
"阿奶",
|
||
"奶娘",
|
||
"阿姆",
|
||
"阿婆",
|
||
"亚嬷",
|
||
"亚婆",
|
||
"依奶",
|
||
"阿嬷",
|
||
"大母",
|
||
"重慈",
|
||
"奶",
|
||
"嫲嫲",
|
||
"婻婻",
|
||
"娭毑",
|
||
"嗯奶",
|
||
"娘姆",
|
||
"媪婆",
|
||
"亲婆"
|
||
],
|
||
"m,f": [
|
||
"外公",
|
||
"外祖父",
|
||
"姥爷",
|
||
"阿公",
|
||
"外爷",
|
||
"客公",
|
||
"毑父",
|
||
"毑公",
|
||
"姥公",
|
||
"舅家爷",
|
||
"嘎公",
|
||
"嘎爹",
|
||
,
|
||
"嘎嘎爹",
|
||
"嘎爷爷",
|
||
"尕公",
|
||
"毑爹",
|
||
"毑爷",
|
||
"外大父",
|
||
"姥爹",
|
||
"魏公",
|
||
"魏爷",
|
||
"简爷"
|
||
],
|
||
"m,m": [
|
||
"外婆",
|
||
"外祖母",
|
||
"姥姥",
|
||
"阿婆",
|
||
"外奶",
|
||
"客婆",
|
||
"毑母",
|
||
"毑婆",
|
||
"姥婆",
|
||
"舅家婆",
|
||
"嘎嘎",
|
||
"嘎婆",
|
||
"嘎嘎婆",
|
||
"嘎奶奶",
|
||
"尕婆",
|
||
"毑娘",
|
||
"毑毑",
|
||
"外大母",
|
||
"姥娘",
|
||
"魏婆",
|
||
"魏奶",
|
||
"简婆",
|
||
"阿嬷",
|
||
"外嬷",
|
||
"嫲嫲",
|
||
"好婆",
|
||
"嫏嫏",
|
||
"嫏娘"
|
||
],
|
||
"f,f,ob": [
|
||
"伯公",
|
||
"伯祖",
|
||
"伯翁",
|
||
"大爷爷",
|
||
"大嗲",
|
||
"大爷",
|
||
"大公",
|
||
"大阿爷"
|
||
],
|
||
"f,f,ob,w": [
|
||
"伯婆",
|
||
"姆婆",
|
||
"大奶奶",
|
||
"伯娭毑"
|
||
],
|
||
"f,f,lb": [
|
||
"叔公",
|
||
"叔祖",
|
||
"叔翁",
|
||
"小爷爷",
|
||
"晚公",
|
||
"幺爷",
|
||
"细嗲"
|
||
],
|
||
"f,f,lb,w": [
|
||
"叔婆",
|
||
"婶婆",
|
||
"小奶奶",
|
||
"叔娭毑",
|
||
"晚婆",
|
||
"幺奶"
|
||
],
|
||
"f,f,xb": [
|
||
"伯叔祖父",
|
||
"从祖父",
|
||
"几爷爷",
|
||
"几大爷",
|
||
"几嗲",
|
||
"几爷",
|
||
"几公"
|
||
],
|
||
"f,f,xb,w": [
|
||
"伯叔祖母",
|
||
"从祖母",
|
||
"几奶奶",
|
||
"几大娘",
|
||
"几奶",
|
||
"几婆"
|
||
],
|
||
"f,f,xs": [
|
||
"姑奶奶",
|
||
"祖姑",
|
||
"姑奶",
|
||
"恩婆",
|
||
"姑娭毑"
|
||
],
|
||
"f,f,xs,h": [
|
||
"姑爷爷",
|
||
"祖姑丈",
|
||
"恩爹",
|
||
"姑丈公",
|
||
"丈公"
|
||
],
|
||
"f,m,xb": [
|
||
"舅爷爷",
|
||
"舅祖",
|
||
"舅爹",
|
||
"太舅父"
|
||
],
|
||
"f,m,xb,w": [
|
||
"舅奶奶",
|
||
"妗婆",
|
||
"舅婆",
|
||
"妗奶",
|
||
"太舅母"
|
||
],
|
||
"f,m,xs": [
|
||
"姨奶奶",
|
||
"姨奶",
|
||
"姨娭毑"
|
||
],
|
||
"f,m,xs,h": [
|
||
"姨爷爷",
|
||
"姨公公",
|
||
"姨爹",
|
||
"姨丈公",
|
||
"丈公"
|
||
],
|
||
"m,f,ob": [
|
||
"伯外公",
|
||
"外伯祖",
|
||
"伯外祖",
|
||
"大外公",
|
||
"大姥爷",
|
||
"大外爷"
|
||
],
|
||
"m,f,ob,w": [
|
||
"伯外婆",
|
||
"外姆婆",
|
||
"大外婆",
|
||
"大姥姥",
|
||
"大姥奶"
|
||
],
|
||
"m,f,lb": [
|
||
"叔外公",
|
||
"外叔祖",
|
||
"叔外祖",
|
||
"小外公",
|
||
"小姥爷",
|
||
"小外爷"
|
||
],
|
||
"m,f,lb,w": [
|
||
"叔外婆",
|
||
"外婶婆",
|
||
"小外婆",
|
||
"小姥姥",
|
||
"婶姥姥",
|
||
"小姥奶"
|
||
],
|
||
"m,f,xb": [
|
||
"堂外祖父",
|
||
"几外公",
|
||
"几姥爷",
|
||
"几外爷"
|
||
],
|
||
"m,f,xb,w": [
|
||
"堂外祖母",
|
||
"几外婆",
|
||
"几姥姥",
|
||
"几姥奶",
|
||
"几外奶",
|
||
"几姥"
|
||
],
|
||
"m,f,xs": [
|
||
"姑外婆",
|
||
"姑婆",
|
||
"恩婆"
|
||
],
|
||
"m,f,xs,h": [
|
||
"姑外公",
|
||
"姑公",
|
||
"恩爹",
|
||
"外姑丈公",
|
||
"外丈公"
|
||
],
|
||
"m,m,xb": [
|
||
"舅外公",
|
||
"舅公",
|
||
"舅爹"
|
||
],
|
||
"m,m,xb,w": [
|
||
"舅外婆",
|
||
"舅婆",
|
||
"妗姥姥",
|
||
"妗姥娘",
|
||
"妗姥",
|
||
"外妗婆"
|
||
],
|
||
"m,m,xs": [
|
||
"姨外婆",
|
||
"姨婆"
|
||
],
|
||
"m,m,xs,h": [
|
||
"姨外公",
|
||
"姨公",
|
||
"外姨丈公",
|
||
"外丈公"
|
||
],
|
||
f: [
|
||
"爸爸",
|
||
"父亲",
|
||
"老父亲",
|
||
"老爸",
|
||
"阿爸",
|
||
"阿父",
|
||
"阿爹",
|
||
"老窦",
|
||
"爹地",
|
||
"依爹",
|
||
"老爹",
|
||
"老汉",
|
||
"老爷子",
|
||
"老子",
|
||
"牙老子",
|
||
"爸",
|
||
"父",
|
||
"爹",
|
||
"老汉儿",
|
||
"牙老倌",
|
||
"爸比",
|
||
"爹爹",
|
||
"爹啲",
|
||
"一世祖"
|
||
],
|
||
"f,ob": [
|
||
"伯父",
|
||
"伯伯",
|
||
"伯爸",
|
||
"伯爷",
|
||
"依伯",
|
||
"世父",
|
||
"大爹",
|
||
"大爸",
|
||
"大爸爸",
|
||
"伯儿",
|
||
"大伯",
|
||
"大爷",
|
||
"大大",
|
||
"阿伯",
|
||
"几伯",
|
||
"伯"
|
||
],
|
||
"f,ob,w": [
|
||
"伯母",
|
||
"伯妈",
|
||
"伯娘",
|
||
"依姆",
|
||
"世母",
|
||
"大娘",
|
||
"大妈",
|
||
"大妈妈",
|
||
"伯妇",
|
||
"大嬷",
|
||
"大姆妈",
|
||
"伯姐",
|
||
"姆"
|
||
],
|
||
"f,lb": [
|
||
"叔叔",
|
||
"叔父",
|
||
"叔爸",
|
||
"叔爹",
|
||
"阿叔",
|
||
"叔儿",
|
||
"仲父",
|
||
"季父",
|
||
"叔仔",
|
||
"依叔",
|
||
"小叔",
|
||
"小爹",
|
||
"小爸",
|
||
"几叔",
|
||
"叔"
|
||
],
|
||
"f,lb,w": [
|
||
"婶婶",
|
||
"婶母",
|
||
"婶妈",
|
||
"婶娘",
|
||
"阿婶",
|
||
"婶儿",
|
||
"仲母",
|
||
"季母",
|
||
"叔妇",
|
||
"依婶",
|
||
"小婶",
|
||
"小娘",
|
||
"小妈",
|
||
"几婶",
|
||
"婶",
|
||
"婶子",
|
||
"家婶",
|
||
"叔母",
|
||
"叔妈",
|
||
"叔娘",
|
||
"婶爹",
|
||
"嬢嬢"
|
||
],
|
||
"f,xb,s&o": [
|
||
"堂哥",
|
||
"堂老兄"
|
||
],
|
||
"f,xb,s&o,w": [
|
||
"堂嫂",
|
||
"堂兄嫂"
|
||
],
|
||
"f,xb,s&l": [
|
||
"堂弟",
|
||
"堂老弟"
|
||
],
|
||
"f,xb,s&l,w": [
|
||
"堂弟媳",
|
||
"堂弟妇",
|
||
"堂弟妹"
|
||
],
|
||
"f,xb,s,s": [
|
||
"堂侄",
|
||
"再从子"
|
||
],
|
||
"f,xb,s,s,w": [
|
||
"堂侄媳妇"
|
||
],
|
||
"f,xb,s,s,s": [
|
||
"堂侄孙",
|
||
"再从孙"
|
||
],
|
||
"f,xb,s,s,s,s": [
|
||
"堂曾孙",
|
||
"再曾孙"
|
||
],
|
||
"f,xb,s,s,s,s,s": [
|
||
"堂玄孙",
|
||
"再玄孙"
|
||
],
|
||
"f,xb,s,d": [
|
||
"堂侄女"
|
||
],
|
||
"f,xb,s,d,h": [
|
||
"堂侄女婿"
|
||
],
|
||
"f,xb,d&o": [
|
||
"堂姐",
|
||
"堂大姐"
|
||
],
|
||
"f,xb,d&o,h": [
|
||
"堂姐夫"
|
||
],
|
||
"f,xb,d&l": [
|
||
"堂妹",
|
||
"堂细妹"
|
||
],
|
||
"f,xb,d&l,h": [
|
||
"堂妹夫"
|
||
],
|
||
"f,xb,d,s": [
|
||
"堂外甥"
|
||
],
|
||
"f,xb,d,s,w": [
|
||
"堂外甥媳妇"
|
||
],
|
||
"f,xb,d,d": [
|
||
"堂外甥女"
|
||
],
|
||
"f,xb,d,d,h": [
|
||
"堂外甥女婿"
|
||
],
|
||
"f,os": [
|
||
"大姑",
|
||
"姑姊",
|
||
"姑嬷"
|
||
],
|
||
"f,os,h": [
|
||
"大姑丈",
|
||
"大姑夫",
|
||
"恩伯"
|
||
],
|
||
"f,ls": [
|
||
"小姑",
|
||
"姑姐",
|
||
"姑妹",
|
||
"姑仔",
|
||
"尕娘",
|
||
"幺姑姐",
|
||
"老姑"
|
||
],
|
||
"f,ls,h": [
|
||
"小姑丈",
|
||
"小姑夫",
|
||
"恩叔"
|
||
],
|
||
"f,xs": [
|
||
"姑妈",
|
||
"姑母",
|
||
"姑姑",
|
||
"恩妈",
|
||
"几姑",
|
||
"姑",
|
||
"阿姑",
|
||
"嬢嬢",
|
||
"娘娘"
|
||
],
|
||
"f,xs,h": [
|
||
"姑丈",
|
||
"姑父",
|
||
"姑爸",
|
||
"恩爸",
|
||
"姑伯",
|
||
"姑爹",
|
||
"姑夫",
|
||
"姑婿",
|
||
"姑郎",
|
||
"亘"
|
||
],
|
||
"f,f,xb,s&o": [
|
||
"堂伯"
|
||
],
|
||
"f,f,xb,s&o,w": [
|
||
"堂伯母"
|
||
],
|
||
"f,f,xb,s&l": [
|
||
"堂叔"
|
||
],
|
||
"f,f,xb,s&l,w": [
|
||
"堂婶"
|
||
],
|
||
"f,f,xb,s": [
|
||
"堂伯叔父",
|
||
"堂叔伯",
|
||
"从父"
|
||
],
|
||
"f,f,xb,s,w": [
|
||
"堂伯叔母",
|
||
"从母"
|
||
],
|
||
"f,f,xb,s,s&o": [
|
||
"从堂兄"
|
||
],
|
||
"f,f,xb,s,s&l": [
|
||
"从堂弟"
|
||
],
|
||
"f,f,xb,s,s,s": [
|
||
"从堂侄",
|
||
"三从子"
|
||
],
|
||
"f,f,xb,s,s,s,s": [
|
||
"从堂侄孙",
|
||
"三从孙"
|
||
],
|
||
"f,f,xb,s,s,s,s,s": [
|
||
"从堂侄曾孙",
|
||
"三曾孙"
|
||
],
|
||
"f,f,xb,s,s,s,s,s,s": [
|
||
"从堂侄玄孙",
|
||
"三玄孙"
|
||
],
|
||
"f,f,xb,d": [
|
||
"堂姑"
|
||
],
|
||
"f,f,xb,d,h": [
|
||
"堂姑丈"
|
||
],
|
||
"f,f,f,xb": [
|
||
"伯叔曾祖父"
|
||
],
|
||
"f,f,f,xb,w": [
|
||
"伯叔曾祖母"
|
||
],
|
||
"f,f,f,xb,s": [
|
||
"堂伯叔祖父"
|
||
],
|
||
"f,f,f,xb,s,w": [
|
||
"堂伯叔祖母"
|
||
],
|
||
"f,f,f,xb,s,s&o": [
|
||
"从伯父"
|
||
],
|
||
"f,f,f,xb,s,s&o,w": [
|
||
"从伯母"
|
||
],
|
||
"f,f,f,xb,s,s&l": [
|
||
"从叔父"
|
||
],
|
||
"f,f,f,xb,s,s&l,w": [
|
||
"从叔母"
|
||
],
|
||
"f,f,f,xb,s,s": [
|
||
"从伯叔父",
|
||
"再从父"
|
||
],
|
||
"f,f,f,xb,s,s,w": [
|
||
"从伯叔母",
|
||
"再从母"
|
||
],
|
||
"f,f,f,xb,s,s,s&o": [
|
||
"族兄"
|
||
],
|
||
"f,f,f,xb,s,s,s&l": [
|
||
"族弟"
|
||
],
|
||
"f,f,f,xb,s,s,s,s": [
|
||
"族侄",
|
||
"四从子",
|
||
"族子"
|
||
],
|
||
"f,f,f,xb,s,s,s,s,s": [
|
||
"族侄孙",
|
||
"四从孙",
|
||
"族孙"
|
||
],
|
||
"f,f,f,xb,s,s,s,s,s,s": [
|
||
"族侄曾孙",
|
||
"四曾孙",
|
||
"族曾孙"
|
||
],
|
||
"f,f,f,xb,s,s,s,s,s,s,s": [
|
||
"族侄玄孙",
|
||
"四玄孙",
|
||
"族玄孙"
|
||
],
|
||
"f,f,f,f,xb": [
|
||
"伯叔高祖父"
|
||
],
|
||
"f,f,f,f,xb,w": [
|
||
"伯叔高祖母"
|
||
],
|
||
"f,f,f,f,xb,s": [
|
||
"堂伯叔曾祖父"
|
||
],
|
||
"f,f,f,f,xb,s,w": [
|
||
"堂伯叔曾祖母"
|
||
],
|
||
"f,f,f,f,xb,s,s": [
|
||
"从伯叔祖父"
|
||
],
|
||
"f,f,f,f,xb,s,s,w": [
|
||
"从伯叔祖母"
|
||
],
|
||
"f,f,f,f,xb,s,s,s&o": [
|
||
"族伯父"
|
||
],
|
||
"f,f,f,f,xb,s,s,s&o,w": [
|
||
"族伯母"
|
||
],
|
||
"f,f,f,f,xb,s,s,s&l": [
|
||
"族叔父"
|
||
],
|
||
"f,f,f,f,xb,s,s,s&l,w": [
|
||
"族叔母"
|
||
],
|
||
"f,f,f,f,xb,s,s,s": [
|
||
"族伯叔父",
|
||
"三从父",
|
||
"族父"
|
||
],
|
||
"f,f,f,f,xb,s,s,s,w": [
|
||
"族伯叔母",
|
||
"三从母",
|
||
"族母"
|
||
],
|
||
m: [
|
||
"妈妈",
|
||
"母亲",
|
||
"老母亲",
|
||
"老妈",
|
||
"阿妈",
|
||
"阿母",
|
||
"阿娘",
|
||
"老母",
|
||
"妈咪",
|
||
"依妈",
|
||
"老娘",
|
||
"老乸",
|
||
"老妈子",
|
||
"妈子",
|
||
"娘老子",
|
||
"妈",
|
||
"母",
|
||
"娘",
|
||
"阿毑",
|
||
"姆嬷",
|
||
"姆妈",
|
||
"娘亲"
|
||
],
|
||
"m,ob": [
|
||
"大舅",
|
||
"大舅舅",
|
||
"舅伯",
|
||
"元舅"
|
||
],
|
||
"m,ob,w": [
|
||
"大舅妈",
|
||
"大妗",
|
||
"舅嫲"
|
||
],
|
||
"m,lb": [
|
||
"小舅",
|
||
"小舅舅",
|
||
"舅仔",
|
||
"舅父仔",
|
||
"尕阿舅",
|
||
"老舅"
|
||
],
|
||
"m,lb,w": [
|
||
"小舅妈",
|
||
"小妗",
|
||
"细妗"
|
||
],
|
||
"m,xb": [
|
||
"舅舅",
|
||
"舅爸",
|
||
"舅父",
|
||
"舅爹",
|
||
"娘舅",
|
||
"母舅",
|
||
"阿舅",
|
||
"妗公",
|
||
"舅台",
|
||
"几舅",
|
||
"舅"
|
||
],
|
||
"m,xb,w": [
|
||
"舅妈",
|
||
"舅母",
|
||
"舅娘",
|
||
"娘妗",
|
||
"舅妻",
|
||
"舅姆",
|
||
"舅姆妈",
|
||
"舅媳妇",
|
||
"舅妇",
|
||
"舅姥",
|
||
"老妗",
|
||
"妗子",
|
||
"妗妗",
|
||
"妗妈",
|
||
"妗娘",
|
||
"妗母",
|
||
"阿妗",
|
||
"妗门",
|
||
"妗婆仔",
|
||
"妗儿妈",
|
||
"妗",
|
||
"嬢嬢"
|
||
],
|
||
"m,os": [
|
||
"大姨",
|
||
"大姨夫",
|
||
"姨嬷"
|
||
],
|
||
"m,os,h": [
|
||
"大姨丈",
|
||
"姨伯"
|
||
],
|
||
"m,ls": [
|
||
"小姨",
|
||
"姨仔",
|
||
"老姨"
|
||
],
|
||
"m,ls,h": [
|
||
"小姨丈",
|
||
"小姨夫",
|
||
"老姨夫",
|
||
"姨叔"
|
||
],
|
||
"m,xs": [
|
||
"姨妈",
|
||
"姨母",
|
||
"姨姨",
|
||
"姨娘",
|
||
"阿姨",
|
||
"几姨",
|
||
"姨",
|
||
"从母",
|
||
"嬢嬢"
|
||
],
|
||
"m,xs,h": [
|
||
"姨丈",
|
||
"姨父",
|
||
"姨爸",
|
||
"姨爹",
|
||
"姨夫",
|
||
"姨婿",
|
||
"姨郎",
|
||
"尹"
|
||
],
|
||
"m,f,xb,s": [
|
||
"堂舅"
|
||
],
|
||
"m,f,xb,s,w": [
|
||
"堂舅妈"
|
||
],
|
||
"m,f,xb,d": [
|
||
"堂姨"
|
||
],
|
||
"m,f,xb,d,h": [
|
||
"堂姨丈"
|
||
],
|
||
"h,f,f,f": [
|
||
"曾祖公父",
|
||
"曾祖公",
|
||
"太公翁"
|
||
],
|
||
"h,f,f,m": [
|
||
"曾祖婆母",
|
||
"曾祖婆",
|
||
"太奶亲"
|
||
],
|
||
"h,f,m,f": [
|
||
"曾外祖公父",
|
||
"曾外祖公"
|
||
],
|
||
"h,f,m,m": [
|
||
"曾外祖婆母",
|
||
"曾外祖婆"
|
||
],
|
||
"h,m,f,f": [
|
||
"外曾祖公父",
|
||
"外曾祖公"
|
||
],
|
||
"h,m,f,m": [
|
||
"外曾祖婆母",
|
||
"外曾祖婆"
|
||
],
|
||
"h,m,m,f": [
|
||
"外曾外祖公父",
|
||
"外曾外祖公"
|
||
],
|
||
"h,m,m,m": [
|
||
"外曾外祖婆母",
|
||
"外曾外祖婆"
|
||
],
|
||
"h,f,f,f,ob": [
|
||
"伯曾祖公父",
|
||
"伯曾祖公",
|
||
"太伯翁"
|
||
],
|
||
"h,f,f,f,ob,w": [
|
||
"伯曾祖婆母",
|
||
"伯曾祖婆",
|
||
"太姆婆"
|
||
],
|
||
"h,f,f,f,lb": [
|
||
"叔曾祖公父",
|
||
"叔曾祖公",
|
||
"太叔翁"
|
||
],
|
||
"h,f,f,f,lb,w": [
|
||
"叔曾祖婆母",
|
||
"叔曾祖婆",
|
||
"太婶婆"
|
||
],
|
||
"h,f,f,f,xs": [
|
||
"姑曾祖婆母",
|
||
"姑曾祖婆"
|
||
],
|
||
"h,f,f,f,xs,h": [
|
||
"姑曾祖公父",
|
||
"姑曾祖婆"
|
||
],
|
||
"h,f,f": [
|
||
"祖公父",
|
||
"祖公",
|
||
"祖公公",
|
||
"祖翁",
|
||
"奶公父"
|
||
],
|
||
"h,f,m": [
|
||
"祖婆母",
|
||
"祖婆",
|
||
"祖婆婆",
|
||
"奶婆母"
|
||
],
|
||
"h,m,f": [
|
||
"外祖公父",
|
||
"毑公父",
|
||
"外祖公",
|
||
"外祖公公",
|
||
"姥公父",
|
||
"姥公"
|
||
],
|
||
"h,m,m": [
|
||
"外祖婆母",
|
||
"毑婆母",
|
||
"外祖婆",
|
||
"外祖婆婆",
|
||
"姥婆母",
|
||
"姥婆"
|
||
],
|
||
"h,f": [
|
||
"公公",
|
||
"公父",
|
||
"家公",
|
||
"家官",
|
||
"家翁",
|
||
"家爷",
|
||
"翁亲",
|
||
"老官",
|
||
"大官",
|
||
"老公公",
|
||
"老人公",
|
||
"大人公",
|
||
"公爹",
|
||
"老公爹",
|
||
"婆父",
|
||
"婆爹",
|
||
"君舅"
|
||
],
|
||
"h,m": [
|
||
"婆婆",
|
||
"婆母",
|
||
"家婆",
|
||
"家娘",
|
||
"姑亲",
|
||
"大家",
|
||
"老婆婆",
|
||
"老人婆",
|
||
"大人婆",
|
||
"婆妈",
|
||
"婆母娘",
|
||
"婆子妈",
|
||
"君姑"
|
||
],
|
||
"h,f,ob": [
|
||
"伯公父",
|
||
"伯公",
|
||
"伯翁",
|
||
"伯公公",
|
||
"伯祖",
|
||
"婆婆伯"
|
||
],
|
||
"h,f,ob,w": [
|
||
"伯婆母",
|
||
"伯婆",
|
||
"姆婆",
|
||
"伯婆婆",
|
||
"伯姆",
|
||
"婆婆伯姆"
|
||
],
|
||
"h,f,lb": [
|
||
"叔公父",
|
||
"叔公",
|
||
"叔翁",
|
||
"叔公公",
|
||
"叔祖",
|
||
"婆婆叔"
|
||
],
|
||
"h,f,lb,w": [
|
||
"叔婆母",
|
||
"叔婆",
|
||
"婶婆",
|
||
"婶婆婆",
|
||
"婶亲",
|
||
"婆婆婶子"
|
||
],
|
||
"h,f,xs": [
|
||
"姑婆母",
|
||
"姑婆",
|
||
"姑婆婆",
|
||
"婆婆姑"
|
||
],
|
||
"h,f,xs,h": [
|
||
"姑公父",
|
||
"姑公",
|
||
"姑公公",
|
||
"婆婆姑夫"
|
||
],
|
||
"h,m,xb": [
|
||
"舅公父",
|
||
"舅公",
|
||
"舅公公"
|
||
],
|
||
"h,m,xb,w": [
|
||
"舅婆母",
|
||
"舅婆",
|
||
"妗婆婆",
|
||
"舅婆婆"
|
||
],
|
||
"h,m,xs": [
|
||
"姨婆母",
|
||
"姨婆",
|
||
"姨婆婆"
|
||
],
|
||
"h,m,xs,h": [
|
||
"姨公父",
|
||
"姨公",
|
||
"姨公公"
|
||
],
|
||
h: [
|
||
"老公",
|
||
"丈夫",
|
||
"先生",
|
||
"夫",
|
||
"男人",
|
||
"新郎",
|
||
"爱爷",
|
||
"夫亲",
|
||
"夫君",
|
||
"官人",
|
||
"汉子",
|
||
"老头子",
|
||
"郎君",
|
||
"相公",
|
||
"夫婿",
|
||
"良人",
|
||
"老公仔",
|
||
"爱人",
|
||
"老伴",
|
||
"那口子",
|
||
"配偶",
|
||
"伴侣",
|
||
"伉俪",
|
||
"卿卿"
|
||
],
|
||
"h,ob": [
|
||
"大伯子",
|
||
"大伯儿",
|
||
"大伯兄",
|
||
"伯子",
|
||
"伯仔",
|
||
"伯兄",
|
||
"阿伯",
|
||
"大伯爷",
|
||
"伯爷子",
|
||
"婿伯"
|
||
],
|
||
"h,ob,w": [
|
||
"大婶子",
|
||
"大婶儿",
|
||
"大叔兄妇",
|
||
"伯兄妇",
|
||
"伯嫂",
|
||
"伯妇",
|
||
"伯姆",
|
||
"姒妇",
|
||
"姒姆",
|
||
"大伯嫂",
|
||
"姆姆",
|
||
"大姆",
|
||
"大伯妇",
|
||
"大伯娘",
|
||
"姐妇",
|
||
"阿姆"
|
||
],
|
||
"h,lb": [
|
||
"小叔子",
|
||
"小叔儿",
|
||
"小叔弟",
|
||
"叔子",
|
||
"叔仔",
|
||
"叔弟",
|
||
"阿叔",
|
||
"叔郎",
|
||
"小郎"
|
||
],
|
||
"h,lb,w": [
|
||
"小婶子",
|
||
"小婶儿",
|
||
"小叔弟妇",
|
||
"叔弟妇",
|
||
"叔嫂",
|
||
"叔妇",
|
||
"叔姆",
|
||
"娣妇",
|
||
"娣姆",
|
||
"小叔妇",
|
||
"婶婶",
|
||
"小婶",
|
||
"小婶婶"
|
||
],
|
||
"h,xb,s": [
|
||
"叔侄"
|
||
],
|
||
"h,xb,d": [
|
||
"叔侄女"
|
||
],
|
||
"h,os": [
|
||
"大姑子",
|
||
"大姑姐",
|
||
"大姑儿",
|
||
"大姑娘",
|
||
"姑姊",
|
||
"婆姐",
|
||
"婆婆姐",
|
||
"大娘姑"
|
||
],
|
||
"h,os,h": [
|
||
"大姑夫",
|
||
"大姑姐夫",
|
||
"大亘子",
|
||
"婆姐夫",
|
||
"婆婆姐夫"
|
||
],
|
||
"h,ls": [
|
||
"小姑子",
|
||
"小姑妹",
|
||
"小姑儿",
|
||
"小姑娘",
|
||
"姑妹",
|
||
"婆妹",
|
||
"婆婆妹"
|
||
],
|
||
"h,ls,h": [
|
||
"小姑夫",
|
||
"小姑妹夫",
|
||
"小亘子",
|
||
"婆妹夫",
|
||
"婆婆妹夫"
|
||
],
|
||
"h,xs": [
|
||
"姑子",
|
||
"夫姑"
|
||
],
|
||
"h,xs,h": [
|
||
"姑夫",
|
||
"姑郎"
|
||
],
|
||
"h,xs,s": [
|
||
"姑甥"
|
||
],
|
||
"h,xs,d": [
|
||
"姑甥女"
|
||
],
|
||
"w,f,f,f": [
|
||
"曾祖岳父",
|
||
"曾祖丈人",
|
||
"太爷丈人",
|
||
"祖爷丈人"
|
||
],
|
||
"w,f,f,m": [
|
||
"曾祖岳母",
|
||
"曾祖丈母",
|
||
"曾祖丈母娘",
|
||
"祖奶丈母娘",
|
||
"太奶丈母娘"
|
||
],
|
||
"w,f,m,f": [
|
||
"曾外祖岳父",
|
||
"曾外祖丈人",
|
||
"祖姥爷丈人",
|
||
"太姥爷丈"
|
||
],
|
||
"w,f,m,m": [
|
||
"曾外祖岳母",
|
||
"曾外祖丈母",
|
||
"曾外祖丈母娘",
|
||
"祖姥丈母娘",
|
||
"太姥丈母娘"
|
||
],
|
||
"w,m,f,f": [
|
||
"外曾祖岳父",
|
||
"外曾祖丈人",
|
||
"祖奶爷丈人",
|
||
"太奶爷丈人",
|
||
"祖姥爷丈人",
|
||
"太姥爷丈人"
|
||
],
|
||
"w,m,f,m": [
|
||
"外曾祖岳母",
|
||
"外曾祖丈母",
|
||
"太奶丈母娘",
|
||
"祖姥丈母娘",
|
||
"太姥丈母娘"
|
||
],
|
||
"w,m,m,f": [
|
||
"外曾外祖岳父",
|
||
"外曾外祖丈人",
|
||
"祖姥爷丈人",
|
||
"太姥爷丈人"
|
||
],
|
||
"w,m,m,m": [
|
||
"外曾外祖岳母",
|
||
"外曾外祖丈母",
|
||
"外曾外祖丈母娘",
|
||
"祖姥丈母娘",
|
||
"太姥丈母娘"
|
||
],
|
||
"w,f,f": [
|
||
"祖岳父",
|
||
"太岳父",
|
||
"奶岳父",
|
||
"祖丈人",
|
||
"爷丈人",
|
||
"奶爷丈人",
|
||
"奶丈爷",
|
||
"奶丈人",
|
||
"老丈爷"
|
||
],
|
||
"w,f,m": [
|
||
"祖岳母",
|
||
"太岳母",
|
||
"奶岳母",
|
||
"祖丈母",
|
||
"祖丈母娘",
|
||
"奶丈母娘",
|
||
"奶丈姥",
|
||
"奶丈母",
|
||
"老丈姥"
|
||
],
|
||
"w,f,ob": [
|
||
"伯岳父"
|
||
],
|
||
"w,f,ob,w": [
|
||
"伯岳母"
|
||
],
|
||
"w,f,lb": [
|
||
"叔岳父"
|
||
],
|
||
"w,f,lb,w": [
|
||
"叔岳母"
|
||
],
|
||
"w,f,f,xb,s&o": [
|
||
"姻伯丈"
|
||
],
|
||
"w,f,f,xb,s&o,w": [
|
||
"姻姆"
|
||
],
|
||
"w,f,f,xb,s&l": [
|
||
"姻叔丈"
|
||
],
|
||
"w,f,f,xb,s&l,w": [
|
||
"姻婶"
|
||
],
|
||
"w,m,f": [
|
||
"外祖岳父",
|
||
"毑岳父",
|
||
"外祖丈人爹",
|
||
"外祖丈人",
|
||
"外太岳父",
|
||
"姥岳父",
|
||
"姥丈爷",
|
||
"姥丈人",
|
||
"姥丈人爹",
|
||
"老丈爷",
|
||
"姥爷丈人"
|
||
],
|
||
"w,m,m": [
|
||
"外祖岳母",
|
||
"毑岳母",
|
||
"外祖丈母娘",
|
||
"外祖丈母",
|
||
"外太岳母",
|
||
"姥岳母",
|
||
"姥丈姥",
|
||
"姥丈母",
|
||
"姥丈母娘",
|
||
"老丈娘"
|
||
],
|
||
"w,f": [
|
||
"岳父",
|
||
"丈人",
|
||
"老丈人",
|
||
"外父",
|
||
"泰山",
|
||
"外舅",
|
||
"老亲爷",
|
||
"丈人爹",
|
||
"老干爷",
|
||
"丈人公",
|
||
"丈母爷",
|
||
"丈爷",
|
||
"丈爷爹",
|
||
"丈父",
|
||
"岳老子",
|
||
"老丈杆子",
|
||
"岳丈",
|
||
"岳翁",
|
||
"妻公",
|
||
"妇翁",
|
||
"冰翁"
|
||
],
|
||
"w,m": [
|
||
"岳母",
|
||
"丈母",
|
||
"老丈母",
|
||
"外母",
|
||
"泰水",
|
||
"外姑",
|
||
"老亲娘",
|
||
"丈人娘",
|
||
"老干娘",
|
||
"丈人婆",
|
||
"丈母娘",
|
||
"丈姥",
|
||
"丈姥娘",
|
||
"丈姆",
|
||
"岳母娘",
|
||
"丈母婆",
|
||
"丈姆婆",
|
||
"丈姆娘"
|
||
],
|
||
w: [
|
||
"老婆",
|
||
"妻子",
|
||
"媳妇",
|
||
"媳妇儿",
|
||
"媳妇子",
|
||
"太太",
|
||
"妻",
|
||
"女人",
|
||
"新娘",
|
||
"爱姥",
|
||
"妻亲",
|
||
"娘子",
|
||
"新娘子",
|
||
"夫人",
|
||
"婆娘",
|
||
"老太婆",
|
||
"内人",
|
||
"内子",
|
||
"内助",
|
||
"贤内助",
|
||
"爱妻",
|
||
"发妻",
|
||
"婆姨",
|
||
"婆子",
|
||
"老婆子",
|
||
"老婆儿",
|
||
"老婆仔",
|
||
"堂客",
|
||
"爱人",
|
||
"老伴",
|
||
"那口子",
|
||
"配偶",
|
||
"伴侣",
|
||
"伉俪",
|
||
"卿卿"
|
||
],
|
||
"w,ob": [
|
||
"大舅子",
|
||
"大舅哥",
|
||
"大舅佬",
|
||
"大阿舅",
|
||
"丈人兄",
|
||
"舅哥"
|
||
],
|
||
"w,ob,w": [
|
||
"大舅妇",
|
||
"大妗子",
|
||
"大妗儿",
|
||
"大舅姆",
|
||
"大舅兄嫂",
|
||
"大舅嫂",
|
||
"大舅姐",
|
||
"大舅媳妇",
|
||
"丈人嫂"
|
||
],
|
||
"w,lb": [
|
||
"小舅子",
|
||
"小舅弟",
|
||
"小舅佬",
|
||
"小阿舅",
|
||
"丈人弟",
|
||
"舅弟"
|
||
],
|
||
"w,lb,w": [
|
||
"小舅妇",
|
||
"小妗子",
|
||
"小妗儿",
|
||
"小舅姆",
|
||
"小舅弟妇",
|
||
"小舅嫂",
|
||
"舅弟媳",
|
||
"小舅妹",
|
||
"小舅媳妇"
|
||
],
|
||
"w,xb": [
|
||
"舅子",
|
||
"舅佬",
|
||
"妻舅",
|
||
"老婆舅",
|
||
"阿舅",
|
||
"亲家舅",
|
||
"舅老倌"
|
||
],
|
||
"w,xb,w": [
|
||
"舅嫂",
|
||
"舅妇",
|
||
"舅姆",
|
||
"妻妗",
|
||
"妗仔",
|
||
"妗子",
|
||
"妗儿"
|
||
],
|
||
"w,xb,s": [
|
||
"舅侄"
|
||
],
|
||
"w,xb,d": [
|
||
"舅侄女"
|
||
],
|
||
"w,os": [
|
||
"大姨子",
|
||
"大姨姐",
|
||
"大姨儿",
|
||
"姨姐"
|
||
],
|
||
"w,os,h": [
|
||
"大姨夫",
|
||
"大姨姐夫",
|
||
"姨姐夫",
|
||
"襟兄",
|
||
"大尹子"
|
||
],
|
||
"w,ls": [
|
||
"小姨子",
|
||
"小姨妹",
|
||
"小茙儿",
|
||
"姨妹",
|
||
"姨仔",
|
||
"姨妹子"
|
||
],
|
||
"w,ls,h": [
|
||
"小姨夫",
|
||
"小姨妹夫",
|
||
"姨妹夫",
|
||
"小茙夫",
|
||
"襟弟",
|
||
"小尹子"
|
||
],
|
||
"w,xs": [
|
||
"姨子",
|
||
"妻姨"
|
||
],
|
||
"w,xs,h": [
|
||
"连襟",
|
||
"姨夫",
|
||
"连桥",
|
||
"两桥",
|
||
"两乔",
|
||
"姨夫爷",
|
||
"老襟",
|
||
"一担挑",
|
||
"老挑",
|
||
"挑担",
|
||
"担儿挑",
|
||
"连襟儿",
|
||
"襟兄弟",
|
||
"友婿",
|
||
"妻尹",
|
||
"娅"
|
||
],
|
||
"w,xs,s": [
|
||
"姨甥"
|
||
],
|
||
"w,xs,d": [
|
||
"姨甥女"
|
||
],
|
||
ob: [
|
||
"哥哥",
|
||
"哥",
|
||
"胞兄",
|
||
"亲哥",
|
||
"兄亲",
|
||
"老哥",
|
||
"依哥",
|
||
"阿哥",
|
||
"兄台",
|
||
"大佬",
|
||
"家兄",
|
||
"兄长",
|
||
"元兄",
|
||
"长兄",
|
||
"几哥"
|
||
],
|
||
"ob,w": [
|
||
"嫂子",
|
||
"嫂",
|
||
"嫂嫂",
|
||
"阿嫂",
|
||
"家嫂",
|
||
"兄姊",
|
||
"兄嫂",
|
||
"兄妇",
|
||
"兄妻",
|
||
"几嫂"
|
||
],
|
||
"ob,s": [
|
||
"侄子",
|
||
"兄子"
|
||
],
|
||
"ob,d": [
|
||
"侄女",
|
||
"兄女"
|
||
],
|
||
lb: [
|
||
"弟弟",
|
||
"弟",
|
||
"胞弟",
|
||
"亲弟",
|
||
"弟亲",
|
||
"老弟",
|
||
"依弟",
|
||
"阿弟",
|
||
"弟子",
|
||
"细佬",
|
||
"小弟",
|
||
"几弟"
|
||
],
|
||
"lb,w": [
|
||
"弟妹",
|
||
"弟媳",
|
||
"弟媳妇",
|
||
"弟媳妇子",
|
||
"弟新妇",
|
||
"老弟嫂"
|
||
],
|
||
"lb,s": [
|
||
"侄子",
|
||
"弟子"
|
||
],
|
||
"lb,d": [
|
||
"侄女",
|
||
"弟女"
|
||
],
|
||
"xb,s": [
|
||
"侄子",
|
||
"侄男",
|
||
"侄儿子",
|
||
"侄小子",
|
||
"嫡侄",
|
||
"亲侄",
|
||
"侄儿",
|
||
"侄",
|
||
"侄仔",
|
||
"阿侄",
|
||
"老侄"
|
||
],
|
||
"xb,s,w": [
|
||
"侄媳妇",
|
||
"侄媳",
|
||
"侄嫂",
|
||
"侄妇"
|
||
],
|
||
"xb,d": [
|
||
"侄女",
|
||
"侄囡",
|
||
"侄女儿",
|
||
"侄丫头",
|
||
"侄闺女"
|
||
],
|
||
"xb,d,h": [
|
||
"侄女婿",
|
||
"侄婿",
|
||
"侄郎"
|
||
],
|
||
os: [
|
||
"姐姐",
|
||
"姐",
|
||
"胞姐",
|
||
"亲姐",
|
||
"姊亲",
|
||
"老姐",
|
||
"依姐",
|
||
"阿姐",
|
||
"姊台",
|
||
"家姐",
|
||
"长姐",
|
||
"姊仔",
|
||
"几姐"
|
||
],
|
||
"os,h": [
|
||
"姐夫",
|
||
"姐丈",
|
||
"姐婿",
|
||
"姐郎",
|
||
"姊兄",
|
||
"姐夫哥",
|
||
"胞姐夫"
|
||
],
|
||
ls: [
|
||
"妹妹",
|
||
"妹",
|
||
"胞妹",
|
||
"亲妹",
|
||
"妹亲",
|
||
"老妹",
|
||
"依妹",
|
||
"阿妹",
|
||
"妹子",
|
||
"小妹",
|
||
"妹儿",
|
||
"几妹"
|
||
],
|
||
"ls,h": [
|
||
"妹夫",
|
||
"妹丈",
|
||
"妹婿",
|
||
"妹郎",
|
||
"妹弟",
|
||
"妹夫子",
|
||
"胞妹夫"
|
||
],
|
||
"xs,s": [
|
||
"外甥",
|
||
"甥子",
|
||
"甥男",
|
||
"甥儿",
|
||
"甥儿子",
|
||
"甥",
|
||
"甥仔"
|
||
],
|
||
"xs,s,w": [
|
||
"甥媳妇",
|
||
"甥媳",
|
||
"甥嫂",
|
||
"甥妇",
|
||
"甥儿息妇儿"
|
||
],
|
||
"xs,s,s": [
|
||
"甥孙",
|
||
"远甥",
|
||
"弥甥"
|
||
],
|
||
"xs,s,d": [
|
||
"甥孙女",
|
||
"远甥女",
|
||
"弥甥女"
|
||
],
|
||
"xs,d": [
|
||
"外甥女",
|
||
"甥女",
|
||
"甥囡",
|
||
"甥女儿",
|
||
"甥闺女"
|
||
],
|
||
"xs,d,h": [
|
||
"甥女婿",
|
||
"甥婿",
|
||
"甥郎",
|
||
"甥儿息婿儿"
|
||
],
|
||
s: [
|
||
"儿子",
|
||
"男儿",
|
||
"息男",
|
||
"闺男",
|
||
"囝囝",
|
||
"囝男",
|
||
"囝儿",
|
||
"小子",
|
||
"娃子",
|
||
"男亲",
|
||
"伢子",
|
||
"长子",
|
||
"次子",
|
||
"幼子",
|
||
"儿",
|
||
"仔",
|
||
"囝",
|
||
"子",
|
||
"阿仔",
|
||
"仔仔",
|
||
"后生",
|
||
"公子",
|
||
"少爷",
|
||
"一世孙"
|
||
],
|
||
"s,w": [
|
||
"儿媳",
|
||
"儿媳妇",
|
||
"息妇儿",
|
||
"儿媳妇儿",
|
||
"新妇",
|
||
"新妇囝",
|
||
"心抱",
|
||
"息妇",
|
||
"儿妇",
|
||
"子妇",
|
||
"小妇",
|
||
"少奶奶",
|
||
"少夫人"
|
||
],
|
||
"s,w,f": [
|
||
"亲家公"
|
||
],
|
||
"s,w,f,f&o": [
|
||
"姻伯"
|
||
],
|
||
"s,w,f,f&l": [
|
||
"姻叔"
|
||
],
|
||
"s,w,m": [
|
||
"亲家母"
|
||
],
|
||
"s,w,xb": [
|
||
"姻侄",
|
||
"世侄"
|
||
],
|
||
"s,w,xb,w": [
|
||
"姻侄媳"
|
||
],
|
||
"s,w,xb,s": [
|
||
"姻侄孙"
|
||
],
|
||
"s,w,xb,d": [
|
||
"姻侄孙女"
|
||
],
|
||
"s,w,xs": [
|
||
"姻侄女"
|
||
],
|
||
"s,w,xs,h": [
|
||
"姻侄婿"
|
||
],
|
||
"s,w,xs,s": [
|
||
"姻侄外孙"
|
||
],
|
||
"s,w,xs,d": [
|
||
"姻侄外孙女"
|
||
],
|
||
"s,s": [
|
||
"孙子",
|
||
"孙男",
|
||
"孙男儿",
|
||
"孙儿",
|
||
"长孙",
|
||
"嗣孙",
|
||
"孙仔",
|
||
"孙囝",
|
||
"孙娃子",
|
||
"孙伢子",
|
||
"二世孙"
|
||
],
|
||
"s,s,w": [
|
||
"孙媳妇",
|
||
"孙媳",
|
||
"孙妇",
|
||
"孙息妇",
|
||
"孙新妇"
|
||
],
|
||
"s,s,s": [
|
||
"曾孙",
|
||
"曾孙男",
|
||
"重孙",
|
||
"重孙子",
|
||
"息仔",
|
||
"三世孙"
|
||
],
|
||
"s,s,s,w": [
|
||
"曾孙妇",
|
||
"重孙媳妇"
|
||
],
|
||
"s,s,s,s": [
|
||
"玄孙",
|
||
"元孙",
|
||
"膀孙",
|
||
"重重孙",
|
||
"四世孙"
|
||
],
|
||
"s,s,s,s,w": [
|
||
"玄孙媳妇"
|
||
],
|
||
"s,s,s,s,s": [
|
||
"来孙",
|
||
"五世孙"
|
||
],
|
||
"s,s,s,s,s,w": [
|
||
"来孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s": [
|
||
"晜孙",
|
||
"昆孙",
|
||
"六世孙"
|
||
],
|
||
"s,s,s,s,s,s,w": [
|
||
"晜孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s": [
|
||
"仍孙",
|
||
"礽孙",
|
||
"七世孙"
|
||
],
|
||
"s,s,s,s,s,s,s,w": [
|
||
"仍孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s": [
|
||
"云孙",
|
||
"八世孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,w": [
|
||
"云孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s": [
|
||
"耳孙",
|
||
"远孙",
|
||
"裔孙",
|
||
"季孙",
|
||
"九世孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,w": [
|
||
"耳孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s": [
|
||
"弥孙",
|
||
"十世孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,w": [
|
||
"弥孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,s": [
|
||
"胎孙",
|
||
"十一世孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,s,w": [
|
||
"胎孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,s,s": [
|
||
"承孙",
|
||
"十二世孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,s,s,w": [
|
||
"承孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,s,d": [
|
||
"承孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,s,d,h": [
|
||
"承孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,d": [
|
||
"胎孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,d,h": [
|
||
"胎孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,d,s": [
|
||
"承外孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,d,s,w": [
|
||
"承外孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,d,d": [
|
||
"承外孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,s,d,d,h": [
|
||
"承外孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,d": [
|
||
"弥孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,d,h": [
|
||
"弥孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,d,s": [
|
||
"胎外孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,d,s,w": [
|
||
"胎外孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,d,d": [
|
||
"胎外孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,s,d,d,h": [
|
||
"胎外孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,s,d": [
|
||
"耳孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,d,h": [
|
||
"耳孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,s,d,s": [
|
||
"弥外孙"
|
||
],
|
||
"s,s,s,s,s,s,s,s,d,s,w": [
|
||
"弥外孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,s,d,d": [
|
||
"弥外孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,s,d,d,h": [
|
||
"弥外孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,d": [
|
||
"云孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,d,h": [
|
||
"云孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,s,d,s": [
|
||
"耳外孙"
|
||
],
|
||
"s,s,s,s,s,s,s,d,s,w": [
|
||
"耳外孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,s,d,d": [
|
||
"耳外孙女"
|
||
],
|
||
"s,s,s,s,s,s,s,d,d,h": [
|
||
"耳外孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,d": [
|
||
"仍孙女",
|
||
"礽孙女"
|
||
],
|
||
"s,s,s,s,s,s,d,h": [
|
||
"仍孙女婿"
|
||
],
|
||
"s,s,s,s,s,s,d,s": [
|
||
"云外孙"
|
||
],
|
||
"s,s,s,s,s,s,d,s,w": [
|
||
"云外孙媳妇"
|
||
],
|
||
"s,s,s,s,s,s,d,d": [
|
||
"云外孙女"
|
||
],
|
||
"s,s,s,s,s,s,d,d,h": [
|
||
"云外孙女婿"
|
||
],
|
||
"s,s,s,s,s,d": [
|
||
"晜孙女"
|
||
],
|
||
"s,s,s,s,s,d,h": [
|
||
"晜孙女婿"
|
||
],
|
||
"s,s,s,s,s,d,s": [
|
||
"仍外孙"
|
||
],
|
||
"s,s,s,s,s,d,s,w": [
|
||
"仍外孙媳妇"
|
||
],
|
||
"s,s,s,s,s,d,d": [
|
||
"仍外孙女"
|
||
],
|
||
"s,s,s,s,s,d,d,h": [
|
||
"仍外孙女婿"
|
||
],
|
||
"s,s,s,s,d": [
|
||
"来孙女"
|
||
],
|
||
"s,s,s,s,d,h": [
|
||
"来孙女婿"
|
||
],
|
||
"s,s,s,s,d,s": [
|
||
"晜外孙"
|
||
],
|
||
"s,s,s,s,d,s,w": [
|
||
"晜外孙媳妇"
|
||
],
|
||
"s,s,s,s,d,d": [
|
||
"晜外孙女"
|
||
],
|
||
"s,s,s,s,d,d,h": [
|
||
"晜外孙女婿"
|
||
],
|
||
"s,s,s,d": [
|
||
"玄孙女",
|
||
"元孙女",
|
||
"膀孙女"
|
||
],
|
||
"s,s,s,d,h": [
|
||
"玄孙女婿"
|
||
],
|
||
"s,s,s,d,s": [
|
||
"来外孙"
|
||
],
|
||
"s,s,s,d,s,w": [
|
||
"来外孙媳妇"
|
||
],
|
||
"s,s,s,d,d": [
|
||
"来外孙女"
|
||
],
|
||
"s,s,s,d,d,h": [
|
||
"来外孙女婿"
|
||
],
|
||
"s,s,d": [
|
||
"曾孙女",
|
||
"重孙女",
|
||
"息女"
|
||
],
|
||
"s,s,d,h": [
|
||
"曾孙女婿"
|
||
],
|
||
"s,s,d,s": [
|
||
"玄外孙"
|
||
],
|
||
"s,s,d,s,w": [
|
||
"玄外孙媳妇"
|
||
],
|
||
"s,s,d,d": [
|
||
"玄外孙女"
|
||
],
|
||
"s,s,d,d,h": [
|
||
"玄外孙女婿"
|
||
],
|
||
"s,d": [
|
||
"孙女",
|
||
"孙女儿",
|
||
"孙囡",
|
||
"孙囡儿",
|
||
"女孙",
|
||
"孙女子"
|
||
],
|
||
"s,d,h": [
|
||
"孙女婿",
|
||
"孙婿",
|
||
"孙郎",
|
||
"孙息婿"
|
||
],
|
||
"s,d,s": [
|
||
"曾外孙",
|
||
"外息仔"
|
||
],
|
||
"s,d,s,w": [
|
||
"曾外孙媳妇"
|
||
],
|
||
"s,d,s,s": [
|
||
"曾外曾孙"
|
||
],
|
||
"s,d,s,s,w": [
|
||
"曾外曾孙媳妇"
|
||
],
|
||
"s,d,s,d": [
|
||
"曾外曾孙女"
|
||
],
|
||
"s,d,s,d,h": [
|
||
"曾外曾孙女婿"
|
||
],
|
||
"s,d,d": [
|
||
"曾外孙女",
|
||
"外息女"
|
||
],
|
||
"s,d,d,h": [
|
||
"曾外孙女婿"
|
||
],
|
||
"s,d,d,s": [
|
||
"曾外曾外孙"
|
||
],
|
||
"s,d,d,s,w": [
|
||
"曾外曾外孙媳妇"
|
||
],
|
||
"s,d,d,d": [
|
||
"曾外曾外孙女"
|
||
],
|
||
"s,d,d,d,h": [
|
||
"曾外曾外孙女婿"
|
||
],
|
||
d: [
|
||
"女儿",
|
||
"千金",
|
||
"小姐",
|
||
"掌上明珠",
|
||
"息女",
|
||
"闺女",
|
||
"囡囡",
|
||
"囡女",
|
||
"囡儿",
|
||
"乖囡",
|
||
"囡嗯",
|
||
"丫头",
|
||
"姑娘",
|
||
"妮子",
|
||
"女亲",
|
||
"长女",
|
||
"次女",
|
||
"幼女",
|
||
"女",
|
||
"阿女",
|
||
"女女"
|
||
],
|
||
"d,h": [
|
||
"女婿",
|
||
"姑爷",
|
||
"姑爷儿",
|
||
"女婿子",
|
||
"女婿儿",
|
||
"儿婿",
|
||
"子婿",
|
||
"息婿",
|
||
"小婿",
|
||
"快婿",
|
||
"郎婿",
|
||
"郎婿子",
|
||
"息婿儿",
|
||
"囝婿",
|
||
"囡婿",
|
||
"东床",
|
||
"半子",
|
||
"甥馆",
|
||
"女夫"
|
||
],
|
||
"d,h,f": [
|
||
"亲家公"
|
||
],
|
||
"d,h,f,f&o": [
|
||
"姻伯"
|
||
],
|
||
"d,h,f,f&l": [
|
||
"姻叔"
|
||
],
|
||
"d,h,m": [
|
||
"亲家母"
|
||
],
|
||
"d,h,xb": [
|
||
"姻侄",
|
||
"世侄"
|
||
],
|
||
"d,h,xb,w": [
|
||
"姻侄媳"
|
||
],
|
||
"d,h,xb,s": [
|
||
"姻侄孙"
|
||
],
|
||
"d,h,xb,d": [
|
||
"姻侄孙女"
|
||
],
|
||
"d,h,xs": [
|
||
"姻侄女"
|
||
],
|
||
"d,h,xs,h": [
|
||
"姻侄婿"
|
||
],
|
||
"d,h,xs,s": [
|
||
"姻侄外孙"
|
||
],
|
||
"d,h,xs,d": [
|
||
"姻侄外孙女"
|
||
],
|
||
"d,s": [
|
||
"外孙",
|
||
"外孙子",
|
||
"外孙儿"
|
||
],
|
||
"d,s,w": [
|
||
"外孙媳妇",
|
||
"外孙妇",
|
||
"外孙新妇"
|
||
],
|
||
"d,s,s": [
|
||
"外曾孙",
|
||
"重外孙",
|
||
"外息仔"
|
||
],
|
||
"d,s,s,w": [
|
||
"外曾孙媳妇",
|
||
"外曾孙妇"
|
||
],
|
||
"d,s,s,s": [
|
||
"外玄孙",
|
||
"外元孙",
|
||
"外膀孙"
|
||
],
|
||
"d,s,s,s,w": [
|
||
"外玄孙媳妇"
|
||
],
|
||
"d,s,s,d": [
|
||
"外玄孙女",
|
||
"外元孙女",
|
||
"外膀孙女"
|
||
],
|
||
"d,s,s,d,h": [
|
||
"外玄孙女婿"
|
||
],
|
||
"d,s,d": [
|
||
"外曾孙女",
|
||
"重外孙女",
|
||
"外息女"
|
||
],
|
||
"d,s,d,h": [
|
||
"外曾孙女婿",
|
||
"重外孙女婿"
|
||
],
|
||
"d,s,d,s": [
|
||
"外玄外孙"
|
||
],
|
||
"d,s,d,s,w": [
|
||
"外玄外孙媳妇"
|
||
],
|
||
"d,s,d,d": [
|
||
"外玄外孙女"
|
||
],
|
||
"d,s,d,d,h": [
|
||
"外玄外孙女婿"
|
||
],
|
||
"d,d": [
|
||
"外孙女",
|
||
"外孙囡",
|
||
"外孙女儿"
|
||
],
|
||
"d,d,h": [
|
||
"外孙女婿",
|
||
"外孙婿",
|
||
"外孙郎"
|
||
],
|
||
"d,d,s": [
|
||
"外曾外孙",
|
||
"外息仔"
|
||
],
|
||
"d,d,s,w": [
|
||
"外曾外孙媳妇"
|
||
],
|
||
"d,d,s,s": [
|
||
"外曾外曾孙"
|
||
],
|
||
"d,d,s,s,w": [
|
||
"外曾外曾孙媳妇"
|
||
],
|
||
"d,d,s,d": [
|
||
"外曾外曾孙女"
|
||
],
|
||
"d,d,s,d,h": [
|
||
"外曾外曾孙女婿"
|
||
],
|
||
"d,d,d": [
|
||
"外曾外孙女",
|
||
"外息女"
|
||
],
|
||
"d,d,d,h": [
|
||
"外曾外孙女婿"
|
||
],
|
||
"d,d,d,s": [
|
||
"外曾外曾外孙"
|
||
],
|
||
"d,d,d,s,w": [
|
||
"外曾外曾外孙媳妇"
|
||
],
|
||
"d,d,d,d": [
|
||
"外曾外曾外孙女"
|
||
],
|
||
"d,d,d,d,h": [
|
||
"外曾外曾外孙女婿"
|
||
],
|
||
"1,xb,w,xb": [
|
||
"叔眷兄弟"
|
||
],
|
||
"1,xb,w,xb,s": [
|
||
"叔眷舅男"
|
||
],
|
||
"1,xb,w,xb,d": [
|
||
"叔眷舅女"
|
||
],
|
||
"1,xb,w,xs": [
|
||
"叔眷姊妹"
|
||
],
|
||
"1,xb,w,xs,s": [
|
||
"叔眷姨男"
|
||
],
|
||
"1,xb,w,xs,d": [
|
||
"叔眷姨女"
|
||
],
|
||
"1,xb,s": [
|
||
"从男",
|
||
"从子"
|
||
],
|
||
"1,xb,s,s": [
|
||
"从孙"
|
||
],
|
||
"1,xb,s,s,s": [
|
||
"从曾孙"
|
||
],
|
||
"1,xb,s,s,s,s": [
|
||
"从玄孙"
|
||
],
|
||
"1,xb,s,w": [
|
||
"从妇"
|
||
],
|
||
"1,xb,d": [
|
||
"从女",
|
||
"从子"
|
||
],
|
||
"1,xb,d,h": [
|
||
"从婿"
|
||
],
|
||
"1,xs,h,xb": [
|
||
"姑姻兄弟"
|
||
],
|
||
"1,xs,h,xb,s": [
|
||
"姑姻叔男"
|
||
],
|
||
"1,xs,h,xb,d": [
|
||
"姑姻叔女"
|
||
],
|
||
"1,xs,h,xs": [
|
||
"姑姻姊妹"
|
||
],
|
||
"1,xs,h,xs,s": [
|
||
"姑姻姑男"
|
||
],
|
||
"1,xs,h,xs,d": [
|
||
"姑姻姑女"
|
||
],
|
||
"1,xs,s,s": [
|
||
"离孙男",
|
||
"离孙子"
|
||
],
|
||
"1,xs,s,d": [
|
||
"离孙女"
|
||
],
|
||
"0,xb,w,xb": [
|
||
"舅眷兄弟"
|
||
],
|
||
"0,xb,w,xb,s": [
|
||
"舅眷舅男"
|
||
],
|
||
"0,xb,w,xb,d": [
|
||
"舅眷舅女"
|
||
],
|
||
"0,xb,w,xs": [
|
||
"舅眷姊妹"
|
||
],
|
||
"0,xb,w,xs,s": [
|
||
"舅眷姨男"
|
||
],
|
||
"0,xb,w,xs,d": [
|
||
"舅眷姨女"
|
||
],
|
||
"0,xs,h,xb": [
|
||
"姨姻兄弟"
|
||
],
|
||
"0,xs,h,xb,s": [
|
||
"姨姻叔男"
|
||
],
|
||
"0,xs,h,xb,d": [
|
||
"姨姻叔女"
|
||
],
|
||
"0,xs,h,xs": [
|
||
"姨姻姊妹"
|
||
],
|
||
"0,xs,h,xs,s": [
|
||
"姨姻姑男"
|
||
],
|
||
"0,xs,h,xs,d": [
|
||
"姨姻姑女"
|
||
],
|
||
"0,xb,s": [
|
||
"娘家侄子",
|
||
"娘家侄"
|
||
],
|
||
"0,xb,s,s": [
|
||
"归孙男",
|
||
"归孙子"
|
||
],
|
||
"0,xb,s,d": [
|
||
"归孙女"
|
||
],
|
||
"0,xb,d": [
|
||
"娘家侄女"
|
||
],
|
||
"0,xs,s": [
|
||
"姨甥",
|
||
"姨甥男",
|
||
"从男",
|
||
"从子"
|
||
],
|
||
"0,xs,s,w": [
|
||
"从妇"
|
||
],
|
||
"0,xs,d": [
|
||
"姨甥女",
|
||
"从女",
|
||
"从子"
|
||
],
|
||
"0,xs,d,h": [
|
||
"从婿"
|
||
],
|
||
"0,xs,s,s": [
|
||
"姨甥孙",
|
||
"姨孙",
|
||
"姨甥孙男",
|
||
"姨孙男"
|
||
],
|
||
"0,xs,s,d": [
|
||
"姨甥孙女",
|
||
"姨孙女"
|
||
],
|
||
"0,xs,d,s": [
|
||
"姨甥外孙",
|
||
"姨外孙",
|
||
"姨甥外孙男",
|
||
"姨外孙男"
|
||
],
|
||
"0,xs,d,d": [
|
||
"姨甥外孙女",
|
||
"姨外孙女"
|
||
]
|
||
}, a = Object.assign({}, {
|
||
"[f,f|f,m|m,f],[f,m],f": [
|
||
"老太奶爷",
|
||
"祖太奶爷"
|
||
],
|
||
"[f,f|f,m|m,f],[f,m],m": [
|
||
"老太奶奶",
|
||
"祖太奶奶"
|
||
],
|
||
"[f,m|m,f|m,m],[f,m],f": [
|
||
"老太姥爷",
|
||
"祖太姥爷"
|
||
],
|
||
"[f,m|m,f|m,m],[f,m],m": [
|
||
"老太姥姥",
|
||
"祖太姥姥"
|
||
],
|
||
"[f|m],[f|m],f": [
|
||
"太老爷"
|
||
],
|
||
"[f|m],[f|m],f,ob": [
|
||
"伯太老爷"
|
||
],
|
||
"[f|m],[f|m],f,ob,w": [
|
||
"伯太老姥"
|
||
],
|
||
"[f|m],[f|m],f,lb": [
|
||
"叔太老爷"
|
||
],
|
||
"[f|m],[f|m],f,lb,w": [
|
||
"叔太老姥"
|
||
],
|
||
"[f|m],[f|m],f,xs": [
|
||
"姑太老姥"
|
||
],
|
||
"[f|m],[f|m],f,xs,h": [
|
||
"姑太老爷"
|
||
],
|
||
"[f|m],[f|m],m": [
|
||
"太老姥"
|
||
],
|
||
"[f|m],[f|m],m,xb": [
|
||
"舅太老爷"
|
||
],
|
||
"[f|m],[f|m],m,xb,w": [
|
||
"舅太老姥"
|
||
],
|
||
"[f|m],[f|m],m,xs": [
|
||
"姨太老姥"
|
||
],
|
||
"[f|m],[f|m],m,xs,h": [
|
||
"姨太老爷"
|
||
],
|
||
"[f,f|f,m|m,f],f": [
|
||
"太奶爷",
|
||
"祖奶爷",
|
||
"祖爷爷"
|
||
],
|
||
"[f,f|f,m|m,f],f,ob": [
|
||
"伯太奶爷",
|
||
"太伯奶爷"
|
||
],
|
||
"[f,f|f,m|m,f],f,ob,w": [
|
||
"伯太奶奶",
|
||
"太伯奶奶"
|
||
],
|
||
"[f,f|f,m|m,f],f,lb": [
|
||
"叔太奶爷",
|
||
"太叔奶爷"
|
||
],
|
||
"[f,f|f,m|m,f],f,lb,w": [
|
||
"叔太奶奶",
|
||
"太叔奶奶"
|
||
],
|
||
"[f,f|f,m|m,f],f,xs": [
|
||
"姑太奶奶",
|
||
"太姑奶奶"
|
||
],
|
||
"[f,f|f,m|m,f],f,xs,h": [
|
||
"姑太奶爷",
|
||
"太姑奶爷"
|
||
],
|
||
"[f,f|f,m|m,f],m": [
|
||
"太奶奶",
|
||
"祖奶奶"
|
||
],
|
||
"[f,f|f,m|m,f],m,xb": [
|
||
"舅太奶爷",
|
||
"太舅奶爷"
|
||
],
|
||
"[f,f|f,m|m,f],m,xb,w": [
|
||
"舅太奶奶",
|
||
"太舅奶奶"
|
||
],
|
||
"[f,f|f,m|m,f],m,xs": [
|
||
"姨太奶奶",
|
||
"太姨奶奶"
|
||
],
|
||
"[f,f|f,m|m,f],m,xs,h": [
|
||
"姨太奶爷",
|
||
"太姨奶爷"
|
||
],
|
||
"[f,m|m,f|m,m],f": [
|
||
"太姥爷",
|
||
"祖姥爷",
|
||
"太毑爷"
|
||
],
|
||
"[f,m|m,f|m,m],f,ob": [
|
||
"伯太姥爷",
|
||
"伯叔姥爷"
|
||
],
|
||
"[f,m|m,f|m,m],f,ob,w": [
|
||
"伯太姥姥",
|
||
"太伯姥姥"
|
||
],
|
||
"[f,m|m,f|m,m],f,lb": [
|
||
"叔太姥爷",
|
||
"太叔姥爷"
|
||
],
|
||
"[f,m|m,f|m,m],f,lb,w": [
|
||
"叔太姥姥",
|
||
"太叔姥姥"
|
||
],
|
||
"[f,m|m,f|m,m],f,xs": [
|
||
"姑太姥姥",
|
||
"太姑姥姥"
|
||
],
|
||
"[f,m|m,f|m,m],f,xs,h": [
|
||
"姑太姥爷",
|
||
"太姑姥爷"
|
||
],
|
||
"[f,m|m,f|m,m],m": [
|
||
"太姥姥",
|
||
"祖姥姥",
|
||
"太毑毑",
|
||
"太姥"
|
||
],
|
||
"[f,m|m,f|m,m],m,xb": [
|
||
"舅太姥爷",
|
||
"太舅姥爷"
|
||
],
|
||
"[f,m|m,f|m,m],m,xb,w": [
|
||
"舅太姥姥",
|
||
"太舅姥姥"
|
||
],
|
||
"[f,m|m,f|m,m],m,xs": [
|
||
"姨太姥姥",
|
||
"太姨姥姥"
|
||
],
|
||
"[f,m|m,f|m,m],m,xs,h": [
|
||
"姨太姥爷",
|
||
"太姨姥爷"
|
||
],
|
||
"[f|m],[f|m],[f|m]": [
|
||
"曾祖辈",
|
||
"祖祖",
|
||
"老太",
|
||
"阿太"
|
||
],
|
||
"[f|m],[f|m]": [
|
||
"祖辈"
|
||
],
|
||
"[f|m],f": [
|
||
"老爷"
|
||
],
|
||
"[f|m],f,ob": [
|
||
"伯老爷"
|
||
],
|
||
"[f|m],f,ob,w": [
|
||
"伯老姥"
|
||
],
|
||
"[f|m],f,lb": [
|
||
"叔老爷"
|
||
],
|
||
"[f|m],f,lb,w": [
|
||
"叔老姥"
|
||
],
|
||
"[f|m],f,xs": [
|
||
"姑老姥"
|
||
],
|
||
"[f|m],f,xs,h": [
|
||
"姑老爷"
|
||
],
|
||
"[f|m],m": [
|
||
"老姥"
|
||
],
|
||
"[f|m],m,xb": [
|
||
"舅老爷"
|
||
],
|
||
"[f|m],m,xb,w": [
|
||
"舅老姥"
|
||
],
|
||
"[f|m],m,xs": [
|
||
"姨老姥"
|
||
],
|
||
"[f|m],m,xs,h": [
|
||
"姨老爷"
|
||
],
|
||
"f,f,[f|m]": [
|
||
"曾祖父母"
|
||
],
|
||
"f,f,[f,xs|m,xb],s": [
|
||
"舅姑爷爷",
|
||
"舅姑爷"
|
||
],
|
||
"f,[f|m]": [
|
||
"祖父母",
|
||
"爷爷奶奶"
|
||
],
|
||
"f,[ob|ob,w]": [
|
||
"伯父母"
|
||
],
|
||
"f,[lb|lb,w]": [
|
||
"叔父母"
|
||
],
|
||
"f,xb,[s|d]": [
|
||
"堂兄弟姐妹",
|
||
"堂姐妹兄弟",
|
||
"从父兄弟姐妹"
|
||
],
|
||
"f,[xs|xs,h]": [
|
||
"姑父母"
|
||
],
|
||
"f,xs,[s|d]": [
|
||
"姑表兄弟姐妹"
|
||
],
|
||
"m,[f|m],f": [
|
||
"老外公",
|
||
"老外爷",
|
||
"老姥爷"
|
||
],
|
||
"m,[f|m],m,": [
|
||
"老外婆",
|
||
"老外奶",
|
||
"老姥姥",
|
||
"老姥娘",
|
||
"老嫏娘"
|
||
],
|
||
"m,[f|m]": [
|
||
"外祖父母",
|
||
"外公外婆",
|
||
"姥姥姥爷"
|
||
],
|
||
"m,f,[f,xs|m,xb],s": [
|
||
"舅姑姥爷"
|
||
],
|
||
"m,[xb|xb,w]": [
|
||
"舅父母"
|
||
],
|
||
"m,xb,[s|d]": [
|
||
"舅表兄弟姐妹"
|
||
],
|
||
"m,[xs|xs,h]": [
|
||
"姨父母"
|
||
],
|
||
"m,xs,[s|d]": [
|
||
"姨兄弟姐妹",
|
||
"姨姐妹兄弟",
|
||
"从母兄弟姐妹"
|
||
],
|
||
"[f|m]": [
|
||
"父母",
|
||
"爹娘",
|
||
"爹妈",
|
||
"爸妈",
|
||
"爸爸妈妈",
|
||
"父母亲",
|
||
"双亲",
|
||
"二亲",
|
||
"两亲",
|
||
"二老",
|
||
"高堂"
|
||
],
|
||
"[f|m],[f,xs|m,xb],s": [
|
||
"舅姑爸",
|
||
"姑舅爸"
|
||
],
|
||
"[f|m],[f,xs|m,xb],s&o,w": [
|
||
"舅姑姆",
|
||
"姑舅姆"
|
||
],
|
||
"[f|m],[f,xs|m,xb],s&l,w": [
|
||
"舅姑婶",
|
||
"姑舅婶"
|
||
],
|
||
"[f|m],[f,xs|m,xb],d": [
|
||
"姑舅娘娘"
|
||
],
|
||
"[f|m],m,xs,s": [
|
||
"两姨爸"
|
||
],
|
||
"[f|m],m,xs,s&o,w": [
|
||
"两姨姆"
|
||
],
|
||
"[f|m],m,xs,s&l,w": [
|
||
"两姨婶"
|
||
],
|
||
"[f|m],m,xs,d": [
|
||
"两姨娘娘"
|
||
],
|
||
"w,[f|m]": [
|
||
"岳父母",
|
||
"岳父岳母",
|
||
"丈人丈母",
|
||
"舅姑"
|
||
],
|
||
"w,f,[ob|ob,w]": [
|
||
"伯岳父母"
|
||
],
|
||
"w,f,[lb|lb,w]": [
|
||
"叔岳父母"
|
||
],
|
||
"w,f,[xs|xs,h]": [
|
||
"姑岳父母"
|
||
],
|
||
"w,m,[xb|xb,w]": [
|
||
"舅岳父母"
|
||
],
|
||
"w,m,[xs|xs,h]": [
|
||
"姨岳父母"
|
||
],
|
||
"w,[f,xs|m,xb],d": [
|
||
"姑舅姨子"
|
||
],
|
||
"w,[f,xs|m,xb],d,h": [
|
||
"姑舅连襟",
|
||
"姑舅连桥"
|
||
],
|
||
"h,[f|m]": [
|
||
"公婆",
|
||
"翁姑",
|
||
"姑翁",
|
||
"姑舅",
|
||
"大家官",
|
||
"公公婆婆",
|
||
"姑章",
|
||
"姑嫜"
|
||
],
|
||
"h,f,[ob|ob,w]": [
|
||
"伯公婆"
|
||
],
|
||
"h,f,[lb|lb,w]": [
|
||
"叔公婆"
|
||
],
|
||
"h,f,[xs|xs,h]": [
|
||
"姑公婆"
|
||
],
|
||
"h,m,[xb|xb,w]": [
|
||
"舅公婆"
|
||
],
|
||
"h,m,[xs|xs,h]": [
|
||
"姨公婆"
|
||
],
|
||
"[ob|lb]": [
|
||
"兄弟",
|
||
"晜弟",
|
||
"亲兄弟",
|
||
"同胞兄弟"
|
||
],
|
||
"[ob|lb],w": [
|
||
"兄弟媳妇",
|
||
"兄弟妇"
|
||
],
|
||
"[os|ls]": [
|
||
"姐妹",
|
||
"亲姐妹",
|
||
"同胞姐妹"
|
||
],
|
||
"[os|ls],h": [
|
||
"姐妹夫",
|
||
"姊妹婿"
|
||
],
|
||
"[xb|xs]": [
|
||
"兄弟姐妹",
|
||
"同胞",
|
||
"同胞兄弟姐妹",
|
||
"手足"
|
||
],
|
||
"[ob|os]": [
|
||
"哥哥姐姐"
|
||
],
|
||
"[lb|ls]": [
|
||
"弟弟妹妹"
|
||
],
|
||
"[ob|ob,w]": [
|
||
"哥哥嫂嫂",
|
||
"兄嫂"
|
||
],
|
||
"[f,xb|m,xs],[s|d]": [
|
||
"从兄弟姐妹",
|
||
"从姐妹兄弟"
|
||
],
|
||
"[f,xs|m,xb],[s|d]": [
|
||
"表兄弟姐妹",
|
||
"表姐妹兄弟",
|
||
"老表",
|
||
"阿表"
|
||
],
|
||
"[f,xs|m,xb],s": [
|
||
"姑舅兄弟",
|
||
"舅姑兄弟"
|
||
],
|
||
"[f,xs|m,xb],s&o": [
|
||
"姑舅哥",
|
||
"姑舅哥哥"
|
||
],
|
||
"[f,xs|m,xb],s&l": [
|
||
"姑舅弟",
|
||
"姑舅弟弟"
|
||
],
|
||
"[f,xs|m,xb],d": [
|
||
"姑舅姊妹",
|
||
"舅姑姊妹"
|
||
],
|
||
"[f,xs|m,xb],d&o": [
|
||
"姑舅姐",
|
||
"姑舅姐姐"
|
||
],
|
||
"[f,xs|m,xb],d&l": [
|
||
"姑舅妹",
|
||
"姑舅妹妹"
|
||
],
|
||
"[f,xs|m,xb],s,s": [
|
||
"姑舅儿子"
|
||
],
|
||
"[f,xs|m,xb],s,d": [
|
||
"姑舅女儿"
|
||
],
|
||
"[xb|xs],[s|d]": [
|
||
"侄甥"
|
||
],
|
||
"xb,[s|d]": [
|
||
"侄子女",
|
||
"侄子侄女"
|
||
],
|
||
"xs,[s|d]": [
|
||
"甥子女",
|
||
"外甥子女"
|
||
],
|
||
"[w|s|d]": [
|
||
"妻儿",
|
||
"妻小"
|
||
],
|
||
"[w|d]": [
|
||
"妻女"
|
||
],
|
||
"[s|d]": [
|
||
"子女",
|
||
"儿女",
|
||
"仔女",
|
||
"小孩",
|
||
"孩子",
|
||
"孩子们",
|
||
"孩儿",
|
||
"小孩儿",
|
||
"宝宝",
|
||
"宝贝",
|
||
"娃",
|
||
"娃子",
|
||
"儿辈",
|
||
"子辈",
|
||
"细伢",
|
||
"伢子",
|
||
"子息",
|
||
"子嗣",
|
||
"崽",
|
||
"幺儿"
|
||
],
|
||
"[s|d],[s|d]": [
|
||
"孙辈",
|
||
"孙息",
|
||
"孙枝"
|
||
],
|
||
"s,[s|d]": [
|
||
"孙子女"
|
||
],
|
||
"d,[s|d]": [
|
||
"外孙子女"
|
||
],
|
||
"s#xb,s": [
|
||
"子侄"
|
||
],
|
||
"s#s,w": [
|
||
"子媳"
|
||
],
|
||
"[s|d]#[s|d],[s|d]": [
|
||
"儿孙",
|
||
"子孙",
|
||
"孙息"
|
||
],
|
||
"[s,w|d,h],[f|m]": [
|
||
"亲家",
|
||
"儿女亲家"
|
||
],
|
||
"[s,w|d,h],f": [
|
||
"亲家公",
|
||
"亲家父",
|
||
"亲家翁",
|
||
"亲家世翁",
|
||
"姻翁"
|
||
],
|
||
"[s,w|d,h],f,f": [
|
||
"太姻翁"
|
||
],
|
||
"[s,w|d,h],f,m": [
|
||
"太姻姆"
|
||
],
|
||
"[s,w|d,h],f,f,f": [
|
||
"太姻翁"
|
||
],
|
||
"[s,w|d,h],f,f,m": [
|
||
"太姻姆"
|
||
],
|
||
"[s,w|d,h],f,f,ob": [
|
||
"姻伯翁"
|
||
],
|
||
"[s,w|d,h],f,f,ob,w": [
|
||
"姻伯姆"
|
||
],
|
||
"[s,w|d,h],f,f,lb": [
|
||
"姻叔翁"
|
||
],
|
||
"[s,w|d,h],f,f,lb,w": [
|
||
"姻叔母"
|
||
],
|
||
"[s,w|d,h],f,f,xb,s&o": [
|
||
"姻家兄"
|
||
],
|
||
"[s,w|d,h],f,f,xb,s&o,w": [
|
||
"姻家兄妇"
|
||
],
|
||
"[s,w|d,h],f,f,xb,s&l": [
|
||
"姻家弟"
|
||
],
|
||
"[s,w|d,h],f,f,xb,s&l,w": [
|
||
"姻家弟妇"
|
||
],
|
||
"[s,w|d,h],f,f,xb,s,s": [
|
||
"姻家侄"
|
||
],
|
||
"[s,w|d,h],f,f,xb,s,s,w": [
|
||
"姻家侄妇"
|
||
],
|
||
"[s,w|d,h],f,ob": [
|
||
"姻兄"
|
||
],
|
||
"[s,w|d,h],f,ob,w": [
|
||
"姻兄妇"
|
||
],
|
||
"[s,w|d,h],f,lb": [
|
||
"姻弟"
|
||
],
|
||
"[s,w|d,h],f,lb,w": [
|
||
"姻弟妇"
|
||
],
|
||
"[s,w|d,h],f,xb,s": [
|
||
"姻侄"
|
||
],
|
||
"[s,w|d,h],f,xb,s,w": [
|
||
"姻侄妇"
|
||
],
|
||
"[s,w|d,h],m": [
|
||
"亲家母",
|
||
"亲家婆",
|
||
"亲家姆",
|
||
"亲姆",
|
||
"姻姆"
|
||
],
|
||
"[s,w|d,h],m,ob": [
|
||
"姻仁兄"
|
||
],
|
||
"[s,w|d,h],m,ob,w": [
|
||
"姻仁兄妇"
|
||
],
|
||
"[s,w|d,h],m,lb": [
|
||
"姻仁弟"
|
||
],
|
||
"[s,w|d,h],m,lb,w": [
|
||
"姻仁弟妇"
|
||
],
|
||
"[s,w|d,h],[f|m],f": [
|
||
"姻太翁"
|
||
],
|
||
"[s,w|d,h],[f|m],m": [
|
||
"姻太姆"
|
||
]
|
||
}), c = {}, i = function(s) {
|
||
c[s] = {};
|
||
var f = function(f) {
|
||
L(f).forEach(function(x) {
|
||
c[s][x] = w[s][f];
|
||
});
|
||
};
|
||
for(var x in w[s])f(x);
|
||
};
|
||
for(var u in w)i(u);
|
||
var G = {}, p = function(s) {
|
||
L(s).forEach(function(f) {
|
||
G[f] = M[s];
|
||
});
|
||
};
|
||
for(var $ in M)p($);
|
||
for(var W in a = Object.assign({}, a, function(s, f) {
|
||
var x = {}, d = function() {
|
||
var d = m.match(/\{.+?\}/)[0], b = f[m], o = function() {
|
||
var f = s[d][r], o = m.replace(d, r);
|
||
if (![
|
||
"h,h",
|
||
"w,w",
|
||
"w,h",
|
||
"h,w"
|
||
].some(function(s) {
|
||
return o.includes(s);
|
||
})) {
|
||
var h = [];
|
||
f.forEach(function(s) {
|
||
b.forEach(function(f) {
|
||
f.includes("?") ? h.push(f.replace("?", s)) : h.push(s + f);
|
||
});
|
||
}), x[o] || (x[o] = a[o] || []), x[o] = h.concat(x[o]);
|
||
}
|
||
};
|
||
for(var r in s[d])o();
|
||
};
|
||
for(var m in f)d();
|
||
return x;
|
||
}(c, G)), n)a[W] = [].concat(n[W], a[W] || []);
|
||
a.o = [
|
||
"passer-by.com",
|
||
"作者"
|
||
];
|
||
var v = {
|
||
w: [
|
||
"妻",
|
||
"内",
|
||
"岳",
|
||
"岳家",
|
||
"丈人"
|
||
],
|
||
h: [
|
||
"夫",
|
||
"外",
|
||
"公",
|
||
"婆家",
|
||
"婆婆"
|
||
]
|
||
}, g = new Set(Object.values(a).flat());
|
||
for(var y in a)if (y.match(/^[fm]/) || y.match(/^[olx][bs]$|^[olx][bs],[^mf]/)) {
|
||
var S = function() {
|
||
var s = E + "," + y;
|
||
if (y.match(/[fm]/)) {
|
||
var f = s.replace(/,[ol]([sb])(,[wh])?$/, ",x$1$2").replace(/(,[sd])&[ol](,[wh])?$/, "$1$2");
|
||
if (f != s && a[f]) return 1;
|
||
}
|
||
a[s] || (a[s] = []);
|
||
var x = v[E], d = a[y];
|
||
x.forEach(function(f) {
|
||
d.forEach(function(x) {
|
||
var d = f + x;
|
||
g.has(d) || a[s].push(d);
|
||
});
|
||
});
|
||
};
|
||
for(var E in v)S();
|
||
}
|
||
var j = a, A = {}, O = Object.assign({}, j);
|
||
function N(s, f) {
|
||
if (!s) return [
|
||
""
|
||
];
|
||
var x = {
|
||
f: [
|
||
"d",
|
||
"s"
|
||
],
|
||
m: [
|
||
"d",
|
||
"s"
|
||
],
|
||
h: [
|
||
"w",
|
||
""
|
||
],
|
||
w: [
|
||
"",
|
||
"h"
|
||
],
|
||
s: [
|
||
"m",
|
||
"f"
|
||
],
|
||
d: [
|
||
"m",
|
||
"f"
|
||
],
|
||
lb: [
|
||
"os",
|
||
"ob"
|
||
],
|
||
ob: [
|
||
"ls",
|
||
"lb"
|
||
],
|
||
xb: [
|
||
"xs",
|
||
"xb"
|
||
],
|
||
ls: [
|
||
"os",
|
||
"ob"
|
||
],
|
||
os: [
|
||
"ls",
|
||
"lb"
|
||
],
|
||
xs: [
|
||
"xs",
|
||
"xb"
|
||
]
|
||
}, d = "";
|
||
s.match(/&o$/) ? d = "&l" : s.match(/&l$/) && (d = "&o"), s = s.replace(/&[ol\d+]/g, ""), f < 0 && (s.match(/^w/) ? f = 1 : s.match(/^h/) && (f = 0));
|
||
var m = function(f) {
|
||
var m = ("," + f + "," + s).replace(/,[fhs]|,[olx]b/g, ",1").replace(/,[mwd]|,[olx]s/g, ",0"), b = (m = m.substring(0, m.length - 2)).split(",").reverse(), o = s.split(",").reverse().map(function(s, f) {
|
||
return x[s][b[f]];
|
||
}).join(",");
|
||
return o + (C(o) ? "" : d);
|
||
};
|
||
return f < 0 ? [
|
||
m(1),
|
||
m(0)
|
||
] : [
|
||
m(f)
|
||
];
|
||
}
|
||
function I(s) {
|
||
var f = s.filter(function(s) {
|
||
return s == s.replace(/[ol](?=[s|b])/g, "x").replace(/&[ol]/, "");
|
||
});
|
||
return s.filter(function(s) {
|
||
var x = s.replace(/[ol](?=[s|b])/g, "x").replace(/&[ol]/, "");
|
||
return f.includes(s) || s != x && !f.includes(x);
|
||
}).filter(function(s, f, x) {
|
||
return x.indexOf(s) === f;
|
||
});
|
||
}
|
||
function C(s) {
|
||
var f = {
|
||
f: 1,
|
||
m: 1,
|
||
s: -1,
|
||
d: -1
|
||
}, x = 0;
|
||
return s.split(",").forEach(function(s) {
|
||
var d = s.replace(/&[ol\d]+/, "");
|
||
x += f[d] || 0;
|
||
}), x;
|
||
}
|
||
function T(s) {
|
||
var f = [], x = function(s) {
|
||
var f = [], x = s.replace(/(,[sd])(,[wh])?$/, "$1&o$2"), d = s.replace(/(,[sd])(,[wh])?$/, "$1&l$2");
|
||
return O[x] && O[d] ? f = [
|
||
x,
|
||
d
|
||
] : O[s] && (f = [
|
||
s
|
||
]), I(f).map(function(s) {
|
||
return O[s][0];
|
||
});
|
||
};
|
||
if (s.match(/&([\d]+)(,[hw])?$/)) {
|
||
var d = function(s) {
|
||
var f = "", x = {
|
||
1: "大",
|
||
99: "小"
|
||
};
|
||
if (x[s]) f = x[s];
|
||
else {
|
||
var d = ~~(s / 10), m = s % 10;
|
||
f = (d ? (l[d] + "十").replace("一十", "十") : "") + l[m];
|
||
}
|
||
return f;
|
||
}(s.match(/&([\d]+)(,[hw])?$/)[1]);
|
||
if (s = s.replace(/&\d+/g, ""), O[s]) {
|
||
var m = "";
|
||
C(s) < 3 && !s.match(/[hw],/) ? (O[s].forEach(function(s) {
|
||
!m && s.includes("几") && (m = s.replace("几", d));
|
||
}), m || (m = (m = O[s][0]).match(/^[大小]/) ? m.replace(/^[大小]/, d) : d + m)) : m = O[s][0], f.push(m);
|
||
}
|
||
}
|
||
if (f.length || (f = x(s = s.replace(/&\d+/g, ""))), f.length || (f = x(s = s.replace(/&[ol]/g, ""))), f.length || (f = x(s = s.replace(/[ol](b|s)/g, "x$1"))), !f.length) {
|
||
var b = s.replace(/x/g, "l"), o = s.replace(/x/g, "o");
|
||
f = f.concat(x(o), x(b));
|
||
}
|
||
return f;
|
||
}
|
||
var k = Object.assign({}, O, {
|
||
xb: [
|
||
"兄弟"
|
||
],
|
||
xs: [
|
||
"姐妹"
|
||
]
|
||
});
|
||
function U(s) {
|
||
var f = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : -1, x = s.split(",").map(function(s) {
|
||
var f = s.replace(/&[ol\d]+/, "");
|
||
return k[f][0];
|
||
}).join("的");
|
||
return f > -1 && k[f + "," + s] && (0 == f ? x = "(女性)" + x : 1 == f && (x = "(男性)" + x)), x;
|
||
}
|
||
var q = Object.assign({}, O, {
|
||
"f,xb": [
|
||
"伯叔父",
|
||
"几爸爸",
|
||
"几爸",
|
||
"几爹"
|
||
],
|
||
"f,xb,w": [
|
||
"伯叔母",
|
||
"几妈妈",
|
||
"几妈",
|
||
"几娘"
|
||
],
|
||
"h,xb": [
|
||
"伯叔"
|
||
],
|
||
"h,xb,w": [
|
||
"妯娌",
|
||
"娣姒",
|
||
"娣姒姊妹",
|
||
"婶子"
|
||
]
|
||
}), z = {}, B = function(s) {
|
||
q[s].forEach(function(f) {
|
||
void 0 === z[f] && (z[f] = []), z[f].push(s);
|
||
});
|
||
};
|
||
for(var D in q)B(D);
|
||
function F(s, f) {
|
||
var x = "undefined" != typeof Symbol && s[Symbol.iterator] || s["@@iterator"];
|
||
if (!x) {
|
||
if (Array.isArray(s) || (x = function(s, f) {
|
||
if (!s) return;
|
||
if ("string" == typeof s) return H(s, f);
|
||
var x = Object.prototype.toString.call(s).slice(8, -1);
|
||
"Object" === x && s.constructor && (x = s.constructor.name);
|
||
if ("Map" === x || "Set" === x) return Array.from(s);
|
||
if ("Arguments" === x || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x)) return H(s, f);
|
||
}(s)) || f && s && "number" == typeof s.length) {
|
||
x && (s = x);
|
||
var d = 0, m = function() {};
|
||
return {
|
||
s: m,
|
||
n: function() {
|
||
return d >= s.length ? {
|
||
done: !0
|
||
} : {
|
||
done: !1,
|
||
value: s[d++]
|
||
};
|
||
},
|
||
e: function(s) {
|
||
throw s;
|
||
},
|
||
f: m
|
||
};
|
||
}
|
||
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
||
}
|
||
var b, o = !0, r = !1;
|
||
return {
|
||
s: function() {
|
||
x = x.call(s);
|
||
},
|
||
n: function() {
|
||
var s = x.next();
|
||
return o = s.done, s;
|
||
},
|
||
e: function(s) {
|
||
r = !0, b = s;
|
||
},
|
||
f: function() {
|
||
try {
|
||
o || null == x.return || x.return();
|
||
} finally{
|
||
if (r) throw b;
|
||
}
|
||
}
|
||
};
|
||
}
|
||
function H(s, f) {
|
||
(null == f || f > s.length) && (f = s.length);
|
||
for(var x = 0, d = new Array(f); x < f; x++)d[x] = s[x];
|
||
return d;
|
||
}
|
||
function J(s) {
|
||
(s = s.replace(/之/g, "的").replace(/吾之?(.+)/, "$1").replace(/我的?(.+)/, "$1")).match(/[^娘婆岳亲]家的?(孩子|儿子|女儿)/) && (s = s.replace(/家的?/, "的"));
|
||
for(var f = (s = (s = (s = s.replace(/(舅|姑)+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/, "$1表$3").replace(/(舅|姑)+(爸|父|丈|妈|母)?家的?/, "$1表")).replace(/(伯|叔)+(父|母)?家的?(哥|姐|弟|妹)+/, "堂$3").replace(/(伯|叔)+(父|母)?家的?/, "堂")).replace(/姨+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/, "姨$2").replace(/姨+(爸|父|丈|妈|母)?家的?/, "姨")).split("的"), x = [], d = !0, m = function() {
|
||
var s = f.shift(), m = [], b = [
|
||
s
|
||
];
|
||
!function s(f) {
|
||
for(var x in r.forEach(function(x) {
|
||
x.arr.forEach(function(d) {
|
||
var m = f.replace(x.exp, d);
|
||
m != f && (b.push(m), s(m));
|
||
});
|
||
}), h){
|
||
var d = f.replace(x, h[x]), m = f.replace(h[x], x);
|
||
d != f && b.push(d), m != f && b.push(m);
|
||
}
|
||
}(s);
|
||
var o = [
|
||
[],
|
||
[],
|
||
[]
|
||
];
|
||
b.forEach(function(s) {
|
||
var f = (s = s.replace(/^[尕幺细满碎晚末尾幼]/, "小")).match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
|
||
if (f) {
|
||
var x = s.replace(f[0], "几"), d = s.replace(f[0], ""), b = function(s) {
|
||
var f = 0, x = {
|
||
"大": 1,
|
||
"小": 99
|
||
};
|
||
if (x[s]) f = x[s];
|
||
else {
|
||
var d = e(s.replace(/^十/, "一十").split("十").map(function(s) {
|
||
return l.indexOf(s);
|
||
}).reverse(), 2), m = d[0], b = d[1];
|
||
f = 10 * (void 0 === b ? 0 : b) + m;
|
||
}
|
||
return f;
|
||
}(f[0]);
|
||
[
|
||
x,
|
||
d,
|
||
s
|
||
].forEach(function(s, f) {
|
||
var x = z[s];
|
||
x && x.length && x.forEach(function(x) {
|
||
var d = x.replace(/(,[hw])$/, "&" + b + "$1").replace(/([^hw]+)$/, "$1&" + b);
|
||
x.match(/^[mf,]+$/) || s.match(/^[从世]/) || o[f].push(d);
|
||
});
|
||
});
|
||
}
|
||
m = m.concat(z[s] || []);
|
||
}), o.forEach(function(s) {
|
||
m.length || (m = s);
|
||
}), m.length || (d = !1);
|
||
var t = [];
|
||
x.length || (x = [
|
||
""
|
||
]), x.forEach(function(s) {
|
||
m.forEach(function(f) {
|
||
t.push(s + (f ? "," + f : ""));
|
||
});
|
||
}), x = t;
|
||
}; f.length;)m();
|
||
return d ? I(x) : [];
|
||
}
|
||
function K(s) {
|
||
var f = s.from, x = s.to, d = s.sex;
|
||
if (d < 0) {
|
||
var m = -1, b = -1;
|
||
if (f.match(/^,[w1]/) ? b = 1 : f.match(/^,[h0]/) && (b = 0), x.match(/^,[w1]/) ? m = 1 : x.match(/^,[h0]/) && (m = 0), -1 == b && m > -1) d = m;
|
||
else if (b > -1 && -1 == m) d = b;
|
||
else {
|
||
if (b != m) return [];
|
||
d = b;
|
||
}
|
||
}
|
||
var o = P(s.from, d), r = P(s.to, d);
|
||
if (!o.length || !r.length) return [];
|
||
var h = [];
|
||
return o.forEach(function(f) {
|
||
r.forEach(function(x) {
|
||
var m = d, b = "," + x;
|
||
if (b.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/) && (m = 1), b.match(/,([mwd0](&[ol\d]+)?|[olx]s)(&[ol\d]+)?$/) && (m = 0), f && x) {
|
||
var o = s.optimal;
|
||
if ((f.match(/&\d+/) || x.match(/&\d+/)) && (o = !0), o) {
|
||
var r = function(s) {
|
||
for(var f = s.from, x = s.to, d = s.sex, m = f.split(","), b = x.split(","), o = 0; o < m.length && o < b.length; o++){
|
||
if (m[o] != b[o]) {
|
||
if (C(m[o]) == C(b[o]) && m[o].match(/^[xol][bs]|^[sd]/) && b[o].match(/^[xol][bs]|^[sd]/)) {
|
||
var r, h, e, l;
|
||
if (m[o].replace(/&([ol\d]+)/, "").replace(/^[xol]([bs])/, "$1") != b[o].replace(/&([ol\d]+)/, "").replace(/^[xol]([bs])/, "$1")) break;
|
||
var t = (null === (r = m[o].match(/&([ol\d]+)/)) || void 0 === r ? void 0 : r[1]) || (null === (h = m[o].match(/([ol])[bs]/)) || void 0 === h ? void 0 : h[1]) || "", w = (null === (e = b[o].match(/&([ol\d]+)/)) || void 0 === e ? void 0 : e[1]) || (null === (l = b[o].match(/([ol])[bs]/)) || void 0 === l ? void 0 : l[1]) || "";
|
||
if (t && w) isNaN(t) || isNaN(w) ? !isNaN(t) && "o" == w || "l" == t && !isNaN(w) ? m[o] = m[o].replace(/^[xol]b|^s/, "lb").replace(/^[xol]s|^d/, "ls") : (!isNaN(t) && "l" == w || "o" == t && !isNaN(w)) && (m[o] = m[o].replace(/^[xol]b|^s/, "ob").replace(/^[xol]s|^d/, "os")) : +t > +w ? m[o] = m[o].replace(/^[xol]b|^s/, "lb").replace(/^[xol]s|^d/, "ls") : +t < +w && (m[o] = m[o].replace(/^[xol]b|^s/, "ob").replace(/^[xol]s|^d/, "os")), f = m.slice(o).join(","), x = b.slice(o + 1).join(","), d = b[o].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/) ? 1 : 0;
|
||
else if (s.optimal) {
|
||
var M, n;
|
||
if (t = (null === (M = m[o].match(/([xol])[bs]/)) || void 0 === M ? void 0 : M[1]) || "", w = (null === (n = b[o].match(/([xol])[bs]/)) || void 0 === n ? void 0 : n[1]) || "", "x" == t || "x" == w) {
|
||
f = m.slice(o + 1).join(","), x = b.slice(o + 1).join(","), d = m[o].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/) ? 1 : 0;
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
f = m.slice(o + 1).join(","), x = b.slice(o + 1).join(","), d = m[o].match(/^([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?/) ? 1 : 0;
|
||
}
|
||
return {
|
||
from: f,
|
||
to: x,
|
||
sex: d
|
||
};
|
||
}({
|
||
from: f,
|
||
to: x,
|
||
sex: d,
|
||
optimal: s.optimal
|
||
});
|
||
f = r.from, x = r.to, d = r.sex;
|
||
}
|
||
}
|
||
(x ? N(x, d) : [
|
||
""
|
||
]).forEach(function(s) {
|
||
var x = (s ? "," + s : "") + (f ? "," + f : "");
|
||
h.push({
|
||
selector: x,
|
||
sex: m
|
||
});
|
||
});
|
||
});
|
||
}), h;
|
||
}
|
||
function L(s) {
|
||
var f = [], x = {};
|
||
return function s(d) {
|
||
var m = "";
|
||
if (!x[d]) {
|
||
x[d] = !0;
|
||
do {
|
||
m = d;
|
||
var b, r = F(o);
|
||
try {
|
||
for(r.s(); !(b = r.n()).done;){
|
||
var h = b.value;
|
||
if ((d = d.replace(h.exp, h.str)).includes("#")) return d.split("#").forEach(s), !1;
|
||
}
|
||
} catch (s) {
|
||
r.e(s);
|
||
} finally{
|
||
r.f();
|
||
}
|
||
}while (m != d)
|
||
if (d.match(/,[mwd0](&[ol\d+])?,w|,[hfs1](&[ol\d]+)?,h/)) return !1;
|
||
f.push(d);
|
||
}
|
||
}(s), f;
|
||
}
|
||
function P(s, f) {
|
||
if (s.match(/^,/) || (s = "," + s), f < 0) s.match(/^,[w1]/) ? f = 1 : s.match(/^,[h0]/) && (f = 0);
|
||
else {
|
||
if (1 == f && s.match(/^,[h0]/)) return [];
|
||
if (0 == f && s.match(/^,[w1]/)) return [];
|
||
}
|
||
if (f > -1 && !s.includes(",1") && !s.includes(",0") && (s = "," + f + s), s.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/)) return [];
|
||
var x = L(s).map(function(s) {
|
||
return s.replace(/,[01]/, "").substr(1);
|
||
});
|
||
return I(x);
|
||
}
|
||
var Q = function(s) {
|
||
"string" == typeof s && (s = function(s) {
|
||
var f, x = m(d);
|
||
try {
|
||
for(x.s(); !(f = x.n()).done;){
|
||
var b = f.value, o = s.match(b.exp);
|
||
if (o) return b.opt(o);
|
||
}
|
||
} catch (s) {
|
||
x.e(s);
|
||
} finally{
|
||
x.f();
|
||
}
|
||
return {};
|
||
}(s));
|
||
var f = Object.assign({
|
||
text: "",
|
||
target: "",
|
||
sex: -1,
|
||
type: "default",
|
||
reverse: !1,
|
||
mode: "default",
|
||
optimal: !1
|
||
}, s);
|
||
!function(s) {
|
||
if (O = Object.assign({}, j), s && A[s]) for(var f in A[s])O[f] = [].concat(A[s][f], j[f] || []);
|
||
}(f.mode);
|
||
var b = J(f.text), o = J(f.target);
|
||
o.length || (o = [
|
||
""
|
||
]);
|
||
var r = [];
|
||
return b.forEach(function(s) {
|
||
o.forEach(function(x) {
|
||
K({
|
||
from: s,
|
||
to: x,
|
||
sex: f.sex,
|
||
optimal: f.optimal
|
||
}).forEach(function(s) {
|
||
(s ? P(s.selector, s.sex) : []).forEach(function(x) {
|
||
var d = [
|
||
x
|
||
], m = s.sex;
|
||
f.reverse && (d = N(x, m), m = x.match(/([fhs1](&[ol\d]+)?|[olx]b)$/) ? 1 : 0), "chain" == f.type ? d.forEach(function(f) {
|
||
var x = U(f, s.sex);
|
||
x && r.push(x);
|
||
}) : "pair" == f.type ? (d = N(x, s.sex)).forEach(function(s) {
|
||
var f = function(s, f) {
|
||
var x = [], d = [], m = [];
|
||
s = s.replace(/&\d+/, ""), f = f.replace(/&\d+/, "");
|
||
var b = s.replace(/([ol])([bs])/, "x$2"), o = f.replace(/([ol])([bs])/, "x$2"), r = s.replace(/&[ol]/, ""), h = f.replace(/&[ol]/, "");
|
||
for(var e in t){
|
||
var l = e.split("#");
|
||
if (l.length > 1) {
|
||
var w = P(l[0]), M = P(l[1]), n = w.map(function(s) {
|
||
return s.replace(/&[ol\d]+/, "").replace(/([ol])([bs])/, "x$2");
|
||
}), a = M.map(function(s) {
|
||
return s.replace(/&[ol\d]+/, "").replace(/([ol])([bs])/, "x$2");
|
||
});
|
||
(w.includes(s) && M.includes(f) || w.includes(f) && M.includes(s)) && x.push(t[e][0]), (n.includes(b) && a.includes(o) || n.includes(o) && a.includes(b)) && d.push(t[e][0]), (n.includes(r) && a.includes(h) || n.includes(h) && a.includes(r)) && m.push(t[e][0]);
|
||
}
|
||
}
|
||
return x.length || (x = d), x.length || (x = m), x;
|
||
}(x, s);
|
||
r = r.concat(f);
|
||
}) : d.forEach(function(s) {
|
||
var f = T(s);
|
||
f.length || (f = T(m + "," + s)), r = r.concat(f);
|
||
});
|
||
});
|
||
});
|
||
});
|
||
}), x(new Set(r));
|
||
};
|
||
Q.data = O, Q.dataCount = Object.keys(O).length, Q.setMode = function(s, f) {
|
||
A[s] = Object.assign(A[s] || {}, f);
|
||
};
|
||
;
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+number@1.1.0/node_modules/@radix-ui/number/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/core/number/src/number.ts
|
||
__turbopack_context__.s([
|
||
"clamp",
|
||
()=>clamp
|
||
]);
|
||
function clamp(value, [min, max]) {
|
||
return Math.min(max, Math.max(min, value));
|
||
}
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-previous@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-previous/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/use-previous/src/usePrevious.tsx
|
||
__turbopack_context__.s([
|
||
"usePrevious",
|
||
()=>usePrevious
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
;
|
||
function usePrevious(value) {
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"]({
|
||
value,
|
||
previous: value
|
||
});
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"](()=>{
|
||
if (ref.current.value !== value) {
|
||
ref.current.previous = ref.current.value;
|
||
ref.current.value = value;
|
||
}
|
||
return ref.current.previous;
|
||
}, [
|
||
value
|
||
]);
|
||
}
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-visually-hidden@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@typ_c3f4d56b21f8f37d78014c19b521b01b/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// packages/react/visually-hidden/src/VisuallyHidden.tsx
|
||
__turbopack_context__.s([
|
||
"Root",
|
||
()=>Root,
|
||
"VisuallyHidden",
|
||
()=>VisuallyHidden
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
var NAME = "VisuallyHidden";
|
||
var VisuallyHidden = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
...props,
|
||
ref: forwardedRef,
|
||
style: {
|
||
// See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss
|
||
position: "absolute",
|
||
border: 0,
|
||
width: 1,
|
||
height: 1,
|
||
padding: 0,
|
||
margin: -1,
|
||
overflow: "hidden",
|
||
clip: "rect(0, 0, 0, 0)",
|
||
whiteSpace: "nowrap",
|
||
wordWrap: "normal",
|
||
...props.style
|
||
}
|
||
});
|
||
});
|
||
VisuallyHidden.displayName = NAME;
|
||
var Root = VisuallyHidden;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-select@2.1.4_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_0db8806b22e5e8953d2741c4abb73796/node_modules/@radix-ui/react-select/dist/index.mjs [app-ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Arrow",
|
||
()=>Arrow2,
|
||
"Content",
|
||
()=>Content2,
|
||
"Group",
|
||
()=>Group,
|
||
"Icon",
|
||
()=>Icon,
|
||
"Item",
|
||
()=>Item,
|
||
"ItemIndicator",
|
||
()=>ItemIndicator,
|
||
"ItemText",
|
||
()=>ItemText,
|
||
"Label",
|
||
()=>Label,
|
||
"Portal",
|
||
()=>Portal,
|
||
"Root",
|
||
()=>Root2,
|
||
"ScrollDownButton",
|
||
()=>ScrollDownButton,
|
||
"ScrollUpButton",
|
||
()=>ScrollUpButton,
|
||
"Select",
|
||
()=>Select,
|
||
"SelectArrow",
|
||
()=>SelectArrow,
|
||
"SelectContent",
|
||
()=>SelectContent,
|
||
"SelectGroup",
|
||
()=>SelectGroup,
|
||
"SelectIcon",
|
||
()=>SelectIcon,
|
||
"SelectItem",
|
||
()=>SelectItem,
|
||
"SelectItemIndicator",
|
||
()=>SelectItemIndicator,
|
||
"SelectItemText",
|
||
()=>SelectItemText,
|
||
"SelectLabel",
|
||
()=>SelectLabel,
|
||
"SelectPortal",
|
||
()=>SelectPortal,
|
||
"SelectScrollDownButton",
|
||
()=>SelectScrollDownButton,
|
||
"SelectScrollUpButton",
|
||
()=>SelectScrollUpButton,
|
||
"SelectSeparator",
|
||
()=>SelectSeparator,
|
||
"SelectTrigger",
|
||
()=>SelectTrigger,
|
||
"SelectValue",
|
||
()=>SelectValue,
|
||
"SelectViewport",
|
||
()=>SelectViewport,
|
||
"Separator",
|
||
()=>Separator,
|
||
"Trigger",
|
||
()=>Trigger,
|
||
"Value",
|
||
()=>Value,
|
||
"Viewport",
|
||
()=>Viewport,
|
||
"createSelectScope",
|
||
()=>createSelectScope
|
||
]);
|
||
// packages/react/select/src/Select.tsx
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$dom$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$number$40$1$2e$1$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$number$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+number@1.1.0/node_modules/@radix-ui/number/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+primitive@1.1.1/node_modules/@radix-ui/primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$collection$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$re_1ad17166111274b6b451c5ad4817bfc8$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$collection$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-collection@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+re_1ad17166111274b6b451c5ad4817bfc8/node_modules/@radix-ui/react-collection/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-compose-refs@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-compose-refs/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-context@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-context/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$direction$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$direction$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-direction@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-direction/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dismissable$2d$layer$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$t_93e149627c30a83695c926d31c853576$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dismissable$2d$layer$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-dismissable-layer@1.1.3_@types+react-dom@19.2.3_@types+react@19.2.6__@t_93e149627c30a83695c926d31c853576/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$guards$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$guards$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-focus-guards@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-focus-guards/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$scope$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$r_d785daf6985fc8350fb3781de275c6b6$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$scope$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-focus-scope@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+r_d785daf6985fc8350fb3781de275c6b6/node_modules/@radix-ui/react-focus-scope/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-id@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-id/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-popper@1.2.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_f51937a6043c1687ec731d0ff356eddd/node_modules/@radix-ui/react-popper/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$portal$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_046b67df02e5a46cef606421f30d033b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$portal$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-portal@1.1.3_@types+react-dom@19.2.3_@types+react@19.2.6__@types+react@_046b67df02e5a46cef606421f30d033b/node_modules/@radix-ui/react-portal/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-primitive@2.0.1_@types+react-dom@19.2.3_@types+react@19.2.6__@types+rea_4f53963f71a6eb8b0116fe0dd1078946/node_modules/@radix-ui/react-primitive/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-slot@1.1.1_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-slot/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-callback-ref@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-controllable-state@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-layout-effect@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$previous$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$previous$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-use-previous@1.1.0_@types+react@19.2.6_react@19.2.0/node_modules/@radix-ui/react-use-previous/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$visually$2d$hidden$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$typ_c3f4d56b21f8f37d78014c19b521b01b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$visually$2d$hidden$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/@radix-ui+react-visually-hidden@1.1.1_@types+react-dom@19.2.3_@types+react@19.2.6__@typ_c3f4d56b21f8f37d78014c19b521b01b/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$aria$2d$hidden$40$1$2e$2$2e$6$2f$node_modules$2f$aria$2d$hidden$2f$dist$2f$es2015$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/aria-hidden@1.2.6/node_modules/aria-hidden/dist/es2015/index.js [app-ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$react$2d$remove$2d$scroll$40$2$2e$7$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f$react$2d$remove$2d$scroll$2f$dist$2f$es2015$2f$Combination$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__RemoveScroll$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/react-remove-scroll@2.7.1_@types+react@19.2.6_react@19.2.0/node_modules/react-remove-scroll/dist/es2015/Combination.js [app-ssr] (ecmascript) <export default as RemoveScroll>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js [app-ssr] (ecmascript)");
|
||
"use client";
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
var OPEN_KEYS = [
|
||
" ",
|
||
"Enter",
|
||
"ArrowUp",
|
||
"ArrowDown"
|
||
];
|
||
var SELECTION_KEYS = [
|
||
" ",
|
||
"Enter"
|
||
];
|
||
var SELECT_NAME = "Select";
|
||
var [Collection, useCollection, createCollectionScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$collection$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$re_1ad17166111274b6b451c5ad4817bfc8$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$collection$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createCollection"])(SELECT_NAME);
|
||
var [createSelectContext, createSelectScope] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$context$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$context$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createContextScope"])(SELECT_NAME, [
|
||
createCollectionScope,
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createPopperScope"]
|
||
]);
|
||
var usePopperScope = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createPopperScope"])();
|
||
var [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
|
||
var [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);
|
||
var Select = (props)=>{
|
||
const { __scopeSelect, children, open: openProp, defaultOpen, onOpenChange, value: valueProp, defaultValue, onValueChange, dir, name, autoComplete, disabled, required, form } = props;
|
||
const popperScope = usePopperScope(__scopeSelect);
|
||
const [trigger, setTrigger] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [valueNode, setValueNode] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [valueNodeHasChildren, setValueNodeHasChildren] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const direction = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$direction$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$direction$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useDirection"])(dir);
|
||
const [open = false, setOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useControllableState"])({
|
||
prop: openProp,
|
||
defaultProp: defaultOpen,
|
||
onChange: onOpenChange
|
||
});
|
||
const [value, setValue] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$controllable$2d$state$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$controllable$2d$state$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useControllableState"])({
|
||
prop: valueProp,
|
||
defaultProp: defaultValue,
|
||
onChange: onValueChange
|
||
});
|
||
const triggerPointerDownPosRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const isFormControl = trigger ? form || !!trigger.closest("form") : true;
|
||
const [nativeOptionsSet, setNativeOptionsSet] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](/* @__PURE__ */ new Set());
|
||
const nativeSelectKey = Array.from(nativeOptionsSet).map((option)=>option.props.value).join(";");
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Root"], {
|
||
...popperScope,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxs"])(SelectProvider, {
|
||
required,
|
||
scope: __scopeSelect,
|
||
trigger,
|
||
onTriggerChange: setTrigger,
|
||
valueNode,
|
||
onValueNodeChange: setValueNode,
|
||
valueNodeHasChildren,
|
||
onValueNodeHasChildrenChange: setValueNodeHasChildren,
|
||
contentId: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])(),
|
||
value,
|
||
onValueChange: setValue,
|
||
open,
|
||
onOpenChange: setOpen,
|
||
dir: direction,
|
||
triggerPointerDownPosRef,
|
||
disabled,
|
||
children: [
|
||
/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Provider, {
|
||
scope: __scopeSelect,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectNativeOptionsProvider, {
|
||
scope: props.__scopeSelect,
|
||
onNativeOptionAdd: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((option)=>{
|
||
setNativeOptionsSet((prev)=>new Set(prev).add(option));
|
||
}, []),
|
||
onNativeOptionRemove: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((option)=>{
|
||
setNativeOptionsSet((prev)=>{
|
||
const optionsSet = new Set(prev);
|
||
optionsSet.delete(option);
|
||
return optionsSet;
|
||
});
|
||
}, []),
|
||
children
|
||
})
|
||
}),
|
||
isFormControl ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxs"])(BubbleSelect, {
|
||
"aria-hidden": true,
|
||
required,
|
||
tabIndex: -1,
|
||
name,
|
||
autoComplete,
|
||
value,
|
||
onChange: (event)=>setValue(event.target.value),
|
||
disabled,
|
||
form,
|
||
children: [
|
||
value === void 0 ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("option", {
|
||
value: ""
|
||
}) : null,
|
||
Array.from(nativeOptionsSet)
|
||
]
|
||
}, nativeSelectKey) : null
|
||
]
|
||
})
|
||
});
|
||
};
|
||
Select.displayName = SELECT_NAME;
|
||
var TRIGGER_NAME = "SelectTrigger";
|
||
var SelectTrigger = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, disabled = false, ...triggerProps } = props;
|
||
const popperScope = usePopperScope(__scopeSelect);
|
||
const context = useSelectContext(TRIGGER_NAME, __scopeSelect);
|
||
const isDisabled = context.disabled || disabled;
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, context.onTriggerChange);
|
||
const getItems = useCollection(__scopeSelect);
|
||
const pointerTypeRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"]("touch");
|
||
const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search)=>{
|
||
const enabledItems = getItems().filter((item)=>!item.disabled);
|
||
const currentItem = enabledItems.find((item)=>item.value === context.value);
|
||
const nextItem = findNextItem(enabledItems, search, currentItem);
|
||
if (nextItem !== void 0) {
|
||
context.onValueChange(nextItem.value);
|
||
}
|
||
});
|
||
const handleOpen = (pointerEvent)=>{
|
||
if (!isDisabled) {
|
||
context.onOpenChange(true);
|
||
resetTypeahead();
|
||
}
|
||
if (pointerEvent) {
|
||
context.triggerPointerDownPosRef.current = {
|
||
x: Math.round(pointerEvent.pageX),
|
||
y: Math.round(pointerEvent.pageY)
|
||
};
|
||
}
|
||
};
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Anchor"], {
|
||
asChild: true,
|
||
...popperScope,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].button, {
|
||
type: "button",
|
||
role: "combobox",
|
||
"aria-controls": context.contentId,
|
||
"aria-expanded": context.open,
|
||
"aria-required": context.required,
|
||
"aria-autocomplete": "none",
|
||
dir: context.dir,
|
||
"data-state": context.open ? "open" : "closed",
|
||
disabled: isDisabled,
|
||
"data-disabled": isDisabled ? "" : void 0,
|
||
"data-placeholder": shouldShowPlaceholder(context.value) ? "" : void 0,
|
||
...triggerProps,
|
||
ref: composedRefs,
|
||
onClick: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(triggerProps.onClick, (event)=>{
|
||
event.currentTarget.focus();
|
||
if (pointerTypeRef.current !== "mouse") {
|
||
handleOpen(event);
|
||
}
|
||
}),
|
||
onPointerDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(triggerProps.onPointerDown, (event)=>{
|
||
pointerTypeRef.current = event.pointerType;
|
||
const target = event.target;
|
||
if (target.hasPointerCapture(event.pointerId)) {
|
||
target.releasePointerCapture(event.pointerId);
|
||
}
|
||
if (event.button === 0 && event.ctrlKey === false && event.pointerType === "mouse") {
|
||
handleOpen(event);
|
||
event.preventDefault();
|
||
}
|
||
}),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(triggerProps.onKeyDown, (event)=>{
|
||
const isTypingAhead = searchRef.current !== "";
|
||
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
|
||
if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
|
||
if (isTypingAhead && event.key === " ") return;
|
||
if (OPEN_KEYS.includes(event.key)) {
|
||
handleOpen();
|
||
event.preventDefault();
|
||
}
|
||
})
|
||
})
|
||
});
|
||
});
|
||
SelectTrigger.displayName = TRIGGER_NAME;
|
||
var VALUE_NAME = "SelectValue";
|
||
var SelectValue = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, className, style, children, placeholder = "", ...valueProps } = props;
|
||
const context = useSelectContext(VALUE_NAME, __scopeSelect);
|
||
const { onValueNodeHasChildrenChange } = context;
|
||
const hasChildren = children !== void 0;
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, context.onValueNodeChange);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
onValueNodeHasChildrenChange(hasChildren);
|
||
}, [
|
||
onValueNodeHasChildrenChange,
|
||
hasChildren
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
...valueProps,
|
||
ref: composedRefs,
|
||
style: {
|
||
pointerEvents: "none"
|
||
},
|
||
children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fragment"], {
|
||
children: placeholder
|
||
}) : children
|
||
});
|
||
});
|
||
SelectValue.displayName = VALUE_NAME;
|
||
var ICON_NAME = "SelectIcon";
|
||
var SelectIcon = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, children, ...iconProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
"aria-hidden": true,
|
||
...iconProps,
|
||
ref: forwardedRef,
|
||
children: children || "\u25BC"
|
||
});
|
||
});
|
||
SelectIcon.displayName = ICON_NAME;
|
||
var PORTAL_NAME = "SelectPortal";
|
||
var SelectPortal = (props)=>{
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$portal$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_046b67df02e5a46cef606421f30d033b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$portal$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Portal"], {
|
||
asChild: true,
|
||
...props
|
||
});
|
||
};
|
||
SelectPortal.displayName = PORTAL_NAME;
|
||
var CONTENT_NAME = "SelectContent";
|
||
var SelectContent = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);
|
||
const [fragment, setFragment] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]();
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
setFragment(new DocumentFragment());
|
||
}, []);
|
||
if (!context.open) {
|
||
const frag = fragment;
|
||
return frag ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$dom$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createPortal"](/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectContentProvider, {
|
||
scope: props.__scopeSelect,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Slot, {
|
||
scope: props.__scopeSelect,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("div", {
|
||
children: props.children
|
||
})
|
||
})
|
||
}), frag) : null;
|
||
}
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectContentImpl, {
|
||
...props,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
SelectContent.displayName = CONTENT_NAME;
|
||
var CONTENT_MARGIN = 10;
|
||
var [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);
|
||
var CONTENT_IMPL_NAME = "SelectContentImpl";
|
||
var SelectContentImpl = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, position = "item-aligned", onCloseAutoFocus, onEscapeKeyDown, onPointerDownOutside, //
|
||
// PopperContent props
|
||
side, sideOffset, align, alignOffset, arrowPadding, collisionBoundary, collisionPadding, sticky, hideWhenDetached, avoidCollisions, //
|
||
...contentProps } = props;
|
||
const context = useSelectContext(CONTENT_NAME, __scopeSelect);
|
||
const [content, setContent] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [viewport, setViewport] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, (node)=>setContent(node));
|
||
const [selectedItem, setSelectedItem] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [selectedItemText, setSelectedItemText] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const getItems = useCollection(__scopeSelect);
|
||
const [isPositioned, setIsPositioned] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const firstValidItemFoundRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
if (content) return (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$aria$2d$hidden$40$1$2e$2$2e$6$2f$node_modules$2f$aria$2d$hidden$2f$dist$2f$es2015$2f$index$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["hideOthers"])(content);
|
||
}, [
|
||
content
|
||
]);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$guards$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$guards$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useFocusGuards"])();
|
||
const focusFirst = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((candidates)=>{
|
||
const [firstItem, ...restItems] = getItems().map((item)=>item.ref.current);
|
||
const [lastItem] = restItems.slice(-1);
|
||
const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
|
||
for (const candidate of candidates){
|
||
if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
|
||
candidate?.scrollIntoView({
|
||
block: "nearest"
|
||
});
|
||
if (candidate === firstItem && viewport) viewport.scrollTop = 0;
|
||
if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;
|
||
candidate?.focus();
|
||
if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
|
||
}
|
||
}, [
|
||
getItems,
|
||
viewport
|
||
]);
|
||
const focusSelectedItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>focusFirst([
|
||
selectedItem,
|
||
content
|
||
]), [
|
||
focusFirst,
|
||
selectedItem,
|
||
content
|
||
]);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
if (isPositioned) {
|
||
focusSelectedItem();
|
||
}
|
||
}, [
|
||
isPositioned,
|
||
focusSelectedItem
|
||
]);
|
||
const { onOpenChange, triggerPointerDownPosRef } = context;
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
if (content) {
|
||
let pointerMoveDelta = {
|
||
x: 0,
|
||
y: 0
|
||
};
|
||
const handlePointerMove = (event)=>{
|
||
pointerMoveDelta = {
|
||
x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),
|
||
y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))
|
||
};
|
||
};
|
||
const handlePointerUp = (event)=>{
|
||
if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {
|
||
event.preventDefault();
|
||
} else {
|
||
if (!content.contains(event.target)) {
|
||
onOpenChange(false);
|
||
}
|
||
}
|
||
document.removeEventListener("pointermove", handlePointerMove);
|
||
triggerPointerDownPosRef.current = null;
|
||
};
|
||
if (triggerPointerDownPosRef.current !== null) {
|
||
document.addEventListener("pointermove", handlePointerMove);
|
||
document.addEventListener("pointerup", handlePointerUp, {
|
||
capture: true,
|
||
once: true
|
||
});
|
||
}
|
||
return ()=>{
|
||
document.removeEventListener("pointermove", handlePointerMove);
|
||
document.removeEventListener("pointerup", handlePointerUp, {
|
||
capture: true
|
||
});
|
||
};
|
||
}
|
||
}, [
|
||
content,
|
||
onOpenChange,
|
||
triggerPointerDownPosRef
|
||
]);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const close = ()=>onOpenChange(false);
|
||
window.addEventListener("blur", close);
|
||
window.addEventListener("resize", close);
|
||
return ()=>{
|
||
window.removeEventListener("blur", close);
|
||
window.removeEventListener("resize", close);
|
||
};
|
||
}, [
|
||
onOpenChange
|
||
]);
|
||
const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search)=>{
|
||
const enabledItems = getItems().filter((item)=>!item.disabled);
|
||
const currentItem = enabledItems.find((item)=>item.ref.current === document.activeElement);
|
||
const nextItem = findNextItem(enabledItems, search, currentItem);
|
||
if (nextItem) {
|
||
setTimeout(()=>nextItem.ref.current.focus());
|
||
}
|
||
});
|
||
const itemRefCallback = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((node, value, disabled)=>{
|
||
const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
|
||
const isSelectedItem = context.value !== void 0 && context.value === value;
|
||
if (isSelectedItem || isFirstValidItem) {
|
||
setSelectedItem(node);
|
||
if (isFirstValidItem) firstValidItemFoundRef.current = true;
|
||
}
|
||
}, [
|
||
context.value
|
||
]);
|
||
const handleItemLeave = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>content?.focus(), [
|
||
content
|
||
]);
|
||
const itemTextRefCallback = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((node, value, disabled)=>{
|
||
const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
|
||
const isSelectedItem = context.value !== void 0 && context.value === value;
|
||
if (isSelectedItem || isFirstValidItem) {
|
||
setSelectedItemText(node);
|
||
}
|
||
}, [
|
||
context.value
|
||
]);
|
||
const SelectPosition = position === "popper" ? SelectPopperPosition : SelectItemAlignedPosition;
|
||
const popperContentProps = SelectPosition === SelectPopperPosition ? {
|
||
side,
|
||
sideOffset,
|
||
align,
|
||
alignOffset,
|
||
arrowPadding,
|
||
collisionBoundary,
|
||
collisionPadding,
|
||
sticky,
|
||
hideWhenDetached,
|
||
avoidCollisions
|
||
} : {};
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectContentProvider, {
|
||
scope: __scopeSelect,
|
||
content,
|
||
viewport,
|
||
onViewportChange: setViewport,
|
||
itemRefCallback,
|
||
selectedItem,
|
||
onItemLeave: handleItemLeave,
|
||
itemTextRefCallback,
|
||
focusSelectedItem,
|
||
selectedItemText,
|
||
position,
|
||
isPositioned,
|
||
searchRef,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$react$2d$remove$2d$scroll$40$2$2e$7$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f$react$2d$remove$2d$scroll$2f$dist$2f$es2015$2f$Combination$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__RemoveScroll$3e$__["RemoveScroll"], {
|
||
as: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$slot$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Slot"],
|
||
allowPinchZoom: true,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$focus$2d$scope$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$r_d785daf6985fc8350fb3781de275c6b6$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$focus$2d$scope$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["FocusScope"], {
|
||
asChild: true,
|
||
trapped: context.open,
|
||
onMountAutoFocus: (event)=>{
|
||
event.preventDefault();
|
||
},
|
||
onUnmountAutoFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(onCloseAutoFocus, (event)=>{
|
||
context.trigger?.focus({
|
||
preventScroll: true
|
||
});
|
||
event.preventDefault();
|
||
}),
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$dismissable$2d$layer$40$1$2e$1$2e$3_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$t_93e149627c30a83695c926d31c853576$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dismissable$2d$layer$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["DismissableLayer"], {
|
||
asChild: true,
|
||
disableOutsidePointerEvents: true,
|
||
onEscapeKeyDown,
|
||
onPointerDownOutside,
|
||
onFocusOutside: (event)=>event.preventDefault(),
|
||
onDismiss: ()=>context.onOpenChange(false),
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectPosition, {
|
||
role: "listbox",
|
||
id: context.contentId,
|
||
"data-state": context.open ? "open" : "closed",
|
||
dir: context.dir,
|
||
onContextMenu: (event)=>event.preventDefault(),
|
||
...contentProps,
|
||
...popperContentProps,
|
||
onPlaced: ()=>setIsPositioned(true),
|
||
ref: composedRefs,
|
||
style: {
|
||
// flex layout so we can place the scroll buttons properly
|
||
display: "flex",
|
||
flexDirection: "column",
|
||
// reset the outline by default as the content MAY get focused
|
||
outline: "none",
|
||
...contentProps.style
|
||
},
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(contentProps.onKeyDown, (event)=>{
|
||
const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
|
||
if (event.key === "Tab") event.preventDefault();
|
||
if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
|
||
if ([
|
||
"ArrowUp",
|
||
"ArrowDown",
|
||
"Home",
|
||
"End"
|
||
].includes(event.key)) {
|
||
const items = getItems().filter((item)=>!item.disabled);
|
||
let candidateNodes = items.map((item)=>item.ref.current);
|
||
if ([
|
||
"ArrowUp",
|
||
"End"
|
||
].includes(event.key)) {
|
||
candidateNodes = candidateNodes.slice().reverse();
|
||
}
|
||
if ([
|
||
"ArrowUp",
|
||
"ArrowDown"
|
||
].includes(event.key)) {
|
||
const currentElement = event.target;
|
||
const currentIndex = candidateNodes.indexOf(currentElement);
|
||
candidateNodes = candidateNodes.slice(currentIndex + 1);
|
||
}
|
||
setTimeout(()=>focusFirst(candidateNodes));
|
||
event.preventDefault();
|
||
}
|
||
})
|
||
})
|
||
})
|
||
})
|
||
})
|
||
});
|
||
});
|
||
SelectContentImpl.displayName = CONTENT_IMPL_NAME;
|
||
var ITEM_ALIGNED_POSITION_NAME = "SelectItemAlignedPosition";
|
||
var SelectItemAlignedPosition = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, onPlaced, ...popperProps } = props;
|
||
const context = useSelectContext(CONTENT_NAME, __scopeSelect);
|
||
const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);
|
||
const [contentWrapper, setContentWrapper] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const [content, setContent] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, (node)=>setContent(node));
|
||
const getItems = useCollection(__scopeSelect);
|
||
const shouldExpandOnScrollRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](false);
|
||
const shouldRepositionRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](true);
|
||
const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;
|
||
const position = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>{
|
||
if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {
|
||
const triggerRect = context.trigger.getBoundingClientRect();
|
||
const contentRect = content.getBoundingClientRect();
|
||
const valueNodeRect = context.valueNode.getBoundingClientRect();
|
||
const itemTextRect = selectedItemText.getBoundingClientRect();
|
||
if (context.dir !== "rtl") {
|
||
const itemTextOffset = itemTextRect.left - contentRect.left;
|
||
const left = valueNodeRect.left - itemTextOffset;
|
||
const leftDelta = triggerRect.left - left;
|
||
const minContentWidth = triggerRect.width + leftDelta;
|
||
const contentWidth = Math.max(minContentWidth, contentRect.width);
|
||
const rightEdge = window.innerWidth - CONTENT_MARGIN;
|
||
const clampedLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$number$40$1$2e$1$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$number$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(left, [
|
||
CONTENT_MARGIN,
|
||
// Prevents the content from going off the starting edge of the
|
||
// viewport. It may still go off the ending edge, but this can be
|
||
// controlled by the user since they may want to manage overflow in a
|
||
// specific way.
|
||
// https://github.com/radix-ui/primitives/issues/2049
|
||
Math.max(CONTENT_MARGIN, rightEdge - contentWidth)
|
||
]);
|
||
contentWrapper.style.minWidth = minContentWidth + "px";
|
||
contentWrapper.style.left = clampedLeft + "px";
|
||
} else {
|
||
const itemTextOffset = contentRect.right - itemTextRect.right;
|
||
const right = window.innerWidth - valueNodeRect.right - itemTextOffset;
|
||
const rightDelta = window.innerWidth - triggerRect.right - right;
|
||
const minContentWidth = triggerRect.width + rightDelta;
|
||
const contentWidth = Math.max(minContentWidth, contentRect.width);
|
||
const leftEdge = window.innerWidth - CONTENT_MARGIN;
|
||
const clampedRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$number$40$1$2e$1$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$number$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["clamp"])(right, [
|
||
CONTENT_MARGIN,
|
||
Math.max(CONTENT_MARGIN, leftEdge - contentWidth)
|
||
]);
|
||
contentWrapper.style.minWidth = minContentWidth + "px";
|
||
contentWrapper.style.right = clampedRight + "px";
|
||
}
|
||
const items = getItems();
|
||
const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;
|
||
const itemsHeight = viewport.scrollHeight;
|
||
const contentStyles = window.getComputedStyle(content);
|
||
const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);
|
||
const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);
|
||
const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);
|
||
const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);
|
||
const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;
|
||
const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);
|
||
const viewportStyles = window.getComputedStyle(viewport);
|
||
const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);
|
||
const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);
|
||
const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;
|
||
const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;
|
||
const selectedItemHalfHeight = selectedItem.offsetHeight / 2;
|
||
const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;
|
||
const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;
|
||
const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;
|
||
const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;
|
||
if (willAlignWithoutTopOverflow) {
|
||
const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;
|
||
contentWrapper.style.bottom = "0px";
|
||
const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;
|
||
const clampedTriggerMiddleToBottomEdge = Math.max(triggerMiddleToBottomEdge, selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport
|
||
(isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth);
|
||
const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;
|
||
contentWrapper.style.height = height + "px";
|
||
} else {
|
||
const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;
|
||
contentWrapper.style.top = "0px";
|
||
const clampedTopEdgeToTriggerMiddle = Math.max(topEdgeToTriggerMiddle, contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport
|
||
(isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight);
|
||
const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;
|
||
contentWrapper.style.height = height + "px";
|
||
viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;
|
||
}
|
||
contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;
|
||
contentWrapper.style.minHeight = minContentHeight + "px";
|
||
contentWrapper.style.maxHeight = availableHeight + "px";
|
||
onPlaced?.();
|
||
requestAnimationFrame(()=>shouldExpandOnScrollRef.current = true);
|
||
}
|
||
}, [
|
||
getItems,
|
||
context.trigger,
|
||
context.valueNode,
|
||
contentWrapper,
|
||
content,
|
||
viewport,
|
||
selectedItem,
|
||
selectedItemText,
|
||
context.dir,
|
||
onPlaced
|
||
]);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>position(), [
|
||
position
|
||
]);
|
||
const [contentZIndex, setContentZIndex] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"]();
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
|
||
}, [
|
||
content
|
||
]);
|
||
const handleScrollButtonChange = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((node)=>{
|
||
if (node && shouldRepositionRef.current === true) {
|
||
position();
|
||
focusSelectedItem?.();
|
||
shouldRepositionRef.current = false;
|
||
}
|
||
}, [
|
||
position,
|
||
focusSelectedItem
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectViewportProvider, {
|
||
scope: __scopeSelect,
|
||
contentWrapper,
|
||
shouldExpandOnScrollRef,
|
||
onScrollButtonChange: handleScrollButtonChange,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("div", {
|
||
ref: setContentWrapper,
|
||
style: {
|
||
display: "flex",
|
||
flexDirection: "column",
|
||
position: "fixed",
|
||
zIndex: contentZIndex
|
||
},
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
...popperProps,
|
||
ref: composedRefs,
|
||
style: {
|
||
// When we get the height of the content, it includes borders. If we were to set
|
||
// the height without having `boxSizing: 'border-box'` it would be too big.
|
||
boxSizing: "border-box",
|
||
// We need to ensure the content doesn't get taller than the wrapper
|
||
maxHeight: "100%",
|
||
...popperProps.style
|
||
}
|
||
})
|
||
})
|
||
});
|
||
});
|
||
SelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;
|
||
var POPPER_POSITION_NAME = "SelectPopperPosition";
|
||
var SelectPopperPosition = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, align = "start", collisionPadding = CONTENT_MARGIN, ...popperProps } = props;
|
||
const popperScope = usePopperScope(__scopeSelect);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Content"], {
|
||
...popperScope,
|
||
...popperProps,
|
||
ref: forwardedRef,
|
||
align,
|
||
collisionPadding,
|
||
style: {
|
||
// Ensure border-box for floating-ui calculations
|
||
boxSizing: "border-box",
|
||
...popperProps.style,
|
||
// re-namespace exposed content custom properties
|
||
...{
|
||
"--radix-select-content-transform-origin": "var(--radix-popper-transform-origin)",
|
||
"--radix-select-content-available-width": "var(--radix-popper-available-width)",
|
||
"--radix-select-content-available-height": "var(--radix-popper-available-height)",
|
||
"--radix-select-trigger-width": "var(--radix-popper-anchor-width)",
|
||
"--radix-select-trigger-height": "var(--radix-popper-anchor-height)"
|
||
}
|
||
}
|
||
});
|
||
});
|
||
SelectPopperPosition.displayName = POPPER_POSITION_NAME;
|
||
var [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});
|
||
var VIEWPORT_NAME = "SelectViewport";
|
||
var SelectViewport = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, nonce, ...viewportProps } = props;
|
||
const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);
|
||
const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, contentContext.onViewportChange);
|
||
const prevScrollTopRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](0);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxs"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fragment"], {
|
||
children: [
|
||
/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("style", {
|
||
dangerouslySetInnerHTML: {
|
||
__html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`
|
||
},
|
||
nonce
|
||
}),
|
||
/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.Slot, {
|
||
scope: __scopeSelect,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
"data-radix-select-viewport": "",
|
||
role: "presentation",
|
||
...viewportProps,
|
||
ref: composedRefs,
|
||
style: {
|
||
// we use position: 'relative' here on the `viewport` so that when we call
|
||
// `selectedItem.offsetTop` in calculations, the offset is relative to the viewport
|
||
// (independent of the scrollUpButton).
|
||
position: "relative",
|
||
flex: 1,
|
||
// Viewport should only be scrollable in the vertical direction.
|
||
// This won't work in vertical writing modes, so we'll need to
|
||
// revisit this if/when that is supported
|
||
// https://developer.chrome.com/blog/vertical-form-controls
|
||
overflow: "hidden auto",
|
||
...viewportProps.style
|
||
},
|
||
onScroll: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(viewportProps.onScroll, (event)=>{
|
||
const viewport = event.currentTarget;
|
||
const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;
|
||
if (shouldExpandOnScrollRef?.current && contentWrapper) {
|
||
const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);
|
||
if (scrolledBy > 0) {
|
||
const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;
|
||
const cssMinHeight = parseFloat(contentWrapper.style.minHeight);
|
||
const cssHeight = parseFloat(contentWrapper.style.height);
|
||
const prevHeight = Math.max(cssMinHeight, cssHeight);
|
||
if (prevHeight < availableHeight) {
|
||
const nextHeight = prevHeight + scrolledBy;
|
||
const clampedNextHeight = Math.min(availableHeight, nextHeight);
|
||
const heightDiff = nextHeight - clampedNextHeight;
|
||
contentWrapper.style.height = clampedNextHeight + "px";
|
||
if (contentWrapper.style.bottom === "0px") {
|
||
viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;
|
||
contentWrapper.style.justifyContent = "flex-end";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
prevScrollTopRef.current = viewport.scrollTop;
|
||
})
|
||
})
|
||
})
|
||
]
|
||
});
|
||
});
|
||
SelectViewport.displayName = VIEWPORT_NAME;
|
||
var GROUP_NAME = "SelectGroup";
|
||
var [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);
|
||
var SelectGroup = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, ...groupProps } = props;
|
||
const groupId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])();
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectGroupContextProvider, {
|
||
scope: __scopeSelect,
|
||
id: groupId,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
role: "group",
|
||
"aria-labelledby": groupId,
|
||
...groupProps,
|
||
ref: forwardedRef
|
||
})
|
||
});
|
||
});
|
||
SelectGroup.displayName = GROUP_NAME;
|
||
var LABEL_NAME = "SelectLabel";
|
||
var SelectLabel = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, ...labelProps } = props;
|
||
const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
id: groupContext.id,
|
||
...labelProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
SelectLabel.displayName = LABEL_NAME;
|
||
var ITEM_NAME = "SelectItem";
|
||
var [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);
|
||
var SelectItem = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, value, disabled = false, textValue: textValueProp, ...itemProps } = props;
|
||
const context = useSelectContext(ITEM_NAME, __scopeSelect);
|
||
const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);
|
||
const isSelected = context.value === value;
|
||
const [textValue, setTextValue] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](textValueProp ?? "");
|
||
const [isFocused, setIsFocused] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, (node)=>contentContext.itemRefCallback?.(node, value, disabled));
|
||
const textId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$id$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$id$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useId"])();
|
||
const pointerTypeRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"]("touch");
|
||
const handleSelect = ()=>{
|
||
if (!disabled) {
|
||
context.onValueChange(value);
|
||
context.onOpenChange(false);
|
||
}
|
||
};
|
||
if (value === "") {
|
||
throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");
|
||
}
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectItemContextProvider, {
|
||
scope: __scopeSelect,
|
||
value,
|
||
disabled,
|
||
textId,
|
||
isSelected,
|
||
onItemTextChange: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((node)=>{
|
||
setTextValue((prevTextValue)=>prevTextValue || (node?.textContent ?? "").trim());
|
||
}, []),
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(Collection.ItemSlot, {
|
||
scope: __scopeSelect,
|
||
value,
|
||
disabled,
|
||
textValue,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
role: "option",
|
||
"aria-labelledby": textId,
|
||
"data-highlighted": isFocused ? "" : void 0,
|
||
"aria-selected": isSelected && isFocused,
|
||
"data-state": isSelected ? "checked" : "unchecked",
|
||
"aria-disabled": disabled || void 0,
|
||
"data-disabled": disabled ? "" : void 0,
|
||
tabIndex: disabled ? void 0 : -1,
|
||
...itemProps,
|
||
ref: composedRefs,
|
||
onFocus: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onFocus, ()=>setIsFocused(true)),
|
||
onBlur: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onBlur, ()=>setIsFocused(false)),
|
||
onClick: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onClick, ()=>{
|
||
if (pointerTypeRef.current !== "mouse") handleSelect();
|
||
}),
|
||
onPointerUp: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onPointerUp, ()=>{
|
||
if (pointerTypeRef.current === "mouse") handleSelect();
|
||
}),
|
||
onPointerDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onPointerDown, (event)=>{
|
||
pointerTypeRef.current = event.pointerType;
|
||
}),
|
||
onPointerMove: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onPointerMove, (event)=>{
|
||
pointerTypeRef.current = event.pointerType;
|
||
if (disabled) {
|
||
contentContext.onItemLeave?.();
|
||
} else if (pointerTypeRef.current === "mouse") {
|
||
event.currentTarget.focus({
|
||
preventScroll: true
|
||
});
|
||
}
|
||
}),
|
||
onPointerLeave: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onPointerLeave, (event)=>{
|
||
if (event.currentTarget === document.activeElement) {
|
||
contentContext.onItemLeave?.();
|
||
}
|
||
}),
|
||
onKeyDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(itemProps.onKeyDown, (event)=>{
|
||
const isTypingAhead = contentContext.searchRef?.current !== "";
|
||
if (isTypingAhead && event.key === " ") return;
|
||
if (SELECTION_KEYS.includes(event.key)) handleSelect();
|
||
if (event.key === " ") event.preventDefault();
|
||
})
|
||
})
|
||
})
|
||
});
|
||
});
|
||
SelectItem.displayName = ITEM_NAME;
|
||
var ITEM_TEXT_NAME = "SelectItemText";
|
||
var SelectItemText = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, className, style, ...itemTextProps } = props;
|
||
const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);
|
||
const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);
|
||
const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);
|
||
const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);
|
||
const [itemTextNode, setItemTextNode] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, (node)=>setItemTextNode(node), itemContext.onItemTextChange, (node)=>contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled));
|
||
const textContent = itemTextNode?.textContent;
|
||
const nativeOption = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"](()=>/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("option", {
|
||
value: itemContext.value,
|
||
disabled: itemContext.disabled,
|
||
children: textContent
|
||
}, itemContext.value), [
|
||
itemContext.disabled,
|
||
itemContext.value,
|
||
textContent
|
||
]);
|
||
const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
onNativeOptionAdd(nativeOption);
|
||
return ()=>onNativeOptionRemove(nativeOption);
|
||
}, [
|
||
onNativeOptionAdd,
|
||
onNativeOptionRemove,
|
||
nativeOption
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxs"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Fragment"], {
|
||
children: [
|
||
/* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
id: itemContext.textId,
|
||
...itemTextProps,
|
||
ref: composedRefs
|
||
}),
|
||
itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$dom$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["createPortal"](itemTextProps.children, context.valueNode) : null
|
||
]
|
||
});
|
||
});
|
||
SelectItemText.displayName = ITEM_TEXT_NAME;
|
||
var ITEM_INDICATOR_NAME = "SelectItemIndicator";
|
||
var SelectItemIndicator = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, ...itemIndicatorProps } = props;
|
||
const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);
|
||
return itemContext.isSelected ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].span, {
|
||
"aria-hidden": true,
|
||
...itemIndicatorProps,
|
||
ref: forwardedRef
|
||
}) : null;
|
||
});
|
||
SelectItemIndicator.displayName = ITEM_INDICATOR_NAME;
|
||
var SCROLL_UP_BUTTON_NAME = "SelectScrollUpButton";
|
||
var SelectScrollUpButton = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
|
||
const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
|
||
const [canScrollUp, setCanScrollUp] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, viewportContext.onScrollButtonChange);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (contentContext.viewport && contentContext.isPositioned) {
|
||
let handleScroll2 = function() {
|
||
const canScrollUp2 = viewport.scrollTop > 0;
|
||
setCanScrollUp(canScrollUp2);
|
||
};
|
||
var handleScroll = handleScroll2;
|
||
const viewport = contentContext.viewport;
|
||
handleScroll2();
|
||
viewport.addEventListener("scroll", handleScroll2);
|
||
return ()=>viewport.removeEventListener("scroll", handleScroll2);
|
||
}
|
||
}, [
|
||
contentContext.viewport,
|
||
contentContext.isPositioned
|
||
]);
|
||
return canScrollUp ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectScrollButtonImpl, {
|
||
...props,
|
||
ref: composedRefs,
|
||
onAutoScroll: ()=>{
|
||
const { viewport, selectedItem } = contentContext;
|
||
if (viewport && selectedItem) {
|
||
viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;
|
||
}
|
||
}
|
||
}) : null;
|
||
});
|
||
SelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;
|
||
var SCROLL_DOWN_BUTTON_NAME = "SelectScrollDownButton";
|
||
var SelectScrollDownButton = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
|
||
const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
|
||
const [canScrollDown, setCanScrollDown] = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"](false);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, viewportContext.onScrollButtonChange);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
if (contentContext.viewport && contentContext.isPositioned) {
|
||
let handleScroll2 = function() {
|
||
const maxScroll = viewport.scrollHeight - viewport.clientHeight;
|
||
const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;
|
||
setCanScrollDown(canScrollDown2);
|
||
};
|
||
var handleScroll = handleScroll2;
|
||
const viewport = contentContext.viewport;
|
||
handleScroll2();
|
||
viewport.addEventListener("scroll", handleScroll2);
|
||
return ()=>viewport.removeEventListener("scroll", handleScroll2);
|
||
}
|
||
}, [
|
||
contentContext.viewport,
|
||
contentContext.isPositioned
|
||
]);
|
||
return canScrollDown ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(SelectScrollButtonImpl, {
|
||
...props,
|
||
ref: composedRefs,
|
||
onAutoScroll: ()=>{
|
||
const { viewport, selectedItem } = contentContext;
|
||
if (viewport && selectedItem) {
|
||
viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;
|
||
}
|
||
}
|
||
}) : null;
|
||
});
|
||
SelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
|
||
var SelectScrollButtonImpl = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;
|
||
const contentContext = useSelectContentContext("SelectScrollButton", __scopeSelect);
|
||
const autoScrollTimerRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const getItems = useCollection(__scopeSelect);
|
||
const clearAutoScrollTimer = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>{
|
||
if (autoScrollTimerRef.current !== null) {
|
||
window.clearInterval(autoScrollTimerRef.current);
|
||
autoScrollTimerRef.current = null;
|
||
}
|
||
}, []);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
return ()=>clearAutoScrollTimer();
|
||
}, [
|
||
clearAutoScrollTimer
|
||
]);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$layout$2d$effect$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$layout$2d$effect$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useLayoutEffect"])(()=>{
|
||
const activeItem = getItems().find((item)=>item.ref.current === document.activeElement);
|
||
activeItem?.ref.current?.scrollIntoView({
|
||
block: "nearest"
|
||
});
|
||
}, [
|
||
getItems
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
"aria-hidden": true,
|
||
...scrollIndicatorProps,
|
||
ref: forwardedRef,
|
||
style: {
|
||
flexShrink: 0,
|
||
...scrollIndicatorProps.style
|
||
},
|
||
onPointerDown: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(scrollIndicatorProps.onPointerDown, ()=>{
|
||
if (autoScrollTimerRef.current === null) {
|
||
autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
|
||
}
|
||
}),
|
||
onPointerMove: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(scrollIndicatorProps.onPointerMove, ()=>{
|
||
contentContext.onItemLeave?.();
|
||
if (autoScrollTimerRef.current === null) {
|
||
autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
|
||
}
|
||
}),
|
||
onPointerLeave: (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$primitive$40$1$2e$1$2e$1$2f$node_modules$2f40$radix$2d$ui$2f$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["composeEventHandlers"])(scrollIndicatorProps.onPointerLeave, ()=>{
|
||
clearAutoScrollTimer();
|
||
})
|
||
});
|
||
});
|
||
var SEPARATOR_NAME = "SelectSeparator";
|
||
var SelectSeparator = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, ...separatorProps } = props;
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$primitive$40$2$2e$0$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$rea_4f53963f71a6eb8b0116fe0dd1078946$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$primitive$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Primitive"].div, {
|
||
"aria-hidden": true,
|
||
...separatorProps,
|
||
ref: forwardedRef
|
||
});
|
||
});
|
||
SelectSeparator.displayName = SEPARATOR_NAME;
|
||
var ARROW_NAME = "SelectArrow";
|
||
var SelectArrow = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { __scopeSelect, ...arrowProps } = props;
|
||
const popperScope = usePopperScope(__scopeSelect);
|
||
const context = useSelectContext(ARROW_NAME, __scopeSelect);
|
||
const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);
|
||
return context.open && contentContext.position === "popper" ? /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$popper$40$1$2e$2$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$types$2b$react$40$_f51937a6043c1687ec731d0ff356eddd$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$popper$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Arrow"], {
|
||
...popperScope,
|
||
...arrowProps,
|
||
ref: forwardedRef
|
||
}) : null;
|
||
});
|
||
SelectArrow.displayName = ARROW_NAME;
|
||
function shouldShowPlaceholder(value) {
|
||
return value === "" || value === void 0;
|
||
}
|
||
var BubbleSelect = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["forwardRef"]((props, forwardedRef)=>{
|
||
const { value, ...selectProps } = props;
|
||
const ref = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](null);
|
||
const composedRefs = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$compose$2d$refs$40$1$2e$1$2e$1_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$compose$2d$refs$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useComposedRefs"])(forwardedRef, ref);
|
||
const prevValue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$previous$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$previous$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["usePrevious"])(value);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
const select = ref.current;
|
||
const selectProto = window.HTMLSelectElement.prototype;
|
||
const descriptor = Object.getOwnPropertyDescriptor(selectProto, "value");
|
||
const setValue = descriptor.set;
|
||
if (prevValue !== value && setValue) {
|
||
const event = new Event("change", {
|
||
bubbles: true
|
||
});
|
||
setValue.call(select, value);
|
||
select.dispatchEvent(event);
|
||
}
|
||
}, [
|
||
prevValue,
|
||
value
|
||
]);
|
||
return /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$visually$2d$hidden$40$1$2e$1$2e$1_$40$types$2b$react$2d$dom$40$19$2e$2$2e$3_$40$types$2b$react$40$19$2e$2$2e$6_$5f40$typ_c3f4d56b21f8f37d78014c19b521b01b$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$visually$2d$hidden$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["VisuallyHidden"], {
|
||
asChild: true,
|
||
children: /* @__PURE__ */ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsx"])("select", {
|
||
...selectProps,
|
||
ref: composedRefs,
|
||
defaultValue: value
|
||
})
|
||
});
|
||
});
|
||
BubbleSelect.displayName = "BubbleSelect";
|
||
function useTypeaheadSearch(onSearchChange) {
|
||
const handleSearchChange = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f40$radix$2d$ui$2b$react$2d$use$2d$callback$2d$ref$40$1$2e$1$2e$0_$40$types$2b$react$40$19$2e$2$2e$6_react$40$19$2e$2$2e$0$2f$node_modules$2f40$radix$2d$ui$2f$react$2d$use$2d$callback$2d$ref$2f$dist$2f$index$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallbackRef"])(onSearchChange);
|
||
const searchRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"]("");
|
||
const timerRef = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"](0);
|
||
const handleTypeaheadSearch = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"]((key)=>{
|
||
const search = searchRef.current + key;
|
||
handleSearchChange(search);
|
||
(function updateSearch(value) {
|
||
searchRef.current = value;
|
||
window.clearTimeout(timerRef.current);
|
||
if (value !== "") timerRef.current = window.setTimeout(()=>updateSearch(""), 1e3);
|
||
})(search);
|
||
}, [
|
||
handleSearchChange
|
||
]);
|
||
const resetTypeahead = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useCallback"](()=>{
|
||
searchRef.current = "";
|
||
window.clearTimeout(timerRef.current);
|
||
}, []);
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"](()=>{
|
||
return ()=>window.clearTimeout(timerRef.current);
|
||
}, []);
|
||
return [
|
||
searchRef,
|
||
handleTypeaheadSearch,
|
||
resetTypeahead
|
||
];
|
||
}
|
||
function findNextItem(items, search, currentItem) {
|
||
const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0]);
|
||
const normalizedSearch = isRepeated ? search[0] : search;
|
||
const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;
|
||
let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));
|
||
const excludeCurrentItem = normalizedSearch.length === 1;
|
||
if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v)=>v !== currentItem);
|
||
const nextItem = wrappedItems.find((item)=>item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase()));
|
||
return nextItem !== currentItem ? nextItem : void 0;
|
||
}
|
||
function wrapArray(array, startIndex) {
|
||
return array.map((_, index)=>array[(startIndex + index) % array.length]);
|
||
}
|
||
var Root2 = Select;
|
||
var Trigger = SelectTrigger;
|
||
var Value = SelectValue;
|
||
var Icon = SelectIcon;
|
||
var Portal = SelectPortal;
|
||
var Content2 = SelectContent;
|
||
var Viewport = SelectViewport;
|
||
var Group = SelectGroup;
|
||
var Label = SelectLabel;
|
||
var Item = SelectItem;
|
||
var ItemText = SelectItemText;
|
||
var ItemIndicator = SelectItemIndicator;
|
||
var ScrollUpButton = SelectScrollUpButton;
|
||
var ScrollDownButton = SelectScrollDownButton;
|
||
var Separator = SelectSeparator;
|
||
var Arrow2 = SelectArrow;
|
||
;
|
||
//# sourceMappingURL=index.mjs.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript) <export default as ChevronDownIcon>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ChevronDownIcon",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$down$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js [app-ssr] (ecmascript)");
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (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",
|
||
()=>ChevronUp
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-ssr] (ecmascript)");
|
||
;
|
||
const ChevronUp = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])("ChevronUp", [
|
||
[
|
||
"path",
|
||
{
|
||
d: "m18 15-6-6-6 6",
|
||
key: "153udz"
|
||
}
|
||
]
|
||
]);
|
||
;
|
||
//# sourceMappingURL=chevron-up.js.map
|
||
}),
|
||
"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (ecmascript) <export default as ChevronUpIcon>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ChevronUpIcon",
|
||
()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-ssr] (ecmascript)");
|
||
}),
|
||
];
|
||
|
||
//# sourceMappingURL=a0629__pnpm_4871c6a1._.js.map |