viba-cli 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-path-routes-manifest.json +8 -0
- package/.next/build-manifest.json +20 -0
- package/.next/export-marker.json +6 -0
- package/.next/fallback-build-manifest.json +12 -0
- package/.next/images-manifest.json +67 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +114 -0
- package/.next/required-server-files.js +330 -0
- package/.next/required-server-files.json +330 -0
- package/.next/routes-manifest.json +89 -0
- package/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_global-error/page/build-manifest.json +17 -0
- package/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_global-error/page.js +10 -0
- package/.next/server/app/_global-error/page.js.map +5 -0
- package/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
- package/.next/server/app/_global-error.html +2 -0
- package/.next/server/app/_global-error.meta +15 -0
- package/.next/server/app/_global-error.rsc +12 -0
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_full.segment.rsc +12 -0
- package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
- package/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/.next/server/app/_not-found/page/build-manifest.json +17 -0
- package/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/.next/server/app/_not-found/page.js +15 -0
- package/.next/server/app/_not-found/page.js.map +5 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +16 -0
- package/.next/server/app/_not-found.rsc +14 -0
- package/.next/server/app/_not-found.segments/_full.segment.rsc +14 -0
- package/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/.next/server/app/_not-found.segments/_index.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/.next/server/app/icon.png/route/app-paths-manifest.json +3 -0
- package/.next/server/app/icon.png/route/build-manifest.json +11 -0
- package/.next/server/app/icon.png/route.js +6 -0
- package/.next/server/app/icon.png/route.js.map +5 -0
- package/.next/server/app/icon.png/route.js.nft.json +1 -0
- package/.next/server/app/icon.png.body +0 -0
- package/.next/server/app/icon.png.meta +1 -0
- package/.next/server/app/index.html +1 -0
- package/.next/server/app/index.meta +14 -0
- package/.next/server/app/index.rsc +20 -0
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
- package/.next/server/app/index.segments/_full.segment.rsc +20 -0
- package/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/.next/server/app/index.segments/_index.segment.rsc +5 -0
- package/.next/server/app/index.segments/_tree.segment.rsc +4 -0
- package/.next/server/app/new/page/app-paths-manifest.json +3 -0
- package/.next/server/app/new/page/build-manifest.json +17 -0
- package/.next/server/app/new/page/next-font-manifest.json +11 -0
- package/.next/server/app/new/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/new/page/server-reference-manifest.json +245 -0
- package/.next/server/app/new/page.js +18 -0
- package/.next/server/app/new/page.js.map +5 -0
- package/.next/server/app/new/page.js.nft.json +1 -0
- package/.next/server/app/new/page_client-reference-manifest.js +2 -0
- package/.next/server/app/page/app-paths-manifest.json +3 -0
- package/.next/server/app/page/build-manifest.json +17 -0
- package/.next/server/app/page/next-font-manifest.json +11 -0
- package/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/page/server-reference-manifest.json +245 -0
- package/.next/server/app/page.js +18 -0
- package/.next/server/app/page.js.map +5 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +2 -0
- package/.next/server/app/session/[sessionId]/page/app-paths-manifest.json +3 -0
- package/.next/server/app/session/[sessionId]/page/build-manifest.json +17 -0
- package/.next/server/app/session/[sessionId]/page/next-font-manifest.json +11 -0
- package/.next/server/app/session/[sessionId]/page/react-loadable-manifest.json +1 -0
- package/.next/server/app/session/[sessionId]/page/server-reference-manifest.json +230 -0
- package/.next/server/app/session/[sessionId]/page.js +18 -0
- package/.next/server/app/session/[sessionId]/page.js.map +5 -0
- package/.next/server/app/session/[sessionId]/page.js.nft.json +1 -0
- package/.next/server/app/session/[sessionId]/page_client-reference-manifest.js +2 -0
- package/.next/server/app-paths-manifest.json +8 -0
- package/.next/server/chunks/[externals]_next_dist_a6d89067._.js +3 -0
- package/.next/server/chunks/[externals]_next_dist_a6d89067._.js.map +1 -0
- package/.next/server/chunks/[root-of-the-server]__c8bd587a._.js +21 -0
- package/.next/server/chunks/[root-of-the-server]__c8bd587a._.js.map +1 -0
- package/.next/server/chunks/[turbopack]_runtime.js +795 -0
- package/.next/server/chunks/[turbopack]_runtime.js.map +10 -0
- package/.next/server/chunks/_next-internal_server_app_icon_png_route_actions_fa3562e2.js +3 -0
- package/.next/server/chunks/_next-internal_server_app_icon_png_route_actions_fa3562e2.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0092b3d0._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0092b3d0._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d3b7eea._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__0d3b7eea._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__11fa4345._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__11fa4345._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__2c2d9a9f._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__2c2d9a9f._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__30652385._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__30652385._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4fb17f1e._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__4fb17f1e._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__606ef757._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__606ef757._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__62036393._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__62036393._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__69f5a83d._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__69f5a83d._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__78288fbe._.js +4 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__78288fbe._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__7bf94cba._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__7bf94cba._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__91c2c151._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__91c2c151._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__a457c799._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__a5d13d54._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__a5d13d54._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__cb11b5eb._.js +4 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__cb11b5eb._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__d7127f3c._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__d7127f3c._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e138fbba._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e138fbba._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e2f86be8._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__e2f86be8._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__edf0aa7a._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__edf0aa7a._.js.map +1 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__f91abafd._.js +3 -0
- package/.next/server/chunks/ssr/[root-of-the-server]__f91abafd._.js.map +1 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
- package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +10 -0
- package/.next/server/chunks/ssr/_3bf0a72b._.js +4 -0
- package/.next/server/chunks/ssr/_3bf0a72b._.js.map +1 -0
- package/.next/server/chunks/ssr/_5512ef6c._.js +6 -0
- package/.next/server/chunks/ssr/_5512ef6c._.js.map +1 -0
- package/.next/server/chunks/ssr/_62292aba._.js +9 -0
- package/.next/server/chunks/ssr/_62292aba._.js.map +1 -0
- package/.next/server/chunks/ssr/_9f0559fd._.js +6 -0
- package/.next/server/chunks/ssr/_9f0559fd._.js.map +1 -0
- package/.next/server/chunks/ssr/_eeb65f56._.js +4 -0
- package/.next/server/chunks/ssr/_eeb65f56._.js.map +1 -0
- package/.next/server/chunks/ssr/_ff04b309._.js +4 -0
- package/.next/server/chunks/ssr/_ff04b309._.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_75761787.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_75761787.js.map +1 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_554ec2bf.js +3 -0
- package/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_554ec2bf.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_d3586d0c._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_d3586d0c._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_08570d7f._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_174ae28d._.js +10 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_174ae28d._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_65e60196._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_65e60196._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_9774470f._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_9774470f._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_45780354.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_ece394eb.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_15817684.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_15817684.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02f39477.js +4 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_02f39477.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_eedfc1fd._.js +6 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_esm_eedfc1fd._.js.map +1 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_f9713a08._.js +3 -0
- package/.next/server/chunks/ssr/node_modules_next_dist_f9713a08._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_0c8a77b8._.js +3 -0
- package/.next/server/chunks/ssr/src_app_0c8a77b8._.js.map +1 -0
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js +7 -0
- package/.next/server/chunks/ssr/src_app_session_[sessionId]_SessionPageClient_tsx_dab490d7._.js.map +1 -0
- package/.next/server/functions-config-manifest.json +4 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +21 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +23 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +2 -0
- package/.next/server/pages-manifest.json +4 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +543 -0
- package/.next/static/chunks/0dfa5be743492ce2.js +2 -0
- package/.next/static/chunks/2821166934dd45eb.js +1 -0
- package/.next/static/chunks/502b96711c502bab.js +1 -0
- package/.next/static/chunks/8906ac8ef3ff98d4.js +4 -0
- package/.next/static/chunks/8d69e9f4553d4e60.css +3 -0
- package/.next/static/chunks/a6dad97d9634a72d.js +1 -0
- package/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- package/.next/static/chunks/aee6c7720838f8a2.js +1 -0
- package/.next/static/chunks/be08234e26dea978.js +5 -0
- package/.next/static/chunks/d2be314c3ece3fbe.js +1 -0
- package/.next/static/chunks/e0f2772b94870c7d.js +7 -0
- package/.next/static/chunks/f22bcf2c1367768a.js +1 -0
- package/.next/static/chunks/f997a831de68afef.js +1 -0
- package/.next/static/chunks/ff1a16fafef87110.js +1 -0
- package/.next/static/chunks/turbopack-53cb197a85e106e9.js +4 -0
- package/.next/static/e8aTDAK_fufq5OYn8Yv56/_buildManifest.js +15 -0
- package/.next/static/e8aTDAK_fufq5OYn8Yv56/_clientMiddlewareManifest.json +1 -0
- package/.next/static/e8aTDAK_fufq5OYn8Yv56/_ssgManifest.js +1 -0
- package/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- package/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- package/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- package/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- package/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- package/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
- package/.next/static/media/icon.a4b588e3.png +0 -0
- package/README.md +86 -0
- package/bin/viba.mjs +151 -0
- package/next.config.mjs +13 -0
- package/package.json +59 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/next.svg +1 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/%40swc/helpers/cjs/_interop_require_default.cjs","../../../../node_modules/next/src/shared/lib/utils/warn-once.ts","../../../../node_modules/next/src/shared/lib/deployment-id.ts","../../../../node_modules/next/src/shared/lib/image-blur-svg.ts","../../../../node_modules/next/src/shared/lib/image-config.ts","../../../../node_modules/next/src/shared/lib/get-img-props.ts","../../../../node_modules/next/src/shared/lib/side-effect.tsx","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/head-manager-context.ts","../../../../node_modules/next/src/shared/lib/head.tsx","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/image-config-context.ts","../../../../node_modules/next/src/server/route-modules/app-page/vendored/contexts/router-context.ts","../../../../node_modules/next/src/shared/lib/find-closest-quality.ts","../../../../node_modules/next/src/shared/lib/image-loader.ts","../../../../node_modules/next/src/client/use-merged-ref.ts","../../../../node_modules/next/src/client/image-component.tsx","../../../../node_modules/next/src/shared/lib/image-external.tsx","../../../../node_modules/next/image.js","../../../../src/app/actions/data%3A2dc7f4%20%3Ctext/javascript%3E","../../../../src/components/FileBrowser.tsx","../../../../src/app/actions/data%3Aa679a6%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A7b95b9%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Afae526%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Ad8ab44%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3Af567f1%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A184079%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A33cc29%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A3ee1ca%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A026c03%20%3Ctext/javascript%3E","../../../../src/app/actions/data%3A98e180%20%3Ctext/javascript%3E","../../../../src/components/GitRepoSelector.tsx","../../../../node_modules/lucide-react/src/icons/chevron-right.ts","../../../../node_modules/lucide-react/src/icons/cpu.ts","../../../../node_modules/lucide-react/src/icons/plus.ts","../../../../node_modules/lucide-react/src/icons/bot.ts","../../../../node_modules/lucide-react/src/icons/folder-git-2.ts","../../../../node_modules/lucide-react/src/icons/x.ts","../../../../node_modules/lucide-react/src/icons/git-branch.ts","../../../../node_modules/lucide-react/src/icons/folder-cog.ts"],"sourcesContent":["\"use strict\";\n\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports._ = _interop_require_default;\n","let warnOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const warnings = new Set<string>()\n warnOnce = (msg: string) => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\nexport { warnOnce }\n","// This could also be a variable instead of a function, but some unit tests want to change the ID at\n// runtime. Even though that would never happen in a real deployment.\nexport function getDeploymentId(): string | undefined {\n return process.env.NEXT_DEPLOYMENT_ID\n}\n\nexport function getDeploymentIdQueryOrEmptyString(): string {\n let deploymentId = getDeploymentId()\n if (deploymentId) {\n return `?dpl=${deploymentId}`\n }\n return ''\n}\n","/**\n * A shared function, used on both client and server, to generate a SVG blur placeholder.\n */\nexport function getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL,\n objectFit,\n}: {\n widthInt?: number\n heightInt?: number\n blurWidth?: number\n blurHeight?: number\n blurDataURL: string\n objectFit?: string\n}): string {\n const std = 20\n const svgWidth = blurWidth ? blurWidth * 40 : widthInt\n const svgHeight = blurHeight ? blurHeight * 40 : heightInt\n\n const viewBox =\n svgWidth && svgHeight ? `viewBox='0 0 ${svgWidth} ${svgHeight}'` : ''\n const preserveAspectRatio = viewBox\n ? 'none'\n : objectFit === 'contain'\n ? 'xMidYMid'\n : objectFit === 'cover'\n ? 'xMidYMid slice'\n : 'none'\n\n return `%3Csvg xmlns='http://www.w3.org/2000/svg' ${viewBox}%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='${std}'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='${preserveAspectRatio}' style='filter: url(%23b);' href='${blurDataURL}'/%3E%3C/svg%3E`\n}\n","export const VALID_LOADERS = [\n 'default',\n 'imgix',\n 'cloudinary',\n 'akamai',\n 'custom',\n] as const\n\nexport type LoaderValue = (typeof VALID_LOADERS)[number]\n\nexport type ImageLoaderProps = {\n src: string\n width: number\n quality?: number\n}\n\nexport type ImageLoaderPropsWithConfig = ImageLoaderProps & {\n config: Readonly<ImageConfig>\n}\n\nexport type LocalPattern = {\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single path segment.\n * Double `**` matches any number of path segments.\n */\n pathname?: string\n\n /**\n * Can be literal query string such as `?v=1` or\n * empty string meaning no query string.\n */\n search?: string\n}\n\nexport type RemotePattern = {\n /**\n * Must be `http` or `https`.\n */\n protocol?: 'http' | 'https'\n\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single subdomain.\n * Double `**` matches any number of subdomains.\n */\n hostname: string\n\n /**\n * Can be literal port such as `8080` or empty string\n * meaning no port.\n */\n port?: string\n\n /**\n * Can be literal or wildcard.\n * Single `*` matches a single path segment.\n * Double `**` matches any number of path segments.\n */\n pathname?: string\n\n /**\n * Can be literal query string such as `?v=1` or\n * empty string meaning no query string.\n */\n search?: string\n}\n\ntype ImageFormat = 'image/avif' | 'image/webp'\n\n/**\n * Image configurations\n *\n * @see [Image configuration options](https://nextjs.org/docs/api-reference/next/image#configuration-options)\n */\nexport type ImageConfigComplete = {\n /** @see [Device sizes documentation](https://nextjs.org/docs/api-reference/next/image#device-sizes) */\n deviceSizes: number[]\n\n /** @see [Image sizing documentation](https://nextjs.org/docs/app/building-your-application/optimizing/images#image-sizing) */\n imageSizes: number[]\n\n /** @see [Image loaders configuration](https://nextjs.org/docs/api-reference/next/legacy/image#loader) */\n loader: LoaderValue\n\n /** @see [Image loader configuration](https://nextjs.org/docs/app/api-reference/components/image#path) */\n path: string\n\n /** @see [Image loader configuration](https://nextjs.org/docs/api-reference/next/image#loader-configuration) */\n loaderFile: string\n\n /**\n * @deprecated Use `remotePatterns` instead.\n */\n domains: string[]\n\n /** @see [Disable static image import configuration](https://nextjs.org/docs/api-reference/next/image#disable-static-imports) */\n disableStaticImages: boolean\n\n /** @see [Cache behavior](https://nextjs.org/docs/api-reference/next/image#caching-behavior) */\n minimumCacheTTL: number\n\n /** @see [Acceptable formats](https://nextjs.org/docs/api-reference/next/image#acceptable-formats) */\n formats: ImageFormat[]\n\n /** @see [Maximum Redirects](https://nextjs.org/docs/api-reference/next/image#maximumredirects) */\n maximumRedirects: number\n\n /** @see [Maximum Response Body](https://nextjs.org/docs/api-reference/next/image#maximumresponsebody) */\n maximumResponseBody: number\n\n /** @see [Dangerously Allow Local IP](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-local-ip) */\n dangerouslyAllowLocalIP: boolean\n\n /** @see [Dangerously Allow SVG](https://nextjs.org/docs/api-reference/next/image#dangerously-allow-svg) */\n dangerouslyAllowSVG: boolean\n\n /** @see [Content Security Policy](https://nextjs.org/docs/api-reference/next/image#contentsecuritypolicy) */\n contentSecurityPolicy: string\n\n /** @see [Content Disposition Type](https://nextjs.org/docs/api-reference/next/image#contentdispositiontype) */\n contentDispositionType: 'inline' | 'attachment'\n\n /** @see [Remote Patterns](https://nextjs.org/docs/api-reference/next/image#remotepatterns) */\n remotePatterns: Array<URL | RemotePattern>\n\n /** @see [Local Patterns](https://nextjs.org/docs/api-reference/next/image#localPatterns) */\n localPatterns: LocalPattern[] | undefined\n\n /** @see [Qualities](https://nextjs.org/docs/api-reference/next/image#qualities) */\n qualities: number[] | undefined\n\n /** @see [Unoptimized](https://nextjs.org/docs/api-reference/next/image#unoptimized) */\n unoptimized: boolean\n}\n\nexport type ImageConfig = Partial<ImageConfigComplete>\n\nexport const imageConfigDefault: ImageConfigComplete = {\n deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],\n imageSizes: [32, 48, 64, 96, 128, 256, 384],\n path: '/_next/image',\n loader: 'default',\n loaderFile: '',\n /**\n * @deprecated Use `remotePatterns` instead to protect your application from malicious users.\n */\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 14400, // 4 hours\n formats: ['image/webp'],\n maximumRedirects: 3,\n maximumResponseBody: 50_000_000, // 50 MB\n dangerouslyAllowLocalIP: false,\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: `script-src 'none'; frame-src 'none'; sandbox;`,\n contentDispositionType: 'attachment',\n localPatterns: undefined, // default: allow all local images\n remotePatterns: [], // default: allow no remote images\n qualities: [75],\n unoptimized: false,\n}\n","import { warnOnce } from './utils/warn-once'\nimport { getDeploymentId } from './deployment-id'\nimport { getImageBlurSvg } from './image-blur-svg'\nimport { imageConfigDefault } from './image-config'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n ImageLoaderPropsWithConfig,\n} from './image-config'\n\nimport type { CSSProperties, JSX } from 'react'\n\nexport interface StaticImageData {\n src: string\n height: number\n width: number\n blurDataURL?: string\n blurWidth?: number\n blurHeight?: number\n}\n\nexport interface StaticRequire {\n default: StaticImageData\n}\n\nexport type StaticImport = StaticRequire | StaticImageData\n\nexport type ImageProps = Omit<\n JSX.IntrinsicElements['img'],\n 'src' | 'srcSet' | 'ref' | 'alt' | 'width' | 'height' | 'loading'\n> & {\n src: string | StaticImport\n alt: string\n width?: number | `${number}`\n height?: number | `${number}`\n fill?: boolean\n loader?: ImageLoader\n quality?: number | `${number}`\n preload?: boolean\n /**\n * @deprecated Use `preload` prop instead.\n * See https://nextjs.org/docs/app/api-reference/components/image#preload\n */\n priority?: boolean\n loading?: LoadingValue\n placeholder?: PlaceholderValue\n blurDataURL?: string\n unoptimized?: boolean\n overrideSrc?: string\n /**\n * @deprecated Use `onLoad` instead.\n * @see https://nextjs.org/docs/app/api-reference/components/image#onload\n */\n onLoadingComplete?: OnLoadingComplete\n /**\n * @deprecated Use `fill` prop instead of `layout=\"fill\"` or change import to `next/legacy/image`.\n * @see https://nextjs.org/docs/api-reference/next/legacy/image\n */\n layout?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectFit?: string\n /**\n * @deprecated Use `style` prop instead.\n */\n objectPosition?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyBoundary?: string\n /**\n * @deprecated This prop does not do anything.\n */\n lazyRoot?: string\n}\n\nexport type ImgProps = Omit<ImageProps, 'src' | 'loader'> & {\n loading: LoadingValue\n width: number | undefined\n height: number | undefined\n style: NonNullable<JSX.IntrinsicElements['img']['style']>\n sizes: string | undefined\n srcSet: string | undefined\n src: string\n}\n\nconst VALID_LOADING_VALUES = ['lazy', 'eager', undefined] as const\n\n// Object-fit values that are not valid background-size values\nconst INVALID_BACKGROUND_SIZE_VALUES = [\n '-moz-initial',\n 'fill',\n 'none',\n 'scale-down',\n undefined,\n]\ntype LoadingValue = (typeof VALID_LOADING_VALUES)[number]\ntype ImageConfig = ImageConfigComplete & {\n allSizes: number[]\n output?: 'standalone' | 'export'\n}\n\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\n// Do not export - this is an internal type only\n// because `next.config.js` is only meant for the\n// built-in loaders, not for a custom loader() prop.\ntype ImageLoaderWithConfig = (p: ImageLoaderPropsWithConfig) => string\n\nexport type PlaceholderValue = 'blur' | 'empty' | `data:image/${string}`\nexport type OnLoad = React.ReactEventHandler<HTMLImageElement> | undefined\nexport type OnLoadingComplete = (img: HTMLImageElement) => void\n\nexport type PlaceholderStyle = Partial<\n Pick<\n CSSProperties,\n | 'backgroundSize'\n | 'backgroundPosition'\n | 'backgroundRepeat'\n | 'backgroundImage'\n >\n>\n\nfunction isStaticRequire(\n src: StaticRequire | StaticImageData\n): src is StaticRequire {\n return (src as StaticRequire).default !== undefined\n}\n\nfunction isStaticImageData(\n src: StaticRequire | StaticImageData\n): src is StaticImageData {\n return (src as StaticImageData).src !== undefined\n}\n\nfunction isStaticImport(src: string | StaticImport): src is StaticImport {\n return (\n !!src &&\n typeof src === 'object' &&\n (isStaticRequire(src as StaticImport) ||\n isStaticImageData(src as StaticImport))\n )\n}\n\nconst allImgs = new Map<\n string,\n { src: string; loading: LoadingValue; placeholder: PlaceholderValue }\n>()\nlet perfObserver: PerformanceObserver | undefined\n\nfunction getInt(x: unknown): number | undefined {\n if (typeof x === 'undefined') {\n return x\n }\n if (typeof x === 'number') {\n return Number.isFinite(x) ? x : NaN\n }\n if (typeof x === 'string' && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10)\n }\n return NaN\n}\n\nfunction getWidths(\n { deviceSizes, allSizes }: ImageConfig,\n width: number | undefined,\n sizes: string | undefined\n): { widths: number[]; kind: 'w' | 'x' } {\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g\n const percentSizes = []\n for (let match; (match = viewportWidthRe.exec(sizes)); match) {\n percentSizes.push(parseInt(match[2]))\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01\n return {\n widths: allSizes.filter((s) => s >= deviceSizes[0] * smallestRatio),\n kind: 'w',\n }\n }\n return { widths: allSizes, kind: 'w' }\n }\n if (typeof width !== 'number') {\n return { widths: deviceSizes, kind: 'w' }\n }\n\n const widths = [\n ...new Set(\n // > This means that most OLED screens that say they are 3x resolution,\n // > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [width, width * 2 /*, width * 3*/].map(\n (w) => allSizes.find((p) => p >= w) || allSizes[allSizes.length - 1]\n )\n ),\n ]\n return { widths, kind: 'x' }\n}\n\ntype GenImgAttrsData = {\n config: ImageConfig\n src: string\n unoptimized: boolean\n loader: ImageLoaderWithConfig\n width?: number\n quality?: number\n sizes?: string\n}\n\ntype GenImgAttrsResult = {\n src: string\n srcSet: string | undefined\n sizes: string | undefined\n}\n\nfunction generateImgAttrs({\n config,\n src,\n unoptimized,\n width,\n quality,\n sizes,\n loader,\n}: GenImgAttrsData): GenImgAttrsResult {\n if (unoptimized) {\n const deploymentId = getDeploymentId()\n if (src.startsWith('/') && !src.startsWith('//') && deploymentId) {\n const sep = src.includes('?') ? '&' : '?'\n src = `${src}${sep}dpl=${deploymentId}`\n }\n return { src, srcSet: undefined, sizes: undefined }\n }\n\n const { widths, kind } = getWidths(config, width, sizes)\n const last = widths.length - 1\n\n return {\n sizes: !sizes && kind === 'w' ? '100vw' : sizes,\n srcSet: widths\n .map(\n (w, i) =>\n `${loader({ config, src, quality, width: w })} ${\n kind === 'w' ? w : i + 1\n }${kind}`\n )\n .join(', '),\n\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({ config, src, quality, width: widths[last] }),\n }\n}\n\n/**\n * A shared function, used on both client and server, to generate the props for <img>.\n */\nexport function getImgProps(\n {\n src,\n sizes,\n unoptimized = false,\n priority = false,\n preload = false,\n loading,\n className,\n quality,\n width,\n height,\n fill = false,\n style,\n overrideSrc,\n onLoad,\n onLoadingComplete,\n placeholder = 'empty',\n blurDataURL,\n fetchPriority,\n decoding = 'async',\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n ...rest\n }: ImageProps,\n _state: {\n defaultLoader: ImageLoaderWithConfig\n imgConf: ImageConfigComplete\n showAltText?: boolean\n blurComplete?: boolean\n }\n): {\n props: ImgProps\n meta: {\n unoptimized: boolean\n preload: boolean\n placeholder: NonNullable<ImageProps['placeholder']>\n fill: boolean\n }\n} {\n const { imgConf, showAltText, blurComplete, defaultLoader } = _state\n let config: ImageConfig\n let c = imgConf || imageConfigDefault\n if ('allSizes' in c) {\n config = c as ImageConfig\n } else {\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n config = { ...c, allSizes, deviceSizes, qualities }\n }\n\n if (typeof defaultLoader === 'undefined') {\n throw new Error(\n 'images.loaderFile detected but the file is missing default export.\\nRead more: https://nextjs.org/docs/messages/invalid-images-config'\n )\n }\n let loader: ImageLoaderWithConfig = rest.loader || defaultLoader\n\n // Remove property so it's not spread on <img> element\n delete rest.loader\n delete (rest as any).srcSet\n\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = '__next_img_default' in loader\n\n if (isDefaultLoader) {\n if (config.loader === 'custom') {\n throw new Error(\n `Image with src \"${src}\" is missing \"loader\" prop.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader`\n )\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader as ImageLoader\n loader = (obj) => {\n const { config: _, ...opts } = obj\n return customImageLoader(opts)\n }\n }\n\n if (layout) {\n if (layout === 'fill') {\n fill = true\n }\n const layoutToStyle: Record<string, Record<string, string> | undefined> = {\n intrinsic: { maxWidth: '100%', height: 'auto' },\n responsive: { width: '100%', height: 'auto' },\n }\n const layoutToSizes: Record<string, string | undefined> = {\n responsive: '100vw',\n fill: '100vw',\n }\n const layoutStyle = layoutToStyle[layout]\n if (layoutStyle) {\n style = { ...style, ...layoutStyle }\n }\n const layoutSizes = layoutToSizes[layout]\n if (layoutSizes && !sizes) {\n sizes = layoutSizes\n }\n }\n\n let staticSrc = ''\n let widthInt = getInt(width)\n let heightInt = getInt(height)\n let blurWidth: number | undefined\n let blurHeight: number | undefined\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src\n\n if (!staticImageData.src) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw new Error(\n `An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received ${JSON.stringify(\n staticImageData\n )}`\n )\n }\n\n blurWidth = staticImageData.blurWidth\n blurHeight = staticImageData.blurHeight\n blurDataURL = blurDataURL || staticImageData.blurDataURL\n staticSrc = staticImageData.src\n\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width\n heightInt = staticImageData.height\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width\n heightInt = Math.round(staticImageData.height * ratio)\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height\n widthInt = Math.round(staticImageData.width * ratio)\n }\n }\n }\n src = typeof src === 'string' ? src : staticSrc\n\n let isLazy =\n !priority &&\n !preload &&\n (loading === 'lazy' || typeof loading === 'undefined')\n if (!src || src.startsWith('data:') || src.startsWith('blob:')) {\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true\n isLazy = false\n }\n if (config.unoptimized) {\n unoptimized = true\n }\n if (\n isDefaultLoader &&\n !config.dangerouslyAllowSVG &&\n src.split('?', 1)[0].endsWith('.svg')\n ) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true\n }\n\n const qualityInt = getInt(quality)\n\n if (process.env.NODE_ENV !== 'production') {\n if (config.output === 'export' && isDefaultLoader && !unoptimized) {\n throw new Error(\n `Image Optimization using the default loader is not compatible with \\`{ output: 'export' }\\`.\n Possible solutions:\n - Remove \\`{ output: 'export' }\\` and run \"next start\" to run server mode including the Image Optimization API.\n - Configure \\`{ images: { unoptimized: true } }\\` in \\`next.config.js\\` to disable the Image Optimization API.\n Read more: https://nextjs.org/docs/messages/export-image-api`\n )\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true\n } else {\n if (fill) {\n if (width) {\n throw new Error(\n `Image with src \"${src}\" has both \"width\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (height) {\n throw new Error(\n `Image with src \"${src}\" has both \"height\" and \"fill\" properties. Only one should be used.`\n )\n }\n if (style?.position && style.position !== 'absolute') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.`\n )\n }\n if (style?.width && style.width !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.`\n )\n }\n if (style?.height && style.height !== '100%') {\n throw new Error(\n `Image with src \"${src}\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.`\n )\n }\n } else {\n if (typeof widthInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"width\" property.`\n )\n } else if (isNaN(widthInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"width\" property. Expected a numeric value in pixels but received \"${width}\".`\n )\n }\n if (typeof heightInt === 'undefined') {\n throw new Error(\n `Image with src \"${src}\" is missing required \"height\" property.`\n )\n } else if (isNaN(heightInt)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"height\" property. Expected a numeric value in pixels but received \"${height}\".`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/^[\\x00-\\x20]/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n // eslint-disable-next-line no-control-regex\n if (/[\\x00-\\x20]$/.test(src)) {\n throw new Error(\n `Image with src \"${src}\" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.`\n )\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"loading\" property. Provided \"${loading}\" should be one of ${VALID_LOADING_VALUES.map(\n String\n ).join(',')}.`\n )\n }\n if (priority && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"priority\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (preload && loading === 'lazy') {\n throw new Error(\n `Image with src \"${src}\" has both \"preload\" and \"loading='lazy'\" properties. Only one should be used.`\n )\n }\n if (preload && priority) {\n throw new Error(\n `Image with src \"${src}\" has both \"preload\" and \"priority\" properties. Only \"preload\" should be used.`\n )\n }\n if (\n placeholder !== 'empty' &&\n placeholder !== 'blur' &&\n !placeholder.startsWith('data:image/')\n ) {\n throw new Error(\n `Image with src \"${src}\" has invalid \"placeholder\" property \"${placeholder}\".`\n )\n }\n if (placeholder !== 'empty') {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n warnOnce(\n `Image with src \"${src}\" is smaller than 40x40. Consider removing the \"placeholder\" property to improve performance.`\n )\n }\n }\n if (\n qualityInt &&\n config.qualities &&\n !config.qualities.includes(qualityInt)\n ) {\n warnOnce(\n `Image with src \"${src}\" is using quality \"${qualityInt}\" which is not configured in images.qualities [${config.qualities.join(', ')}]. Please update your config to [${[...config.qualities, qualityInt].sort().join(', ')}].` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-qualities`\n )\n }\n if (placeholder === 'blur' && !blurDataURL) {\n const VALID_BLUR_EXT = ['jpeg', 'png', 'webp', 'avif'] // should match next-image-loader\n\n throw new Error(\n `Image with src \"${src}\" has \"placeholder='blur'\" property but is missing the \"blurDataURL\" property.\n Possible solutions:\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\n - Change the \"src\" property to a static import with one of the supported file types: ${VALID_BLUR_EXT.join(\n ','\n )} (animated images not supported)\n - Remove the \"placeholder\" property, effectively no blur effect\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url`\n )\n }\n if ('ref' in rest) {\n warnOnce(\n `Image with src \"${src}\" is using unsupported \"ref\" property. Consider using the \"onLoad\" property instead.`\n )\n }\n\n if (!unoptimized && !isDefaultLoader) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75,\n })\n let url: URL | undefined\n try {\n url = new URL(urlStr)\n } catch (err) {}\n if (urlStr === src || (url && url.pathname === src && !url.search)) {\n warnOnce(\n `Image with src \"${src}\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width`\n )\n }\n }\n\n if (onLoadingComplete) {\n warnOnce(\n `Image with src \"${src}\" is using deprecated \"onLoadingComplete\" property. Please use the \"onLoad\" property instead.`\n )\n }\n\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot,\n })) {\n if (legacyValue) {\n warnOnce(\n `Image with src \"${src}\" has legacy prop \"${legacyKey}\". Did you forget to run the codemod?` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13`\n )\n }\n }\n\n if (\n typeof window !== 'undefined' &&\n !perfObserver &&\n window.PerformanceObserver\n ) {\n perfObserver = new PerformanceObserver((entryList) => {\n for (const entry of entryList.getEntries()) {\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = entry?.element?.src || ''\n const lcpImage = allImgs.get(imgSrc)\n if (\n lcpImage &&\n lcpImage.loading === 'lazy' &&\n lcpImage.placeholder === 'empty' &&\n !lcpImage.src.startsWith('data:') &&\n !lcpImage.src.startsWith('blob:')\n ) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n warnOnce(\n `Image with src \"${lcpImage.src}\" was detected as the Largest Contentful Paint (LCP). Please add the \\`loading=\"eager\"\\` property if this image is above the fold.` +\n `\\nRead more: https://nextjs.org/docs/app/api-reference/components/image#loading`\n )\n }\n }\n })\n try {\n perfObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true,\n })\n } catch (err) {\n // Log error but don't crash the app\n console.error(err)\n }\n }\n }\n const imgStyle = Object.assign(\n fill\n ? {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition,\n }\n : {},\n showAltText ? {} : { color: 'transparent' },\n style\n )\n\n const backgroundImage =\n !blurComplete && placeholder !== 'empty'\n ? placeholder === 'blur'\n ? `url(\"data:image/svg+xml;charset=utf-8,${getImageBlurSvg({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL: blurDataURL || '', // assume not undefined\n objectFit: imgStyle.objectFit,\n })}\")`\n : `url(\"${placeholder}\")` // assume `data:image/`\n : null\n\n const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(\n imgStyle.objectFit\n )\n ? imgStyle.objectFit\n : imgStyle.objectFit === 'fill'\n ? '100% 100%' // the background-size equivalent of `fill`\n : 'cover'\n\n let placeholderStyle: PlaceholderStyle = backgroundImage\n ? {\n backgroundSize,\n backgroundPosition: imgStyle.objectPosition || '50% 50%',\n backgroundRepeat: 'no-repeat',\n backgroundImage,\n }\n : {}\n\n if (process.env.NODE_ENV === 'development') {\n if (\n placeholderStyle.backgroundImage &&\n placeholder === 'blur' &&\n blurDataURL?.startsWith('/')\n ) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n placeholderStyle.backgroundImage = `url(\"${blurDataURL}\")`\n }\n }\n\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader,\n })\n\n const loadingFinal = isLazy ? 'lazy' : loading\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined') {\n let fullUrl: URL\n try {\n fullUrl = new URL(imgAttributes.src)\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href)\n }\n allImgs.set(fullUrl.href, { src, loading: loadingFinal, placeholder })\n }\n }\n\n const props: ImgProps = {\n ...rest,\n loading: loadingFinal,\n fetchPriority,\n width: widthInt,\n height: heightInt,\n decoding,\n className,\n style: { ...imgStyle, ...placeholderStyle },\n sizes: imgAttributes.sizes,\n srcSet: imgAttributes.srcSet,\n src: overrideSrc || imgAttributes.src,\n }\n const meta = { unoptimized, preload: preload || priority, placeholder, fill }\n return { props, meta }\n}\n","import type React from 'react'\nimport { Children, useEffect, useLayoutEffect, type JSX } from 'react'\n\ntype State = JSX.Element[] | undefined\n\nexport type SideEffectProps = {\n reduceComponentsToState: (components: Array<React.ReactElement<any>>) => State\n handleStateChange?: (state: State) => void\n headManager: any\n children: React.ReactNode\n}\n\nconst isServer = typeof window === 'undefined'\nconst useClientOnlyLayoutEffect = isServer ? () => {} : useLayoutEffect\nconst useClientOnlyEffect = isServer ? () => {} : useEffect\n\nexport default function SideEffect(props: SideEffectProps) {\n const { headManager, reduceComponentsToState } = props\n\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = Children.toArray(\n Array.from(headManager.mountedInstances as Set<React.ReactNode>).filter(\n Boolean\n )\n ) as React.ReactElement[]\n headManager.updateHead(reduceComponentsToState(headElements))\n }\n }\n\n if (isServer) {\n headManager?.mountedInstances?.add(props.children)\n emitChange()\n }\n\n useClientOnlyLayoutEffect(() => {\n headManager?.mountedInstances?.add(props.children)\n return () => {\n headManager?.mountedInstances?.delete(props.children)\n }\n })\n\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect(() => {\n if (headManager) {\n headManager._pendingUpdate = emitChange\n }\n return () => {\n if (headManager) {\n headManager._pendingUpdate = emitChange\n }\n }\n })\n\n useClientOnlyEffect(() => {\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate()\n headManager._pendingUpdate = null\n }\n return () => {\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate()\n headManager._pendingUpdate = null\n }\n }\n })\n\n return null\n}\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].HeadManagerContext\n","'use client'\n\nimport React, { useContext, type JSX } from 'react'\nimport Effect from './side-effect'\nimport { HeadManagerContext } from './head-manager-context.shared-runtime'\nimport { warnOnce } from './utils/warn-once'\n\nexport function defaultHead(): JSX.Element[] {\n const head = [\n <meta charSet=\"utf-8\" key=\"charset\" />,\n <meta name=\"viewport\" content=\"width=device-width\" key=\"viewport\" />,\n ]\n return head\n}\n\nfunction onlyReactElement(\n list: Array<React.ReactElement<any>>,\n child: React.ReactElement | number | string\n): Array<React.ReactElement<any>> {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list\n }\n // Adds support for React.Fragment\n if (child.type === React.Fragment) {\n return list.concat(\n // @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]\n React.Children.toArray(child.props.children).reduce(\n // @ts-expect-error @types/react does not remove fragments but this could also return ReactPortal[]\n (\n fragmentList: Array<React.ReactElement<any>>,\n fragmentChild: React.ReactElement | number | string\n ): Array<React.ReactElement<any>> => {\n if (\n typeof fragmentChild === 'string' ||\n typeof fragmentChild === 'number'\n ) {\n return fragmentList\n }\n return fragmentList.concat(fragmentChild)\n },\n []\n )\n )\n }\n return list.concat(child)\n}\n\nconst METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']\n\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/\nfunction unique() {\n const keys = new Set()\n const tags = new Set()\n const metaTypes = new Set()\n const metaCategories: { [metatype: string]: Set<string> } = {}\n\n return (h: React.ReactElement<any>) => {\n let isUnique = true\n let hasKey = false\n\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true\n const key = h.key.slice(h.key.indexOf('$') + 1)\n if (keys.has(key)) {\n isUnique = false\n } else {\n keys.add(key)\n }\n }\n\n // eslint-disable-next-line default-case\n switch (h.type) {\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false\n } else {\n tags.add(h.type)\n }\n break\n case 'meta':\n for (let i = 0, len = METATYPES.length; i < len; i++) {\n const metatype = METATYPES[i]\n if (!h.props.hasOwnProperty(metatype)) continue\n\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false\n } else {\n metaTypes.add(metatype)\n }\n } else {\n const category = h.props[metatype]\n const categories = metaCategories[metatype] || new Set()\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false\n } else {\n categories.add(category)\n metaCategories[metatype] = categories\n }\n }\n }\n break\n }\n\n return isUnique\n }\n}\n\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */\nfunction reduceComponents(\n headChildrenElements: Array<React.ReactElement<any>>\n) {\n return headChildrenElements\n .reduce(onlyReactElement, [])\n .reverse()\n .concat(defaultHead().reverse())\n .filter(unique())\n .reverse()\n .map((c: React.ReactElement<any>, i: number) => {\n const key = c.key || i\n if (process.env.NODE_ENV === 'development') {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {\n const srcMessage = c.props['src']\n ? `<script> tag with src=\"${c.props['src']}\"`\n : `inline <script>`\n warnOnce(\n `Do not add <script> tags using next/head (see ${srcMessage}). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component`\n )\n } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {\n warnOnce(\n `Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"${c.props['href']}\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component`\n )\n }\n }\n return React.cloneElement(c, { key })\n })\n}\n\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */\nfunction Head({ children }: { children: React.ReactNode }) {\n const headManager = useContext(HeadManagerContext)\n return (\n <Effect\n reduceComponentsToState={reduceComponents}\n headManager={headManager}\n >\n {children}\n </Effect>\n )\n}\n\nexport default Head\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].ImageConfigContext\n","module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['contexts'].RouterContext\n","import type { NextConfig } from '../../server/config-shared'\n\n/**\n * Find the closest matching `quality` in the list of `config.qualities`\n * @param quality the quality prop passed to the image component\n * @param config the \"images\" configuration from next.config.js\n * @returns the closest matching quality value\n */\nexport function findClosestQuality(\n quality: number | undefined,\n config: NextConfig['images'] | undefined\n): number {\n const q = quality || 75\n if (!config?.qualities?.length) {\n return q\n }\n return config.qualities.reduce(\n (prev, cur) => (Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev),\n 0\n )\n}\n","import type { ImageLoaderPropsWithConfig } from './image-config'\nimport { findClosestQuality } from './find-closest-quality'\nimport { getDeploymentId } from './deployment-id'\n\nfunction defaultLoader({\n config,\n src,\n width,\n quality,\n}: ImageLoaderPropsWithConfig): string {\n if (\n src.startsWith('/') &&\n src.includes('?') &&\n config.localPatterns?.length === 1 &&\n config.localPatterns[0].pathname === '**' &&\n config.localPatterns[0].search === ''\n ) {\n throw new Error(\n `Image with src \"${src}\" is using a query string which is not configured in images.localPatterns.` +\n `\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\n )\n }\n\n if (process.env.NODE_ENV !== 'production') {\n const missingValues = []\n\n // these should always be provided but make sure they are\n if (!src) missingValues.push('src')\n if (!width) missingValues.push('width')\n\n if (missingValues.length > 0) {\n throw new Error(\n `Next Image Optimization requires ${missingValues.join(\n ', '\n )} to be provided. Make sure you pass them as props to the \\`next/image\\` component. Received: ${JSON.stringify(\n { src, width, quality }\n )}`\n )\n }\n\n if (src.startsWith('//')) {\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)`\n )\n }\n\n if (src.startsWith('/') && config.localPatterns) {\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasLocalMatch } =\n require('./match-local-pattern') as typeof import('./match-local-pattern')\n if (!hasLocalMatch(config.localPatterns, src)) {\n throw new Error(\n `Invalid src prop (${src}) on \\`next/image\\` does not match \\`images.localPatterns\\` configured in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`\n )\n }\n }\n }\n\n if (!src.startsWith('/') && (config.domains || config.remotePatterns)) {\n let parsedSrc: URL\n try {\n parsedSrc = new URL(src)\n } catch (err) {\n console.error(err)\n throw new Error(\n `Failed to parse src \"${src}\" on \\`next/image\\`, if using relative image it must start with a leading slash \"/\" or be an absolute URL (http:// or https://)`\n )\n }\n\n if (\n process.env.NODE_ENV !== 'test' &&\n // micromatch isn't compatible with edge runtime\n process.env.NEXT_RUNTIME !== 'edge'\n ) {\n // We use dynamic require because this should only error in development\n const { hasRemoteMatch } =\n require('./match-remote-pattern') as typeof import('./match-remote-pattern')\n if (\n !hasRemoteMatch(config.domains!, config.remotePatterns!, parsedSrc)\n ) {\n throw new Error(\n `Invalid src prop (${src}) on \\`next/image\\`, hostname \"${parsedSrc.hostname}\" is not configured under images in your \\`next.config.js\\`\\n` +\n `See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host`\n )\n }\n }\n }\n }\n\n const q = findClosestQuality(quality, config)\n\n let deploymentId = getDeploymentId()\n return `${config.path}?url=${encodeURIComponent(src)}&w=${width}&q=${q}${\n src.startsWith('/') && deploymentId ? `&dpl=${deploymentId}` : ''\n }`\n}\n\n// We use this to determine if the import is the default loader\n// or a custom loader defined by the user in next.config.js\ndefaultLoader.__next_img_default = true\n\nexport default defaultLoader\n","import { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef<TElement>(\n refA: Ref<TElement>,\n refB: Ref<TElement>\n): Ref<TElement> {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef<TElement>(\n refA: NonNullable<Ref<TElement>>,\n current: TElement\n) {\n if (typeof refA === 'function') {\n const cleanup = refA(current)\n if (typeof cleanup === 'function') {\n return cleanup\n } else {\n return () => refA(null)\n }\n } else {\n refA.current = current\n return () => {\n refA.current = null\n }\n }\n}\n","'use client'\n\nimport React, {\n useRef,\n useEffect,\n useCallback,\n useContext,\n useMemo,\n useState,\n forwardRef,\n use,\n} from 'react'\nimport ReactDOM from 'react-dom'\nimport Head from '../shared/lib/head'\nimport { getImgProps } from '../shared/lib/get-img-props'\nimport type {\n ImageProps,\n ImgProps,\n OnLoad,\n OnLoadingComplete,\n PlaceholderValue,\n} from '../shared/lib/get-img-props'\nimport type {\n ImageConfigComplete,\n ImageLoaderProps,\n} from '../shared/lib/image-config'\nimport { imageConfigDefault } from '../shared/lib/image-config'\nimport { ImageConfigContext } from '../shared/lib/image-config-context.shared-runtime'\nimport { warnOnce } from '../shared/lib/utils/warn-once'\nimport { RouterContext } from '../shared/lib/router-context.shared-runtime'\n\n// This is replaced by webpack alias\nimport defaultLoader from 'next/dist/shared/lib/image-loader'\nimport { useMergedRef } from './use-merged-ref'\n\n// This is replaced by webpack define plugin\nconst configEnv = process.env.__NEXT_IMAGE_OPTS as any as ImageConfigComplete\n\nif (typeof window === 'undefined') {\n ;(globalThis as any).__NEXT_IMAGE_IMPORTED = true\n}\n\nexport type { ImageLoaderProps }\nexport type ImageLoader = (p: ImageLoaderProps) => string\n\ntype ImgElementWithDataProp = HTMLImageElement & {\n 'data-loaded-src': string | undefined\n}\n\ntype ImageElementProps = ImgProps & {\n unoptimized: boolean\n placeholder: PlaceholderValue\n onLoadRef: React.MutableRefObject<OnLoad | undefined>\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>\n setBlurComplete: (b: boolean) => void\n setShowAltText: (b: boolean) => void\n sizesInput: string | undefined\n}\n\n// See https://stackoverflow.com/q/39777833/266535 for why we use this ref\n// handler instead of the img's onLoad attribute.\nfunction handleLoading(\n img: ImgElementWithDataProp,\n placeholder: PlaceholderValue,\n onLoadRef: React.MutableRefObject<OnLoad | undefined>,\n onLoadingCompleteRef: React.MutableRefObject<OnLoadingComplete | undefined>,\n setBlurComplete: (b: boolean) => void,\n unoptimized: boolean,\n sizesInput: string | undefined\n) {\n const src = img?.src\n if (!img || img['data-loaded-src'] === src) {\n return\n }\n img['data-loaded-src'] = src\n const p = 'decode' in img ? img.decode() : Promise.resolve()\n p.catch(() => {}).then(() => {\n if (!img.parentElement || !img.isConnected) {\n // Exit early in case of race condition:\n // - onload() is called\n // - decode() is called but incomplete\n // - unmount is called\n // - decode() completes\n return\n }\n if (placeholder !== 'empty') {\n setBlurComplete(true)\n }\n if (onLoadRef?.current) {\n // Since we don't have the SyntheticEvent here,\n // we must create one with the same shape.\n // See https://reactjs.org/docs/events.html\n const event = new Event('load')\n Object.defineProperty(event, 'target', { writable: false, value: img })\n let prevented = false\n let stopped = false\n onLoadRef.current({\n ...event,\n nativeEvent: event,\n currentTarget: img,\n target: img,\n isDefaultPrevented: () => prevented,\n isPropagationStopped: () => stopped,\n persist: () => {},\n preventDefault: () => {\n prevented = true\n event.preventDefault()\n },\n stopPropagation: () => {\n stopped = true\n event.stopPropagation()\n },\n })\n }\n if (onLoadingCompleteRef?.current) {\n onLoadingCompleteRef.current(img)\n }\n if (process.env.NODE_ENV !== 'production') {\n const origSrc = new URL(src, 'http://n').searchParams.get('url') || src\n if (img.getAttribute('data-nimg') === 'fill') {\n if (!unoptimized && (!sizesInput || sizesInput === '100vw')) {\n let widthViewportRatio =\n img.getBoundingClientRect().width / window.innerWidth\n if (widthViewportRatio < 0.6) {\n if (sizesInput === '100vw') {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" prop and \"sizes\" prop of \"100vw\", but image is not rendered at full viewport width. Please adjust \"sizes\" to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`\n )\n } else {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" but is missing \"sizes\" prop. Please add it to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes`\n )\n }\n }\n }\n if (img.parentElement) {\n const { position } = window.getComputedStyle(img.parentElement)\n const valid = ['absolute', 'fixed', 'relative']\n if (!valid.includes(position)) {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" and parent element with invalid \"position\". Provided \"${position}\" should be one of ${valid\n .map(String)\n .join(',')}.`\n )\n }\n }\n if (img.height === 0) {\n warnOnce(\n `Image with src \"${origSrc}\" has \"fill\" and a height value of 0. This is likely because the parent element of the image has not been styled to have a set height.`\n )\n }\n }\n\n const heightModified =\n img.height.toString() !== img.getAttribute('height')\n const widthModified = img.width.toString() !== img.getAttribute('width')\n if (\n (heightModified && !widthModified) ||\n (!heightModified && widthModified)\n ) {\n warnOnce(\n `Image with src \"${origSrc}\" has either width or height modified, but not the other. If you use CSS to change the size of your image, also include the styles 'width: \"auto\"' or 'height: \"auto\"' to maintain the aspect ratio.`\n )\n }\n }\n })\n}\n\nfunction getDynamicProps(\n fetchPriority?: string\n): Record<string, string | undefined> {\n if (Boolean(use)) {\n // In React 19.0.0 or newer, we must use camelCase\n // prop to avoid \"Warning: Invalid DOM property\".\n // See https://github.com/facebook/react/pull/25927\n return { fetchPriority }\n }\n // In React 18.2.0 or older, we must use lowercase prop\n // to avoid \"Warning: Invalid DOM property\".\n return { fetchpriority: fetchPriority }\n}\n\nconst ImageElement = forwardRef<HTMLImageElement | null, ImageElementProps>(\n (\n {\n src,\n srcSet,\n sizes,\n height,\n width,\n decoding,\n className,\n style,\n fetchPriority,\n placeholder,\n loading,\n unoptimized,\n fill,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n setShowAltText,\n sizesInput,\n onLoad,\n onError,\n ...rest\n },\n forwardedRef\n ) => {\n const ownRef = useCallback(\n (img: ImgElementWithDataProp | null) => {\n if (!img) {\n return\n }\n if (onError) {\n // If the image has an error before react hydrates, then the error is lost.\n // The workaround is to wait until the image is mounted which is after hydration,\n // then we set the src again to trigger the error handler (if there was an error).\n // eslint-disable-next-line no-self-assign\n img.src = img.src\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!src) {\n console.error(`Image is missing required \"src\" property:`, img)\n }\n if (img.getAttribute('alt') === null) {\n console.error(\n `Image is missing required \"alt\" property. Please add Alternative Text to describe the image for screen readers and search engines.`\n )\n }\n }\n if (img.complete) {\n handleLoading(\n img,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n unoptimized,\n sizesInput\n )\n }\n },\n [\n src,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n onError,\n unoptimized,\n sizesInput,\n ]\n )\n\n const ref = useMergedRef(forwardedRef, ownRef)\n\n return (\n <img\n {...rest}\n {...getDynamicProps(fetchPriority)}\n // It's intended to keep `loading` before `src` because React updates\n // props in order which causes Safari/Firefox to not lazy load properly.\n // See https://github.com/facebook/react/issues/25883\n loading={loading}\n width={width}\n height={height}\n decoding={decoding}\n data-nimg={fill ? 'fill' : '1'}\n className={className}\n style={style}\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n sizes={sizes}\n srcSet={srcSet}\n src={src}\n ref={ref}\n onLoad={(event) => {\n const img = event.currentTarget as ImgElementWithDataProp\n handleLoading(\n img,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n unoptimized,\n sizesInput\n )\n }}\n onError={(event) => {\n // if the real image fails to load, this will ensure \"alt\" is visible\n setShowAltText(true)\n if (placeholder !== 'empty') {\n // If the real image fails to load, this will still remove the placeholder.\n setBlurComplete(true)\n }\n if (onError) {\n onError(event)\n }\n }}\n />\n )\n }\n)\n\nfunction ImagePreload({\n isAppRouter,\n imgAttributes,\n}: {\n isAppRouter: boolean\n imgAttributes: ImgProps\n}) {\n const opts: ReactDOM.PreloadOptions = {\n as: 'image',\n imageSrcSet: imgAttributes.srcSet,\n imageSizes: imgAttributes.sizes,\n crossOrigin: imgAttributes.crossOrigin,\n referrerPolicy: imgAttributes.referrerPolicy,\n ...getDynamicProps(imgAttributes.fetchPriority),\n }\n\n if (isAppRouter && ReactDOM.preload) {\n ReactDOM.preload(imgAttributes.src, opts)\n return null\n }\n\n return (\n <Head>\n <link\n key={\n '__nimg-' +\n imgAttributes.src +\n imgAttributes.srcSet +\n imgAttributes.sizes\n }\n rel=\"preload\"\n // Note how we omit the `href` attribute, as it would only be relevant\n // for browsers that do not support `imagesrcset`, and in those cases\n // it would cause the incorrect image to be preloaded.\n //\n // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset\n href={imgAttributes.srcSet ? undefined : imgAttributes.src}\n {...opts}\n />\n </Head>\n )\n}\n\n/**\n * The `Image` component is used to optimize images.\n *\n * Read more: [Next.js docs: `Image`](https://nextjs.org/docs/app/api-reference/components/image)\n */\nexport const Image = forwardRef<HTMLImageElement | null, ImageProps>(\n (props, forwardedRef) => {\n const pagesRouter = useContext(RouterContext)\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter\n\n const configContext = useContext(ImageConfigContext)\n const config = useMemo(() => {\n const c = configEnv || configContext || imageConfigDefault\n\n const allSizes = [...c.deviceSizes, ...c.imageSizes].sort((a, b) => a - b)\n const deviceSizes = c.deviceSizes.sort((a, b) => a - b)\n const qualities = c.qualities?.sort((a, b) => a - b)\n return {\n ...c,\n allSizes,\n deviceSizes,\n qualities,\n // During the SSR, configEnv (__NEXT_IMAGE_OPTS) does not include\n // security sensitive configs like `localPatterns`, which is needed\n // during the server render to ensure it's validated. Therefore use\n // configContext, which holds the config from the server for validation.\n localPatterns:\n typeof window === 'undefined'\n ? configContext?.localPatterns\n : c.localPatterns,\n }\n }, [configContext])\n\n const { onLoad, onLoadingComplete } = props\n const onLoadRef = useRef(onLoad)\n\n useEffect(() => {\n onLoadRef.current = onLoad\n }, [onLoad])\n\n const onLoadingCompleteRef = useRef(onLoadingComplete)\n\n useEffect(() => {\n onLoadingCompleteRef.current = onLoadingComplete\n }, [onLoadingComplete])\n\n const [blurComplete, setBlurComplete] = useState(false)\n const [showAltText, setShowAltText] = useState(false)\n const { props: imgAttributes, meta: imgMeta } = getImgProps(props, {\n defaultLoader,\n imgConf: config,\n blurComplete,\n showAltText,\n })\n\n return (\n <>\n {\n <ImageElement\n {...imgAttributes}\n unoptimized={imgMeta.unoptimized}\n placeholder={imgMeta.placeholder}\n fill={imgMeta.fill}\n onLoadRef={onLoadRef}\n onLoadingCompleteRef={onLoadingCompleteRef}\n setBlurComplete={setBlurComplete}\n setShowAltText={setShowAltText}\n sizesInput={props.sizes}\n ref={forwardedRef}\n />\n }\n {imgMeta.preload ? (\n <ImagePreload\n isAppRouter={isAppRouter}\n imgAttributes={imgAttributes}\n />\n ) : null}\n </>\n )\n }\n)\n","import type { ImageConfigComplete, ImageLoaderProps } from './image-config'\nimport type { ImageProps, ImageLoader, StaticImageData } from './get-img-props'\n\nimport { getImgProps } from './get-img-props'\nimport { Image } from '../../client/image-component'\n\n// This is replaced by webpack alias\nimport defaultLoader from 'next/dist/shared/lib/image-loader'\n\n/**\n * For more advanced use cases, you can call `getImageProps()`\n * to get the props that would be passed to the underlying `<img>` element,\n * and instead pass to them to another component, style, canvas, etc.\n *\n * Read more: [Next.js docs: `getImageProps`](https://nextjs.org/docs/app/api-reference/components/image#getimageprops)\n */\nexport function getImageProps(imgProps: ImageProps) {\n const { props } = getImgProps(imgProps, {\n defaultLoader,\n // This is replaced by webpack define plugin\n imgConf: process.env.__NEXT_IMAGE_OPTS as any as ImageConfigComplete,\n })\n // Normally we don't care about undefined props because we pass to JSX,\n // but this exported function could be used by the end user for anything\n // so we delete undefined props to clean it up a little.\n for (const [key, value] of Object.entries(props)) {\n if (value === undefined) {\n delete props[key as keyof typeof props]\n }\n }\n return { props }\n}\n\nexport default Image\n\nexport type { ImageProps, ImageLoaderProps, ImageLoader, StaticImageData }\n","module.exports = require('./dist/shared/lib/image-external')\n","/* __next_internal_action_entry_do_not_use__ [{\"4050d150b6925be2338a3658e9ce39dced6cc55d1f\":\"listDirectories\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_2=/*#__PURE__*/createServerReference(\"4050d150b6925be2338a3658e9ce39dced6cc55d1f\",callServer,void 0,findSourceMapURL,\"listDirectories\");export{$$RSC_SERVER_ACTION_2 as listDirectories};","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { listDirectories, getHomeDirectory } from '@/app/actions/git';\nimport { Folder, ArrowLeft, Check } from 'lucide-react';\nimport { getDirName } from '@/lib/path';\n\ninterface FileSystemItem {\n name: string;\n path: string;\n isDirectory: boolean;\n isGitRepo: boolean;\n}\n\ninterface FileBrowserProps {\n title?: string;\n initialPath?: string;\n onSelect: (path: string) => void;\n onCancel: () => void;\n checkRepo?: (path: string) => Promise<boolean>;\n}\n\nexport default function FileBrowser({ title, initialPath, onSelect, onCancel, checkRepo }: FileBrowserProps) {\n const [currentPath, setCurrentPath] = useState<string>('');\n const [items, setItems] = useState<FileSystemItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const init = async () => {\n // ... same\n if (initialPath) {\n setCurrentPath(initialPath);\n } else {\n // ... same\n const home = await getHomeDirectory();\n setCurrentPath(home);\n }\n };\n init();\n }, [initialPath]); // Added dependency\n\n useEffect(() => {\n // ... same logic for fetching items ...\n if (!currentPath) return;\n\n const fetchItems = async () => {\n setLoading(true);\n setError(null);\n try {\n const dirs = await listDirectories(currentPath);\n // ... same map to items\n const mapped: FileSystemItem[] = dirs.map(d => ({\n name: d.name,\n path: d.path,\n isDirectory: d.isDirectory,\n isGitRepo: d.isGitRepo\n }));\n setItems(mapped);\n } catch (err) {\n console.error(err);\n setError('Failed to load directory contents');\n } finally {\n setLoading(false);\n }\n };\n\n fetchItems();\n }, [currentPath]);\n\n // ... handleNavigate, handleGoUp ...\n\n const handleSelectPath = async (path: string) => {\n if (checkRepo) {\n const isValid = await checkRepo(path);\n if (!isValid) {\n setError(\"Selected directory is not a valid git repository.\");\n // Clear error after 3 seconds\n setTimeout(() => setError(null), 3000);\n return;\n }\n }\n onSelect(path);\n };\n\n const handleSelect = async () => {\n await handleSelectPath(currentPath);\n };\n\n const handleNavigate = (path: string) => {\n setCurrentPath(path);\n };\n\n const handleGoUp = () => {\n // Navigate up one directory\n // Use the cross-platform getDirName utility to handle Windows and POSIX paths.\n const parent = getDirName(currentPath);\n if (parent && parent !== currentPath) {\n setCurrentPath(parent);\n }\n };\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm p-4\">\n <div className=\"bg-base-200 rounded-lg shadow-xl w-full max-w-3xl h-[80vh] flex flex-col\">\n {/* Header */}\n <div className=\"flex items-center justify-between p-4 border-b border-base-300\">\n <h2 className=\"text-xl font-bold flex items-center gap-2\">\n <Folder className=\"w-5 h-5\" />\n {title || \"Browse Local Repository\"}\n </h2>\n <button onClick={onCancel} className=\"btn btn-sm btn-ghost btn-circle\">\n ✕\n </button>\n </div>\n\n {/* Current Path Bar */}\n <div className=\"flex items-center gap-2 p-3 bg-base-300\">\n <button\n onClick={handleGoUp}\n className=\"btn btn-sm btn-square btn-ghost\"\n title=\"Go Up\"\n disabled={currentPath === '/' || !currentPath}\n >\n <ArrowLeft className=\"w-4 h-4\" />\n </button>\n <div className=\"flex-1 overflow-x-auto whitespace-nowrap px-2 font-mono text-sm\">\n {currentPath}\n </div>\n <button\n onClick={handleSelect}\n className=\"btn btn-sm btn-primary\"\n >\n Select Current Folder\n </button>\n </div>\n\n {/* List Content */}\n <div className=\"flex-1 overflow-y-auto p-2\">\n {loading ? (\n <div className=\"flex justify-center items-center h-full\">\n <span className=\"loading loading-spinner loading-lg\"></span>\n </div>\n ) : error ? (\n <div className=\"alert alert-error\">{error}</div>\n ) : items.length === 0 ? (\n <div className=\"text-center text-base-content/50 mt-10\">Empty directory</div>\n ) : (\n <div className=\"grid grid-cols-1 gap-1\">\n {items.map((item) => (\n <div\n key={item.path}\n className=\"flex items-center justify-between p-2 hover:bg-base-100 rounded-md cursor-pointer transition-colors\"\n onClick={() => handleNavigate(item.path)}\n >\n <div className=\"flex items-center gap-3 overflow-hidden\">\n <Folder className={`w-5 h-5 ${item.isGitRepo ? 'text-primary' : 'text-base-content/70'}`} />\n <span className=\"truncate\">{item.name}</span>\n {item.isGitRepo && (\n <span className=\"badge badge-xs badge-primary\">git</span>\n )}\n </div>\n {item.isGitRepo && (\n <button\n className=\"btn btn-xs btn-primary\"\n onClick={(e) => {\n e.stopPropagation();\n void handleSelectPath(item.path);\n }}\n title={`Select ${item.name}`}\n >\n <Check className=\"w-3 h-3\" />\n Select\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Footer info */}\n <div className=\"p-3 border-t border-base-300 text-xs text-base-content/50 text-center\">\n Navigate to a folder and click "Select Current Folder" to choose it.\n </div>\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40731be3a37accf7bbc3e2d6493576614227c91a17\":\"checkIsGitRepo\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"40731be3a37accf7bbc3e2d6493576614227c91a17\",callServer,void 0,findSourceMapURL,\"checkIsGitRepo\");export{$$RSC_SERVER_ACTION_5 as checkIsGitRepo};","/* __next_internal_action_entry_do_not_use__ [{\"4042550890c564c3a5dd615e03df2ce74311f1b7aa\":\"getBranches\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"4042550890c564c3a5dd615e03df2ce74311f1b7aa\",callServer,void 0,findSourceMapURL,\"getBranches\");export{$$RSC_SERVER_ACTION_3 as getBranches};","/* __next_internal_action_entry_do_not_use__ [{\"60bb3729f536eb8798d8c433077a5c602a8130b280\":\"checkoutBranch\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"60bb3729f536eb8798d8c433077a5c602a8130b280\",callServer,void 0,findSourceMapURL,\"checkoutBranch\");export{$$RSC_SERVER_ACTION_4 as checkoutBranch};","/* __next_internal_action_entry_do_not_use__ [{\"7fe914196ee25e9d510119d6d35998972ae15415fc\":\"getStartupScript\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_9=/*#__PURE__*/createServerReference(\"7fe914196ee25e9d510119d6d35998972ae15415fc\",callServer,void 0,findSourceMapURL,\"getStartupScript\");export{$$RSC_SERVER_ACTION_9 as getStartupScript};","/* __next_internal_action_entry_do_not_use__ [{\"7f55098ed3edc68a25bfb4c426d5fa045a56b5273e\":\"listRepoFiles\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"7f55098ed3edc68a25bfb4c426d5fa045a56b5273e\",callServer,void 0,findSourceMapURL,\"listRepoFiles\");export{$$RSC_SERVER_ACTION_10 as listRepoFiles};","/* __next_internal_action_entry_do_not_use__ [{\"7fb1a294df98a16f519b84ba7b7a5343fcfd35f43a\":\"saveAttachments\"},\"src/app/actions/git.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_11=/*#__PURE__*/createServerReference(\"7fb1a294df98a16f519b84ba7b7a5343fcfd35f43a\",callServer,void 0,findSourceMapURL,\"saveAttachments\");export{$$RSC_SERVER_ACTION_11 as saveAttachments};","/* __next_internal_action_entry_do_not_use__ [{\"708075ca9b34a3dbbea0e2152d1884affa38612894\":\"createSession\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_5=/*#__PURE__*/createServerReference(\"708075ca9b34a3dbbea0e2152d1884affa38612894\",callServer,void 0,findSourceMapURL,\"createSession\");export{$$RSC_SERVER_ACTION_5 as createSession};","/* __next_internal_action_entry_do_not_use__ [{\"409400aa67ca395f0de7dfec08ba1446caa224886c\":\"listSessions\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_4=/*#__PURE__*/createServerReference(\"409400aa67ca395f0de7dfec08ba1446caa224886c\",callServer,void 0,findSourceMapURL,\"listSessions\");export{$$RSC_SERVER_ACTION_4 as listSessions};","/* __next_internal_action_entry_do_not_use__ [{\"6000e0bf0a71a92385f609b484e939df06b95b20dd\":\"saveSessionLaunchContext\"},\"src/app/actions/session.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"6000e0bf0a71a92385f609b484e939df06b95b20dd\",callServer,void 0,findSourceMapURL,\"saveSessionLaunchContext\");export{$$RSC_SERVER_ACTION_1 as saveSessionLaunchContext};","/* __next_internal_action_entry_do_not_use__ [{\"607d4c154bb9033cc07dcecda67080c071b4be975e\":\"updateRepoSettings\"},\"src/app/actions/config.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_3=/*#__PURE__*/createServerReference(\"607d4c154bb9033cc07dcecda67080c071b4be975e\",callServer,void 0,findSourceMapURL,\"updateRepoSettings\");export{$$RSC_SERVER_ACTION_3 as updateRepoSettings};","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { FolderGit2, GitBranch as GitBranchIcon, Plus, X, ChevronRight, FolderCog, Bot, Cpu, Trash2 } from 'lucide-react';\nimport FileBrowser from './FileBrowser';\nimport { checkIsGitRepo, getBranches, checkoutBranch, GitBranch, startTtydProcess, getStartupScript, listRepoFiles, saveAttachments } from '@/app/actions/git';\nimport { createSession, listSessions, SessionMetadata, deleteSession, saveSessionLaunchContext } from '@/app/actions/session';\nimport { getConfig, updateConfig, updateRepoSettings, Config } from '@/app/actions/config';\nimport { useRouter } from 'next/navigation';\nimport { Play } from 'lucide-react'; // Added Play icon for resume\nimport { getBaseName } from '@/lib/path';\nimport Image from 'next/image';\n\nimport agentProvidersDataRaw from '@/data/agent-providers.json';\n\ntype Model = {\n id: string;\n label: string;\n description?: string;\n};\n\ntype AgentProvider = {\n name: string;\n cli: string;\n description?: string;\n models: Model[];\n};\n\nconst agentProvidersData = agentProvidersDataRaw as unknown as AgentProvider[];\nconst AUTO_COMMIT_INSTRUCTION =\n 'After each round of conversation, if work is completed and files changed, commit all changes with an appropriate git commit message. The commit message must include a clear title and a detailed body describing what changed and why, not just a title. No need to confirm when creating commits.';\n\ntype GitRepoSelectorProps = {\n mode?: 'home' | 'new';\n repoPath?: string | null;\n};\n\nexport default function GitRepoSelector({ mode = 'home', repoPath = null }: GitRepoSelectorProps) {\n const [isBrowsing, setIsBrowsing] = useState(false);\n const [isSelectingRoot, setIsSelectingRoot] = useState(false);\n\n const [config, setConfig] = useState<Config | null>(null);\n\n const [selectedRepo, setSelectedRepo] = useState<string | null>(null);\n\n const router = useRouter();\n\n const [branches, setBranches] = useState<GitBranch[]>([]);\n const [currentBranchName, setCurrentBranchName] = useState<string>('');\n const [existingSessions, setExistingSessions] = useState<SessionMetadata[]>([]);\n const [allSessions, setAllSessions] = useState<SessionMetadata[]>([]);\n\n const [selectedProvider, setSelectedProvider] = useState<AgentProvider | null>(null);\n const [selectedModel, setSelectedModel] = useState<string>('');\n const [startupScript, setStartupScript] = useState<string>('');\n const [devServerScript, setDevServerScript] = useState<string>('');\n const [showSessionAdvanced, setShowSessionAdvanced] = useState(false);\n\n const [loading, setLoading] = useState(false);\n const [deletingSessionName, setDeletingSessionName] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [isLoaded, setIsLoaded] = useState(false);\n\n const collapsedSessionSetupLabel = selectedProvider && selectedModel\n ? `Show Session Setup (${selectedProvider.name} / ${selectedModel})`\n : 'Show Session Setup';\n\n // Load config and all sessions on mount\n useEffect(() => {\n const loadData = async () => {\n try {\n const [cfg, sessions] = await Promise.all([\n getConfig(),\n listSessions()\n ]);\n setConfig(cfg);\n setAllSessions(sessions);\n } catch (e) {\n console.error('Failed to load data', e);\n } finally {\n setIsLoaded(true);\n }\n };\n loadData();\n }, []);\n\n const loadSelectedRepoData = async (path: string) => {\n setSelectedRepo(path);\n setRepoFilesCache([]);\n\n // Load saved provider/model\n await loadSavedAgentSettings(path);\n\n // Load branches\n await loadBranches(path);\n\n // Load sessions\n const sessions = await listSessions(path);\n setExistingSessions(sessions);\n\n // Refresh all sessions to keep home badges accurate\n const allSess = await listSessions();\n setAllSessions(allSess);\n };\n\n const handleSelectRepo = async (path: string) => {\n setLoading(true);\n setError(null);\n try {\n const isValid = await checkIsGitRepo(path);\n if (!isValid) {\n setError('Selected directory is not a valid git repository.');\n setLoading(false);\n return;\n }\n\n const currentConfig = config || await getConfig();\n let newRecent = [...currentConfig.recentRepos];\n if (!newRecent.includes(path)) {\n newRecent.unshift(path);\n } else {\n // Move to top\n newRecent = [path, ...newRecent.filter(r => r !== path)];\n }\n\n // Update config\n const newConfig = await updateConfig({ recentRepos: newRecent });\n setConfig(newConfig);\n\n setIsBrowsing(false);\n\n if (mode === 'home') {\n router.push(`/new?repo=${encodeURIComponent(path)}`);\n return;\n }\n\n await loadSelectedRepoData(path);\n } catch (err) {\n console.error(err);\n setError('Failed to open repository.');\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (mode !== 'new') return;\n\n if (!repoPath) {\n setSelectedRepo(null);\n setExistingSessions([]);\n setBranches([]);\n setCurrentBranchName('');\n return;\n }\n\n if (repoPath === selectedRepo) return;\n void handleSelectRepo(repoPath);\n // `handleSelectRepo` is intentionally excluded to avoid retriggering from function identity changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mode, repoPath, selectedRepo]);\n\n const loadSavedAgentSettings = async (repoPath: string) => {\n // Refresh config to ensure we have latest settings?\n // We can just rely on current config state if we assume single user or minimal concurrency.\n // Or we can refetch.\n const currentConfig = config || await getConfig();\n if (!config) setConfig(currentConfig);\n\n const settings = currentConfig.repoSettings[repoPath] || {};\n\n const savedProviderCli = settings.agentProvider;\n const savedModel = settings.agentModel;\n const savedStartupScript = settings.startupScript;\n const savedDevServerScript = settings.devServerScript;\n\n if (savedProviderCli) {\n const provider = agentProvidersData.find(p => p.cli === savedProviderCli);\n if (provider) {\n setSelectedProvider(provider);\n if (savedModel && provider.models.some(m => m.id === savedModel)) {\n setSelectedModel(savedModel);\n } else {\n setSelectedModel(provider.models[0].id);\n }\n } else {\n // Default if saved one is invalid\n setSelectedProvider(agentProvidersData[0]);\n setSelectedModel(agentProvidersData[0].models[0].id);\n }\n } else {\n // Default\n setSelectedProvider(agentProvidersData[0]);\n setSelectedModel(agentProvidersData[0].models[0].id);\n }\n\n if (savedStartupScript !== undefined && savedStartupScript !== null) {\n setStartupScript(savedStartupScript);\n } else {\n // Determine default based on repo content\n const defaultScript = await getStartupScript(repoPath);\n setStartupScript(defaultScript);\n }\n\n if (savedDevServerScript !== undefined && savedDevServerScript !== null) {\n setDevServerScript(savedDevServerScript);\n } else {\n setDevServerScript('');\n }\n };\n\n const handleSetDefaultRoot = async (path: string) => {\n const newConfig = await updateConfig({ defaultRoot: path });\n setConfig(newConfig);\n setIsSelectingRoot(false);\n };\n\n const loadBranches = async (repoPath: string) => {\n try {\n const data = await getBranches(repoPath);\n setBranches(data);\n\n const currentConfig = config || await getConfig();\n const settings = currentConfig.repoSettings[repoPath] || {};\n const lastPicked = settings.lastBranch;\n\n // Check current checked out branch\n const currentCheckedOut = data.find(b => b.current)?.name;\n\n if (lastPicked && data.some(b => b.name === lastPicked)) {\n setCurrentBranchName(lastPicked);\n if (lastPicked !== currentCheckedOut) {\n try {\n await checkoutBranch(repoPath, lastPicked);\n const updatedData = await getBranches(repoPath);\n setBranches(updatedData);\n } catch (e) {\n console.warn(\"Could not auto-checkout to remembered branch\", e);\n if (currentCheckedOut) setCurrentBranchName(currentCheckedOut);\n }\n }\n } else {\n if (currentCheckedOut) setCurrentBranchName(currentCheckedOut);\n }\n } catch (e) {\n console.error(\"Failed to load branches\", e);\n setError(\"Failed to load branches.\");\n }\n };\n\n const handleBranchChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const newBranch = e.target.value;\n if (!selectedRepo) return;\n\n setLoading(true);\n try {\n await checkoutBranch(selectedRepo, newBranch);\n setCurrentBranchName(newBranch);\n\n const newConfig = await updateRepoSettings(selectedRepo, { lastBranch: newBranch });\n setConfig(newConfig);\n\n const data = await getBranches(selectedRepo);\n setBranches(data);\n } catch {\n setError(`Failed to checkout branch ${newBranch}`);\n } finally {\n setLoading(false);\n }\n };\n\n const handleProviderChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const cli = e.target.value;\n const provider = agentProvidersData.find(p => p.cli === cli);\n if (provider && selectedRepo) {\n setSelectedProvider(provider);\n // Default to first model\n const defaultModel = provider.models[0].id;\n setSelectedModel(defaultModel);\n\n const newConfig = await updateRepoSettings(selectedRepo, {\n agentProvider: provider.cli,\n agentModel: defaultModel\n });\n setConfig(newConfig);\n }\n };\n\n const handleModelChange = async (e: React.ChangeEvent<HTMLSelectElement>) => {\n const model = e.target.value;\n setSelectedModel(model);\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { agentModel: model });\n setConfig(newConfig);\n }\n };\n\n const handleStartupScriptChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const script = e.target.value;\n setStartupScript(script);\n // Debounce saving? Or just save on blur/change?\n // For simplicity, I'll save on change but it triggers server action every keystroke which is bad.\n // Better to save on blur or debounce.\n // Or just save when starting session?\n // The previous code saved on every change to localStorage.\n // Let's rely on saving when starting session? No, we want to persist even if not started.\n // I'll save on blur for now, or just save here and accept the cost.\n // Given the \"async\" nature, let's just save. But it might be laggy.\n // Actually, let's just update local state here, and use `onBlur` to save.\n };\n\n const saveStartupScript = async () => {\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { startupScript });\n setConfig(newConfig);\n }\n }\n\n const handleDevServerScriptChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setDevServerScript(e.target.value);\n };\n\n const saveDevServerScript = async () => {\n if (selectedRepo) {\n const newConfig = await updateRepoSettings(selectedRepo, { devServerScript });\n setConfig(newConfig);\n }\n };\n\n const [initialMessage, setInitialMessage] = useState<string>('');\n const [title, setTitle] = useState<string>('');\n const [attachments, setAttachments] = useState<File[]>([]);\n\n const normalizeAttachmentFile = useCallback((file: File, index: number): File => {\n if (file.name && file.name.trim().length > 0) {\n return file;\n }\n\n const extension = file.type\n ? file.type.split('/')[1]?.split('+')[0] || 'bin'\n : 'bin';\n const generatedName = `pasted-file-${Date.now()}-${index + 1}.${extension}`;\n\n return new File([file], generatedName, {\n type: file.type,\n lastModified: file.lastModified || Date.now(),\n });\n }, []);\n\n const appendAttachments = useCallback((incomingFiles: File[]) => {\n if (incomingFiles.length === 0) return;\n\n setAttachments(prev => {\n const byName = new Map(prev.map(file => [file.name, file]));\n incomingFiles.forEach(file => {\n byName.set(file.name, file);\n });\n return Array.from(byName.values());\n });\n }, []);\n\n // Suggestion state\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [suggestionList, setSuggestionList] = useState<string[]>([]);\n const [, setSuggestionQuery] = useState('');\n const [cursorPosition, setCursorPosition] = useState(0);\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n // Cache filtered files\n const [repoFilesCache, setRepoFilesCache] = useState<string[]>([]);\n\n const updateSuggestions = (query: string, files: string[], currentAttachments: File[]) => {\n const lowerQ = query.toLowerCase();\n\n const attachmentNames = currentAttachments.map(f => f.name);\n // prioritize attachments\n const matchedAttachments = attachmentNames.filter(n => n.toLowerCase().includes(lowerQ));\n const matchedFiles = files.filter(f => f.toLowerCase().includes(lowerQ)).slice(0, 20);\n\n const newList = [...matchedAttachments, ...matchedFiles];\n setSuggestionList(newList);\n setSelectedIndex(0); // Reset selection\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Cmd+Enter to submit\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n return;\n }\n\n if (showSuggestions && suggestionList.length > 0) {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setSelectedIndex(prev => (prev > 0 ? prev - 1 : suggestionList.length - 1)); // Wrap around\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n setSelectedIndex(prev => (prev < suggestionList.length - 1 ? prev + 1 : 0)); // Wrap around\n } else if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n handleSelectSuggestion(suggestionList[selectedIndex]);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setShowSuggestions(false);\n }\n }\n };\n\n const handleMessageChange = async (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const val = e.target.value;\n const pos = e.target.selectionStart;\n setInitialMessage(val);\n setCursorPosition(pos);\n\n // Check for @ mention\n const textBeforeCursor = val.substring(0, pos);\n const lastAt = textBeforeCursor.lastIndexOf('@');\n\n if (lastAt !== -1) {\n const query = textBeforeCursor.substring(lastAt + 1);\n if (!/\\s/.test(query)) {\n setSuggestionQuery(query);\n setShowSuggestions(true);\n\n if (selectedRepo) {\n let files = repoFilesCache;\n if (repoFilesCache.length === 0) {\n files = await listRepoFiles(selectedRepo);\n setRepoFilesCache(files);\n }\n updateSuggestions(query, files, attachments);\n }\n return;\n }\n }\n\n setShowSuggestions(false);\n };\n\n const handleSelectSuggestion = (suggestion: string) => {\n const textBeforeCursor = initialMessage.substring(0, cursorPosition);\n const lastAt = textBeforeCursor.lastIndexOf('@');\n\n if (lastAt !== -1) {\n const prefix = initialMessage.substring(0, lastAt);\n const suffix = initialMessage.substring(cursorPosition);\n\n const newValue = `${prefix}@${suggestion} ${suffix}`;\n setInitialMessage(newValue);\n setShowSuggestions(false);\n }\n };\n\n const handleFileSelect = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!e.target.files) return;\n\n const selectedFiles = Array.from(e.target.files).map((file, index) => normalizeAttachmentFile(file, index));\n appendAttachments(selectedFiles);\n e.target.value = '';\n };\n\n useEffect(() => {\n if (mode !== 'new' || !selectedRepo) return;\n\n const handlePaste = (event: ClipboardEvent) => {\n const clipboardData = event.clipboardData;\n if (!clipboardData) return;\n\n const fromItems = Array.from(clipboardData.items)\n .filter(item => item.kind === 'file')\n .map(item => item.getAsFile())\n .filter((file): file is File => file !== null);\n\n const pastedFiles = (fromItems.length > 0 ? fromItems : Array.from(clipboardData.files))\n .map((file, index) => normalizeAttachmentFile(file, index));\n\n if (pastedFiles.length === 0) return;\n\n event.preventDefault();\n appendAttachments(pastedFiles);\n };\n\n window.addEventListener('paste', handlePaste);\n return () => {\n window.removeEventListener('paste', handlePaste);\n };\n }, [appendAttachments, mode, normalizeAttachmentFile, selectedRepo]);\n\n const removeAttachment = (idx: number) => {\n setAttachments(prev => prev.filter((_, i) => i !== idx));\n };\n\n\n const handleRemoveRecent = async (e: React.MouseEvent, repo: string) => {\n e.stopPropagation();\n if (config) {\n const newRecent = config.recentRepos.filter(r => r !== repo);\n const newConfig = await updateConfig({ recentRepos: newRecent });\n setConfig(newConfig);\n }\n };\n\n const handleStartSession = async () => {\n if (!selectedRepo) return;\n setLoading(true);\n\n // Also save startup script if changed\n await saveStartupScript();\n await saveDevServerScript();\n\n try {\n // 1. Start TTYD if needed\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || \"Failed to start ttyd\");\n setLoading(false);\n return;\n }\n\n // 2. Create Session Worktree\n // Use current selected branch as base\n const baseBranch = currentBranchName || 'main'; // Fallback to main if empty, though shouldn't happen\n\n const wtResult = await createSession(selectedRepo, baseBranch, {\n agent: selectedProvider?.cli || 'agent',\n model: selectedModel || '',\n title: title,\n devServerScript: devServerScript || undefined\n });\n\n if (wtResult.success && wtResult.sessionName && wtResult.worktreePath && wtResult.branchName) {\n // NEW: Upload attachments\n if (attachments.length > 0) {\n const formData = new FormData();\n attachments.forEach(file => formData.append(file.name, file)); // Use filename as key or just 'files'\n // Backend iterates entries [name, file].\n await saveAttachments(wtResult.worktreePath, formData);\n }\n\n // NEW: Process initial message mentions\n const trimmedInitialMessage = initialMessage.trim();\n let processedMessage = trimmedInitialMessage\n ? `${trimmedInitialMessage}\\n\\n${AUTO_COMMIT_INSTRUCTION}`\n : '';\n\n // Helper to match replacement\n processedMessage = processedMessage.replace(/@(\\S+)/g, (match, name) => {\n if (attachments.some(a => a.name === name)) {\n return `${wtResult.worktreePath}-attachments/${name}`;\n }\n // Assume repo file - keep relative path as we run in worktree root\n return name;\n });\n\n // 3. Persist launch context for the new session\n const launchContextResult = await saveSessionLaunchContext(wtResult.sessionName, {\n title: title || undefined,\n initialMessage: processedMessage || undefined,\n startupScript: startupScript || undefined,\n attachmentNames: attachments.map(file => file.name),\n agentProvider: selectedProvider?.cli || 'agent',\n model: selectedModel || '',\n });\n\n if (!launchContextResult.success) {\n setError(launchContextResult.error || 'Failed to save session context');\n setLoading(false);\n return;\n }\n\n // 4. Navigate to session page by path only\n const dest = `/session/${wtResult.sessionName}`;\n router.push(dest);\n setLoading(false);\n\n // No need to refresh sessions as we are navigating away\n } else {\n setError(wtResult.error || \"Failed to create session worktree\");\n setLoading(false);\n }\n\n } catch (e) {\n console.error(e);\n setError(\"Failed to start session\");\n setLoading(false);\n }\n };\n\n const handleResumeSession = async (session: SessionMetadata) => {\n if (!selectedRepo) return;\n setLoading(true);\n\n try {\n // 1. Start TTYD\n const ttydResult = await startTtydProcess();\n if (!ttydResult.success) {\n setError(ttydResult.error || \"Failed to start ttyd\");\n setLoading(false);\n return;\n }\n\n // 2. Navigate — session already has initialized=true so SessionPageClient will resume\n const dest = `/session/${session.sessionName}`;\n router.push(dest);\n setLoading(false);\n\n } catch (e) {\n console.error(e);\n setError(\"Failed to resume session\");\n setLoading(false);\n }\n };\n\n const handleDeleteSession = async (session: SessionMetadata) => {\n if (!selectedRepo) return;\n\n const confirmed = confirm(\n `Delete session \"${session.sessionName}\"?\\n\\nThis will remove the worktree, branch, and session metadata.`\n );\n if (!confirmed) return;\n\n setDeletingSessionName(session.sessionName);\n setError(null);\n\n try {\n const result = await deleteSession(session.sessionName);\n if (!result.success) {\n setError(result.error || 'Failed to delete session');\n return;\n }\n\n const sessions = await listSessions(selectedRepo);\n setExistingSessions(sessions);\n\n // Also refresh all sessions\n const allSess = await listSessions();\n setAllSessions(allSess);\n } catch (e) {\n console.error(e);\n setError('Failed to delete session');\n } finally {\n setDeletingSessionName(null);\n }\n };\n\n return (\n <>\n {mode === 'home' && (\n <div className=\"card w-full max-w-2xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <Image src=\"/icon.png\" alt=\"Viba\" width={24} height={24} className=\"rounded-sm\" />\n Viba\n </div>\n </h2>\n\n {error && <div className=\"alert alert-error text-sm py-2 px-3 mt-2\">{error}</div>}\n\n <div className=\"mt-4 space-y-4\">\n <div className=\"flex justify-end gap-2\">\n <button\n className=\"btn btn-ghost btn-sm gap-2\"\n onClick={() => setIsSelectingRoot(true)}\n title={config?.defaultRoot ? `Default: ${config.defaultRoot}` : \"Set default browsing folder\"}\n >\n <FolderCog className=\"w-4 h-4\" />\n {config?.defaultRoot ? \"Change Default\" : \"Set Default Root\"}\n </button>\n <button className=\"btn btn-primary btn-sm gap-2\" onClick={() => setIsBrowsing(true)}>\n <Plus className=\"w-4 h-4\" /> Open Local Repo\n </button>\n </div>\n\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold opacity-70 uppercase tracking-wide\">Recent Repositories</h3>\n {!isLoaded ? (\n <div className=\"flex items-center justify-center py-8 bg-base-100 rounded-lg\">\n <span className=\"loading loading-spinner loading-md\"></span>\n </div>\n ) : (!config || config.recentRepos.length === 0) ? (\n <div className=\"text-center py-8 text-base-content/40 italic bg-base-100 rounded-lg\">\n No recent repositories found.\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {config.recentRepos.map(repo => {\n const sessionCount = allSessions.filter(s => s.repoPath === repo).length;\n return (\n <div\n key={repo}\n onClick={() => handleSelectRepo(repo)}\n className=\"flex items-center justify-between p-3 bg-base-100 hover:bg-base-300 rounded-md cursor-pointer group transition-all border border-base-300\"\n >\n <div className=\"flex items-center gap-3 overflow-hidden shrink min-w-0\">\n <FolderGit2 className=\"w-5 h-5 text-secondary shrink-0\" />\n <div className=\"flex flex-col overflow-hidden\">\n <span className=\"font-medium truncate\">{getBaseName(repo)}</span>\n <span className=\"text-xs opacity-50 truncate\">{repo}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {sessionCount > 0 && (\n <div className=\"badge badge-secondary badge-sm gap-1 opacity-80\" title={`${sessionCount} on-going sessions`}>\n <Bot className=\"w-3 h-3\" />\n {sessionCount}\n </div>\n )}\n <button\n onClick={(e) => handleRemoveRecent(e, repo)}\n className=\"btn btn-circle btn-ghost btn-xs opacity-0 group-hover:opacity-100 text-error\"\n title=\"Remove from history\"\n >\n <X className=\"w-3 h-3\" />\n </button>\n <ChevronRight className=\"w-4 h-4 opacity-30\" />\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && selectedRepo && (\n <div className=\"w-full max-w-6xl space-y-4\">\n {error && <div className=\"alert alert-error text-sm py-2 px-3\">{error}</div>}\n <div className=\"flex flex-col gap-4 w-full\">\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex justify-between items-center\">\n <div className=\"flex items-center gap-2\">\n <FolderGit2 className=\"w-6 h-6 text-primary\" />\n Git Repository Selector\n </div>\n <button className=\"btn btn-sm btn-ghost\" onClick={() => router.push('/')}>\n Change Repo\n </button>\n </h2>\n\n <div className=\"mt-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"bg-base-100 p-4 rounded-lg border border-base-300 flex flex-col justify-center\">\n <div className=\"text-xs opacity-50 uppercase tracking-widest mb-1\">Current Repository</div>\n <div className=\"flex items-center gap-2 font-mono text-sm break-all\">\n <FolderGit2 className=\"w-4 h-4 text-primary shrink-0\" />\n {selectedRepo}\n </div>\n </div>\n\n {/* Branch Selection */}\n <div className=\"bg-base-100 p-4 rounded-lg border border-base-300 space-y-2\">\n <div className=\"flex justify-between items-center\">\n <label className=\"text-sm font-medium opacity-70 uppercase tracking-widest\">Current Branch</label>\n {loading && <span className=\"loading loading-spinner loading-xs\"></span>}\n </div>\n\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <GitBranchIcon className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full font-mono focus:outline-none\"\n value={currentBranchName}\n onChange={handleBranchChange}\n disabled={loading}\n >\n {branches.map(branch => (\n <option key={branch.name} value={branch.name}>\n {branch.name} {branch.current ? '(checked out)' : ''}\n </option>\n ))}\n </select>\n </div>\n <div className=\"text-[10px] opacity-50 px-1 italic\">\n Switching branches updates the working directory.\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n {/* Continue Existing Session Card */}\n {existingSessions.length > 0 && (\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <Play className=\"w-6 h-6 text-success\" />\n Continue Existing Session\n </h2>\n <div className=\"flex flex-col gap-2 mt-4 max-h-64 overflow-y-auto\">\n {existingSessions.map((session) => (\n <div key={session.sessionName} className=\"flex flex-col gap-2 p-3 bg-base-100 rounded-md border border-base-300\">\n <div className=\"flex justify-between items-start\">\n <div>\n {session.title && <div className=\"font-semibold\">{session.title}</div>}\n <div className=\"text-xs opacity-60 font-mono\">{session.sessionName}</div>\n <div className=\"text-xs opacity-60 mt-1\">\n Agent: {session.agent} • Model: {session.model}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n className=\"btn btn-sm btn-success btn-outline gap-2\"\n onClick={() => handleResumeSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n >\n <Play className=\"w-3 h-3\" /> Resume\n </button>\n <button\n className=\"btn btn-sm btn-error btn-outline gap-2\"\n onClick={() => handleDeleteSession(session)}\n disabled={loading || deletingSessionName === session.sessionName}\n >\n <Trash2 className=\"w-3 h-3\" />\n {deletingSessionName === session.sessionName ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* Start New Session Card */}\n <div className=\"card w-full bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n <h2 className=\"card-title flex items-center gap-2\">\n <Bot className=\"w-6 h-6 text-secondary\" />\n Start New Session\n </h2>\n\n <div className=\"mt-4 space-y-6\">\n <div className=\"space-y-3\">\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-sm px-2 h-auto min-h-0 normal-case justify-start gap-2\"\n onClick={() => setShowSessionAdvanced(prev => !prev)}\n >\n <ChevronRight className={`w-4 h-4 transition-transform ${showSessionAdvanced ? 'rotate-90' : ''}`} />\n {showSessionAdvanced ? 'Hide Session Setup' : collapsedSessionSetupLabel}\n </button>\n\n {showSessionAdvanced && (\n <>\n {/* Agent Selection */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Agent Provider</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <Bot className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full focus:outline-none\"\n value={selectedProvider?.cli || ''}\n onChange={handleProviderChange}\n disabled={loading}\n >\n {agentProvidersData.map(provider => (\n <option key={provider.cli} value={provider.cli}>\n {provider.name}\n </option>\n ))}\n </select>\n </div>\n {selectedProvider?.description && (\n <p className=\"text-[10px] opacity-60 mt-1 pl-1 italic leading-tight\">\n {selectedProvider.description}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Model</label>\n <div className=\"join w-full\">\n <div className=\"join-item bg-base-300 flex items-center px-3 border border-base-content/20 border-r-0\">\n <Cpu className=\"w-4 h-4\" />\n </div>\n <select\n className=\"select select-bordered join-item w-full focus:outline-none\"\n value={selectedModel}\n onChange={handleModelChange}\n disabled={loading || !selectedProvider}\n >\n {selectedProvider?.models.map(model => (\n <option key={model.id} value={model.id}>\n {model.label}\n </option>\n ))}\n </select>\n </div>\n {selectedProvider?.models.find(m => m.id === selectedModel)?.description && (\n <p className=\"text-[10px] opacity-60 mt-1 pl-1 italic leading-tight\">\n {selectedProvider.models.find(m => m.id === selectedModel)?.description}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Start up script (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"npm i\"\n value={startupScript}\n onChange={handleStartupScriptChange}\n onBlur={saveStartupScript}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Script to run in the terminal agent iframe upon startup.\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Dev server script (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"npm run dev\"\n value={devServerScript}\n onChange={handleDevServerScriptChange}\n onBlur={saveDevServerScript}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Script for the Session View Start Dev Server button in the right terminal.\n </div>\n </div>\n </>\n )}\n </div>\n\n <div className=\"divider\"></div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Title (Optional)</label>\n <input\n type=\"text\"\n className=\"input input-bordered w-full font-mono text-sm\"\n placeholder=\"Task Title\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleStartSession();\n }\n }}\n disabled={loading}\n />\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Initial Message (Optional)</label>\n <div className=\"relative\">\n <textarea\n className=\"textarea textarea-bordered w-full h-64 font-mono text-sm leading-tight resize-none\"\n placeholder=\"Describe what you want the agent to do... Type @ to mention files.\"\n value={initialMessage}\n onChange={handleMessageChange}\n onKeyDown={handleKeyDown}\n onClick={(e) => {\n setCursorPosition(e.currentTarget.selectionStart);\n setShowSuggestions(false); // Hide on click? Or re-val?\n }}\n onKeyUp={(e) => setCursorPosition(e.currentTarget.selectionStart)}\n disabled={loading}\n ></textarea>\n {showSuggestions && suggestionList.length > 0 && (\n <div className=\"absolute left-0 right-0 z-50 mt-1 max-h-48 overflow-y-auto bg-base-100 border border-base-300 rounded-md shadow-lg\">\n {suggestionList.map((s, idx) => (\n <button\n key={s}\n className={`w-full text-left px-3 py-2 text-xs border-b border-base-200 last:border-0 truncate ${idx === selectedIndex ? 'bg-primary text-primary-content' : 'hover:bg-primary/10'\n }`}\n onMouseDown={(e) => {\n e.preventDefault(); // Prevent blur\n handleSelectSuggestion(s);\n }}\n >\n {s}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium opacity-70\">Attachments (Optional)</label>\n <input\n type=\"file\"\n multiple\n className=\"file-input file-input-bordered w-full\"\n onChange={handleFileSelect}\n disabled={loading}\n />\n <div className=\"text-xs opacity-50 px-1\">\n Paste files from clipboard with Cmd/Ctrl+V anywhere on this page.\n </div>\n {attachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-2\">\n {attachments.map((file, idx) => (\n <span key={idx} className=\"badge badge-neutral gap-2 p-3\">\n {file.name}\n <button onClick={() => removeAttachment(idx)} className=\"btn btn-ghost btn-xs btn-circle text-error\">\n <X className=\"w-3 h-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"card-actions justify-end mt-4\">\n <button\n className=\"btn btn-primary btn-wide shadow-lg\"\n onClick={handleStartSession}\n disabled={loading}\n >\n {loading ? <span className=\"loading loading-spinner\"></span> : \"Start Session\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {mode === 'new' && !selectedRepo && (\n <div className=\"card w-full max-w-2xl bg-base-200 shadow-xl\">\n <div className=\"card-body\">\n {error && <div className=\"alert alert-error text-sm py-2 px-3\">{error}</div>}\n <h2 className=\"card-title\">Select a Repository</h2>\n <p className=\"opacity-70 text-sm\">Choose a repository first, then start or resume a session.</p>\n <div className=\"card-actions justify-end mt-4\">\n <button className=\"btn btn-primary\" onClick={() => router.push('/')}>\n Go to Home\n </button>\n </div>\n </div>\n </div>\n )}\n\n\n\n {mode === 'home' && isBrowsing && (\n <FileBrowser\n initialPath={config?.defaultRoot || undefined}\n onSelect={handleSelectRepo}\n onCancel={() => setIsBrowsing(false)}\n checkRepo={checkIsGitRepo}\n />\n )}\n\n {mode === 'home' && isSelectingRoot && (\n <FileBrowser\n title=\"Default Root Folder\"\n initialPath={config?.defaultRoot || undefined}\n onSelect={handleSetDefaultRoot}\n onCancel={() => setIsSelectingRoot(false)}\n />\n )}\n </>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm9 18 6-6-6-6', key: 'mthhwq' }]];\n\n/**\n * @component @name ChevronRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/chevron-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronRight = createLucideIcon('chevron-right', __iconNode);\n\nexport default ChevronRight;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 20v2', key: '1lh1kg' }],\n ['path', { d: 'M12 2v2', key: 'tus03m' }],\n ['path', { d: 'M17 20v2', key: '1rnc9c' }],\n ['path', { d: 'M17 2v2', key: '11trls' }],\n ['path', { d: 'M2 12h2', key: '1t8f8n' }],\n ['path', { d: 'M2 17h2', key: '7oei6x' }],\n ['path', { d: 'M2 7h2', key: 'asdhe0' }],\n ['path', { d: 'M20 12h2', key: '1q8mjw' }],\n ['path', { d: 'M20 17h2', key: '1fpfkl' }],\n ['path', { d: 'M20 7h2', key: '1o8tra' }],\n ['path', { d: 'M7 20v2', key: '4gnj0m' }],\n ['path', { d: 'M7 2v2', key: '1i4yhu' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2', key: '1vbyd7' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1', key: 'z9xiuo' }],\n];\n\n/**\n * @component @name Cpu\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/cpu\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Cpu = createLucideIcon('cpu', __iconNode);\n\nexport default Cpu;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n];\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/plus\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Plus = createLucideIcon('plus', __iconNode);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 8V4H8', key: 'hb8ula' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2', key: 'enze0r' }],\n ['path', { d: 'M2 14h2', key: 'vft8re' }],\n ['path', { d: 'M20 14h2', key: '4cs60a' }],\n ['path', { d: 'M15 13v2', key: '1xurst' }],\n ['path', { d: 'M9 13v2', key: 'rq6x2g' }],\n];\n\n/**\n * @component @name Bot\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/bot\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Bot = createLucideIcon('bot', __iconNode);\n\nexport default Bot;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 19a5 5 0 0 1-5-5v8', key: 'sz5oeg' }],\n [\n 'path',\n {\n d: 'M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5',\n key: '1w6njk',\n },\n ],\n ['circle', { cx: '13', cy: '12', r: '2', key: '1j92g6' }],\n ['circle', { cx: '20', cy: '19', r: '2', key: '1obnsp' }],\n];\n\n/**\n * @component @name FolderGit2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-git-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderGit2 = createLucideIcon('folder-git-2', __iconNode);\n\nexport default FolderGit2;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M18 6 6 18', key: '1bl5f8' }],\n ['path', { d: 'm6 6 12 12', key: 'd8bk6v' }],\n];\n\n/**\n * @component @name X\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/x\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst X = createLucideIcon('x', __iconNode);\n\nexport default X;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['line', { x1: '6', x2: '6', y1: '3', y2: '15', key: '17qcm7' }],\n ['circle', { cx: '18', cy: '6', r: '3', key: '1h7g24' }],\n ['circle', { cx: '6', cy: '18', r: '3', key: 'fqmcym' }],\n ['path', { d: 'M18 9a9 9 0 0 1-9 9', key: 'n2h4wq' }],\n];\n\n/**\n * @component @name GitBranch\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/git-branch\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst GitBranch = createLucideIcon('git-branch', __iconNode);\n\nexport default GitBranch;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M10.3 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.98a2 2 0 0 1 1.69.9l.66 1.2A2 2 0 0 0 12 6h8a2 2 0 0 1 2 2v3.3',\n key: '128dxu',\n },\n ],\n ['path', { d: 'm14.305 19.53.923-.382', key: '3m78fa' }],\n ['path', { d: 'm15.228 16.852-.923-.383', key: 'npixar' }],\n ['path', { d: 'm16.852 15.228-.383-.923', key: '5xggr7' }],\n ['path', { d: 'm16.852 20.772-.383.924', key: 'dpfhf9' }],\n ['path', { d: 'm19.148 15.228.383-.923', key: '1reyyz' }],\n ['path', { d: 'm19.53 21.696-.382-.924', key: '1goivc' }],\n ['path', { d: 'm20.772 16.852.924-.383', key: 'htqkph' }],\n ['path', { d: 'm20.772 19.148.924.383', key: '9w9pjp' }],\n ['circle', { cx: '18', cy: '18', r: '3', key: '1xkwt0' }],\n];\n\n/**\n * @component @name FolderCog\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/folder-cog\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst FolderCog = createLucideIcon('folder-cog', __iconNode);\n\nexport default FolderCog;\n"],"names":["warnOnce","_","process","env","NODE_ENV","warnings","Set","msg","has","console","warn","add","getDeploymentId","getDeploymentIdQueryOrEmptyString","NEXT_DEPLOYMENT_ID","deploymentId","getImageBlurSvg","widthInt","heightInt","blurWidth","blurHeight","blurDataURL","objectFit","std","svgWidth","svgHeight","viewBox","preserveAspectRatio","VALID_LOADERS","imageConfigDefault","deviceSizes","imageSizes","path","loader","loaderFile","domains","disableStaticImages","minimumCacheTTL","formats","maximumRedirects","maximumResponseBody","dangerouslyAllowLocalIP","dangerouslyAllowSVG","contentSecurityPolicy","contentDispositionType","localPatterns","undefined","remotePatterns","qualities","unoptimized","getImgProps","VALID_LOADING_VALUES","INVALID_BACKGROUND_SIZE_VALUES","isStaticRequire","src","default","isStaticImageData","isStaticImport","allImgs","Map","perfObserver","getInt","x","Number","isFinite","NaN","test","parseInt","getWidths","allSizes","width","sizes","viewportWidthRe","percentSizes","match","exec","push","length","smallestRatio","Math","min","widths","filter","s","kind","map","w","find","p","generateImgAttrs","config","quality","startsWith","sep","includes","srcSet","last","i","join","priority","preload","loading","className","height","fill","style","overrideSrc","onLoad","onLoadingComplete","placeholder","fetchPriority","decoding","layout","objectPosition","lazyBoundary","lazyRoot","rest","_state","imgConf","showAltText","blurComplete","defaultLoader","c","sort","a","b","Error","isDefaultLoader","customImageLoader","obj","opts","layoutToStyle","intrinsic","maxWidth","responsive","layoutToSizes","layoutStyle","layoutSizes","staticSrc","staticImageData","JSON","stringify","ratio","round","isLazy","split","endsWith","qualityInt","output","position","isNaN","String","VALID_BLUR_EXT","urlStr","url","URL","err","pathname","search","legacyKey","legacyValue","Object","entries","window","PerformanceObserver","entryList","entry","getEntries","imgSrc","element","lcpImage","get","observe","type","buffered","error","imgStyle","assign","left","top","right","bottom","color","backgroundImage","backgroundSize","placeholderStyle","backgroundPosition","backgroundRepeat","imgAttributes","loadingFinal","fullUrl","e","location","href","set","props","meta","SideEffect","isServer","useClientOnlyLayoutEffect","useLayoutEffect","useClientOnlyEffect","useEffect","headManager","reduceComponentsToState","emitChange","mountedInstances","headElements","Children","toArray","Array","from","Boolean","updateHead","children","delete","_pendingUpdate","module","exports","require","vendored","HeadManagerContext","defaultHead","head","charSet","name","content","onlyReactElement","list","child","React","Fragment","concat","reduce","fragmentList","fragmentChild","METATYPES","unique","keys","tags","metaTypes","metaCategories","h","isUnique","hasKey","key","indexOf","slice","len","metatype","hasOwnProperty","category","categories","reduceComponents","headChildrenElements","reverse","srcMessage","cloneElement","Head","useContext","Effect","ImageConfigContext","RouterContext","findClosestQuality","q","prev","cur","abs","missingValues","NEXT_RUNTIME","hasLocalMatch","parsedSrc","hasRemoteMatch","hostname","encodeURIComponent","__next_img_default","useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","Image","configEnv","__NEXT_IMAGE_OPTS","globalThis","__NEXT_IMAGE_IMPORTED","handleLoading","img","onLoadRef","onLoadingCompleteRef","setBlurComplete","sizesInput","decode","Promise","resolve","catch","then","parentElement","isConnected","event","Event","defineProperty","writable","value","prevented","stopped","nativeEvent","currentTarget","target","isDefaultPrevented","isPropagationStopped","persist","preventDefault","stopPropagation","origSrc","searchParams","getAttribute","widthViewportRatio","getBoundingClientRect","innerWidth","getComputedStyle","valid","heightModified","toString","widthModified","getDynamicProps","use","fetchpriority","ImageElement","forwardRef","setShowAltText","onError","forwardedRef","ownRef","complete","ref","data-nimg","ImagePreload","isAppRouter","as","imageSrcSet","crossOrigin","referrerPolicy","ReactDOM","link","rel","pagesRouter","configContext","useMemo","useState","imgMeta","getImageProps","imgProps"],"mappings":"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CAAA,AGAJ,CHAI,AGAJ,CHAI,AGAJ,CAAA,AHAI,AAAK,CAAA,AGAC,EHAG,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,0BAChD,yDAEnB,CCAJ,AGAE,CAAA,AHAF,eDAwB,CFAD,AGAvB,ADAwB,CAAA,ACAxB,AHAuB,CAAA,AEAC,ACAxB,CHAuB,AGAvB,ADAwB,CFAD,AEAC,ACAxB,CAAA,AHAuB,AEAC,CCAxB,ADAwB,YACtB,CCAA,AHAA,AEAA,2BACX,EFqBM,CMZH,CNYS,CAAA,EAAA,EAAA,OAAA,EAAA,OAAwB,CA3BjC,AMegC,ANYC,CC3BjC,ACAA,ACAA,ACAA,AJAA,AKAA,ANYH,CAAA,AGZG,AGAA,ALAA,ACAA,AEAA,ACAA,kCJCD,CAAC,oBAAwB,IAAA,qCACM,UAAU,CKAD,CAAA,ULC1B,CEAA,ADYH,AIZG,ADYN,AEZD,ANAO,CEAA,AFAA,ACYH,AGAH,ACZM,ACAP,CNAO,AKAA,ADYN,AEZD,ALYI,ACZG,CFAA,ACYH,AGAH,AEZD,ADAO,AHAA,CFAA,AKAA,ADYN,AEZD,AJAO,ADYH,CCZG,AIAP,ADAO,AJYH,AGAH,AJZM,CIYN,ACZM,AJYH,AKZJ,ANAO,AEAA,CEYN,AJZM,AMAP,AJAO,AGAA,AJYH,CAAA,AGAH,AEZD,AJAO,AGAA,ALAA,qCACW,IAAA,+CAEzB,CAAC,OAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAU,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACvC,CAAC,CMAA,AJYH,AFZG,CAAA,AMAA,AJYH,QFZgB,CAAA,AMAA,AJYJ,CAAA,AFZI,AMAA,CNAA,AMAA,AJYJ,CFZI,AEYJ,AIZI,CNAA,AEYJ,AIZI,CJYJ,AFZI,AMAA,CJYJ,AIZI,ANAA,CEYJ,AIZI,ANAA,CAAA,AMAA,AJYJ,CIZI,AJYJ,AFZI,CMAA,AJYJ,AFZI,IAAiB,CEYJ,AIZb,ANAiB,CAAA,AMAjB,QNA2B,CMAD,AJYN,CIZM,AJYI,UFX9B,CAAA,AGAD,AGAC,CAAA,ANAA,AGAD,SHAa,IAAK,CGAJ,AHAI,AMAjB,WNCb,CAAA,AGAA,AGAA,CAAA,AHAA,AHAA,CMAA,AHAA,AHAA,CGAA,AGAA,ANAA,CGAA,AGAA,ANAA,CMAA,ANAA,AGAA,CGAA,AHAA,AHAA,iBAA6B,CGAH,AGAb,ANAgB,CMAhB,AHAa,AHAG,SAC9B,CAAC,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CAAA,AMAA,CNAA,AMAA,CNAA,AMAA,GNAa,CAAA,AMAA,CNAA,AMAA,CAAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,AAAW,CMAX,ANAW,CAAA,AMAX,CAAA,ANAW,CMAX,ANAW,AAAK,CMAhB,ANAgB,CMAhB,ANAgB,CMAhB,ANAgB,CAAA,AMAhB,CAAA,ANAgB,CAAA,AMAhB,CAAA,ANAgB,CMAhB,ENA0B,CMAC,CAAA,CAAA,CAAA,iBNCjB,CMAV,AHYG,AHZO,CMAV,ANAU,AGYP,CAAA,AGZH,ANAU,CMAV,AHYG,AHZO,AAAK,CGYZ,AGZH,ANAe,CMAf,AHYG,AHZY,CMAf,AHYG,AHZY,SAC5B,CAAA,AMAA,CNAA,AMAA,CAAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,CMAA,ANAA,AAAQ,CAAA,AMAA,ANAE,CAAA,CAAG,CAAA,AMAA,CAAA,ANAA,CMAA,CAAA,ANAK,CMAL,ANAK,CMAL,ANAK,AAAG,CMAR,ANAQ,CMAR,ANAQ,CMAR,ANAQ,CAAK,AMAb,ANAQ,CMAR,ANAa,CAAA,AMAb,CAAA,ANAa,CMAb,ANAa,CMAb,ANAa,CMAb,ANAa,AAAO,CAAA,AMApB,INA0B,OAAQ,CMAF,ANAE,CMAF,ANAE,CMAF,ANAE,CMAF,ANAE,CMAF,ANAE,GAAU,CAAA,CAAA,CAAA,CAAK,AAAL,IAAU,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAU,CAAA,CAC9E,eAAmB,EAAG,CMAR,ANAQ,CMAR,ANAQ,CAAA,AMAR,CNAQ,AMAR,ANAa,CAAA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","ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,30,31,32,33,34,35,36,37]}
|