11 Commits
Author SHA1 Message Date
evandro 869800d9c4 docs(readme): documentar testes, CI e estado atual do repositório 2026-10-10 04:20:33 -03:00
evandro 30d7ef701f fix: cache JSON concorrente, validação do sync e timeout nas chamadas ao Open Food Facts
- JsonCacheManager: a leitura inicial concorrente carregava o arquivo duas
  vezes e a segunda descartava as alterações da primeira; gravações
  simultâneas escreviam no mesmo arquivo. Agora a leitura é compartilhada
  e a gravação é enfileirada, via arquivo temporário + rename.
- POST /api/cache/sync: aceitava qualquer objeto e usava code como chave
  do cache (inclusive ausente ou não numérico); agora só grava produtos
  com code numérico e conta os demais em failed. JSON malformado responde
  400 em vez de 500.
- GET /api/products/[barcode]: resposta da API sem product virava 200
  com corpo vazio; agora responde 404.
- Chamadas ao Open Food Facts (busca e produto) passam a ter timeout de
  15 s e o User-Agent vem de um único lugar (lib/offSearch).
2026-10-10 04:18:59 -03:00
evandro 5ee5dcd893 fix(a11y): nomes acessíveis em busca, filtros e paginação
- campos de busca (SearchBar e Hero) só tinham placeholder
- botões só com ícone (buscar, voltar, primeira/anterior/próxima/última)
- filtros de Nutri-Score (letras a-e) e chip de alérgenos expõem
  aria-pressed; página atual da paginação usa aria-current
2026-10-10 04:17:24 -03:00
evandro 3d59903114 perf: remover polling de storage-stats e trabalho repetido na busca do cache
- useStorageMonitor: o efeito com setInterval de 10 s chamava
  /api/storage-stats em toda aba aberta só para escrever no console
  (nenhum estado é atualizado); o servidor faz fs.stat e conta as
  chaves do cache a cada chamada. A busca inicial de estatísticas
  continua.
- JsonCacheManager.searchProducts: convertToAPIProduct rodava duas vezes
  por produto (filtro e map) e a relevância era recalculada, com
  toLowerCase, a cada comparação do sort; agora é uma vez por produto.
2026-10-10 04:16:34 -03:00
evandro a9ab66e26f chore: remover código morto e artefatos, adicionar CI e script typecheck
- componentes sem nenhuma importação (card, items, DeleteButton, IdInput,
  NutriScoreBadge, NutritionBar, NutritionChart, PageTitle, PersuasiveCTA,
  landing/SearchBar), imports e variável não usados (avisos do lint)
- sw.js na raiz: não é referenciado e carrega script de terceiros
  (fenoofaussut.net)
- bun.lock (o deploy e o README usam pnpm), graphify-out/ e os bancos
  SQLite versionados em prisma/prisma (pnpm db:push recria o banco)
- devDependency depcheck sem uso
- .gitignore: *.sqlite, *.sqlite-journal, graphify-out/
- script typecheck e workflow do GitHub Actions (lint, typecheck, test, build)
2026-10-10 04:16:04 -03:00
evandro bf688257ef refactor(api): extrair montagem e paginação da busca para lib/offSearch
GET /api/search passa de CC 41 para <= 10. Testes de caracterização
(sem rede: fetch e cache JSON temporário) cobrem validação, filtros,
ordenação, paginação, modo cache-only e erros.

Também: parameter property de NutriScanError virou campo explícito e
imports só de tipo usam import type, para o type stripping nativo do
Node; o script de teste não usa mais --experimental-transform-types
(removida no Node 26).
2026-10-10 04:14:48 -03:00
Evandro Fonseca Junior fc7243e5f8 Merge pull request #1 from evandrodevbr/codex/review-2026-09-30-049051
fix: normalize nutrition units and retain zero-valued nutrients
2026-09-30 23:02:14 -03:00
Evandro Fonseca Junior fa07ba8910 fix: normalize nutrition units and retain zero-valued nutrients 2026-09-30 17:13:27 -03:00
Evandro Fonseca Junior f037001339 docs: reescrever README com versões reais e setup verificado
- versões corrigidas conforme package.json e lockfile: Next.js 15 (era 14.2.18),
  React 19 (era 18.3.1), Prisma 6 (era 5.22.0), TypeScript 5.9, Tailwind 3.4.19
- badge de issues, badge de feature e links de clone deixam de apontar para o
  repositório antigo lista-compras
- setup testado na prática: "pnpm db:push" no lugar de "pnpm db:migrate" (o
  repositório não tem migrations, o comando não criava tabela alguma) e
  arquivo ".env" no lugar de ".env.local" (a CLI do Prisma só lê .env)
- README reescrito no padrão do perfil: sobre, como funciona, stack, requisitos,
  início rápido, uso, API com os parâmetros que existem de fato, produção,
  deploy, estrutura, verificação medida e limitações conhecidas
- removidas alegações não sustentadas: 218 produtos no cache (são 232),
  First Load JS de ~87 kB (medido: 102 kB), disponibilidade 24/7 e "12 opções
  de ordenação" como se todas funcionassem
- descreve o estado real: sem testes automatizados e sem CI, busca textual
  dependente do endpoint legado do Open Food Facts (503 na verificação),
  filtros avançados que não chegam à API e ordenação que cobre quatro critérios
2026-09-14 08:26:26 -03:00
Evandro Fonseca Junior 7d4efce025 chore: remover arquivos acidentais do repositório
- null: continha apenas uma mensagem de erro do PowerShell sobre um arquivo
  de configuração local inexistente
- design-handoff.tar.gz: continha apenas o texto "not found." (8 bytes)

Nenhum dos dois é referenciado no código, na documentação ou nos scripts de
build e deploy.
2026-09-14 08:26:26 -03:00
Evandro Fonseca Junior 15ddbfbde9 fix(setup): corrigir nome do pacote e adicionar .env.example
- package.json: name passa de "resenhaitapoa2" para "nutriscan"
- .env.example: arquivo citado no README mas ausente do repositório.
  Documenta DATABASE_URL (obrigatória para o Prisma), o modo cache-only e a
  origem do proxy de analytics
2026-09-14 08:26:22 -03:00
146 changed files with 1525 additions and 16305 deletions

No files matched your search

