fix(prescription): raise modal z-index above header, add backdrop dismiss, and show upload button on mobile header and drawer
Some checks failed
E2E Playwright Tests / Run Full E2E & Security Suites (push) Waiting to run
Deploy Canina / deploy (push) Has been cancelled

This commit is contained in:
parsa aghaei 2026-08-26 14:25:24 +03:30
parent 63e10449ad
commit 6cacfd447b
13 changed files with 1747 additions and 1714 deletions

View File

@ -238,13 +238,15 @@ export default function Header({
{/* Left Action Buttons */}
<div className="flex items-center gap-1.5 sm:gap-3 shrink-0">
{/* Prescription Upload Button */}
{/* Prescription Upload Button (Desktop & Mobile) */}
<button
onClick={() => setIsPrescriptionModalOpen(true)}
className="hidden sm:flex items-center gap-1.5 px-3 py-2 bg-emerald-50 text-emerald-700 border border-emerald-200 hover:bg-emerald-100 rounded-xl text-xs font-black transition-all shadow-xs"
className="flex items-center gap-1.5 px-2.5 sm:px-3 py-2 bg-emerald-50 text-emerald-700 border border-emerald-200 hover:bg-emerald-100 rounded-xl text-[11px] sm:text-xs font-black transition-all shadow-xs cursor-pointer"
title="ثبت نسخه دامپزشک"
>
<FileHeart className="w-4 h-4 text-emerald-600" />
<span>ثبت نسخه دامپزشک</span>
<FileHeart className="w-3.5 h-3.5 sm:w-4 sm:h-4 text-emerald-600 shrink-0" />
<span className="hidden xs:inline sm:inline">ثبت نسخه دامپزشک</span>
<span className="inline xs:hidden sm:hidden">ثبت نسخه</span>
</button>
{/* User Account Button with Dropdown & Pets List */}
@ -520,11 +522,32 @@ export default function Header({
placeholder="جستجو در محصولات..."
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
className="w-full bg-medical-gray-50 border border-medical-gray-200 rounded-xl py-2.5 pr-10 pl-4 text-xs font-bold focus:ring-2 focus:ring-canina-blue/20 outline-none"
className="w-full bg-medical-gray-50 border border-medical-gray-200 rounded-xl py-2.5 pr-10 pl-4 text-xs font-bold focus:ring-2 focus:ring-canina-blue/20 outline-none font-vazir placeholder:font-vazir"
/>
<Search className="w-4 h-4 text-medical-gray-400 absolute right-3 top-1/2 -translate-y-1/2" />
</form>
{/* Direct Prescription CTA in Mobile Drawer */}
<button
type="button"
onClick={() => {
setIsMobileMenuOpen(false);
setIsPrescriptionModalOpen(true);
}}
className="w-full flex items-center justify-between p-3.5 bg-gradient-to-r from-emerald-500 to-teal-600 text-white rounded-2xl font-black text-xs shadow-md shadow-emerald-500/20 hover:brightness-105 transition-all cursor-pointer font-vazir"
>
<div className="flex items-center gap-2.5">
<div className="p-1.5 bg-white/20 rounded-xl">
<FileHeart className="w-4 h-4 text-white" />
</div>
<div className="text-right">
<div className="text-xs font-black">ثبت و استعلام نسخه دامپزشک</div>
<div className="text-[10px] text-emerald-100 font-medium">تامین فوری دارو و مکملهای اورجینال</div>
</div>
</div>
<span className="text-lg"></span>
</button>
{/* Dynamic Menu Groups in Mobile Drawer */}
{headerNavItems.map((navGroup) => {
const hasChildren = Array.isArray(navGroup.children) && navGroup.children.length > 0;

View File

@ -149,18 +149,28 @@ export default function PrescriptionUploadModal({ isOpen, onClose }: Prescriptio
return (
<AnimatePresence>
<div className="fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm font-vazir" dir="rtl">
<div
className="fixed inset-0 z-[100] flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm font-vazir"
dir="rtl"
onClick={(e) => {
if (e.target === e.currentTarget) {
handleClose();
}
}}
>
<motion.div
initial={{ opacity: 0, scale: 0.95 }}
animate={{ opacity: 1, scale: 1 }}
exit={{ opacity: 0, scale: 0.95 }}
className="bg-white rounded-3xl max-w-lg w-full max-h-[90vh] overflow-y-auto shadow-2xl border border-medical-gray-200 flex flex-col"
initial={{ opacity: 0, scale: 0.95, y: 15 }}
animate={{ opacity: 1, scale: 1, y: 0 }}
exit={{ opacity: 0, scale: 0.95, y: 15 }}
className="bg-white rounded-3xl max-w-lg w-full max-h-[90vh] overflow-y-auto shadow-2xl border border-medical-gray-200 flex flex-col z-10 my-auto"
>
{/* Header */}
<div className="bg-canina-blue text-white p-6 relative shrink-0">
<button
type="button"
onClick={handleClose}
className="absolute left-5 top-5 text-white/80 hover:text-white bg-white/10 p-1.5 rounded-full transition-colors cursor-pointer"
className="absolute left-5 top-5 text-white/90 hover:text-white bg-white/20 hover:bg-white/30 p-2 rounded-full transition-all cursor-pointer z-20"
aria-label="بستن پنجره"
>
<X className="w-5 h-5" />
</button>

View File

@ -184,7 +184,7 @@
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
"184": "RedisService",
"185": "RegisterDto",
"185": "@eslint/eslintrc",
"186": "seed-ui-texts.ts",
"187": "seed-wiki.ts",
"188": "update-blog.dto.ts",
@ -318,8 +318,7 @@
"316": "prettier",
"317": "revalidate/route.ts",
"318": "MaskableField.tsx",
"319": "@types/react-dom",
"320": "eslint",
"319": "eslint-config-next",
"324": "catalog/page.tsx",
"327": "eslint-plugin-react-refresh"
}

File diff suppressed because one or more lines are too long

View File

@ -184,7 +184,7 @@
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
"184": "RedisService",
"185": "@nestjs/swagger",
"185": "RegisterDto",
"186": "seed-ui-texts.ts",
"187": "seed-wiki.ts",
"188": "update-blog.dto.ts",
@ -231,7 +231,7 @@
"229": ".agents/workflows/graphify.md",
"230": "instructions.md",
"231": "eslint-config-prettier",
"232": "@eslint/eslintrc",
"232": "helmet",
"233": "tailwindcss",
"234": "@nestjs/schematics",
"235": "@nestjs/testing",
@ -319,6 +319,7 @@
"317": "revalidate/route.ts",
"318": "MaskableField.tsx",
"319": "@types/react-dom",
"320": "eslint",
"324": "catalog/page.tsx",
"327": "eslint-plugin-react-refresh"
}

View File

@ -1,16 +1,16 @@
# Graph Report - canina (2026-08-26)
## Corpus Check
- 587 files · ~1,333,406 words
- 587 files · ~1,333,485 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4110 nodes · 7412 edges · 322 communities (205 shown, 117 thin omitted)
- 4110 nodes · 7412 edges · 323 communities (206 shown, 117 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 281 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `9294e897`
- Built from commit: `6e23269a`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@ -199,7 +199,7 @@
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- RedisService
- @nestjs/swagger
- RegisterDto
- seed-ui-texts.ts
- seed-wiki.ts
- update-blog.dto.ts
@ -246,7 +246,7 @@
- .agents/workflows/graphify.md
- instructions.md
- eslint-config-prettier
- @eslint/eslintrc
- helmet
- tailwindcss
- @nestjs/schematics
- @nestjs/testing
@ -317,6 +317,7 @@
- revalidate/route.ts
- MaskableField.tsx
- @types/react-dom
- eslint
- catalog/page.tsx
- eslint-plugin-react-refresh
@ -345,11 +346,11 @@
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
## Import Cycles
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
## Communities (322 total, 117 thin omitted)
## Communities (323 total, 117 thin omitted)
### Community 0 - "Roles"
Cohesion: 0.24
@ -389,7 +390,7 @@ Nodes (13): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty,
### Community 9 - "devDependencies"
Cohesion: 0.22
Nodes (9): devDependencies, eslint, @types/bcryptjs, @types/node, typescript, eslint, @types/node, typescript (+1 more)
Nodes (9): devDependencies, @eslint/eslintrc, @types/bcryptjs, @types/node, typescript, @types/node, typescript, @eslint/eslintrc (+1 more)
### Community 10 - "reviews.controller.ts"
Cohesion: 0.07
@ -601,7 +602,7 @@ Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOpti
### Community 63 - "dependencies"
Cohesion: 0.09
Nodes (23): dependencies, bcryptjs, class-validator, compression, helmet, ioredis, @nestjs/common, @nestjs/passport (+15 more)
Nodes (23): dependencies, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport, @nestjs/platform-express (+15 more)
### Community 64 - "compilerOptions"
Cohesion: 0.10
@ -856,8 +857,8 @@ Cohesion: 0.20
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
### Community 129 - "auth.service.ts"
Cohesion: 0.06
Nodes (33): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+25 more)
Cohesion: 0.08
Nodes (25): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+17 more)
### Community 130 - "Sahel-Font"
Cohesion: 0.20
@ -1043,6 +1044,10 @@ Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO &
Cohesion: 0.08
Nodes (12): ApiExcludeController, AppModule, Module, MetricsController, Controller, Get, Res, RedisModule (+4 more)
### Community 185 - "RegisterDto"
Cohesion: 0.22
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 191 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50
Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder
@ -1088,7 +1093,7 @@ Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
### Community 298 - ".initiateOrderPayment"
Cohesion: 0.32
Cohesion: 0.21
Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip
### Community 313 - "Modal.tsx"

View File

@ -1108,19 +1108,6 @@
"community_name": "auth.service.ts",
"norm_label": "logindto"
},
{
"label": "RegisterDto",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L10",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_registerdto",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "registerdto"
},
{
"label": "SendOtpDto",
"file_type": "code",
@ -2018,6 +2005,19 @@
"community_name": "RedisService",
"norm_label": "redisservice"
},
{
"label": "RegisterDto",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L10",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_registerdto",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "registerdto"
},
{
"label": "CreateBlogDto",
"file_type": "code",
@ -10264,30 +10264,6 @@
"community_name": "robots.ts",
"norm_label": "robots()"
},
{
"label": ".initiateOrderPayment()",
"file_type": "code",
"source_file": "backend/src/payment/payment.service.ts",
"source_location": "L31",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_payment_service_paymentservice_initiateorderpayment",
"community": 294,
"community_name": "ZibalService",
"norm_label": ".initiateorderpayment()"
},
{
"label": ".initiateWalletTopup()",
"file_type": "code",
"source_file": "backend/src/payment/payment.service.ts",
"source_location": "L139",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_payment_service_paymentservice_initiatewallettopup",
"community": 294,
"community_name": "ZibalService",
"norm_label": ".initiatewallettopup()"
},
{
"label": ".apiRequest()",
"file_type": "code",
@ -10372,18 +10348,6 @@
"community_name": "ZibalService",
"norm_label": ".getaccesstoken()"
},
{
"label": ".getBackendUrl()",
"file_type": "code",
"source_file": "backend/src/payment/zibal.service.ts",
"source_location": "L130",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_zibal_service_zibalservice_getbackendurl",
"community": 294,
"community_name": "ZibalService",
"norm_label": ".getbackendurl()"
},
{
"label": ".getCheckoutQueueReport()",
"file_type": "code",
@ -10408,18 +10372,6 @@
"community_name": "ZibalService",
"norm_label": ".getcheckoutreport()"
},
{
"label": ".getFrontendUrl()",
"file_type": "code",
"source_file": "backend/src/payment/zibal.service.ts",
"source_location": "L111",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_zibal_service_zibalservice_getfrontendurl",
"community": 294,
"community_name": "ZibalService",
"norm_label": ".getfrontendurl()"
},
{
"label": ".getGatewayName()",
"file_type": "code",
@ -10468,18 +10420,6 @@
"community_name": "ZibalService",
"norm_label": ".getrefundlist()"
},
{
"label": ".getStartUrl()",
"file_type": "code",
"source_file": "backend/src/payment/zibal.service.ts",
"source_location": "L211",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_zibal_service_zibalservice_getstarturl",
"community": 294,
"community_name": "ZibalService",
"norm_label": ".getstarturl()"
},
{
"label": ".getSubMerchantList()",
"file_type": "code",
@ -10840,6 +10780,66 @@
"community_name": ".initiateOrderPayment",
"norm_label": ".verifypaymentdirect()"
},
{
"label": ".initiateOrderPayment()",
"file_type": "code",
"source_file": "backend/src/payment/payment.service.ts",
"source_location": "L31",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_payment_service_paymentservice_initiateorderpayment",
"community": 298,
"community_name": ".initiateOrderPayment",
"norm_label": ".initiateorderpayment()"
},
{
"label": ".initiateWalletTopup()",
"file_type": "code",
"source_file": "backend/src/payment/payment.service.ts",
"source_location": "L139",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_payment_service_paymentservice_initiatewallettopup",
"community": 298,
"community_name": ".initiateOrderPayment",
"norm_label": ".initiatewallettopup()"
},
{
"label": ".getBackendUrl()",
"file_type": "code",
"source_file": "backend/src/payment/zibal.service.ts",
"source_location": "L130",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_zibal_service_zibalservice_getbackendurl",
"community": 298,
"community_name": ".initiateOrderPayment",
"norm_label": ".getbackendurl()"
},
{
"label": ".getFrontendUrl()",
"file_type": "code",
"source_file": "backend/src/payment/zibal.service.ts",
"source_location": "L111",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_zibal_service_zibalservice_getfrontendurl",
"community": 298,
"community_name": ".initiateOrderPayment",
"norm_label": ".getfrontendurl()"
},
{
"label": ".getStartUrl()",
"file_type": "code",
"source_file": "backend/src/payment/zibal.service.ts",
"source_location": "L211",
"_callable": true,
"_origin": "ast",
"id": "backend_src_payment_zibal_service_zibalservice_getstarturl",
"community": 298,
"community_name": ".initiateOrderPayment",
"norm_label": ".getstarturl()"
},
{
"label": "GET()",
"file_type": "code",
@ -22329,94 +22329,6 @@
"community_name": "auth.service.ts",
"norm_label": "minlength"
},
{
"label": "register.dto.ts",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "register.dto.ts"
},
{
"label": "ApiProperty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apiproperty",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "apiproperty"
},
{
"label": "ApiPropertyOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apipropertyoptional",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "apipropertyoptional"
},
{
"label": "IsEmail",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isemail",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isemail"
},
{
"label": "IsNotEmpty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isnotempty",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isnotempty"
},
{
"label": "IsOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isoptional",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isoptional"
},
{
"label": "IsString",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isstring",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isstring"
},
{
"label": "MinLength",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_minlength",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "minlength"
},
{
"label": "send-otp.dto.ts",
"file_type": "code",
@ -27022,26 +26934,92 @@
"norm_label": "app.e2e-spec.ts"
},
{
"label": "@nestjs/swagger",
"label": "register.dto.ts",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L30",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_package_dependencies_nestjs_swagger",
"id": "backend_src_auth_dto_register_dto",
"community": 185,
"community_name": "@nestjs/swagger",
"norm_label": "@nestjs/swagger"
"community_name": "RegisterDto",
"norm_label": "register.dto.ts"
},
{
"label": "@nestjs/swagger",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L30",
"label": "ApiProperty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "nestjs_swagger",
"id": "backend_src_auth_dto_register_dto_ts_apiproperty",
"community": 185,
"community_name": "@nestjs/swagger",
"norm_label": "@nestjs/swagger"
"community_name": "RegisterDto",
"norm_label": "apiproperty"
},
{
"label": "ApiPropertyOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apipropertyoptional",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "apipropertyoptional"
},
{
"label": "IsEmail",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isemail",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isemail"
},
{
"label": "IsNotEmpty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isnotempty",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isnotempty"
},
{
"label": "IsOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isoptional",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isoptional"
},
{
"label": "IsString",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isstring",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isstring"
},
{
"label": "MinLength",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_minlength",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "minlength"
},
{
"label": "seed-ui-texts.ts",
@ -29579,26 +29557,26 @@
"norm_label": "eslint-config-prettier"
},
{
"label": "@eslint/eslintrc",
"label": "helmet",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L48",
"source_location": "L38",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint_eslintrc",
"id": "backend_package_dependencies_helmet",
"community": 232,
"community_name": "@eslint/eslintrc",
"norm_label": "@eslint/eslintrc"
"community_name": "helmet",
"norm_label": "helmet"
},
{
"label": "@eslint/eslintrc",
"label": "helmet",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L48",
"source_location": "L38",
"_origin": "ast",
"id": "eslint_eslintrc",
"id": "helmet",
"community": 232,
"community_name": "@eslint/eslintrc",
"norm_label": "@eslint/eslintrc"
"community_name": "helmet",
"norm_label": "helmet"
},
{
"label": "tailwindcss",
@ -34236,6 +34214,28 @@
"community_name": "adminRoutes.tsx",
"norm_label": "lazywithretry.ts"
},
{
"label": "eslint",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint",
"community": 320,
"community_name": "eslint",
"norm_label": "eslint"
},
{
"label": "eslint",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_json_eslint",
"community": 320,
"community_name": "eslint",
"norm_label": "eslint"
},
{
"label": "catalog/page.tsx",
"file_type": "code",
@ -39703,17 +39703,6 @@
"community_name": "dependencies",
"norm_label": "compression"
},
{
"label": "helmet",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L38",
"_origin": "ast",
"id": "backend_package_dependencies_helmet",
"community": 63,
"community_name": "dependencies",
"norm_label": "helmet"
},
{
"label": "ioredis",
"file_type": "code",
@ -39758,6 +39747,17 @@
"community_name": "dependencies",
"norm_label": "@nestjs/platform-express"
},
{
"label": "@nestjs/swagger",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L30",
"_origin": "ast",
"id": "backend_package_dependencies_nestjs_swagger",
"community": 63,
"community_name": "dependencies",
"norm_label": "@nestjs/swagger"
},
{
"label": "passport-jwt",
"file_type": "code",
@ -39824,17 +39824,6 @@
"community_name": "dependencies",
"norm_label": "compression"
},
{
"label": "helmet",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L38",
"_origin": "ast",
"id": "helmet",
"community": 63,
"community_name": "dependencies",
"norm_label": "helmet"
},
{
"label": "ioredis",
"file_type": "concept",
@ -39879,6 +39868,17 @@
"community_name": "dependencies",
"norm_label": "@nestjs/platform-express"
},
{
"label": "@nestjs/swagger",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L30",
"_origin": "ast",
"id": "nestjs_swagger",
"community": 63,
"community_name": "dependencies",
"norm_label": "@nestjs/swagger"
},
{
"label": "passport-jwt",
"file_type": "concept",
@ -44808,15 +44808,15 @@
"norm_label": "devdependencies"
},
{
"label": "eslint",
"label": "@eslint/eslintrc",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L63",
"source_location": "L48",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint",
"id": "backend_package_devdependencies_eslint_eslintrc",
"community": 9,
"community_name": "devDependencies",
"norm_label": "eslint"
"norm_label": "@eslint/eslintrc"
},
{
"label": "@types/bcryptjs",
@ -44851,17 +44851,6 @@
"community_name": "devDependencies",
"norm_label": "typescript"
},
{
"label": "eslint",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_json_eslint",
"community": 9,
"community_name": "devDependencies",
"norm_label": "eslint"
},
{
"label": "@types/node",
"file_type": "concept",
@ -44884,6 +44873,17 @@
"community_name": "devDependencies",
"norm_label": "typescript"
},
{
"label": "@eslint/eslintrc",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L48",
"_origin": "ast",
"id": "eslint_eslintrc",
"community": 9,
"community_name": "devDependencies",
"norm_label": "@eslint/eslintrc"
},
{
"label": "@types/bcryptjs",
"file_type": "concept",
@ -49890,7 +49890,7 @@
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "frontend/application/components/AuthModal.tsx",
"source_location": "L441",
"source_location": "L442",
"weight": 1.0,
"_origin": "ast",
"source": "frontend_application_components_authmodal_authmodal",
@ -49926,7 +49926,7 @@
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "frontend/application/components/AuthModal.tsx",
"source_location": "L759",
"source_location": "L760",
"weight": 1.0,
"_origin": "ast",
"source": "frontend_application_components_authmodal_authmodal",
@ -133200,5 +133200,5 @@
}
],
"hyperedges": [],
"built_at_commit": "9294e897124e68262b098d4536df989db5769f22"
"built_at_commit": "6e23269a5c23f29938cec91683f22a16c26991c6"
}

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
# Graph Report - canina (2026-08-26)
## Corpus Check
- 587 files · ~1,333,485 words
- 587 files · ~1,333,603 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4110 nodes · 7412 edges · 323 communities (206 shown, 117 thin omitted)
- 4110 nodes · 7412 edges · 322 communities (205 shown, 117 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 281 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `6e23269a`
- Built from commit: `63e10449`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@ -199,7 +199,7 @@
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- RedisService
- RegisterDto
- @eslint/eslintrc
- seed-ui-texts.ts
- seed-wiki.ts
- update-blog.dto.ts
@ -316,8 +316,7 @@
- prettier
- revalidate/route.ts
- MaskableField.tsx
- @types/react-dom
- eslint
- eslint-config-next
- catalog/page.tsx
- eslint-plugin-react-refresh
@ -346,11 +345,11 @@
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
## Import Cycles
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
## Communities (323 total, 117 thin omitted)
## Communities (322 total, 117 thin omitted)
### Community 0 - "Roles"
Cohesion: 0.24
@ -390,7 +389,7 @@ Nodes (13): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty,
### Community 9 - "devDependencies"
Cohesion: 0.22
Nodes (9): devDependencies, @eslint/eslintrc, @types/bcryptjs, @types/node, typescript, @types/node, typescript, @eslint/eslintrc (+1 more)
Nodes (9): devDependencies, eslint, @types/bcryptjs, @types/node, typescript, eslint, @types/node, typescript (+1 more)
### Community 10 - "reviews.controller.ts"
Cohesion: 0.07
@ -554,7 +553,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
### Community 50 - "devDependencies"
Cohesion: 0.13
Nodes (15): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, tailwindcss, @tailwindcss/postcss, @types/node (+7 more)
Nodes (15): devDependencies, eslint, jsdom, tailwindcss, @tailwindcss/postcss, @types/node, @types/react-dom, @vitejs/plugin-react (+7 more)
### Community 51 - "BlogsController"
Cohesion: 0.14
@ -773,12 +772,12 @@ Cohesion: 0.17
Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more)
### Community 107 - "PaginationDto"
Cohesion: 0.08
Nodes (23): BlogFilterDto, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString (+15 more)
Cohesion: 0.07
Nodes (24): CategoryQuery, BlogFilterDto, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum, IsInt, IsOptional (+16 more)
### Community 108 - "PrismaService"
Cohesion: 0.08
Nodes (17): CategoryQuery, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery, CreateContactSubmissionDto, UpdateContactInfoItemDto (+9 more)
Nodes (16): MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery, CreateContactSubmissionDto, UpdateContactInfoItemDto, MenuType (+8 more)
### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
@ -857,8 +856,8 @@ Cohesion: 0.20
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
### Community 129 - "auth.service.ts"
Cohesion: 0.08
Nodes (25): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+17 more)
Cohesion: 0.06
Nodes (33): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+25 more)
### Community 130 - "Sahel-Font"
Cohesion: 0.20
@ -1044,10 +1043,6 @@ Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO &
Cohesion: 0.08
Nodes (12): ApiExcludeController, AppModule, Module, MetricsController, Controller, Get, Res, RedisModule (+4 more)
### Community 185 - "RegisterDto"
Cohesion: 0.22
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 191 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50
Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -393,6 +393,19 @@
"community_name": "UsersService",
"norm_label": "usersservice"
},
{
"label": "CategoryQuery",
"file_type": "code",
"source_file": "backend/src/admin/categories.service.ts",
"source_location": "L5",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "backend_src_admin_categories_service_categoryquery",
"community": 107,
"community_name": "PaginationDto",
"norm_label": "categoryquery"
},
{
"label": "BlogFilterDto",
"file_type": "code",
@ -471,19 +484,6 @@
"community_name": "PaginationDto",
"norm_label": "wikiservice"
},
{
"label": "CategoryQuery",
"file_type": "code",
"source_file": "backend/src/admin/categories.service.ts",
"source_location": "L5",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "backend_src_admin_categories_service_categoryquery",
"community": 108,
"community_name": "PrismaService",
"norm_label": "categoryquery"
},
{
"label": "MeliPayamakPattern",
"file_type": "code",
@ -1108,6 +1108,19 @@
"community_name": "auth.service.ts",
"norm_label": "logindto"
},
{
"label": "RegisterDto",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L10",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_registerdto",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "registerdto"
},
{
"label": "SendOtpDto",
"file_type": "code",
@ -2005,19 +2018,6 @@
"community_name": "RedisService",
"norm_label": "redisservice"
},
{
"label": "RegisterDto",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L10",
"_callable": true,
"_callable_class": true,
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_registerdto",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "registerdto"
},
{
"label": "CreateBlogDto",
"file_type": "code",
@ -18919,6 +18919,28 @@
"community_name": "PaginationDto",
"norm_label": "admin/blogs.service.ts"
},
{
"label": "categories.controller.ts",
"file_type": "code",
"source_file": "backend/src/admin/categories.controller.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_admin_categories_controller",
"community": 107,
"community_name": "PaginationDto",
"norm_label": "categories.controller.ts"
},
{
"label": "categories.service.ts",
"file_type": "code",
"source_file": "backend/src/admin/categories.service.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_admin_categories_service",
"community": 107,
"community_name": "PaginationDto",
"norm_label": "categories.service.ts"
},
{
"label": "blogs/blogs.controller.ts",
"file_type": "code",
@ -19184,15 +19206,15 @@
"norm_label": "admin.service.spec.ts"
},
{
"label": "categories.service.ts",
"label": "media.service.ts",
"file_type": "code",
"source_file": "backend/src/admin/categories.service.ts",
"source_file": "backend/src/admin/media.service.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_admin_categories_service",
"id": "backend_src_admin_media_service",
"community": 108,
"community_name": "PrismaService",
"norm_label": "categories.service.ts"
"norm_label": "media.service.ts"
},
{
"label": "auth.service.spec.ts",
@ -22329,6 +22351,94 @@
"community_name": "auth.service.ts",
"norm_label": "minlength"
},
{
"label": "register.dto.ts",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "register.dto.ts"
},
{
"label": "ApiProperty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apiproperty",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "apiproperty"
},
{
"label": "ApiPropertyOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apipropertyoptional",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "apipropertyoptional"
},
{
"label": "IsEmail",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isemail",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isemail"
},
{
"label": "IsNotEmpty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isnotempty",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isnotempty"
},
{
"label": "IsOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isoptional",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isoptional"
},
{
"label": "IsString",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isstring",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "isstring"
},
{
"label": "MinLength",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_minlength",
"community": 129,
"community_name": "auth.service.ts",
"norm_label": "minlength"
},
{
"label": "send-otp.dto.ts",
"file_type": "code",
@ -26296,15 +26406,15 @@
"norm_label": "@nestjs/jwt"
},
{
"label": "categories.controller.ts",
"label": "media.controller.ts",
"file_type": "code",
"source_file": "backend/src/admin/categories.controller.ts",
"source_file": "backend/src/admin/media.controller.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_admin_categories_controller",
"id": "backend_src_admin_media_controller",
"community": 18,
"community_name": "JwtAuthGuard",
"norm_label": "categories.controller.ts"
"norm_label": "media.controller.ts"
},
{
"label": "ssl.controller.ts",
@ -26934,92 +27044,26 @@
"norm_label": "app.e2e-spec.ts"
},
{
"label": "register.dto.ts",
"label": "@eslint/eslintrc",
"file_type": "code",
"source_file": "backend/src/auth/dto/register.dto.ts",
"source_location": "L1",
"source_file": "backend/package.json",
"source_location": "L48",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto",
"id": "backend_package_devdependencies_eslint_eslintrc",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "register.dto.ts"
"community_name": "@eslint/eslintrc",
"norm_label": "@eslint/eslintrc"
},
{
"label": "ApiProperty",
"file_type": "code",
"source_file": "",
"source_location": "",
"label": "@eslint/eslintrc",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L48",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apiproperty",
"id": "eslint_eslintrc",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "apiproperty"
},
{
"label": "ApiPropertyOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_apipropertyoptional",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "apipropertyoptional"
},
{
"label": "IsEmail",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isemail",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isemail"
},
{
"label": "IsNotEmpty",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isnotempty",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isnotempty"
},
{
"label": "IsOptional",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isoptional",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isoptional"
},
{
"label": "IsString",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_isstring",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "isstring"
},
{
"label": "MinLength",
"file_type": "code",
"source_file": "",
"source_location": "",
"_origin": "ast",
"id": "backend_src_auth_dto_register_dto_ts_minlength",
"community": 185,
"community_name": "RegisterDto",
"norm_label": "minlength"
"community_name": "@eslint/eslintrc",
"norm_label": "@eslint/eslintrc"
},
{
"label": "seed-ui-texts.ts",
@ -28588,28 +28632,6 @@
"community_name": "admin.module.ts",
"norm_label": "module"
},
{
"label": "media.controller.ts",
"file_type": "code",
"source_file": "backend/src/admin/media.controller.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_admin_media_controller",
"community": 21,
"community_name": "admin.module.ts",
"norm_label": "media.controller.ts"
},
{
"label": "media.service.ts",
"file_type": "code",
"source_file": "backend/src/admin/media.service.ts",
"source_location": "L1",
"_origin": "ast",
"id": "backend_src_admin_media_service",
"community": 21,
"community_name": "admin.module.ts",
"norm_label": "media.service.ts"
},
{
"label": "reports.controller.ts",
"file_type": "code",
@ -33995,26 +34017,26 @@
"norm_label": "maskablefield.tsx"
},
{
"label": "@types/react-dom",
"label": "eslint-config-next",
"file_type": "code",
"source_file": "frontend/application/package.json",
"source_location": "L27",
"source_location": "L30",
"_origin": "ast",
"id": "frontend_application_package_devdependencies_types_react_dom",
"id": "frontend_application_package_devdependencies_eslint_config_next",
"community": 319,
"community_name": "@types/react-dom",
"norm_label": "@types/react-dom"
"community_name": "eslint-config-next",
"norm_label": "eslint-config-next"
},
{
"label": "@types/react-dom",
"label": "eslint-config-next",
"file_type": "concept",
"source_file": "frontend/application/package.json",
"source_location": "L27",
"source_location": "L30",
"_origin": "ast",
"id": "frontend_application_package_json_types_react_dom",
"id": "eslint_config_next",
"community": 319,
"community_name": "@types/react-dom",
"norm_label": "@types/react-dom"
"community_name": "eslint-config-next",
"norm_label": "eslint-config-next"
},
{
"label": "App.tsx",
@ -34214,28 +34236,6 @@
"community_name": "adminRoutes.tsx",
"norm_label": "lazywithretry.ts"
},
{
"label": "eslint",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint",
"community": 320,
"community_name": "eslint",
"norm_label": "eslint"
},
{
"label": "eslint",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_json_eslint",
"community": 320,
"community_name": "eslint",
"norm_label": "eslint"
},
{
"label": "catalog/page.tsx",
"file_type": "code",
@ -37591,17 +37591,6 @@
"community_name": "devDependencies",
"norm_label": "eslint"
},
{
"label": "eslint-config-next",
"file_type": "code",
"source_file": "frontend/application/package.json",
"source_location": "L30",
"_origin": "ast",
"id": "frontend_application_package_devdependencies_eslint_config_next",
"community": 50,
"community_name": "devDependencies",
"norm_label": "eslint-config-next"
},
{
"label": "jsdom",
"file_type": "code",
@ -37646,6 +37635,17 @@
"community_name": "devDependencies",
"norm_label": "@types/node"
},
{
"label": "@types/react-dom",
"file_type": "code",
"source_file": "frontend/application/package.json",
"source_location": "L27",
"_origin": "ast",
"id": "frontend_application_package_devdependencies_types_react_dom",
"community": 50,
"community_name": "devDependencies",
"norm_label": "@types/react-dom"
},
{
"label": "@vitejs/plugin-react",
"file_type": "code",
@ -37657,17 +37657,6 @@
"community_name": "devDependencies",
"norm_label": "@vitejs/plugin-react"
},
{
"label": "eslint-config-next",
"file_type": "concept",
"source_file": "frontend/application/package.json",
"source_location": "L30",
"_origin": "ast",
"id": "eslint_config_next",
"community": 50,
"community_name": "devDependencies",
"norm_label": "eslint-config-next"
},
{
"label": "eslint",
"file_type": "concept",
@ -37712,6 +37701,17 @@
"community_name": "devDependencies",
"norm_label": "@types/node"
},
{
"label": "@types/react-dom",
"file_type": "concept",
"source_file": "frontend/application/package.json",
"source_location": "L27",
"_origin": "ast",
"id": "frontend_application_package_json_types_react_dom",
"community": 50,
"community_name": "devDependencies",
"norm_label": "@types/react-dom"
},
{
"label": "@vitejs/plugin-react",
"file_type": "concept",
@ -44808,15 +44808,15 @@
"norm_label": "devdependencies"
},
{
"label": "@eslint/eslintrc",
"label": "eslint",
"file_type": "code",
"source_file": "backend/package.json",
"source_location": "L48",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_devdependencies_eslint_eslintrc",
"id": "backend_package_devdependencies_eslint",
"community": 9,
"community_name": "devDependencies",
"norm_label": "@eslint/eslintrc"
"norm_label": "eslint"
},
{
"label": "@types/bcryptjs",
@ -44851,6 +44851,17 @@
"community_name": "devDependencies",
"norm_label": "typescript"
},
{
"label": "eslint",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L63",
"_origin": "ast",
"id": "backend_package_json_eslint",
"community": 9,
"community_name": "devDependencies",
"norm_label": "eslint"
},
{
"label": "@types/node",
"file_type": "concept",
@ -44873,17 +44884,6 @@
"community_name": "devDependencies",
"norm_label": "typescript"
},
{
"label": "@eslint/eslintrc",
"file_type": "concept",
"source_file": "backend/package.json",
"source_location": "L48",
"_origin": "ast",
"id": "eslint_eslintrc",
"community": 9,
"community_name": "devDependencies",
"norm_label": "@eslint/eslintrc"
},
{
"label": "@types/bcryptjs",
"file_type": "concept",
@ -50358,7 +50358,7 @@
"confidence": "EXTRACTED",
"confidence_score": 1.0,
"source_file": "frontend/application/components/Header.tsx",
"source_location": "L259",
"source_location": "L261",
"weight": 1.0,
"_origin": "ast",
"source": "frontend_application_components_header_header",
@ -133200,5 +133200,5 @@
}
],
"hyperedges": [],
"built_at_commit": "6e23269a5c23f29938cec91683f22a16c26991c6"
"built_at_commit": "63e10449ad26c4468ba61be6d6202ac36477191f"
}

File diff suppressed because it is too large Load Diff