+12
View File
@@ -0,0 +1,12 @@
# Banco de dados SQLite usado pelo Prisma.
# O caminho é relativo à pasta prisma/ (onde fica o schema), então este valor
# aponta para prisma/prisma/db/database.sqlite.
DATABASE_URL="file:./prisma/db/database.sqlite"
# Opcional. Quando "true", a aplicação responde apenas com o cache local
# (data/products-cache.json) e não chama a API do Open Food Facts.
# NEXT_PUBLIC_CACHE_ONLY_MODE="false"
# Opcional. Origem do proxy de analytics (Rybbit) configurado em next.config.mjs.
# Padrão quando vazio: https://analytics.evandro.dev.br/api
# NEXT_PUBLIC_RYBBIT_HOST="https://analytics.evandro.dev.br/api"
+29
View File
@@ -0,0 +1,29 @@
name: CI
on:
push:
branches: [main]
pull_request:
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-latest
env:
DATABASE_URL: file:./prisma/db/database.sqlite
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
with:
version: 10
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm typecheck
- run: pnpm test
- run: pnpm build
+6 -1
View File
@@ -171,4 +171,9 @@ dist
.pnp.*
.env*
!.env.example
!.env.example
# Banco SQLite local (criado por `pnpm db:push`) e saída de ferramentas
*.sqlite
*.sqlite-journal
data/*.tmp
graphify-out/
+184 -480
View File
@@ -1,539 +1,243 @@
# NutriScan
<div align="center">
**Consulta nutricional de produtos de supermercado: busca por nome ou código de barras na base colaborativa do Open Food Facts, mostra Nutri-Score e grau de processamento (NOVA) e organiza listas de compras, com cache local para continuar funcionando sem internet.**
![NutriScan Logo](./public/apple-touch-icon.png)
![CI](https://github.com/evandrodevbr/nutriscan/actions/workflows/ci.yml/badge.svg)
![Next.js](https://img.shields.io/badge/Next.js-15-black?logo=nextdotjs&logoColor=white)
![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black)
![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript&logoColor=white)
![Prisma](https://img.shields.io/badge/Prisma-6-2D3748?logo=prisma&logoColor=white)
![SQLite](https://img.shields.io/badge/SQLite-3-003B57?logo=sqlite&logoColor=white)
![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-3.4-06B6D4?logo=tailwindcss&logoColor=white)
![Node](https://img.shields.io/badge/Node-%3E%3D18.18-5FA04E?logo=nodedotjs&logoColor=white)
![Licença](https://img.shields.io/badge/licen%C3%A7a-uso%20pessoal-lightgrey)
**Plataforma completa de informações nutricionais alimentares**
Demonstração publicada pelo autor: <https://nutriscan.evandro.dev.br>
_Descubra o que a comunidade alimentar sabe sobre seus alimentos_
## Sobre
[![Next.js](https://img.shields.io/badge/Next.js-14.2.18-black?style=for-the-badge&logo=next.js&logoColor=white)](https://nextjs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.7.2-blue?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![Prisma](https://img.shields.io/badge/Prisma-5.22.0-2D3748?style=for-the-badge&logo=prisma&logoColor=white)](https://www.prisma.io/)
[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-3.4.15-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)](https://tailwindcss.com/)
[![Open Food Facts](https://img.shields.io/badge/Open_Food_Facts-API-4CAF50?style=for-the-badge&logo=openfoodfacts&logoColor=white)](https://world.openfoodfacts.org/)
Saber o que um produto industrializado tem de verdade exige consultar bases públicas e cruzar informação espalhada: nota Nutri-Score, grau de processamento, alérgenos, aditivos e tabela nutricional. O NutriScan junta isso em uma interface só.
[![Live Demo](https://img.shields.io/badge/Live_Demo-00B37E?style=for-the-badge&logo=vercel&logoColor=white)](https://nutriscan.evandro.dev.br)
[![Report Bug](https://img.shields.io/badge/Report_Bug-E62117?style=for-the-badge&logo=github&logoColor=white)](https://github.com/evandrodevbr/lista-compras/issues)
[![Request Feature](https://img.shields.io/badge/Request_Feature-2EA043?style=for-the-badge&logo=github&logoColor=white)](https://github.com/evandrodevbr/lista-compras/issues)
A aplicação consulta a base do Open Food Facts (mais de 2 milhões de produtos), aceita busca por texto ou por código de barras (8 a 13 dígitos, com detecção automática do tipo) e exibe Nutri-Score e grau de processamento NOVA de cada produto. O painel de filtros avançados oferece classificação nutricional, categorias, marcas, alérgenos, aditivos e faixas de valores nutricionais, com 12 opções de ordenação. Além da consulta, mantém listas de compras persistidas em SQLite.
</div>
O ponto de arquitetura que diferencia o projeto é o cache em duas camadas: um arquivo JSON no servidor, versionado no repositório, com os produtos já vistos, e um cache no `localStorage` do navegador. Com o modo cache-only ligado, a aplicação responde apenas com o cache local, sem chamar a API externa.
## 📋 Índice
## Como funciona
- [Sobre o Projeto](#-sobre-o-projeto)
- [Demonstração Visual](#-demonstração-visual)
- [Funcionalidades](#-funcionalidades)
- [Stack Tecnológica](#-stack-tecnológica)
- [Arquitetura](#-arquitetura)
- [Instalação e Setup](#-instalação-e-setup)
- [API e Integrações](#-api-e-integrações)
- [Database Schema](#-database-schema)
- [Performance e Otimizações](#-performance-e-otimizações)
- [Deployment](#-deployment)
- [Scripts Disponíveis](#-scripts-disponíveis)
- [Contribuindo](#-contribuindo)
- [Licença](#-licença)
- [Contato](#-contato)
- [Agradecimentos](#-agradecimentos)
```
navegador
│
├─ páginas Next.js (App Router, Server Components + Client Components)
│
├─ /api/search ──────────────▶ data/products-cache.json (cache do servidor, 232 produtos)
│ └─ se faltam resultados ─▶ Open Food Facts (world.openfoodfacts.org/cgi/search.pl)
├─ /api/products/[barcode] ──▶ cache JSON ─▶ Open Food Facts (api/v2/product/{code}.json)
│ └─ produto novo é gravado no cache JSON
├─ /api/location ────────────▶ headers do proxy ou api.ipify.org (país do usuário)
└─ /api/storage-stats ───────▶ estatísticas do cache JSON
## 🚀 Sobre o Projeto
listas de compras: componentes ─▶ Server Actions (app/actions.ts) ─▶ Prisma ─▶ SQLite
cache do cliente: resultados de busca e filtros no localStorage (TTL configurável)
```
**NutriScan** é uma plataforma web moderna que democratiza o acesso a informações nutricionais transparentes e confiáveis. Desenvolvida com foco na experiência do usuário e performance, a aplicação conecta consumidores conscientes à maior base de dados colaborativa de alimentos do mundo.
- Produto não encontrado no cache JSON é buscado na API e salvo no cache, o que aumenta o acervo offline a cada uso.
- A rota `/api/search` pagina em blocos de 1000 resultados na API externa, com pausa de 200 ms entre requisições.
- Não há autenticação nem multiusuário: cada lista de compras é identificada por um id na URL.
### 🎯 Missão
## Stack
Empoderar usuários com dados nutricionais precisos e abrangentes para tomada de decisões alimentares mais conscientes através de uma plataforma intuitiva, rápida e confiável.
| Camada | Escolha |
|---|---|
| Framework | Next.js 15 (App Router, Server Actions, Route Handlers) |
| UI | React 19, shadcn/ui sobre Radix UI, Tailwind CSS 3.4, Framer Motion 11, lucide-react 0.460 |
| Tema | next-themes 0.4 (claro e escuro, persistido) |
| Linguagem | TypeScript 5.9 em modo `strict` |
| Listas de compras | SQLite com Prisma 6 (`prisma/schema.prisma`) |
| Dados de produtos | API pública do Open Food Facts + cache JSON em `data/` |
| Cache do cliente | `localStorage`, com modo cache-only |
| Pacotes | pnpm (lockfile versionado) |
| Deploy | nixpacks (`nixpacks.toml`) e Dokploy (`dokploy.yaml`) |
### ⭐ Diferenciais
## Requisitos
- **Dados Colaborativos**: Acesso a milhões de produtos da maior base de dados open source do mundo
- **Filtros Avançados**: Sistema sofisticado de busca e filtros para descoberta precisa de produtos
- **Classificações de Saúde**: Nutri-Score e NOVA group para avaliação rápida da qualidade
- **Atualizações em Tempo Real**: Sincronização de dados ao vivo e resultados instantâneos
- **Arquitetura Moderna**: Desenvolvida com tecnologias de ponta e foco em performance
- Node.js `>=18.18` (o deploy fixa Node 18; o build foi verificado em Node 24.20.0)
- pnpm 10 ou superior (o deploy fixa 10.34.5; a instalação foi verificada com pnpm 12.4.1 e a resolução de dependências foi verificada com pnpm 10.34.5)
- Para rodar os testes: Node.js `>=22.15` (verificado em 26.7.0)
- Nenhum serviço externo é obrigatório para subir a aplicação: sem internet ela responde pelo cache local
### 📊 Estatísticas
## Início rápido
| Métrica | Valor |
| ------------------- | ----- |
| Produtos no banco | 2M+ |
| Países cobertos | 100+ |
| Disponibilidade | 24/7 |
| Dados colaborativos | Sim |
```bash
git clone https://github.com/evandrodevbr/nutriscan.git
cd nutriscan
## 📱 Demonstração Visual
pnpm install # o postinstall roda `prisma generate`
cp .env.example .env
pnpm db:push # cria as tabelas Lista e Produtos no SQLite
pnpm dev # http://localhost:3000
```
> **Nota**: Screenshots serão adicionados em breve mostrando as principais funcionalidades da aplicação.
Duas pegadinhas que quebram a primeira execução e estão resolvidas acima:
### Principais Telas
- O arquivo de ambiente precisa se chamar `.env`, não `.env.local`: a CLI do Prisma (`prisma generate`, `prisma db push`) só lê `.env`. O Next.js lê os dois.
- `pnpm db:migrate` roda `prisma migrate deploy` e não cria nada aqui, porque o repositório não tem a pasta `prisma/migrations`. Quem cria o schema é `pnpm db:push`.
- **Página Inicial**: Interface de busca com hero section e barra de pesquisa
- **Resultados**: Lista de produtos com filtros avançados e ordenação
- **Detalhes do Produto**: Informações nutricionais completas e classificações
- **Lista de Compras**: Gerenciamento de produtos com quantidades e status
- **Modos de Tema**: Visualização em tema claro e escuro
Com o servidor no ar:
## ✨ Funcionalidades
```bash
curl -s "http://localhost:3000/api/search?q=bis&cache_only=true&page_size=5"
curl -s http://localhost:3000/api/storage-stats
```
### 🔍 Sistema de Busca Inteligente
## Uso
O NutriScan oferece múltiplas formas de encontrar produtos alimentícios:
| Rota | O que é |
|---|---|
| `/` | Página inicial com busca por nome ou código de barras |
| `/resultados?q=<termo>` | Resultados com filtros, ordenação e paginação |
| `/produto/<barcode>` | Detalhe do produto: Nutri-Score, grupo NOVA, composição por 100 g e lista de ingredientes |
| `/lista/<id>` | Lista de compras: adicionar item com quantidade e unidade, marcar como comprado, remover |
| `/sobre` | Página institucional do projeto |
| `/robots.txt`, `/sitemap.xml` | Gerados pelo Next.js |
- **Busca por Código de Barras**: Reconhecimento automático de códigos de 8-13 dígitos
- **Busca por Nome/Marca**: Pesquisa textual inteligente com sugestões
- **Detecção Automática**: Sistema que identifica o tipo de busca automaticamente
- **Geolocalização**: Priorização de produtos locais baseada na localização do usuário
- **API Proxy**: Chamadas seguras através de rotas Next.js para evitar problemas de CORS
## API
### 💾 Sistema de Cache Avançado
Todas as rotas ficam em `app/api` e são Route Handlers do Next.js.
Sistema multi-camada de cache para performance otimizada:
| Rota | Método | O que faz |
|---|---|---|
| `/api/search` | GET | Busca produtos no cache JSON e, se faltar, no Open Food Facts |
| `/api/products/[barcode]` | GET | Busca um produto pelo código de barras (cache primeiro, depois API) |
| `/api/location` | GET | País estimado a partir do IP (`x-forwarded-for`, `x-real-ip` ou api.ipify.org) |
| `/api/cache/sync` | POST | Grava um lote de produtos no cache JSON. Corpo: `{ "products": [...] }`; itens sem `code` numérico são ignorados e contados em `failed` |
| `/api/storage-stats` | GET | Total de produtos, tamanho do arquivo e data da última atualização do cache |
- **Cache localStorage**: Armazenamento local com TTL configurável
- **Cache de Buscas**: Armazenamento completo de buscas com filtros aplicados
- **Cache JSON**: 218 produtos pré-carregados para uso offline
- **Modo Cache-Only**: Funcionamento completo sem conexão com internet
- **Sincronização Inteligente**: Atualização automática de dados quando online
- **Estatísticas de Storage**: Monitoramento de uso de armazenamento
Parâmetros de `/api/search`:
### 🎛️ Filtros e Ordenação
| Parâmetro | Valores | Observação |
|---|---|---|
| `q` | texto | Obrigatório; sem ele a rota responde 400 |
| `page`, `page_size` | inteiros `>= 1` | Padrão 1 e 20; valores inválidos respondem 400 |
| `cache_only` | `true` | Responde só com o cache local, sem chamar a API externa |
| `country` | código do país | Enviado como `countries_tags_en` |
| `countries`, `categories`, `brands` | tags | Filtros repassados como `countries_tags`, `categories_tags`, `brands_tags` |
| `nutrition_grades`, `nova_groups` | `a` a `e`, `1` a `4` | Filtros de classificação |
| `allergens`, `exclude_allergens`, `additives`, `exclude_additives`, `no_additives` | tags, `true` | Filtros de composição |
| `energy_min`, `energy_max`, `fat_min`, `fat_max`, `carbohydrates_min`, `carbohydrates_max`, `proteins_min`, `proteins_max`, `sugars_min`, `sugars_max`, `fiber_min`, `fiber_max`, `sodium_min`, `sodium_max` | número (por 100 g) | Faixas nutricionais |
| `sort_by` | `nutrition_grade`, `name`, `brand`, `energy`, `fat`, `sugars` | Ordenação; o padrão é `popularity` |
| `sort_order` | `asc`, `desc` | Padrão `asc` |
Sistema robusto de filtros para descoberta precisa:
No modo `cache_only` a busca considera apenas texto (nome, marca, categoria) e país; os demais filtros só são repassados para o Open Food Facts nas buscas online.
#### Classificações de Saúde
Exemplo de resposta de `/api/search`:
- **Nutri-Score**: Filtro por classificação A-E (muito bom a muito ruim)
- **NOVA Group**: Filtro por nível de processamento 1-4 (não processado a ultraprocessado)
```json
{
"products": [{ "code": "7622210575975", "product_name": "Bis", "brands": "Lacta" }],
"count": 5,
"page": 1,
"page_size": 5,
"fromCache": true,
"fromAPI": false,
"cacheStats": { "localProducts": 5, "apiProducts": 0, "newProducts": 0, "totalReturned": 5 }
}
```
#### Filtros de Produto
## Produção
- **Categorias**: Filtro por tipo de alimento (bebidas, laticínios, snacks, etc.)
- **Marcas**: Filtro por fabricante
- **Alérgenos**: Identificação e filtro por substâncias alergênicas
- **Aditivos**: Filtro por aditivos alimentares e conservantes
```bash
pnpm build # prisma generate + next build
pnpm start # next start, porta 3000 (use -p <porta> para trocar)
```
#### Filtros Nutricionais
O `build` precisa de `DATABASE_URL` no ambiente para gerar o Prisma Client, e o `start` precisa dela para as rotas de lista de compras.
- **Ranges Personalizados**: Filtros por valores nutricionais (calorias, gorduras, açúcares, etc.)
- **12 Opções de Ordenação**: Por relevância, nutrição, nome, marca, valores nutricionais, etc.
## Deploy
### 🛒 Listas de Compras Colaborativas
O repositório traz duas configurações de build, ambas para plataformas que usam nixpacks:
Sistema completo de gerenciamento de compras:
- `nixpacks.toml`: Node 18 e pnpm 10.34.5, instala com `--no-frozen-lockfile`, roda `prisma generate`, `prisma db push --accept-data-loss` e o build, com `DATABASE_URL=file:./db/database.sqlite`. O start é `pnpm start` com a mesma variável.
- `dokploy.yaml`: repete os passos de instalação (`pnpm install --no-frozen-lockfile`), geração do Prisma Client e build.
- **Múltiplas Listas**: Criação e gerenciamento de várias listas de compras
- **Produtos Detalhados**: Adição com quantidade, unidade e observações
- **Status de Compra**: Marcação de itens como comprados
- **Sincronização**: Persistência via Prisma + SQLite
- **Compartilhamento**: Compartilhamento de listas via ID único
Como o `DATABASE_URL` do deploy aponta para `file:./db/database.sqlite` e o caminho relativo do SQLite é resolvido a partir da pasta `prisma/`, o banco de produção fica em `prisma/db/database.sqlite` no contêiner, separado do arquivo versionado no repositório.
### 🎨 Interface e Experiência do Usuário
Design moderno e acessível:
- **Design Responsivo**: Mobile-first com adaptação para todos os dispositivos
- **Temas**: Modo claro e escuro com persistência de preferência
- **Animações**: Transições suaves com Framer Motion
- **Acessibilidade**: Componentes Radix UI com suporte completo a leitores de tela
- **Estados de Loading**: Skeletons e indicadores de carregamento
- **Paginação Otimizada**: Carregamento eficiente de grandes listas
- **Imagens Otimizadas**: Lazy loading e otimização automática
## 🛠 Stack Tecnológica
### Framework Principal
- **[Next.js 14.2.18](https://nextjs.org/)** - React framework com App Router e Server Actions
- **[TypeScript 5.7.2](https://www.typescriptlang.org/)** - JavaScript tipado para maior confiabilidade
- **[React 18.3.1](https://react.dev/)** - Biblioteca de interface moderna com recursos concorrentes
### Banco de Dados e ORM
- **[Prisma 5.22.0](https://www.prisma.io/)** - ORM type-safe para gerenciamento de dados
- **[SQLite](https://www.sqlite.org/)** - Banco de dados leve e serverless
### Estilização e UI
- **[Tailwind CSS 3.4.15](https://tailwindcss.com/)** - Framework CSS utility-first
- **[shadcn/ui](https://ui.shadcn.com/)** - Biblioteca de componentes reutilizáveis
- **[Radix UI](https://www.radix-ui.com/)** - Primitivos acessíveis não estilizados
- **[Lucide Icons 0.460.0](https://lucide.dev/)** - Ícones bonitos e customizáveis
- **[Framer Motion 11.12.0](https://www.framer.com/motion/)** - Biblioteca de animações
### APIs Externas
- **[Open Food Facts](https://world.openfoodfacts.org/)** - Base de dados global de produtos alimentícios
- **Geolocation API** - Recomendações baseadas em localização
### Ferramentas de Desenvolvimento
- **[ESLint 8.57.1](https://eslint.org/)** - Linting e formatação de código
- **[PostCSS 8.4.49](https://postcss.org/)** - Processamento de CSS
- **[pnpm](https://pnpm.io/)** - Gerenciador de pacotes eficiente
## 🏗 Arquitetura
### Estrutura do App Router
## Estrutura do projeto
```
app/
├── actions.ts # Server Actions para mutações de dados
├── api/ # Rotas de API para proxies de serviços externos
│ ├── cache/sync/ # Sincronização de cache
│ ├── location/ # Serviços de geolocalização
│ ├── products/[barcode]/ # Proxy de busca de produto
│ ├── search/ # Proxy de busca Open Food Facts
│ └── storage-stats/ # Estatísticas de armazenamento
├── components/ # Componentes específicos de funcionalidades
│ ├── landing/ # Seções da página inicial
│ └── [componentes diversos] # Componentes reutilizáveis
├── lista/[id]/ # Páginas de lista de compras
├── produto/[barcode]/ # Páginas de detalhes do produto
├── resultados/ # Página de resultados de busca
└── layout.tsx # Layout raiz
├── page.tsx página inicial (hero, recursos, como funciona, doação)
├── sobre/ página institucional
├── resultados/ busca com filtros, ordenação e paginação
├── produto/[barcode]/ detalhe do produto
├── lista/[id]/ lista de compras
├── api/ search, products/[barcode], location, cache/sync, storage-stats
├── actions.ts Server Actions das listas (criar, listar, marcar, remover)
├── components/ componentes de tela (landing/, cards, filtros, paginação)
├── layout.tsx layout raiz: fontes, metadados, analytics
├── robots.ts, sitemap.ts metadados de indexação
├── globals.css estilos globais e tokens de tema
├── fonts/ fontes Geist
hooks/ busca, filtros, cache, geolocalização e monitor de storage
lib/
├── openFoodFactsApi.ts cliente da API do Open Food Facts e ordenação
├── jsonCacheManager.ts cache JSON do servidor (data/products-cache.json)
├── offSearch.ts montagem e paginação das buscas no Open Food Facts
├── cacheManager.ts cache de buscas no localStorage
├── geolocation.ts detecção de país do usuário
├── searchUtils.ts ordenação por relevância
├── types.ts tipos compartilhados
└── prisma.ts singleton do Prisma Client
components/ui/ componentes shadcn/ui (button, dialog, select, sheet, ...)
prisma/schema.prisma modelos Lista e Produtos
tests/ testes (node:test) e helper de resolução de módulos
.github/workflows/ci.yml CI: lint, typecheck, testes e build
data/products-cache.json cache inicial com 232 produtos
docs/ documentação interna
nixpacks.toml, dokploy.yaml configuração de deploy
```
### Fluxo de Dados
## Testes e desenvolvimento
1. **Requisições de Busca**: Entrada do usuário → Rota de API → API Open Food Facts → Resposta
2. **Gerenciamento de Listas**: Ações do usuário → Server Actions → Prisma → Banco de dados
3. **Atualizações em Tempo Real**: Server Actions → Banco de dados → Revalidação → Atualização da UI
| Comando | O que faz |
|---|---|
| `pnpm test` | Testes com o runner nativo do Node (`node:test`), sem framework adicional |
| `pnpm lint` | ESLint via `next lint` |
| `pnpm typecheck` | `tsc --noEmit` |
| `pnpm build` | `prisma generate` + `next build` |
### Sistema de Cache
Os testes não acessam a rede: `fetch` é substituído por um mock e o cache JSON do servidor aponta para uma pasta temporária, então `data/products-cache.json` não é alterado. Eles cobrem a normalização de energia e nutrientes, a ordenação, a montagem das requisições ao Open Food Facts (`lib/offSearch.ts`), as rotas `/api/search`, `/api/products/[barcode]` e `/api/cache/sync` e a gravação concorrente do cache. O código-fonte TypeScript é executado direto pelo Node (type stripping), por isso `pnpm test` exige Node.js 22.15 ou superior; o helper `tests/helpers/register.mjs` resolve o alias `@/` e os imports sem extensão.
```mermaid
graph TD
A[Usuário] --> B[Interface]
B --> C{Cache Local?}
C -->|Sim| D[Retornar Dados]
C -->|Não| E[API Route]
E --> F[Open Food Facts API]
F --> G[Salvar no Cache]
G --> D
```
O workflow `.github/workflows/ci.yml` roda lint, typecheck, testes e build em cada push na `main` e em pull requests, com Node 22 e pnpm 10.
## 🚦 Instalação e Setup
Última execução local (Node 26.7.0, pnpm 12.8.1): `pnpm test`, `pnpm typecheck`, `pnpm lint` e `pnpm build` terminam com sucesso; `pnpm start -p 3111` respondeu 200 em `/`, `/lista/<id>`, `/api/search?q=bis&cache_only=true&page_size=5`, `/api/storage-stats` e `/api/products/7622210575975?cache_only=true`, e 400 em `/api/search` sem `q`, `/api/products/123` e `POST /api/cache/sync` com corpo inválido.
### Pré-requisitos
## Estado atual e limitações
- **Node.js** 18.0 ou superior
- **pnpm** 8.0 ou superior (gerenciador de pacotes recomendado)
- A busca textual depende do endpoint legado `cgi/search.pl` do Open Food Facts, que respondeu HTTP 503 em 14/09/2026. Na prática, buscar por nome retorna lista vazia, com a rota respondendo 200 e `count: 0`, sem derrubar a aplicação. A consulta por código de barras continua funcionando pelo endpoint `api/v2/product`.
- O painel de filtros avançados da página de resultados guarda as escolhas na chave do cache, mas a busca enviada para `/api/search` leva apenas texto, país e paginação. Hoje o que realmente filtra a lista são os atalhos de classificação Nutri-Score e o botão de produtos sem alérgenos.
- A ordenação implementada em `lib/openFoodFactsApi.ts` cobre quatro critérios (relevância, Nutri-Score, energia e nome). As demais opções do seletor caem no caso padrão da função e não reordenam o resultado.
- O servidor grava em `data/products-cache.json`, que é versionado. Usar a aplicação altera o conteúdo do arquivo no diretório de trabalho.
- Metadados, Open Graph e User-Agent (`lib/offSearch.ts`, `lib/openFoodFactsApi.ts`, `app/api/location/route.ts`) apontam para `nutriscan.com.br`, domínio que não responde; a instância publicada está em `nutriscan.evandro.dev.br`, que também é a URL do `sitemap.xml` e do `robots.txt`.
- O repositório não traz banco SQLite: é necessário rodar `pnpm db:push` antes de usar as listas.
- `pnpm db:migrate` existe no `package.json` mas não tem migrations para aplicar no repositório.
- O analytics é servido via proxy em `/analytics/*` para o Rybbit configurado em `NEXT_PUBLIC_RYBBIT_HOST`; sem esse serviço no ar, o script falha silenciosamente no cliente.
- A página de lista de compras renderiza para qualquer id, mesmo sem registro no banco, porque `verificarLista` retorna sucesso quando a lista não existe.
### Instalação Passo a Passo
## Documentação
1. **Clone o repositório**
| Documento | Conteúdo |
|---|---|
| [`docs/openFoodFacts.md`](docs/openFoodFacts.md) | Anotações sobre a API do Open Food Facts |
| [`docs/logo-prompts.md`](docs/logo-prompts.md) | Prompts usados na criação das logos |
| [`docs/resedesign/`](docs/resedesign) | Referência visual do redesign |
| [`prisma/schema.prisma`](prisma/schema.prisma) | Modelo de dados das listas |
```bash
git clone https://github.com/evandrodevbr/lista-compras.git
cd lista-compras
```
## Licença
2. **Instale as dependências**
Licença de uso pessoal, definida em [`LICENSE`](LICENSE): é permitido usar em máquina local, estudar o código e rodar para desenvolvimento. Não é permitido deploy público, uso comercial, redistribuição nem obras derivadas para distribuição. A instância em `nutriscan.evandro.dev.br` é do próprio autor.
```bash
pnpm install
```
Autor: Evandro, <https://evandro.dev.br> e [@evandrodevbr](https://github.com/evandrodevbr).
3. **Configure as variáveis de ambiente**
## Normalização de energia e nutrientes
```bash
cp .env.example .env.local
```
Configure as seguintes variáveis:
```env
DATABASE_URL="file:./prisma/db/database.sqlite"
NEXT_PUBLIC_SITE_URL="http://localhost:3000"
```
4. **Inicialize o banco de dados**
```bash
pnpm db:generate
pnpm db:migrate
```
5. **Inicie o servidor de desenvolvimento**
```bash
pnpm dev
```
6. **Abra seu navegador**
Navegue para [http://localhost:3000](http://localhost:3000)
### Troubleshooting
**Problema**: Erro de conexão com banco de dados
- **Solução**: Verifique se o arquivo `database.sqlite` existe em `prisma/db/`
**Problema**: Erro de build do Prisma
- **Solução**: Execute `pnpm db:generate` antes do build
**Problema**: Dependências não instaladas
- **Solução**: Use `pnpm install --no-frozen-lockfile`
## 🔌 API e Integrações
### Integração Open Food Facts
O NutriScan integra com a API Open Food Facts através de um wrapper customizado (`lib/openFoodFactsApi.ts`) que fornece:
- **Busca de Produtos**: Pesquisa por nome, marca ou categoria
- **Lookup por Código de Barras**: Busca direta usando códigos de barras
- **Filtros Avançados**: Filtros por notas nutricionais, alérgenos, aditivos e mais
- **Cache**: Estratégia de cache inteligente para melhor performance
- **Tratamento de Erros**: Tratamento abrangente de erros e mecanismos de fallback
### Endpoints Disponíveis
| Endpoint | Descrição | Método |
| ------------------------- | ----------------------------- | ------ |
| `/api/search` | Busca de produtos | GET |
| `/api/products/[barcode]` | Busca de produto específico | GET |
| `/api/location` | Serviços de geolocalização | GET |
| `/api/cache/sync` | Sincronização de cache | POST |
| `/api/storage-stats` | Estatísticas de armazenamento | GET |
### Rate Limits e Cache
- **Resultados de Busca**: Cache de 1 hora para reduzir chamadas à API
- **Detalhes de Produto**: Cache de 24 horas para produtos frequentemente acessados
- **Opções de Filtro**: Cache de 1 semana para dados estáticos como categorias e marcas
## 🗄 Database Schema
### Schema Prisma
```prisma
model Lista {
id String @id
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
produtos Produtos[]
}
model Produtos {
id Int @id @default(autoincrement())
nome String
qtd Float
tipoUN String
comprado Boolean @default(false)
listaId String @default("default")
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
lista Lista @relation(fields: [listaId], references: [id])
}
```
### Características Principais
- **Estrutura Simples**: Fácil de entender e manter
- **Listas Flexíveis**: Suporte para múltiplas listas de compras
- **Rastreamento de Produtos**: Gerenciamento de quantidade e unidade
- **Rastreamento de Status**: Status de compra para cada item
- **Timestamps**: Rastreamento automático de criação e atualização
## ⚡ Performance e Otimizações
### Estratégia de Cache Multi-Camada
1. **Cache de Busca**: Armazenamento local de resultados de busca
2. **Cache de Produtos**: Cache JSON de produtos populares
3. **Cache de Imagens**: Lazy loading e otimização automática
4. **Cache de API**: Cache de respostas da API Open Food Facts
### Otimizações de Performance
- **Lazy Loading**: Carregamento sob demanda de imagens e componentes
- **Code Splitting**: Divisão automática de código por rota
- **Otimização de Bundle**: Minificação e tree-shaking automáticos
- **Server Actions**: Atualizações de dados sem recarregamento de página
- **Image Optimization**: Otimização automática de imagens com Next.js
### Métricas de Performance
- **First Load JS**: ~87.3 kB compartilhado
- **Build Time**: Otimizado com Prisma e Next.js
- **Cache Hit Rate**: Monitorado via storage stats API
## 🚀 Deployment
### Configuração Dokploy
O projeto inclui configuração para deployment via Dokploy (`dokploy.yaml`):
```yaml
build:
pre_build:
- npm install -g pnpm@latest
- export PNPM_HOME="/root/.local/share/pnpm"
- export PATH="$PNPM_HOME:$PATH"
steps:
- name: Verify pnpm
run: which pnpm && pnpm --version
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
- name: Generate Prisma Client
run: pnpx prisma generate
- name: Build application
run: pnpm run build
```
### Configuração Nixpacks
Configuração alternativa para deployment (`nixpacks.toml`):
```toml
[phases.setup]
nixPkgs = ['nodejs_18', 'openssl']
cmds = [
'npm install -g pnpm@latest',
'npm install -g prisma'
]
[phases.install]
cmds = [
'npx pnpm install --no-frozen-lockfile',
'mkdir -p prisma',
'touch prisma/dev.db',
'chmod -R 777 prisma'
]
[phases.build]
cmds = [
'mkdir -p node_modules/.prisma',
'mkdir -p .next',
'chmod -R 777 node_modules/.prisma node_modules/.bin .next prisma',
'npx prisma generate',
'npx prisma db push --accept-data-loss',
'npx pnpm run build'
]
[start]
cmd = 'npx pnpm start'
```
### Checklist de Deployment
- [ ] Configurar variáveis de ambiente
- [ ] Executar migrações do banco de dados
- [ ] Gerar Prisma Client
- [ ] Build da aplicação
- [ ] Configurar domínio e SSL
- [ ] Testar funcionalidades principais
## 📜 Scripts Disponíveis
### Desenvolvimento
```bash
pnpm dev # Inicia servidor de desenvolvimento (http://localhost:3000)
pnpm build # Build para produção
pnpm start # Inicia servidor de produção
pnpm lint # Executa ESLint
```
### Banco de Dados
```bash
pnpm db:push # Push do schema Prisma para o banco
pnpm db:generate # Gera Prisma Client
pnpm db:migrate # Executa migrações do banco
```
### Pós-instalação
```bash
pnpm postinstall # Gera Prisma Client após instalação
```
## 🤝 Contribuindo
Agradecemos contribuições da comunidade! Aqui está como você pode ajudar:
### Para Desenvolvedores
1. **Fork o repositório**
2. **Crie uma branch de feature**
```bash
git checkout -b feature/amazing-feature
```
3. **Faça suas alterações**
4. **Commit suas alterações**
```bash
git commit -m 'Add: amazing feature'
```
5. **Push para a branch**
```bash
git push origin feature/amazing-feature
```
6. **Abra um Pull Request**
### Para Usuários Finais
- **Reportar Bugs**: Use [GitHub Issues](https://github.com/evandrodevbr/lista-compras/issues)
- **Solicitar Features**: Sugira novas funcionalidades via [GitHub Issues](https://github.com/evandrodevbr/lista-compras/issues)
- **Fornecer Feedback**: Compartilhe sua experiência e sugestões
### Guidelines de Desenvolvimento
- Siga o estilo de código existente
- Escreva mensagens de commit claras
- Adicione testes para novas funcionalidades
- Atualize documentação quando necessário
- Certifique-se de que todos os checks passem antes de submeter PR
## 📄 Licença
Este projeto está licenciado sob uma **Licença de Uso Pessoal**.
### Permissões
- ✅ Uso pessoal em localhost
- ✅ Inspeção de código e aprendizado
- ✅ Desenvolvimento e teste local
### Restrições
- ❌ Deploy público na web
- ❌ Uso comercial
- ❌ Redistribuição para terceiros
- ❌ Criação de obras derivadas para distribuição pública
Para os termos completos da licença, consulte o arquivo [LICENSE](LICENSE).
## 📫 Contato
**Autor:** Evandro
**Website:** [evandro.dev.br](https://evandro.dev.br)
**GitHub:** [@evandrodevbr](https://github.com/evandrodevbr)
**Email:** evandro@evandro.dev.br
### Links do Projeto
- **Live Demo:** [nutriscan.evandro.dev.br](https://nutriscan.evandro.dev.br)
- **Repositório:** [github.com/evandrodevbr/lista-compras](https://github.com/evandrodevbr/lista-compras)
- **Issues:** [GitHub Issues](https://github.com/evandrodevbr/lista-compras/issues)
## 🙏 Agradecimentos
- **[Open Food Facts](https://world.openfoodfacts.org/)** - Pela base de dados abrangente de alimentos
- **[shadcn/ui](https://ui.shadcn.com/)** - Pela biblioteca de componentes acessíveis
- **[Next.js Team](https://nextjs.org/)** - Pelo framework React incrível
- **[Vercel](https://vercel.com/)** - Por soluções de hosting e deployment
- **[Prisma](https://www.prisma.io/)** - Pelo excelente ORM
- **Contribuidores** - Obrigado a todos que ajudam a melhorar este projeto
---
<div align="center">
<p>Desenvolvido com ❤️ por <a href="https://evandro.dev.br">evandro.dev.br</a></p>
<p>Feito para usuários conscientes com a saúde e desenvolvedores ao redor do mundo</p>
</div>
A exibição e a ordenação de energia priorizam `energy-kcal_100g`; na ausência dele, convertem o campo em kJ para kcal usando `1 kcal = 4,184 kJ`. A página do produto usa a mesma normalização. Zero é preservado como dado válido, e valores ausentes, negativos ou não finitos não entram no cálculo. Produtos sem energia ficam no fim da ordenação nas duas direções. A linha baseada em `salt_100g` é identificada como sal. A implementação está em `lib/nutrition.ts`; os campos seguem a [documentação do Open Food Facts](https://openfoodfacts.github.io/openfoodfacts-server/api/tutorial-off-api/).
+23 -9
View File
@@ -1,26 +1,40 @@
import { NextRequest, NextResponse } from "next/server";
import { jsonCacheManager } from "@/lib/jsonCacheManager";
import type { Product } from "@/lib/openFoodFactsApi";
const INVALID_PRODUCTS = { error: "Produtos inválidos" };
/** Aceita só objetos com `code` numérico (texto de dígitos): a chave do cache não pode ser arbitrária. */
function isSyncableProduct(value: unknown): value is Product {
if (typeof value !== "object" || value === null) return false;
const code = (value as { code?: unknown }).code;
return typeof code === "string" && /^\d{1,32}$/.test(code);
}
export async function POST(request: NextRequest) {
let body: { products?: unknown };
try {
const { products } = await request.json();
body = await request.json();
} catch {
return NextResponse.json(INVALID_PRODUCTS, { status: 400 });
}
if (!products || !Array.isArray(products)) {
return NextResponse.json(
{ error: "Produtos inválidos" },
{ status: 400 }
);
try {
const products = body?.products;
if (!Array.isArray(products)) {
return NextResponse.json(INVALID_PRODUCTS, { status: 400 });
}
// Salvar produtos no cache
const result = await jsonCacheManager.saveProducts(products);
// Salvar produtos válidos no cache; os demais contam como falha
const valid = products.filter(isSyncableProduct);
const result = await jsonCacheManager.saveProducts(valid);
console.log(`[Cache Sync] ${result.saved} novos produtos salvos`);
return NextResponse.json({
success: true,
saved: result.saved,
failed: result.failed,
failed: result.failed + (products.length - valid.length),
});
} catch (error) {
console.error("Erro ao sincronizar cache:", error);
+4 -4
View File
@@ -1,7 +1,6 @@
import { NextRequest, NextResponse } from "next/server";
import { jsonCacheManager } from "@/lib/jsonCacheManager";
const USER_AGENT = "NutriScan/1.0 (https://nutriscan.com.br)";
import { OFF_TIMEOUT_MS, OFF_USER_AGENT } from "@/lib/offSearch";
export async function GET(
request: NextRequest,
@@ -55,9 +54,10 @@ export async function GET(
`https://world.openfoodfacts.org/api/v2/product/${cleanBarcode}.json`,
{
headers: {
"User-Agent": USER_AGENT,
"User-Agent": OFF_USER_AGENT,
Accept: "application/json",
},
signal: AbortSignal.timeout(OFF_TIMEOUT_MS),
}
);
@@ -70,7 +70,7 @@ export async function GET(
const data = await response.json();
if (data.status === 0) {
if (data.status === 0 || !data.product) {
return NextResponse.json(
{ error: "Produto não encontrado" },
{ status: 404 }
+91 -352
View File
@@ -1,384 +1,123 @@
import { NextRequest, NextResponse } from "next/server";
import { jsonCacheManager } from "@/lib/jsonCacheManager";
import { Product } from "@/lib/openFoodFactsApi";
import { buildOffSearchParams, fetchOffProducts, parsePagination } from "@/lib/offSearch";
import type { Product } from "@/lib/openFoodFactsApi";
import { sortByRelevance } from "@/lib/searchUtils";
const USER_AGENT = "NutriScan/1.0 (https://nutriscan.com.br)";
type LocalResults = Awaited<ReturnType<typeof jsonCacheManager.searchProducts>>;
function isCacheOnly(searchParams: URLSearchParams): boolean {
return searchParams.get("cache_only") === "true" || process.env.NEXT_PUBLIC_CACHE_ONLY_MODE === "true";
}
/** Complementa o cache com a API externa quando ele não alcança o tamanho da página. */
async function loadApiProducts(
query: string,
params: URLSearchParams,
localCount: number,
pageSize: number
): Promise<Product[]> {
if (localCount >= pageSize) return [];
console.log(`Cache JSON retornou ${localCount} produtos, buscando na API externa...`);
const fetched = await fetchOffProducts(params, pageSize - localCount);
if (fetched.length === 0) return [];
const apiProducts = sortByRelevance(fetched, query);
const saveResult = await jsonCacheManager.saveProducts(apiProducts);
console.log(`Cache JSON atualizado: ${saveResult.saved} salvos, ${saveResult.failed} falharam`);
return apiProducts;
}
function buildSearchResponse(
query: string,
localResults: LocalResults,
apiProducts: Product[],
page: number,
pageSize: number
) {
const localCodes = new Set(localResults.products.map((p) => p.code));
const newApiProducts = apiProducts.filter((p) => !localCodes.has(p.code));
const allProducts = [...localResults.products, ...newApiProducts];
const paginated = sortByRelevance(allProducts, query).slice(0, pageSize);
console.log(
`Busca finalizada: ${paginated.length} produtos (${localResults.products.length} do cache JSON, ${newApiProducts.length} novos da API)`
);
return {
products: paginated,
count: allProducts.length,
page,
page_size: pageSize,
skip: (page - 1) * pageSize,
fromCache: localResults.fromCache,
fromAPI: apiProducts.length > 0,
cacheStats: {
localProducts: localResults.products.length,
apiProducts: apiProducts.length,
newProducts: newApiProducts.length,
totalReturned: paginated.length,
},
};
}
function errorResponse(page: number, pageSize: number) {
return NextResponse.json(
{
products: [],
count: 0,
page,
page_size: pageSize,
skip: (page - 1) * pageSize,
fromCache: false,
fromAPI: false,
error: "Erro interno do servidor",
cacheStats: { localProducts: 0, apiProducts: 0, newProducts: 0, totalReturned: 0 },
},
{ status: 500 }
);
}
export async function GET(request: NextRequest) {
const searchParams = request.nextUrl.searchParams;
const query = searchParams.get("q");
const country = searchParams.get("country");
const page = searchParams.get("page") || "1";
const pageSize = searchParams.get("page_size") || "20";
const cacheOnly = searchParams.get("cache_only") === "true";
if (!query) {
return NextResponse.json(
{ error: "Query parameter is required" },
{ status: 400 }
);
return NextResponse.json({ error: "Query parameter is required" }, { status: 400 });
}
// Validar parâmetros
const pageNum = parseInt(page);
const pageSizeNum = parseInt(pageSize);
if (isNaN(pageNum) || pageNum < 1) {
return NextResponse.json(
{ error: "Invalid page parameter" },
{ status: 400 }
);
}
if (isNaN(pageSizeNum) || pageSizeNum < 1) {
return NextResponse.json(
{ error: "Invalid page_size parameter" },
{ status: 400 }
);
}
// Usar o máximo permitido pelo Open Food Facts (1000) para consultas na API
const apiPageSize = Math.max(pageSizeNum, 1000);
const params = new URLSearchParams({
search_terms: query,
page_size: apiPageSize.toString(),
page: page,
json: "true",
fields: [
"code",
"product_name",
"brands",
"categories",
"ingredients_text",
"nutriments",
"nutrition_grades",
"nova_group",
"image_url",
"image_small_url",
"image_front_url",
"image_front_small_url",
"countries",
"countries_tags",
"allergens_tags",
"additives_tags",
].join(","),
});
// Filtros básicos
if (country) {
params.append("countries_tags_en", country);
}
// Filtros de classificação nutricional
const nutritionGrades = searchParams.get("nutrition_grades");
if (nutritionGrades) {
params.append("nutrition_grades_tags", nutritionGrades);
}
const novaGroups = searchParams.get("nova_groups");
if (novaGroups) {
params.append("nova_groups", novaGroups);
}
// Filtros de categoria e marca
const categories = searchParams.get("categories");
if (categories) {
params.append("categories_tags", categories);
}
const brands = searchParams.get("brands");
if (brands) {
params.append("brands", brands);
}
// Filtros de alérgenos
const allergens = searchParams.get("allergens");
if (allergens) {
params.append("allergens_tags", allergens);
}
const excludeAllergens = searchParams.get("exclude_allergens");
if (excludeAllergens) {
params.append("exclude_allergens_tags", excludeAllergens);
}
// Filtros de aditivos
const additives = searchParams.get("additives");
if (additives) {
params.append("additives_tags", additives);
}
const excludeAdditives = searchParams.get("exclude_additives");
if (excludeAdditives) {
params.append("exclude_additives_tags", excludeAdditives);
}
const noAdditives = searchParams.get("no_additives");
if (noAdditives === "true") {
params.append("additives_tags", "without-additives");
}
// Filtros de países
const countries = searchParams.get("countries");
if (countries) {
params.append("countries_tags", countries);
}
// Filtros nutricionais (valores por 100g)
const nutritionFilters = [
"energy_min",
"energy_max",
"fat_min",
"fat_max",
"carbohydrates_min",
"carbohydrates_max",
"proteins_min",
"proteins_max",
"sugars_min",
"sugars_max",
"fiber_min",
"fiber_max",
"sodium_min",
"sodium_max",
];
nutritionFilters.forEach((filter) => {
const value = searchParams.get(filter);
if (value) {
params.append(filter, value);
}
});
// Ordenação
const sortBy = searchParams.get("sort_by");
const sortOrder = searchParams.get("sort_order") || "asc";
if (sortBy) {
let sortField = "";
switch (sortBy) {
case "nutrition_grade":
sortField = "nutrition_grades";
break;
case "name":
sortField = "product_name";
break;
case "brand":
sortField = "brands";
break;
case "energy":
sortField = "nutriments.energy_100g";
break;
case "fat":
sortField = "nutriments.fat_100g";
break;
case "sugars":
sortField = "nutriments.sugars_100g";
break;
default:
sortField = "popularity";
}
if (sortField) {
params.append("sort_by", sortField);
params.append("sort_order", sortOrder);
}
const pagination = parsePagination(searchParams);
if ("error" in pagination) {
return NextResponse.json({ error: pagination.error }, { status: 400 });
}
const { page, pageSize, pageParam } = pagination;
try {
console.log(
`[API] Iniciando busca: "${query}" (país: ${
country || "todos"
}, page_size: ${pageSizeNum})`
);
console.log(`[API] Iniciando busca: "${query}" (país: ${country || "todos"}, page_size: ${pageSize})`);
// Primeiro, buscar no cache JSON
console.log(`[API] Buscando "${query}" no cache JSON...`);
const localResults = await jsonCacheManager.searchProducts(
query,
country || undefined,
pageSizeNum
);
const localResults = await jsonCacheManager.searchProducts(query, country || undefined, pageSize);
// Se modo cache-only estiver ativo, retornar apenas resultados locais
if (cacheOnly || process.env.NEXT_PUBLIC_CACHE_ONLY_MODE === "true") {
console.log(
`[Cache-Only Mode] Retornando apenas ${localResults.products.length} produtos do cache`
);
if (isCacheOnly(searchParams)) {
console.log(`[Cache-Only Mode] Retornando apenas ${localResults.products.length} produtos do cache`);
return NextResponse.json({
products: localResults.products,
count: localResults.products.length,
page: pageNum,
page_size: pageSizeNum,
page,
page_size: pageSize,
fromCache: true,
fromAPI: false,
cacheOnly: true,
});
}
let fromAPI = false;
let apiProducts: Product[] = [];
const params = buildOffSearchParams(searchParams, query, country, pageParam);
const apiProducts = await loadApiProducts(query, params, localResults.products.length, pageSize);
// Se não encontrou resultados suficientes no cache JSON, buscar na API externa
if (localResults.products.length < pageSizeNum) {
console.log(
`Cache JSON retornou ${localResults.products.length} produtos, buscando na API externa...`
);
// Implementar busca paginada automática para page_size > 1000
const allApiProducts: Product[] = [];
const maxPerPage = 1000;
let currentApiPage = 1;
const totalNeeded = pageSizeNum - localResults.products.length;
while (allApiProducts.length < totalNeeded) {
// Atualizar parâmetros para a página atual
const currentParams = new URLSearchParams(params);
currentParams.set("page", currentApiPage.toString());
currentParams.set("page_size", maxPerPage.toString());
console.log(
`Buscando página ${currentApiPage} da API (${allApiProducts.length}/${totalNeeded} produtos obtidos)...`
);
const response = await fetch(
`https://world.openfoodfacts.org/cgi/search.pl?${currentParams.toString()}`,
{
headers: {
"User-Agent": USER_AGENT,
Accept: "application/json",
},
}
);
if (response.ok) {
const apiData = await response.json();
const pageProducts = apiData.products || [];
if (pageProducts.length === 0) {
console.log("Não há mais produtos na API");
break; // Não há mais produtos
}
allApiProducts.push(...pageProducts);
fromAPI = true;
console.log(
`Página ${currentApiPage}: ${pageProducts.length} produtos (Total: ${allApiProducts.length})`
);
// Se retornou menos que o máximo, acabaram os produtos
if (pageProducts.length < maxPerPage) {
console.log("Última página de produtos obtida");
break;
}
// Se já temos o suficiente, parar
if (allApiProducts.length >= totalNeeded) {
console.log(
`Quantidade suficiente obtida: ${allApiProducts.length}/${totalNeeded}`
);
break;
}
// Incrementar página para próxima iteração
currentApiPage++;
// Rate limiting: aguardar 200ms entre requisições
if (allApiProducts.length < totalNeeded) {
console.log("Aguardando 200ms antes da próxima requisição...");
await new Promise((resolve) => setTimeout(resolve, 200));
}
} else {
console.error(
`Erro na página ${currentApiPage}: ${response.status} ${response.statusText}`
);
break;
}
}
apiProducts = allApiProducts;
// Ordenar produtos da API por relevância
if (apiProducts.length > 0) {
console.log(
`Ordenando ${apiProducts.length} produtos da API por relevância...`
);
apiProducts = sortByRelevance(apiProducts, query);
console.log(
`Salvando ${apiProducts.length} produtos da API no cache JSON...`
);
const saveResult = await jsonCacheManager.saveProducts(apiProducts);
console.log(
`Cache JSON atualizado: ${saveResult.saved} salvos, ${saveResult.failed} falharam`
);
}
}
// Combinar resultados JSON e da API
const allProducts: Product[] = [...localResults.products];
const localProductCodes = new Set(localResults.products.map((p) => p.code));
// Adicionar apenas produtos da API que não estão no cache JSON
const newApiProducts = apiProducts.filter(
(p) => !localProductCodes.has(p.code)
);
allProducts.push(...newApiProducts);
// Reordenar a lista combinada por relevância
console.log(
`Reordenando ${allProducts.length} produtos combinados por relevância...`
);
const sortedProducts = sortByRelevance(allProducts, query);
// Limitar ao tamanho da página solicitada
const paginatedProducts = sortedProducts.slice(0, pageSizeNum);
const responseData = {
products: paginatedProducts,
count: allProducts.length,
page: pageNum,
page_size: pageSizeNum,
skip: (pageNum - 1) * pageSizeNum,
fromCache: localResults.fromCache,
fromAPI: fromAPI,
cacheStats: {
localProducts: localResults.products.length,
apiProducts: apiProducts.length,
newProducts: newApiProducts.length,
totalReturned: paginatedProducts.length,
},
};
console.log(
`Busca finalizada: ${paginatedProducts.length} produtos (${localResults.products.length} do cache JSON, ${newApiProducts.length} novos da API)`
);
return NextResponse.json(responseData);
return NextResponse.json(buildSearchResponse(query, localResults, apiProducts, page, pageSize));
} catch (error) {
console.error("[API] Erro ao buscar produtos:", error);
// Retornar resposta de erro estruturada em vez de quebrar
return NextResponse.json(
{
products: [],
count: 0,
page: pageNum,
page_size: pageSizeNum,
skip: (pageNum - 1) * pageSizeNum,
fromCache: false,
fromAPI: false,
error: "Erro interno do servidor",
cacheStats: {
localProducts: 0,
apiProducts: 0,
newProducts: 0,
totalReturned: 0,
},
},
{ status: 500 }
);
return errorResponse(page, pageSize);
}
}
-70
View File
@@ -1,70 +0,0 @@
'use client'
import { Button } from "@/components/ui/button";
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from "@/components/ui/alert-dialog";
import { deletarProduto } from "../actions";
import { useState } from "react";
import { Trash2 } from "lucide-react";
import { useRouter } from "next/navigation";
interface DeleteButtonProps {
produtoId: number;
produtoNome: string;
listaId: string;
}
export function DeleteButton({ produtoId, produtoNome, listaId }: DeleteButtonProps) {
const [isDeleting, setIsDeleting] = useState(false);
const router = useRouter();
async function handleDelete() {
try {
setIsDeleting(true);
await deletarProduto(produtoId, listaId);
router.refresh();
} finally {
setIsDeleting(false);
}
}
return (
<AlertDialog>
<AlertDialogTrigger asChild>
<Button
variant="destructive"
size="icon"
>
<Trash2 className="h-4 w-4" />
</Button>
</AlertDialogTrigger>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle>Confirmar exclusão</AlertDialogTitle>
<AlertDialogDescription>
Tem certeza que deseja excluir o produto &quot;{produtoNome}&quot;?
Esta ação não pode ser desfeita.
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel>Cancelar</AlertDialogCancel>
<AlertDialogAction
onClick={handleDelete}
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
disabled={isDeleting}
>
{isDeleting ? 'Excluindo...' : 'Excluir'}
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
);
}
-2
View File
@@ -16,7 +16,6 @@ import {
BarChart3,
} from "lucide-react";
import * as LucideIcons from "lucide-react";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Checkbox } from "@/components/ui/checkbox";
import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group";
@@ -29,7 +28,6 @@ import {
AccordionTrigger,
} from "@/components/ui/accordion";
import { Badge } from "@/components/ui/badge";
import { Separator } from "@/components/ui/separator";
import { SortDropdown } from "@/app/components/SortDropdown";
import { FilterBadges } from "@/app/components/FilterBadge";
import {
-93
View File
@@ -1,93 +0,0 @@
'use client'
import { useState } from 'react'
import { useRouter } from 'next/navigation'
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { verificarLista } from '../actions'
export function IdInput() {
const [id, setId] = useState('')
const [error, setError] = useState('')
const [loading, setLoading] = useState(false)
const router = useRouter()
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault()
setLoading(true)
setError('')
if (!id.trim()) {
setError('Digite um ID válido')
setLoading(false)
return
}
try {
const result = await verificarLista(id.trim(), true) // Forçar criação se não existir
if (result.success) {
localStorage.setItem('listaId', id.trim())
router.push(`/lista/${id.trim()}`)
} else {
setError('Erro ao acessar/criar lista')
}
} catch {
setError('Erro ao processar solicitação')
} finally {
setLoading(false)
}
}
return (
<div
className="min-h-screen flex items-center justify-center"
style={{ background: 'var(--bg-base)' }}
>
<div
className="max-w-md w-full space-y-8 p-8 rounded-xl"
style={{
background: 'var(--bg-elevated)',
border: '1px solid var(--border-subtle)',
boxShadow: '0 8px 32px -8px rgba(30,24,16,0.10)',
}}
>
<div>
<h2
className="mt-6 text-center text-3xl font-display"
style={{ color: 'var(--fg-primary)' }}
>
Acesse sua lista
</h2>
<p
className="mt-2 text-center text-sm"
style={{ color: 'var(--fg-muted)' }}
>
Digite um ID para acessar ou criar uma nova lista
</p>
</div>
<form className="mt-8 space-y-6" onSubmit={handleSubmit}>
<div>
<Input
type="text"
required
placeholder="Digite o ID da lista"
value={id}
onChange={(e) => setId(e.target.value)}
className="appearance-none rounded-lg relative block w-full px-3 py-2"
style={{ borderColor: 'var(--border-strong)', background: 'var(--bg-surface)' }}
/>
</div>
{error && (
<p className="text-sm text-center" style={{ color: 'var(--nutri-e)' }}>{error}</p>
)}
<button
type="submit"
disabled={loading}
className="btn-accent w-full justify-center"
>
{loading ? 'Carregando...' : 'Acessar/Criar Lista'}
</button>
</form>
</div>
</div>
)
}
-1
View File
@@ -9,7 +9,6 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { Button } from "@/components/ui/button";
import { criarItens } from "../actions";
import { useTransition, useState } from 'react';
import { useRouter } from "next/navigation";
-122
View File
@@ -1,122 +0,0 @@
"use client";
import { useState } from "react";
import { cn } from "@/lib/utils";
interface NutriScoreBadgeProps {
grade: string;
className?: string;
size?: "sm" | "md" | "lg";
showTooltip?: boolean;
}
const GRADE_INFO: Record<string, { desc: string; explanation: string }> = {
a: { desc: "Muito bom", explanation: "Excelente qualidade nutricional" },
b: { desc: "Bom", explanation: "Boa qualidade nutricional" },
c: { desc: "Regular", explanation: "Qualidade nutricional moderada" },
d: { desc: "Ruim", explanation: "Qualidade nutricional baixa" },
e: { desc: "Muito ruim", explanation: "Qualidade nutricional muito baixa" },
};
const GRADE_CLASS: Record<string, string> = {
a: "grade-a", b: "grade-b", c: "grade-c", d: "grade-d", e: "grade-e",
};
const SIZE_CLASS = {
sm: "w-8 h-8 text-sm",
md: "w-14 h-14 text-xl",
lg: "w-20 h-20 text-2xl",
};
export function NutriScoreBadge({
grade,
className,
size = "md",
showTooltip = true,
}: NutriScoreBadgeProps) {
const [hover, setHover] = useState(false);
const key = grade?.toLowerCase();
const info = GRADE_INFO[key];
if (!info) return null;
return (
<div className="relative inline-block">
<div
className={cn(
"nutriscore-hero font-sans font-bold rounded-full flex items-center justify-center cursor-default",
GRADE_CLASS[key],
SIZE_CLASS[size],
className
)}
onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)}
>
{key.toUpperCase()}
</div>
{showTooltip && hover && (
<div className="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 z-50 whitespace-nowrap">
<div className="bg-[var(--fg-primary)] text-[var(--bg-base)] text-xs rounded-lg px-3 py-2 shadow-xl">
<p className="font-semibold">Nutri-Score {key.toUpperCase()}</p>
<p className="opacity-70">{info.desc}</p>
<p className="opacity-50 mt-0.5">{info.explanation}</p>
<div className="absolute top-full left-1/2 -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-[var(--fg-primary)]" />
</div>
</div>
)}
</div>
);
}
/* ── NOVA Badge ───────────────────────────────────────────────────────────── */
interface NovaBadgeProps {
group: number;
className?: string;
size?: "sm" | "md" | "lg";
showTooltip?: boolean;
}
const NOVA_INFO: Record<number, { desc: string; explanation: string; bg: string; fg: string }> = {
1: { desc: "Não processado", explanation: "Alimentos não ou minimamente processados", bg: "#1a7a4a", fg: "#fff" },
2: { desc: "Ingrediente", explanation: "Ingredientes culinários processados", bg: "#e8c110", fg: "#1e1810" },
3: { desc: "Processado", explanation: "Alimentos processados", bg: "#e07820", fg: "#fff" },
4: { desc: "Ultraprocessado",explanation: "Alimentos ultraprocessados", bg: "#c0201a", fg: "#fff" },
};
export function NovaBadge({
group,
className,
size = "md",
showTooltip = true,
}: NovaBadgeProps) {
const [hover, setHover] = useState(false);
const info = NOVA_INFO[group];
if (!info) return null;
return (
<div className="relative inline-block">
<div
className={cn(
"nutriscore-hero font-sans font-bold rounded-full flex items-center justify-center cursor-default",
SIZE_CLASS[size],
className
)}
style={{ background: info.bg, color: info.fg, animation: "none" }}
onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)}
>
{group}
</div>
{showTooltip && hover && (
<div className="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 z-50 whitespace-nowrap">
<div className="bg-[var(--fg-primary)] text-[var(--bg-base)] text-xs rounded-lg px-3 py-2 shadow-xl">
<p className="font-semibold">NOVA {group}</p>
<p className="opacity-70">{info.desc}</p>
<p className="opacity-50 mt-0.5">{info.explanation}</p>
<div className="absolute top-full left-1/2 -translate-x-1/2 w-0 h-0 border-l-4 border-r-4 border-t-4 border-transparent border-t-[var(--fg-primary)]" />
</div>
</div>
)}
</div>
);
}
-133
View File
@@ -1,133 +0,0 @@
"use client";
import { cn } from "@/lib/utils";
interface NutritionBarProps {
label: string;
value: string;
unit?: string;
percentage?: number;
isHigh?: boolean;
isLow?: boolean;
recommended?: string;
className?: string;
}
export function NutritionBar({
label,
value,
unit = "",
percentage = 0,
isHigh = false,
isLow = false,
className,
}: NutritionBarProps) {
const barWidth = Math.min(Math.max(percentage, 2), 100);
const barColor = isHigh
? "bg-[var(--score-e)]"
: isLow
? "bg-[var(--score-a)]"
: percentage > 75
? "bg-[var(--score-d)]"
: percentage > 50
? "bg-[var(--score-c)]"
: "bg-[var(--accent)]";
const valueColor = isHigh
? "text-[var(--score-e)]"
: isLow
? "text-[var(--score-a)]"
: "text-[var(--fg-primary)]";
return (
<div className={cn("space-y-2", className)}>
<div className="flex items-baseline justify-between gap-3">
<span className="label text-[var(--fg-muted)] truncate">{label}</span>
<span className={cn("label shrink-0 font-medium", valueColor)}>
{value} {unit}
</span>
</div>
{/* Hairline track */}
<div className="w-full h-px bg-[var(--border-subtle)] relative overflow-hidden rounded-full">
<div
className={cn("h-full rounded-full transition-all duration-700", barColor)}
style={{ width: `${barWidth}%` }}
/>
</div>
</div>
);
}
interface NutritionGridProps {
nutritionData: {
energy?: string;
fat?: string;
carbohydrates?: string;
proteins?: string;
sugars?: string;
fiber?: string;
sodium?: string;
};
className?: string;
}
const REFERENCE = {
energy: 2000, fat: 65, carbohydrates: 300,
proteins: 50, sugars: 50, fiber: 25, sodium: 2.3,
};
function extractNumber(val?: string): number {
if (!val) return 0;
const m = val.match(/(\d+(?:\.\d+)?)/);
return m ? parseFloat(m[1]) : 0;
}
function pct(val: string | undefined, ref: number): number {
return (extractNumber(val) / ref) * 100;
}
export function NutritionGrid({ nutritionData, className }: NutritionGridProps) {
const items = [
{ label: "Energia", value: nutritionData.energy, unit: "kcal", ref: REFERENCE.energy },
{ label: "Gorduras", value: nutritionData.fat, unit: "g", ref: REFERENCE.fat },
{ label: "Carboidratos", value: nutritionData.carbohydrates, unit: "g", ref: REFERENCE.carbohydrates },
{ label: "Proteínas", value: nutritionData.proteins, unit: "g", ref: REFERENCE.proteins },
{ label: "Açúcares", value: nutritionData.sugars, unit: "g", ref: REFERENCE.sugars },
{ label: "Fibras", value: nutritionData.fiber, unit: "g", ref: REFERENCE.fiber },
{ label: "Sódio", value: nutritionData.sodium, unit: "g", ref: REFERENCE.sodium },
];
return (
<div className={cn("space-y-5", className)}>
{items.map((item) => {
const p = pct(item.value, item.ref);
return (
<NutritionBar
key={item.label}
label={item.label}
value={item.value || "—"}
unit={item.unit}
percentage={p}
isHigh={p > 80}
isLow={p < 20 && p > 0}
/>
);
})}
{/* Legend */}
<div className="pt-4 border-t border-[var(--border-subtle)] flex flex-wrap gap-x-6 gap-y-2">
{[
{ color: "bg-[var(--score-a)]", label: "Baixo" },
{ color: "bg-[var(--accent)]", label: "Moderado" },
{ color: "bg-[var(--score-e)]", label: "Alto" },
].map(({ color, label }) => (
<div key={label} className="flex items-center gap-2">
<div className={cn("w-2 h-2 rounded-full", color)} />
<span className="label text-[var(--fg-muted)]">{label}</span>
</div>
))}
<span className="label text-[var(--fg-faint)] ml-auto">% do VDR</span>
</div>
</div>
);
}
-299
View File
@@ -1,299 +0,0 @@
"use client";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
interface NutritionData {
energy?: number;
fat?: number;
carbohydrates?: number;
proteins?: number;
sugars?: number;
fiber?: number;
sodium?: number;
}
interface NutritionChartProps {
data: NutritionData;
className?: string;
}
export function NutritionChart({ data, className = "" }: NutritionChartProps) {
const nutritionItems = [
{
key: "energy",
label: "Energia",
value: data.energy,
unit: "kcal",
color: "bg-orange-500",
maxValue: 500,
},
{
key: "fat",
label: "Gorduras",
value: data.fat,
unit: "g",
color: "bg-red-500",
maxValue: 30,
},
{
key: "carbohydrates",
label: "Carboidratos",
value: data.carbohydrates,
unit: "g",
color: "bg-blue-500",
maxValue: 60,
},
{
key: "proteins",
label: "Proteínas",
value: data.proteins,
unit: "g",
color: "bg-green-500",
maxValue: 25,
},
{
key: "sugars",
label: "Açúcares",
value: data.sugars,
unit: "g",
color: "bg-pink-500",
maxValue: 25,
},
{
key: "fiber",
label: "Fibras",
value: data.fiber,
unit: "g",
color: "bg-purple-500",
maxValue: 10,
},
{
key: "sodium",
label: "Sódio",
value: data.sodium,
unit: "mg",
color: "bg-yellow-500",
maxValue: 2,
},
];
const getBarWidth = (value: number, maxValue: number) => {
const percentage = Math.min((value / maxValue) * 100, 100);
return `${percentage}%`;
};
const getBarColor = (value: number, maxValue: number, color: string) => {
const percentage = (value / maxValue) * 100;
if (percentage > 80) return "bg-red-500";
if (percentage > 60) return "bg-orange-500";
if (percentage > 40) return "bg-yellow-500";
return color;
};
return (
<Card className={className}>
<CardHeader>
<CardTitle className="text-lg font-semibold">
Informação Nutricional
</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
{nutritionItems.map((item) => {
if (item.value === undefined || item.value === null) {
return (
<div key={item.key} className="flex items-center justify-between">
<span className="text-sm font-medium text-muted-foreground">
{item.label}
</span>
<Badge variant="outline" className="text-xs">
N/A
</Badge>
</div>
);
}
const barWidth = getBarWidth(item.value, item.maxValue);
const barColor = getBarColor(item.value, item.maxValue, item.color);
return (
<div key={item.key} className="space-y-2">
<div className="flex items-center justify-between">
<span className="text-sm font-medium">{item.label}</span>
<div className="flex items-center gap-2">
<span className="text-sm font-semibold">
{item.value.toFixed(1)}
{item.unit}
</span>
<Badge
variant="outline"
className={`text-xs ${
item.value / item.maxValue > 0.8
? "border-red-200 text-red-700"
: item.value / item.maxValue > 0.6
? "border-orange-200 text-orange-700"
: "border-green-200 text-green-700"
}`}
>
{((item.value / item.maxValue) * 100).toFixed(0)}%
</Badge>
</div>
</div>
<div className="relative h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden">
<div
className={`h-full transition-all duration-500 ${barColor}`}
style={{ width: barWidth }}
/>
</div>
<div className="flex justify-between text-xs text-muted-foreground">
<span>0{item.unit}</span>
<span>
{item.maxValue}
{item.unit}
</span>
</div>
</div>
);
})}
</CardContent>
</Card>
);
}
interface NutritionSummaryProps {
data: NutritionData;
className?: string;
}
export function NutritionSummary({
data,
className = "",
}: NutritionSummaryProps) {
const getNutritionScore = () => {
if (!data.energy || !data.fat || !data.sugars || !data.sodium) {
return null;
}
// Cálculo simplificado do Nutri-Score
let score = 0;
// Pontos negativos
if (data.energy > 335) score += 1;
if (data.energy > 670) score += 2;
if (data.energy > 1005) score += 3;
if (data.energy > 1340) score += 4;
if (data.energy > 1675) score += 5;
if (data.energy > 2010) score += 6;
if (data.energy > 2345) score += 7;
if (data.energy > 2680) score += 8;
if (data.energy > 3015) score += 9;
if (data.energy > 3350) score += 10;
if (data.sugars > 4.5) score += 1;
if (data.sugars > 9) score += 2;
if (data.sugars > 13.5) score += 3;
if (data.sugars > 18) score += 4;
if (data.sugars > 22.5) score += 5;
if (data.sugars > 27) score += 6;
if (data.sugars > 31) score += 7;
if (data.sugars > 36) score += 8;
if (data.sugars > 40) score += 9;
if (data.sugars > 45) score += 10;
if (data.fat > 1) score += 1;
if (data.fat > 2) score += 2;
if (data.fat > 3) score += 3;
if (data.fat > 4) score += 4;
if (data.fat > 5) score += 5;
if (data.fat > 6) score += 6;
if (data.fat > 7) score += 7;
if (data.fat > 8) score += 8;
if (data.fat > 9) score += 9;
if (data.fat > 10) score += 10;
if (data.sodium > 0.3) score += 1;
if (data.sodium > 0.6) score += 2;
if (data.sodium > 0.9) score += 3;
if (data.sodium > 1.2) score += 4;
if (data.sodium > 1.5) score += 5;
if (data.sodium > 1.8) score += 6;
if (data.sodium > 2.1) score += 7;
if (data.sodium > 2.4) score += 8;
if (data.sodium > 2.7) score += 9;
if (data.sodium > 3) score += 10;
// Pontos positivos
if (data.fiber && data.fiber > 0.9) score -= 1;
if (data.fiber && data.fiber > 1.9) score -= 2;
if (data.fiber && data.fiber > 2.8) score -= 3;
if (data.fiber && data.fiber > 3.7) score -= 4;
if (data.fiber && data.fiber > 4.7) score -= 5;
if (data.proteins && data.proteins > 1.6) score -= 1;
if (data.proteins && data.proteins > 3.2) score -= 2;
if (data.proteins && data.proteins > 4.8) score -= 3;
if (data.proteins && data.proteins > 6.4) score -= 4;
if (data.proteins && data.proteins > 8) score -= 5;
// Converter para letra
if (score <= -1) return "A";
if (score <= 2) return "B";
if (score <= 10) return "C";
if (score <= 18) return "D";
return "E";
};
const nutritionScore = getNutritionScore();
return (
<div className={`space-y-3 ${className}`}>
<div className="flex items-center justify-between">
<span className="text-sm font-medium">Nutri-Score Estimado</span>
{nutritionScore && (
<Badge
className={`${
nutritionScore === "A"
? "bg-green-500 text-white"
: nutritionScore === "B"
? "bg-green-400 text-white"
: nutritionScore === "C"
? "bg-yellow-500 text-white"
: nutritionScore === "D"
? "bg-orange-500 text-white"
: "bg-red-500 text-white"
}`}
>
{nutritionScore}
</Badge>
)}
</div>
<div className="grid grid-cols-2 gap-2 text-xs">
<div className="flex justify-between">
<span>Energia:</span>
<span className="font-medium">
{data.energy?.toFixed(0) || "N/A"} kcal
</span>
</div>
<div className="flex justify-between">
<span>Gorduras:</span>
<span className="font-medium">{data.fat?.toFixed(1) || "N/A"}g</span>
</div>
<div className="flex justify-between">
<span>Carboidratos:</span>
<span className="font-medium">
{data.carbohydrates?.toFixed(1) || "N/A"}g
</span>
</div>
<div className="flex justify-between">
<span>Proteínas:</span>
<span className="font-medium">
{data.proteins?.toFixed(1) || "N/A"}g
</span>
</div>
</div>
</div>
);
}
-32
View File
@@ -1,32 +0,0 @@
'use client'
import { motion } from 'framer-motion'
export function PageTitle() {
return (
<motion.div
initial={{ opacity: 0, y: -20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5 }}
className="relative"
>
<h1 className="text-4xl md:text-5xl font-bold text-center">
<span className="relative inline-block">
<span className="bg-clip-text text-transparent bg-gradient-to-r from-primary to-secondary">
Resenha Itapoá
</span>
<motion.span
className="absolute -bottom-2 left-0 w-full h-1 bg-gradient-to-r from-primary to-secondary rounded-full"
initial={{ scaleX: 0 }}
animate={{ scaleX: 1 }}
transition={{ delay: 0.5, duration: 0.5 }}
/>
</span>
</h1>
<p className="mt-4 text-center text-muted-foreground max-w-2xl mx-auto">
Gerencie suas listas de compras de forma simples e eficiente
</p>
</motion.div>
)
}
+10
View File
@@ -126,6 +126,7 @@ export function Pagination({
size="sm"
onClick={() => onPageChange(currentPage - 1)}
disabled={!canGoPrevious}
aria-label="Página anterior"
className="h-9 w-9 p-0 flex-shrink-0"
>
<ChevronLeft className="h-4 w-4" />
@@ -141,6 +142,8 @@ export function Pagination({
variant={currentPage === page ? "default" : "outline"}
size="sm"
onClick={() => onPageChange(page as number)}
aria-label={`Página ${page}`}
aria-current={currentPage === page ? "page" : undefined}
className="h-9 w-9 p-0"
>
{page}
@@ -155,6 +158,7 @@ export function Pagination({
size="sm"
onClick={() => onPageChange(currentPage + 1)}
disabled={!canGoNext}
aria-label="Próxima página"
className="h-9 w-9 p-0 flex-shrink-0"
>
<ChevronRight className="h-4 w-4" />
@@ -230,6 +234,7 @@ export function Pagination({
size="sm"
onClick={() => onPageChange(1)}
disabled={!canGoPrevious}
aria-label="Primeira página"
className="h-8 w-8 p-0"
>
<ChevronsLeft className="h-4 w-4" />
@@ -243,6 +248,7 @@ export function Pagination({
size="sm"
onClick={() => onPageChange(currentPage - 1)}
disabled={!canGoPrevious}
aria-label="Página anterior"
className="h-8 w-8 p-0"
>
<ChevronLeft className="h-4 w-4" />
@@ -259,6 +265,8 @@ export function Pagination({
variant={currentPage === page ? "default" : "outline"}
size="sm"
onClick={() => onPageChange(page as number)}
aria-label={`Página ${page}`}
aria-current={currentPage === page ? "page" : undefined}
className="h-8 w-8 p-0"
>
{page}
@@ -274,6 +282,7 @@ export function Pagination({
size="sm"
onClick={() => onPageChange(currentPage + 1)}
disabled={!canGoNext}
aria-label="Próxima página"
className="h-8 w-8 p-0"
>
<ChevronRight className="h-4 w-4" />
@@ -287,6 +296,7 @@ export function Pagination({
size="sm"
onClick={() => onPageChange(totalPages)}
disabled={!canGoNext}
aria-label="Última página"
className="h-8 w-8 p-0"
>
<ChevronsRight className="h-4 w-4" />
+3
View File
@@ -61,6 +61,7 @@ export function SearchBar({
<input
type="text"
placeholder={placeholder}
aria-label="Buscar produto por nome ou código de barras"
value={query}
onChange={(e) => setQuery(e.target.value)}
onKeyDown={handleKey}
@@ -74,6 +75,7 @@ export function SearchBar({
<button
onClick={handleSearch}
disabled={!query.trim()}
aria-label="Buscar"
className="btn-accent h-9 px-3 py-0 text-xs disabled:opacity-40"
>
<Search className="w-3.5 h-3.5" strokeWidth={1.5} />
@@ -95,6 +97,7 @@ export function SearchBar({
<input
type="text"
placeholder={placeholder}
aria-label="Buscar produto por nome ou código de barras"
value={query}
onChange={(e) => setQuery(e.target.value)}
onKeyDown={handleKey}
-30
View File
@@ -1,30 +0,0 @@
interface CardProps {
produto: {
id: number;
nome: string;
qtd: number;
tipoUN: string;
comprado: boolean;
listaId: string;
createdAt: Date;
updatedAt: Date;
}
}
export function Card({ produto }: CardProps) {
return (
<div className="card bg-white shadow-lg rounded-lg hover:shadow-xl transition-duration-300">
<div className="card-body p-6">
<h2 className="card-title text-xl font-bold mb-2">{produto.nome}</h2>
<div className="space-y-2">
<p className="text-gray-600">
Quantidade: <span className="font-semibold">{produto.qtd}</span>
</p>
<p className="text-gray-600">
Tipo: <span className="font-semibold">{produto.tipoUN}</span>
</p>
</div>
</div>
</div>
);
}
-6
View File
@@ -1,6 +0,0 @@
import prisma from "@/lib/prisma";
export async function Items() {
const produtos = await prisma.produtos.findMany({});
console.log(produtos);
}
+1
View File
@@ -117,6 +117,7 @@ export function Hero() {
<input
type="text"
placeholder={current.placeholder}
aria-label="Buscar produto por nome ou código de barras"
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
autoComplete="off"
-147
View File
@@ -1,147 +0,0 @@
"use client";
import { useState } from "react";
import { useRouter } from "next/navigation";
import { Search, ScanLine, Activity } from "lucide-react";
import { useSearchLogic } from "@/hooks/use-search-logic";
import { cn } from "@/lib/utils";
export function PersuasiveCTA() {
const router = useRouter();
const [query, setQuery] = useState("");
const { searchType, isValid, loading, setLoading } = useSearchLogic(query);
const handleSearch = async (e: React.FormEvent) => {
e.preventDefault();
if (!query.trim()) return;
setLoading(true);
const target =
searchType === "barcode" && isValid
? `/produto/${query.trim()}`
: `/resultados?q=${encodeURIComponent(query.trim())}`;
router.push(target);
};
const icon =
searchType === "barcode" ? (
<ScanLine className="w-4 h-4" />
) : searchType === "name" ? (
<Search className="w-4 h-4" />
) : (
<Activity className="w-4 h-4" />
);
const label =
searchType === "barcode"
? "Código de barras detectado"
: searchType === "name"
? "Pesquisa por nome"
: "Detecção automática";
return (
<section className="bg-[var(--bg-surface)] section-py border-t border-[var(--border-subtle)]">
<div className="container-editorial">
{/* ── Section header ───────────────────────────────────────────── */}
<div className="mb-16">
<span className="label text-[var(--accent)] block mb-4">
Comece Agora
</span>
<hr className="hairline mb-10" />
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 items-end">
<h2 className="font-display text-display-lg text-[var(--fg-primary)]">
Pronto para descobrir a{" "}
<em className="font-display-i text-[var(--accent)]">
verdade sobre seus alimentos?
</em>
</h2>
<p className="text-[var(--fg-secondary)] text-lg leading-relaxed max-w-md">
Sem cadastro, sem anúncios, sem venda de dados. Resultados
nutricionais completos em segundos.
</p>
</div>
</div>
{/* ── Search form ──────────────────────────────────────────────── */}
<form onSubmit={handleSearch} className="max-w-2xl">
<div className="search-editorial">
<div className="text-[var(--fg-muted)] shrink-0">{icon}</div>
<input
type="text"
placeholder="Nome do produto ou código de barras…"
value={query}
onChange={(e) => setQuery(e.target.value)}
autoComplete="off"
spellCheck={false}
className="flex-1 bg-transparent border-none outline-none py-[1.125rem] text-[var(--fg-primary)] placeholder-[var(--fg-faint)] text-base font-sans"
/>
<button
type="submit"
disabled={loading}
className="btn-accent shrink-0 py-2.5 px-5 text-sm"
>
{loading ? (
<span className="flex items-center gap-2">
<span className="w-3.5 h-3.5 border-2 border-white/40 border-t-white rounded-full animate-spin" />
Buscando…
</span>
) : (
<span className="flex items-center gap-1.5">
Buscar
<ArrowRight />
</span>
)}
</button>
</div>
{/* Detection status */}
<p className="mt-3 label text-[var(--fg-muted)] flex items-center gap-1.5">
<span
className={cn(
"w-1.5 h-1.5 rounded-full inline-block",
searchType !== "auto"
? "bg-[var(--accent)]"
: "bg-[var(--fg-faint)]"
)}
/>
{label}
</p>
</form>
{/* ── Trust indicators ─────────────────────────────────────────── */}
<div className="mt-12 flex flex-wrap gap-x-10 gap-y-3">
{["Sem cadastro necessário", "Resultados instantâneos", "100% gratuito e open source"].map(
(item) => (
<span
key={item}
className="label text-[var(--fg-muted)] flex items-center gap-2"
>
<span className="w-1 h-1 rounded-full bg-[var(--accent)]" />
{item}
</span>
)
)}
</div>
</div>
</section>
);
}
function ArrowRight() {
return (
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2.5"
strokeLinecap="round"
strokeLinejoin="round"
>
<path d="M5 12h14m-7-7 7 7-7 7" />
</svg>
);
}
-164
View File
@@ -1,164 +0,0 @@
"use client";
import { useState } from "react";
import { useRouter } from "next/navigation";
import { Search, ScanLine, AlertCircle } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
interface SearchBarProps {
variant?: "hero" | "compact" | "floating";
placeholder?: string;
className?: string;
}
export function SearchBar({
variant = "hero",
placeholder = "Digite o código de barras (ex: 7896004713588)",
className = "",
}: SearchBarProps) {
const [barcode, setBarcode] = useState("");
const [error, setError] = useState("");
const [loading, setLoading] = useState(false);
const router = useRouter();
const validateBarcode = (code: string) => {
const cleanCode = code.replace(/\D/g, "");
return cleanCode.length >= 8 && cleanCode.length <= 13;
};
const handleSearch = async (e: React.FormEvent) => {
e.preventDefault();
setError("");
if (!barcode.trim()) {
setError("Digite um código de barras válido");
return;
}
if (!validateBarcode(barcode)) {
setError("Código de barras deve ter entre 8 e 13 dígitos");
return;
}
setLoading(true);
// Simula busca (futuramente será integração com API)
setTimeout(() => {
router.push(`/produto/${barcode.trim()}`);
}, 1000);
};
const getVariantStyles = () => {
switch (variant) {
case "compact":
return {
container: "max-w-md mx-auto",
input: "text-base py-3",
button: "px-6 py-3",
};
case "floating":
return {
container:
"fixed bottom-6 left-1/2 transform -translate-x-1/2 z-50 max-w-sm w-full mx-4",
input: "text-sm py-3",
button: "px-4 py-3",
};
default: // hero
return {
container: "max-w-2xl mx-auto",
input: "text-lg py-4",
button: "px-8 py-4",
};
}
};
const styles = getVariantStyles();
if (variant === "floating") {
return (
<div className={`${styles.container} ${className}`}>
<form onSubmit={handleSearch} className="relative">
<div className="flex items-center bg-white dark:bg-gray-800 rounded-2xl shadow-2xl border border-gray-200 dark:border-gray-700 overflow-hidden">
<div className="flex-1 relative">
<ScanLine className="absolute left-4 top-1/2 transform -translate-y-1/2 text-gray-400 w-5 h-5" />
<Input
type="text"
placeholder={placeholder}
value={barcode}
onChange={(e) => setBarcode(e.target.value)}
className={`pl-12 pr-4 ${styles.input} border-0 bg-transparent focus:ring-0 placeholder:text-gray-400`}
/>
</div>
<Button
type="submit"
disabled={loading}
className={`m-2 ${styles.button} bg-gradient-to-r from-blue-600 to-green-600 hover:from-blue-700 hover:to-green-700 text-white font-semibold rounded-xl transition-all duration-200 transform hover:scale-105 disabled:opacity-50`}
>
{loading ? (
<div className="w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin" />
) : (
<Search className="w-5 h-5" />
)}
</Button>
</div>
{error && (
<div className="absolute top-full left-0 right-0 mt-2 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-xl shadow-lg">
<div className="flex items-center gap-2 text-red-600 dark:text-red-400 text-sm">
<AlertCircle className="w-4 h-4 flex-shrink-0" />
{error}
</div>
</div>
)}
</form>
</div>
);
}
return (
<div className={`${styles.container} ${className}`}>
<form onSubmit={handleSearch}>
<div className="relative">
<div className="flex items-center bg-white dark:bg-gray-800 rounded-2xl shadow-xl border border-gray-200 dark:border-gray-700 overflow-hidden">
<div className="flex-1 relative">
<ScanLine className="absolute left-4 top-1/2 transform -translate-y-1/2 text-gray-400 w-5 h-5" />
<Input
type="text"
placeholder={placeholder}
value={barcode}
onChange={(e) => setBarcode(e.target.value)}
className={`pl-12 pr-4 ${styles.input} border-0 bg-transparent focus:ring-0 placeholder:text-gray-400`}
/>
</div>
<Button
type="submit"
disabled={loading}
className={`m-2 ${styles.button} bg-gradient-to-r from-blue-600 to-green-600 hover:from-blue-700 hover:to-green-700 text-white font-semibold rounded-xl transition-all duration-200 transform hover:scale-105 disabled:opacity-50`}
>
{loading ? (
<div className="flex items-center gap-2">
<div className="w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin" />
Buscando...
</div>
) : (
<div className="flex items-center gap-2">
<Search className="w-5 h-5" />
Buscar
</div>
)}
</Button>
</div>
</div>
{error && (
<div className="mt-3 p-3 bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-xl">
<div className="flex items-center gap-2 text-red-600 dark:text-red-400 text-sm">
<AlertCircle className="w-4 h-4 flex-shrink-0" />
{error}
</div>
</div>
)}
</form>
</div>
);
}
+6 -5
View File
@@ -12,7 +12,8 @@ import {
Share2,
} from "lucide-react";
import Image from "next/image";
import { searchByBarcode, Product, formatNutritionData } from "@/lib/openFoodFactsApi";
import { searchByBarcode, Product } from "@/lib/openFoodFactsApi";
import { getEnergyKcal, getNutrientValue } from "@/lib/nutrition";
import { ProductSkeleton } from "@/app/components/ProductSkeleton";
/* ── Nutri-Score letter circle ─────────────────────────────────────────── */
@@ -305,7 +306,7 @@ export default function ProdutoPage() {
/* ── Nutrition bars — % of daily reference ─────────────────────────── */
const dailyRef: Record<string, number> = {
energy_100g: 2000,
"energy-kcal_100g": 2000,
fat_100g: 70,
saturated_fat_100g: 20,
sugars_100g: 90,
@@ -315,11 +316,11 @@ export default function ProdutoPage() {
};
const nutriments = product.nutriments || {};
const nutritionRows = [
{ key: "energy_100g", label: "Energia", unit: "kcal" },
{ key: "energy-kcal_100g", label: "Energia", unit: "kcal" },
{ key: "fat_100g", label: "Gorduras totais", unit: "g" },
{ key: "saturated_fat_100g",label: "Gorduras saturadas", unit: "g" },
{ key: "sugars_100g", label: "Açúcares", unit: "g" },
{ key: "salt_100g", label: "Sódio", unit: "g" },
{ key: "salt_100g", label: "Sal", unit: "g" },
{ key: "fiber_100g", label: "Fibras", unit: "g" },
{ key: "proteins_100g", label: "Proteínas", unit: "g" },
];
@@ -701,7 +702,7 @@ export default function ProdutoPage() {
>
{nutritionRows.map((row) => {
const raw = nutriments[row.key as keyof typeof nutriments];
const v = raw != null ? Number(raw) : null;
const v = row.key === "energy-kcal_100g" ? getEnergyKcal(nutriments) : getNutrientValue(raw);
if (v == null) return null;
const ref = dailyRef[row.key] || 100;
const pct = Math.min(100, Math.round((v / ref) * 100));
+4 -1
View File
@@ -346,7 +346,7 @@ function ResultadosContent() {
}}
>
<div style={{ display: "flex", alignItems: "center", gap: 8 }}>
<Link href="/" style={{ display: "flex", padding: 8, color: "var(--fg-secondary)" }}>
<Link href="/" aria-label="Voltar ao início" style={{ display: "flex", padding: 8, color: "var(--fg-secondary)" }}>
<ArrowLeft style={{ width: 18, height: 18 }} strokeWidth={1.75} />
</Link>
<div style={{ flex: 1 }}>
@@ -488,6 +488,8 @@ function ResultadosContent() {
return (
<button
key={g}
aria-label={`Nutri-Score ${g.toUpperCase()}`}
aria-pressed={active}
onClick={() => {
setGradeFilter((prev) => (prev === g ? null : g));
setCurrentPage(1);
@@ -516,6 +518,7 @@ function ResultadosContent() {
{/* Allergen-free chip */}
<button
aria-pressed={allergenFree}
onClick={() => {
setAllergenFree((prev) => !prev);
setCurrentPage(1);
-2505
View File
File diff suppressed because it is too large. Load diff
-1
View File
@@ -1 +0,0 @@
not found
-529
View File
@@ -1,529 +0,0 @@
{
"communities": {
"0": [
"app_components_cacheonlyswitch_tsx",
"app_components_donatecard_tsx",
"app_components_header_tsx",
"app_components_landing_features_tsx",
"app_components_nutriscorebadge_tsx",
"app_components_nutritionbar_tsx",
"app_components_productcard_tsx",
"app_components_productskeleton_tsx",
"barcode_page_nutriletter",
"components_donatecard_donatecardprops",
"components_header_header",
"components_header_nav_links",
"components_nutriscorebadge_grade_class",
"components_nutriscorebadge_grade_info",
"components_nutriscorebadge_nova_info",
"components_nutriscorebadge_novabadge",
"components_nutriscorebadge_novabadgeprops",
"components_nutriscorebadge_nutriscorebadgeprops",
"components_nutriscorebadge_size_class",
"components_nutritionbar_extractnumber",
"components_nutritionbar_nutritionbar",
"components_nutritionbar_nutritiongrid",
"components_nutritionbar_nutritiongridprops",
"components_nutritionbar_pct",
"components_nutritionbar_reference",
"components_optimizedimage_tsx",
"components_productcard_defaultcard",
"components_productcard_getimageurl",
"components_productcard_getverdict",
"components_productcard_mobilecard",
"components_productcard_nutri_grade_class",
"components_productcard_productcardprops",
"components_productcard_verdictdot",
"components_productskeleton_badgeskeleton",
"components_productskeleton_nutritionbarskeleton",
"components_productskeleton_skeletonprops",
"components_ui_label_tsx",
"components_ui_switch_tsx",
"landing_features_feature",
"landing_features_featurerow",
"landing_hero_arrowright",
"landing_howitworks_howitworks",
"landing_howitworks_step",
"landing_howitworks_stepcard",
"landing_persuasivecta_persuasivecta",
"lib_openfoodfactsapi_formatnutritiondata",
"lib_utils_cn",
"lib_utils_measureperformance",
"lib_utils_memoize",
"lib_utils_perfcache",
"lib_utils_ts",
"ui_checkbox_checkbox",
"ui_label_label",
"ui_label_labelvariants",
"ui_switch_switch"
],
"1": [
"app_components_footer_tsx",
"app_page_home",
"app_page_tsx",
"app_sobre_components_herosection_tsx",
"app_sobre_components_howitworkssection_tsx",
"app_sobre_components_impactsection_tsx",
"app_sobre_components_missionsection_tsx",
"app_sobre_components_problemsection_tsx",
"app_sobre_components_storysection_tsx",
"app_sobre_components_targetaudiencesection_tsx",
"app_sobre_components_valuessection_tsx",
"barcode_page_grade_desc",
"barcode_page_nova_bg",
"barcode_page_nova_desc",
"barcode_page_nova_ink",
"barcode_page_novapill",
"barcode_page_nutri_bg",
"barcode_page_nutri_ink",
"barcode_page_nutriscale",
"barcode_page_produtopage",
"components_ctasection_ctasection",
"components_footer_footer",
"components_footer_footer_links",
"components_herosection_herosection",
"components_main_main",
"components_missionsection_mission_values",
"components_problemsection_problemsection",
"components_storysection_story_data",
"components_storysection_storysection",
"components_storysection_storystep",
"components_targetaudiencesection_personas",
"components_ui_sheet_tsx",
"components_valuessection_protocols",
"id_page_listapageprops",
"landing_donationsection_donationsection",
"landing_howitworks_steps",
"landing_trustbadges_stats",
"landing_trustbadges_trustbadges",
"resultados_page_convertfilterstorecord",
"resultados_page_grade_colors",
"resultados_page_resultadospage",
"sobre_page_sobrepage",
"ui_sheet_sheetcontent",
"ui_sheet_sheetcontentprops",
"ui_sheet_sheetdescription",
"ui_sheet_sheetfooter",
"ui_sheet_sheetheader",
"ui_sheet_sheetoverlay",
"ui_sheet_sheettitle",
"ui_sheet_sheetvariants"
],
"2": [
"app_actions_criaritens",
"app_actions_deletarproduto",
"app_actions_togglecomprado",
"app_actions_ts",
"app_actions_verificarlista",
"app_components_deletebutton_tsx",
"app_components_listheader_tsx",
"app_components_main_tsx",
"app_components_pagination_tsx",
"components_idinput_idinput",
"components_listheader_listheader",
"components_listheader_listheaderprops",
"components_main_mainprops",
"components_ui_alert_dialog_tsx",
"components_ui_button_tsx",
"components_ui_dialog_tsx",
"components_ui_input_tsx",
"components_ui_select_tsx",
"id_page_listapage",
"ui_alert_dialog_alertdialogaction",
"ui_alert_dialog_alertdialogcancel",
"ui_alert_dialog_alertdialogcontent",
"ui_alert_dialog_alertdialogdescription",
"ui_alert_dialog_alertdialogfooter",
"ui_alert_dialog_alertdialogheader",
"ui_alert_dialog_alertdialogoverlay",
"ui_alert_dialog_alertdialogtitle",
"ui_button_button",
"ui_button_buttonprops",
"ui_button_buttonvariants",
"ui_dialog_dialogcontent",
"ui_dialog_dialogdescription",
"ui_dialog_dialogfooter",
"ui_dialog_dialogheader",
"ui_dialog_dialogoverlay",
"ui_dialog_dialogtitle",
"ui_input_input",
"ui_select_selectcontent",
"ui_select_selectitem",
"ui_select_selectlabel",
"ui_select_selectscrolldownbutton",
"ui_select_selectscrollupbutton",
"ui_select_selectseparator",
"ui_select_selecttrigger"
],
"3": [
"app_components_filtersidebar_tsx",
"components_filtersidebar_filtersidebar",
"components_ui_accordion_tsx",
"components_ui_radio_group_tsx",
"components_ui_separator_tsx",
"components_ui_slider_tsx",
"hooks_usecacheonlymode_ts",
"hooks_useproductfilters_loadfiltersfromstorage",
"hooks_useproductfilters_parsefiltersfromurl",
"hooks_useproductfilters_savefilterstostorage",
"hooks_useproductfilters_ts",
"hooks_useproductfilters_useproductfiltersoptions",
"hooks_usestoragemonitor_ts",
"hooks_usestoragemonitor_usestoragemonitorreturn",
"lib_types_cachefile",
"lib_types_cacheprogress",
"lib_types_cachesearchresult",
"lib_types_common_additives",
"lib_types_common_allergens",
"lib_types_filteroption",
"lib_types_filtersidebarprops",
"lib_types_filterstate",
"lib_types_imageloadingstate",
"lib_types_imageloadtask",
"lib_types_novagroup",
"lib_types_nutritiongrade",
"lib_types_paginationconfig",
"lib_types_paginationprops",
"lib_types_paginationstate",
"lib_types_popular_categories",
"lib_types_popular_categories_with_icons",
"lib_types_productfilters",
"lib_types_searchcacheconfig",
"lib_types_storagestats",
"lib_types_ts",
"lib_types_useoptimizedimageloadingoptions",
"lib_utils_debounce",
"resultados_page_resultadoscontent",
"ui_accordion_accordioncontent",
"ui_accordion_accordionitem",
"ui_accordion_accordiontrigger",
"ui_radio_group_radiogroup",
"ui_separator_separator",
"ui_slider_slider"
],
"4": [
"app_actions_listarprodutos",
"app_components_cardlist_tsx",
"app_components_filterbadge_tsx",
"app_components_listaproductcard_tsx",
"app_components_nutritionchart_tsx",
"app_components_productcardskeleton_tsx",
"components_card_cardprops",
"components_cardlist_cardlist",
"components_cardlist_cardlistprops",
"components_cardlist_produto",
"components_filterbadge_filterbadgeprops",
"components_filterbadge_filterbadgesprops",
"components_filterbadge_getfiltercolor",
"components_filterbadge_getfilterlabel",
"components_listaproductcard_listaproductcardprops",
"components_nutritionchart_nutritiondata",
"components_nutritionchart_nutritionsummary",
"components_ui_badge_tsx",
"components_ui_card_tsx",
"ui_badge_badge",
"ui_badge_badgeprops",
"ui_badge_badgevariants",
"ui_card_card",
"ui_card_cardcontent",
"ui_card_carddescription",
"ui_card_cardfooter",
"ui_card_cardheader",
"ui_card_cardtitle",
"ui_skeleton_skeleton"
],
"5": [
"hooks_usesearchcache_searchcachestate",
"hooks_usesearchcache_ts",
"hooks_usesearchcache_usesearchcachereturn",
"lib_cachemanager_cacheconfig",
"lib_cachemanager_cachedsearch",
"lib_cachemanager_cachemanager_cleanupoldcaches",
"lib_cachemanager_cachemanager_clearallcaches",
"lib_cachemanager_cachemanager_generatecachekey",
"lib_cachemanager_cachemanager_generatesearchid",
"lib_cachemanager_cachemanager_getcacheindex",
"lib_cachemanager_cachemanager_getcachestats",
"lib_cachemanager_cachemanager_getobjectsize",
"lib_cachemanager_cachemanager_getsearch",
"lib_cachemanager_cachemanager_hasspacefordata",
"lib_cachemanager_cachemanager_removesearch",
"lib_cachemanager_cachemanager_savesearch",
"lib_cachemanager_cachemanager_updatecacheindex",
"lib_cachemanager_default_config",
"lib_cachemanager_filterrecord",
"lib_cachemanager_filtervalue",
"lib_cachemanager_ts",
"lib_cachemanager_usecachemanager"
],
"6": [
"app_api_search_route_ts",
"lib_jsoncachemanager_jsoncachedata",
"lib_jsoncachemanager_jsoncachemanager_clearcache",
"lib_jsoncachemanager_jsoncachemanager_converttoapiproduct",
"lib_jsoncachemanager_jsoncachemanager_converttocachedproduct",
"lib_jsoncachemanager_jsoncachemanager_getinstance",
"lib_jsoncachemanager_jsoncachemanager_getproductbycode",
"lib_jsoncachemanager_jsoncachemanager_getstoragestats",
"lib_jsoncachemanager_jsoncachemanager_isinitialized",
"lib_jsoncachemanager_jsoncachemanager_loadcache",
"lib_jsoncachemanager_jsoncachemanager_mergeproductdata",
"lib_jsoncachemanager_jsoncachemanager_savecache",
"lib_jsoncachemanager_jsoncachemanager_saveproduct",
"lib_jsoncachemanager_jsoncachemanager_searchproducts",
"lib_jsoncachemanager_ts",
"lib_openfoodfactsapi_product",
"lib_searchutils_calculaterelevancescore",
"lib_searchutils_sortbyrelevance",
"lib_searchutils_ts",
"lib_types_cachedproduct",
"search_route_get",
"sync_route_post"
],
"7": [
"app_components_searchbar_tsx",
"hooks_use_search_logic_searchtype",
"hooks_use_search_logic_ts",
"landing_searchbar_searchbar",
"lib_openfoodfactsapi_calculatecompletenessscore",
"lib_openfoodfactsapi_config",
"lib_openfoodfactsapi_detectsearchtype",
"lib_openfoodfactsapi_fetchallresults",
"lib_openfoodfactsapi_getgradevalue",
"lib_openfoodfactsapi_isvalidbarcode",
"lib_openfoodfactsapi_makeapirequest",
"lib_openfoodfactsapi_searchbybarcode",
"lib_openfoodfactsapi_searchbyname",
"lib_openfoodfactsapi_searchresult",
"lib_openfoodfactsapi_sortproducts",
"lib_openfoodfactsapi_ts",
"postcss_config_mjs",
"tailwind_config_ts"
],
"8": [
"app_components_errorboundary_tsx",
"app_components_errortracking_tsx",
"app_layout_inter",
"app_layout_metadata",
"app_layout_rootlayout",
"app_layout_tsx",
"app_providers_providersprops",
"app_providers_themeprovider",
"app_providers_tsx",
"components_errorboundary_errorboundary",
"components_errorboundary_errorboundary_componentdidcatch",
"components_errorboundary_errorboundary_getderivedstatefromerror",
"components_errorboundary_errorboundary_render",
"components_errorboundary_props",
"components_errorboundary_state",
"lib_cachemanager_cachemanager_constructor",
"lib_openfoodfactsapi_nutriscanerror"
],
"9": [
"app_components_landing_hero_tsx",
"hooks_use_geolocation_setscannedcountry",
"hooks_use_geolocation_ts",
"landing_hero_hero",
"lib_geolocation_clearcountrycache",
"lib_geolocation_countryinfo",
"lib_geolocation_detectusercountry",
"lib_geolocation_getcachedcountry",
"lib_geolocation_getcountrycodeforapi",
"lib_geolocation_getcurrentcountry",
"lib_geolocation_isbrazil",
"lib_geolocation_iscachevalid",
"lib_geolocation_savetocache",
"lib_geolocation_ts"
],
"10": [
"app_components_sortdropdown_tsx",
"components_sortdropdown_sort_icons",
"components_sortdropdown_sorttoggle",
"components_theme_toggle_tsx",
"components_ui_dropdown_menu_tsx",
"lib_types_sortoption",
"ui_dropdown_menu_dropdownmenucontent",
"ui_dropdown_menu_dropdownmenuitem",
"ui_dropdown_menu_dropdownmenulabel",
"ui_dropdown_menu_dropdownmenuseparator",
"ui_dropdown_menu_dropdownmenusubcontent",
"ui_dropdown_menu_dropdownmenusubtrigger"
],
"11": [
"docs_resedesign_extract_js",
"resedesign_extract_decoded",
"resedesign_extract_end",
"resedesign_extract_fs",
"resedesign_extract_html",
"resedesign_extract_path",
"resedesign_extract_raw",
"resedesign_extract_start"
],
"12": [
"app_components_items_tsx",
"components_items_items",
"lib_prisma_prisma",
"lib_prisma_ts"
],
"13": [
"lib_types_rybbit_d_ts",
"types_rybbit_d_rybbit",
"types_rybbit_d_rybbittrackevent",
"types_rybbit_d_window"
],
"14": [
"app_robots_robots",
"app_robots_ts"
],
"15": [
"next_env_d_ts"
],
"16": [
"next_config_mjs"
],
"17": [
"sw_js"
],
"18": [
"app_sitemap_ts"
],
"19": [
"app_components_pagetitle_tsx"
]
},
"cohesion": {
"0": 0.06,
"1": 0.05,
"2": 0.09,
"3": 0.06,
"4": 0.11,
"5": 0.17,
"6": 0.16,
"7": 0.15,
"8": 0.13,
"9": 0.24,
"10": 0.23,
"11": 0.25,
"12": 0.5,
"13": 0.5,
"14": 1.0,
"15": 1.0,
"16": 1.0,
"17": 1.0,
"18": 1.0,
"19": 1.0
},
"gods": [
{
"id": "lib_utils_cn",
"label": "cn()",
"degree": 51
},
{
"id": "ui_button_button",
"label": "Button",
"degree": 13
},
{
"id": "lib_openfoodfactsapi_product",
"label": "Product",
"degree": 8
},
{
"id": "ui_badge_badge",
"label": "Badge()",
"degree": 7
},
{
"id": "components_errorboundary_errorboundary",
"label": "ErrorBoundary",
"degree": 6
},
{
"id": "landing_howitworks_howitworks",
"label": "HowItWorks()",
"degree": 6
},
{
"id": "lib_geolocation_iscachevalid",
"label": "isCacheValid()",
"degree": 6
},
{
"id": "lib_geolocation_detectusercountry",
"label": "detectUserCountry()",
"degree": 6
},
{
"id": "app_actions_verificarlista",
"label": "verificarLista()",
"degree": 5
},
{
"id": "landing_hero_hero",
"label": "Hero()",
"degree": 5
}
],
"surprises": [
{
"source": "SheetFooter()",
"target": "cn()",
"source_files": [
"components/ui/sheet.tsx",
"lib/utils.ts"
],
"confidence": "EXTRACTED",
"relation": "calls",
"why": "connects across different repos/directories; bridges separate communities; peripheral node `SheetFooter()` unexpectedly reaches hub `cn()`"
},
{
"source": "NovaBadge()",
"target": "cn()",
"source_files": [
"app/components/NutriScoreBadge.tsx",
"lib/utils.ts"
],
"confidence": "EXTRACTED",
"relation": "calls",
"why": "connects across different repos/directories; peripheral node `NovaBadge()` unexpectedly reaches hub `cn()`"
},
{
"source": "NutritionBar()",
"target": "cn()",
"source_files": [
"app/components/NutritionBar.tsx",
"lib/utils.ts"
],
"confidence": "EXTRACTED",
"relation": "calls",
"why": "connects across different repos/directories; peripheral node `NutritionBar()` unexpectedly reaches hub `cn()`"
},
{
"source": "NutritionGrid()",
"target": "cn()",
"source_files": [
"app/components/NutritionBar.tsx",
"lib/utils.ts"
],
"confidence": "EXTRACTED",
"relation": "calls",
"why": "connects across different repos/directories; peripheral node `NutritionGrid()` unexpectedly reaches hub `cn()`"
},
{
"source": "NutritionBarSkeleton()",
"target": "cn()",
"source_files": [
"app/components/ProductSkeleton.tsx",
"lib/utils.ts"
],
"confidence": "EXTRACTED",
"relation": "calls",
"why": "connects across different repos/directories; peripheral node `NutritionBarSkeleton()` unexpectedly reaches hub `cn()`"
}
],
"tokens": {
"input": 0,
"output": 0
}
}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_errortracking_tsx", "label": "ErrorTracking.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorTracking.tsx", "source_location": "L1"}, {"id": "components_errortracking_errortracking", "label": "ErrorTracking()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorTracking.tsx", "source_location": "L9"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_errortracking_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorTracking.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_errortracking_tsx", "target": "components_errortracking_errortracking", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorTracking.tsx", "source_location": "L9", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_errortracking_errortracking", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorTracking.tsx", "source_location": "L10"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_header_tsx", "label": "header.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L1"}, {"id": "components_header_nav_links", "label": "NAV_LINKS", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L10"}, {"id": "components_header_header", "label": "Header()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L16"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "link", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "next_themes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "image", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L8", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L8", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "components_header_nav_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L10", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_header_tsx", "target": "components_header_header", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L16", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_header_header", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L17"}, {"caller_nid": "components_header_header", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L18"}, {"caller_nid": "components_header_header", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L19"}, {"caller_nid": "components_header_header", "callee": "useTheme", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L20"}, {"caller_nid": "components_header_header", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L22"}, {"caller_nid": "components_header_header", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L33"}, {"caller_nid": "components_header_header", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L65"}, {"caller_nid": "components_header_header", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L111"}, {"caller_nid": "components_header_header", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\header.tsx", "source_location": "L117"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "label": "HowItWorks.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L1"}, {"id": "landing_howitworks_step", "label": "Step", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L7"}, {"id": "landing_howitworks_steps", "label": "steps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L14"}, {"id": "landing_howitworks_howitworks", "label": "HowItWorks()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L45"}, {"id": "landing_howitworks_stepcard", "label": "StepCard()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L129"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "landing_howitworks_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "landing_howitworks_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L14", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "landing_howitworks_howitworks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L45", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "target": "landing_howitworks_stepcard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L129", "weight": 1.0}], "raw_calls": [{"caller_nid": "landing_howitworks_howitworks", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L72"}, {"caller_nid": "landing_howitworks_howitworks", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L84"}, {"caller_nid": "landing_howitworks_howitworks", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L106"}, {"caller_nid": "landing_howitworks_stepcard", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\HowItWorks.tsx", "source_location": "L133"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_lista_id_page_tsx", "label": "page.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L1"}, {"id": "id_page_listapageprops", "label": "ListaPageProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L10"}, {"id": "id_page_listapage", "label": "ListaPage()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L16"}], "edges": [{"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "d_documents_github_nutriscan_app_components_main_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "components_main_main", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "d_documents_github_nutriscan_app_components_cardlist_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "components_cardlist_cardlist", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "d_documents_github_nutriscan_components_theme_toggle_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "components_theme_toggle_themetoggle", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "d_documents_github_nutriscan_app_components_listheader_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "components_listheader_listheader", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "d_documents_github_nutriscan_app_components_footer_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "components_footer_footer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "d_documents_github_nutriscan_app_actions_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "app_actions_verificarlista", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "navigation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\lista\\[id]\\page.tsx", "source_location": "L8", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_lista_id_page_tsx", "target": "id_page_Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_optimizedimage_tsx", "label": "OptimizedImage.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L1"}, {"id": "components_optimizedimage_optimizedimageprops", "label": "OptimizedImageProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L8"}, {"id": "components_optimizedimage_optimizedimage", "label": "OptimizedImage()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L34"}], "edges": [{"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "image", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "components_optimizedimage_optimizedimageprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L8", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_optimizedimage_tsx", "target": "components_optimizedimage_optimizedimage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L34", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L53"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L54"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "includes", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L58"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "debug", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L62"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useRef", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L63"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useRef", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L64"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useRef", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L65"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L68"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L73"}, {"caller_nid": "components_optimizedimage_optimizedimage", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\OptimizedImage.tsx", "source_location": "L81"}, {"caller_nid": "components_optimizedLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_select_tsx", "label": "select.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L1"}, {"id": "ui_select_selecttrigger", "label": "SelectTrigger", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L15"}, {"id": "ui_select_selectscrollupbutton", "label": "SelectScrollUpButton", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L35"}, {"id": "ui_select_selectscrolldownbutton", "label": "SelectScrollDownButton", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L52"}, {"id": "ui_select_selectcontent", "label": "SelectContent", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L70"}, {"id": "ui_select_selectlabel", "label": "SelectLabel", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L102"}, {"id": "ui_select_selectitem", "label": "SelectItem", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L114"}, {"id": "ui_select_selectseparator", "label": "SelectSeparator", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L136"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "react_select", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selecttrigger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L15", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selectscrollupbutton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L35", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selectscrolldownbutton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L52", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selectcontent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L70", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selectlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L102", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selectitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L114", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_select_tsx", "target": "ui_select_selectseparator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\select.tsx", "source_location": "L136", "weight": 1.0}], "raLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "label": "dropdown-menu.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L1"}, {"id": "ui_dropdown_menu_dropdownmenusubtrigger", "label": "DropdownMenuSubTrigger", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L21"}, {"id": "ui_dropdown_menu_dropdownmenusubcontent", "label": "DropdownMenuSubContent", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L43"}, {"id": "ui_dropdown_menu_dropdownmenucontent", "label": "DropdownMenuContent", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L59"}, {"id": "ui_dropdown_menu_dropdownmenuitem", "label": "DropdownMenuItem", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L77"}, {"id": "ui_dropdown_menu_dropdownmenulabel", "label": "DropdownMenuLabel", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L95"}, {"id": "ui_dropdown_menu_dropdownmenuseparator", "label": "DropdownMenuSeparator", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L113"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "react_dropdown_menu", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "ui_dropdown_menu_dropdownmenusubtrigger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L21", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "ui_dropdown_menu_dropdownmenusubcontent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L43", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "ui_dropdown_menu_dropdownmenucontent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L59", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "ui_dropdown_menu_dropdownmenuitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L77", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "ui_dropdown_menu_dropdownmenulabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L95", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "target": "ui_dropdown_menu_dropdownmenuseparator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dropdown-menu.tsx", "source_location": "L113", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "label": "ListaProductCard.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L1"}, {"id": "components_listaproductcard_produto", "label": "Produto", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L9"}, {"id": "components_listaproductcard_listaproductcardprops", "label": "ListaProductCardProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L20"}, {"id": "components_listaproductcard_listaproductcard", "label": "ListaProductCard()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L25"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "d_documents_github_nutriscan_components_ui_badge_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "ui_badge_badge", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "d_documents_github_nutriscan_components_ui_card_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "ui_card_card", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "ui_card_cardcontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "d_documents_github_nutriscan_app_actions_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "app_actions_togglecomprado", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "components_listaproductcard_produto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "components_listaproductcard_listaproductcardprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ListaProductCard.tsx", "source_location": "L20", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "target": "components_listaproductcard_listaproductcard", "relation": "contains", "conLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_landing_donationsection_tsx", "label": "DonationSection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\DonationSection.tsx", "source_location": "L1"}, {"id": "landing_donationsection_donationsection", "label": "DonationSection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\DonationSection.tsx", "source_location": "L6"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_landing_donationsection_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\DonationSection.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_donationsection_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\DonationSection.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_donationsection_tsx", "target": "landing_donationsection_donationsection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\DonationSection.tsx", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "landing_donationsection_donationsection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\DonationSection.tsx", "source_location": "L33"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_landing_features_tsx", "label": "Features.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L1"}, {"id": "landing_features_feature", "label": "Feature", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L6"}, {"id": "landing_features_features", "label": "features", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L13"}, {"id": "landing_features_featurerow", "label": "FeatureRow()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L79"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "landing_features_feature", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "landing_features_features", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L13", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "landing_features_features", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L44", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_features_tsx", "target": "landing_features_featurerow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L79", "weight": 1.0}], "raw_calls": [{"caller_nid": "landing_features_features", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L67"}, {"caller_nid": "landing_features_featurerow", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\Features.tsx", "source_location": "L88"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "label": "radio-group.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L1"}, {"id": "ui_radio_group_radiogroup", "label": "RadioGroup", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L9"}, {"id": "ui_radio_group_radiogroupitem", "label": "RadioGroupItem", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L23"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "react_radio_group", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "ui_radio_group_radiogroup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "target": "ui_radio_group_radiogroupitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\radio-group.tsx", "source_location": "L23", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_api_products_barcode_route_ts", "label": "route.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L1"}, {"id": "barcode_route_get", "label": "GET()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L6"}], "edges": [{"source": "d_documents_github_nutriscan_app_api_products_barcode_route_ts", "target": "server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_products_barcode_route_ts", "target": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_products_barcode_route_ts", "target": "lib_jsoncachemanager_jsoncachemanager", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_products_barcode_route_ts", "target": "barcode_route_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "barcode_route_get", "callee": "replace", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L15"}, {"caller_nid": "barcode_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L17"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L24"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L27"}, {"caller_nid": "barcode_route_get", "callee": "getProductByCode", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L28"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L31"}, {"caller_nid": "barcode_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L32"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L41"}, {"caller_nid": "barcode_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L44"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L51"}, {"caller_nid": "barcode_route_get", "callee": "fetch", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L54"}, {"caller_nid": "barcode_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L65"}, {"caller_nid": "barcode_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L71"}, {"caller_nid": "barcode_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L74"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L82"}, {"caller_nid": "barcode_route_get", "callee": "saveProduct", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\products\\[barcode]\\route.ts", "source_location": "L83"}, {"caller_nid": "barcode_route_get", "callee": "log", "is_member_call": true, "source_file": Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_layout_tsx", "label": "layout.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L1"}, {"id": "app_layout_inter", "label": "inter", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L9"}, {"id": "app_layout_metadata", "label": "metadata", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L15"}, {"id": "app_layout_rootlayout", "label": "RootLayout()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L73"}], "edges": [{"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "d_documents_github_nutriscan_app_globals_css", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "next", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "google", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "script", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "d_documents_github_nutriscan_app_providers_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "app_providers_themeprovider", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "d_documents_github_nutriscan_app_components_errorboundary_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "components_errorboundary_errorboundary", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "d_documents_github_nutriscan_app_components_errortracking_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "components_errortracking_errortracking", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "app_layout_inter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "app_layout_metadata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L15", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_layout_tsx", "target": "app_layout_rootlayout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\layout.tsx", "source_location": "L73", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_postcss_config_mjs", "label": "postcss.config.mjs", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\postcss.config.mjs", "source_location": "L1"}, {"id": "nutriscan_postcss_config_config", "label": "config", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\postcss.config.mjs", "source_location": "L2"}], "edges": [{"source": "d_documents_github_nutriscan_postcss_config_mjs", "target": "nutriscan_postcss_config_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\postcss.config.mjs", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_providers_tsx", "label": "providers.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L1"}, {"id": "app_providers_providersprops", "label": "ProvidersProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L5"}, {"id": "app_providers_themeprovider", "label": "ThemeProvider()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L9"}], "edges": [{"source": "d_documents_github_nutriscan_app_providers_tsx", "target": "next_themes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_providers_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_providers_tsx", "target": "app_providers_providersprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_providers_tsx", "target": "app_providers_themeprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\providers.tsx", "source_location": "L9", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_utils_ts", "label": "utils.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L1"}, {"id": "lib_utils_cn", "label": "cn()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L4"}, {"id": "lib_utils_perfcache", "label": "perfCache", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L9"}, {"id": "lib_utils_debounce", "label": "debounce()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L12"}, {"id": "lib_utils_memoize", "label": "memoize()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L25"}, {"id": "lib_utils_measureperformance", "label": "measurePerformance()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L46"}], "edges": [{"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "clsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "tailwind_merge", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "lib_utils_cn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "lib_utils_perfcache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "lib_utils_debounce", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L12", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "lib_utils_memoize", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L25", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_utils_ts", "target": "lib_utils_measureperformance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L46", "weight": 1.0}], "raw_calls": [{"caller_nid": "lib_utils_cn", "callee": "twMerge", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L5"}, {"caller_nid": "lib_utils_cn", "callee": "clsx", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L5"}, {"caller_nid": "lib_utils_measureperformance", "callee": "now", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L47"}, {"caller_nid": "lib_utils_measureperformance", "callee": "callback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L48"}, {"caller_nid": "lib_utils_measureperformance", "callee": "now", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L49"}, {"caller_nid": "lib_utils_measureperformance", "callee": "set", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\utils.ts", "source_location": "L50"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_landing_trustbadges_tsx", "label": "TrustBadges.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L1"}, {"id": "landing_trustbadges_stats", "label": "stats", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L3"}, {"id": "landing_trustbadges_trustbadges", "label": "TrustBadges()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L26"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_landing_trustbadges_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_trustbadges_tsx", "target": "landing_trustbadges_stats", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_trustbadges_tsx", "target": "landing_trustbadges_trustbadges", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L26", "weight": 1.0}], "raw_calls": [{"caller_nid": "landing_trustbadges_trustbadges", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\TrustBadges.tsx", "source_location": "L31"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "label": "NutritionBar.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L1"}, {"id": "components_nutritionbar_nutritionbarprops", "label": "NutritionBarProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L4"}, {"id": "components_nutritionbar_nutritionbar", "label": "NutritionBar()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L15"}, {"id": "components_nutritionbar_nutritiongridprops", "label": "NutritionGridProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L61"}, {"id": "components_nutritionbar_reference", "label": "REFERENCE", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L74"}, {"id": "components_nutritionbar_extractnumber", "label": "extractNumber()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L79"}, {"id": "components_nutritionbar_pct", "label": "pct()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L85"}, {"id": "components_nutritionbar_nutritiongrid", "label": "NutritionGrid()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L89"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_nutritionbarprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_nutritionbar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L15", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_nutritiongridprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L61", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_reference", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L74", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_extractnumber", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L79", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_pct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L85", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionbar_tsx", "target": "components_nutritionbar_nutritiongrid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L89", "weight": 1.0}, {"source": "components_nutritionbar_pct", "target": "components_nutritionbar_extractnumber", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L86", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_nutritionbar_nutritionbar", "callee": "min", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionBar.tsx", "source_location": "L24"}, {"caller_nid": "compoLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_api_location_route_ts", "label": "route.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L1"}, {"id": "location_route_get", "label": "GET()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L6"}], "edges": [{"source": "d_documents_github_nutriscan_app_api_location_route_ts", "target": "server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_location_route_ts", "target": "location_route_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "location_route_get", "callee": "trim", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L15"}, {"caller_nid": "location_route_get", "callee": "split", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L15"}, {"caller_nid": "location_route_get", "callee": "startsWith", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L25"}, {"caller_nid": "location_route_get", "callee": "startsWith", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L26"}, {"caller_nid": "location_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L28"}, {"caller_nid": "location_route_get", "callee": "fetch", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L33"}, {"caller_nid": "location_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L40"}, {"caller_nid": "location_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L42"}, {"caller_nid": "location_route_get", "callee": "warn", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L45"}, {"caller_nid": "location_route_get", "callee": "warn", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L51"}, {"caller_nid": "location_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L52"}, {"caller_nid": "location_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L58"}, {"caller_nid": "location_route_get", "callee": "fetch", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L61"}, {"caller_nid": "location_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L74"}, {"caller_nid": "location_route_get", "callee": "warn", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L78"}, {"caller_nid": "location_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L79"}, {"caller_nid": "location_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L85"}, {"caller_nid": "location_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L87"}, {"caller_nid": "location_route_get", "callee": "toLowerCase", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L89"}, {"caller_nid": "location_route_get", "callee": "error", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L92"}, {"caller_nid": "location_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\location\\route.ts", "source_location": "L95"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_pagination_tsx", "label": "Pagination.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L1"}, {"id": "components_pagination_default_config", "label": "DEFAULT_CONFIG", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L20"}, {"id": "components_pagination_pagination", "label": "Pagination()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L27"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L10", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L10", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "d_documents_github_nutriscan_components_ui_select_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L11", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "ui_select_select", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L11", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "ui_select_selectcontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L11", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "ui_select_selectitem", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L11", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "ui_select_selecttrigger", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L11", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "ui_select_selectvalue", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L11", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "d_documents_github_nutriscan_lib_types_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L18", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "lib_types_paginationprops", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L18", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "lib_types_paginationconfig", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L18", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagination_tsx", "target": "components_pagination_default_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Pagination.tsx", "source_location": "L20", "weight": 1Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_main_tsx", "label": "Main.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L1"}, {"id": "components_main_mainprops", "label": "MainProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L17"}, {"id": "components_main_main", "label": "Main()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L21"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "d_documents_github_nutriscan_components_ui_input_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_input_input", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "d_documents_github_nutriscan_components_ui_select_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_select", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_selectcontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_selectgroup", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_selectitem", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_selectlabel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_selecttrigger", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_select_selectvalue", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L12", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L12", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "d_documents_github_nutriscan_app_actions_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L13", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "app_actions_criaritens", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\Main.tsx", "source_location": "L13", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_main_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_api_storage_stats_route_ts", "label": "route.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L1"}, {"id": "storage_stats_route_get", "label": "GET()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L4"}], "edges": [{"source": "d_documents_github_nutriscan_app_api_storage_stats_route_ts", "target": "server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_storage_stats_route_ts", "target": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_storage_stats_route_ts", "target": "lib_jsoncachemanager_jsoncachemanager", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_storage_stats_route_ts", "target": "storage_stats_route_get", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L4", "weight": 1.0}], "raw_calls": [{"caller_nid": "storage_stats_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L6"}, {"caller_nid": "storage_stats_route_get", "callee": "isInitialized", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L9"}, {"caller_nid": "storage_stats_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L11"}, {"caller_nid": "storage_stats_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L12"}, {"caller_nid": "storage_stats_route_get", "callee": "now", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L20"}, {"caller_nid": "storage_stats_route_get", "callee": "getStorageStats", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L25"}, {"caller_nid": "storage_stats_route_get", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L26"}, {"caller_nid": "storage_stats_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L28"}, {"caller_nid": "storage_stats_route_get", "callee": "now", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L31"}, {"caller_nid": "storage_stats_route_get", "callee": "error", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L34"}, {"caller_nid": "storage_stats_route_get", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L37"}, {"caller_nid": "storage_stats_route_get", "callee": "now", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\storage-stats\\route.ts", "source_location": "L45"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sobre_components_targetaudiencesection_tsx", "label": "TargetAudienceSection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L1"}, {"id": "components_targetaudiencesection_personas", "label": "PERSONAS", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L3"}, {"id": "components_targetaudiencesection_targetaudiencesection", "label": "TargetAudienceSection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L38"}], "edges": [{"source": "d_documents_github_nutriscan_app_sobre_components_targetaudiencesection_tsx", "target": "components_targetaudiencesection_personas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_targetaudiencesection_tsx", "target": "components_targetaudiencesection_targetaudiencesection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L38", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_targetaudiencesection_targetaudiencesection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L56"}, {"caller_nid": "components_targetaudiencesection_targetaudiencesection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\TargetAudienceSection.tsx", "source_location": "L94"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_hooks_usestoragemonitor_ts", "label": "useStorageMonitor.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L1"}, {"id": "hooks_usestoragemonitor_usestoragemonitorreturn", "label": "UseStorageMonitorReturn", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L9"}, {"id": "hooks_usestoragemonitor_usestoragemonitor", "label": "useStorageMonitor()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L19"}], "edges": [{"source": "d_documents_github_nutriscan_hooks_usestoragemonitor_ts", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usestoragemonitor_ts", "target": "d_documents_github_nutriscan_lib_types_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usestoragemonitor_ts", "target": "lib_types_storagestats", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usestoragemonitor_ts", "target": "hooks_usestoragemonitor_usestoragemonitorreturn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usestoragemonitor_ts", "target": "hooks_usestoragemonitor_usestoragemonitor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L19", "weight": 1.0}], "raw_calls": [{"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L20"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L21"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L22"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L27"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L42"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L80"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L85"}, {"caller_nid": "hooks_usestoragemonitor_usestoragemonitor", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useStorageMonitor.ts", "source_location": "L90"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "label": "ProductCardSkeleton.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L1"}, {"id": "components_productcardskeleton_productcardskeleton", "label": "ProductCardSkeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L4"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "target": "d_documents_github_nutriscan_components_ui_card_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "target": "ui_card_card", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "target": "ui_card_cardcontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "target": "d_documents_github_nutriscan_components_ui_skeleton_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "target": "ui_skeleton_skeleton", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcardskeleton_tsx", "target": "components_productcardskeleton_productcardskeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCardSkeleton.tsx", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_dialog_tsx", "label": "dialog.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L1"}, {"id": "ui_dialog_dialogoverlay", "label": "DialogOverlay", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L17"}, {"id": "ui_dialog_dialogcontent", "label": "DialogContent", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L32"}, {"id": "ui_dialog_dialogheader", "label": "DialogHeader()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L56"}, {"id": "ui_dialog_dialogfooter", "label": "DialogFooter()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L70"}, {"id": "ui_dialog_dialogtitle", "label": "DialogTitle", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L84"}, {"id": "ui_dialog_dialogdescription", "label": "DialogDescription", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L99"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "react_dialog", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "ui_dialog_dialogoverlay", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L17", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "ui_dialog_dialogcontent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L32", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "ui_dialog_dialogheader", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L56", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "ui_dialog_dialogfooter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L70", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "ui_dialog_dialogtitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L84", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_dialog_tsx", "target": "ui_dialog_dialogdescription", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L99", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_dialog_dialogheader", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L61"}, {"caller_nid": "ui_dialog_dialogfooter", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\dialog.tsx", "source_location": "L75"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_tailwind_config_ts", "label": "tailwind.config.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\tailwind.config.ts", "source_location": "L1"}, {"id": "nutriscan_tailwind_config_config", "label": "config", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\tailwind.config.ts", "source_location": "L3"}], "edges": [{"source": "d_documents_github_nutriscan_tailwind_config_ts", "target": "tailwindcss", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\tailwind.config.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_tailwind_config_ts", "target": "nutriscan_tailwind_config_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\tailwind.config.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "label": "useProductFilters.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L1"}, {"id": "hooks_useproductfilters_useproductfiltersoptions", "label": "UseProductFiltersOptions", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L7"}, {"id": "hooks_useproductfilters_useproductfilters", "label": "useProductFilters()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L13"}, {"id": "hooks_useproductfilters_parsefiltersfromurl", "label": "parseFiltersFromURL()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L167"}, {"id": "hooks_useproductfilters_loadfiltersfromstorage", "label": "loadFiltersFromStorage()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L236"}, {"id": "hooks_useproductfilters_savefilterstostorage", "label": "saveFiltersToStorage()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L245"}, {"id": "hooks_useproductfilters_debounce", "label": "debounce()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L253"}], "edges": [{"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "navigation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "d_documents_github_nutriscan_lib_types_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "lib_types_productfilters", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "lib_types_filterstate", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "hooks_useproductfilters_useproductfiltersoptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "hooks_useproductfilters_useproductfilters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L13", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "hooks_useproductfilters_parsefiltersfromurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L167", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "hooks_useproductfilters_loadfiltersfromstorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L236", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "hooks_useproductfilters_savefilterstostorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L245", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_useproductfilters_ts", "target": "hooks_useproductfilters_debounce", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useProductFilters.ts", "source_location": "L253", "weight": 1.0}, {"source": "hooks_useproductfilters_useproductfilters", "target": "hooks_useproductfilters_debounce", "relation": "calls", "context": "call", "confidence": "EXTRACTED"Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_button_tsx", "label": "button.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L1"}, {"id": "ui_button_buttonvariants", "label": "buttonVariants", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L7"}, {"id": "ui_button_buttonprops", "label": "ButtonProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L37"}, {"id": "ui_button_button", "label": "Button", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L43"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "react_slot", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "class_variance_authority", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "ui_button_buttonvariants", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "ui_button_buttonprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L37", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_button_tsx", "target": "ui_button_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\button.tsx", "source_location": "L43", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_next_config_mjs", "label": "next.config.mjs", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\next.config.mjs", "source_location": "L1"}, {"id": "nutriscan_next_config_nextconfig", "label": "nextConfig", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\next.config.mjs", "source_location": "L2"}], "edges": [{"source": "d_documents_github_nutriscan_next_config_mjs", "target": "nutriscan_next_config_nextconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\next.config.mjs", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "label": "useSearchCache.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L1"}, {"id": "hooks_usesearchcache_searchcachestate", "label": "SearchCacheState", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L7"}, {"id": "hooks_usesearchcache_usesearchcachereturn", "label": "UseSearchCacheReturn", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L20"}, {"id": "hooks_usesearchcache_usesearchcache", "label": "useSearchCache()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L51"}], "edges": [{"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "lib_openfoodfactsapi_product", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "d_documents_github_nutriscan_lib_cachemanager_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "lib_cachemanager_cachemanager", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "lib_cachemanager_cachedsearch", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "lib_cachemanager_filterrecord", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "hooks_usesearchcache_searchcachestate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "hooks_usesearchcache_usesearchcachereturn", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L20", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_usesearchcache_ts", "target": "hooks_usesearchcache_usesearchcache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L51", "weight": 1.0}], "raw_calls": [{"caller_nid": "hooks_usesearchcache_usesearchcache", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L52"}, {"caller_nid": "hooks_usesearchcache_usesearchcache", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L60"}, {"caller_nid": "hooks_usesearchcache_usesearchcache", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L87"}, {"caller_nid": "hooks_usesearchcache_usesearchcache", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L122"}, {"caller_nid": "hooks_usesearchcache_usesearchcache", "callee": "useCallback", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\useSearchCache.ts", "source_location": "L151"}, {"caller_nid": "hooks_usesearchcache_usesearchcache", "callee": "useCallback", "is_member_call": false, "Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sobre_components_storysection_tsx", "label": "StorySection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L1"}, {"id": "components_storysection_storystep", "label": "StoryStep", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L3"}, {"id": "components_storysection_story_data", "label": "STORY_DATA", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L9"}, {"id": "components_storysection_storysection", "label": "StorySection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L36"}], "edges": [{"source": "d_documents_github_nutriscan_app_sobre_components_storysection_tsx", "target": "components_storysection_storystep", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_storysection_tsx", "target": "components_storysection_story_data", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_storysection_tsx", "target": "components_storysection_storysection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L36", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_storysection_storysection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\StorySection.tsx", "source_location": "L55"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_card_tsx", "label": "card.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\card.tsx", "source_location": "L1"}, {"id": "components_card_cardprops", "label": "CardProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\card.tsx", "source_location": "L1"}, {"id": "components_card_card", "label": "Card()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\card.tsx", "source_location": "L14"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_card_tsx", "target": "components_card_cardprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\card.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_card_tsx", "target": "components_card_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\card.tsx", "source_location": "L14", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sobre_components_impactsection_tsx", "label": "ImpactSection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\ImpactSection.tsx", "source_location": "L1"}, {"id": "components_impactsection_impactsection", "label": "ImpactSection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\ImpactSection.tsx", "source_location": "L3"}], "edges": [{"source": "d_documents_github_nutriscan_app_sobre_components_impactsection_tsx", "target": "components_impactsection_impactsection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\ImpactSection.tsx", "source_location": "L3", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_impactsection_impactsection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\ImpactSection.tsx", "source_location": "L21"}, {"caller_nid": "components_impactsection_impactsection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\ImpactSection.tsx", "source_location": "L43"}, {"caller_nid": "components_impactsection_impactsection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\ImpactSection.tsx", "source_location": "L72"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "label": "DeleteButton.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L1"}, {"id": "components_deletebutton_deletebuttonprops", "label": "DeleteButtonProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L19"}, {"id": "components_deletebutton_deletebutton", "label": "DeleteButton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L25"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialog", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogaction", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogcancel", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogcontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogdescription", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogfooter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogheader", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogtitle", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "ui_alert_dialog_alertdialogtrigger", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "d_documents_github_nutriscan_app_actions_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\DeleteButton.tsx", "source_location": "L14", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_deletebutton_tsx", "target": "app_actions_deletarLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_pagetitle_tsx", "label": "PageTitle.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\PageTitle.tsx", "source_location": "L1"}, {"id": "components_pagetitle_pagetitle", "label": "PageTitle()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\PageTitle.tsx", "source_location": "L4"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_pagetitle_tsx", "target": "framer_motion", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\PageTitle.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_pagetitle_tsx", "target": "components_pagetitle_pagetitle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\PageTitle.tsx", "source_location": "L4", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_skeleton_tsx", "label": "skeleton.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\skeleton.tsx", "source_location": "L1"}, {"id": "ui_skeleton_skeleton", "label": "Skeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\skeleton.tsx", "source_location": "L3"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_skeleton_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\skeleton.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_skeleton_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\skeleton.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_skeleton_tsx", "target": "ui_skeleton_skeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\skeleton.tsx", "source_location": "L3", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_skeleton_skeleton", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\skeleton.tsx", "source_location": "L9"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "label": "openFoodFactsApi.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L1"}, {"id": "lib_openfoodfactsapi_product", "label": "Product", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L6"}, {"id": "lib_openfoodfactsapi_searchresult", "label": "SearchResult", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L34"}, {"id": "lib_openfoodfactsapi_config", "label": "CONFIG", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L43"}, {"id": "lib_openfoodfactsapi_nutriscanerror", "label": "NutriScanError", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L54"}, {"id": "lib_openfoodfactsapi_nutriscanerror_constructor", "label": ".constructor()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L55"}, {"id": "lib_openfoodfactsapi_makeapirequest", "label": "makeApiRequest()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L64"}, {"id": "lib_openfoodfactsapi_searchbybarcode", "label": "searchByBarcode()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L99"}, {"id": "lib_openfoodfactsapi_searchbyname", "label": "searchByName()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L118"}, {"id": "lib_openfoodfactsapi_fetchallresults", "label": "fetchAllResults()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L138"}, {"id": "lib_openfoodfactsapi_sortproducts", "label": "sortProducts()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L175"}, {"id": "lib_openfoodfactsapi_calculatecompletenessscore", "label": "calculateCompletenessScore()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L218"}, {"id": "lib_openfoodfactsapi_getgradevalue", "label": "getGradeValue()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L231"}, {"id": "lib_openfoodfactsapi_formatnutritiondata", "label": "formatNutritionData()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L239"}, {"id": "lib_openfoodfactsapi_detectsearchtype", "label": "detectSearchType()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L264"}, {"id": "lib_openfoodfactsapi_isvalidbarcode", "label": "isValidBarcode()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L269"}], "edges": [{"source": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "target": "lib_openfoodfactsapi_product", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "target": "lib_openfoodfactsapi_searchresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L34", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "target": "lib_openfoodfactsapi_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L43", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "target": "lib_openfoodfactsapi_nutriscanerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L54", "weight": 1.0}, {"source": "lib_openfoodfactsapi_nutriscanerror", "target": "lib_openfoodfactsapi_nutriscanerror_constructor", "relation": "method", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L55", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "target": "lib_openfoodfactsapi_makeapirequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\openFoodFactsApi.ts", "source_location": "L64", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_openfoodfactsapLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_cachemanager_ts", "label": "cacheManager.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L1"}, {"id": "lib_cachemanager_filtervalue", "label": "FilterValue", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L9"}, {"id": "lib_cachemanager_filterrecord", "label": "FilterRecord", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L17"}, {"id": "lib_cachemanager_cachedsearch", "label": "CachedSearch", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L19"}, {"id": "lib_cachemanager_cacheconfig", "label": "CacheConfig", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L29"}, {"id": "lib_cachemanager_default_config", "label": "DEFAULT_CONFIG", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L35"}, {"id": "lib_cachemanager_cachemanager", "label": "CacheManager", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L41"}, {"id": "lib_cachemanager_cachemanager_constructor", "label": ".constructor()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L46"}, {"id": "lib_cachemanager_cachemanager_generatecachekey", "label": ".generateCacheKey()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L53"}, {"id": "lib_cachemanager_cachemanager_generatesearchid", "label": ".generateSearchId()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L66"}, {"id": "lib_cachemanager_cachemanager_iscachevalid", "label": ".isCacheValid()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L73"}, {"id": "lib_cachemanager_cachemanager_getcacheindex", "label": ".getCacheIndex()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L80"}, {"id": "lib_cachemanager_cachemanager_updatecacheindex", "label": ".updateCacheIndex()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L92"}, {"id": "lib_cachemanager_cachemanager_getobjectsize", "label": ".getObjectSize()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L103"}, {"id": "lib_cachemanager_cachemanager_cleanupoldcaches", "label": ".cleanupOldCaches()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L110"}, {"id": "lib_cachemanager_cachemanager_savesearch", "label": ".saveSearch()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L158"}, {"id": "lib_cachemanager_cachemanager_getsearch", "label": ".getSearch()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L210"}, {"id": "lib_cachemanager_cachemanager_removesearch", "label": ".removeSearch()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L238"}, {"id": "lib_cachemanager_cachemanager_clearallcaches", "label": ".clearAllCaches()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L261"}, {"id": "lib_cachemanager_cachemanager_getcachestats", "label": ".getCacheStats()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L274"}, {"id": "lib_cachemanager_cachemanager_hasspacefordata", "label": ".hasSpaceForData()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L324"}, {"id": "lib_cachemanager_usecachemanager", "label": "useCacheManager()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L338"}], "edges": [{"source": "d_documents_github_nutriscan_lib_cachemanager_ts", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_cachemanager_ts", "target": "lib_openfoodfactsapi_product", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\cacheManager.ts", "source_location": "Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "label": "FilterBadge.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L1"}, {"id": "components_filterbadge_filterbadgeprops", "label": "FilterBadgeProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L7"}, {"id": "components_filterbadge_filterbadge", "label": "FilterBadge()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L14"}, {"id": "components_filterbadge_filterbadgesprops", "label": "FilterBadgesProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L40"}, {"id": "components_filterbadge_filterbadges", "label": "FilterBadges()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L46"}, {"id": "components_filterbadge_getfilterlabel", "label": "getFilterLabel()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L127"}, {"id": "components_filterbadge_getfiltercolor", "label": "getFilterColor()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L146"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "d_documents_github_nutriscan_components_ui_badge_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "ui_badge_badge", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "components_filterbadge_filterbadgeprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "components_filterbadge_filterbadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L14", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "components_filterbadge_filterbadgesprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L40", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "components_filterbadge_filterbadges", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L46", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "components_filterbadge_getfilterlabel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L127", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filterbadge_tsx", "target": "components_filterbadge_getfiltercolor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterBadge.tsx", "source_location": "L146", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_filterbadge_filterbadges", "callee": "filtLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sobre_components_ctasection_tsx", "label": "CTASection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\CTASection.tsx", "source_location": "L1"}, {"id": "components_ctasection_ctasection", "label": "CTASection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\CTASection.tsx", "source_location": "L6"}], "edges": [{"source": "d_documents_github_nutriscan_app_sobre_components_ctasection_tsx", "target": "link", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\CTASection.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_ctasection_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\CTASection.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_ctasection_tsx", "target": "components_ctasection_ctasection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\CTASection.tsx", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_ctasection_ctasection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\CTASection.tsx", "source_location": "L60"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "label": "PersuasiveCTA.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L1"}, {"id": "landing_persuasivecta_persuasivecta", "label": "PersuasiveCTA()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L9"}, {"id": "landing_persuasivecta_arrowright", "label": "ArrowRight()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L132"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "navigation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "hooks_use_search_logic_usesearchlogic", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "landing_persuasivecta_persuasivecta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_landing_persuasivecta_tsx", "target": "landing_persuasivecta_arrowright", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L132", "weight": 1.0}], "raw_calls": [{"caller_nid": "landing_persuasivecta_persuasivecta", "callee": "useRouter", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L10"}, {"caller_nid": "landing_persuasivecta_persuasivecta", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L11"}, {"caller_nid": "landing_persuasivecta_persuasivecta", "callee": "useSearchLogic", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L12"}, {"caller_nid": "landing_persuasivecta_persuasivecta", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L102"}, {"caller_nid": "landing_persuasivecta_persuasivecta", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\landing\\PersuasiveCTA.tsx", "source_location": "L115"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_cardlist_tsx", "label": "CardList.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L1"}, {"id": "components_cardlist_produto", "label": "Produto", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L4"}, {"id": "components_cardlist_cardlistprops", "label": "CardListProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L15"}, {"id": "components_cardlist_cardlist", "label": "CardList()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L19"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "d_documents_github_nutriscan_app_actions_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "app_actions_listarprodutos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "d_documents_github_nutriscan_app_components_listaproductcard_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "components_listaproductcard_listaproductcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "components_cardlist_produto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "components_cardlist_cardlistprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L15", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cardlist_tsx", "target": "components_cardlist_cardlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L19", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_cardlist_cardlist", "callee": "listarProdutos", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L20"}, {"caller_nid": "components_cardlist_cardlist", "callee": "filter", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L30"}, {"caller_nid": "components_cardlist_cardlist", "callee": "filter", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L31"}, {"caller_nid": "components_cardlist_cardlist", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L38"}, {"caller_nid": "components_cardlist_cardlist", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CardList.tsx", "source_location": "L54"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_geolocation_ts", "label": "geolocation.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L1"}, {"id": "lib_geolocation_countryinfo", "label": "CountryInfo", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L6"}, {"id": "lib_geolocation_iscachevalid", "label": "isCacheValid()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L18"}, {"id": "lib_geolocation_getcachedcountry", "label": "getCachedCountry()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L35"}, {"id": "lib_geolocation_savetocache", "label": "saveToCache()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L52"}, {"id": "lib_geolocation_detectusercountry", "label": "detectUserCountry()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L74"}, {"id": "lib_geolocation_clearcountrycache", "label": "clearCountryCache()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L115"}, {"id": "lib_geolocation_getcurrentcountry", "label": "getCurrentCountry()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L124"}, {"id": "lib_geolocation_isbrazil", "label": "isBrazil()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L134"}, {"id": "lib_geolocation_getcountrycodeforapi", "label": "getCountryCodeForAPI()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L142"}], "edges": [{"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_countryinfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_iscachevalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L18", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_getcachedcountry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L35", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_savetocache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L52", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_detectusercountry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L74", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_clearcountrycache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L115", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_getcurrentcountry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L124", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_isbrazil", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L134", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_geolocation_ts", "target": "lib_geolocation_getcountrycodeforapi", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L142", "weight": 1.0}, {"source": "lib_geolocation_detectusercountry", "target": "lib_geolocation_iscachevalid", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L78", "weight": 1.0}, {"source": "lib_geolocation_detectusercountry", "target": "lib_geolocation_getcachedcountry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\geolocation.ts", "source_location": "L79", "weight": 1.0}, {"source": "lib_geolocation_detectusercountry", "target": "lib_geLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_productcard_tsx", "label": "ProductCard.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L1"}, {"id": "components_productcard_productcardprops", "label": "ProductCardProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L10"}, {"id": "components_productcard_nutri_grade_class", "label": "NUTRI_GRADE_CLASS", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L18"}, {"id": "components_productcard_getverdict", "label": "getVerdict()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L22"}, {"id": "components_productcard_getverdictdotbg", "label": "getVerdictDotBg()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L28"}, {"id": "components_productcard_getimageurl", "label": "getImageUrl()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L34"}, {"id": "components_productcard_nutriletter", "label": "NutriLetter()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L45"}, {"id": "components_productcard_verdictdot", "label": "VerdictDot()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L60"}, {"id": "components_productcard_mobilecard", "label": "MobileCard()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L75"}, {"id": "components_productcard_defaultcard", "label": "DefaultCard()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L152"}, {"id": "components_productcard_productcard", "label": "ProductCard()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L289"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "link", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "d_documents_github_nutriscan_components_optimizedimage_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "components_optimizedimage_optimizedimage", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "lib_openfoodfactsapi_product", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "lib_openfoodfactsapi_formatnutritiondata", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductCard.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productcard_tsx", "target": "d_documenLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "label": "use-search-logic.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L1"}, {"id": "hooks_use_search_logic_searchtype", "label": "SearchType", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L7"}, {"id": "hooks_use_search_logic_usesearchlogic", "label": "useSearchLogic()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L9"}], "edges": [{"source": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "target": "lib_openfoodfactsapi_detectsearchtype", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "target": "lib_openfoodfactsapi_isvalidbarcode", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "target": "hooks_use_search_logic_searchtype", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_search_logic_ts", "target": "hooks_use_search_logic_usesearchlogic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L9", "weight": 1.0}], "raw_calls": [{"caller_nid": "hooks_use_search_logic_usesearchlogic", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L10"}, {"caller_nid": "hooks_use_search_logic_usesearchlogic", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L11"}, {"caller_nid": "hooks_use_search_logic_usesearchlogic", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L13"}, {"caller_nid": "hooks_use_search_logic_usesearchlogic", "callee": "isValidBarcode", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-search-logic.ts", "source_location": "L22"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "label": "alert-dialog.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L1"}, {"id": "ui_alert_dialog_alertdialogoverlay", "label": "AlertDialogOverlay", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L15"}, {"id": "ui_alert_dialog_alertdialogcontent", "label": "AlertDialogContent", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L30"}, {"id": "ui_alert_dialog_alertdialogheader", "label": "AlertDialogHeader()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L48"}, {"id": "ui_alert_dialog_alertdialogfooter", "label": "AlertDialogFooter()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L62"}, {"id": "ui_alert_dialog_alertdialogtitle", "label": "AlertDialogTitle", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L76"}, {"id": "ui_alert_dialog_alertdialogdescription", "label": "AlertDialogDescription", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L88"}, {"id": "ui_alert_dialog_alertdialogaction", "label": "AlertDialogAction", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L101"}, {"id": "ui_alert_dialog_alertdialogcancel", "label": "AlertDialogCancel", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L113"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "react_alert_dialog", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "ui_button_buttonvariants", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "ui_alert_dialog_alertdialogoverlay", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L15", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "ui_alert_dialog_alertdialogcontent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L30", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "ui_alert_dialog_alertdialogheader", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L48", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_alert_dialog_tsx", "target": "ui_alert_dialog_alertdialogfooter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\alert-dialog.tsx", "source_location": "L62", "weightLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "label": "NutritionChart.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L1"}, {"id": "components_nutritionchart_nutritiondata", "label": "NutritionData", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L6"}, {"id": "components_nutritionchart_nutritionchartprops", "label": "NutritionChartProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L16"}, {"id": "components_nutritionchart_nutritionchart", "label": "NutritionChart()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L21"}, {"id": "components_nutritionchart_nutritionsummaryprops", "label": "NutritionSummaryProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L165"}, {"id": "components_nutritionchart_nutritionsummary", "label": "NutritionSummary()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L170"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "d_documents_github_nutriscan_components_ui_card_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "ui_card_card", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "ui_card_cardcontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "ui_card_cardheader", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "ui_card_cardtitle", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "d_documents_github_nutriscan_components_ui_badge_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "ui_badge_badge", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "components_nutritionchart_nutritiondata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "components_nutritionchart_nutritionchartprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L16", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "components_nutritionchart_nutritionchart", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L21", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "components_nutritionchart_nutritionsummaryprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutritionChart.tsx", "source_location": "L165", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutritionchart_tsx", "target": "components_nutritionchart_nutritionsummary", "relation": "coLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_slider_tsx", "label": "slider.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L1"}, {"id": "ui_slider_slider", "label": "Slider", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L8"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_slider_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_slider_tsx", "target": "react_slider", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_slider_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_slider_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_slider_tsx", "target": "ui_slider_slider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\slider.tsx", "source_location": "L8", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sitemap_ts", "label": "sitemap.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sitemap.ts", "source_location": "L1"}, {"id": "app_sitemap_sitemap", "label": "sitemap()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sitemap.ts", "source_location": "L3"}], "edges": [{"source": "d_documents_github_nutriscan_app_sitemap_ts", "target": "next", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sitemap.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sitemap_ts", "target": "app_sitemap_sitemap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sitemap.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_label_tsx", "label": "label.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L1"}, {"id": "ui_label_labelvariants", "label": "labelVariants", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L9"}, {"id": "ui_label_label", "label": "Label", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L13"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "react_label", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "class_variance_authority", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "ui_label_labelvariants", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_label_tsx", "target": "ui_label_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\label.tsx", "source_location": "L13", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_page_tsx", "label": "page.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L1"}, {"id": "app_page_home", "label": "Home()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L9"}], "edges": [{"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_header_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "components_header_header", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_footer_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "components_footer_footer", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_landing_hero_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "landing_hero_hero", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_landing_features_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "landing_features_features", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_landing_howitworks_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "landing_howitworks_howitworks", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_landing_donationsection_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "landing_donationsection_donationsection", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "d_documents_github_nutriscan_app_components_landing_trustbadges_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "landing_trustbadges_trustbadges", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_page_tsx", "target": "app_page_home", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\page.tsx", "source_location": "L9", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "label": "ProductSkeleton.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L1"}, {"id": "components_productskeleton_skeletonprops", "label": "SkeletonProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L4"}, {"id": "components_productskeleton_skeleton", "label": "Skeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L6"}, {"id": "components_productskeleton_productskeleton", "label": "ProductSkeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L17"}, {"id": "components_productskeleton_productcardskeleton", "label": "ProductCardSkeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L83"}, {"id": "components_productskeleton_nutritionbarskeleton", "label": "NutritionBarSkeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L104"}, {"id": "components_productskeleton_badgeskeleton", "label": "BadgeSkeleton()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L116"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "components_productskeleton_skeletonprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "components_productskeleton_skeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "components_productskeleton_productskeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L17", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "components_productskeleton_productcardskeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L83", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "components_productskeleton_nutritionbarskeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L104", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_productskeleton_tsx", "target": "components_productskeleton_badgeskeleton", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L116", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_productskeleton_skeleton", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L9"}, {"caller_nid": "components_productskeleton_productskeleton", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L19"}, {"caller_nid": "components_productskeleton_productskeleton", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L38"}, {"caller_nid": "components_productskeleton_productskeleton", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ProductSkeleton.tsx", "source_location": "L50"}, {"caLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "label": "FilterSidebar.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L1"}, {"id": "components_filtersidebar_filtersidebarprops", "label": "FilterSidebarProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L43"}, {"id": "components_filtersidebar_filtersidebar", "label": "FilterSidebar()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L60"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L18", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L19", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L19", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "d_documents_github_nutriscan_components_ui_input_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L20", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "ui_input_input", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L20", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "d_documents_github_nutriscan_components_ui_checkbox_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L21", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "ui_checkbox_checkbox", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L21", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "d_documents_github_nutriscan_components_ui_radio_group_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L22", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "ui_radio_group_radiogroup", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L22", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "ui_radio_group_radiogroupitem", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L22", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "d_documents_github_nutriscan_components_ui_switch_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\FilterSidebar.tsx", "source_location": "L23", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_filtersidebar_tsx", "target": "ui_switch_Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_items_tsx", "label": "items.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\items.tsx", "source_location": "L1"}, {"id": "components_items_items", "label": "Items()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\items.tsx", "source_location": "L3"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_items_tsx", "target": "d_documents_github_nutriscan_lib_prisma_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\items.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_items_tsx", "target": "components_items_items", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\items.tsx", "source_location": "L3", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_items_items", "callee": "findMany", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\items.tsx", "source_location": "L4"}, {"caller_nid": "components_items_items", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\items.tsx", "source_location": "L5"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_searchbar_tsx", "label": "SearchBar.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L1"}, {"id": "components_searchbar_searchbarprops", "label": "SearchBarProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L9"}, {"id": "components_searchbar_searchbar", "label": "SearchBar()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L16"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "navigation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "lib_openfoodfactsapi_detectsearchtype", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "lib_openfoodfactsapi_isvalidbarcode", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "components_searchbar_searchbarprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L9", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_searchbar_tsx", "target": "components_searchbar_searchbar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L16", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_searchbar_searchbar", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L22"}, {"caller_nid": "components_searchbar_searchbar", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L23"}, {"caller_nid": "components_searchbar_searchbar", "callee": "useRouter", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L24"}, {"caller_nid": "components_searchbar_searchbar", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L26"}, {"caller_nid": "components_searchbar_searchbar", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L58"}, {"caller_nid": "components_searchbar_searchbar", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\SearchBar.tsx", "source_location": "L67"}, {"caller_nid": "components_searchbar_searchbar",Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_sw_js", "label": "sw.js", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\sw.js", "source_location": "L1"}], "edges": [], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_errorboundary_tsx", "label": "ErrorBoundary.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L1"}, {"id": "components_errorboundary_props", "label": "Props", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L5"}, {"id": "components_errorboundary_state", "label": "State", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L10"}, {"id": "components_errorboundary_errorboundary", "label": "ErrorBoundary", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L18"}, {"id": "components_errorboundary_errorboundary_constructor", "label": ".constructor()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L19"}, {"id": "components_errorboundary_errorboundary_getderivedstatefromerror", "label": ".getDerivedStateFromError()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L24"}, {"id": "components_errorboundary_errorboundary_componentdidcatch", "label": ".componentDidCatch()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L28"}, {"id": "components_errorboundary_errorboundary_render", "label": ".render()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L47"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_errorboundary_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_errorboundary_tsx", "target": "components_errorboundary_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_errorboundary_tsx", "target": "components_errorboundary_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L10", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_errorboundary_tsx", "target": "components_errorboundary_errorboundary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L18", "weight": 1.0}, {"source": "components_errorboundary_errorboundary", "target": "components_errorboundary_errorboundary_constructor", "relation": "method", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L19", "weight": 1.0}, {"source": "components_errorboundary_errorboundary", "target": "components_errorboundary_errorboundary_getderivedstatefromerror", "relation": "method", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L24", "weight": 1.0}, {"source": "components_errorboundary_errorboundary", "target": "components_errorboundary_errorboundary_componentdidcatch", "relation": "method", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L28", "weight": 1.0}, {"source": "components_errorboundary_errorboundary", "target": "components_errorboundary_errorboundary_render", "relation": "method", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L47", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_errorboundary_errorboundary_constructor", "callee": "super", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L20"}, {"caller_nid": "components_errorboundary_errorboundary_componentdidcatch", "callee": "track", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L32"}, {"caller_nid": "components_errorboundary_errorboundary_componentdidcatch", "callee": "toISOString", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\ErrorBoundary.tsx", "source_location": "L37"}, {"caller_nid": "components_errorboundary_errorboundary_componentdidcatch", "callee": "error", "is_member_call": Line truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "label": "jsonCacheManager.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L1"}, {"id": "lib_jsoncachemanager_jsoncachedata", "label": "JsonCacheData", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L12"}, {"id": "lib_jsoncachemanager_jsoncachemanager", "label": "JsonCacheManager", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L18"}, {"id": "lib_jsoncachemanager_jsoncachemanager_constructor", "label": ".constructor()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L23"}, {"id": "lib_jsoncachemanager_jsoncachemanager_getinstance", "label": ".getInstance()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L46"}, {"id": "lib_jsoncachemanager_jsoncachemanager_loadcache", "label": ".loadCache()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L56"}, {"id": "lib_jsoncachemanager_jsoncachemanager_savecache", "label": ".saveCache()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L89"}, {"id": "lib_jsoncachemanager_jsoncachemanager_converttocachedproduct", "label": ".convertToCachedProduct()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L111"}, {"id": "lib_jsoncachemanager_jsoncachemanager_converttoapiproduct", "label": ".convertToAPIProduct()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L125"}, {"id": "lib_jsoncachemanager_jsoncachemanager_mergeproductdata", "label": ".mergeProductData()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L134"}, {"id": "lib_jsoncachemanager_jsoncachemanager_calculaterelevancescore", "label": ".calculateRelevanceScore()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L152"}, {"id": "lib_jsoncachemanager_jsoncachemanager_getproductbycode", "label": ".getProductByCode()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L188"}, {"id": "lib_jsoncachemanager_jsoncachemanager_searchproducts", "label": ".searchProducts()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L211"}, {"id": "lib_jsoncachemanager_jsoncachemanager_saveproduct", "label": ".saveProduct()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L289"}, {"id": "lib_jsoncachemanager_jsoncachemanager_saveproducts", "label": ".saveProducts()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L327"}, {"id": "lib_jsoncachemanager_jsoncachemanager_getstoragestats", "label": ".getStorageStats()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L384"}, {"id": "lib_jsoncachemanager_jsoncachemanager_clearcache", "label": ".clearCache()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L431"}, {"id": "lib_jsoncachemanager_jsoncachemanager_isinitialized", "label": ".isInitialized()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L450"}], "edges": [{"source": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "target": "fs", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "target": "fs", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "target": "path", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\jsonCacheManager.ts", "source_location": "L8", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "target": "d_documents_github_nutriscan_lib_openfoodfactsapi_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\GithLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_theme_toggle_tsx", "label": "theme-toggle.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L1"}, {"id": "components_theme_toggle_themetoggle", "label": "ThemeToggle()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L13"}], "edges": [{"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "next_themes", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "d_documents_github_nutriscan_components_ui_dropdown_menu_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "ui_dropdown_menu_dropdownmenu", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "ui_dropdown_menu_dropdownmenucontent", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "ui_dropdown_menu_dropdownmenuitem", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "ui_dropdown_menu_dropdownmenutrigger", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_theme_toggle_tsx", "target": "components_theme_toggle_themetoggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L13", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_theme_toggle_themetoggle", "callee": "useTheme", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\theme-toggle.tsx", "source_location": "L14"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sobre_components_missionsection_tsx", "label": "MissionSection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L1"}, {"id": "components_missionsection_mission_values", "label": "MISSION_VALUES", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L5"}, {"id": "components_missionsection_missionsection", "label": "MissionSection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L26"}], "edges": [{"source": "d_documents_github_nutriscan_app_sobre_components_missionsection_tsx", "target": "image", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_missionsection_tsx", "target": "components_missionsection_mission_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_missionsection_tsx", "target": "components_missionsection_missionsection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L26", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_missionsection_missionsection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L44"}, {"caller_nid": "components_missionsection_missionsection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\MissionSection.tsx", "source_location": "L70"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_hooks_use_geolocation_ts", "label": "use-geolocation.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L1"}, {"id": "hooks_use_geolocation_usegeolocation", "label": "useGeolocation()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L6"}, {"id": "hooks_use_geolocation_setscannedcountry", "label": "setScannedCountry()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L27"}], "edges": [{"source": "d_documents_github_nutriscan_hooks_use_geolocation_ts", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_geolocation_ts", "target": "d_documents_github_nutriscan_lib_geolocation_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_geolocation_ts", "target": "lib_geolocation_detectusercountry", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_geolocation_ts", "target": "hooks_use_geolocation_usegeolocation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_hooks_use_geolocation_ts", "target": "hooks_use_geolocation_setscannedcountry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "hooks_use_geolocation_usegeolocation", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L7"}, {"caller_nid": "hooks_use_geolocation_usegeolocation", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L8"}, {"caller_nid": "hooks_use_geolocation_usegeolocation", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\hooks\\use-geolocation.ts", "source_location": "L10"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_badge_tsx", "label": "badge.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L1"}, {"id": "ui_badge_badgevariants", "label": "badgeVariants", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L6"}, {"id": "ui_badge_badgeprops", "label": "BadgeProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L26"}, {"id": "ui_badge_badge", "label": "Badge()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L30"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "class_variance_authority", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "ui_badge_badgevariants", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "ui_badge_badgeprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L26", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_badge_tsx", "target": "ui_badge_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L30", "weight": 1.0}, {"source": "ui_badge_badge", "target": "ui_badge_badgevariants", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L32", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_badge_badge", "callee": "cn", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\badge.tsx", "source_location": "L32"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_input_tsx", "label": "input.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\input.tsx", "source_location": "L1"}, {"id": "ui_input_input", "label": "Input", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\input.tsx", "source_location": "L5"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_input_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\input.tsx", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_input_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\input.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_input_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\input.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_input_tsx", "target": "ui_input_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\input.tsx", "source_location": "L5", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "label": "NutriScoreBadge.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L1"}, {"id": "components_nutriscorebadge_nutriscorebadgeprops", "label": "NutriScoreBadgeProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L5"}, {"id": "components_nutriscorebadge_grade_info", "label": "GRADE_INFO", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L12"}, {"id": "components_nutriscorebadge_grade_class", "label": "GRADE_CLASS", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L20"}, {"id": "components_nutriscorebadge_size_class", "label": "SIZE_CLASS", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L24"}, {"id": "components_nutriscorebadge_nutriscorebadge", "label": "NutriScoreBadge()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L30"}, {"id": "components_nutriscorebadge_novabadgeprops", "label": "NovaBadgeProps", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L71"}, {"id": "components_nutriscorebadge_nova_info", "label": "NOVA_INFO", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L78"}, {"id": "components_nutriscorebadge_novabadge", "label": "NovaBadge()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L85"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_nutriscorebadgeprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_grade_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L12", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_grade_class", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L20", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_size_class", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L24", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_nutriscorebadge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L30", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_novabadgeprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\NutriScoreBadge.tsx", "source_location": "L71", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_nutriscorebadge_tsx", "target": "components_nutriscorebadge_nova_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\DLine truncated
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_prisma_ts", "label": "prisma.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\prisma.ts", "source_location": "L1"}, {"id": "lib_prisma_prisma", "label": "prisma", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\prisma.ts", "source_location": "L3"}], "edges": [{"source": "d_documents_github_nutriscan_lib_prisma_ts", "target": "client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\prisma.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_prisma_ts", "target": "lib_prisma_prisma", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\prisma.ts", "source_location": "L3", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_sobre_components_howitworkssection_tsx", "label": "HowItWorksSection.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L1"}, {"id": "components_howitworkssection_steps", "label": "STEPS", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L3"}, {"id": "components_howitworkssection_howitworkssection", "label": "HowItWorksSection()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L27"}], "edges": [{"source": "d_documents_github_nutriscan_app_sobre_components_howitworkssection_tsx", "target": "components_howitworkssection_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_sobre_components_howitworkssection_tsx", "target": "components_howitworkssection_howitworkssection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_howitworkssection_howitworkssection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L46"}, {"caller_nid": "components_howitworkssection_howitworkssection", "callee": "map", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\sobre\\components\\HowItWorksSection.tsx", "source_location": "L82"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "label": "CacheOnlySwitch.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L1"}, {"id": "components_cacheonlyswitch_cacheonlyswitch", "label": "CacheOnlySwitch()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L8"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "d_documents_github_nutriscan_components_ui_switch_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "ui_switch_switch", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "d_documents_github_nutriscan_components_ui_label_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "ui_label_label", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "lucide_react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_cacheonlyswitch_tsx", "target": "components_cacheonlyswitch_cacheonlyswitch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L8", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_cacheonlyswitch_cacheonlyswitch", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L9"}, {"caller_nid": "components_cacheonlyswitch_cacheonlyswitch", "callee": "useEffect", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\CacheOnlySwitch.tsx", "source_location": "L13"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_docs_resedesign_extract_js", "label": "extract.js", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L1"}, {"id": "resedesign_extract_fs", "label": "fs", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L1"}, {"id": "resedesign_extract_path", "label": "path", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L2"}, {"id": "resedesign_extract_html", "label": "html", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L3"}, {"id": "resedesign_extract_start", "label": "start", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L6"}, {"id": "resedesign_extract_end", "label": "end", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L7"}, {"id": "resedesign_extract_raw", "label": "raw", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L8"}, {"id": "resedesign_extract_decoded", "label": "decoded", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L11"}], "edges": [{"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "fs", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_fs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "path", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_end", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L7", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L8", "weight": 1.0}, {"source": "d_documents_github_nutriscan_docs_resedesign_extract_js", "target": "resedesign_extract_decoded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\docs\\resedesign\\extract.js", "source_location": "L11", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_lib_types_rybbit_d_ts", "label": "rybbit.d.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L1"}, {"id": "types_rybbit_d_rybbittrackevent", "label": "RybbitTrackEvent", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L6"}, {"id": "types_rybbit_d_rybbit", "label": "Rybbit", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L19"}, {"id": "types_rybbit_d_window", "label": "Window", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L24"}], "edges": [{"source": "d_documents_github_nutriscan_lib_types_rybbit_d_ts", "target": "types_rybbit_d_rybbittrackevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_types_rybbit_d_ts", "target": "types_rybbit_d_rybbit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L19", "weight": 1.0}, {"source": "d_documents_github_nutriscan_lib_types_rybbit_d_ts", "target": "types_rybbit_d_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\lib\\types\\rybbit.d.ts", "source_location": "L24", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_components_ui_separator_tsx", "label": "separator.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L1"}, {"id": "ui_separator_separator", "label": "Separator", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L8"}], "edges": [{"source": "d_documents_github_nutriscan_components_ui_separator_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_separator_tsx", "target": "react_separator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_separator_tsx", "target": "d_documents_github_nutriscan_lib_utils_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_separator_tsx", "target": "lib_utils_cn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_components_ui_separator_tsx", "target": "ui_separator_separator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\components\\ui\\separator.tsx", "source_location": "L8", "weight": 1.0}], "raw_calls": []}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_components_idinput_tsx", "label": "IdInput.tsx", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L1"}, {"id": "components_idinput_idinput", "label": "IdInput()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L8"}], "edges": [{"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "react", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "navigation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L3", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "d_documents_github_nutriscan_components_ui_input_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "ui_input_input", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L4", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "d_documents_github_nutriscan_components_ui_button_tsx", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "ui_button_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L5", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "d_documents_github_nutriscan_app_actions_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "app_actions_verificarlista", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L6", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_components_idinput_tsx", "target": "components_idinput_idinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L8", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_idinput_idinput", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L9"}, {"caller_nid": "components_idinput_idinput", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L10"}, {"caller_nid": "components_idinput_idinput", "callee": "useState", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L11"}, {"caller_nid": "components_idinput_idinput", "callee": "useRouter", "is_member_call": false, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\components\\IdInput.tsx", "source_location": "L12"}]}
@@ -1 +0,0 @@
{"nodes": [{"id": "d_documents_github_nutriscan_app_api_cache_sync_route_ts", "label": "route.ts", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L1"}, {"id": "sync_route_post", "label": "POST()", "file_type": "code", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L4"}], "edges": [{"source": "d_documents_github_nutriscan_app_api_cache_sync_route_ts", "target": "server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L1", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_cache_sync_route_ts", "target": "d_documents_github_nutriscan_lib_jsoncachemanager_ts", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_cache_sync_route_ts", "target": "lib_jsoncachemanager_jsoncachemanager", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L2", "weight": 1.0}, {"source": "d_documents_github_nutriscan_app_api_cache_sync_route_ts", "target": "sync_route_post", "relation": "contains", "confidence": "EXTRACTED", "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L4", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_route_post", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L6"}, {"caller_nid": "sync_route_post", "callee": "isArray", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L8"}, {"caller_nid": "sync_route_post", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L9"}, {"caller_nid": "sync_route_post", "callee": "saveProducts", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L16"}, {"caller_nid": "sync_route_post", "callee": "log", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L18"}, {"caller_nid": "sync_route_post", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L20"}, {"caller_nid": "sync_route_post", "callee": "error", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L26"}, {"caller_nid": "sync_route_post", "callee": "json", "is_member_call": true, "source_file": "D:\\Documents\\Github\\nutriscan\\app\\api\\cache\\sync\\route.ts", "source_location": "L27"}]}
Loaded 100 of 146 files, more files were not shown because too many files have changed in this diff. Show more