diff --git a/CRM_Ortodontia_Tutoria_Master.md b/CRM_Ortodontia_Tutoria_Master.md new file mode 100644 index 0000000..44637ec --- /dev/null +++ b/CRM_Ortodontia_Tutoria_Master.md @@ -0,0 +1,497 @@ +# CRM ORTODONTIA + TUTORIA ORTODÔNTICA + +--- + +# LISTA DE TAREFAS + +## FASE 1 — Documentação Fotográfica (armazenamento local) + +### Backend +- [x] Tabelas orto_photo_session, orto_photo, orto_photo_annotation no PostgreSQL +- [x] multer configurado — upload local em /app/media/orto-fotos/ +- [x] express.static servindo /app/media em /media +- [x] POST /api/orto/:tratamentoId/sessoes — criar/buscar sessão por tipo +- [x] GET /api/orto/:tratamentoId/sessoes — listar sessões com fotos +- [x] POST /api/orto/sessoes/:sessaoId/fotos — upload de foto para slot +- [x] DELETE /api/orto/fotos/:fotoId — excluir foto +- [x] GET /api/orto/:tratamentoId/completude — % de documentação preenchida + +### Frontend +- [x] OrthoPhotoWorkspace — substitui PhotoCompare placeholder +- [x] Tabs de sessão (Inicial / 3m / 6m / 12m / Finalização / Pós-contenção) +- [x] Grid de 15 slots (5 extraoral + 5 intraoral + 5 complementar) +- [x] Upload por clique no slot (file input) +- [x] Visualizador de foto (modal fullscreen) +- [x] Exclusão de foto com confirmação +- [x] Indicador de completude (%) +- [x] Comparador lado a lado (selecionar 2 slots e comparar) +- [x] backend.ts — métodos getOrtoSessoes, uploadOrtoFoto, deleteOrtoFoto, getOrtoCompletude + +## FASE 2 — Tutoria Integrada +- [x] Tabelas ortho_tutor_profile, ortho_tutoring_request, ortho_tutoring_message, ortho_tutoring_photo_package +- [x] Botão "Solicitar Tutoria" no painel do paciente (TutoriaSection.tsx) +- [x] Lista de tutores disponíveis com SLA e preço +- [x] Formulário de solicitação (escolha tutor, tipo, descrição) +- [x] Pacote automático gerado (todas as fotos do tratamento incluídas) +- [x] Chat inline por caso (CLINICA ↔ TUTOR) +- [x] Painel do tutor — receber, responder, fechar (TutorPainelView.tsx) +- [x] Status tracking: AGUARDANDO → EM_ANALISE → RESPONDIDO → FECHADO +- [x] Menu "PAINEL TUTOR" no Sidebar +- [x] Rota /tutoria-painel no App.tsx + +## FASE 3 — Planejamento Visual e PDFs +- [x] Marcações clínicas nas fotos — PhotoAnnotator.tsx (SVG overlay) + - Ferramentas: Seta, Linha, Círculo, Retângulo, Texto, Caneta livre + - Cores (6) + espessura (P/M/G) + desfazer + limpar + - Anotações persistidas no banco (orto_photo_annotation) + - Botão ANOTAR no viewer de fotos +- [x] PDF — Documentação fotográfica (grade 15 slots + fotos base64) +- [x] PDF — Evolução ortodôntica (timeline cronológico) +- [x] PDF — Caso clínico para tutoria (triagem + diagnóstico + fotos) +- [x] jsPDF instalado (client-side, sem servidor) +- [x] OrthoReports.tsx integrado no OrthoDetailPanel +- [ ] Planejamento visual (vetores de movimentação) — Fase 4 +- [ ] Tutor anota diretamente no painel de tutoria — próximo passo + +## MARKETPLACE DE TUTORES (GLOBAL) +- [x] Fluxo de candidatura self-service para dentistas (TutorCandidaturaView) +- [x] Formulário acadêmico em 3 passos (dados pessoais / formação / perfil público) +- [x] Status tracking: PENDENTE → AGUARDANDO_PAGAMENTO → ATIVO / REJEITADO +- [x] Painel admin de gestão (AdminGestaoTutoresView) — 3 abas: Candidaturas / Ativos / Configurações +- [x] Aprovação/rejeição com campo de observação +- [x] Configuração de taxa de inscrição + chave PIX fallback +- [x] Integração MercadoPago — pagamento único (PIX / cartão / boleto) +- [x] Webhook automático — ativa perfil ao detectar pagamento aprovado +- [x] Confirmação manual de pagamento pelo admin (fallback) +- [x] Tutor global — disponível para TODAS as clínicas do sistema +- [x] Criação automática de ortho_tutor_profile após ativação +- [x] Tabelas: tutor_candidatura, tutor_config, tutor_pagamento +- [x] Sidebar: "SER TUTOR ORTO" (dentistas) + "GESTÃO TUTORES" (admin) + +## FASE 4 — Marketplace e IA +- [ ] Marketplace público de tutores +- [ ] Sistema de pagamento +- [ ] IA clínica (sugestão de diagnóstico, sequência de fios) +- [ ] Rede colaborativa entre clínicas +- [ ] App mobile para registro fotográfico + +## MIGRAÇÃO STORAGE +- [ ] Substituir multer local por Wasabi S3 +- [ ] Manter URLs compatíveis (alterar apenas o driver de storage) +- [ ] Migração das fotos existentes para o Wasabi + +--- + +## Visão Estratégica + +Projeto de CRM Ortodôntico integrado com Marketplace de Tutoria Ortodôntica, Documentação Fotográfica, Planejamento Clínico e Colaboração entre Profissionais. + +--- + +# MÓDULO CRM ORTODONTIA + +## Componentes Principais + +- PatientHeader +- ClinicalTriage +- Diagnosis +- TreatmentPlan +- Timeline +- NewEvolution +- PhotoCompare +- ContencaoTermo +- ClinicalRequests +- MaintenanceReport +- Finalization + +## Fluxo do Tratamento + +Triagem → Diagnóstico → Planejamento → Evoluções → Controle Fotográfico → Relatórios → Finalização → Contenção + +--- + +# MÓDULO DE TUTORIA ORTODÔNTICA + +## Objetivo + +Permitir que ortodontistas experientes ofereçam: + +- Segunda opinião +- Planejamento ortodôntico +- Mentoria clínica +- Discussão de casos +- Encaminhamento de pacientes + +## Perfis + +### Tutor Ortodôntico + +- Publicar portfólio +- Receber solicitações +- Definir preços +- Definir SLA +- Receber pagamentos + +### Solicitante + +- Enviar casos +- Escolher tutor +- Acompanhar status +- Receber pareceres + +--- + +# INTEGRAÇÃO DA TUTORIA AO CRM + +A tutoria não será um sistema isolado. + +Será incorporada ao painel do paciente: + +Paciente +├── Triagem +├── Diagnóstico +├── Plano +├── Evoluções +├── Fotografias +├── Tutoria Ortodôntica +├── Relatórios +└── Finalização + +## Solicitar Tutoria + +Botão: + +[ Solicitar Tutoria ] + +### Tipos + +- Segunda opinião +- Planejamento completo +- Discussão de caso +- Alinhadores +- Orto-cirúrgico +- Encaminhamento + +--- + +# PACOTE AUTOMÁTICO PARA O TUTOR + +Ao solicitar uma tutoria o sistema gera automaticamente: + +## Dados Clínicos + +- Triagem +- Diagnóstico +- Planejamento +- Evoluções + +## Dados Ortodônticos + +- Classe de Angle +- Fio atual +- Cooperação +- Status do tratamento + +## Arquivos + +- Fotografias +- Radiografias +- Tomografias +- STL +- PDFs + +--- + +# MÓDULO DE DOCUMENTAÇÃO FOTOGRÁFICA + +## Objetivo + +Transformar as fotografias em uma documentação ortodôntica completa. + +--- + +# WORKSPACE FOTOGRÁFICO + +Novo módulo: + +OrthoPhotoWorkspace + +Recursos: + +- Upload +- Organização +- Comparação +- Anotações +- Compartilhamento +- Exportação + +--- + +# SESSÕES FOTOGRÁFICAS + +Cada paciente pode possuir: + +- Inicial +- Controle 3 meses +- Controle 6 meses +- Controle 12 meses +- Finalização +- Pós contenção + +--- + +# TEMPLATE ORTODÔNTICO PADRÃO + +## Extraoral + +- Frontal sorrindo +- Frontal repouso +- Perfil direito +- Perfil esquerdo +- Perfil sorrindo + +## Intraoral + +- Frontal oclusão +- Lateral direita +- Lateral esquerda +- Oclusal superior +- Oclusal inferior + +## Complementares + +- Linha média +- Overjet +- Overbite +- Mordida cruzada +- Mordida aberta + +--- + +# SISTEMA DE SLOTS + +Cada fotografia ocupa posição específica. + +Garantindo padronização clínica. + +--- + +# EDITOR DE IMAGENS + +Ferramentas: + +- Zoom +- Crop +- Rotação +- Contraste +- Brilho +- Espelhamento + +--- + +# MARCAÇÕES CLÍNICAS + +Permitir desenhar diretamente nas imagens. + +Tipos: + +- Seta +- Linha +- Texto +- Círculo +- Área destacada + +Exemplos: + +- Linha média desviada +- Apinhamento +- Torque inadequado +- Mordida cruzada + +--- + +# COMPARADOR FOTOGRÁFICO + +Modos: + +- Inicial × Atual +- Inicial × Final +- 6 meses × 12 meses + +Visualizações: + +- Slider +- Lado a lado +- Sobreposição + +--- + +# CHECKLIST DE DOCUMENTAÇÃO + +Validação automática: + +- Frontal +- Perfil direito +- Perfil esquerdo +- Oclusal superior +- Oclusal inferior +- Oclusão frontal + +Indicador: + +Documentação Completa (%) + +--- + +# TUTORIA SOBRE FOTOGRAFIAS + +## Enviar para Tutor + +O sistema envia: + +- Fotos +- Diagnóstico +- Planejamento +- Timeline +- Evoluções + +--- + +# RESPOSTA DO TUTOR + +Tutor pode: + +- Escrever parecer +- Marcar fotografias +- Desenhar vetores +- Apontar correções +- Criar planejamento visual + +--- + +# PLANEJAMENTO VISUAL + +Ferramenta Premium. + +Permite: + +- Vetores de movimentação +- Correção de linha média +- Planejamento de fechamento de espaços +- Estratégia de extrações +- Planejamento de alinhadores + +--- + +# RELATÓRIOS + +## PDF Documentação + +Documentação completa organizada. + +## PDF Evolução + +Comparação cronológica. + +## PDF Tutoria + +- Caso clínico +- Fotografias +- Comentários +- Marcações +- Planejamento + +--- + +# BANCO DE DADOS + +## ortho_tutor_profile + +Cadastro do tutor. + +## ortho_tutoring_request + +Solicitações de tutoria. + +## ortho_tutoring_message + +Chat do caso. + +## ortho_tutoring_financial + +Controle financeiro. + +## ortho_photo_session + +Sessões fotográficas. + +## ortho_photo + +Fotografias. + +## ortho_photo_annotation + +Marcações sobre imagens. + +## ortho_photo_compare + +Comparações. + +## ortho_tutoring_photo_package + +Pacotes enviados para tutores. + +--- + +# ROADMAP + +## Fase 1 + +- Persistência das fotos +- Sessões fotográficas +- Upload real +- Comparação + +## Fase 2 + +- Tutoria integrada +- Chat +- Envio de documentação + +## Fase 3 + +- Planejamento visual +- Marcações do tutor +- PDFs avançados + +## Fase 4 + +- Marketplace público +- IA clínica +- Rede colaborativa de ortodontistas + +--- + +# DIFERENCIAL + +CRM Ortodontia + ++ + +Documentação Fotográfica Profissional + ++ + +Tutoria Ortodôntica + ++ + +Planejamento Visual + ++ + +Marketplace de Especialistas + ++ + +Colaboração Entre Clínicas diff --git a/PENDENCIAS_E_DEPLOY.md b/PENDENCIAS_E_DEPLOY.md new file mode 100644 index 0000000..5b28cb5 --- /dev/null +++ b/PENDENCIAS_E_DEPLOY.md @@ -0,0 +1,211 @@ +# ScoreOdonto — Pendências, Tutoria e Deploy (dev) + +> Documento de handoff. Última atualização: 2026-06-08. +> Contexto completo da arquitetura de agenda/workspaces: ver memória do projeto +> `project-agenda-workspace-architecture.md`. + +--- + +## 1. Deploy no container de dev (IMPORTANTE) + +**`dev.scoreodonto.com` NÃO é Vite HMR.** É servido pelo container +`scoreodontocom-scoreodonto-frontend-1` (projeto compose `scoreodontocom`, +de `docker-compose.yml`) rodando **nginx sobre um `vite build` estático**. +Edições no fonte **não aparecem sozinhas** — exigem rebuild + recreate manual. + +### Banco é de PRODUÇÃO (compartilhado) +- Backend de dev (VPS 4) e produção (VPS 1) usam o **MESMO Postgres na VPS 3** + (`10.99.0.3:5432/scoreodonto`). Não há banco de dev separado. +- Migrações aditivas idempotentes rodam no startup (`runMigrations()` em `server.js`). +- Qualquer dado criado "testando" em dev é **dado real de produção** → sempre limpar. +- A constraint `vinculos_role_check` é DROP+ADD a cada boot. Ao deployar na prod, + o `server.js` de lá PRECISA incluir `'protetico'`, senão o ADD falha se já houver + vínculo protético criado via dev. + +### Comandos de deploy +```bash +cd /home/deploy/stack/scoreodonto.com +# Frontend (server.js NÃO é hot-mount; só plugins/sessions/media são): +docker compose build scoreodonto-frontend && docker compose up -d --force-recreate scoreodonto-frontend +# Backend: +docker compose build scoreodonto-backend && docker compose up -d --force-recreate scoreodonto-backend +``` +- Verificar: o hash do bundle em `https://dev.scoreodonto.com/` (`/assets/index-*.js`) muda. +- `vite build` NÃO faz type-check bloqueante → erros TS não quebram o build, mas + podem estourar em runtime. Conferir após deploy. +- Logs de migração: `docker logs --tail 20 scoreodontocom-scoreodonto-backend-1 | grep -i migration` + (esperado: `[MIGRATION] all migrations OK`). + +### Efeito colateral relevante +Quando esta sessão começou, o dev servia um **build antigo** (`index-DWdouzmk.js`). +Os rebuilds passaram a publicar o **working tree atual**, que inclui vários arquivos +**untracked** (WIP de outra sessão): `OrthoView`, `OrthoReports`, `OrthoPhotoWorkspace`, +`TutoriaSection`, `SuperAdminView`, `GestaoEquipeView`, `Tutor*View`, `plugins/`, etc. +→ Bugs nesses arquivos só passaram a **aparecer agora** por causa do deploy, não por edição. + +--- + +## 2. TUTORIA no modal de tratamento de orto — ✅ CAUSA RAIZ RESOLVIDA + +**Relato do usuário:** "ferrou com a tutoria no modal que administra o tratamento de orto." + +**CAUSA RAIZ (confirmada):** as telas WIP (`TutoriaSection`, `OrthoPhotoWorkspace`, +`PhotoAnnotator`, `TutorPainelView`, `TutorCandidaturaView`, `AdminGestaoTutoresView`) +chamavam **24 métodos do `HybridBackend` que não existiam** em `services/backend.ts` +(só `getCurrentUserName` existia) → crash `HybridBackend.X is not a function` assim que +o rebuild publicou esses componentes. Além disso o **backend não tinha nenhuma tabela +nem endpoint** de orto/tutoria. + +**CORRIGIDO nesta sessão:** +- `services/backend.ts`: adicionados os 24 métodos via helper `_ortoJson` (chama o + endpoint real e **degrada com fallback seguro** se a rota faltar → fim do crash). +- `backend/server.js`: **9 tabelas** (`ortho_photo_session`, `ortho_photo`, + `ortho_photo_annotation`, `ortho_tutor_config`, `ortho_tutor_candidatura`, + `ortho_tutor_profile`, `ortho_tutoring_request`, `ortho_tutoring_message`, + `ortho_tutoring_photo_package`) + **25 endpoints** + upload real de fotos via `multer` + no volume persistente `/app/media`, servidas por `/api/orto/fotos/:id/raw`. +- `backend/package.json`: + `multer`. +- Validado: migrations OK, 9 tabelas no banco, endpoints respondendo (200/401/404). + Frontend e backend rebuildados → live no dev. + +**FEITO depois:** +- [x] `OrthoDetailPanel` agora renderiza `OrthoPhotoWorkspace` + `TutoriaSection` + (no lugar do `PhotoCompare` placeholder) — a tutoria/fotos vivem no modal do paciente. +- [x] **Sessões mensais**: orto é mensal → `ortho_photo_session` ganhou `rotulo`+`data_ref`; + o workspace cria sessão por mês (input `month`) + especiais (INICIAL/FINALIZAÇÃO/ + PÓS-CONTENÇÃO); tabs dinâmicas ordenadas. Validado end-to-end. +- [x] **Exportar documentação**: botão EXPORTAR → modal seleciona "completa" (tudo) ou + fotos específicas (checkbox por foto, agrupado por sessão) → abre view de impressão + (navegador salva como PDF). Sem dependência nova. + +**FEITO depois (cont.):** +- [x] **Tratamentos de orto persistem**: tabelas `ortho_tratamento` + `ortho_evolucao` + (triagem/diagnóstico/flags em JSONB); endpoints GET/POST/PUT + `/evolucoes` + + `/finalizar`. `backend.ts` troca o mock t1/t2 por chamadas reais (mappers snake↔camel). + Botão "NOVO TRATAMENTO" abre modal de criação (paciente/plano/diagnóstico/triagem). + Adicionar evolução atualiza `fio_atual`/`ultima_consulta`; finalizar grava contenção. + Validado end-to-end. +- [x] Comparador cross-sessão (mesmo slot, sessão A × B / mês a mês) com modos + **lado a lado / slider / sobreposição**. + +**FEITO depois (cont.):** +- [x] **MercadoPago real**: `POST /tutoria/candidaturas/:id/pagamento` cria uma + preference (Checkout Pro) com a `taxa_inscricao` da config, `external_reference=cand:`, + `back_urls` e `notification_url` → devolve `init_point`. `POST /tutoria/mp-webhook` + (público) consulta o pagamento e, se `approved`, ativa o tutor automaticamente + (`ativarCandidaturaTutor`, reaproveitado pelo confirmar-pagamento do admin). + Sem `mp_access_token` na config → fallback honesto (ativação manual). Admin configura + token/taxa em `AdminGestaoTutoresView`. **Caveat:** não testado contra a API real do MP + (sem credenciais); fallback e webhook-noop validados. + +**FEITO depois (cont.):** +- [x] **GestaoEquipeView corrigida** (estava roteada em `/gestao-equipe` e quebrava igual a + tutoria — chamava 12 métodos inexistentes). Backend: tabelas `setores`/`funcoes` + + colunas `vinculos.setor_id/funcao_id`; endpoints membros (GET com nomes, POST com + setor/função, **+PUT**, DELETE) e setores/funções CRUD (todos `tenantGuard`). + `backend.ts`: os 12 métodos. Validado end-to-end + isolamento de tenant (403). +- [x] **PDF nativo** (`jspdf` adicionado às deps): o EXPORTAR agora gera um PDF real + (fotos agrupadas por sessão, 3/linha, legenda do slot) via canvas→jsPDF; botão + IMPRIMIR mantém o print→PDF como alternativa. **Caveat:** geração é client-side + (jsPDF+canvas), validei só install/tsc/build, não a renderização no navegador. + +**FEITO depois (cont.):** +- [x] **Planejamento visual** no `PhotoAnnotator`: grupo PLANEJ. com **vetor de + movimentação** (haste + barra de origem + cabeça larga, arrastar da posição atual → + destino), **marca de extração** (X, clique no dente) e **linha média** (referência + vertical tracejada, clique). Persistem como anotações (JSONB) — sem mudança no backend. + +**FEITO depois (cont.):** +- [x] **Type-gaps zerados — `tsc` do frontend agora passa com 0 erros.** Bug real + corrigido em `FinanceiroView` (`getPacientes` retorna `{data,total}` → usava o objeto + inteiro como lista, quebrando a busca → agora `results.data`); `TutorPainelView` ganhou + os campos financeiros na interface `Solicitacao`. Login/RxConfig limparam junto. + +**FEITO depois (cont.):** +- [x] **Calibração de escala (mm)** no `PhotoAnnotator`: ferramenta ESCALA (arrastar sobre + distância conhecida → informa o valor real em mm) define mm/px; os **vetores de + movimentação passam a exibir a magnitude em mm**. Rótulos renderizados fora do SVG + (HTML posicionado por `imgDim`) p/ não distorcer com o viewBox. Persiste no JSONB. +- [x] `RxConfigView` usava props inexistentes do `PageHeader` (`subtitle`/`icon`) → trocado + por `description` (subtítulo agora aparece). **Resta 1 erro tsc pré-existente** em + `LoginView:490` (comparação morta no fluxo de cadastro/auth) — deixado de propósito: + é lógica de auth e mascarar esconderia a intenção do autor; funciona em runtime. +- [x] Comparador ganhou modo **EVOLUÇÃO**: mesmo slot em todas as sessões/meses lado a + lado (faixa horizontal cronológica) — além de lado a lado / slider / sobreposição. +- [x] Vínculo com o cadastro de pacientes: o modal de Novo Tratamento tem busca no + cadastro (`getPacientes`) que preenche `paciente_id` + nome + nascimento; digitar + livre cria paciente avulso (sem vínculo). Frontend-only, validado por tsc/build. + +--- + +## 2b. Apuração original (histórico) + +**Apuração (fatos):** +- Não foi editado nenhum arquivo de orto/tutoria nesta sessão. Todos estão **untracked** + (`git status` → `??`): `OrthoView.tsx`, `OrthoReports.tsx`, `TutoriaSection.tsx`, + `TutorPainelView.tsx`, `TutorCandidaturaView.tsx`, `AdminGestaoTutoresView.tsx`. +- `OrthoView.tsx` **não tem nenhuma referência a "tutor"**. +- `TutoriaSection.tsx` **não é importada em lugar nenhum** (código solto/WIP). +- Quem referencia tutor: **`OrthoReports.tsx`** (e os Tutor*View). +- Único toque indireto possível: `services/backend.ts` (eu alterei `getCurrentRole`, + mas só com fallback p/ superadmin quando não há workspace — não afeta dentista/tutoria; + `getCurrentUserName`, usado pela TutoriaSection, NÃO foi alterado). +- Provável causa: o rebuild publicou a versão WIP da tutoria que antes não estava no ar. + +**PENDENTE — preciso do sintoma para diagnosticar:** +- [ ] Onde exatamente? (OrthoView do paciente / OrthoReports / "Meus Tratamentos" / outro) +- [ ] O que acontece? (crash/tela branca / botão sumiu / dado não carrega / erro console) +- [ ] Mensagem de erro no console do navegador? + +→ Com o sintoma, achar a causa raiz em `OrthoReports.tsx` / `TutoriaSection.tsx` e corrigir. + +--- + +## 3. Status das fases (arquitetura agenda/workspaces) + +- [x] **Fase 0** — Cadastro: 5 cards de perfil com preço (Clínica R$499 separada). `LoginView.tsx`. +- [x] **Fase 1** — Workspace pessoal automático no `/api/register` (dentista/protético/paciente); + `clinicas.tipo`+`owner_id`; `protetico` adicionado ao `vinculos_role_check`. Fim do beco "aguardando-convite". +- [x] **Fase 2** — Identidade global: `dentistas.usuario_id` + backfill por email; criação seta usuario_id. +- [x] **Fase 3** — Anti-overbooking global: `POST /api/agendamentos` resolve identidade do + profissional e bloqueia sobreposição em QUALQUER clínica → 409 `{conflito, ocupado, podeRegistrarInteresse}`. +- [~] **Fase 4** — Fila de interesse: + - [x] Backend: tabela `interesses_agenda`, `POST/GET /api/interesses`, hook no DELETE de + agendamento que notifica interessados como `enviado_por='sistema'` e marca `liberado`. + - [x] Frontend Parte 1: AgendaView mostra painel "Horário ocupado" no 409 → registrar interesse (com minutos de espera). + - [x] Frontend Parte 2: dentista vê "Pedidos de interesse" (sino + badge + modal; GET retorna `clinica_nome`). + - [x] `POST /api/clinicas` passou a setar `owner_id`+`tipo`. + - [ ] **FALTA**: endpoint **"tentar liberar"** (clínica pede → dentista decide mover/cancelar o ocupante). + - [ ] **FALTA**: **re-notificação periódica** do sistema enquanto o dentista demora (job/cron), + sempre rotulada como "notificação do sistema" (impessoal). +- [ ] **Fase 5** — Odontodelivery: diretório (`disponivel_diretorio` já existe) → pedido de horário ao freelancer. + +### Regras de negócio confirmadas +- Profissional não pode estar em 2 lugares ao mesmo tempo (invariante: 1 agendamento por slot). +- Conflito não é "não" seco: vira fila de INTERESSE (não trava o slot). Clínica pode: registrar + interesse com tempo de espera (expira), escolher outro horário, ou pedir pro dentista liberar. +- Todos têm workspace (pessoal automático no cadastro). + +--- + +## 4. Bugs pré-existentes encontrados (não introduzidos nesta sessão) + +- [ ] **`notificacoes.lida` é smallint**, mas `POST /api/superadmin/notificacoes` insere boolean + `false` → **recurso de notificação do superadmin quebrado** (corrigir para `0`). + (No meu código novo já usei `0`.) +- [ ] **`POST /api/agendamentos` default `status='Agendado'`** viola `agendamentos_status_check` + (só aceita Confirmado/Pendente/Concluido/Faltou) → criar sem status explícito dá 500. + Frontend hoje sempre manda status válido. Não há status 'Cancelado' (cancelar = DELETE). +- [ ] **`PUT /api/agendamentos/:id`** (mover horário) **ainda não passa pelo check de overlap** da Fase 3. + +--- + +## 5. Estado de versionamento + +- **NADA foi commitado** nesta sessão. Tudo está no working tree, rodando contra o banco de prod. +- Regra do projeto: **commit/push só com autorização explícita** — o push dispara o pipeline de + produção via webhook do Gitea (pode sobrescrever trabalho em andamento). +- Arquivos que ESTA sessão editou: `backend/server.js`, `frontend/App.tsx`, + `frontend/components/Sidebar.tsx`, `frontend/services/backend.ts`, `frontend/views/AgendaView.tsx`, + `frontend/views/LoginView.tsx`, `frontend/views/LandingPage.tsx`. + (Demais arquivos modificados/untracked são WIP de sessões anteriores.) diff --git a/backend/package.json b/backend/package.json index ae4eccf..7792e23 100644 --- a/backend/package.json +++ b/backend/package.json @@ -7,11 +7,13 @@ "start": "node server.js" }, "dependencies": { + "bcryptjs": "^2.4.3", "cors": "^2.8.6", "dotenv": "^17.3.1", "express": "^5.2.1", "googleapis": "^171.4.0", "jsonwebtoken": "^9.0.3", + "multer": "^1.4.5-lts.1", "pg": "^8.11.3", "ioredis": "^5.4.1" } diff --git a/backend/server.js b/backend/server.js index 0a04bc9..892fe36 100644 --- a/backend/server.js +++ b/backend/server.js @@ -5,9 +5,17 @@ import Redis from 'ioredis'; import cors from 'cors'; import { google } from 'googleapis'; import jwt from 'jsonwebtoken'; +import multer from 'multer'; +import fs from 'fs'; +import path from 'path'; +import bcrypt from 'bcryptjs'; const { Pool } = pg; const JWT_SECRET = process.env.JWT_SECRET || 'scoreodonto_secret_key_2026'; +// Documentação fotográfica de ortodontia: uploads vão para o volume persistente +// /app/media (montado de /home/deploy/scoreodonto-media), servidos via /api/orto/fotos/:id/raw. +const MEDIA_ROOT = process.env.MEDIA_PATH || '/app/media'; +const ortoUpload = multer({ storage: multer.memoryStorage(), limits: { fileSize: 20 * 1024 * 1024 } }); // ============================================================================= // DATABASE — PostgreSQL nativo (pg Pool) @@ -62,6 +70,60 @@ function buildUpdate(table, obj, whereCol, whereVal) { // Helper: convert PostgreSQL error codes to friendly messages function pgErrCode(err) { return err.code; } // '23505' = unique violation +// ============================================================================= +// SENHAS (bcrypt) + provisionamento de contas +// ============================================================================= +const SENHA_ROUNDS = 10; +async function hashSenha(plain) { return bcrypt.hash(String(plain), SENHA_ROUNDS); } +function isHashed(s) { return typeof s === 'string' && /^\$2[aby]\$/.test(s); } +// Verifica senha; migra senhas legadas em texto puro para hash de forma preguiçosa. +async function verificarSenha(userId, plainInput, stored) { + if (isHashed(stored)) return bcrypt.compare(String(plainInput), stored); + if (stored != null && String(plainInput) === String(stored)) { + try { await pool.query('UPDATE usuarios SET senha = $1 WHERE id = $2', [await hashSenha(plainInput), userId]); } catch { /* ignore */ } + return true; + } + return false; +} +// Senha temporária legível (sem caracteres ambíguos). +function gerarSenhaTemp() { + const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; + let s = ''; + for (let i = 0; i < 8; i++) s += chars[Math.floor(Math.random() * chars.length)]; + return s; +} +// Encontra (ou provisiona) a conta de um membro pelo e-mail. Se não existe, +// cria conta FREE com o papel dado, senha temporária (hash) e troca obrigatória. +async function ensureUsuarioPorEmail(email, nome, role) { + const e = String(email).toLowerCase().trim(); + const { rows } = await pool.query('SELECT id, nome FROM usuarios WHERE lower(email) = $1', [e]); + if (rows.length) return { id: rows[0].id, nome: rows[0].nome, created: false, tempPassword: null }; + const id = 'u_' + Date.now() + '_' + Math.random().toString(36).slice(2, 7); + const temp = gerarSenhaTemp(); + await pool.query( + 'INSERT INTO usuarios (id, nome, email, senha, role, must_change_password) VALUES ($1,$2,$3,$4,$5,true)', + [id, (nome || e).toUpperCase(), e, await hashSenha(temp), role] + ); + return { id, nome: (nome || e).toUpperCase(), created: true, tempPassword: temp }; +} + +// Nível hierárquico do usuário NA clínica (dono/admin = topo). Usado para "só gerencia abaixo". +async function nivelNaClinica(userId, clinicaId) { + const { rows: cl } = await pool.query('SELECT owner_id FROM clinicas WHERE id = $1', [clinicaId]); + if (cl[0]?.owner_id === userId) return 100000; + const { rows } = await pool.query( + 'SELECT v.role, f.nivel FROM vinculos v LEFT JOIN funcoes f ON f.id = v.funcao_id WHERE v.usuario_id = $1 AND v.clinica_id = $2', + [userId, clinicaId]); + if (!rows.length) return -1; // não é membro + if (['donoclinica', 'donoconsultorio', 'admin'].includes(rows[0].role)) return 99999; + return rows[0].nivel ?? 0; +} +async function nivelDaFuncao(funcaoId) { + if (!funcaoId) return 0; + const { rows } = await pool.query('SELECT nivel FROM funcoes WHERE id = $1', [funcaoId]); + return rows[0]?.nivel ?? 0; +} + // ============================================================================= // DRAGONFLY / REDIS CACHE // ============================================================================= @@ -120,9 +182,312 @@ async function tenantGuard(req, res, next) { } } req.authUser = payload; + req.clinicaId = clinicaId || null; next(); } +function authGuard(req, res, next) { + const authHeader = req.headers['authorization']; + if (!authHeader?.startsWith('Bearer ')) return res.status(401).json({ error: 'Não autenticado.' }); + try { + req.authUser = jwt.verify(authHeader.split(' ')[1], JWT_SECRET); + next(); + } catch { + res.status(401).json({ error: 'Token inválido.' }); + } +} + +// ============================================================================= +// AUDITORIA GENÉRICA + PENDÊNCIAS DE AGENDA (Fase 1) +// ============================================================================= +async function actorNome(userId) { + if (!userId) return null; + try { const { rows } = await pool.query('SELECT nome FROM usuarios WHERE id = $1', [userId]); return rows[0]?.nome || null; } + catch { return null; } +} +// Registra um evento IMUTÁVEL de auditoria. Passe o client da transação quando houver. +async function registrarAudit(q, { clinicaId, entidade, entidadeId, acao, actorId, actorNome, detalhes }) { + const run = q || pool; + await run.query( + `INSERT INTO audit_log (id, clinica_id, entidade, entidade_id, acao, actor_id, actor_nome, detalhes, at) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,NOW())`, + ['au_' + Date.now() + '_' + Math.random().toString(36).slice(2, 7), clinicaId || null, entidade, entidadeId || null, acao, actorId || null, actorNome || null, JSON.stringify(detalhes || {})] + ); +} +// Abre uma pendência "a reagendar" (motivo: falta | cancelado | remarcar). +async function abrirPendencia(q, { clinicaId, pacienteId, pacienteNome, origemId, motivo }) { + const run = q || pool; + await run.query( + `INSERT INTO agenda_pendencias (id, clinica_id, paciente_id, paciente_nome, origem_agendamento_id, motivo, status, created_at) + VALUES ($1,$2,$3,$4,$5,$6,'aberta',NOW())`, + ['pend_' + Date.now() + '_' + Math.random().toString(36).slice(2, 7), clinicaId || null, pacienteId || null, pacienteNome || null, origemId || null, motivo] + ); +} +// Resolve pendências abertas de um paciente (ex.: ao surgir um novo agendamento futuro). +async function resolverPendenciasPaciente(q, clinicaId, pacienteId, { by, byNome, resolucao }) { + if (!pacienteId) return; + const run = q || pool; + await run.query( + `UPDATE agenda_pendencias SET status='resolvida', resolved_at=NOW(), resolved_by=$3, resolved_by_nome=$4, resolucao=$5 + WHERE clinica_id=$1 AND paciente_id=$2 AND status='aberta'`, + [clinicaId || null, pacienteId, by || null, byNome || null, resolucao || 'reagendado'] + ); +} +// Slot liberado (cancel/falta/remarcar) → notifica (como SISTEMA) interesses sobrepostos (Fase 4). +async function notificarInteressesSlotLivre(a) { + try { + const { rows: dr } = await pool.query('SELECT usuario_id FROM dentistas WHERE id = $1', [a.dentistaid]); + const profUid = dr[0]?.usuario_id || null; + if (!profUid) return; + const fim = a.end_time || a.start_time; + const { rows: ints } = await pool.query( + `SELECT id, solicitante_usuario_id FROM interesses_agenda + WHERE profissional_usuario_id = $1 AND status = 'aguardando' + AND start_time < $3 AND COALESCE(end_time, start_time) > $2`, + [profUid, a.start_time, fim]); + for (const it of ints) { + if (it.solicitante_usuario_id) { + await pool.query( + `INSERT INTO notificacoes (id, titulo, mensagem, tipo, lida, data, usuario_id, enviado_por) + VALUES (gen_random_uuid(), $1, $2, 'sucesso', 0, NOW(), $3, 'sistema')`, + ['Horário liberado', 'Um horário que você aguardava ficou livre. Você já pode agendar.', it.solicitante_usuario_id]); + } + await pool.query(`UPDATE interesses_agenda SET status = 'liberado' WHERE id = $1`, [it.id]); + } + } catch (e) { console.error('[interesses]', e.message); } +} + +// --- REGISTRO DE USUÁRIOS --- +app.post('/api/register', async (req, res) => { + const { nome, email, senha, role, workspaceNome } = req.body; + if (!nome || !email || !senha) return res.status(400).json({ success: false, message: 'Nome, e-mail e senha são obrigatórios.' }); + const VALID_ROLES = ['donoconsultorio', 'donoclinica', 'dentista', 'protetico', 'paciente']; + const userRole = VALID_ROLES.includes(role) ? role : 'donoclinica'; + try { + const existing = await pool.query('SELECT id FROM usuarios WHERE email = $1', [email.toLowerCase().trim()]); + if (existing.rows.length > 0) return res.status(409).json({ success: false, message: 'E-mail já cadastrado.' }); + const userId = 'u_' + Date.now() + '_' + Math.random().toString(36).slice(2, 7); + const nomeUpper = nome.trim().toUpperCase(); // padrão do sistema: tudo em maiúsculas + await pool.query( + 'INSERT INTO usuarios (id, nome, email, senha, role) VALUES ($1, $2, $3, $4, $5)', + [userId, nomeUpper, email.toLowerCase().trim(), await hashSenha(senha), userRole] + ); + + // Fase 1 — workspace pessoal automático para profissionais e paciente. + // (donoconsultorio/donoclinica criam a clínica-empresa no passo seguinte.) + let workspaces = []; + if (['dentista', 'protetico', 'paciente'].includes(userRole)) { + const wsId = `c_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`; + // Nome do estabelecimento informado pelo usuário; senão, default por papel + // (evita a unidade nascer com o NOME DA PESSOA sem querer). + const defaultNome = userRole === 'dentista' ? `CONSULTÓRIO DE ${nome.trim()}` + : userRole === 'protetico' ? `LABORATÓRIO DE ${nome.trim()}` + : nome.trim(); + const wsNome = (workspaceNome && workspaceNome.trim() ? workspaceNome.trim() : defaultNome).toUpperCase(); + await pool.query( + `INSERT INTO clinicas (id, nome_fantasia, tipo, owner_id) VALUES ($1, $2, 'pessoal', $3)`, + [wsId, wsNome, userId] + ); + await pool.query( + 'INSERT INTO vinculos (id, usuario_id, clinica_id, role) VALUES ($1, $2, $3, $4)', + [`v_${userId}_${wsId}`, userId, wsId, userRole] + ); + workspaces = [{ id: wsId, nome: wsNome, cor: '#2563eb', role: userRole }]; + } + + const token = jwt.sign({ userId, email: email.toLowerCase().trim() }, JWT_SECRET, { expiresIn: '12h' }); + console.log(`[REGISTER] New user: ${email}, role: ${userRole}, workspaces: ${workspaces.length}`); + res.json({ success: true, token, user: { id: userId, nome: nomeUpper, email: email.toLowerCase().trim(), role: userRole }, workspaces, noWorkspace: workspaces.length === 0, userRole }); + } catch (err) { + console.error('[REGISTER]', err.message); + res.status(500).json({ success: false, message: err.message }); + } +}); + +// --- CRIAÇÃO E GERENCIAMENTO DE CLÍNICAS --- +app.post('/api/clinicas', async (req, res) => { + const authHeader = req.headers['authorization']; + if (!authHeader?.startsWith('Bearer ')) return res.status(401).json({ success: false, message: 'Não autenticado.' }); + let payload; + try { payload = jwt.verify(authHeader.split(' ')[1], JWT_SECRET); } catch { return res.status(401).json({ success: false, message: 'Token inválido.' }); } + + const { nome_fantasia, documento } = req.body; + if (!nome_fantasia) return res.status(400).json({ success: false, message: 'Nome é obrigatório.' }); + + try { + const { rows: userRows } = await pool.query('SELECT email, nome, role FROM usuarios WHERE id = $1', [payload.userId]); + if (!userRows.length) return res.status(404).json({ success: false, message: 'Usuário não encontrado.' }); + const { role: ownerRole } = userRows[0]; + const vinculoRole = ['donoclinica', 'donoconsultorio'].includes(ownerRole) ? ownerRole : 'donoclinica'; + + const clinicaId = `c_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`; + const tipoWs = vinculoRole === 'donoconsultorio' ? 'consultorio' : 'clinica'; + await pool.query('INSERT INTO clinicas (id, nome_fantasia, documento, owner_id, tipo) VALUES ($1, $2, $3, $4, $5)', + [clinicaId, nome_fantasia.toUpperCase(), documento || null, payload.userId, tipoWs]); + const vinculoId = `v_${payload.userId}_${clinicaId}`; + await pool.query('INSERT INTO vinculos (id, usuario_id, clinica_id, role) VALUES ($1, $2, $3, $4)', + [vinculoId, payload.userId, clinicaId, vinculoRole]); + + console.log(`[CLINICA] Created: ${nome_fantasia} by ${userRows[0].email}`); + res.json({ success: true, clinica: { id: clinicaId, nome_fantasia: nome_fantasia.toUpperCase() } }); + } catch (err) { + console.error('[POST /api/clinicas]', err.message); + res.status(500).json({ success: false, message: err.message }); + } +}); + +app.get('/api/clinicas/:clinicaId/membros', tenantGuard, async (req, res) => { + try { + const { rows } = await pool.query(` + SELECT u.id, u.nome, u.email, v.role, v.setor_id, v.funcao_id, + s.nome AS setor_nome, f.nome AS funcao_nome, f.nivel AS funcao_nivel + FROM vinculos v + JOIN usuarios u ON u.id = v.usuario_id + LEFT JOIN setores s ON s.id = v.setor_id + LEFT JOIN funcoes f ON f.id = v.funcao_id + WHERE v.clinica_id = $1 ORDER BY u.nome + `, [req.params.clinicaId]); + res.json({ success: true, membros: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/clinicas/:clinicaId/membros', tenantGuard, async (req, res) => { + const { email, role, setor_id, funcao_id, nome } = req.body; + if (!email || !role) return res.status(400).json({ success: false, message: 'E-mail e função são obrigatórios.' }); + try { + // Hierarquia: só pode adicionar/atribuir cargo ABAIXO do seu próprio nível. + const reqNivel = await nivelNaClinica(req.authUser.userId, req.params.clinicaId); + if (reqNivel <= await nivelDaFuncao(funcao_id)) { + return res.status(403).json({ success: false, message: 'Você só pode gerenciar cargos de nível inferior ao seu.' }); + } + // Provisiona a conta se o e-mail ainda não tem login (dentista/secretária/funcionário). + const u = await ensureUsuarioPorEmail(email, nome, role); + const vinculoId = `v_${u.id}_${req.params.clinicaId}`; + await pool.query(` + INSERT INTO vinculos (id, usuario_id, clinica_id, role, setor_id, funcao_id) VALUES ($1, $2, $3, $4, $5, $6) + ON CONFLICT (usuario_id, clinica_id) DO UPDATE SET role = $4, setor_id = $5, funcao_id = $6 + `, [vinculoId, u.id, req.params.clinicaId, role, setor_id || null, funcao_id || null]); + res.json({ success: true, membro: { id: u.id, nome: u.nome, email: String(email).toLowerCase().trim(), role }, created: u.created, tempPassword: u.tempPassword }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/clinicas/:clinicaId/membros/:userId', tenantGuard, async (req, res) => { + const { role, setor_id, funcao_id } = req.body; + try { + const reqNivel = await nivelNaClinica(req.authUser.userId, req.params.clinicaId); + const alvoNivel = await nivelNaClinica(req.params.userId, req.params.clinicaId); + if (reqNivel <= alvoNivel || reqNivel <= await nivelDaFuncao(funcao_id)) { + return res.status(403).json({ success: false, message: 'Você só pode gerenciar membros/cargos de nível inferior ao seu.' }); + } + await pool.query('UPDATE vinculos SET role = COALESCE($1, role), setor_id = $2, funcao_id = $3 WHERE usuario_id = $4 AND clinica_id = $5', + [role || null, setor_id || null, funcao_id || null, req.params.userId, req.params.clinicaId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// Reset de senha pelo dono/admin da clínica → gera nova senha temporária (resolve +// contas criadas sem senha ou esquecidas). Alvo precisa ser membro desta unidade. +app.post('/api/clinicas/:clinicaId/membros/:userId/reset-senha', authGuard, async (req, res) => { + const clinicaId = req.params.clinicaId, alvo = req.params.userId, requester = req.authUser.userId; + try { + const { rows: tv } = await pool.query('SELECT 1 FROM vinculos WHERE usuario_id = $1 AND clinica_id = $2', [alvo, clinicaId]); + if (!tv.length) return res.status(404).json({ success: false, message: 'Membro não encontrado nesta unidade.' }); + // Hierarquia: só reseta a senha de quem está ABAIXO do seu nível. + if (await nivelNaClinica(requester, clinicaId) <= await nivelNaClinica(alvo, clinicaId)) { + return res.status(403).json({ success: false, message: 'Você só pode resetar a senha de membros de nível inferior ao seu.' }); + } + const { rows: u } = await pool.query('SELECT email FROM usuarios WHERE id = $1', [alvo]); + if (!u.length) return res.status(404).json({ success: false, message: 'Usuário não encontrado.' }); + const temp = gerarSenhaTemp(); + await pool.query('UPDATE usuarios SET senha = $1, must_change_password = true WHERE id = $2', [await hashSenha(temp), alvo]); + res.json({ success: true, email: u[0].email, tempPassword: temp }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +app.delete('/api/clinicas/:clinicaId/membros/:userId', tenantGuard, async (req, res) => { + try { + if (await nivelNaClinica(req.authUser.userId, req.params.clinicaId) <= await nivelNaClinica(req.params.userId, req.params.clinicaId)) { + return res.status(403).json({ success: false, message: 'Você só pode remover membros de nível inferior ao seu.' }); + } + await pool.query('DELETE FROM vinculos WHERE usuario_id = $1 AND clinica_id = $2', [req.params.userId, req.params.clinicaId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- SETORES (por clínica) --- +app.get('/api/clinicas/:clinicaId/setores', tenantGuard, async (req, res) => { + try { + const { rows } = await pool.query('SELECT id, nome, descricao, cor FROM setores WHERE clinica_id = $1 ORDER BY nome', [req.params.clinicaId]); + res.json({ success: true, setores: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/clinicas/:clinicaId/setores', tenantGuard, async (req, res) => { + const { nome, descricao, cor } = req.body; + if (!nome) return res.status(400).json({ success: false, message: 'Nome é obrigatório.' }); + try { + const id = _oid('set'); + await pool.query('INSERT INTO setores (id, clinica_id, nome, descricao, cor) VALUES ($1,$2,$3,$4,$5)', [id, req.params.clinicaId, nome, descricao || null, cor || '#2563eb']); + res.json({ success: true, id }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/clinicas/:clinicaId/setores/:id', tenantGuard, async (req, res) => { + const { nome, descricao, cor } = req.body; + try { + await pool.query('UPDATE setores SET nome = COALESCE($1, nome), descricao = $2, cor = COALESCE($3, cor) WHERE id = $4 AND clinica_id = $5', + [nome || null, descricao || null, cor || null, req.params.id, req.params.clinicaId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.delete('/api/clinicas/:clinicaId/setores/:id', tenantGuard, async (req, res) => { + try { + await pool.query('UPDATE vinculos SET setor_id = NULL WHERE setor_id = $1 AND clinica_id = $2', [req.params.id, req.params.clinicaId]); + await pool.query('DELETE FROM setores WHERE id = $1 AND clinica_id = $2', [req.params.id, req.params.clinicaId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- FUNÇÕES (por clínica) --- +app.get('/api/clinicas/:clinicaId/funcoes', tenantGuard, async (req, res) => { + try { + const { rows } = await pool.query('SELECT id, nome, descricao, permissoes, nivel FROM funcoes WHERE clinica_id = $1 ORDER BY nivel DESC, nome', [req.params.clinicaId]); + res.json({ success: true, funcoes: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/clinicas/:clinicaId/funcoes', tenantGuard, async (req, res) => { + const { nome, descricao, permissoes, nivel } = req.body; + if (!nome) return res.status(400).json({ success: false, message: 'Nome é obrigatório.' }); + try { + const id = _oid('fnc'); + await pool.query('INSERT INTO funcoes (id, clinica_id, nome, descricao, permissoes, nivel) VALUES ($1,$2,$3,$4,$5,$6)', + [id, req.params.clinicaId, nome, descricao || null, JSON.stringify(Array.isArray(permissoes) ? permissoes : []), Number.isFinite(nivel) ? nivel : 1]); + res.json({ success: true, id }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/clinicas/:clinicaId/funcoes/:id', tenantGuard, async (req, res) => { + const { nome, descricao, permissoes, nivel } = req.body; + try { + await pool.query( + `UPDATE funcoes SET nome = COALESCE($1, nome), descricao = $2, + permissoes = COALESCE($3, permissoes), nivel = COALESCE($4, nivel) + WHERE id = $5 AND clinica_id = $6`, + [nome || null, descricao || null, permissoes !== undefined ? JSON.stringify(permissoes) : null, Number.isFinite(nivel) ? nivel : null, req.params.id, req.params.clinicaId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.delete('/api/clinicas/:clinicaId/funcoes/:id', tenantGuard, async (req, res) => { + try { + await pool.query('UPDATE vinculos SET funcao_id = NULL WHERE funcao_id = $1 AND clinica_id = $2', [req.params.id, req.params.clinicaId]); + await pool.query('DELETE FROM funcoes WHERE id = $1 AND clinica_id = $2', [req.params.id, req.params.clinicaId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + // --- CLINICAS --- app.put('/api/clinicas/:id/color', async (req, res) => { const { cor } = req.body; @@ -133,6 +498,58 @@ app.put('/api/clinicas/:id/color', async (req, res) => { } catch (err) { res.status(500).json({ error: err.message }); } }); +// Renomear a unidade (clínica/consultório/laboratório). Só o dono (ou vínculo dono/admin). +app.put('/api/clinicas/:id/nome', authGuard, async (req, res) => { + const nome = (req.body?.nome_fantasia || '').trim(); + if (!nome) return res.status(400).json({ success: false, message: 'Nome é obrigatório.' }); + try { + const { rows } = await pool.query('SELECT owner_id FROM clinicas WHERE id = $1', [req.params.id]); + if (!rows.length) return res.status(404).json({ success: false, message: 'Unidade não encontrada.' }); + let allowed = rows[0].owner_id === req.authUser.userId; + if (!allowed) { + const { rows: v } = await pool.query('SELECT role FROM vinculos WHERE usuario_id = $1 AND clinica_id = $2', [req.authUser.userId, req.params.id]); + allowed = v.length > 0 && ['donoclinica', 'donoconsultorio', 'admin'].includes(v[0].role); + } + if (!allowed) return res.status(403).json({ success: false, message: 'Apenas o dono pode renomear a unidade.' }); + const finalNome = nome.toUpperCase(); + await pool.query('UPDATE clinicas SET nome_fantasia = $1 WHERE id = $2', [finalNome, req.params.id]); + res.json({ success: true, nome: finalNome }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +// Perfil completo da unidade (leitura: qualquer membro; edição: só dono/admin). +app.get('/api/clinicas/:clinicaId', tenantGuard, async (req, res) => { + try { + const { rows } = await pool.query( + `SELECT id, nome_fantasia, documento, telefone, tipo, cor, logradouro, numero, bairro, cidade, estado, cep, owner_id + FROM clinicas WHERE id = $1`, [req.params.clinicaId]); + if (!rows.length) return res.status(404).json({ success: false, message: 'Unidade não encontrada.' }); + res.json({ success: true, clinica: rows[0] }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/clinicas/:clinicaId', authGuard, async (req, res) => { + const COLS = ['nome_fantasia', 'documento', 'telefone', 'cor', 'logradouro', 'numero', 'bairro', 'cidade', 'estado', 'cep']; + const UPPER = new Set(['nome_fantasia', 'documento', 'logradouro', 'bairro', 'cidade', 'estado']); + try { + const { rows } = await pool.query('SELECT owner_id FROM clinicas WHERE id = $1', [req.params.clinicaId]); + if (!rows.length) return res.status(404).json({ success: false, message: 'Unidade não encontrada.' }); + let allowed = rows[0].owner_id === req.authUser.userId; + if (!allowed) { + const { rows: v } = await pool.query('SELECT role FROM vinculos WHERE usuario_id = $1 AND clinica_id = $2', [req.authUser.userId, req.params.clinicaId]); + allowed = v.length > 0 && ['donoclinica', 'donoconsultorio', 'admin'].includes(v[0].role); + } + if (!allowed) return res.status(403).json({ success: false, message: 'Apenas o dono pode editar a unidade.' }); + const b = req.body || {}; + const keys = COLS.filter(c => b[c] !== undefined); + if (!keys.length) return res.json({ success: true }); + const val = (c) => (UPPER.has(c) && typeof b[c] === 'string') ? b[c].trim().toUpperCase() : b[c]; + const set = keys.map((c, i) => `${c} = $${i + 1}`).join(', '); + await pool.query(`UPDATE clinicas SET ${set} WHERE id = $${keys.length + 1}`, [...keys.map(val), req.params.clinicaId]); + res.json({ success: true, nome: b.nome_fantasia ? String(b.nome_fantasia).trim().toUpperCase() : undefined }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + // --- LOGIN ROUTE --- app.post('/api/login', async (req, res) => { const { email, password } = req.body; @@ -140,27 +557,32 @@ app.post('/api/login', async (req, res) => { console.log(`[LOGIN ATTEMPT] Email: ${email}`); try { const { rows: users } = await pool.query( - 'SELECT id, nome, email FROM usuarios WHERE email = $1 AND senha = $2', - [email.toLowerCase().trim(), password] + 'SELECT id, nome, email, role, senha, must_change_password FROM usuarios WHERE email = $1 AND (ativo IS NULL OR ativo = true)', + [email.toLowerCase().trim()] ); - if (users.length === 0) { + const user = users[0]; + if (!user || !(await verificarSenha(user.id, password, user.senha))) { console.log(`[LOGIN FAILED] Invalid credentials for: ${email}`); return res.status(401).json({ success: false, message: 'CREDENCIAIS INVÁLIDAS' }); } - const user = users[0]; + const userRole = user.role || 'dentista'; + const mustChangePassword = !!user.must_change_password; const { rows: workspaces } = await pool.query(` - SELECT v.clinica_id as id, c.nome_fantasia as nome, c.cor, v.role + SELECT v.clinica_id as id, c.nome_fantasia as nome, c.cor, v.role, + v.funcao_id, f.nome AS funcao_nome, f.permissoes, f.nivel FROM vinculos v JOIN clinicas c ON v.clinica_id = c.id + LEFT JOIN funcoes f ON f.id = v.funcao_id WHERE v.usuario_id = $1 `, [user.id]); + const token = jwt.sign({ userId: user.id, email: user.email }, JWT_SECRET, { expiresIn: '12h' }); if (workspaces.length === 0) { - console.log(`[LOGIN FORBIDDEN] No workspaces for User ID: ${user.id}`); - return res.status(403).json({ success: false, message: 'USUÁRIO SEM VÍNCULO COM CLÍNICAS' }); + console.log(`[LOGIN NO-WORKSPACE] User: ${user.email}, role: ${userRole}`); + res.json({ success: true, token, user: { id: user.id, nome: user.nome, email: user.email, role: userRole }, workspaces: [], noWorkspace: true, userRole, mustChangePassword }); + return; } console.log(`[LOGIN SUCCESS] User: ${user.email}, Workspaces: ${workspaces.length}`); - const token = jwt.sign({ userId: user.id, email: user.email }, JWT_SECRET, { expiresIn: '12h' }); - res.json({ success: true, token, user: { id: user.id, nome: user.nome, email: user.email }, workspaces }); + res.json({ success: true, token, user: { id: user.id, nome: user.nome, email: user.email, role: userRole }, workspaces, mustChangePassword }); } catch (err) { console.error(`[LOGIN ERROR]: ${err.message}`); res.status(500).json({ success: false, error: 'ERRO INTERNO DO SERVIDOR.' }); @@ -197,7 +619,17 @@ const createOAuth2Client = () => new google.auth.OAuth2( // ============================================================================= // GOOGLE SHEETS BACKUP SYNC // ============================================================================= -const SHEETS_BACKUP_ID = process.env.SHEETS_BACKUP_ID || '1q1sf1GOji2u3qIJEToWfbLCb4rzb_pKLOX_AylMDT4g'; +let SHEETS_BACKUP_ID = process.env.SHEETS_BACKUP_ID || '1q1sf1GOji2u3qIJEToWfbLCb4rzb_pKLOX_AylMDT4g'; + +async function loadSheetsConfig() { + try { + const { rows } = await pool.query("SELECT data FROM settings WHERE id = 'sheets_config'"); + if (rows[0]) { + const cfg = JSON.parse(rows[0].data); + if (cfg.spreadsheetId) SHEETS_BACKUP_ID = cfg.spreadsheetId; + } + } catch {} +} // Which tables sync, how to export from PG and how to import back const SYNC_TABLES = [ @@ -364,31 +796,183 @@ async function saveSyncStatus(updates) { ); } -// Debounced auto-push: coalesces rapid writes into one sheet update per table -const _pushTimers = new Map(); -function schedulePush(tabName) { - if (_pushTimers.has(tabName)) clearTimeout(_pushTimers.get(tabName)); - _pushTimers.set(tabName, setTimeout(async () => { - _pushTimers.delete(tabName); - try { - const tableDef = SYNC_TABLES.find(t => t.tab === tabName); - if (!tableDef) return; - const sheets = await getSheetsClient(); - const count = await pushTableToSheet(tableDef, sheets); - await saveSyncStatus({ [tabName]: { lastPush: new Date().toISOString(), count } }); - console.log(`[SHEETS] Auto-pushed ${count} rows → "${tabName}"`); - } catch (e) { - if (e.message !== 'NO_GOOGLE_TOKEN') console.error(`[SHEETS] Auto-push error for ${tabName}:`, e.message); - } - }, 5000)); +// Auto-push GLOBAL desativado: vazava dados de todas as clínicas para a planilha/token +// do primeiro usuário. O backup agora é MANUAL e POR CLÍNICA (ver /api/clinica-sync/*). +// Mantido como no-op para não quebrar as ~8 chamadas espalhadas nas rotas de escrita. +function schedulePush(_tabName) { /* desativado — backup por clínica é manual */ } + +// ============================================================================= +// BACKUP POR CLÍNICA → Google Sheets (planilha própria, na conta Google da unidade) +// Cada workspace (clínica/consultório/laboratório/dentista) tem sua planilha, +// criada automaticamente na conta Google conectada, com SÓ os dados daquela clínica. +// ============================================================================= +const CLINIC_SYNC_TABLES = [ + { + tab: 'pacientes', + query: `SELECT id, nome, cpf, telefone, email, ultimotratamento AS "ultimoTratamento", convenio, datanascimento AS "dataNascimento" FROM pacientes WHERE clinica_id = $1 ORDER BY nome`, + headers: ['id', 'nome', 'cpf', 'telefone', 'email', 'ultimoTratamento', 'convenio', 'dataNascimento'], + upsert: `INSERT INTO pacientes (id,clinica_id,nome,cpf,telefone,email,ultimotratamento,convenio,datanascimento) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) + ON CONFLICT (id) DO UPDATE SET clinica_id=EXCLUDED.clinica_id,nome=EXCLUDED.nome,cpf=EXCLUDED.cpf,telefone=EXCLUDED.telefone,email=EXCLUDED.email,ultimotratamento=EXCLUDED.ultimotratamento,convenio=EXCLUDED.convenio,datanascimento=EXCLUDED.datanascimento`, + params: (r, cid) => [r.id, cid, r.nome, r.cpf, r.telefone, r.email, r.ultimoTratamento, r.convenio, r.dataNascimento], + }, + { + tab: 'agendamentos', + query: `SELECT id, pacientenome AS "pacienteNome", dentistaid AS "dentistaId", start_time::text, end_time::text, status, procedimento, observacoes FROM agendamentos WHERE clinica_id = $1 ORDER BY start_time DESC`, + headers: ['id', 'pacienteNome', 'dentistaId', 'start_time', 'end_time', 'status', 'procedimento', 'observacoes'], + upsert: `INSERT INTO agendamentos (id,clinica_id,pacientenome,dentistaid,start_time,end_time,status,procedimento,observacoes) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) + ON CONFLICT (id) DO UPDATE SET clinica_id=EXCLUDED.clinica_id,pacientenome=EXCLUDED.pacientenome,dentistaid=EXCLUDED.dentistaid,start_time=EXCLUDED.start_time,end_time=EXCLUDED.end_time,status=EXCLUDED.status,procedimento=EXCLUDED.procedimento,observacoes=EXCLUDED.observacoes`, + params: (r, cid) => [r.id, cid, r.pacienteNome, r.dentistaId, r.start_time || null, r.end_time || null, r.status, r.procedimento, r.observacoes], + }, + { + tab: 'financeiro', + query: `SELECT id, pacientenome AS "pacienteNome", descricao, valor::text, datavencimento::text AS "dataVencimento", status, formapagamento AS "formaPagamento", tipo FROM financeiro WHERE clinica_id = $1 ORDER BY datavencimento DESC`, + headers: ['id', 'pacienteNome', 'descricao', 'valor', 'dataVencimento', 'status', 'formaPagamento', 'tipo'], + upsert: `INSERT INTO financeiro (id,clinica_id,pacientenome,descricao,valor,datavencimento,status,formapagamento,tipo) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) + ON CONFLICT (id) DO UPDATE SET clinica_id=EXCLUDED.clinica_id,pacientenome=EXCLUDED.pacientenome,descricao=EXCLUDED.descricao,valor=EXCLUDED.valor,datavencimento=EXCLUDED.datavencimento,status=EXCLUDED.status,formapagamento=EXCLUDED.formapagamento,tipo=EXCLUDED.tipo`, + params: (r, cid) => [r.id, cid, r.pacienteNome, r.descricao, r.valor || null, r.dataVencimento || null, r.status, r.formaPagamento, r.tipo], + }, + { + tab: 'leads', + query: `SELECT id, nome, sobrenome, cpf, whatsapp, tipointeresse AS "tipoInteresse", datacadastro::text AS "dataCadastro", status FROM leads WHERE clinica_id = $1 ORDER BY datacadastro DESC`, + headers: ['id', 'nome', 'sobrenome', 'cpf', 'whatsapp', 'tipoInteresse', 'dataCadastro', 'status'], + upsert: `INSERT INTO leads (id,clinica_id,nome,sobrenome,cpf,whatsapp,tipointeresse,datacadastro,status) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) + ON CONFLICT (id) DO UPDATE SET clinica_id=EXCLUDED.clinica_id,nome=EXCLUDED.nome,sobrenome=EXCLUDED.sobrenome,cpf=EXCLUDED.cpf,whatsapp=EXCLUDED.whatsapp,tipointeresse=EXCLUDED.tipointeresse,status=EXCLUDED.status`, + params: (r, cid) => [r.id, cid, r.nome, r.sobrenome, r.cpf, r.whatsapp, r.tipoInteresse, r.dataCadastro || null, r.status], + }, +]; + +const clinicSheetUrl = (id) => `https://docs.google.com/spreadsheets/d/${id}`; + +async function getClinicSheetsClient(clinicaId) { + const { rows } = await pool.query('SELECT * FROM google_tokens WHERE clinica_id = $1 ORDER BY updated_at DESC NULLS LAST LIMIT 1', [clinicaId]); + if (!rows.length) throw new Error('NO_GOOGLE_TOKEN'); + const t = rows[0]; + const auth = createOAuth2Client(); + auth.setCredentials({ refresh_token: t.refresh_token, access_token: t.access_token, expiry_date: t.expiry_date }); + return google.sheets({ version: 'v4', auth }); } +async function ensureClinicSpreadsheet(clinicaId, sheets) { + const { rows } = await pool.query('SELECT sheets_id, nome_fantasia FROM clinicas WHERE id = $1', [clinicaId]); + if (!rows.length) throw new Error('CLINICA_NOT_FOUND'); + let id = rows[0].sheets_id; + if (id) { + try { await sheets.spreadsheets.get({ spreadsheetId: id, fields: 'spreadsheetId' }); return { id, created: false }; } + catch { id = null; } // sumiu/sem acesso → recria + } + const title = `ScoreOdonto — ${rows[0].nome_fantasia || 'Unidade'}`; + const r = await sheets.spreadsheets.create({ requestBody: { properties: { title } } }); + id = r.data.spreadsheetId; + await pool.query('UPDATE clinicas SET sheets_id = $1 WHERE id = $2', [id, clinicaId]); + return { id, created: true }; +} + +async function ensureClinicTab(sheets, spreadsheetId, tabName) { + const meta = await sheets.spreadsheets.get({ spreadsheetId }); + const ex = meta.data.sheets.find(s => s.properties.title.toLowerCase() === tabName.toLowerCase()); + if (ex) return ex.properties.title; + await sheets.spreadsheets.batchUpdate({ spreadsheetId, requestBody: { requests: [{ addSheet: { properties: { title: tabName } } }] } }); + return tabName; +} + +async function pushClinicTable(def, sheets, spreadsheetId, clinicaId) { + const { rows } = await pool.query(def.query, [clinicaId]); + const tab = await ensureClinicTab(sheets, spreadsheetId, def.tab); + await sheets.spreadsheets.values.clear({ spreadsheetId, range: `${tab}!A:ZZ` }); + const values = [def.headers, ...rows.map(row => def.headers.map(h => { const v = row[h] ?? row[h.toLowerCase()]; return v == null ? '' : String(v); }))]; + await sheets.spreadsheets.values.update({ spreadsheetId, range: `${tab}!A1`, valueInputOption: 'RAW', requestBody: { values } }); + return rows.length; +} + +async function pullClinicTable(def, sheets, spreadsheetId, clinicaId) { + const tab = await ensureClinicTab(sheets, spreadsheetId, def.tab); + const resp = await sheets.spreadsheets.values.get({ spreadsheetId, range: `${tab}!A:ZZ` }); + const sheetRows = resp.data.values || []; + if (sheetRows.length < 2) return 0; + const headers = sheetRows[0]; + let n = 0; + for (const row of sheetRows.slice(1)) { + if (!row.some(c => c !== '')) continue; + const obj = {}; headers.forEach((h, i) => { obj[h] = i < row.length ? (row[i] || null) : null; }); + if (!obj.id) continue; + try { await pool.query(def.upsert, def.params(obj, clinicaId)); n++; } + catch (e) { console.error(`[CLINIC-SYNC pull] ${def.tab} ${obj.id}:`, e.message); } + } + return n; +} + +async function saveClinicSyncStatus(clinicaId, data) { + await pool.query(`INSERT INTO settings (id,category,data) VALUES ($1,'sync',$2) ON CONFLICT (id) DO UPDATE SET data=EXCLUDED.data`, [`sync:${clinicaId}`, JSON.stringify(data)]); +} + +app.get('/api/clinica-sync/status', tenantGuard, async (req, res) => { + try { + const clinicaId = req.query.clinicaId; + if (!clinicaId) return res.status(400).json({ success: false, message: 'clinicaId obrigatório.' }); + const { rows: cl } = await pool.query('SELECT sheets_id FROM clinicas WHERE id = $1', [clinicaId]); + const { rows: tk } = await pool.query('SELECT owner_id FROM google_tokens WHERE clinica_id = $1 LIMIT 1', [clinicaId]); + const counts = {}; + for (const d of CLINIC_SYNC_TABLES) { const { rows } = await pool.query(`SELECT COUNT(*) n FROM ${d.tab} WHERE clinica_id = $1`, [clinicaId]); counts[d.tab] = parseInt(rows[0].n); } + const { rows: st } = await pool.query('SELECT data FROM settings WHERE id = $1', [`sync:${clinicaId}`]); + const sheetsId = cl[0]?.sheets_id || null; + res.json({ success: true, connected: tk.length > 0, googleEmail: tk[0]?.owner_id || null, spreadsheetId: sheetsId, spreadsheetUrl: sheetsId ? clinicSheetUrl(sheetsId) : null, counts, lastSync: st[0] ? JSON.parse(st[0].data) : null }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/clinica-sync/push', tenantGuard, async (req, res) => { + const clinicaId = req.body?.clinicaId || req.query.clinicaId; + const logs = []; + try { + if (!clinicaId) return res.status(400).json({ success: false, message: 'clinicaId obrigatório.' }); + const sheets = await getClinicSheetsClient(clinicaId); + const { id, created } = await ensureClinicSpreadsheet(clinicaId, sheets); + if (created) logs.push('[OK] PLANILHA CRIADA NO SEU GOOGLE DRIVE'); + const counts = {}; + for (const d of CLINIC_SYNC_TABLES) { + try { const c = await pushClinicTable(d, sheets, id, clinicaId); logs.push(`[OK] ${d.tab.toUpperCase()}: ${c} REGISTROS`); counts[d.tab] = c; } + catch (e) { logs.push(`[ERRO] ${d.tab}: ${e.message}`); } + } + await saveClinicSyncStatus(clinicaId, { lastPush: new Date().toISOString(), counts }); + res.json({ success: true, spreadsheetUrl: clinicSheetUrl(id), logs }); + } catch (err) { + const msg = err.message === 'NO_GOOGLE_TOKEN' ? 'CONECTE A CONTA GOOGLE DESTA UNIDADE (AGENDA → CONFIGURAÇÕES) ANTES DE FAZER BACKUP.' : err.message; + res.status(err.message === 'NO_GOOGLE_TOKEN' ? 400 : 500).json({ success: false, message: msg, logs: [...logs, `[ERRO] ${msg}`] }); + } +}); + +app.post('/api/clinica-sync/pull', tenantGuard, async (req, res) => { + const clinicaId = req.body?.clinicaId || req.query.clinicaId; + const logs = []; + try { + if (!clinicaId) return res.status(400).json({ success: false, message: 'clinicaId obrigatório.' }); + const sheets = await getClinicSheetsClient(clinicaId); + const { rows: cl } = await pool.query('SELECT sheets_id FROM clinicas WHERE id = $1', [clinicaId]); + if (!cl[0]?.sheets_id) return res.status(400).json({ success: false, message: 'Nenhuma planilha ainda. Faça um backup (enviar) primeiro.' }); + const id = cl[0].sheets_id; + for (const d of CLINIC_SYNC_TABLES) { + try { const c = await pullClinicTable(d, sheets, id, clinicaId); logs.push(`[OK] ${d.tab.toUpperCase()}: ${c} IMPORTADOS`); } + catch (e) { logs.push(`[ERRO] ${d.tab}: ${e.message}`); } + } + await saveClinicSyncStatus(clinicaId, { lastPull: new Date().toISOString() }); + res.json({ success: true, logs }); + } catch (err) { + const msg = err.message === 'NO_GOOGLE_TOKEN' ? 'CONECTE A CONTA GOOGLE DESTA UNIDADE.' : err.message; + res.status(err.message === 'NO_GOOGLE_TOKEN' ? 400 : 500).json({ success: false, message: msg, logs: [...logs, `[ERRO] ${msg}`] }); + } +}); + // --- GOOGLE AUTH ROUTES --- app.get('/api/auth/google/url', (req, res) => { if (!googleCreds.clientId || !googleCreds.clientSecret) { return res.status(503).json({ error: 'Credenciais OAuth não configuradas. Acesse Configurações → Integrações Google e salve o Client ID e Client Secret.' }); } - const { dentistId } = req.query; + const { dentistId, clinicaId, ownerId } = req.query; + const resolvedOwner = ownerId || dentistId || 'admin'; + const resolvedClinica = clinicaId || ''; const oauth2Client = createOAuth2Client(); const url = oauth2Client.generateAuthUrl({ access_type: 'offline', @@ -397,7 +981,7 @@ app.get('/api/auth/google/url', (req, res) => { 'https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/spreadsheets' ], - state: dentistId || 'admin', + state: `${resolvedOwner}|${resolvedClinica}`, prompt: 'consent' }); res.json({ url }); @@ -409,7 +993,8 @@ app.get('/api/oauth2callback', async (req, res) => { try { const oauth2Client = createOAuth2Client(); const { tokens } = await oauth2Client.getToken(code); - let ownerId = state || 'admin'; + const [rawOwner, clinicaId] = (state || 'admin|').split('|'); + let ownerId = rawOwner || 'admin'; if (ownerId === 'admin') { oauth2Client.setCredentials(tokens); const oauth2 = google.oauth2({ version: 'v2', auth: oauth2Client }); @@ -417,13 +1002,19 @@ app.get('/api/oauth2callback', async (req, res) => { ownerId = data.email; } await pool.query(` - INSERT INTO google_tokens (owner_id, refresh_token, access_token, expiry_date) - VALUES ($1, $2, $3, $4) + INSERT INTO google_tokens (owner_id, clinica_id, refresh_token, access_token, expiry_date) + VALUES ($1, $2, $3, $4, $5) ON CONFLICT (owner_id) DO UPDATE SET + clinica_id = EXCLUDED.clinica_id, refresh_token = EXCLUDED.refresh_token, access_token = EXCLUDED.access_token, expiry_date = EXCLUDED.expiry_date - `, [ownerId, tokens.refresh_token, tokens.access_token, tokens.expiry_date]); + `, [ownerId, clinicaId || null, tokens.refresh_token, tokens.access_token, tokens.expiry_date]); + // Conta-clínica: UMA por clínica. Ao (re)conectar uma conta de e-mail, remove + // e-mails antigos desta mesma clínica (evita acúmulo/confusão de várias contas). + if (clinicaId && String(ownerId).includes('@')) { + await pool.query("DELETE FROM google_tokens WHERE clinica_id = $1 AND owner_id LIKE '%@%' AND owner_id <> $2", [clinicaId, ownerId]); + } res.send(`

Agenda Conectada!

O Google Agenda foi integrado com sucesso.

@@ -437,7 +1028,11 @@ app.get('/api/oauth2callback', async (req, res) => { app.get('/api/auth/google/status', async (req, res) => { try { - const { rows } = await pool.query('SELECT owner_id, updated_at FROM google_tokens'); + const { clinicaId } = req.query; + const sql = clinicaId + ? 'SELECT owner_id, clinica_id, updated_at FROM google_tokens WHERE clinica_id = $1' + : 'SELECT owner_id, clinica_id, updated_at FROM google_tokens'; + const { rows } = await pool.query(sql, clinicaId ? [clinicaId] : []); res.json(rows); } catch (err) { res.status(500).json({ error: err.message }); } }); @@ -452,18 +1047,22 @@ app.delete('/api/auth/google/:ownerId', async (req, res) => { // --- SETTINGS --- app.get('/api/settings', async (req, res) => { try { - const { rows } = await pool.query("SELECT * FROM settings WHERE id = 'main'"); + // Escopo por workspace/clínica: cada clínica tem suas próprias configs + // (clinicEmail, etc.). 'main' é só o fallback legado/global. + const id = req.query.clinicaId || 'main'; + const { rows } = await pool.query('SELECT data FROM settings WHERE id = $1', [id]); res.json(rows[0] ? JSON.parse(rows[0].data) : {}); } catch (err) { res.status(500).json({ error: err.message }); } }); app.post('/api/settings', async (req, res) => { try { + const id = req.query.clinicaId || 'main'; const data = JSON.stringify(req.body); await pool.query( - `INSERT INTO settings (id, category, data) VALUES ('main', 'general', $1) + `INSERT INTO settings (id, category, data) VALUES ($1, 'general', $2) ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data`, - [data] + [id, data] ); res.json({ success: true }); } catch (err) { res.status(500).json({ error: err.message }); } @@ -531,10 +1130,10 @@ app.post('/api/dentistas/register', async (req, res) => { // 3. Create or update Dentist record for agenda await client.query(` - INSERT INTO dentistas (id, clinica_id, nome, email, telefone, especialidade, coragenda) - VALUES ($1, $2, $3, $4, $5, $6, $7) + INSERT INTO dentistas (id, clinica_id, nome, email, telefone, especialidade, coragenda, usuario_id) + VALUES ($1, $2, $3, $4, $5, $6, $7, $1) ON CONFLICT (id) DO UPDATE SET - nome = EXCLUDED.nome, especialidade = EXCLUDED.especialidade + nome = EXCLUDED.nome, especialidade = EXCLUDED.especialidade, usuario_id = EXCLUDED.usuario_id `, [id, clinicaId, nome, email, celular, especialidade, '#2563eb']); }); res.json({ success: true }); @@ -543,8 +1142,11 @@ app.post('/api/dentistas/register', async (req, res) => { app.get('/api/google/events', async (req, res) => { try { - // 1. Check for connected accounts in google_tokens - const { rows: tokenRows } = await pool.query('SELECT * FROM google_tokens'); + const { clinicaId } = req.query; + // Sem clínica definida não dá pra escopar → não vaza agenda de outras contas. + if (!clinicaId) return res.json([]); + // Tokens só desta clínica (cada conta Google é vinculada à sua clínica). + const { rows: tokenRows } = await pool.query('SELECT * FROM google_tokens WHERE clinica_id = $1', [clinicaId]); const allEvents = []; const now = new Date(); const timeMin = now.toISOString(); @@ -568,10 +1170,17 @@ app.get('/api/google/events', async (req, res) => { }); if (response.data.items) { - // Try to resolve owner name - let ownerName = tokenData.owner_id; + // Rótulo amigável: se o dono do token for um dentista, usa o nome dele; + // se for a conta da clínica (owner_id = e-mail), usa o NOME DA CLÍNICA + // (nunca o e-mail/identificador cru, que poluía todos os eventos). + let ownerName = 'AGENDA GOOGLE'; const { rows: dent } = await pool.query('SELECT nome FROM dentistas WHERE id = $1', [tokenData.owner_id]); - if (dent[0]) ownerName = dent[0].nome; + if (dent[0]) { + ownerName = dent[0].nome; + } else if (tokenData.clinica_id) { + const { rows: cl } = await pool.query('SELECT nome_fantasia FROM clinicas WHERE id = $1', [tokenData.clinica_id]); + if (cl[0]?.nome_fantasia) ownerName = cl[0].nome_fantasia; + } const mapped = response.data.items.map(item => ({ id: `google_${item.id}`, @@ -590,8 +1199,8 @@ app.get('/api/google/events', async (req, res) => { } } - // 2. Legacy Support: Check Settings for Public Calendars (API KEY) - const { rows: settingsRows } = await pool.query("SELECT data FROM settings WHERE id = 'main'"); + // 2. Legacy Support: agendas públicas (API KEY) — configs DESTA clínica (não globais). + const { rows: settingsRows } = await pool.query('SELECT data FROM settings WHERE id = $1', [clinicaId]); if (settingsRows[0]) { const settings = JSON.parse(settingsRows[0].data); const apiKey = settings.googleApiKey; @@ -726,9 +1335,10 @@ app.put('/api/notificacoes/:id/read', async (req, res) => { }); // --- PACIENTES --- -app.get('/api/pacientes', async (req, res) => { +app.get('/api/pacientes', authGuard, async (req, res) => { try { - const { q, sort } = req.query; + const { q, sort, clinicaId } = req.query; + if (!clinicaId) return res.status(400).json({ error: 'clinicaId obrigatório.' }); const orderMap = { az: 'p.nome ASC', za: 'p.nome DESC', convenio: 'p.convenio ASC NULLS LAST, p.nome ASC', recentes: 'p.nome ASC' }; const orderBy = orderMap[sort] || 'p.nome ASC'; const base = `SELECT p.id, p.nome, p.cpf, p.telefone, p.email, @@ -741,27 +1351,40 @@ app.get('/api/pacientes', async (req, res) => { pi.nome AS "indicadoPorNome" FROM pacientes p LEFT JOIN pacientes pf ON pf.id = p.grupofamiliarid - LEFT JOIN pacientes pi ON pi.id = p.indicadorporid`; + LEFT JOIN pacientes pi ON pi.id = p.indicadorporid + WHERE p.clinica_id = $1`; let text, params; if (q && q.trim()) { - const term = `%${q.trim().toUpperCase()}%`; - text = `${base} WHERE UPPER(p.nome) LIKE $1 OR p.cpf LIKE $1 ORDER BY ${orderBy} LIMIT 100`; - params = [term]; + const raw = q.trim(); + const term = `%${raw.toUpperCase()}%`; + const digits = raw.replace(/\D/g, ''); + const digitsLike = digits ? `%${digits}%` : null; + // Busca por NOME, CPF ou TELEFONE — com ou sem formatação (pontos/traços/parênteses). + text = `${base} AND ( + UPPER(p.nome) LIKE $2 + OR p.cpf LIKE $2 + OR p.telefone LIKE $2 + OR ($3::text IS NOT NULL AND regexp_replace(COALESCE(p.cpf,''), '\\D', '', 'g') LIKE $3) + OR ($3::text IS NOT NULL AND regexp_replace(COALESCE(p.telefone,''), '\\D', '', 'g') LIKE $3) + ) ORDER BY ${orderBy} LIMIT 100`; + params = [clinicaId, term, digitsLike]; } else { text = `${base} ORDER BY ${orderBy} LIMIT 50`; - params = []; + params = [clinicaId]; } const { rows } = await pool.query(text, params); - const { rows: total } = await pool.query('SELECT COUNT(*) as total FROM pacientes'); + const { rows: total } = await pool.query('SELECT COUNT(*) as total FROM pacientes WHERE clinica_id = $1', [clinicaId]); res.json({ data: rows, total: parseInt(total[0].total) }); } catch (err) { res.status(500).json({ error: err.message }); } }); -app.post('/api/pacientes', async (req, res) => { +app.post('/api/pacientes', authGuard, async (req, res) => { try { - const p = req.body; + const clinicaId = req.body.clinica_id || req.query.clinicaId; + if (!clinicaId) return res.status(400).json({ error: 'clinica_id obrigatório.' }); + const p = { ...req.body, clinica_id: clinicaId }; const ins = buildInsert('pacientes', p); await pool.query(ins.text, ins.values); schedulePush('pacientes'); @@ -771,7 +1394,7 @@ app.post('/api/pacientes', async (req, res) => { } }); -app.put('/api/pacientes/:id', async (req, res) => { +app.put('/api/pacientes/:id', authGuard, async (req, res) => { try { const upd = buildUpdate('pacientes', req.body, 'id', req.params.id); await pool.query(upd.text, upd.values); @@ -801,12 +1424,28 @@ app.get('/api/dentistas', async (req, res) => { app.post('/api/dentistas', async (req, res) => { try { const d = req.body; + let tempPassword = null, contaCriada = false; + // Dentista com e-mail: provisiona a conta (se não existir) e vincula à clínica, + // pra ele ter acesso à agenda. Conta "free" — só vínculo com a clínica. + if (d.email && !d.usuario_id) { + const u = await ensureUsuarioPorEmail(d.email, d.nome, 'dentista'); + d.usuario_id = u.id; + tempPassword = u.tempPassword; + contaCriada = u.created; + if (d.clinica_id) { + await pool.query( + `INSERT INTO vinculos (id, usuario_id, clinica_id, role) VALUES ($1,$2,$3,'dentista') + ON CONFLICT (usuario_id, clinica_id) DO UPDATE SET role = 'dentista'`, + [`v_${u.id}_${d.clinica_id}`, u.id, d.clinica_id] + ); + } + } // Automatically set order to the end const { rows: counts } = await pool.query('SELECT COUNT(*) as count FROM dentistas'); const ordem = parseInt(counts[0].count); const ins = buildInsert('dentistas', { ...d, ordem }); await pool.query(ins.text, ins.values); - res.json({ success: true }); + res.json({ success: true, tempPassword, contaCriada }); } catch (err) { res.status(500).json({ error: err.message }); } }); @@ -943,27 +1582,44 @@ app.get('/api/agendamentos', async (req, res) => { }); // POST with concurrency lock: prevents double-booking the same dentist+time slot -app.post('/api/agendamentos', async (req, res) => { +app.post('/api/agendamentos', authGuard, async (req, res) => { try { + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); const { start, end, ...rest } = req.body; const { dentistaId } = rest; + const id = rest.id || `ag_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`; await withTransaction(async (client) => { - // Lock check: SELECT the conflicting row FOR UPDATE to prevent race conditions + // Fase 3 — anti-overbooking GLOBAL. Resolve a identidade do profissional + // (dentistas.usuario_id) e bloqueia SOBREPOSIÇÃO de horário em QUALQUER + // clínica → garante "não pode estar em 2 lugares ao mesmo tempo". + // Ignora status INATIVOS (cancelado/falta/remarcar), que liberam o slot. if (dentistaId && start) { + let dentistaIds = [dentistaId]; + const { rows: dr } = await client.query('SELECT usuario_id FROM dentistas WHERE id = $1', [dentistaId]); + const profUid = dr[0]?.usuario_id || null; + if (profUid) { + const { rows: ids } = await client.query('SELECT id FROM dentistas WHERE usuario_id = $1', [profUid]); + if (ids.length) dentistaIds = ids.map(r => r.id); + } + const fim = end || start; + // sobreposição de intervalos: existente.start < novo.end AND existente.end > novo.start const { rows: conflict } = await client.query( - `SELECT id FROM agendamentos - WHERE dentistaid = $1 AND start_time = $2 + `SELECT id, clinica_id, start_time::text AS start_time, end_time::text AS end_time + FROM agendamentos + WHERE dentistaid = ANY($1) + AND (status IS NULL OR lower(status) NOT IN ('cancelado','falta','remarcar')) + AND start_time < $3 + AND COALESCE(end_time, start_time) > $2 LIMIT 1 FOR UPDATE`, - [dentistaId, start] + [dentistaIds, start, fim] ); if (conflict.length > 0) { - throw { code: 'CONF_ERROR', message: 'ESTE HORÁRIO ACABOU DE SER RESERVADO POR OUTRA PESSOA. POR FAVOR, ESCOLHA OUTRO HORÁRIO.' }; + throw { code: 'CONF_OVERLAP', conflito: conflict[0] }; } } - const id = rest.id || `ag_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`; - // Map keys from camelCase/old attributes to correct lowercase PG columns if necessary const payload = { id, @@ -975,17 +1631,39 @@ app.post('/api/agendamentos', async (req, res) => { end_time: end, procedimento: rest.procedimento, observacoes: rest.observacoes, - status: rest.status || 'Agendado', - clinica_id: rest.clinica_id + status: rest.status || 'agendado', + clinica_id: rest.clinica_id, + created_by: actor, + created_by_nome: actorNm, + version: 1 }; const insertQuery = buildInsert('agendamentos', payload); await client.query(insertQuery.text, insertQuery.values); + + await registrarAudit(client, { + clinicaId: rest.clinica_id, entidade: 'agendamento', entidadeId: id, acao: 'criou', + actorId: actor, actorNome: actorNm, + detalhes: { paciente: rest.pacienteNome, start, end, procedimento: rest.procedimento } + }); + // Um novo agendamento FUTURO resolve as pendências "a reagendar" do paciente. + if (rest.pacienteId && start && new Date(start) >= new Date()) { + await resolverPendenciasPaciente(client, rest.clinica_id, rest.pacienteId, { by: actor, byNome: actorNm, resolucao: 'reagendado' }); + } }); schedulePush('agendamentos'); - res.json({ success: true }); + res.json({ success: true, id }); } catch (err) { + if (err.code === 'CONF_OVERLAP') { + return res.status(409).json({ + success: false, + conflito: true, + podeRegistrarInteresse: true, // gancho p/ Fase 4 (interesse/fila) + ocupado: err.conflito, // { id, clinica_id, start_time, end_time } + message: 'O PROFISSIONAL JÁ TEM COMPROMISSO NESSE HORÁRIO (EM QUALQUER CLÍNICA). REGISTRE INTERESSE OU ESCOLHA OUTRO HORÁRIO.' + }); + } if (err.code === 'CONF_ERROR') { return res.status(409).json({ success: false, message: err.message }); } @@ -999,9 +1677,21 @@ app.post('/api/agendamentos', async (req, res) => { } }); -app.put('/api/agendamentos/:id', async (req, res) => { +// PUT = editar / REAGENDAR (mover pra novo slot). Lock otimista por `version`. +app.put('/api/agendamentos/:id', authGuard, async (req, res) => { try { - const { start, end, ...rest } = req.body; + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); + const { start, end, version, ...rest } = req.body; + + const { rows: cur } = await pool.query('SELECT * FROM agendamentos WHERE id = $1', [req.params.id]); + if (!cur.length) return res.status(404).json({ success: false, message: 'Agendamento não encontrado.' }); + const before = cur[0]; + // Lock otimista: se o cliente mandou version e ela não bate, alguém editou antes. + if (version != null && Number(version) !== Number(before.version || 1)) { + return res.status(409).json({ success: false, stale: true, message: 'ESTE AGENDAMENTO FOI ALTERADO POR OUTRA PESSOA. RECARREGUE PARA VER A VERSÃO ATUAL.' }); + } + const updateData = {}; if (start) updateData.start_time = start; if (end) updateData.end_time = end; @@ -1009,13 +1699,27 @@ app.put('/api/agendamentos/:id', async (req, res) => { if (rest.observacoes !== undefined) updateData.observacoes = rest.observacoes; if (rest.procedimento) updateData.procedimento = rest.procedimento; if (rest.dentistaId) updateData.dentistaid = rest.dentistaId; + if (rest.pacienteNome) updateData.pacientenome = rest.pacienteNome; + if (rest.pacienteId) updateData.pacienteid = rest.pacienteId; + updateData.updated_by = actor; + updateData.updated_by_nome = actorNm; + updateData.updated_at = new Date().toISOString(); + updateData.version = Number(before.version || 1) + 1; const updateQuery = buildUpdate('agendamentos', updateData, 'id', req.params.id); - if (updateQuery) { - await pool.query(updateQuery.text, updateQuery.values); - } + if (updateQuery) await pool.query(updateQuery.text, updateQuery.values); + + // remarcou (mudou horário) vs editou (outros campos) + const movido = (start && String(start) !== String(before.start_time)) || (end && String(end) !== String(before.end_time)); + await registrarAudit(pool, { + clinicaId: before.clinica_id, entidade: 'agendamento', entidadeId: req.params.id, + acao: movido ? 'reagendou' : 'editou', actorId: actor, actorNome: actorNm, + detalhes: movido + ? { de: { start: before.start_time, end: before.end_time }, para: { start: start || before.start_time, end: end || before.end_time } } + : { campos: Object.keys(updateData).filter(k => !['updated_by', 'updated_by_nome', 'updated_at', 'version'].includes(k)) } + }); schedulePush('agendamentos'); - res.json({ success: true }); + res.json({ success: true, version: updateData.version }); } catch (err) { if (err.code === '23505') { return res.status(409).json({ @@ -1027,27 +1731,255 @@ app.put('/api/agendamentos/:id', async (req, res) => { } }); -app.delete('/api/agendamentos/:id', async (req, res) => { +// DELETE = cancelamento SOFT (status 'cancelado'). NUNCA remove a linha — preserva +// histórico/autoria ("quem cancelou") e gera pendência "a reagendar". +app.delete('/api/agendamentos/:id', authGuard, async (req, res) => { try { - await pool.query('DELETE FROM agendamentos WHERE id = $1', [req.params.id]); + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); + const { rows: ag } = await pool.query('SELECT * FROM agendamentos WHERE id = $1', [req.params.id]); + if (!ag.length) return res.status(404).json({ success: false, message: 'Agendamento não encontrado.' }); + const a = ag[0]; + + await pool.query( + `UPDATE agendamentos SET status='cancelado', canceled_by=$2, canceled_by_nome=$3, canceled_at=NOW(), version=COALESCE(version,1)+1 WHERE id=$1`, + [req.params.id, actor, actorNm]); + await registrarAudit(pool, { + clinicaId: a.clinica_id, entidade: 'agendamento', entidadeId: a.id, acao: 'cancelou', + actorId: actor, actorNome: actorNm, detalhes: { motivo: req.body?.motivo || null, start: a.start_time } + }); + await abrirPendencia(pool, { clinicaId: a.clinica_id, pacienteId: a.pacienteid, pacienteNome: a.pacientenome, origemId: a.id, motivo: 'cancelado' }); + await notificarInteressesSlotLivre(a); res.json({ success: true }); } catch (err) { res.status(500).json({ error: err.message }); } }); -// --- ESPECIALIDADES --- -app.get('/api/especialidades', async (req, res) => { +// Marcar FALTA (no-show) → contabiliza falta do paciente + pendência "a reagendar". +app.post('/api/agendamentos/:id/falta', authGuard, async (req, res) => { try { - const { rows } = await pool.query('SELECT * FROM especialidades ORDER BY ordem ASC, nome ASC'); + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); + const { rows: ag } = await pool.query('SELECT * FROM agendamentos WHERE id = $1', [req.params.id]); + if (!ag.length) return res.status(404).json({ success: false, message: 'Agendamento não encontrado.' }); + const a = ag[0]; + await pool.query(`UPDATE agendamentos SET status='falta', updated_by=$2, updated_by_nome=$3, updated_at=NOW(), version=COALESCE(version,1)+1 WHERE id=$1`, [req.params.id, actor, actorNm]); + await registrarAudit(pool, { clinicaId: a.clinica_id, entidade: 'agendamento', entidadeId: a.id, acao: 'faltou', actorId: actor, actorNome: actorNm, detalhes: { start: a.start_time } }); + await abrirPendencia(pool, { clinicaId: a.clinica_id, pacienteId: a.pacienteid, pacienteNome: a.pacientenome, origemId: a.id, motivo: 'falta' }); + await notificarInteressesSlotLivre(a); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +// REMARCAR (precisa nova data, SEM horário definido) → pendência "a reagendar". +app.post('/api/agendamentos/:id/remarcar', authGuard, async (req, res) => { + try { + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); + const { rows: ag } = await pool.query('SELECT * FROM agendamentos WHERE id = $1', [req.params.id]); + if (!ag.length) return res.status(404).json({ success: false, message: 'Agendamento não encontrado.' }); + const a = ag[0]; + await pool.query(`UPDATE agendamentos SET status='remarcar', updated_by=$2, updated_by_nome=$3, updated_at=NOW(), version=COALESCE(version,1)+1 WHERE id=$1`, [req.params.id, actor, actorNm]); + await registrarAudit(pool, { clinicaId: a.clinica_id, entidade: 'agendamento', entidadeId: a.id, acao: 'remarcou', actorId: actor, actorNome: actorNm, detalhes: { motivo: req.body?.motivo || null, start: a.start_time } }); + await abrirPendencia(pool, { clinicaId: a.clinica_id, pacienteId: a.pacienteid, pacienteNome: a.pacientenome, origemId: a.id, motivo: 'remarcar' }); + await notificarInteressesSlotLivre(a); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +// RESTAURAR (desfaz cancelamento/falta/remarcar) → volta a 'agendado' e baixa a pendência gerada. +app.post('/api/agendamentos/:id/restaurar', authGuard, async (req, res) => { + try { + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); + const { rows: ag } = await pool.query('SELECT * FROM agendamentos WHERE id = $1', [req.params.id]); + if (!ag.length) return res.status(404).json({ success: false, message: 'Agendamento não encontrado.' }); + const a = ag[0]; + await pool.query(`UPDATE agendamentos SET status='agendado', canceled_by=NULL, canceled_by_nome=NULL, canceled_at=NULL, updated_by=$2, updated_by_nome=$3, updated_at=NOW(), version=COALESCE(version,1)+1 WHERE id=$1`, [req.params.id, actor, actorNm]); + await registrarAudit(pool, { clinicaId: a.clinica_id, entidade: 'agendamento', entidadeId: a.id, acao: 'restaurou', actorId: actor, actorNome: actorNm, detalhes: {} }); + await pool.query(`UPDATE agenda_pendencias SET status='resolvida', resolved_at=NOW(), resolved_by=$2, resolved_by_nome=$3, resolucao='restaurado' WHERE origem_agendamento_id=$1 AND status='aberta'`, [a.id, actor, actorNm]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +// Histórico (auditoria) de um agendamento. +app.get('/api/agendamentos/:id/historico', authGuard, async (req, res) => { + try { + const { rows } = await pool.query( + `SELECT acao, actor_nome, detalhes, at FROM audit_log WHERE entidade='agendamento' AND entidade_id=$1 ORDER BY at ASC`, + [req.params.id]); + res.json({ success: true, historico: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// Pendências "a reagendar" da clínica (default: abertas). +app.get('/api/agenda/pendencias', authGuard, async (req, res) => { + try { + const { clinicaId, status } = req.query; + if (!clinicaId) return res.json({ success: true, pendencias: [] }); + const { rows } = await pool.query( + `SELECT * FROM agenda_pendencias WHERE clinica_id=$1 AND status=$2 ORDER BY created_at DESC`, + [clinicaId, status || 'aberta']); + res.json({ success: true, pendencias: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// Baixa manual de pendência ("não vai reagendar" / dispensar). +app.post('/api/agenda/pendencias/:id/resolver', authGuard, async (req, res) => { + try { + const actor = req.authUser?.userId || null; + const actorNm = await actorNome(actor); + await pool.query( + `UPDATE agenda_pendencias SET status='resolvida', resolved_at=NOW(), resolved_by=$2, resolved_by_nome=$3, resolucao=$4 WHERE id=$1`, + [req.params.id, actor, actorNm, req.body?.resolucao || 'dispensado']); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// Contagem de faltas de um paciente. +app.get('/api/pacientes/:id/faltas', authGuard, async (req, res) => { + try { + const { rows } = await pool.query(`SELECT count(*)::int AS faltas FROM agendamentos WHERE pacienteid=$1 AND lower(status)='falta'`, [req.params.id]); + res.json({ success: true, faltas: rows[0]?.faltas || 0 }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- PRESENÇA NA AGENDA (Fase 2) --- +// Heartbeat: registra a última visita (DB, persistente) + presença AO VIVO (Dragonfly, TTL). +app.post('/api/agenda/presenca', authGuard, async (req, res) => { + try { + const actor = req.authUser?.userId || null; + const { clinicaId } = req.body || {}; + if (!clinicaId || !actor) return res.json({ success: true }); + const nome = (await actorNome(actor)) || 'Usuário'; + await pool.query( + `INSERT INTO agenda_presenca (clinica_id, usuario_id, usuario_nome, last_view_at) + VALUES ($1,$2,$3,NOW()) + ON CONFLICT (clinica_id, usuario_id) DO UPDATE SET usuario_nome=EXCLUDED.usuario_nome, last_view_at=NOW()`, + [clinicaId, actor, nome]); + if (redis) { + const key = `presence:agenda:${clinicaId}`; + await redis.zadd(key, Date.now(), `${actor}|${nome}`); + await redis.expire(key, 86400); + } + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// Quem está ONLINE agora (Dragonfly, janela de 45s) + últimas visitas (DB). +app.get('/api/agenda/presenca', authGuard, async (req, res) => { + try { + const { clinicaId } = req.query; + if (!clinicaId) return res.json({ success: true, online: [], ultimas: [] }); + const me = req.authUser?.userId || null; + let online = []; + if (redis) { + const key = `presence:agenda:${clinicaId}`; + await redis.zremrangebyscore(key, 0, Date.now() - 45000); + const membros = await redis.zrange(key, 0, -1, 'WITHSCORES'); + for (let i = 0; i < membros.length; i += 2) { + const parts = membros[i].split('|'); + const uid = parts.shift(); + online.push({ usuario_id: uid, nome: parts.join('|'), ts: Number(membros[i + 1]) }); + } + online = online.filter(o => o.usuario_id !== me); + } + const { rows: ultimas } = await pool.query( + `SELECT usuario_id, usuario_nome, last_view_at FROM agenda_presenca WHERE clinica_id=$1 ORDER BY last_view_at DESC LIMIT 20`, + [clinicaId]); + res.json({ success: true, online, ultimas }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// Grupo familiar do paciente (para chips compactos no modal de agenda). +app.get('/api/pacientes/:id/familia', authGuard, async (req, res) => { + try { + const { rows: pr } = await pool.query('SELECT grupofamiliarid FROM pacientes WHERE id = $1', [req.params.id]); + const gid = pr[0]?.grupofamiliarid; + if (!gid) return res.json({ success: true, grupo: null, membros: [] }); + const { rows: g } = await pool.query('SELECT id, nome, responsavel_id FROM grupos_familiares WHERE id = $1', [gid]); + const { rows: m } = await pool.query( + 'SELECT id, nome, grupofamiliarrelacao, telefone FROM pacientes WHERE grupofamiliarid = $1 ORDER BY nome', [gid]); + res.json({ success: true, grupo: g[0] || { id: gid }, membros: m }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- INTERESSES DE AGENDA (Fase 4) --- +// Fila de interesse quando o horário do profissional está ocupado (não trava o slot). +app.post('/api/interesses', async (req, res) => { + try { + const { dentistaId, profissionalUsuarioId, clinicaInteressadaId, solicitanteUsuarioId, start, end, tempoEsperaMin, observacoes } = req.body; + if (!clinicaInteressadaId || !start) return res.status(400).json({ success: false, message: 'clinicaInteressadaId e start são obrigatórios.' }); + + // identidade global do profissional + let profUid = profissionalUsuarioId || null; + if (!profUid && dentistaId) { + const { rows } = await pool.query('SELECT usuario_id FROM dentistas WHERE id = $1', [dentistaId]); + profUid = rows[0]?.usuario_id || null; + } + if (!profUid) return res.status(400).json({ success: false, message: 'Profissional não identificado.' }); + + // quem notificar: o solicitante informado ou o dono da clínica interessada + let solicitante = solicitanteUsuarioId || null; + if (!solicitante) { + const { rows } = await pool.query('SELECT owner_id FROM clinicas WHERE id = $1', [clinicaInteressadaId]); + solicitante = rows[0]?.owner_id || null; + } + + const id = `int_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`; + // expira_em calculado no SQL (NOW()+interval) p/ ficar na mesma base de tempo + // que NOW()/created_at e evitar descompasso de fuso com strings UTC do JS. + const minutos = tempoEsperaMin != null ? Number(tempoEsperaMin) : null; + const { rows: ins } = await pool.query( + `INSERT INTO interesses_agenda (id, profissional_usuario_id, clinica_interessada_id, solicitante_usuario_id, start_time, end_time, expira_em, observacoes) + VALUES ($1,$2,$3,$4,$5,$6, + CASE WHEN $7::int IS NULL THEN NULL ELSE NOW() + ($7::int * interval '1 minute') END, + $8) + RETURNING expira_em`, + [id, profUid, clinicaInteressadaId, solicitante, start, end || null, minutos, observacoes || null] + ); + res.json({ success: true, interesse: { id, profissional_usuario_id: profUid, status: 'aguardando', expira_em: ins[0].expira_em } }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.get('/api/interesses', async (req, res) => { + try { + const { profissionalId, clinicaId } = req.query; + // expira preguiçosamente os vencidos + await pool.query(`UPDATE interesses_agenda SET status = 'expirado' WHERE status = 'aguardando' AND expira_em IS NOT NULL AND expira_em < NOW()`); + let sql = `SELECT i.*, c.nome_fantasia AS clinica_nome + FROM interesses_agenda i + LEFT JOIN clinicas c ON c.id = i.clinica_interessada_id + WHERE 1=1`; + const params = []; let i = 1; + if (profissionalId) { sql += ` AND i.profissional_usuario_id = $${i++}`; params.push(profissionalId); } + if (clinicaId) { sql += ` AND i.clinica_interessada_id = $${i++}`; params.push(clinicaId); } + sql += ' ORDER BY i.created_at ASC'; + const { rows } = await pool.query(sql, params); res.json(rows); } catch (err) { res.status(500).json({ error: err.message }); } }); -app.post('/api/especialidades', async (req, res) => { +// --- ESPECIALIDADES --- +app.get('/api/especialidades', authGuard, async (req, res) => { try { - // Automatically set order to the end + const { clinicaId } = req.query; + const sql = clinicaId + ? 'SELECT * FROM especialidades WHERE clinica_id IS NULL OR clinica_id = $1 ORDER BY ordem ASC, nome ASC' + : 'SELECT * FROM especialidades WHERE clinica_id IS NULL ORDER BY ordem ASC, nome ASC'; + const params = clinicaId ? [clinicaId] : []; + const { rows } = await pool.query(sql, params); + res.json(rows); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.post('/api/especialidades', authGuard, async (req, res) => { + try { + const { rows: userRows } = await pool.query('SELECT role FROM usuarios WHERE id = $1', [req.authUser.userId]); + const isSuperAdmin = userRows[0]?.role === 'superadmin'; + const clinicaId = isSuperAdmin ? null : (req.body.clinica_id || req.query.clinicaId || null); const { rows: counts } = await pool.query('SELECT COUNT(*) as count FROM especialidades'); const ordem = parseInt(counts[0].count); - const ins = buildInsert('especialidades', { ...req.body, ordem }); + const ins = buildInsert('especialidades', { ...req.body, clinica_id: clinicaId, ordem }); await pool.query(ins.text, ins.values); res.json({ success: true }); } catch (err) { res.status(500).json({ error: err.message }); } @@ -1083,16 +2015,23 @@ app.delete('/api/especialidades/:id', async (req, res) => { }); // --- PLANOS --- -app.get('/api/planos', async (req, res) => { +app.get('/api/planos', authGuard, async (req, res) => { try { - const { rows } = await pool.query('SELECT * FROM planos'); + const { clinicaId } = req.query; + const sql = clinicaId + ? 'SELECT * FROM planos WHERE clinica_id IS NULL OR clinica_id = $1 ORDER BY nome ASC' + : 'SELECT * FROM planos WHERE clinica_id IS NULL ORDER BY nome ASC'; + const { rows } = await pool.query(sql, clinicaId ? [clinicaId] : []); res.json(rows); } catch (err) { res.status(500).json({ error: err.message }); } }); -app.post('/api/planos', async (req, res) => { +app.post('/api/planos', authGuard, async (req, res) => { try { - const ins = buildInsert('planos', req.body); + const { rows: userRows } = await pool.query('SELECT role FROM usuarios WHERE id = $1', [req.authUser.userId]); + const isSuperAdmin = userRows[0]?.role === 'superadmin'; + const clinicaId = isSuperAdmin ? null : (req.body.clinica_id || req.query.clinicaId || null); + const ins = buildInsert('planos', { ...req.body, clinica_id: clinicaId }); await pool.query(ins.text, ins.values); res.json({ success: true }); } catch (err) { res.status(500).json({ error: err.message }); } @@ -1114,9 +2053,13 @@ app.delete('/api/planos/:id', async (req, res) => { }); // --- PROCEDIMENTOS --- -app.get('/api/procedimentos', async (req, res) => { +app.get('/api/procedimentos', authGuard, async (req, res) => { try { - const { rows: procs } = await pool.query('SELECT * FROM procedimentos ORDER BY ordem ASC, nome ASC'); + const { clinicaId } = req.query; + const sql = clinicaId + ? 'SELECT * FROM procedimentos WHERE clinica_id IS NULL OR clinica_id = $1 ORDER BY ordem ASC, nome ASC' + : 'SELECT * FROM procedimentos WHERE clinica_id IS NULL ORDER BY ordem ASC, nome ASC'; + const { rows: procs } = await pool.query(sql, clinicaId ? [clinicaId] : []); const { rows: valores } = await pool.query('SELECT * FROM procedimentos_valores_planos'); const data = procs.map(p => ({ @@ -1139,8 +2082,11 @@ app.get('/api/procedimentos', async (req, res) => { } catch (err) { res.status(500).json({ error: err.message }); } }); -app.post('/api/procedimentos', async (req, res) => { +app.post('/api/procedimentos', authGuard, async (req, res) => { try { + const { rows: userRows } = await pool.query('SELECT role FROM usuarios WHERE id = $1', [req.authUser.userId]); + const isSuperAdmin = userRows[0]?.role === 'superadmin'; + const clinicaId = isSuperAdmin ? null : (req.body.clinica_id || req.query.clinicaId || null); const { valoresPlanos, ...proc } = req.body; // Auto-generate codigoInterno for PARTICULAR @@ -1156,6 +2102,7 @@ app.post('/api/procedimentos', async (req, res) => { const payload = { ...proc, + clinica_id: clinicaId, codigoInterno: codigoInternoVal, ordem: ordemValue, tipo_regiao: proc.tipo_regiao || 'GERAL', @@ -1342,16 +2289,20 @@ app.delete('/api/contratos/:id', async (req, res) => { }); // --- LEADS --- -app.get('/api/leads', async (req, res) => { +app.get('/api/leads', authGuard, async (req, res) => { try { - const { rows } = await pool.query('SELECT * FROM leads'); + const { clinicaId } = req.query; + if (!clinicaId) return res.status(400).json({ error: 'clinicaId obrigatório.' }); + const { rows } = await pool.query('SELECT * FROM leads WHERE clinica_id = $1 ORDER BY datacadastro DESC NULLS LAST', [clinicaId]); res.json(rows); } catch (err) { res.status(500).json({ error: err.message }); } }); -app.post('/api/leads', async (req, res) => { +app.post('/api/leads', authGuard, async (req, res) => { try { - const ins = buildInsert('leads', req.body); + const clinicaId = req.body.clinica_id || req.query.clinicaId; + if (!clinicaId) return res.status(400).json({ error: 'clinica_id obrigatório.' }); + const ins = buildInsert('leads', { ...req.body, clinica_id: clinicaId }); await pool.query(ins.text, ins.values); schedulePush('leads'); res.json({ success: true }); @@ -1578,6 +2529,7 @@ app.post('/api/sync/push', tenantGuard, async (req, res) => { // POST /api/sync/pull — Google Sheets → PG (restaurar backup) app.post('/api/sync/pull', tenantGuard, async (req, res) => { const logs = []; + const clinicaId = req.clinicaId; try { const sheets = await getSheetsClient(); logs.push(`[OK] AUTENTICADO NO GOOGLE`); @@ -1585,7 +2537,15 @@ app.post('/api/sync/pull', tenantGuard, async (req, res) => { logs.push(`[←] IMPORTANDO: ${tableDef.tab.toUpperCase()}...`); try { const count = await pullTableFromSheet(tableDef, sheets); - logs.push(`[OK] ${tableDef.tab}: ${count} REGISTROS IMPORTADOS`); + if (clinicaId) { + await pool.query( + `UPDATE ${tableDef.pgTable} SET clinica_id = $1 WHERE clinica_id IS NULL`, + [clinicaId] + ); + logs.push(`[OK] ${tableDef.tab}: ${count} REGISTROS → clinica_id vinculado`); + } else { + logs.push(`[OK] ${tableDef.tab}: ${count} REGISTROS IMPORTADOS`); + } } catch (e) { logs.push(`[ERRO] ${tableDef.tab}: ${e.message}`); } @@ -1638,12 +2598,13 @@ app.post('/api/sync/import-legacy', tenantGuard, async (req, res) => { try { const trunc = (v, n) => v ? v.substring(0, n) : null; await pool.query( - `INSERT INTO pacientes (id,nome,cpf,telefone,email,ultimotratamento,convenio,datanascimento) - VALUES ($1,$2,$3,$4,$5,$6,$7,$8) + `INSERT INTO pacientes (id,nome,cpf,telefone,email,ultimotratamento,convenio,datanascimento,clinica_id) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9) ON CONFLICT (id) DO UPDATE SET nome=EXCLUDED.nome,cpf=EXCLUDED.cpf,telefone=EXCLUDED.telefone, - convenio=EXCLUDED.convenio,datanascimento=EXCLUDED.datanascimento`, - [trunc(id,50), trunc(nome,255), trunc(cpfRaw,20)||null, trunc(get(iTel),20)||null, null, null, trunc(get(iCred),100)||null, trunc(get(iNasci),20)||null] + convenio=EXCLUDED.convenio,datanascimento=EXCLUDED.datanascimento, + clinica_id=EXCLUDED.clinica_id`, + [trunc(id,50), trunc(nome,255), trunc(cpfRaw,20)||null, trunc(get(iTel),20)||null, null, null, trunc(get(iCred),100)||null, trunc(get(iNasci),20)||null, req.clinicaId] ); imported++; } catch (e) { @@ -1652,9 +2613,9 @@ app.post('/api/sync/import-legacy', tenantGuard, async (req, res) => { } } logs.push(`[✓] ${imported} PACIENTES IMPORTADOS, ${skipped} IGNORADOS`); + logs.push(`[!] PLANILHA NÃO FOI ALTERADA. Use "Backup Agora" se quiser sincronizar.`); if (imported > 0) { await saveSyncStatus({ pacientes: { lastPush: new Date().toISOString(), count: imported, source: 'legacy' } }); - schedulePush('pacientes'); } res.json({ success: true, logs, imported, skipped }); } catch (err) { @@ -1935,6 +2896,302 @@ async function runMigrations() { descricao TEXT, ordem INTEGER DEFAULT 0 )`, + // Usuarios: role, ativo e diretório de profissionais + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS role TEXT DEFAULT 'dentista'`, + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS ativo BOOLEAN DEFAULT true`, + // Provisionamento de equipe: força troca da senha temporária no 1º login. + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS must_change_password BOOLEAN DEFAULT false`, + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS estado TEXT`, + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS cidade TEXT`, + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS bairro TEXT`, + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS especialidade_dir TEXT`, + `ALTER TABLE usuarios ADD COLUMN IF NOT EXISTS disponivel_diretorio BOOLEAN DEFAULT false`, + // Clinicas: cor padrão + `ALTER TABLE clinicas ADD COLUMN IF NOT EXISTS cor TEXT DEFAULT '#2563eb'`, + // Clinicas → workspaces (Fase 1): tipo = pessoal | consultorio | clinica; owner_id = dono + `ALTER TABLE clinicas ADD COLUMN IF NOT EXISTS tipo TEXT DEFAULT 'clinica'`, + `ALTER TABLE clinicas ADD COLUMN IF NOT EXISTS owner_id TEXT`, + // Backup por clínica: ID da planilha Google Sheets própria da unidade. + `ALTER TABLE clinicas ADD COLUMN IF NOT EXISTS sheets_id TEXT`, + // Dentistas → identidade global do profissional (Fase 2): liga o registro local da + // clínica ao usuario global. Backfill idempotente por email (mesma pessoa em várias + // clínicas → mesmo usuario_id). É a base do anti-overbooking (Fase 3). + `ALTER TABLE dentistas ADD COLUMN IF NOT EXISTS usuario_id TEXT`, + `UPDATE dentistas d SET usuario_id = u.id FROM usuarios u WHERE d.usuario_id IS NULL AND d.email IS NOT NULL AND lower(d.email) = lower(u.email)`, + // Interesses de agenda (Fase 4): fila de interesse quando o slot está ocupado. + // NÃO trava o slot (só 1 agendamento por horário mantém o invariante). + `CREATE TABLE IF NOT EXISTS interesses_agenda ( + id TEXT PRIMARY KEY, + profissional_usuario_id TEXT NOT NULL, + clinica_interessada_id TEXT NOT NULL, + solicitante_usuario_id TEXT, + start_time TIMESTAMP NOT NULL, + end_time TIMESTAMP, + status TEXT DEFAULT 'aguardando', + expira_em TIMESTAMP, + observacoes TEXT, + created_at TIMESTAMP DEFAULT NOW() + )`, + // Vinculos: constraint role (inclui protetico — necessário p/ workspace pessoal) + `ALTER TABLE vinculos DROP CONSTRAINT IF EXISTS vinculos_role_check`, + `ALTER TABLE vinculos ADD CONSTRAINT vinculos_role_check CHECK (role = ANY(ARRAY['paciente','dentista','protetico','funcionario','donoclinica','donoconsultorio','admin']))`, + `ALTER TABLE google_tokens ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE pacientes ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE leads ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE especialidades ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE planos ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE procedimentos ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE guias_odontologicas ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE financeiro ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS clinica_id TEXT`, + // =================================================================== + // ORTODONTIA · DOCUMENTAÇÃO FOTOGRÁFICA · TUTORIA + // tratamento_id é TEXT livre (os tratamentos ainda são mock no front). + // =================================================================== + `CREATE TABLE IF NOT EXISTS ortho_photo_session ( + id TEXT PRIMARY KEY, + tratamento_id TEXT NOT NULL, + clinica_id TEXT, + tipo TEXT NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), + UNIQUE (tratamento_id, tipo) + )`, + // Sessões mensais: orto é mensal, então além das sessões especiais + // (inicial/finalizacao/pos_contencao) há uma sessão por mês para a evolução. + `ALTER TABLE ortho_photo_session ADD COLUMN IF NOT EXISTS rotulo TEXT`, + `ALTER TABLE ortho_photo_session ADD COLUMN IF NOT EXISTS data_ref DATE`, + `CREATE TABLE IF NOT EXISTS ortho_photo ( + id TEXT PRIMARY KEY, + sessao_id TEXT NOT NULL, + slot TEXT NOT NULL, + filename TEXT NOT NULL, + mimetype TEXT, + original_name TEXT, + created_at TIMESTAMPTZ DEFAULT NOW(), + UNIQUE (sessao_id, slot) + )`, + `CREATE TABLE IF NOT EXISTS ortho_photo_annotation ( + id TEXT PRIMARY KEY, + foto_id TEXT NOT NULL, + dados JSONB NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_tutor_config ( + id TEXT PRIMARY KEY, + taxa_inscricao NUMERIC DEFAULT 0, + chave_pix TEXT, + instrucoes_pagamento TEXT, + mp_access_token TEXT, + mp_public_key TEXT, + comissao_pct NUMERIC DEFAULT 20, + texto_responsabilidade TEXT, + updated_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_tutor_candidatura ( + id TEXT PRIMARY KEY, + usuario_id TEXT, + nome TEXT NOT NULL, + email TEXT, + telefone TEXT, + cro TEXT, + cro_uf TEXT, + titulacao TEXT, + instituicao TEXT, + ano_conclusao INTEGER, + especialidade_principal TEXT, + especialidades_adicionais JSONB, + anos_experiencia INTEGER, + bio TEXT, + preco_por_consulta NUMERIC, + portfolio_url TEXT, + linkedin_url TEXT, + status TEXT DEFAULT 'PENDENTE', + observacao_admin TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_tutor_profile ( + id TEXT PRIMARY KEY, + usuario_id TEXT, + nome TEXT NOT NULL, + especialidade TEXT, + especialidades_adicionais JSONB, + bio TEXT, + preco_base NUMERIC, + sla_horas INTEGER DEFAULT 48, + cro TEXT, + cro_uf TEXT, + titulacao TEXT, + instituicao TEXT, + anos_experiencia INTEGER, + portfolio_url TEXT, + linkedin_url TEXT, + pix_key TEXT, + mp_email TEXT, + aceite_split_pct NUMERIC, + aceite_split_at TIMESTAMPTZ, + status TEXT DEFAULT 'ATIVO', + disponivel BOOLEAN DEFAULT true, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_tutoring_request ( + id TEXT PRIMARY KEY, + tratamento_id TEXT, + clinica_id TEXT, + tutor_id TEXT, + paciente_nome TEXT, + tipo TEXT, + descricao TEXT, + status TEXT DEFAULT 'AGUARDANDO', + aceite_responsabilidade BOOLEAN DEFAULT false, + aceite_nome TEXT, + aceite_texto_versao TEXT, + valor_consultoria NUMERIC, + comissao_pct NUMERIC, + valor_tutor NUMERIC, + status_repasse TEXT DEFAULT 'PENDENTE', + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_tutoring_message ( + id TEXT PRIMARY KEY, + request_id TEXT NOT NULL, + autor_tipo TEXT NOT NULL, + autor_nome TEXT, + conteudo TEXT NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_tutoring_photo_package ( + id TEXT PRIMARY KEY, + request_id TEXT NOT NULL, + foto_id TEXT NOT NULL, + slot TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + // Tratamentos ortodônticos (CRM) + evoluções mensais + `CREATE TABLE IF NOT EXISTS ortho_tratamento ( + id TEXT PRIMARY KEY, + clinica_id TEXT, + paciente_id TEXT, + paciente_nome TEXT NOT NULL, + data_nascimento TEXT, + responsavel TEXT, + tipo_paciente TEXT, + triagem JSONB, + diagnostico JSONB, + data_inicio TEXT, + tipo_aparelho TEXT, + extracoes TEXT, + sequencia_fios TEXT, + elasticos TEXT, + ipr_planejado TEXT, + tempo_estimado TEXT, + valor NUMERIC, + forma_pagamento TEXT, + fase_atual TEXT, + fio_atual TEXT, + classificacao TEXT, + cooperacao TEXT, + percentual_concluido INTEGER, + ultima_consulta TEXT, + proxima_consulta TEXT, + meses_restantes INTEGER, + status TEXT DEFAULT 'Em Tratamento', + flags JSONB, + contencao_tipo TEXT, + contencao_superior BOOLEAN, + contencao_inferior BOOLEAN, + tempo_uso TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS ortho_evolucao ( + id TEXT PRIMARY KEY, + tratamento_id TEXT NOT NULL, + data TEXT, + tipo TEXT, + procedimento TEXT, + proximo_retorno TEXT, + fio TEXT, + elastico TEXT, + procedimentos JSONB, + higiene INTEGER, + cooperacao TEXT, + observacoes TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + // Gestão de equipe: setores + funções por clínica; vínculos ganham setor/função. + `CREATE TABLE IF NOT EXISTS setores ( + id TEXT PRIMARY KEY, + clinica_id TEXT, + nome TEXT NOT NULL, + descricao TEXT, + cor TEXT DEFAULT '#2563eb', + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE TABLE IF NOT EXISTS funcoes ( + id TEXT PRIMARY KEY, + clinica_id TEXT, + nome TEXT NOT NULL, + descricao TEXT, + created_at TIMESTAMPTZ DEFAULT NOW() + )`, + `ALTER TABLE vinculos ADD COLUMN IF NOT EXISTS setor_id TEXT`, + `ALTER TABLE vinculos ADD COLUMN IF NOT EXISTS funcao_id TEXT`, + // Gestão de acessos por cargo (RBAC): páginas permitidas + nível hierárquico. + `ALTER TABLE funcoes ADD COLUMN IF NOT EXISTS permissoes JSONB DEFAULT '[]'::jsonb`, + `ALTER TABLE funcoes ADD COLUMN IF NOT EXISTS nivel INTEGER DEFAULT 1`, + // ── Agenda Fase 1: autoria, soft-delete, faltas, auditoria, pendências ── + // Novo vocabulário de status (o CHECK antigo barrava 'agendado'/'cancelado'). + `ALTER TABLE agendamentos DROP CONSTRAINT IF EXISTS agendamentos_status_check`, + `ALTER TABLE agendamentos ADD CONSTRAINT agendamentos_status_check CHECK (status IS NULL OR lower(status) IN ('agendado','confirmado','reagendado','remarcar','cancelado','falta','atendido','pendente','concluido','faltou'))`, + // Slot único só vale para status ATIVOS — assim cancelar/faltar libera o slot p/ reagendar. + `ALTER TABLE agendamentos DROP CONSTRAINT IF EXISTS unique_dentista_slot`, + `CREATE UNIQUE INDEX IF NOT EXISTS unique_dentista_slot_active ON agendamentos (dentistaid, start_time) WHERE lower(status) NOT IN ('cancelado','falta','remarcar')`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS pacienteid TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS pacientecelular TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS created_by TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS created_by_nome TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ DEFAULT NOW()`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS updated_by TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS updated_by_nome TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS canceled_by TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS canceled_by_nome TEXT`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS canceled_at TIMESTAMPTZ`, + `ALTER TABLE agendamentos ADD COLUMN IF NOT EXISTS version INTEGER DEFAULT 1`, + `CREATE TABLE IF NOT EXISTS audit_log ( + id TEXT PRIMARY KEY, + clinica_id TEXT, + entidade TEXT NOT NULL, + entidade_id TEXT, + acao TEXT NOT NULL, + actor_id TEXT, + actor_nome TEXT, + detalhes JSONB DEFAULT '{}'::jsonb, + at TIMESTAMPTZ DEFAULT NOW() + )`, + `CREATE INDEX IF NOT EXISTS idx_audit_entidade ON audit_log (clinica_id, entidade, entidade_id, at DESC)`, + `CREATE INDEX IF NOT EXISTS idx_audit_clinica ON audit_log (clinica_id, at DESC)`, + `CREATE TABLE IF NOT EXISTS agenda_pendencias ( + id TEXT PRIMARY KEY, + clinica_id TEXT, + paciente_id TEXT, + paciente_nome TEXT, + origem_agendamento_id TEXT, + motivo TEXT, + status TEXT DEFAULT 'aberta', + created_at TIMESTAMPTZ DEFAULT NOW(), + resolved_at TIMESTAMPTZ, + resolved_by TEXT, + resolved_by_nome TEXT, + resolucao TEXT + )`, + `CREATE INDEX IF NOT EXISTS idx_pend_clinica ON agenda_pendencias (clinica_id, status, created_at DESC)`, + `CREATE TABLE IF NOT EXISTS agenda_presenca ( + clinica_id TEXT, + usuario_id TEXT, + usuario_nome TEXT, + last_view_at TIMESTAMPTZ DEFAULT NOW(), + PRIMARY KEY (clinica_id, usuario_id) + )`, ]; for (const sql of migrations) { try { await pool.query(sql); } catch (e) { console.error('[MIGRATION]', e.message); } @@ -1942,11 +3199,971 @@ async function runMigrations() { console.log('[MIGRATION] all migrations OK'); } +// --- DIRETÓRIO DE PROFISSIONAIS --- +// Perfil do sistema (usuário logado): leitura e edição dos próprios dados. +app.get('/api/usuarios/me', authGuard, async (req, res) => { + try { + const { rows } = await pool.query( + `SELECT id, nome, email, celular, cro, cro_uf, especialidade, cidade, bairro, estado, cor_agenda, role + FROM usuarios WHERE id = $1`, [req.authUser.userId]); + if (!rows.length) return res.status(404).json({ success: false, message: 'Usuário não encontrado.' }); + res.json({ success: true, usuario: rows[0] }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/usuarios/me', authGuard, async (req, res) => { + const COLS = ['nome', 'email', 'celular', 'cro', 'cro_uf', 'especialidade', 'cidade', 'bairro', 'estado', 'cor_agenda']; + const UPPER = new Set(['nome', 'especialidade', 'cro_uf', 'cidade', 'bairro', 'estado']); + try { + const b = req.body || {}; + if (b.email) { + const email = String(b.email).toLowerCase().trim(); + const { rows } = await pool.query('SELECT id FROM usuarios WHERE email = $1 AND id <> $2', [email, req.authUser.userId]); + if (rows.length) return res.status(409).json({ success: false, message: 'E-mail já usado por outra conta.' }); + } + const keys = COLS.filter(c => b[c] !== undefined); + if (!keys.length) return res.json({ success: true }); + const val = (c) => c === 'email' ? String(b[c]).toLowerCase().trim() + : (UPPER.has(c) && typeof b[c] === 'string') ? b[c].trim().toUpperCase() : b[c]; + const set = keys.map((c, i) => `${c} = $${i + 1}`).join(', '); + await pool.query(`UPDATE usuarios SET ${set} WHERE id = $${keys.length + 1}`, [...keys.map(val), req.authUser.userId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +// Trocar senha (inclui o caso de troca obrigatória no 1º login). +app.post('/api/usuarios/me/senha', authGuard, async (req, res) => { + const { atual, nova } = req.body || {}; + if (!nova || String(nova).length < 6) return res.status(400).json({ success: false, message: 'A NOVA SENHA DEVE TER NO MÍNIMO 6 CARACTERES.' }); + try { + const { rows } = await pool.query('SELECT senha, must_change_password FROM usuarios WHERE id = $1', [req.authUser.userId]); + if (!rows.length) return res.status(404).json({ success: false, message: 'Usuário não encontrado.' }); + // Fora do fluxo de troca obrigatória, exige a senha atual. + if (!rows[0].must_change_password) { + if (!atual || !(await verificarSenha(req.authUser.userId, atual, rows[0].senha))) { + return res.status(400).json({ success: false, message: 'SENHA ATUAL INCORRETA.' }); + } + } + await pool.query('UPDATE usuarios SET senha = $1, must_change_password = false WHERE id = $2', [await hashSenha(nova), req.authUser.userId]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +app.put('/api/usuarios/localidade', async (req, res) => { + const authHeader = req.headers['authorization']; + if (!authHeader?.startsWith('Bearer ')) return res.status(401).json({ success: false, message: 'Não autenticado.' }); + let payload; + try { payload = jwt.verify(authHeader.split(' ')[1], JWT_SECRET); } catch { return res.status(401).json({ success: false }); } + const { estado, cidade, bairro, especialidade, disponivel_diretorio } = req.body; + if (!estado || !cidade) return res.status(400).json({ success: false, message: 'Estado e cidade são obrigatórios.' }); + try { + await pool.query( + `UPDATE usuarios SET estado=$1, cidade=$2, bairro=$3, especialidade_dir=$4, disponivel_diretorio=$5 WHERE id=$6`, + [estado.toUpperCase(), cidade.toUpperCase(), bairro?.toUpperCase() || null, especialidade?.toUpperCase() || null, disponivel_diretorio ?? true, payload.userId] + ); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +app.get('/api/profissionais-disponiveis', async (req, res) => { + const authHeader = req.headers['authorization']; + if (!authHeader?.startsWith('Bearer ')) return res.status(401).json({ error: 'Não autenticado.' }); + try { jwt.verify(authHeader.split(' ')[1], JWT_SECRET); } catch { return res.status(401).json({ error: 'Token inválido.' }); } + const { tipo, estado, cidade, especialidade } = req.query; + const TIPOS = ['dentista', 'protetico']; + let where = `WHERE disponivel_diretorio = true AND role = ANY($1::text[])`; + const params = [tipo && TIPOS.includes(tipo) ? [tipo] : TIPOS]; + if (estado) { params.push(estado.toUpperCase()); where += ` AND estado = $${params.length}`; } + if (cidade) { params.push(`%${cidade.toUpperCase()}%`); where += ` AND cidade ILIKE $${params.length}`; } + if (especialidade){ params.push(`%${especialidade.toUpperCase()}%`); where += ` AND especialidade_dir ILIKE $${params.length}`; } + try { + const { rows } = await pool.query( + `SELECT id, nome, email, role, estado, cidade, bairro, especialidade_dir as especialidade FROM usuarios ${where} ORDER BY estado, cidade, nome LIMIT 200`, + params + ); + res.json(rows); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +// --- LIMPEZA DE DADOS LEGADOS (sem clinica_id) --- +app.delete('/api/sync/limpar-legado', tenantGuard, async (req, res) => { + try { + const { rows } = await pool.query('DELETE FROM pacientes WHERE clinica_id IS NULL RETURNING id'); + res.json({ success: true, removed: rows.length }); + } catch (err) { + res.status(500).json({ success: false, message: err.message }); + } +}); + +app.delete('/api/sync/limpar-agendamentos', tenantGuard, async (req, res) => { + try { + const { rows } = await pool.query('DELETE FROM agendamentos WHERE clinica_id IS NULL RETURNING id'); + res.json({ success: true, removed: rows.length }); + } catch (err) { + res.status(500).json({ success: false, message: err.message }); + } +}); + +app.get('/api/sync/spreadsheet-id', tenantGuard, async (req, res) => { + const { rows } = await pool.query("SELECT data FROM settings WHERE id = 'sheets_config'").catch(() => ({ rows: [] })); + const dbId = rows[0] ? JSON.parse(rows[0].data).spreadsheetId : null; + res.json({ spreadsheetId: SHEETS_BACKUP_ID, fromDb: !!dbId, envDefault: process.env.SHEETS_BACKUP_ID || '1q1sf1GOji2u3qIJEToWfbLCb4rzb_pKLOX_AylMDT4g' }); +}); + +app.put('/api/sync/spreadsheet-id', tenantGuard, async (req, res) => { + const { spreadsheetId } = req.body; + if (!spreadsheetId || !spreadsheetId.trim()) return res.status(400).json({ error: 'spreadsheetId obrigatório.' }); + await pool.query( + `INSERT INTO settings (id,category,data) VALUES ('sheets_config','sync',$1) ON CONFLICT (id) DO UPDATE SET data=EXCLUDED.data`, + [JSON.stringify({ spreadsheetId: spreadsheetId.trim() })] + ); + SHEETS_BACKUP_ID = spreadsheetId.trim(); + res.json({ success: true, spreadsheetId: SHEETS_BACKUP_ID }); +}); + +app.delete('/api/sync/spreadsheet-id', tenantGuard, async (req, res) => { + await pool.query("DELETE FROM settings WHERE id = 'sheets_config'"); + SHEETS_BACKUP_ID = process.env.SHEETS_BACKUP_ID || '1q1sf1GOji2u3qIJEToWfbLCb4rzb_pKLOX_AylMDT4g'; + res.json({ success: true, spreadsheetId: SHEETS_BACKUP_ID }); +}); + +app.delete('/api/sync/reset-status', tenantGuard, async (req, res) => { + try { + await pool.query("DELETE FROM settings WHERE id = 'sheets_sync_status'"); + res.json({ success: true }); + } catch (err) { + res.status(500).json({ success: false, message: err.message }); + } +}); + +app.delete('/api/sync/truncate-all', tenantGuard, async (req, res) => { + try { + await pool.query(` + TRUNCATE TABLE pacientes, agendamentos, financeiro, leads, guias_odontologicas RESTART IDENTITY + `); + await pool.query("DELETE FROM settings WHERE id = 'sheets_sync_status'"); + res.json({ success: true }); + } catch (err) { + res.status(500).json({ success: false, message: err.message }); + } +}); + +app.get('/api/sync/duplicatas', tenantGuard, async (req, res) => { + function groupRows(rows, keyField, criterion, pick) { + const groups = {}; + for (const r of rows) { + const k = r[keyField]; + if (!k) continue; + if (!groups[k]) groups[k] = { criterion, key: k, records: [] }; + groups[k].records.push(pick(r)); + } + return Object.values(groups); + } + try { + const result = {}; + + // pacientes — por CPF + const { rows: pacCpf } = await pool.query(` + SELECT id, nome, cpf, telefone, email, clinica_id + FROM pacientes + WHERE cpf IS NOT NULL AND TRIM(cpf) != '' + AND cpf IN (SELECT cpf FROM pacientes WHERE cpf IS NOT NULL AND TRIM(cpf) != '' GROUP BY cpf HAVING count(*) > 1) + ORDER BY cpf, nome + `); + result.pacientes = groupRows(pacCpf, 'cpf', 'cpf', r => ({ id: r.id, nome: r.nome, cpf: r.cpf, telefone: r.telefone, email: r.email, clinica_id: r.clinica_id })); + + // leads — por CPF + const { rows: leadCpf } = await pool.query(` + SELECT id, nome, sobrenome, cpf, whatsapp, clinica_id + FROM leads + WHERE cpf IS NOT NULL AND TRIM(cpf) != '' + AND cpf IN (SELECT cpf FROM leads WHERE cpf IS NOT NULL AND TRIM(cpf) != '' GROUP BY cpf HAVING count(*) > 1) + ORDER BY cpf, nome + `); + result.leads = groupRows(leadCpf, 'cpf', 'cpf', r => ({ id: r.id, nome: r.nome, sobrenome: r.sobrenome, cpf: r.cpf, whatsapp: r.whatsapp, clinica_id: r.clinica_id })); + + // agendamentos — por pacientenome + start_time (ambos não nulos) + const { rows: agRows } = await pool.query(` + SELECT id, pacientenome, start_time::text, status, clinica_id, + pacientenome || '|' || start_time::text AS dup_key + FROM agendamentos + WHERE pacientenome IS NOT NULL AND start_time IS NOT NULL + AND (pacientenome || '|' || start_time::text) IN ( + SELECT pacientenome || '|' || start_time::text FROM agendamentos + WHERE pacientenome IS NOT NULL AND start_time IS NOT NULL + GROUP BY 1 HAVING count(*) > 1 + ) + ORDER BY dup_key + `); + result.agendamentos = groupRows(agRows, 'dup_key', 'paciente+horário', r => ({ id: r.id, pacientenome: r.pacientenome, start_time: r.start_time, status: r.status, clinica_id: r.clinica_id })); + + // financeiro — por pacientenome + descricao + valor + datavencimento + const { rows: finRows } = await pool.query(` + SELECT id, pacientenome, descricao, valor::text, datavencimento::text AS datavencimento, status, clinica_id, + pacientenome || '|' || COALESCE(descricao,'') || '|' || COALESCE(valor::text,'') || '|' || COALESCE(datavencimento::text,'') AS dup_key + FROM financeiro + WHERE pacientenome IS NOT NULL + AND (pacientenome || '|' || COALESCE(descricao,'') || '|' || COALESCE(valor::text,'') || '|' || COALESCE(datavencimento::text,'')) IN ( + SELECT pacientenome || '|' || COALESCE(descricao,'') || '|' || COALESCE(valor::text,'') || '|' || COALESCE(datavencimento::text,'') + FROM financeiro WHERE pacientenome IS NOT NULL GROUP BY 1 HAVING count(*) > 1 + ) + ORDER BY dup_key + `); + result.financeiro = groupRows(finRows, 'dup_key', 'paciente+descrição+valor+data', r => ({ id: r.id, pacientenome: r.pacientenome, descricao: r.descricao, valor: r.valor, datavencimento: r.datavencimento, status: r.status, clinica_id: r.clinica_id })); + + // guias — por numeroguiaprestador + const { rows: guiaRows } = await pool.query(` + SELECT id, numeroguiaprestador, beneficiarionome, status, COALESCE(clinica_id, NULL) AS clinica_id + FROM guias_odontologicas + WHERE numeroguiaprestador IS NOT NULL AND TRIM(numeroguiaprestador) != '' + AND numeroguiaprestador IN ( + SELECT numeroguiaprestador FROM guias_odontologicas + WHERE numeroguiaprestador IS NOT NULL AND TRIM(numeroguiaprestador) != '' + GROUP BY numeroguiaprestador HAVING count(*) > 1 + ) + ORDER BY numeroguiaprestador + `); + result.guias = groupRows(guiaRows, 'numeroguiaprestador', 'nº guia prestador', r => ({ id: r.id, numeroguiaprestador: r.numeroguiaprestador, beneficiarionome: r.beneficiarionome, status: r.status, clinica_id: r.clinica_id })); + + res.json(result); + } catch (err) { + console.error('[DUPLICATAS]', err.message); + res.status(500).json({ error: err.message }); + } +}); + +const DUP_TABLE_MAP = { + pacientes: 'pacientes', + leads: 'leads', + agendamentos: 'agendamentos', + financeiro: 'financeiro', + guias: 'guias_odontologicas' +}; + +app.delete('/api/sync/duplicatas', tenantGuard, async (req, res) => { + const { ids, tabela } = req.body; + if (!ids || !Array.isArray(ids) || ids.length === 0 || !tabela) { + return res.status(400).json({ error: 'ids[] e tabela são obrigatórios.' }); + } + const pgTable = DUP_TABLE_MAP[tabela]; + if (!pgTable) return res.status(400).json({ error: 'Tabela inválida.' }); + try { + const { rowCount } = await pool.query(`DELETE FROM ${pgTable} WHERE id = ANY($1)`, [ids]); + res.json({ success: true, removed: rowCount }); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +// --- SUPERADMIN --- +async function superadminGuard(req, res, next) { + const auth = req.headers['authorization']; + if (!auth?.startsWith('Bearer ')) return res.status(401).json({ error: 'Não autenticado.' }); + try { + const payload = jwt.verify(auth.split(' ')[1], JWT_SECRET); + const { rows } = await pool.query('SELECT role FROM usuarios WHERE id = $1', [payload.userId]); + if (!rows[0] || rows[0].role !== 'superadmin') return res.status(403).json({ error: 'Acesso negado.' }); + req.authUser = payload; + next(); + } catch (e) { + if (e.name === 'JsonWebTokenError' || e.name === 'TokenExpiredError') return res.status(401).json({ error: 'Token inválido.' }); + res.status(500).json({ error: e.message }); + } +} + +app.get('/api/superadmin/stats', superadminGuard, async (req, res) => { + try { + const [usersRes, clinicasRes, loginsRes, semAssRes] = await Promise.all([ + pool.query(`SELECT role, COUNT(*) AS total, COUNT(*) FILTER (WHERE ativo = false) AS suspensos FROM usuarios GROUP BY role`), + pool.query(`SELECT COUNT(*) AS n FROM clinicas`), + pool.query(`SELECT COUNT(*) AS n FROM login_log WHERE created_at >= CURRENT_DATE AND status = 'ok'`), + pool.query(`SELECT COUNT(*) AS n FROM usuarios u WHERE u.ativo = true AND NOT EXISTS (SELECT 1 FROM assinaturas a WHERE a.usuario_id = u.id AND a.status = 'ativo')`), + ]); + res.json({ + usuarios: usersRes.rows, + clinicas: parseInt(clinicasRes.rows[0].n), + logins_hoje: parseInt(loginsRes.rows[0].n), + sem_assinatura: parseInt(semAssRes.rows[0].n), + }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.get('/api/superadmin/clinicas', superadminGuard, async (req, res) => { + const { search = '', estado = '' } = req.query; + try { + const { rows } = await pool.query(` + SELECT c.id, c.nome_fantasia, c.documento, c.estado, c.cidade, c.ativo, c.createdat, + (SELECT COUNT(*) FROM vinculos v WHERE v.clinica_id = c.id) AS membros, + (SELECT u.nome FROM vinculos v JOIN usuarios u ON u.id = v.usuario_id + WHERE v.clinica_id = c.id AND v.role IN ('donoclinica','donoconsultorio') LIMIT 1) AS dono_nome, + (SELECT v.role FROM vinculos v + WHERE v.clinica_id = c.id AND v.role IN ('donoclinica','donoconsultorio') LIMIT 1) AS dono_role + FROM clinicas c + WHERE ($1 = '' OR c.nome_fantasia ILIKE '%' || $1 || '%' OR c.cidade ILIKE '%' || $1 || '%' OR c.documento ILIKE '%' || $1 || '%') + AND ($2 = '' OR c.estado = $2) + ORDER BY c.nome_fantasia + `, [search, estado]); + res.json(rows); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.delete('/api/superadmin/clinicas/:id', superadminGuard, async (req, res) => { + try { + await pool.query('DELETE FROM vinculos WHERE clinica_id = $1', [req.params.id]); + await pool.query('DELETE FROM clinicas WHERE id = $1', [req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.get('/api/superadmin/usuarios', superadminGuard, async (req, res) => { + const { page = '1', pageSize = '20', clinicaId = '', search = '' } = req.query; + const limit = Math.min(parseInt(String(pageSize)) || 20, 100); + const offset = (Math.max(parseInt(String(page)) || 1, 1) - 1) * limit; + try { + const baseWhere = clinicaId + ? `JOIN vinculos v ON v.usuario_id = u.id AND v.clinica_id = $3` + : ''; + const searchCond = search ? `AND (u.nome ILIKE '%' || $${clinicaId ? 4 : 3} || '%' OR u.email ILIKE '%' || $${clinicaId ? 4 : 3} || '%')` : ''; + const params = clinicaId + ? (search ? [limit, offset, clinicaId, search] : [limit, offset, clinicaId]) + : (search ? [limit, offset, search] : [limit, offset]); + const { rows } = await pool.query(` + SELECT u.id, u.nome, u.email, u.role, u.ativo, u.createdat, u.celular, + a.status AS assinatura_status, a.validade AS assinatura_validade, a.valor AS assinatura_valor + FROM usuarios u + ${baseWhere} + LEFT JOIN assinaturas a ON a.usuario_id = u.id + WHERE u.role != 'superadmin' ${searchCond} + ORDER BY u.nome + LIMIT $1 OFFSET $2 + `, params); + const { rows: ct } = await pool.query(` + SELECT COUNT(*) AS n FROM usuarios u ${baseWhere} + WHERE u.role != 'superadmin' ${searchCond} + `, params.slice(2)); + res.json({ data: rows, total: parseInt(ct[0].n) }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.put('/api/superadmin/usuarios/:id/status', superadminGuard, async (req, res) => { + try { + const { ativo } = req.body; + await pool.query('UPDATE usuarios SET ativo = $1 WHERE id = $2', [!!ativo, req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.delete('/api/superadmin/usuarios/:id', superadminGuard, async (req, res) => { + try { + await pool.query('DELETE FROM vinculos WHERE usuario_id = $1', [req.params.id]); + await pool.query('DELETE FROM usuarios WHERE id = $1', [req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.put('/api/superadmin/assinaturas/:userId', superadminGuard, async (req, res) => { + const { status, meses, valor } = req.body; + const validade = meses > 0 ? new Date(Date.now() + meses * 30 * 24 * 60 * 60 * 1000) : null; + try { + const { rowCount } = await pool.query( + `UPDATE assinaturas SET status=$2, valor=$3, validade=$4 WHERE usuario_id=$1`, + [req.params.userId, status, valor || 0, validade] + ); + if (rowCount === 0) { + await pool.query( + `INSERT INTO assinaturas (id, usuario_id, status, valor, validade, created_at) VALUES (gen_random_uuid(), $1, $2, $3, $4, NOW())`, + [req.params.userId, status, valor || 0, validade] + ); + } + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.get('/api/superadmin/login-log', superadminGuard, async (req, res) => { + const { page = '1', pageSize = '50' } = req.query; + const limit = Math.min(parseInt(String(pageSize)) || 50, 200); + const offset = (Math.max(parseInt(String(page)) || 1, 1) - 1) * limit; + try { + const { rows } = await pool.query(` + SELECT l.id, l.email, l.ip, l.status, l.created_at, + u.nome, u.role + FROM login_log l + LEFT JOIN usuarios u ON u.email = l.email + ORDER BY l.created_at DESC + LIMIT $1 OFFSET $2 + `, [limit, offset]); + const { rows: ct } = await pool.query(`SELECT COUNT(*) AS n FROM login_log`); + res.json({ data: rows, total: parseInt(ct[0].n) }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.get('/api/superadmin/pricing', superadminGuard, async (req, res) => { + try { + const { rows } = await pool.query("SELECT data FROM settings WHERE id = 'pricing'"); + if (rows[0]) return res.json(JSON.parse(rows[0].data)); + res.json({ donoconsultorio: 49.90, donoclinica: 499.00, dentista: 49.90, protetico: 49.90, paciente: 0 }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.put('/api/superadmin/pricing', superadminGuard, async (req, res) => { + try { + await pool.query( + `INSERT INTO settings (id,category,data) VALUES ('pricing','superadmin',$1) ON CONFLICT (id) DO UPDATE SET data=EXCLUDED.data`, + [JSON.stringify(req.body)] + ); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.get('/api/superadmin/notificacoes-history', superadminGuard, async (req, res) => { + try { + const { rows } = await pool.query(` + SELECT n.*, u.nome AS dest_nome FROM notificacoes n + LEFT JOIN usuarios u ON u.id = n.usuario_id + ORDER BY n.data DESC LIMIT 100 + `); + res.json(rows); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.post('/api/superadmin/notificacoes', superadminGuard, async (req, res) => { + const { titulo, mensagem, tipo, usuario_id } = req.body; + if (!titulo?.trim() || !mensagem?.trim()) return res.status(400).json({ error: 'Título e mensagem obrigatórios.' }); + try { + if (usuario_id) { + await pool.query( + `INSERT INTO notificacoes (id, titulo, mensagem, tipo, lida, data, usuario_id, enviado_por) + VALUES (gen_random_uuid(), $1, $2, $3, false, NOW(), $4, 'superadmin')`, + [titulo.trim(), mensagem.trim(), tipo || 'info', usuario_id] + ); + } else { + const { rows: users } = await pool.query(`SELECT id FROM usuarios WHERE role != 'superadmin' AND ativo = true`); + for (const u of users) { + await pool.query( + `INSERT INTO notificacoes (id, titulo, mensagem, tipo, lida, data, usuario_id, enviado_por) + VALUES (gen_random_uuid(), $1, $2, $3, false, NOW(), $4, 'superadmin')`, + [titulo.trim(), mensagem.trim(), tipo || 'info', u.id] + ); + } + } + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +// --- RX SCOREODONTO PLUGIN --- +app.get('/api/rx/config', authGuard, async (req, res) => { + const { clinicaId } = req.query; + const key = `rx_config_${clinicaId || 'global'}`; + try { + const { rows } = await pool.query("SELECT data FROM settings WHERE id = $1", [key]); + if (rows[0]) return res.json(JSON.parse(rows[0].data)); + res.json({ rx_url: process.env.RX_URL || 'https://rx.scoreodonto.com', rx_token: process.env.RX_TOKEN || '' }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.put('/api/rx/config', tenantGuard, async (req, res) => { + const { clinicaId, rx_url, rx_token } = req.body; + const key = `rx_config_${clinicaId || 'global'}`; + try { + await pool.query( + `INSERT INTO settings (id,category,data) VALUES ($1,'rx',$2) ON CONFLICT (id) DO UPDATE SET data=EXCLUDED.data`, + [key, JSON.stringify({ rx_url: (rx_url || '').trim(), rx_token: (rx_token || '').trim() })] + ); + res.json({ success: true }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + +app.get('/api/rx/devices', authGuard, async (req, res) => { + const { clinicaId } = req.query; + const key = `rx_config_${clinicaId || 'global'}`; + try { + const { rows } = await pool.query("SELECT data FROM settings WHERE id = $1", [key]); + const cfg = rows[0] ? JSON.parse(rows[0].data) : {}; + if (!cfg.rx_url || !cfg.rx_token) return res.json([]); + const r = await fetch(`${cfg.rx_url}/api/admin/clinics`, { + headers: { 'Authorization': `Bearer ${cfg.rx_token}` } + }); + const data = await r.json(); + res.json(data.clinics || []); + } catch (err) { res.json([]); } +}); + +app.post('/api/rx/devices', tenantGuard, async (req, res) => { + const { clinicaId, pcName, clinicName, email, password } = req.body; + const key = `rx_config_${clinicaId || 'global'}`; + try { + const { rows } = await pool.query("SELECT data FROM settings WHERE id = $1", [key]); + const cfg = rows[0] ? JSON.parse(rows[0].data) : {}; + if (!cfg.rx_url || !cfg.rx_token) return res.status(400).json({ success: false, message: 'RX não configurado para esta clínica.' }); + const r = await fetch(`${cfg.rx_url}/api/admin/clinics`, { + method: 'POST', + headers: { 'Authorization': `Bearer ${cfg.rx_token}`, 'Content-Type': 'application/json' }, + body: JSON.stringify({ clinic_name: clinicName || clinicaId, email: email || `${clinicaId}@rx.local`, password: password || clinicaId, pc_name: pcName }) + }); + res.json(await r.json()); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +// --- RECUPERAÇÃO DE SENHA --- +app.post('/api/auth/forgot-password', async (req, res) => { + const { email } = req.body; + if (!email) return res.status(400).json({ error: 'E-mail obrigatório.' }); + try { + const { rows } = await pool.query('SELECT id FROM usuarios WHERE email = $1', [email.toLowerCase().trim()]); + // Responde sempre OK para não revelar se o e-mail existe + res.json({ success: true, message: 'Se o e-mail estiver cadastrado, você receberá as instruções em breve.' }); + } catch (err) { res.status(500).json({ error: err.message }); } +}); + // Start server after all routes are registered +// ============================================================================= +// ORTODONTIA · DOCUMENTAÇÃO FOTOGRÁFICA · TUTORIA +// ============================================================================= +const _oid = (p) => `${p}_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`; + +async function getTutorConfig() { + const { rows } = await pool.query(`SELECT * FROM ortho_tutor_config WHERE id = 'default'`); + return rows[0] || { id: 'default', comissao_pct: 20, taxa_inscricao: 0, texto_responsabilidade: '' }; +} + +// Ativa a candidatura e cria/atualiza o perfil de tutor. Reusado pelo admin +// (confirmar pagamento manual) e pelo webhook do MercadoPago. Idempotente. +async function ativarCandidaturaTutor(client, candId) { + const { rows } = await client.query('SELECT * FROM ortho_tutor_candidatura WHERE id = $1', [candId]); + if (!rows.length) throw new Error('Candidatura não encontrada.'); + const c = rows[0]; + await client.query(`UPDATE ortho_tutor_candidatura SET status = 'ATIVO' WHERE id = $1`, [candId]); + const { rows: ex } = await client.query('SELECT id FROM ortho_tutor_profile WHERE usuario_id = $1', [c.usuario_id]); + if (ex.length) { + await client.query(`UPDATE ortho_tutor_profile SET nome=$1, especialidade=$2, bio=$3, preco_base=$4, status='ATIVO', disponivel=true WHERE usuario_id=$5`, + [c.nome, c.especialidade_principal, c.bio, c.preco_por_consulta, c.usuario_id]); + } else { + await client.query(`INSERT INTO ortho_tutor_profile + (id, usuario_id, nome, especialidade, especialidades_adicionais, bio, preco_base, sla_horas, cro, cro_uf, titulacao, instituicao, anos_experiencia, portfolio_url, linkedin_url, status, disponivel) + VALUES ($1,$2,$3,$4,$5,$6,$7,48,$8,$9,$10,$11,$12,$13,$14,'ATIVO',true)`, + [_oid('tut'), c.usuario_id, c.nome, c.especialidade_principal, JSON.stringify(c.especialidades_adicionais || []), c.bio, c.preco_por_consulta, + c.cro, c.cro_uf, c.titulacao, c.instituicao, c.anos_experiencia, c.portfolio_url, c.linkedin_url]); + } +} + +// --- TRATAMENTOS ORTODÔNTICOS (CRM) --- +const TRAT_COLS = ['clinica_id', 'paciente_id', 'paciente_nome', 'data_nascimento', 'responsavel', 'tipo_paciente', 'triagem', 'diagnostico', 'data_inicio', 'tipo_aparelho', 'extracoes', 'sequencia_fios', 'elasticos', 'ipr_planejado', 'tempo_estimado', 'valor', 'forma_pagamento', 'fase_atual', 'fio_atual', 'classificacao', 'cooperacao', 'percentual_concluido', 'ultima_consulta', 'proxima_consulta', 'meses_restantes', 'status', 'flags', 'contencao_tipo', 'contencao_superior', 'contencao_inferior', 'tempo_uso']; +const TRAT_JSON_COLS = new Set(['triagem', 'diagnostico', 'flags']); +const tratVal = (col, v) => (TRAT_JSON_COLS.has(col) && v != null && typeof v !== 'string') ? JSON.stringify(v) : v; + +app.get('/api/orto/tratamentos', authGuard, async (req, res) => { + try { + const { clinicaId } = req.query; + const { rows: trats } = clinicaId + ? await pool.query('SELECT * FROM ortho_tratamento WHERE clinica_id = $1 ORDER BY created_at DESC', [clinicaId]) + : await pool.query('SELECT * FROM ortho_tratamento ORDER BY created_at DESC'); + const byT = {}; + if (trats.length) { + const { rows: evos } = await pool.query('SELECT * FROM ortho_evolucao WHERE tratamento_id = ANY($1) ORDER BY data ASC, created_at ASC', [trats.map(t => t.id)]); + for (const e of evos) (byT[e.tratamento_id] ||= []).push(e); + } + res.json({ success: true, tratamentos: trats.map(t => ({ ...t, evolucoes: byT[t.id] || [] })) }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/orto/tratamentos', authGuard, async (req, res) => { + try { + const b = req.body || {}; + if (!b.paciente_nome) return res.status(400).json({ success: false, message: 'Nome do paciente é obrigatório.' }); + const id = _oid('otr'); + const keys = TRAT_COLS.filter(c => b[c] !== undefined); + const cols = ['id', ...keys]; + const vals = [id, ...keys.map(c => tratVal(c, b[c]))]; + const ph = cols.map((_, i) => `$${i + 1}`).join(','); + await pool.query(`INSERT INTO ortho_tratamento (${cols.join(',')}) VALUES (${ph})`, vals); + res.json({ success: true, id }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/orto/tratamentos/:id', authGuard, async (req, res) => { + try { + const b = req.body || {}; + const keys = TRAT_COLS.filter(c => b[c] !== undefined); + if (!keys.length) return res.json({ success: true }); + const set = keys.map((c, i) => `${c} = $${i + 1}`).join(', '); + await pool.query(`UPDATE ortho_tratamento SET ${set} WHERE id = $${keys.length + 1}`, [...keys.map(c => tratVal(c, b[c])), req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/orto/tratamentos/:id/evolucoes', authGuard, async (req, res) => { + try { + const b = req.body || {}; + const id = _oid('oev'); + const data = b.data || new Date().toISOString().slice(0, 10); + const { rows } = await pool.query(`INSERT INTO ortho_evolucao (id, tratamento_id, data, tipo, procedimento, proximo_retorno, fio, elastico, procedimentos, higiene, cooperacao, observacoes) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) RETURNING *`, + [id, req.params.id, data, b.tipo || 'Manutenção', b.procedimento || '', b.proximo_retorno || null, b.fio || null, b.elastico || null, + b.procedimentos != null ? JSON.stringify(b.procedimentos) : null, b.higiene ?? null, b.cooperacao || null, b.observacoes || null]); + // mantém o dashboard do tratamento coerente + await pool.query(`UPDATE ortho_tratamento SET ultima_consulta = $1, proxima_consulta = COALESCE($2, proxima_consulta), fio_atual = COALESCE($3, fio_atual), cooperacao = COALESCE($4, cooperacao) WHERE id = $5`, + [data, b.proximo_retorno || null, b.fio || null, b.cooperacao || null, req.params.id]); + res.json({ success: true, evolucao: rows[0] }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/orto/tratamentos/:id/finalizar', authGuard, async (req, res) => { + try { + const { tipo, superior, inferior, tempoUso } = req.body || {}; + await pool.query(`UPDATE ortho_tratamento SET status = 'Finalizado', contencao_tipo = $1, contencao_superior = $2, contencao_inferior = $3, tempo_uso = $4 WHERE id = $5`, + [tipo || null, superior ?? null, inferior ?? null, tempoUso || null, req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- DOCUMENTAÇÃO FOTOGRÁFICA: sessões --- +app.get('/api/orto/sessoes', authGuard, async (req, res) => { + try { + const { tratamentoId } = req.query; + const { rows: sess } = await pool.query('SELECT id, tipo, rotulo, data_ref FROM ortho_photo_session WHERE tratamento_id = $1 ORDER BY data_ref ASC NULLS FIRST, created_at ASC', [tratamentoId]); + const byS = {}; + if (sess.length) { + const ids = sess.map(s => s.id); + const { rows: fotos } = await pool.query('SELECT id, sessao_id, slot, original_name FROM ortho_photo WHERE sessao_id = ANY($1)', [ids]); + for (const f of fotos) (byS[f.sessao_id] ||= []).push({ id: f.id, slot: f.slot, url: `/api/orto/fotos/${f.id}/raw`, original_name: f.original_name }); + } + res.json({ success: true, sessoes: sess.map(s => ({ id: s.id, tipo: s.tipo, rotulo: s.rotulo, data_ref: s.data_ref, fotos: byS[s.id] || [] })) }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// get-or-create de uma sessão (tratamento + tipo) +app.post('/api/orto/sessoes', authGuard, async (req, res) => { + try { + const { tratamento_id, tipo, clinica_id, rotulo, data_ref } = req.body; + if (!tratamento_id || !tipo) return res.status(400).json({ success: false, message: 'tratamento_id e tipo são obrigatórios.' }); + let { rows } = await pool.query('SELECT id, tipo, rotulo, data_ref FROM ortho_photo_session WHERE tratamento_id = $1 AND tipo = $2', [tratamento_id, tipo]); + if (!rows.length) { + const id = _oid('ops'); + await pool.query('INSERT INTO ortho_photo_session (id, tratamento_id, clinica_id, tipo, rotulo, data_ref) VALUES ($1,$2,$3,$4,$5,$6) ON CONFLICT (tratamento_id, tipo) DO NOTHING', [id, tratamento_id, clinica_id || null, tipo, rotulo || null, data_ref || null]); + ({ rows } = await pool.query('SELECT id, tipo, rotulo, data_ref FROM ortho_photo_session WHERE tratamento_id = $1 AND tipo = $2', [tratamento_id, tipo])); + } + const s = rows[0]; + const { rows: fotos } = await pool.query('SELECT id, slot, original_name FROM ortho_photo WHERE sessao_id = $1', [s.id]); + res.json({ success: true, sessao: { id: s.id, tipo: s.tipo, rotulo: s.rotulo, data_ref: s.data_ref, fotos: fotos.map(f => ({ id: f.id, slot: f.slot, url: `/api/orto/fotos/${f.id}/raw`, original_name: f.original_name })) } }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- DOCUMENTAÇÃO FOTOGRÁFICA: fotos --- +app.post('/api/orto/fotos', authGuard, ortoUpload.single('foto'), async (req, res) => { + try { + const { sessao_id, slot } = req.body; + if (!sessao_id || !slot || !req.file) return res.status(400).json({ success: false, message: 'sessao_id, slot e foto são obrigatórios.' }); + const ext = ((req.file.originalname.split('.').pop() || 'jpg').toLowerCase().replace(/[^a-z0-9]/g, '')) || 'jpg'; + const dir = path.join(MEDIA_ROOT, 'orto', sessao_id); + await fs.promises.mkdir(dir, { recursive: true }); + // substitui a foto existente no mesmo slot (1 foto por slot) + const { rows: old } = await pool.query('SELECT id, filename FROM ortho_photo WHERE sessao_id = $1 AND slot = $2', [sessao_id, slot]); + for (const o of old) { try { await fs.promises.unlink(path.join(MEDIA_ROOT, o.filename)); } catch {} } + await pool.query('DELETE FROM ortho_photo WHERE sessao_id = $1 AND slot = $2', [sessao_id, slot]); + const id = _oid('oph'); + const rel = path.join('orto', sessao_id, `${slot}_${Date.now()}.${ext}`); + await fs.promises.writeFile(path.join(MEDIA_ROOT, rel), req.file.buffer); + await pool.query('INSERT INTO ortho_photo (id, sessao_id, slot, filename, mimetype, original_name) VALUES ($1,$2,$3,$4,$5,$6)', [id, sessao_id, slot, rel, req.file.mimetype, req.file.originalname]); + res.json({ success: true, foto: { id, slot, url: `/api/orto/fotos/${id}/raw`, original_name: req.file.originalname } }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// stream público da imagem (img tags não enviam Authorization) +app.get('/api/orto/fotos/:id/raw', async (req, res) => { + try { + const { rows } = await pool.query('SELECT filename, mimetype FROM ortho_photo WHERE id = $1', [req.params.id]); + if (!rows.length) return res.status(404).end(); + res.type(rows[0].mimetype || 'image/jpeg'); + res.sendFile(path.join(MEDIA_ROOT, rows[0].filename), (err) => { if (err && !res.headersSent) res.status(404).end(); }); + } catch { res.status(404).end(); } +}); + +app.delete('/api/orto/fotos/:id', authGuard, async (req, res) => { + try { + const { rows } = await pool.query('SELECT filename FROM ortho_photo WHERE id = $1', [req.params.id]); + if (rows.length) { try { await fs.promises.unlink(path.join(MEDIA_ROOT, rows[0].filename)); } catch {} } + await pool.query('DELETE FROM ortho_photo_annotation WHERE foto_id = $1', [req.params.id]); + await pool.query('DELETE FROM ortho_photo WHERE id = $1', [req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- DOCUMENTAÇÃO FOTOGRÁFICA: anotações sobre a imagem --- +app.get('/api/orto/fotos/:id/anotacoes', authGuard, async (req, res) => { + try { + const { rows } = await pool.query('SELECT id, dados FROM ortho_photo_annotation WHERE foto_id = $1 ORDER BY created_at', [req.params.id]); + res.json({ success: true, anotacoes: rows.map(r => ({ id: r.id, dados: r.dados })) }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/orto/fotos/:id/anotacoes', authGuard, async (req, res) => { + try { + const anotacoes = Array.isArray(req.body?.anotacoes) ? req.body.anotacoes : []; + await withTransaction(async (client) => { + await client.query('DELETE FROM ortho_photo_annotation WHERE foto_id = $1', [req.params.id]); + for (const a of anotacoes) { + await client.query('INSERT INTO ortho_photo_annotation (id, foto_id, dados) VALUES ($1,$2,$3)', [_oid('ann'), req.params.id, JSON.stringify(a)]); + } + }); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- TUTORES (perfis ativos) --- +app.get('/api/tutores', authGuard, async (req, res) => { + try { + const { rows } = await pool.query(`SELECT id, nome, especialidade, bio, preco_base, sla_horas FROM ortho_tutor_profile WHERE status = 'ATIVO' AND disponivel = true ORDER BY nome`); + res.json({ success: true, tutores: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.get('/api/tutores/por-usuario/:usuarioId', authGuard, async (req, res) => { + try { + const { rows } = await pool.query('SELECT * FROM ortho_tutor_profile WHERE usuario_id = $1 LIMIT 1', [req.params.usuarioId]); + res.json({ success: true, tutor: rows[0] || null }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/tutores/:id/credenciais', authGuard, async (req, res) => { + try { + const { pix_key, mp_email, aceitar_split } = req.body; + if (!pix_key) return res.status(400).json({ success: false, message: 'Chave PIX obrigatória.' }); + const cfg = await getTutorConfig(); + const comissao = cfg.comissao_pct ?? 20; + await pool.query('UPDATE ortho_tutor_profile SET pix_key = $1, mp_email = $2, aceite_split_pct = $3, aceite_split_at = $4 WHERE id = $5', + [pix_key, mp_email || null, aceitar_split ? comissao : null, aceitar_split ? new Date() : null, req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- TUTORIA: solicitações --- +app.post('/api/tutoria/solicitacoes', authGuard, async (req, res) => { + try { + const b = req.body; + if (!b.tutor_id || !b.tratamento_id) return res.status(400).json({ success: false, message: 'Tutor e tratamento são obrigatórios.' }); + const cfg = await getTutorConfig(); + const comissao = cfg.comissao_pct ?? 20; + const { rows: tr } = await pool.query('SELECT preco_base FROM ortho_tutor_profile WHERE id = $1', [b.tutor_id]); + const valor = tr[0]?.preco_base != null ? Number(tr[0].preco_base) : null; + const valorTutor = valor != null ? valor * (1 - comissao / 100) : null; + const id = _oid('treq'); + await pool.query(`INSERT INTO ortho_tutoring_request + (id, tratamento_id, clinica_id, tutor_id, paciente_nome, tipo, descricao, status, aceite_responsabilidade, aceite_nome, aceite_texto_versao, valor_consultoria, comissao_pct, valor_tutor, status_repasse) + VALUES ($1,$2,$3,$4,$5,$6,$7,'AGUARDANDO',$8,$9,$10,$11,$12,$13,'PENDENTE')`, + [id, b.tratamento_id, b.clinica_id || null, b.tutor_id, b.paciente_nome || null, b.tipo || null, b.descricao || null, + b.aceite_responsabilidade || false, b.aceite_nome || null, b.aceite_texto_versao || null, valor, comissao, valorTutor]); + // pacote automático: snapshot de todas as fotos do tratamento + let fotosCount = 0; + const { rows: sess } = await pool.query('SELECT id FROM ortho_photo_session WHERE tratamento_id = $1', [b.tratamento_id]); + if (sess.length) { + const { rows: fotos } = await pool.query('SELECT id, slot FROM ortho_photo WHERE sessao_id = ANY($1)', [sess.map(s => s.id)]); + for (const f of fotos) { + await pool.query('INSERT INTO ortho_tutoring_photo_package (id, request_id, foto_id, slot) VALUES ($1,$2,$3,$4)', [_oid('pkg'), id, f.id, f.slot]); + fotosCount++; + } + } + res.json({ success: true, fotos_incluidas: fotosCount }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.get('/api/tutoria/solicitacoes', authGuard, async (req, res) => { + try { + const { clinicaId, tratamentoId } = req.query; + let sql = `SELECT r.*, t.nome AS tutor_nome, t.especialidade AS tutor_especialidade, t.bio AS tutor_bio, t.sla_horas, + (SELECT COUNT(*) FROM ortho_tutoring_message m WHERE m.request_id = r.id) AS total_mensagens + FROM ortho_tutoring_request r LEFT JOIN ortho_tutor_profile t ON t.id = r.tutor_id WHERE 1=1`; + const params = []; let i = 1; + if (clinicaId) { sql += ` AND r.clinica_id = $${i++}`; params.push(clinicaId); } + if (tratamentoId) { sql += ` AND r.tratamento_id = $${i++}`; params.push(tratamentoId); } + sql += ' ORDER BY r.created_at DESC'; + const { rows } = await pool.query(sql, params); + res.json({ success: true, solicitacoes: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.get('/api/tutoria/solicitacoes/:id', authGuard, async (req, res) => { + try { + const { rows } = await pool.query(`SELECT r.*, t.nome AS tutor_nome, t.especialidade AS tutor_especialidade, t.bio AS tutor_bio, t.sla_horas + FROM ortho_tutoring_request r LEFT JOIN ortho_tutor_profile t ON t.id = r.tutor_id WHERE r.id = $1`, [req.params.id]); + if (!rows.length) return res.json({ success: false }); + const sol = rows[0]; + const { rows: msgs } = await pool.query('SELECT * FROM ortho_tutoring_message WHERE request_id = $1 ORDER BY created_at', [req.params.id]); + const { rows: pkg } = await pool.query('SELECT foto_id, slot FROM ortho_tutoring_photo_package WHERE request_id = $1', [req.params.id]); + sol.mensagens = msgs; + sol.fotos = pkg.map(p => ({ id: p.foto_id, url: `/api/orto/fotos/${p.foto_id}/raw`, slot: p.slot })); + res.json({ success: true, solicitacao: sol }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/tutoria/solicitacoes/:id/mensagens', authGuard, async (req, res) => { + try { + const { conteudo, autor_tipo, autor_nome } = req.body; + if (!conteudo) return res.status(400).json({ success: false, message: 'Mensagem vazia.' }); + const { rows } = await pool.query(`INSERT INTO ortho_tutoring_message (id, request_id, autor_tipo, autor_nome, conteudo) VALUES ($1,$2,$3,$4,$5) RETURNING *`, + [_oid('tmsg'), req.params.id, autor_tipo || 'CLINICA', autor_nome || null, conteudo]); + res.json({ success: true, mensagem: rows[0] }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/tutoria/solicitacoes/:id/status', authGuard, async (req, res) => { + try { + await pool.query('UPDATE ortho_tutoring_request SET status = $1 WHERE id = $2', [req.body.status, req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// --- TUTORIA: candidaturas (lado do candidato) --- +app.get('/api/tutoria/candidaturas/minha', authGuard, async (req, res) => { + try { + const { rows } = await pool.query('SELECT * FROM ortho_tutor_candidatura WHERE usuario_id = $1 ORDER BY created_at DESC LIMIT 1', [req.query.usuarioId]); + res.json({ success: true, candidatura: rows[0] || null }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/tutoria/candidaturas', authGuard, async (req, res) => { + try { + const b = req.body; + if (!b.nome || !b.cro) return res.status(400).json({ success: false, message: 'Nome e CRO são obrigatórios.' }); + const id = _oid('cand'); + await pool.query(`INSERT INTO ortho_tutor_candidatura + (id, usuario_id, nome, email, telefone, cro, cro_uf, titulacao, instituicao, ano_conclusao, especialidade_principal, especialidades_adicionais, anos_experiencia, bio, preco_por_consulta, portfolio_url, linkedin_url, status) + VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,'PENDENTE')`, + [id, b.usuario_id || null, b.nome, b.email || null, b.telefone || null, b.cro, b.cro_uf || null, b.titulacao || null, + b.instituicao || null, b.ano_conclusao || null, b.especialidade_principal || null, + JSON.stringify(b.especialidades_adicionais || []), b.anos_experiencia || null, b.bio || null, + b.preco_por_consulta || null, b.portfolio_url || null, b.linkedin_url || null]); + res.json({ success: true, id }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/tutoria/candidaturas/:id/pagamento', authGuard, async (req, res) => { + try { + const cfg = await getTutorConfig(); + const token = cfg.mp_access_token; + const taxa = Number(cfg.taxa_inscricao) || 0; + if (!token) return res.json({ success: false, message: 'PAGAMENTO ONLINE AINDA NÃO CONFIGURADO. AGUARDE A CONFIRMAÇÃO MANUAL DA EQUIPE SCOREODONTO.' }); + if (taxa <= 0) return res.json({ success: false, message: 'TAXA DE ATIVAÇÃO NÃO CONFIGURADA PELA EQUIPE.' }); + const { rows } = await pool.query('SELECT id, nome, email FROM ortho_tutor_candidatura WHERE id = $1', [req.params.id]); + if (!rows.length) return res.status(404).json({ success: false, message: 'Candidatura não encontrada.' }); + const c = rows[0]; + const appUrl = process.env.APP_URL || `http://localhost:${process.env.FRONTEND_PORT || 3000}`; + const pref = { + items: [{ title: 'Taxa de ativação — Tutor Ortodôntico Scoreodonto', quantity: 1, unit_price: taxa, currency_id: 'BRL' }], + external_reference: `cand:${c.id}`, + back_urls: { + success: `${appUrl}/?view=candidatura-tutor&payment=success`, + pending: `${appUrl}/?view=candidatura-tutor&payment=pending`, + failure: `${appUrl}/?view=candidatura-tutor&payment=failure`, + }, + auto_return: 'approved', + notification_url: `${appUrl}/api/tutoria/mp-webhook`, + ...(c.email ? { payer: { email: c.email } } : {}), + }; + const mpRes = await fetch('https://api.mercadopago.com/checkout/preferences', { + method: 'POST', + headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, + body: JSON.stringify(pref), + }); + const data = await mpRes.json().catch(() => ({})); + if (!mpRes.ok || !data.init_point) { + console.error('[MP] preference error:', data?.message || mpRes.status); + return res.json({ success: false, message: 'ERRO AO GERAR LINK DE PAGAMENTO NO MERCADOPAGO. VERIFIQUE AS CREDENCIAIS.' }); + } + res.json({ success: true, checkout_url: data.init_point, taxa }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +// Webhook do MercadoPago (público) — ativa o tutor quando o pagamento é aprovado. +app.post('/api/tutoria/mp-webhook', async (req, res) => { + try { + const cfg = await getTutorConfig(); + const token = cfg.mp_access_token; + if (!token) return res.sendStatus(200); + const topic = req.body?.type || req.query?.topic || req.query?.type; + const paymentId = req.body?.data?.id || req.query?.id || req.query?.['data.id']; + if ((topic && topic !== 'payment') || !paymentId) return res.sendStatus(200); + const pr = await fetch(`https://api.mercadopago.com/v1/payments/${paymentId}`, { headers: { 'Authorization': `Bearer ${token}` } }); + const pay = await pr.json().catch(() => ({})); + if (pr.ok && pay.status === 'approved') { + const ref = String(pay.external_reference || ''); + const candId = ref.startsWith('cand:') ? ref.slice(5) : null; + if (candId) { + await withTransaction((client) => ativarCandidaturaTutor(client, candId)); + console.log('[MP] candidatura ativada via webhook:', candId); + } + } + res.sendStatus(200); + } catch (err) { console.error('[MP] webhook error:', err.message); res.sendStatus(200); } +}); + +// --- ADMIN DE TUTORES --- +app.get('/api/admin/tutor-config', authGuard, async (req, res) => { + try { res.json({ success: true, config: await getTutorConfig() }); } + catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/admin/tutor-config', authGuard, async (req, res) => { + try { + const b = req.body; + await pool.query(`INSERT INTO ortho_tutor_config (id, taxa_inscricao, chave_pix, instrucoes_pagamento, mp_access_token, mp_public_key, comissao_pct, texto_responsabilidade, updated_at) + VALUES ('default',$1,$2,$3,$4,$5,$6,$7,NOW()) + ON CONFLICT (id) DO UPDATE SET taxa_inscricao = EXCLUDED.taxa_inscricao, chave_pix = EXCLUDED.chave_pix, instrucoes_pagamento = EXCLUDED.instrucoes_pagamento, + mp_access_token = EXCLUDED.mp_access_token, mp_public_key = EXCLUDED.mp_public_key, comissao_pct = EXCLUDED.comissao_pct, + texto_responsabilidade = EXCLUDED.texto_responsabilidade, updated_at = NOW()`, + [b.taxa_inscricao || 0, b.chave_pix || null, b.instrucoes_pagamento || null, b.mp_access_token || null, b.mp_public_key || null, b.comissao_pct || 20, b.texto_responsabilidade || null]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.get('/api/admin/candidaturas', authGuard, async (req, res) => { + try { + const { status } = req.query; + const { rows } = status + ? await pool.query('SELECT * FROM ortho_tutor_candidatura WHERE status = $1 ORDER BY created_at DESC', [status]) + : await pool.query('SELECT * FROM ortho_tutor_candidatura ORDER BY created_at DESC'); + res.json({ success: true, candidaturas: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.put('/api/admin/candidaturas/:id/status', authGuard, async (req, res) => { + try { + const { status, observacao } = req.body; + const novo = status === 'APROVADO' ? 'AGUARDANDO_PAGAMENTO' : status; + await pool.query('UPDATE ortho_tutor_candidatura SET status = $1, observacao_admin = $2 WHERE id = $3', [novo, observacao || null, req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +// confirma pagamento → ativa candidatura e cria/atualiza o perfil de tutor +app.post('/api/admin/candidaturas/:id/confirmar-pagamento', authGuard, async (req, res) => { + try { + await withTransaction((client) => ativarCandidaturaTutor(client, req.params.id)); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, message: err.message }); } +}); + +app.get('/api/admin/repasses', authGuard, async (req, res) => { + try { + const { rows } = await pool.query(`SELECT r.id, r.paciente_nome, r.valor_consultoria, r.valor_tutor, r.comissao_pct, COALESCE(r.status_repasse,'PENDENTE') AS status_repasse, + r.created_at, t.nome AS tutor_nome, t.pix_key + FROM ortho_tutoring_request r LEFT JOIN ortho_tutor_profile t ON t.id = r.tutor_id + WHERE r.valor_consultoria IS NOT NULL AND COALESCE(r.status_repasse,'PENDENTE') <> 'PAGO' ORDER BY r.created_at`); + res.json({ success: true, repasses: rows }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + +app.post('/api/admin/repasses/:id/confirmar', authGuard, async (req, res) => { + try { + await pool.query(`UPDATE ortho_tutoring_request SET status_repasse = 'PAGO' WHERE id = $1`, [req.params.id]); + res.json({ success: true }); + } catch (err) { res.status(500).json({ success: false, error: err.message }); } +}); + app.listen(PORT, '0.0.0.0', async () => { console.log(`[SERVER] Running on http://0.0.0.0:${PORT}`); await loadGoogleCredsFromDb(); await runMigrations(); + await loadSheetsConfig(); generateIntelligentNotifications(); setInterval(generateIntelligentNotifications, 5 * 60 * 1000); }); diff --git a/docker-compose-staging.yml b/docker-compose-staging.yml index 8e6b4c9..daa870a 100644 --- a/docker-compose-staging.yml +++ b/docker-compose-staging.yml @@ -1,3 +1,5 @@ +name: scoreodonto-staging + services: nginx: image: nginx:alpine diff --git a/frontend/App.tsx b/frontend/App.tsx index 8bc3d10..9e89d7d 100644 --- a/frontend/App.tsx +++ b/frontend/App.tsx @@ -2,7 +2,10 @@ import React, { useState, useEffect } from 'react'; import { HybridBackend } from './services/backend.ts'; import { Sidebar } from './components/Sidebar.tsx'; -import { Menu } from 'lucide-react'; +import { + Menu, LayoutDashboard, Users, Calendar as CalendarIcon, + DollarSign, Activity, ClipboardList, Bell, Settings, MoreHorizontal, Eye, X +} from 'lucide-react'; import { ToastContainer } from './components/Toast.tsx'; @@ -16,6 +19,7 @@ import { FinanceiroView } from './views/FinanceiroView.tsx'; import { MeusTratamentos } from './views/MeusTratamentos'; import { LancarGTO } from './views/LancarGTO'; import { LoginView } from './views/LoginView.tsx'; +import { ChangePasswordModal } from './components/ChangePasswordModal.tsx'; import { LandingPage } from './views/LandingPage.tsx'; import { UpdateDbView } from './views/UpdateDbView.tsx'; import { ClinicasView } from './views/ClinicasView.tsx'; @@ -25,6 +29,17 @@ import { NotificationsView } from './views/NotificationsView.tsx'; import { ReportsView } from './views/ReportsView.tsx'; import { ConfiguracoesView } from './views/ConfiguracoesView.tsx'; import { ContratosView } from './views/ContratosView.tsx'; +import { PluginsView } from './views/PluginsView.tsx'; +import { RXPlugin } from './views/plugins/RXPlugin.tsx'; +import { CreateClinicView } from './views/CreateClinicView.tsx'; +import { RxConfigView } from './views/RxConfigView.tsx'; +import { GestaoEquipeView } from './views/GestaoEquipeView.tsx'; +import { TutorPainelView } from './views/TutorPainelView.tsx'; +import { TutorCandidaturaView } from './views/TutorCandidaturaView.tsx'; +import { AdminGestaoTutoresView } from './views/AdminGestaoTutoresView.tsx'; +import { WaitingInviteView } from './views/WaitingInviteView.tsx'; +import { SuperAdminView } from './views/SuperAdminView.tsx'; +import { DiretorioProfissionaisView } from './views/DiretorioProfissionaisView.tsx'; export type ViewKey = | 'landing' @@ -49,7 +64,24 @@ export type ViewKey = | 'relatorios' | 'cadastro-dentista' | 'configuracoes' - | 'contratos'; + | 'contratos' + | 'plugins' + | 'rx-radiografias' + | 'criar-clinica' + | 'rx-config' + | 'gestao-equipe' + | 'tutoria-painel' + | 'aguardando-convite' + | 'candidatura-tutor' + | 'admin-gestao-tutores' + | 'superadmin' + | 'superadmin-overview' + | 'superadmin-users' + | 'superadmin-clinicas' + | 'superadmin-logs' + | 'superadmin-financeiro' + | 'superadmin-notificacoes' + | 'diretorio-profissionais'; // ------- URL <-> VIEW mapping ------- const ROUTE_MAP: Record = { @@ -77,6 +109,23 @@ const ROUTE_MAP: Record = { '/cadastro-dentista': 'cadastro-dentista', '/configuracoes': 'configuracoes', '/contratos': 'contratos', + '/plugins': 'plugins', + '/rx-radiografias': 'rx-radiografias', + '/criar-clinica': 'criar-clinica', + '/rx-config': 'rx-config', + '/gestao-equipe': 'gestao-equipe', + '/tutoria-painel': 'tutoria-painel', + '/candidatura-tutor': 'candidatura-tutor', + '/admin-gestao-tutores': 'admin-gestao-tutores', + '/superadmin': 'superadmin-overview', + '/superadmin/overview': 'superadmin-overview', + '/superadmin/users': 'superadmin-users', + '/superadmin/clinicas': 'superadmin-clinicas', + '/superadmin/logs': 'superadmin-logs', + '/superadmin/financeiro': 'superadmin-financeiro', + '/superadmin/notificacoes': 'superadmin-notificacoes', + '/aguardando-convite': 'aguardando-convite', + '/diretorio-profissionais': 'diretorio-profissionais', }; const VIEW_TO_ROUTE: Record = { @@ -103,6 +152,23 @@ const VIEW_TO_ROUTE: Record = { 'cadastro-dentista': '/cadastro-dentista', configuracoes: '/configuracoes', contratos: '/contratos', + plugins: '/plugins', + 'rx-radiografias': '/rx-radiografias', + 'criar-clinica': '/criar-clinica', + 'rx-config': '/rx-config', + 'gestao-equipe': '/gestao-equipe', + 'tutoria-painel': '/tutoria-painel', + 'candidatura-tutor': '/candidatura-tutor', + 'admin-gestao-tutores': '/admin-gestao-tutores', + 'aguardando-convite': '/aguardando-convite', + superadmin: '/superadmin', + 'superadmin-overview': '/superadmin/overview', + 'superadmin-users': '/superadmin/users', + 'superadmin-clinicas': '/superadmin/clinicas', + 'superadmin-logs': '/superadmin/logs', + 'superadmin-financeiro': '/superadmin/financeiro', + 'superadmin-notificacoes': '/superadmin/notificacoes', + 'diretorio-profissionais': '/diretorio-profissionais', }; /** Resolve current URL to a ViewKey */ @@ -117,63 +183,143 @@ function navigate(view: ViewKey) { history.pushState({}, '', route); } +// ------- Mobile Bottom Nav ------- +const BOTTOM_TABS: Record> = { + admin: [{ id: 'dashboard', icon: LayoutDashboard, label: 'Início' }, { id: 'pacientes', icon: Users, label: 'Pacientes' }, { id: 'agenda', icon: CalendarIcon, label: 'Agenda' }, { id: 'financeiro', icon: DollarSign, label: 'Financeiro' }, { more: true }], + donoclinica: [{ id: 'dashboard', icon: LayoutDashboard, label: 'Início' }, { id: 'pacientes', icon: Users, label: 'Pacientes' }, { id: 'agenda', icon: CalendarIcon, label: 'Agenda' }, { id: 'financeiro', icon: DollarSign, label: 'Financeiro' }, { more: true }], + donoconsultorio: [{ id: 'dashboard', icon: LayoutDashboard, label: 'Início' }, { id: 'pacientes', icon: Users, label: 'Pacientes' }, { id: 'agenda', icon: CalendarIcon, label: 'Agenda' }, { id: 'financeiro', icon: DollarSign, label: 'Financeiro' }, { more: true }], + funcionario: [{ id: 'dashboard', icon: LayoutDashboard, label: 'Início' }, { id: 'pacientes', icon: Users, label: 'Pacientes' }, { id: 'agenda', icon: CalendarIcon, label: 'Agenda' }, { id: 'financeiro', icon: DollarSign, label: 'Financeiro' }, { more: true }], + dentista: [{ id: 'dashboard', icon: LayoutDashboard, label: 'Início' }, { id: 'pacientes', icon: Users, label: 'Pacientes' }, { id: 'agenda', icon: CalendarIcon, label: 'Agenda' }, { id: 'ortodontia', icon: Activity, label: 'Orto' }, { more: true }], + paciente: [{ id: 'tratamentos', icon: ClipboardList, label: 'Tratamentos' }, { id: 'notificacoes', icon: Bell, label: 'Notif.' }, { id: 'configuracoes', icon: Settings, label: 'Config.' }], +}; + +const MobileBottomNav: React.FC<{ + activeTab: ViewKey; + role: string; + clinColor: string; + onNavigate: (v: ViewKey) => void; + onMore: () => void; +}> = ({ activeTab, role, clinColor, onNavigate, onMore }) => { + const tabs = BOTTOM_TABS[role] || BOTTOM_TABS['funcionario']; + return ( + + ); +}; + // ------- App ------- const App: React.FC = () => { const [isSidebarOpen, setSidebarOpen] = useState(false); + const [, forcePwRerender] = useState(0); // re-avalia o modal de troca obrigatória de senha const currentRole = HybridBackend.getCurrentRole(); const activeWorkspace = HybridBackend.getActiveWorkspace(); const clinColor = activeWorkspace?.cor || '#2563eb'; const isViewAllowed = (view: ViewKey, role: string): boolean => { if (['landing', 'login', 'public', 'update'].includes(view)) return true; - if (role === 'admin' || role === 'donoclinica') return true; + if (role === 'superadmin') return true; + // Sync GLOBAL removido do app (substituído pelo backup por clínica em Configurações). + if (view === 'sync') return false; + // Admin/donos têm acesso amplo, MAS as telas de superadmin são exclusivas do superadmin. + if (role === 'admin' || role === 'donoclinica' || role === 'donoconsultorio') return !view.startsWith('superadmin'); + + // Equipe: acesso por CARGO (RBAC) no workspace ativo. + const ws: any = HybridBackend.getActiveWorkspace(); + if (ws && ['donoclinica', 'donoconsultorio', 'admin'].includes(ws.role)) return !view.startsWith('superadmin'); + // Páginas sempre disponíveis a qualquer membro (navegação/conta). + if (['configuracoes', 'notificacoes', 'clinicas'].includes(view)) return true; + // Só gateia por cargo quando há permissões EXPLÍCITAS. Cargo sem permissões + // (ou membro sem cargo) herda o menu padrão do role (fallback abaixo). + if (Array.isArray(ws?.permissoes) && ws.permissoes.length > 0) return (ws.permissoes as string[]).includes(view); const permissions: Record = { paciente: ['tratamentos', 'notificacoes', 'configuracoes'], - dentista: ['dashboard', 'pacientes', 'agenda', 'ortodontia', 'tratamentos', 'lancar-gto', 'notificacoes', 'clinicas', 'configuracoes', 'contratos'], - funcionario: ['dashboard', 'leads', 'pacientes', 'agenda', 'financeiro', 'tratamentos', 'lancar-gto', 'relatorios', 'notificacoes', 'clinicas', 'configuracoes', 'contratos'], + dentista: ['dashboard', 'pacientes', 'agenda', 'ortodontia', 'tratamentos', 'lancar-gto', 'notificacoes', 'clinicas', 'configuracoes', 'contratos', 'plugins', 'rx-radiografias', 'candidatura-tutor', 'tutoria-painel', 'diretorio-profissionais'], + funcionario: ['dashboard', 'leads', 'pacientes', 'agenda', 'financeiro', 'tratamentos', 'lancar-gto', 'relatorios', 'notificacoes', 'clinicas', 'configuracoes', 'contratos', 'plugins', 'rx-radiografias', 'candidatura-tutor', 'diretorio-profissionais'], }; return permissions[role]?.includes(view) || false; }; const getDefaultViewForRole = (role: string): ViewKey => { - if (role === 'paciente') return 'tratamentos'; + if (role === 'superadmin') return 'superadmin-overview'; + if (role === 'paciente') return 'tratamentos'; return 'dashboard'; }; + const getStoredUserRole = (): string => { + try { + const raw = localStorage.getItem('SCOREODONTO_USER_DATA'); + return raw ? (JSON.parse(raw).role ?? 'paciente') : 'paciente'; + } catch { return 'paciente'; } + }; + const getInitialView = (): ViewKey => { const fromUrl = resolveViewFromUrl(); + const isAuthed = HybridBackend.isAuthenticated(); + + // Superadmin pode acessar páginas públicas (landing / contato) diretamente, + // sem ser rebotado de volta para o painel. + if (isAuthed && getStoredUserRole() === 'superadmin' && ['landing', 'public'].includes(fromUrl)) { + return fromUrl; + } + + // Authenticated but no workspace → route to the right post-registration screen + if (isAuthed && !HybridBackend.getActiveWorkspace()) { + const storedRole = getStoredUserRole(); + if (storedRole === 'superadmin') return 'superadmin-overview'; + if (storedRole === 'admin' || storedRole === 'donoclinica' || storedRole === 'donoconsultorio') return 'criar-clinica'; + if (storedRole === 'dentista' || storedRole === 'protetico') return 'aguardando-convite'; + return 'aguardando-convite'; + } + const role = HybridBackend.getCurrentRole(); - // If user is authenticated, and trying to go to landing or login, send to default for role - if (HybridBackend.isAuthenticated() && ['landing', 'login'].includes(fromUrl)) return getDefaultViewForRole(role); + // Authenticated visiting landing/login → default for role + if (isAuthed && ['landing', 'login'].includes(fromUrl)) return getDefaultViewForRole(role); - // If URL points to a protected view but user is not auth'd → landing (or login) + // Protected route without auth → landing const isProtected = !['landing', 'login', 'public'].includes(fromUrl); - if (isProtected && !HybridBackend.isAuthenticated()) return 'landing'; + if (isProtected && !isAuthed) return 'landing'; - // Verify permission for the view - if (HybridBackend.isAuthenticated() && !isViewAllowed(fromUrl, role)) { - return getDefaultViewForRole(role); - } + // Authenticated but lacking permission for the requested view + if (isAuthed && !isViewAllowed(fromUrl, role)) return getDefaultViewForRole(role); return fromUrl; }; const [currentView, setCurrentView] = useState(getInitialView); - // Keep URL in sync when view changes programmatically via sidebar const handleNavigate = (view: ViewKey) => { const freshRole = HybridBackend.getCurrentRole(); if (isViewAllowed(view, freshRole)) { setCurrentView(view); navigate(view); - setSidebarOpen(false); // Close sidebar on mobile after navigation + setSidebarOpen(false); } }; - // Sync view when user uses browser back/forward buttons useEffect(() => { const onHashChange = () => { const fromUrl = resolveViewFromUrl(); @@ -199,13 +345,11 @@ const App: React.FC = () => { return () => window.removeEventListener('popstate', onHashChange); }, []); - // Inject dynamic brand color useEffect(() => { document.documentElement.style.setProperty('--brand-color', clinColor); document.documentElement.style.setProperty('--brand-color-soft', `${clinColor}11`); }, [clinColor]); - // On mount: always sync URL to match the actual current view (handles auth redirects). useEffect(() => { navigate(currentView); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -213,7 +357,12 @@ const App: React.FC = () => { const renderView = () => { switch (currentView) { - case 'landing': return handleNavigate('login')} />; + case 'landing': return handleNavigate('login')} + isAuthenticated={HybridBackend.isAuthenticated()} + userName={HybridBackend.getCurrentUserName()} + onGoToArea={() => handleNavigate(getDefaultViewForRole(HybridBackend.getCurrentRole()))} + />; case 'dashboard': return ; case 'leads': return ; case 'public': return ; @@ -235,9 +384,51 @@ const App: React.FC = () => { case 'cadastro-dentista': return ; case 'configuracoes': return ; case 'contratos': return ; + case 'plugins': return ; + case 'rx-radiografias': return ; + case 'criar-clinica': return { window.location.reload(); }} />; + case 'rx-config': return ; + case 'gestao-equipe': return ; + case 'tutoria-painel': return ; + case 'candidatura-tutor': return ; + case 'admin-gestao-tutores': return ; + case 'aguardando-convite': return ; + case 'superadmin': return ; + case 'superadmin-overview': return ; + case 'superadmin-users': return ; + case 'superadmin-clinicas': return ; + case 'superadmin-logs': return ; + case 'superadmin-financeiro': return ; + case 'superadmin-notificacoes': return ; + case 'diretorio-profissionais': return ; case 'login': default: - return { + return { + if (result?.noWorkspace) { + const userRole = result.userRole || 'dentista'; + if (userRole === 'superadmin') { + setCurrentView('superadmin'); + navigate('superadmin'); + } else if (userRole === 'admin' || userRole === 'donoclinica' || userRole === 'donoconsultorio') { + setCurrentView('criar-clinica'); + navigate('criar-clinica'); + } else { + setCurrentView('aguardando-convite'); + navigate('aguardando-convite'); + } + return; + } + const storedRole = getStoredUserRole(); + if (storedRole === 'superadmin') { + setCurrentView('superadmin-overview'); + navigate('superadmin-overview'); + return; + } + if (storedRole === 'donoconsultorio') { + setCurrentView('dashboard'); + navigate('dashboard'); + return; + } const role = HybridBackend.getCurrentRole(); const view = getDefaultViewForRole(role); setCurrentView(view); @@ -246,10 +437,13 @@ const App: React.FC = () => { } }; - const isStandaloneView = ['landing', 'login', 'public', 'update', 'cadastro-dentista'].includes(currentView); + const isStandaloneView = ['landing', 'login', 'public', 'update', 'cadastro-dentista', 'criar-clinica', 'aguardando-convite'].includes(currentView); return ( <> + {HybridBackend.isAuthenticated() && HybridBackend.mustChangePassword() && ( + forcePwRerender(t => t + 1)} /> + )}
-
- ); -}; +import React, { useState, useEffect } from 'react'; +import { X, ChevronLeft, ChevronRight, Save, Mail, Calendar, Settings as GearIcon, CheckCircle2 } from 'lucide-react'; +import { HybridBackend } from '../services/backend.ts'; +import { Settings, Dentista } from '../types.ts'; +import { useToast } from '../contexts/ToastContext.tsx'; +import { GoogleConnectButton } from './GoogleConnectButton.tsx'; +import { Link as LinkIcon, Copy, Share2 } from 'lucide-react'; + +interface AgendaSettingsModalProps { + isOpen: boolean; + onClose: () => void; + dentists: Dentista[] | null; +} + +export const AgendaSettingsModal: React.FC = ({ isOpen, onClose, dentists }) => { + const [page, setPage] = useState(1); + const [config, setConfig] = useState({ + clinicEmail: '', + clinicCalendarId: '', + googleApiKey: '', + googleCalendarIds: {} + }); + const [isSaving, setIsSaving] = useState(false); + const [connectedAccounts, setConnectedAccounts] = useState([]); + const toast = useToast(); + // Escopo: tudo (status Google, convites, settings) é da clínica/workspace ativa. + const clinicaId = HybridBackend.getActiveWorkspace()?.id; + + const fetchGoogleStatus = async () => { + try { + const response = await fetch(`/api/auth/google/status${clinicaId ? `?clinicaId=${clinicaId}` : ''}`); + const data = await response.json(); + setConnectedAccounts(Array.isArray(data) ? data : []); + } catch (error) { + console.error("Erro ao buscar status do Google:", error); + } + }; + + useEffect(() => { + if (isOpen) { + const loadSettings = async () => { + try { + const settings = await HybridBackend.getSettings(); + setConfig({ + clinicEmail: settings.clinicEmail || '', + clinicCalendarId: settings.clinicCalendarId || '', + googleApiKey: settings.googleApiKey || '', + googleCalendarIds: settings.googleCalendarIds || {} + }); + } catch (error) { + console.error("Erro ao carregar configurações:", error); + } + }; + loadSettings(); + fetchGoogleStatus(); + setPage(1); // Reset to first page + } + }, [isOpen]); + + const copyInviteLink = (dentistId: string) => { + const url = `/api/auth/google/url?dentistId=${dentistId}${clinicaId ? `&clinicaId=${clinicaId}` : ''}`; + navigator.clipboard.writeText(url); + toast.success("LINK DE CONVITE COPIADO!"); + }; + + const handleSave = async () => { + setIsSaving(true); + try { + await HybridBackend.saveSettings(config); + toast.success("CONFIGURAÇÕES SALVAS COM SUCESSO!"); + onClose(); + } catch (error) { + toast.error("ERRO AO SALVAR CONFIGURAÇÕES."); + } finally { + setIsSaving(false); + } + }; + + if (!isOpen) return null; + + const totalPages = 2; + // Conta admin/clínica conectada NESTA clínica: usa o owner_id real (email) p/ o + // disconnect funcionar; 'admin' fica só no connect (o backend resolve o email). + const adminAccount = connectedAccounts.find(a => a.owner_id && a.owner_id.includes('@')); + + return ( +
+
+ + {/* Header */} +
+
+
+ +
+
+

Configurações da Agenda

+

Integrações e Comunicação

+
+
+ +
+ + {/* Progress Bar */} +
+
+
+ + {/* Content Area - Horizontal Slider Simulation */} +
+
+ {/* Page 1: Clinic Emails */} +
+
+ +

E-mails da Clínica

+
+
+
+ + setConfig({ ...config, clinicEmail: e.target.value.toUpperCase() })} + /> +

* Este e-mail será usado para alertas de sistema e envio de comprovantes.

+
+
+
+ + {/* Page 3: Google Calendar Mapping */} +
+
+
+ +

Agendas dos Dentistas

+
+ + Abrir Google Calendar + +
+ +
+
+

Conectar Google Agenda

+

É só clicar e autorizar com a conta Google. Você NÃO precisa criar projeto, ativar API nem colar nenhum ID — a integração já está pronta.

+
+ + {/* ADMIN / CLINIC CONNECTION */} +
+

Sua Conta (Administrador)

+ +
+ +
+

Contas dos Dentistas

+ {dentists?.length ? dentists.map((dentist) => { + const isConnected = connectedAccounts.some(a => a.owner_id === dentist.id); + return ( +
+
+
+
+ {dentist.nome} +
+ {isConnected ? ( + Conectado + ) : ( + Não Vinculado + )} +
+ +
+
+ +
+ {!isConnected && ( + + )} +
+ +
+ ); + }) : ( +

Nenhum dentista cadastrado.

+ )} +
+
+
+
+
+ + {/* Footer Navigation */} +
+
+ {page > 1 && ( + + )} +
+ +
+ {page < totalPages ? ( + + ) : ( + + )} +
+
+
+ + +
+ ); +}; diff --git a/frontend/components/CameraCapture.tsx b/frontend/components/CameraCapture.tsx new file mode 100644 index 0000000..5a9d812 --- /dev/null +++ b/frontend/components/CameraCapture.tsx @@ -0,0 +1,203 @@ +import React, { useRef, useState, useEffect, useCallback } from 'react'; +import { Camera, X, Zap, ZapOff, Image as ImageIcon, RotateCcw, Loader2, AlertTriangle } from 'lucide-react'; + +interface Props { + onCapture: (file: File) => void; + onClose: () => void; + title?: string; + allowGallery?: boolean; +} + +// Resolução baixa só para análise de movimento/reflexo (leve no celular). +const AW = 80, AH = 60; + +/** + * Captura por câmera no NAVEGADOR (getUserMedia). Recursos: + * - Câmera traseira ao vivo, guia de enquadramento. + * - Auto-disparo quando a imagem fica ESTÁVEL (anti-tremor) — opcional (botão AUTO). + * - Detecção de REFLEXO (estouro de luz) avisando para reposicionar. + * - Lanterna (torch) onde o navegador suporta (Android/Chrome). + * - Fallback para galeria/arquivo. + * Observação: requer HTTPS (dev.scoreodonto.com já é). + */ +export const CameraCapture: React.FC = ({ onCapture, onClose, title, allowGallery = true }) => { + const videoRef = useRef(null); + const captureCanvas = useRef(null); + const analysisCanvas = useRef(null); + const prevGray = useRef(null); + const streamRef = useRef(null); + const rafRef = useRef(0); + const fileInputRef = useRef(null); + const stableCountRef = useRef(0); + const capturedRef = useRef(false); + + const [facing, setFacing] = useState<'environment' | 'user'>('environment'); + const [error, setError] = useState(''); + const [ready, setReady] = useState(false); + const [torchSupported, setTorchSupported] = useState(false); + const [torchOn, setTorchOn] = useState(false); + const [auto, setAuto] = useState(true); + const [hint, setHint] = useState('INICIANDO CÂMERA…'); + const [steady, setSteady] = useState(false); + + const cvs = (r: React.MutableRefObject) => (r.current ??= document.createElement('canvas')); + + const stop = useCallback(() => { + cancelAnimationFrame(rafRef.current); + streamRef.current?.getTracks().forEach(t => t.stop()); + streamRef.current = null; + }, []); + + const start = useCallback(async (mode: 'environment' | 'user') => { + setError(''); setReady(false); prevGray.current = null; stableCountRef.current = 0; capturedRef.current = false; + stop(); + if (!navigator.mediaDevices?.getUserMedia) { setError('CÂMERA NÃO SUPORTADA NESTE NAVEGADOR.'); return; } + try { + const stream = await navigator.mediaDevices.getUserMedia({ + video: { facingMode: { ideal: mode }, width: { ideal: 1920 }, height: { ideal: 1080 } }, + audio: false, + }); + streamRef.current = stream; + const v = videoRef.current; + if (v) { v.srcObject = stream; await v.play().catch(() => {}); } + const track = stream.getVideoTracks()[0]; + const caps: any = track.getCapabilities ? track.getCapabilities() : {}; + setTorchSupported(!!caps.torch); + setTorchOn(false); + setReady(true); + setHint('ENQUADRE E SEGURE FIRME'); + } catch (e: any) { + setError( + e?.name === 'NotAllowedError' ? 'PERMISSÃO DE CÂMERA NEGADA.' : + e?.name === 'NotFoundError' ? 'NENHUMA CÂMERA ENCONTRADA.' : + 'NÃO FOI POSSÍVEL ABRIR A CÂMERA.' + ); + } + }, [stop]); + + useEffect(() => { start(facing); return stop; /* eslint-disable-next-line */ }, []); + + const toGray = (v: HTMLVideoElement): Float32Array => { + const c = cvs(analysisCanvas); c.width = AW; c.height = AH; + const ctx = c.getContext('2d', { willReadFrequently: true })!; + ctx.drawImage(v, 0, 0, AW, AH); + const d = ctx.getImageData(0, 0, AW, AH).data; + const g = new Float32Array(AW * AH); + for (let i = 0, j = 0; i < d.length; i += 4, j++) g[j] = d[i] * 0.299 + d[i + 1] * 0.587 + d[i + 2] * 0.114; + return g; + }; + + const capture = useCallback(() => { + if (capturedRef.current) return; + const v = videoRef.current; + if (!v || !v.videoWidth) return; + capturedRef.current = true; + const c = cvs(captureCanvas); c.width = v.videoWidth; c.height = v.videoHeight; + c.getContext('2d')!.drawImage(v, 0, 0); + c.toBlob(blob => { + if (!blob) { capturedRef.current = false; return; } + onCapture(new File([blob], `foto_${Date.now()}.jpg`, { type: 'image/jpeg' })); + stop(); onClose(); + }, 'image/jpeg', 0.92); + }, [onCapture, onClose, stop]); + + // Loop de análise: estabilidade + reflexo + auto-disparo + useEffect(() => { + if (!ready) return; + let last = 0; + const loop = (ts: number) => { + rafRef.current = requestAnimationFrame(loop); + if (ts - last < 120) return; + last = ts; + const v = videoRef.current; + if (!v || !v.videoWidth || capturedRef.current) return; + const g = toGray(v); + let bright = 0; + for (let i = 0; i < g.length; i++) if (g[i] > 245) bright++; + const glare = bright / g.length; + let motion = 999; + if (prevGray.current) { + let sum = 0; + for (let i = 0; i < g.length; i++) sum += Math.abs(g[i] - prevGray.current[i]); + motion = sum / g.length; + } + prevGray.current = g; + const isSteady = motion < 5; + setSteady(isSteady && glare <= 0.18); + if (glare > 0.18) { setHint('REFLEXO DETECTADO — INCLINE OU AFASTE A LUZ'); stableCountRef.current = 0; return; } + if (!isSteady) { setHint('SEGURE FIRME…'); stableCountRef.current = 0; return; } + stableCountRef.current++; + setHint(auto ? 'ESTÁVEL — CAPTURANDO…' : 'ESTÁVEL — TOQUE NO BOTÃO'); + if (auto && stableCountRef.current >= 4) capture(); + }; + rafRef.current = requestAnimationFrame(loop); + return () => cancelAnimationFrame(rafRef.current); + }, [ready, auto, capture]); + + const toggleTorch = async () => { + const track = streamRef.current?.getVideoTracks()[0]; + if (!track) return; + try { await track.applyConstraints({ advanced: [{ torch: !torchOn }] as any }); setTorchOn(t => !t); } catch { /* ignore */ } + }; + + const onPickFile = (e: React.ChangeEvent) => { + const f = e.target.files?.[0]; + if (f) { stop(); onCapture(f); onClose(); } + }; + + return ( +
+
+ {title || 'CÂMERA'} + +
+ +
+ {error ? ( +
+ +

{error}

+ {allowGallery && ( + + )} +
+ ) : ( + <> +
+ ); +}; diff --git a/frontend/components/ChangePasswordModal.tsx b/frontend/components/ChangePasswordModal.tsx new file mode 100644 index 0000000..a0219ea --- /dev/null +++ b/frontend/components/ChangePasswordModal.tsx @@ -0,0 +1,60 @@ +import React, { useState } from 'react'; +import { KeyRound, Loader2, X } from 'lucide-react'; +import { HybridBackend } from '../services/backend.ts'; +import { useToast } from '../contexts/ToastContext.tsx'; + +interface Props { + forced?: boolean; // troca obrigatória (1º login com senha temporária) — não pede senha atual nem deixa cancelar + onClose?: () => void; + onDone: () => void; +} + +const inp = 'w-full border border-gray-200 rounded-xl px-3 py-2.5 text-sm font-medium text-gray-800 outline-none focus:border-blue-500 focus:ring-2 focus:ring-blue-100 transition-all'; + +export const ChangePasswordModal: React.FC = ({ forced, onClose, onDone }) => { + const toast = useToast(); + const [atual, setAtual] = useState(''); + const [nova, setNova] = useState(''); + const [conf, setConf] = useState(''); + const [saving, setSaving] = useState(false); + + const submit = async () => { + if (nova.length < 6) { toast.error('A NOVA SENHA DEVE TER NO MÍNIMO 6 CARACTERES.'); return; } + if (nova !== conf) { toast.error('AS SENHAS NÃO COINCIDEM.'); return; } + setSaving(true); + try { + const r = await HybridBackend.changeMyPassword(forced ? undefined : atual, nova); + if (!r.success) { toast.error(r.message || 'ERRO AO TROCAR SENHA.'); return; } + toast.success('SENHA ALTERADA COM SUCESSO!'); + onDone(); + } catch { toast.error('ERRO AO TROCAR SENHA.'); } + finally { setSaving(false); } + }; + + return ( +
+
+
+

{forced ? 'Defina uma nova senha' : 'Trocar senha'}

+ {!forced && onClose && } +
+
+ {forced && ( +

+ Sua senha é temporária. Defina uma nova para continuar usando o sistema. +

+ )} + {!forced && setAtual(e.target.value)} className={inp} autoComplete="current-password" />} + setNova(e.target.value)} className={inp} autoComplete="new-password" /> + setConf(e.target.value)} className={inp} autoComplete="new-password" /> +
+ {!forced && onClose && } + +
+
+
+
+ ); +}; diff --git a/frontend/components/GoogleConnectButton.tsx b/frontend/components/GoogleConnectButton.tsx index 96d2174..84d5af3 100644 --- a/frontend/components/GoogleConnectButton.tsx +++ b/frontend/components/GoogleConnectButton.tsx @@ -2,18 +2,21 @@ import React, { useState } from 'react'; import { Calendar, Link, CheckCircle2, AlertCircle, Loader2 } from 'lucide-react'; interface GoogleConnectButtonProps { - ownerId: string; // Ex: 'admin' ou o ID do dentista + ownerId: string; + clinicaId?: string; isConnected: boolean; onStatusChange?: () => void; } -export const GoogleConnectButton: React.FC = ({ ownerId, isConnected, onStatusChange }) => { +export const GoogleConnectButton: React.FC = ({ ownerId, clinicaId, isConnected, onStatusChange }) => { const [isLoading, setIsLoading] = useState(false); const handleConnect = async () => { setIsLoading(true); try { - const response = await fetch(`/api/auth/google/url?dentistId=${ownerId}`); + const params = new URLSearchParams({ ownerId }); + if (clinicaId) params.set('clinicaId', clinicaId); + const response = await fetch(`/api/auth/google/url?${params}`); const data = await response.json(); if (!response.ok || data.error) { alert(`Erro: ${data.error || 'Falha ao obter URL de autenticação'}`); @@ -34,13 +37,24 @@ export const GoogleConnectButton: React.FC = ({ ownerI `width=${width},height=${height},left=${left},top=${top}` ); - // Verificar se o popup fechou a cada 1s - const checkPopup = setInterval(() => { - if (!popup || popup.closed) { - clearInterval(checkPopup); - setIsLoading(false); - if (onStatusChange) onStatusChange(); - } + // Detecção robusta de fechamento. As páginas de login do Google enviam + // Cross-Origin-Opener-Policy, o que BLOQUEIA ler popup.closed (enche o + // console de warning e não detecta o fechamento). Por isso usamos o + // retorno de FOCO à janela principal como sinal de que o popup foi fechado; + // o polling de popup.closed fica só como fallback protegido por try/catch. + let done = false; + const finish = () => { + if (done) return; + done = true; + window.removeEventListener('focus', onFocus); + clearInterval(timer); + setIsLoading(false); + if (onStatusChange) onStatusChange(); + }; + const onFocus = () => { setTimeout(finish, 600); }; + window.addEventListener('focus', onFocus); + const timer = setInterval(() => { + try { if (!popup || popup.closed) finish(); } catch { /* COOP bloqueia: ignora */ } }, 1000); } catch (error) { diff --git a/frontend/components/Sidebar.tsx b/frontend/components/Sidebar.tsx index c663862..ea0ad5f 100644 --- a/frontend/components/Sidebar.tsx +++ b/frontend/components/Sidebar.tsx @@ -1,9 +1,10 @@ import React from 'react'; import { Users, Calendar as CalendarIcon, LayoutDashboard, Stethoscope, - DollarSign, RefreshCw, Database, Activity, BookOpen, Award, Megaphone, LogOut, ClipboardList, Bell, Building2, User, BarChart3, Settings, FileText + DollarSign, RefreshCw, Activity, BookOpen, Award, Megaphone, LogOut, ClipboardList, Bell, Building2, User, BarChart3, Settings, FileText, Puzzle, ScanLine, Monitor, UsersRound, GraduationCap, UserSearch, Briefcase, TrendingUp, Eye, FlaskConical } from 'lucide-react'; import { HybridBackend } from '../services/backend.ts'; +import { getActivePlugins } from '../views/plugins/pluginRegistry.ts'; interface SidebarProps { activeTab: string; @@ -15,9 +16,28 @@ export const Sidebar: React.FC = ({ activeTab, setActiveTab }) => const userName = HybridBackend.getCurrentUserName(); const userEmail = HybridBackend.getCurrentUser(); const activeWorkspace = HybridBackend.getActiveWorkspace(); - const clinColor = activeWorkspace?.cor || '#2563eb'; + const clinColor = activeWorkspace?.cor || (currentRole === 'superadmin' ? '#dc2626' : '#2563eb'); + const activePluginIds = getActivePlugins(); + + const isTutor = (() => { + try { return JSON.parse(localStorage.getItem('SCOREODONTO_USER_DATA') || '{}').is_tutor === true; } catch { return false; } + })(); + + const pluginMenuItems: Array<{ id: string; label: string; icon: any; color: string }> = []; + if (activePluginIds.includes('rx-scoreodonto') && currentRole !== 'superadmin') { + pluginMenuItems.push({ id: 'rx-radiografias', label: 'RX / RADIOGRAFIAS', icon: ScanLine, color: '#7c3aed' }); + if (['admin', 'donoclinica', 'donoconsultorio'].includes(currentRole)) { + pluginMenuItems.push({ id: 'rx-config', label: 'DISPOSITIVOS RX', icon: Monitor, color: '#7c3aed' }); + } + } const menuItems = [ + { id: 'superadmin-overview', label: 'VISÃO GERAL', icon: TrendingUp }, + { id: 'superadmin-users', label: 'USUÁRIOS', icon: Users }, + { id: 'superadmin-clinicas', label: 'CLÍNICAS', icon: Building2 }, + { id: 'superadmin-logs', label: 'ACESSOS', icon: Activity }, + { id: 'superadmin-financeiro', label: 'FINANCEIRO', icon: DollarSign }, + { id: 'superadmin-notificacoes', label: 'NOTIFICAÇÕES', icon: Bell }, { id: 'dashboard', label: 'VISÃO GERAL', icon: LayoutDashboard }, { id: 'agenda', label: 'AGENDA', icon: CalendarIcon }, { id: 'pacientes', label: 'PACIENTES', icon: Users }, @@ -33,14 +53,41 @@ export const Sidebar: React.FC = ({ activeTab, setActiveTab }) => { id: 'especialidades', label: 'ESPECIALIDADES', icon: Award }, { id: 'procedimentos', label: 'PROCEDIMENTOS', icon: ClipboardList }, { id: 'planos', label: 'PLANOS / CONVÊNIOS', icon: BookOpen }, + { id: 'gestao-equipe', label: 'EQUIPE / USUÁRIOS', icon: UsersRound }, + { id: 'diretorio-profissionais', label: 'DIRETÓRIO PROF.', icon: UserSearch }, + { id: 'admin-gestao-tutores', label: 'GESTÃO TUTORES', icon: GraduationCap }, + { id: 'candidatura-tutor', label: 'SER TUTOR ORTO', icon: GraduationCap }, + { id: 'tutoria-painel', label: 'PAINEL TUTOR', icon: GraduationCap }, { id: 'notificacoes', label: 'NOTIFICAÇÕES', icon: Bell }, - { id: 'sync', label: 'SINCRONIZAÇÃO', icon: RefreshCw }, + { id: 'plugins', label: 'PLUGINS', icon: Puzzle }, { id: 'configuracoes', label: 'CONFIGURAÇÕES', icon: Settings }, ].filter(item => { - if (['admin', 'donoclinica'].includes(currentRole)) return true; + // superadmin: itens específicos de administração global + if (currentRole === 'superadmin') return ['superadmin-overview', 'superadmin-users', 'superadmin-clinicas', 'superadmin-logs', 'superadmin-financeiro', 'superadmin-notificacoes', 'configuracoes'].includes(item.id); + + // telas de superadmin são exclusivas do superadmin (não vazam p/ admin/donos) + if (item.id.startsWith('superadmin')) return false; + + // plugins e gestão de tutores: exclusivo superadmin + if (item.id === 'plugins' || item.id === 'admin-gestao-tutores') return false; + + // painel tutor: só para tutores aprovados + if (item.id === 'tutoria-painel') return isTutor; + + // RBAC por CARGO: membro não-dono com permissões definidas no workspace ativo + const wsRole = (activeWorkspace as any)?.role; + const wsPerms = (activeWorkspace as any)?.permissoes; + const isWsOwner = ['admin', 'donoclinica', 'donoconsultorio'].includes(wsRole || ''); + if (!isWsOwner && Array.isArray(wsPerms) && wsPerms.length > 0) { + // Navegação/conta sempre visível + if (['clinicas', 'configuracoes', 'notificacoes'].includes(item.id)) return true; + return wsPerms.includes(item.id); + } + + if (['admin', 'donoclinica', 'donoconsultorio'].includes(currentRole)) return true; if (currentRole === 'paciente') return ['tratamentos', 'notificacoes', 'configuracoes'].includes(item.id); - if (currentRole === 'dentista') return ['dashboard', 'pacientes', 'tratamentos', 'agenda', 'ortodontia', 'notificacoes', 'clinicas', 'configuracoes', 'contratos'].includes(item.id); - if (currentRole === 'funcionario') return ['dashboard', 'leads', 'pacientes', 'tratamentos', 'lancar-gto', 'agenda', 'financeiro', 'relatorios', 'notificacoes', 'clinicas', 'configuracoes', 'contratos'].includes(item.id); + if (currentRole === 'dentista') return ['dashboard', 'pacientes', 'tratamentos', 'agenda', 'ortodontia', 'notificacoes', 'clinicas', 'configuracoes', 'contratos', 'candidatura-tutor', 'diretorio-profissionais'].includes(item.id); + if (currentRole === 'funcionario') return ['dashboard', 'leads', 'pacientes', 'tratamentos', 'lancar-gto', 'agenda', 'financeiro', 'relatorios', 'notificacoes', 'clinicas', 'configuracoes', 'contratos', 'diretorio-profissionais'].includes(item.id); return false; }); @@ -50,6 +97,9 @@ export const Sidebar: React.FC = ({ activeTab, setActiveTab }) => } }; + const workspaceName = activeWorkspace?.nome || 'SCOREODONTO'; + const WorkspaceIcon = currentRole === 'donoconsultorio' ? Briefcase : Building2; + return (
@@ -57,11 +107,11 @@ export const Sidebar: React.FC = ({ activeTab, setActiveTab }) => className="w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold shadow-lg transition-colors duration-500" style={{ backgroundColor: clinColor }} > - +
-
- SCOREODONTO - POSTGRESQL + GOOGLE +
+ {workspaceName} + SCOREODONTO
@@ -88,6 +138,48 @@ export const Sidebar: React.FC = ({ activeTab, setActiveTab }) => ); })} + + {currentRole === 'superadmin' && ( +
+

+ Visualizar como +

+ {[ + { role: 'donoclinica', label: 'DONO DE CLÍNICA', icon: Building2 }, + { role: 'dentista', label: 'DENTISTA', icon: Stethoscope }, + { role: 'protetico', label: 'PROTÉTICO', icon: FlaskConical }, + { role: 'paciente', label: 'PACIENTE', icon: User }, + ].map(({ role, label, icon: Icon }) => ( + + ))} +
+ )} + + {pluginMenuItems.map((item) => { + const Icon = item.icon; + const isActive = activeTab === item.id; + return ( + + ); + })}
@@ -118,4 +210,4 @@ export const Sidebar: React.FC = ({ activeTab, setActiveTab }) =>
); -}; \ No newline at end of file +}; diff --git a/frontend/components/StackModal.tsx b/frontend/components/StackModal.tsx new file mode 100644 index 0000000..33465ce --- /dev/null +++ b/frontend/components/StackModal.tsx @@ -0,0 +1,78 @@ +import React, { createContext, useContext, useState, useCallback, ReactNode, useEffect } from 'react'; +import { X, ChevronLeft, Maximize2, Minimize2 } from 'lucide-react'; + +// Modal em PILHA (estilo navegação iOS): páginas deslizam da direita, com botão voltar. +// Desktop abre pequeno + ícone maximizar (tela cheia). Mobile = tela cheia direto. +// Cada página é um componente que carrega o PRÓPRIO mínimo (carregamento progressivo). + +export interface StackPage { + title: string; + render: () => ReactNode; +} + +interface StackCtx { + push: (p: StackPage) => void; + pop: () => void; + close: () => void; +} +const Ctx = createContext(null); +export const useStackModal = (): StackCtx => { + const c = useContext(Ctx); + if (!c) throw new Error('useStackModal deve ser usado dentro de '); + return c; +}; + +export const StackModal: React.FC<{ isOpen: boolean; onClose: () => void; root: StackPage }> = ({ isOpen, onClose, root }) => { + const [stack, setStack] = useState([root]); + const [fullscreen, setFullscreen] = useState(false); + + // Reabriu → reinicia a pilha. (Use também key={...} no pai p/ forçar remount por entidade.) + useEffect(() => { if (isOpen) setStack([root]); /* eslint-disable-line */ }, [isOpen]); + + const push = useCallback((p: StackPage) => setStack(s => [...s, p]), []); + const pop = useCallback(() => setStack(s => (s.length > 1 ? s.slice(0, -1) : s)), []); + const close = useCallback(() => onClose(), [onClose]); + + if (!isOpen) return null; + const current = stack[stack.length - 1]; + const canBack = stack.length > 1; + + return ( +
+
+
+ {canBack ? ( + + ) : ( + + )} +

{current.title}

+ + +
+ +
+ +
+ {current.render()} +
+
+
+
+
+ ); +}; diff --git a/frontend/dist/assets/html2canvas.esm-QH1iLAAe.js b/frontend/dist/assets/html2canvas.esm-QH1iLAAe.js new file mode 100644 index 0000000..de72ecb --- /dev/null +++ b/frontend/dist/assets/html2canvas.esm-QH1iLAAe.js @@ -0,0 +1,22 @@ +/*! + * html2canvas 1.4.1 + * Copyright (c) 2022 Niklas von Hertzen + * Released under MIT License + *//*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var mr=function(e,A){return mr=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,r){t.__proto__=r}||function(t,r){for(var B in r)Object.prototype.hasOwnProperty.call(r,B)&&(t[B]=r[B])},mr(e,A)};function tA(e,A){if(typeof A!="function"&&A!==null)throw new TypeError("Class extends value "+String(A)+" is not a constructor or null");mr(e,A);function t(){this.constructor=e}e.prototype=A===null?Object.create(A):(t.prototype=A.prototype,new t)}var Lr=function(){return Lr=Object.assign||function(A){for(var t,r=1,B=arguments.length;r0&&n[n.length-1])&&(o[0]===6||o[0]===2)){t=0;continue}if(o[0]===3&&(!n||o[1]>n[0]&&o[1]=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},nt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",on=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(var le=0;le"u"?[]:new Uint8Array(256);for(var fe=0;fe>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},gn=function(e){for(var A=e.length,t=[],r=0;r>bA,Cn=1<>bA,ln=BB+un,fn=ln,Un=32,Fn=fn+Un,hn=65536>>zr,dn=1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>bA],t=(t<>bA)],t=(t<>zr),t=this.index[t],t+=A>>bA&En,t=this.index[t],t=(t<"u"?[]:new Uint8Array(256);for(var Ue=0;Ueot?(B.push(!0),i-=ot):B.push(!1),["normal","auto","loose"].indexOf(A)!==-1&&[8208,8211,12316,12448].indexOf(n)!==-1)return r.push(s),t.push(xr);if(i===mn||i===Dr){if(s===0)return r.push(s),t.push(LA);var a=t[s-1];return Mn.indexOf(a)===-1?(r.push(r[s-1]),t.push(a)):(r.push(s),t.push(LA))}if(r.push(s),i===Tn)return t.push(A==="strict"?Tr:Qe);if(i===iB||i===xn)return t.push(LA);if(i===Sn)return n>=131072&&n<=196605||n>=196608&&n<=262141?t.push(Qe):t.push(LA);t.push(i)}),[r,t,B]},wr=function(e,A,t,r){var B=r[t];if(Array.isArray(e)?e.indexOf(B)!==-1:e===B)for(var n=t;n<=r.length;){n++;var s=r[n];if(s===A)return!0;if(s!==FA)break}if(B===FA)for(var n=t;n>0;){n--;var i=r[n];if(Array.isArray(e)?e.indexOf(i)!==-1:e===i)for(var a=t;a<=r.length;){a++;var s=r[a];if(s===A)return!0;if(s!==FA)break}if(i!==FA)break}return!1},lt=function(e,A){for(var t=e;t>=0;){var r=A[t];if(r===FA)t--;else return r}return 0},Vn=function(e,A,t,r,B){if(t[r]===0)return I;var n=r-1;if(Array.isArray(B)&&B[n]===!0)return I;var s=n-1,i=n+1,a=A[n],o=s>=0?A[s]:0,Q=A[i];if(a===nB&&Q===sB)return I;if(Vr.indexOf(a)!==-1)return oB;if(Vr.indexOf(Q)!==-1||QB.indexOf(Q)!==-1)return I;if(lt(n,A)===aB)return Ee;if(Rr.get(e[n])===Dr||(a===he||a===de)&&Rr.get(e[i])===Dr||a===Qt||Q===Qt||a===gt||[FA,br,$A].indexOf(a)===-1&&Q===gt||[Fe,WA,bn,SA,OA].indexOf(Q)!==-1||lt(n,A)===ZA||wr(Qr,ZA,n,A)||wr([Fe,WA],Tr,n,A)||wr(wt,wt,n,A))return I;if(a===FA)return Ee;if(a===Qr||Q===Qr)return I;if(Q===xr||a===xr)return Ee;if([br,$A,Tr].indexOf(Q)!==-1||a===Dn||o===Mr&&Gn.indexOf(a)!==-1||a===OA&&Q===Mr||Q===ct||QA.indexOf(Q)!==-1&&a===j||QA.indexOf(a)!==-1&&Q===j||a===ee&&[Qe,he,de].indexOf(Q)!==-1||[Qe,he,de].indexOf(a)!==-1&&Q===Ae||QA.indexOf(a)!==-1&&Ct.indexOf(Q)!==-1||Ct.indexOf(a)!==-1&&QA.indexOf(Q)!==-1||[ee,Ae].indexOf(a)!==-1&&(Q===j||[ZA,$A].indexOf(Q)!==-1&&A[i+1]===j)||[ZA,$A].indexOf(a)!==-1&&Q===j||a===j&&[j,OA,SA].indexOf(Q)!==-1)return I;if([j,OA,SA,Fe,WA].indexOf(Q)!==-1)for(var g=n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if([ee,Ae].indexOf(Q)!==-1)for(var g=[Fe,WA].indexOf(a)!==-1?s:n;g>=0;){var w=A[g];if(w===j)return I;if([OA,SA].indexOf(w)!==-1)g--;else break}if(Gr===a&&[Gr,Ge,Sr,Or].indexOf(Q)!==-1||[Ge,Sr].indexOf(a)!==-1&&[Ge,Re].indexOf(Q)!==-1||[Re,Or].indexOf(a)!==-1&&Q===Re||ut.indexOf(a)!==-1&&[ct,Ae].indexOf(Q)!==-1||ut.indexOf(Q)!==-1&&a===ee||QA.indexOf(a)!==-1&&QA.indexOf(Q)!==-1||a===SA&&QA.indexOf(Q)!==-1||QA.concat(j).indexOf(a)!==-1&&Q===ZA&&On.indexOf(e[i])===-1||QA.concat(j).indexOf(Q)!==-1&&a===WA)return I;if(a===gr&&Q===gr){for(var f=t[n],c=1;f>0&&(f--,A[f]===gr);)c++;if(c%2!==0)return I}return a===he&&Q===de?I:Ee},Nn=function(e,A){A||(A={lineBreak:"normal",wordBreak:"normal"});var t=Rn(e,A.lineBreak),r=t[0],B=t[1],n=t[2];(A.wordBreak==="break-all"||A.wordBreak==="break-word")&&(B=B.map(function(i){return[j,LA,iB].indexOf(i)!==-1?Qe:i}));var s=A.wordBreak==="keep-all"?n.map(function(i,a){return i&&e[a]>=19968&&e[a]<=40959}):void 0;return[r,B,s]},Xn=(function(){function e(A,t,r,B){this.codePoints=A,this.required=t===oB,this.start=r,this.end=B}return e.prototype.slice=function(){return S.apply(void 0,this.codePoints.slice(this.start,this.end))},e})(),_n=function(e,A){var t=$e(e),r=Nn(t,A),B=r[0],n=r[1],s=r[2],i=t.length,a=0,o=0;return{next:function(){if(o>=i)return{done:!0,value:null};for(var Q=I;o=gB&&e<=57},Hs=function(e){return e>=55296&&e<=57343},MA=function(e){return J(e)||e>=CB&&e<=lB||e>=wB&&e<=Us},ps=function(e){return e>=wB&&e<=hs},Is=function(e){return e>=CB&&e<=Es},vs=function(e){return ps(e)||Is(e)},ys=function(e){return e>=is},ye=function(e){return e===Xe||e===kn||e===Yn},_e=function(e){return vs(e)||ys(e)||e===jn},dt=function(e){return _e(e)||J(e)||e===Z},Ks=function(e){return e>=ws&&e<=cs||e===Cs||e>=us&&e<=ls||e===fs},UA=function(e,A){return e!==ne?!1:A!==Xe},Ke=function(e,A,t){return e===Z?_e(A)||UA(A,t):_e(e)?!0:!!(e===ne&&UA(e,A))},Cr=function(e,A,t){return e===DA||e===Z?J(A)?!0:A===ge&&J(t):J(e===ge?A:e)},ms=function(e){var A=0,t=1;(e[A]===DA||e[A]===Z)&&(e[A]===Z&&(t=-1),A++);for(var r=[];J(e[A]);)r.push(e[A++]);var B=r.length?parseInt(S.apply(void 0,r),10):0;e[A]===ge&&A++;for(var n=[];J(e[A]);)n.push(e[A++]);var s=n.length,i=s?parseInt(S.apply(void 0,n),10):0;(e[A]===uB||e[A]===cB)&&A++;var a=1;(e[A]===DA||e[A]===Z)&&(e[A]===Z&&(a=-1),A++);for(var o=[];J(e[A]);)o.push(e[A++]);var Q=o.length?parseInt(S.apply(void 0,o),10):0;return t*(B+i*Math.pow(10,-s))*Math.pow(10,a*Q)},Ls={type:2},Ds={type:3},bs={type:4},xs={type:13},Ts={type:8},Ss={type:21},Os={type:9},Ms={type:10},Gs={type:11},Rs={type:12},Vs={type:14},me={type:23},Ns={type:1},Xs={type:25},_s={type:24},Js={type:26},Ps={type:27},ks={type:28},Ys={type:29},Ws={type:31},Nr={type:32},fB=(function(){function e(){this._value=[]}return e.prototype.write=function(A){this._value=this._value.concat($e(A))},e.prototype.read=function(){for(var A=[],t=this.consumeToken();t!==Nr;)A.push(t),t=this.consumeToken();return A},e.prototype.consumeToken=function(){var A=this.consumeCodePoint();switch(A){case He:return this.consumeStringToken(He);case Wn:var t=this.peekCodePoint(0),r=this.peekCodePoint(1),B=this.peekCodePoint(2);if(dt(t)||UA(r,B)){var n=Ke(t,r,B)?Pn:Jn,s=this.consumeName();return{type:5,value:s,flags:n}}break;case Zn:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),xs;break;case pe:return this.consumeStringToken(pe);case Ie:return Ls;case jA:return Ds;case cr:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Vs;break;case DA:if(Cr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case os:return bs;case Z:var i=A,a=this.peekCodePoint(0),o=this.peekCodePoint(1);if(Cr(i,a,o))return this.reconsumeCodePoint(A),this.consumeNumericToken();if(Ke(i,a,o))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();if(a===Z&&o===As)return this.consumeCodePoint(),this.consumeCodePoint(),_s;break;case ge:if(Cr(A,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(A),this.consumeNumericToken();break;case Ut:if(this.peekCodePoint(0)===cr)for(this.consumeCodePoint();;){var Q=this.consumeCodePoint();if(Q===cr&&(Q=this.consumeCodePoint(),Q===Ut))return this.consumeToken();if(Q===nA)return this.consumeToken()}break;case Qs:return Js;case gs:return Ps;case $n:if(this.peekCodePoint(0)===zn&&this.peekCodePoint(1)===Z&&this.peekCodePoint(2)===Z)return this.consumeCodePoint(),this.consumeCodePoint(),Xs;break;case es:var g=this.peekCodePoint(0),w=this.peekCodePoint(1),f=this.peekCodePoint(2);if(Ke(g,w,f)){var s=this.consumeName();return{type:7,value:s}}break;case rs:return ks;case ne:if(UA(A,this.peekCodePoint(0)))return this.reconsumeCodePoint(A),this.consumeIdentLikeToken();break;case ts:return Ys;case Bs:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Ts;break;case ns:return Gs;case ss:return Rs;case Fs:case ds:var c=this.peekCodePoint(0),C=this.peekCodePoint(1);return c===DA&&(MA(C)||C===ve)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(A),this.consumeIdentLikeToken();case Ft:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Os;if(this.peekCodePoint(0)===Ft)return this.consumeCodePoint(),Ss;break;case as:if(this.peekCodePoint(0)===qA)return this.consumeCodePoint(),Ms;break;case nA:return Nr}return ye(A)?(this.consumeWhiteSpace(),Ws):J(A)?(this.reconsumeCodePoint(A),this.consumeNumericToken()):_e(A)?(this.reconsumeCodePoint(A),this.consumeIdentLikeToken()):{type:6,value:S(A)}},e.prototype.consumeCodePoint=function(){var A=this._value.shift();return typeof A>"u"?-1:A},e.prototype.reconsumeCodePoint=function(A){this._value.unshift(A)},e.prototype.peekCodePoint=function(A){return A>=this._value.length?-1:this._value[A]},e.prototype.consumeUnicodeRangeToken=function(){for(var A=[],t=this.consumeCodePoint();MA(t)&&A.length<6;)A.push(t),t=this.consumeCodePoint();for(var r=!1;t===ve&&A.length<6;)A.push(t),t=this.consumeCodePoint(),r=!0;if(r){var B=parseInt(S.apply(void 0,A.map(function(a){return a===ve?gB:a})),16),n=parseInt(S.apply(void 0,A.map(function(a){return a===ve?lB:a})),16);return{type:30,start:B,end:n}}var s=parseInt(S.apply(void 0,A),16);if(this.peekCodePoint(0)===Z&&MA(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var i=[];MA(t)&&i.length<6;)i.push(t),t=this.consumeCodePoint();var n=parseInt(S.apply(void 0,i),16);return{type:30,start:s,end:n}}else return{type:30,start:s,end:s}},e.prototype.consumeIdentLikeToken=function(){var A=this.consumeName();return A.toLowerCase()==="url"&&this.peekCodePoint(0)===Ie?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===Ie?(this.consumeCodePoint(),{type:19,value:A}):{type:20,value:A}},e.prototype.consumeUrlToken=function(){var A=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===nA)return{type:22,value:""};var t=this.peekCodePoint(0);if(t===pe||t===He){var r=this.consumeStringToken(this.consumeCodePoint());return r.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===nA||this.peekCodePoint(0)===jA)?(this.consumeCodePoint(),{type:22,value:r.value}):(this.consumeBadUrlRemnants(),me)}for(;;){var B=this.consumeCodePoint();if(B===nA||B===jA)return{type:22,value:S.apply(void 0,A)};if(ye(B))return this.consumeWhiteSpace(),this.peekCodePoint(0)===nA||this.peekCodePoint(0)===jA?(this.consumeCodePoint(),{type:22,value:S.apply(void 0,A)}):(this.consumeBadUrlRemnants(),me);if(B===He||B===pe||B===Ie||Ks(B))return this.consumeBadUrlRemnants(),me;if(B===ne)if(UA(B,this.peekCodePoint(0)))A.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),me;else A.push(B)}},e.prototype.consumeWhiteSpace=function(){for(;ye(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var A=this.consumeCodePoint();if(A===jA||A===nA)return;UA(A,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(A){for(var t=5e4,r="";A>0;){var B=Math.min(t,A);r+=S.apply(void 0,this._value.splice(0,B)),A-=B}return this._value.shift(),r},e.prototype.consumeStringToken=function(A){var t="",r=0;do{var B=this._value[r];if(B===nA||B===void 0||B===A)return t+=this.consumeStringSlice(r),{type:0,value:t};if(B===Xe)return this._value.splice(0,r),Ns;if(B===ne){var n=this._value[r+1];n!==nA&&n!==void 0&&(n===Xe?(t+=this.consumeStringSlice(r),r=-1,this._value.shift()):UA(B,n)&&(t+=this.consumeStringSlice(r),t+=S(this.consumeEscapedCodePoint()),r=-1))}r++}while(!0)},e.prototype.consumeNumber=function(){var A=[],t=ce,r=this.peekCodePoint(0);for((r===DA||r===Z)&&A.push(this.consumeCodePoint());J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0);var B=this.peekCodePoint(1);if(r===ge&&J(B))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=ft;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());r=this.peekCodePoint(0),B=this.peekCodePoint(1);var n=this.peekCodePoint(2);if((r===uB||r===cB)&&((B===DA||B===Z)&&J(n)||J(B)))for(A.push(this.consumeCodePoint(),this.consumeCodePoint()),t=ft;J(this.peekCodePoint(0));)A.push(this.consumeCodePoint());return[ms(A),t]},e.prototype.consumeNumericToken=function(){var A=this.consumeNumber(),t=A[0],r=A[1],B=this.peekCodePoint(0),n=this.peekCodePoint(1),s=this.peekCodePoint(2);if(Ke(B,n,s)){var i=this.consumeName();return{type:15,number:t,flags:r,unit:i}}return B===qn?(this.consumeCodePoint(),{type:16,number:t,flags:r}):{type:17,number:t,flags:r}},e.prototype.consumeEscapedCodePoint=function(){var A=this.consumeCodePoint();if(MA(A)){for(var t=S(A);MA(this.peekCodePoint(0))&&t.length<6;)t+=S(this.consumeCodePoint());ye(this.peekCodePoint(0))&&this.consumeCodePoint();var r=parseInt(t,16);return r===0||Hs(r)||r>1114111?ht:r}return A===nA?ht:A},e.prototype.consumeName=function(){for(var A="";;){var t=this.consumeCodePoint();if(dt(t))A+=S(t);else if(UA(t,this.peekCodePoint(0)))A+=S(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(t),A}},e})(),UB=(function(){function e(A){this._tokens=A}return e.create=function(A){var t=new fB;return t.write(A),new e(t.read())},e.parseValue=function(A){return e.create(A).parseComponentValue()},e.parseValues=function(A){return e.create(A).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var A=this.consumeToken();A.type===31;)A=this.consumeToken();if(A.type===32)throw new SyntaxError("Error parsing CSS component value, unexpected EOF");this.reconsumeToken(A);var t=this.consumeComponentValue();do A=this.consumeToken();while(A.type===31);if(A.type===32)return t;throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one")},e.prototype.parseComponentValues=function(){for(var A=[];;){var t=this.consumeComponentValue();if(t.type===32)return A;A.push(t),A.push()}},e.prototype.consumeComponentValue=function(){var A=this.consumeToken();switch(A.type){case 11:case 28:case 2:return this.consumeSimpleBlock(A.type);case 19:return this.consumeFunction(A)}return A},e.prototype.consumeSimpleBlock=function(A){for(var t={type:A,values:[]},r=this.consumeToken();;){if(r.type===32||qs(r,A))return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue()),r=this.consumeToken()}},e.prototype.consumeFunction=function(A){for(var t={name:A.value,values:[],type:18};;){var r=this.consumeToken();if(r.type===32||r.type===3)return t;this.reconsumeToken(r),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var A=this._tokens.shift();return typeof A>"u"?Nr:A},e.prototype.reconsumeToken=function(A){this._tokens.unshift(A)},e})(),Ce=function(e){return e.type===15},kA=function(e){return e.type===17},D=function(e){return e.type===20},Zs=function(e){return e.type===0},Xr=function(e,A){return D(e)&&e.value===A},FB=function(e){return e.type!==31},PA=function(e){return e.type!==31&&e.type!==4},sA=function(e){var A=[],t=[];return e.forEach(function(r){if(r.type===4){if(t.length===0)throw new Error("Error parsing function args, zero tokens for arg");A.push(t),t=[];return}r.type!==31&&t.push(r)}),t.length&&A.push(t),A},qs=function(e,A){return A===11&&e.type===12||A===28&&e.type===29?!0:A===2&&e.type===3},pA=function(e){return e.type===17||e.type===15},M=function(e){return e.type===16||pA(e)},hB=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},X={type:17,number:0,flags:ce},$r={type:16,number:50,flags:ce},hA={type:16,number:100,flags:ce},re=function(e,A,t){var r=e[0],B=e[1];return[b(r,A),b(typeof B<"u"?B:r,t)]},b=function(e,A){if(e.type===16)return e.number/100*A;if(Ce(e))switch(e.unit){case"rem":case"em":return 16*e.number;case"px":default:return e.number}return e.number},dB="deg",EB="grad",HB="rad",pB="turn",Ar={name:"angle",parse:function(e,A){if(A.type===15)switch(A.unit){case dB:return Math.PI*A.number/180;case EB:return Math.PI/200*A.number;case HB:return A.number;case pB:return Math.PI*2*A.number}throw new Error("Unsupported angle type")}},IB=function(e){return e.type===15&&(e.unit===dB||e.unit===EB||e.unit===HB||e.unit===pB)},vB=function(e){var A=e.filter(D).map(function(t){return t.value}).join(" ");switch(A){case"to bottom right":case"to right bottom":case"left top":case"top left":return[X,X];case"to top":case"bottom":return AA(0);case"to bottom left":case"to left bottom":case"right top":case"top right":return[X,hA];case"to right":case"left":return AA(90);case"to top left":case"to left top":case"right bottom":case"bottom right":return[hA,hA];case"to bottom":case"top":return AA(180);case"to top right":case"to right top":case"left bottom":case"bottom left":return[hA,X];case"to left":case"right":return AA(270)}return 0},AA=function(e){return Math.PI*e/180},EA={name:"color",parse:function(e,A){if(A.type===18){var t=js[A.name];if(typeof t>"u")throw new Error('Attempting to parse an unsupported color function "'+A.name+'"');return t(e,A.values)}if(A.type===5){if(A.value.length===3){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3);return dA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),1)}if(A.value.length===4){var r=A.value.substring(0,1),B=A.value.substring(1,2),n=A.value.substring(2,3),s=A.value.substring(3,4);return dA(parseInt(r+r,16),parseInt(B+B,16),parseInt(n+n,16),parseInt(s+s,16)/255)}if(A.value.length===6){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6);return dA(parseInt(r,16),parseInt(B,16),parseInt(n,16),1)}if(A.value.length===8){var r=A.value.substring(0,2),B=A.value.substring(2,4),n=A.value.substring(4,6),s=A.value.substring(6,8);return dA(parseInt(r,16),parseInt(B,16),parseInt(n,16),parseInt(s,16)/255)}}if(A.type===20){var i=wA[A.value.toUpperCase()];if(typeof i<"u")return i}return wA.TRANSPARENT}},HA=function(e){return(255&e)===0},R=function(e){var A=255&e,t=255&e>>8,r=255&e>>16,B=255&e>>24;return A<255?"rgba("+B+","+r+","+t+","+A/255+")":"rgb("+B+","+r+","+t+")"},dA=function(e,A,t,r){return(e<<24|A<<16|t<<8|Math.round(r*255)<<0)>>>0},Et=function(e,A){if(e.type===17)return e.number;if(e.type===16){var t=A===3?1:255;return A===3?e.number/100*t:Math.round(e.number/100*t)}return 0},Ht=function(e,A){var t=A.filter(PA);if(t.length===3){var r=t.map(Et),B=r[0],n=r[1],s=r[2];return dA(B,n,s,1)}if(t.length===4){var i=t.map(Et),B=i[0],n=i[1],s=i[2],a=i[3];return dA(B,n,s,a)}return 0};function ur(e,A,t){return t<0&&(t+=1),t>=1&&(t-=1),t<1/6?(A-e)*t*6+e:t<1/2?A:t<2/3?(A-e)*6*(2/3-t)+e:e}var pt=function(e,A){var t=A.filter(PA),r=t[0],B=t[1],n=t[2],s=t[3],i=(r.type===17?AA(r.number):Ar.parse(e,r))/(Math.PI*2),a=M(B)?B.number/100:0,o=M(n)?n.number/100:0,Q=typeof s<"u"&&M(s)?b(s,1):1;if(a===0)return dA(o*255,o*255,o*255,1);var g=o<=.5?o*(a+1):o+a-o*a,w=o*2-g,f=ur(w,g,i+1/3),c=ur(w,g,i),C=ur(w,g,i-1/3);return dA(f*255,c*255,C*255,Q)},js={hsl:pt,hsla:pt,rgb:Ht,rgba:Ht},se=function(e,A){return EA.parse(e,UB.create(A).parseComponentValue())},wA={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},zs={name:"background-clip",initialValue:"border-box",prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(D(t))switch(t.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},$s={name:"background-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},er=function(e,A){var t=EA.parse(e,A[0]),r=A[1];return r&&M(r)?{color:t,stop:r}:{color:t,stop:null}},It=function(e,A){var t=e[0],r=e[e.length-1];t.stop===null&&(t.stop=X),r.stop===null&&(r.stop=hA);for(var B=[],n=0,s=0;sn?B.push(a):B.push(n),n=a}else B.push(null)}for(var o=null,s=0;ss.optimumDistance)?{optimumCorner:i,optimumDistance:Q}:s},{optimumDistance:B?1/0:-1/0,optimumCorner:null}).optimumCorner},ra=function(e,A,t,r,B){var n=0,s=0;switch(e.size){case 0:e.shape===0?n=s=Math.min(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.min(Math.abs(A),Math.abs(A-r)),s=Math.min(Math.abs(t),Math.abs(t-B)));break;case 2:if(e.shape===0)n=s=Math.min(rA(A,t),rA(A,t-B),rA(A-r,t),rA(A-r,t-B));else if(e.shape===1){var i=Math.min(Math.abs(t),Math.abs(t-B))/Math.min(Math.abs(A),Math.abs(A-r)),a=vt(r,B,A,t,!0),o=a[0],Q=a[1];n=rA(o-A,(Q-t)/i),s=i*n}break;case 1:e.shape===0?n=s=Math.max(Math.abs(A),Math.abs(A-r),Math.abs(t),Math.abs(t-B)):e.shape===1&&(n=Math.max(Math.abs(A),Math.abs(A-r)),s=Math.max(Math.abs(t),Math.abs(t-B)));break;case 3:if(e.shape===0)n=s=Math.max(rA(A,t),rA(A,t-B),rA(A-r,t),rA(A-r,t-B));else if(e.shape===1){var i=Math.max(Math.abs(t),Math.abs(t-B))/Math.max(Math.abs(A),Math.abs(A-r)),g=vt(r,B,A,t,!1),o=g[0],Q=g[1];n=rA(o-A,(Q-t)/i),s=i*n}break}return Array.isArray(e.size)&&(n=b(e.size[0],r),s=e.size.length===2?b(e.size[1],B):n),[n,s]},ta=function(e,A){var t=AA(180),r=[];return sA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&s.value==="to"){t=vB(B);return}else if(IB(s)){t=Ar.parse(e,s);return}}var i=er(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Le=function(e,A){var t=AA(180),r=[];return sA(A).forEach(function(B,n){if(n===0){var s=B[0];if(s.type===20&&["top","left","right","bottom"].indexOf(s.value)!==-1){t=vB(B);return}else if(IB(s)){t=(Ar.parse(e,s)+AA(270))%AA(360);return}}var i=er(e,B);r.push(i)}),{angle:t,stops:r,type:1}},Ba=function(e,A){var t=AA(180),r=[],B=1,n=0,s=3,i=[];return sA(A).forEach(function(a,o){var Q=a[0];if(o===0){if(D(Q)&&Q.value==="linear"){B=1;return}else if(D(Q)&&Q.value==="radial"){B=2;return}}if(Q.type===18){if(Q.name==="from"){var g=EA.parse(e,Q.values[0]);r.push({stop:X,color:g})}else if(Q.name==="to"){var g=EA.parse(e,Q.values[0]);r.push({stop:hA,color:g})}else if(Q.name==="color-stop"){var w=Q.values.filter(PA);if(w.length===2){var g=EA.parse(e,w[1]),f=w[0];kA(f)&&r.push({stop:{type:16,number:f.number*100,flags:f.flags},color:g})}}}}),B===1?{angle:(t+AA(180))%AA(360),stops:r,type:B}:{size:s,shape:n,stops:r,position:i,type:B}},yB="closest-side",KB="farthest-side",mB="closest-corner",LB="farthest-corner",DB="circle",bB="ellipse",xB="cover",TB="contain",na=function(e,A){var t=0,r=3,B=[],n=[];return sA(A).forEach(function(s,i){var a=!0;if(i===0){var o=!1;a=s.reduce(function(g,w){if(o)if(D(w))switch(w.value){case"center":return n.push($r),g;case"top":case"left":return n.push(X),g;case"right":case"bottom":return n.push(hA),g}else(M(w)||pA(w))&&n.push(w);else if(D(w))switch(w.value){case DB:return t=0,!1;case bB:return t=1,!1;case"at":return o=!0,!1;case yB:return r=0,!1;case xB:case KB:return r=1,!1;case TB:case mB:return r=2,!1;case LB:return r=3,!1}else if(pA(w)||M(w))return Array.isArray(r)||(r=[]),r.push(w),!1;return g},a)}if(a){var Q=er(e,s);B.push(Q)}}),{size:r,shape:t,stops:B,position:n,type:2}},De=function(e,A){var t=0,r=3,B=[],n=[];return sA(A).forEach(function(s,i){var a=!0;if(i===0?a=s.reduce(function(Q,g){if(D(g))switch(g.value){case"center":return n.push($r),!1;case"top":case"left":return n.push(X),!1;case"right":case"bottom":return n.push(hA),!1}else if(M(g)||pA(g))return n.push(g),!1;return Q},a):i===1&&(a=s.reduce(function(Q,g){if(D(g))switch(g.value){case DB:return t=0,!1;case bB:return t=1,!1;case TB:case yB:return r=0,!1;case KB:return r=1,!1;case mB:return r=2,!1;case xB:case LB:return r=3,!1}else if(pA(g)||M(g))return Array.isArray(r)||(r=[]),r.push(g),!1;return Q},a)),a){var o=er(e,s);B.push(o)}}),{size:r,shape:t,stops:B,position:n,type:2}},sa=function(e){return e.type===1},aa=function(e){return e.type===2},At={name:"image",parse:function(e,A){if(A.type===22){var t={url:A.value,type:0};return e.cache.addImage(A.value),t}if(A.type===18){var r=SB[A.name];if(typeof r>"u")throw new Error('Attempting to parse an unsupported image function "'+A.name+'"');return r(e,A.values)}throw new Error("Unsupported image type "+A.type)}};function ia(e){return!(e.type===20&&e.value==="none")&&(e.type!==18||!!SB[e.name])}var SB={"linear-gradient":ta,"-moz-linear-gradient":Le,"-ms-linear-gradient":Le,"-o-linear-gradient":Le,"-webkit-linear-gradient":Le,"radial-gradient":na,"-moz-radial-gradient":De,"-ms-radial-gradient":De,"-o-radial-gradient":De,"-webkit-radial-gradient":De,"-webkit-gradient":Ba},oa={name:"background-image",initialValue:"none",type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value==="none"?[]:A.filter(function(r){return PA(r)&&ia(r)}).map(function(r){return At.parse(e,r)})}},Qa={name:"background-origin",initialValue:"border-box",prefix:!1,type:1,parse:function(e,A){return A.map(function(t){if(D(t))switch(t.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},ga={name:"background-position",initialValue:"0% 0%",type:1,prefix:!1,parse:function(e,A){return sA(A).map(function(t){return t.filter(M)}).map(hB)}},wa={name:"background-repeat",initialValue:"repeat",prefix:!1,type:1,parse:function(e,A){return sA(A).map(function(t){return t.filter(D).map(function(r){return r.value}).join(" ")}).map(ca)}},ca=function(e){switch(e){case"no-repeat":return 1;case"repeat-x":case"repeat no-repeat":return 2;case"repeat-y":case"no-repeat repeat":return 3;case"repeat":default:return 0}},JA;(function(e){e.AUTO="auto",e.CONTAIN="contain",e.COVER="cover"})(JA||(JA={}));var Ca={name:"background-size",initialValue:"0",prefix:!1,type:1,parse:function(e,A){return sA(A).map(function(t){return t.filter(ua)})}},ua=function(e){return D(e)||M(e)},rr=function(e){return{name:"border-"+e+"-color",initialValue:"transparent",prefix:!1,type:3,format:"color"}},la=rr("top"),fa=rr("right"),Ua=rr("bottom"),Fa=rr("left"),tr=function(e){return{name:"border-radius-"+e,initialValue:"0 0",prefix:!1,type:1,parse:function(A,t){return hB(t.filter(M))}}},ha=tr("top-left"),da=tr("top-right"),Ea=tr("bottom-right"),Ha=tr("bottom-left"),Br=function(e){return{name:"border-"+e+"-style",initialValue:"solid",prefix:!1,type:2,parse:function(A,t){switch(t){case"none":return 0;case"dashed":return 2;case"dotted":return 3;case"double":return 4}return 1}}},pa=Br("top"),Ia=Br("right"),va=Br("bottom"),ya=Br("left"),nr=function(e){return{name:"border-"+e+"-width",initialValue:"0",type:0,prefix:!1,parse:function(A,t){return Ce(t)?t.number:0}}},Ka=nr("top"),ma=nr("right"),La=nr("bottom"),Da=nr("left"),ba={name:"color",initialValue:"transparent",prefix:!1,type:3,format:"color"},xa={name:"direction",initialValue:"ltr",prefix:!1,type:2,parse:function(e,A){switch(A){case"rtl":return 1;case"ltr":default:return 0}}},Ta={name:"display",initialValue:"inline-block",prefix:!1,type:1,parse:function(e,A){return A.filter(D).reduce(function(t,r){return t|Sa(r.value)},0)}},Sa=function(e){switch(e){case"block":case"-webkit-box":return 2;case"inline":return 4;case"run-in":return 8;case"flow":return 16;case"flow-root":return 32;case"table":return 64;case"flex":case"-webkit-flex":return 128;case"grid":case"-ms-grid":return 256;case"ruby":return 512;case"subgrid":return 1024;case"list-item":return 2048;case"table-row-group":return 4096;case"table-header-group":return 8192;case"table-footer-group":return 16384;case"table-row":return 32768;case"table-cell":return 65536;case"table-column-group":return 131072;case"table-column":return 262144;case"table-caption":return 524288;case"ruby-base":return 1048576;case"ruby-text":return 2097152;case"ruby-base-container":return 4194304;case"ruby-text-container":return 8388608;case"contents":return 16777216;case"inline-block":return 33554432;case"inline-list-item":return 67108864;case"inline-table":return 134217728;case"inline-flex":return 268435456;case"inline-grid":return 536870912}return 0},Oa={name:"float",initialValue:"none",prefix:!1,type:2,parse:function(e,A){switch(A){case"left":return 1;case"right":return 2;case"inline-start":return 3;case"inline-end":return 4}return 0}},Ma={name:"letter-spacing",initialValue:"0",prefix:!1,type:0,parse:function(e,A){return A.type===20&&A.value==="normal"?0:A.type===17||A.type===15?A.number:0}},Je;(function(e){e.NORMAL="normal",e.STRICT="strict"})(Je||(Je={}));var Ga={name:"line-break",initialValue:"normal",prefix:!1,type:2,parse:function(e,A){switch(A){case"strict":return Je.STRICT;case"normal":default:return Je.NORMAL}}},Ra={name:"line-height",initialValue:"normal",prefix:!1,type:4},yt=function(e,A){return D(e)&&e.value==="normal"?1.2*A:e.type===17?A*e.number:M(e)?b(e,A):A},Va={name:"list-style-image",initialValue:"none",type:0,prefix:!1,parse:function(e,A){return A.type===20&&A.value==="none"?null:At.parse(e,A)}},Na={name:"list-style-position",initialValue:"outside",prefix:!1,type:2,parse:function(e,A){switch(A){case"inside":return 0;case"outside":default:return 1}}},_r={name:"list-style-type",initialValue:"none",prefix:!1,type:2,parse:function(e,A){switch(A){case"disc":return 0;case"circle":return 1;case"square":return 2;case"decimal":return 3;case"cjk-decimal":return 4;case"decimal-leading-zero":return 5;case"lower-roman":return 6;case"upper-roman":return 7;case"lower-greek":return 8;case"lower-alpha":return 9;case"upper-alpha":return 10;case"arabic-indic":return 11;case"armenian":return 12;case"bengali":return 13;case"cambodian":return 14;case"cjk-earthly-branch":return 15;case"cjk-heavenly-stem":return 16;case"cjk-ideographic":return 17;case"devanagari":return 18;case"ethiopic-numeric":return 19;case"georgian":return 20;case"gujarati":return 21;case"gurmukhi":return 22;case"hebrew":return 22;case"hiragana":return 23;case"hiragana-iroha":return 24;case"japanese-formal":return 25;case"japanese-informal":return 26;case"kannada":return 27;case"katakana":return 28;case"katakana-iroha":return 29;case"khmer":return 30;case"korean-hangul-formal":return 31;case"korean-hanja-formal":return 32;case"korean-hanja-informal":return 33;case"lao":return 34;case"lower-armenian":return 35;case"malayalam":return 36;case"mongolian":return 37;case"myanmar":return 38;case"oriya":return 39;case"persian":return 40;case"simp-chinese-formal":return 41;case"simp-chinese-informal":return 42;case"tamil":return 43;case"telugu":return 44;case"thai":return 45;case"tibetan":return 46;case"trad-chinese-formal":return 47;case"trad-chinese-informal":return 48;case"upper-armenian":return 49;case"disclosure-open":return 50;case"disclosure-closed":return 51;case"none":default:return-1}}},sr=function(e){return{name:"margin-"+e,initialValue:"0",prefix:!1,type:4}},Xa=sr("top"),_a=sr("right"),Ja=sr("bottom"),Pa=sr("left"),ka={name:"overflow",initialValue:"visible",prefix:!1,type:1,parse:function(e,A){return A.filter(D).map(function(t){switch(t.value){case"hidden":return 1;case"scroll":return 2;case"clip":return 3;case"auto":return 4;case"visible":default:return 0}})}},Ya={name:"overflow-wrap",initialValue:"normal",prefix:!1,type:2,parse:function(e,A){switch(A){case"break-word":return"break-word";case"normal":default:return"normal"}}},ar=function(e){return{name:"padding-"+e,initialValue:"0",prefix:!1,type:3,format:"length-percentage"}},Wa=ar("top"),Za=ar("right"),qa=ar("bottom"),ja=ar("left"),za={name:"text-align",initialValue:"left",prefix:!1,type:2,parse:function(e,A){switch(A){case"right":return 2;case"center":case"justify":return 1;case"left":default:return 0}}},$a={name:"position",initialValue:"static",prefix:!1,type:2,parse:function(e,A){switch(A){case"relative":return 1;case"absolute":return 2;case"fixed":return 3;case"sticky":return 4}return 0}},Ai={name:"text-shadow",initialValue:"none",type:1,prefix:!1,parse:function(e,A){return A.length===1&&Xr(A[0],"none")?[]:sA(A).map(function(t){for(var r={color:wA.TRANSPARENT,offsetX:X,offsetY:X,blur:X},B=0,n=0;n"u")throw new Error('Attempting to parse an unsupported transform function "'+A.name+'"');return t(A.values)}return null}},ti=function(e){var A=e.filter(function(t){return t.type===17}).map(function(t){return t.number});return A.length===6?A:null},Bi=function(e){var A=e.filter(function(a){return a.type===17}).map(function(a){return a.number}),t=A[0],r=A[1];A[2],A[3];var B=A[4],n=A[5];A[6],A[7],A[8],A[9],A[10],A[11];var s=A[12],i=A[13];return A[14],A[15],A.length===16?[t,r,B,n,s,i]:null},ni={matrix:ti,matrix3d:Bi},Kt={type:16,number:50,flags:ce},si=[Kt,Kt],ai={name:"transform-origin",initialValue:"50% 50%",prefix:!0,type:1,parse:function(e,A){var t=A.filter(M);return t.length!==2?si:[t[0],t[1]]}},ii={name:"visible",initialValue:"none",prefix:!1,type:2,parse:function(e,A){switch(A){case"hidden":return 1;case"collapse":return 2;case"visible":default:return 0}}},ae;(function(e){e.NORMAL="normal",e.BREAK_ALL="break-all",e.KEEP_ALL="keep-all"})(ae||(ae={}));var oi={name:"word-break",initialValue:"normal",prefix:!1,type:2,parse:function(e,A){switch(A){case"break-all":return ae.BREAK_ALL;case"keep-all":return ae.KEEP_ALL;case"normal":default:return ae.NORMAL}}},Qi={name:"z-index",initialValue:"auto",prefix:!1,type:0,parse:function(e,A){if(A.type===20)return{auto:!0,order:0};if(kA(A))return{auto:!1,order:A.number};throw new Error("Invalid z-index number parsed")}},OB={name:"time",parse:function(e,A){if(A.type===15)switch(A.unit.toLowerCase()){case"s":return 1e3*A.number;case"ms":return A.number}throw new Error("Unsupported time type")}},gi={name:"opacity",initialValue:"1",type:0,prefix:!1,parse:function(e,A){return kA(A)?A.number:1}},wi={name:"text-decoration-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},ci={name:"text-decoration-line",initialValue:"none",prefix:!1,type:1,parse:function(e,A){return A.filter(D).map(function(t){switch(t.value){case"underline":return 1;case"overline":return 2;case"line-through":return 3;case"none":return 4}return 0}).filter(function(t){return t!==0})}},Ci={name:"font-family",initialValue:"",prefix:!1,type:1,parse:function(e,A){var t=[],r=[];return A.forEach(function(B){switch(B.type){case 20:case 0:t.push(B.value);break;case 17:t.push(B.number.toString());break;case 4:r.push(t.join(" ")),t.length=0;break}}),t.length&&r.push(t.join(" ")),r.map(function(B){return B.indexOf(" ")===-1?B:"'"+B+"'"})}},ui={name:"font-size",initialValue:"0",prefix:!1,type:3,format:"length"},li={name:"font-weight",initialValue:"normal",type:0,prefix:!1,parse:function(e,A){if(kA(A))return A.number;if(D(A))switch(A.value){case"bold":return 700;case"normal":default:return 400}return 400}},fi={name:"font-variant",initialValue:"none",type:1,prefix:!1,parse:function(e,A){return A.filter(D).map(function(t){return t.value})}},Ui={name:"font-style",initialValue:"normal",prefix:!1,type:2,parse:function(e,A){switch(A){case"oblique":return"oblique";case"italic":return"italic";case"normal":default:return"normal"}}},G=function(e,A){return(e&A)!==0},Fi={name:"content",initialValue:"none",type:1,prefix:!1,parse:function(e,A){if(A.length===0)return[];var t=A[0];return t.type===20&&t.value==="none"?[]:A}},hi={name:"counter-increment",initialValue:"none",prefix:!0,type:1,parse:function(e,A){if(A.length===0)return null;var t=A[0];if(t.type===20&&t.value==="none")return null;for(var r=[],B=A.filter(FB),n=0;n1?1:0],this.overflowWrap=U(A,Ya,t.overflowWrap),this.paddingTop=U(A,Wa,t.paddingTop),this.paddingRight=U(A,Za,t.paddingRight),this.paddingBottom=U(A,qa,t.paddingBottom),this.paddingLeft=U(A,ja,t.paddingLeft),this.paintOrder=U(A,Ii,t.paintOrder),this.position=U(A,$a,t.position),this.textAlign=U(A,za,t.textAlign),this.textDecorationColor=U(A,wi,(r=t.textDecorationColor)!==null&&r!==void 0?r:t.color),this.textDecorationLine=U(A,ci,(B=t.textDecorationLine)!==null&&B!==void 0?B:t.textDecoration),this.textShadow=U(A,Ai,t.textShadow),this.textTransform=U(A,ei,t.textTransform),this.transform=U(A,ri,t.transform),this.transformOrigin=U(A,ai,t.transformOrigin),this.visibility=U(A,ii,t.visibility),this.webkitTextStrokeColor=U(A,vi,t.webkitTextStrokeColor),this.webkitTextStrokeWidth=U(A,yi,t.webkitTextStrokeWidth),this.wordBreak=U(A,oi,t.wordBreak),this.zIndex=U(A,Qi,t.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===0},e.prototype.isTransparent=function(){return HA(this.backgroundColor)},e.prototype.isTransformed=function(){return this.transform!==null},e.prototype.isPositioned=function(){return this.position!==0},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==0},e.prototype.isInlineLevel=function(){return G(this.display,4)||G(this.display,33554432)||G(this.display,268435456)||G(this.display,536870912)||G(this.display,67108864)||G(this.display,134217728)},e})(),mi=(function(){function e(A,t){this.content=U(A,Fi,t.content),this.quotes=U(A,Hi,t.quotes)}return e})(),Lt=(function(){function e(A,t){this.counterIncrement=U(A,hi,t.counterIncrement),this.counterReset=U(A,di,t.counterReset)}return e})(),U=function(e,A,t){var r=new fB,B=t!==null&&typeof t<"u"?t.toString():A.initialValue;r.write(B);var n=new UB(r.read());switch(A.type){case 2:var s=n.parseComponentValue();return A.parse(e,D(s)?s.value:A.initialValue);case 0:return A.parse(e,n.parseComponentValue());case 1:return A.parse(e,n.parseComponentValues());case 4:return n.parseComponentValue();case 3:switch(A.format){case"angle":return Ar.parse(e,n.parseComponentValue());case"color":return EA.parse(e,n.parseComponentValue());case"image":return At.parse(e,n.parseComponentValue());case"length":var i=n.parseComponentValue();return pA(i)?i:X;case"length-percentage":var a=n.parseComponentValue();return M(a)?a:X;case"time":return OB.parse(e,n.parseComponentValue())}break}},Li="data-html2canvas-debug",Di=function(e){var A=e.getAttribute(Li);switch(A){case"all":return 1;case"clone":return 2;case"parse":return 3;case"render":return 4;default:return 0}},Jr=function(e,A){var t=Di(e);return t===1||A===t},aA=(function(){function e(A,t){if(this.context=A,this.textNodes=[],this.elements=[],this.flags=0,Jr(t,3))debugger;this.styles=new Ki(A,window.getComputedStyle(t,null)),Yr(t)&&(this.styles.animationDuration.some(function(r){return r>0})&&(t.style.animationDuration="0s"),this.styles.transform!==null&&(t.style.transform="none")),this.bounds=ze(this.context,t),Jr(t,4)&&(this.flags|=16)}return e})(),bi="AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=",Dt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",te=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(var be=0;be>4,Q[B++]=(s&15)<<4|i>>2,Q[B++]=(i&3)<<6|a&63;return o},Ti=function(e){for(var A=e.length,t=[],r=0;r>xA,Mi=1<>xA,Ri=MB+Gi,Vi=Ri,Ni=32,Xi=Vi+Ni,_i=65536>>et,Ji=1<=0){if(A<55296||A>56319&&A<=65535)return t=this.index[A>>xA],t=(t<>xA)],t=(t<>et),t=this.index[t],t+=A>>xA&Pi,t=this.index[t],t=(t<"u"?[]:new Uint8Array(256);for(var xe=0;xe=55296&&B<=56319&&t>10)+55296,s%1024+56320)),(B+1===t||r.length>16384)&&(n+=String.fromCharCode.apply(String,r),r.length=0)}return n},Ao=Yi(bi),z="×",Hr="÷",eo=function(e){return Ao.get(e)},ro=function(e,A,t){var r=t-2,B=A[r],n=A[t-1],s=A[t];if(n===Ur&&s===Fr)return z;if(n===Ur||n===Fr||n===Tt||s===Ur||s===Fr||s===Tt)return Hr;if(n===Ot&&[Ot,hr,Mt,Gt].indexOf(s)!==-1||(n===Mt||n===hr)&&(s===hr||s===dr)||(n===Gt||n===dr)&&s===dr||s===Rt||s===St||s===ji||n===qi)return z;if(n===Rt&&s===Vt){for(;B===St;)B=A[--r];if(B===Vt)return z}if(n===Er&&s===Er){for(var i=0;B===Er;)i++,B=A[--r];if(i%2===0)return z}return Hr},to=function(e){var A=zi(e),t=A.length,r=0,B=0,n=A.map(eo);return{next:function(){if(r>=t)return{done:!0,value:null};for(var s=z;rs.x||Q.y>s.y;return s=Q,o===0?!0:g});return e.body.removeChild(A),i},ao=function(){return typeof new Image().crossOrigin<"u"},io=function(){return typeof new XMLHttpRequest().responseType=="string"},oo=function(e){var A=new Image,t=e.createElement("canvas"),r=t.getContext("2d");if(!r)return!1;A.src="data:image/svg+xml,";try{r.drawImage(A,0,0),t.toDataURL()}catch{return!1}return!0},Nt=function(e){return e[0]===0&&e[1]===255&&e[2]===0&&e[3]===255},Qo=function(e){var A=e.createElement("canvas"),t=100;A.width=t,A.height=t;var r=A.getContext("2d");if(!r)return Promise.reject(!1);r.fillStyle="rgb(0, 255, 0)",r.fillRect(0,0,t,t);var B=new Image,n=A.toDataURL();B.src=n;var s=Pr(t,t,0,0,B);return r.fillStyle="red",r.fillRect(0,0,t,t),Xt(s).then(function(i){r.drawImage(i,0,0);var a=r.getImageData(0,0,t,t).data;r.fillStyle="red",r.fillRect(0,0,t,t);var o=e.createElement("div");return o.style.backgroundImage="url("+n+")",o.style.height=t+"px",Nt(a)?Xt(Pr(t,t,0,0,o)):Promise.reject(!1)}).then(function(i){return r.drawImage(i,0,0),Nt(r.getImageData(0,0,t,t).data)}).catch(function(){return!1})},Pr=function(e,A,t,r,B){var n="http://www.w3.org/2000/svg",s=document.createElementNS(n,"svg"),i=document.createElementNS(n,"foreignObject");return s.setAttributeNS(null,"width",e.toString()),s.setAttributeNS(null,"height",A.toString()),i.setAttributeNS(null,"width","100%"),i.setAttributeNS(null,"height","100%"),i.setAttributeNS(null,"x",t.toString()),i.setAttributeNS(null,"y",r.toString()),i.setAttributeNS(null,"externalResourcesRequired","true"),s.appendChild(i),i.appendChild(B),s},Xt=function(e){return new Promise(function(A,t){var r=new Image;r.onload=function(){return A(r)},r.onerror=t,r.src="data:image/svg+xml;charset=utf-8,"+encodeURIComponent(new XMLSerializer().serializeToString(e))})},N={get SUPPORT_RANGE_BOUNDS(){var e=no(document);return Object.defineProperty(N,"SUPPORT_RANGE_BOUNDS",{value:e}),e},get SUPPORT_WORD_BREAKING(){var e=N.SUPPORT_RANGE_BOUNDS&&so(document);return Object.defineProperty(N,"SUPPORT_WORD_BREAKING",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=oo(document);return Object.defineProperty(N,"SUPPORT_SVG_DRAWING",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=typeof Array.from=="function"&&typeof window.fetch=="function"?Qo(document):Promise.resolve(!1);return Object.defineProperty(N,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=ao();return Object.defineProperty(N,"SUPPORT_CORS_IMAGES",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=io();return Object.defineProperty(N,"SUPPORT_RESPONSE_TYPE",{value:e}),e},get SUPPORT_CORS_XHR(){var e="withCredentials"in new XMLHttpRequest;return Object.defineProperty(N,"SUPPORT_CORS_XHR",{value:e}),e},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var e=!!(typeof Intl<"u"&&Intl.Segmenter);return Object.defineProperty(N,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:e}),e}},ie=(function(){function e(A,t){this.text=A,this.bounds=t}return e})(),go=function(e,A,t,r){var B=Co(A,t),n=[],s=0;return B.forEach(function(i){if(t.textDecorationLine.length||i.trim().length>0)if(N.SUPPORT_RANGE_BOUNDS){var a=_t(r,s,i.length).getClientRects();if(a.length>1){var o=rt(i),Q=0;o.forEach(function(w){n.push(new ie(w,cA.fromDOMRectList(e,_t(r,Q+s,w.length).getClientRects()))),Q+=w.length})}else n.push(new ie(i,cA.fromDOMRectList(e,a)))}else{var g=r.splitText(i.length);n.push(new ie(i,wo(e,r))),r=g}else N.SUPPORT_RANGE_BOUNDS||(r=r.splitText(i.length));s+=i.length}),n},wo=function(e,A){var t=A.ownerDocument;if(t){var r=t.createElement("html2canvaswrapper");r.appendChild(A.cloneNode(!0));var B=A.parentNode;if(B){B.replaceChild(r,A);var n=ze(e,r);return r.firstChild&&B.replaceChild(r.firstChild,r),n}}return cA.EMPTY},_t=function(e,A,t){var r=e.ownerDocument;if(!r)throw new Error("Node has no owner document");var B=r.createRange();return B.setStart(e,A),B.setEnd(e,A+t),B},rt=function(e){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var A=new Intl.Segmenter(void 0,{granularity:"grapheme"});return Array.from(A.segment(e)).map(function(t){return t.segment})}return Bo(e)},co=function(e,A){if(N.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:"word"});return Array.from(t.segment(e)).map(function(r){return r.segment})}return lo(e,A)},Co=function(e,A){return A.letterSpacing!==0?rt(e):co(e,A)},uo=[32,160,4961,65792,65793,4153,4241],lo=function(e,A){for(var t=_n(e,{lineBreak:A.lineBreak,wordBreak:A.overflowWrap==="break-word"?"break-word":A.wordBreak}),r=[],B,n=function(){if(B.value){var s=B.value.slice(),i=$e(s),a="";i.forEach(function(o){uo.indexOf(o)===-1?a+=S(o):(a.length&&r.push(a),r.push(S(o)),a="")}),a.length&&r.push(a)}};!(B=t.next()).done;)n();return r},fo=(function(){function e(A,t,r){this.text=Uo(t.data,r.textTransform),this.textBounds=go(A,this.text,r,t)}return e})(),Uo=function(e,A){switch(A){case 1:return e.toLowerCase();case 3:return e.replace(Fo,ho);case 2:return e.toUpperCase();default:return e}},Fo=/(^|\s|:|-|\(|\))([a-z])/g,ho=function(e,A,t){return e.length>0?A+t.toUpperCase():e},GB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.src=r.currentSrc||r.src,B.intrinsicWidth=r.naturalWidth,B.intrinsicHeight=r.naturalHeight,B.context.cache.addImage(B.src),B}return A})(aA),RB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.canvas=r,B.intrinsicWidth=r.width,B.intrinsicHeight=r.height,B}return A})(aA),VB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this,n=new XMLSerializer,s=ze(t,r);return r.setAttribute("width",s.width+"px"),r.setAttribute("height",s.height+"px"),B.svg="data:image/svg+xml,"+encodeURIComponent(n.serializeToString(r)),B.intrinsicWidth=r.width.baseVal.value,B.intrinsicHeight=r.height.baseVal.value,B.context.cache.addImage(B.svg),B}return A})(aA),NB=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.value=r.value,B}return A})(aA),kr=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B.start=r.start,B.reversed=typeof r.reversed=="boolean"&&r.reversed===!0,B}return A})(aA),Eo=[{type:15,flags:0,unit:"px",number:3}],Ho=[{type:16,flags:0,number:50}],po=function(e){return e.width>e.height?new cA(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width0)t.textNodes.push(new fo(e,B,t.styles));else if(_A(B))if(jB(B)&&B.assignedNodes)B.assignedNodes().forEach(function(i){return Ve(e,i,t,r)});else{var s=PB(e,B);s.styles.isVisible()&&(Ko(B,s,r)?s.flags|=4:mo(s.styles)&&(s.flags|=2),yo.indexOf(B.tagName)!==-1&&(s.flags|=8),t.elements.push(s),B.slot,B.shadowRoot?Ve(e,B.shadowRoot,s,r):!Ye(B)&&!WB(B)&&!We(B)&&Ve(e,B,s,r))}},PB=function(e,A){return Wr(A)?new GB(e,A):ZB(A)?new RB(e,A):WB(A)?new VB(e,A):Lo(A)?new NB(e,A):Do(A)?new kr(e,A):bo(A)?new tt(e,A):We(A)?new XB(e,A):Ye(A)?new _B(e,A):qB(A)?new JB(e,A):new aA(e,A)},kB=function(e,A){var t=PB(e,A);return t.flags|=4,Ve(e,A,t,t),t},Ko=function(e,A,t){return A.styles.isPositionedWithZIndex()||A.styles.opacity<1||A.styles.isTransformed()||Bt(e)&&t.styles.isTransparent()},mo=function(e){return e.isPositioned()||e.isFloating()},YB=function(e){return e.nodeType===Node.TEXT_NODE},_A=function(e){return e.nodeType===Node.ELEMENT_NODE},Yr=function(e){return _A(e)&&typeof e.style<"u"&&!Ne(e)},Ne=function(e){return typeof e.className=="object"},Lo=function(e){return e.tagName==="LI"},Do=function(e){return e.tagName==="OL"},bo=function(e){return e.tagName==="INPUT"},xo=function(e){return e.tagName==="HTML"},WB=function(e){return e.tagName==="svg"},Bt=function(e){return e.tagName==="BODY"},ZB=function(e){return e.tagName==="CANVAS"},Pt=function(e){return e.tagName==="VIDEO"},Wr=function(e){return e.tagName==="IMG"},qB=function(e){return e.tagName==="IFRAME"},kt=function(e){return e.tagName==="STYLE"},To=function(e){return e.tagName==="SCRIPT"},Ye=function(e){return e.tagName==="TEXTAREA"},We=function(e){return e.tagName==="SELECT"},jB=function(e){return e.tagName==="SLOT"},Yt=function(e){return e.tagName.indexOf("-")>0},So=(function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(A){var t=this.counters[A];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(A){var t=this.counters[A];return t||[]},e.prototype.pop=function(A){var t=this;A.forEach(function(r){return t.counters[r].pop()})},e.prototype.parse=function(A){var t=this,r=A.counterIncrement,B=A.counterReset,n=!0;r!==null&&r.forEach(function(i){var a=t.counters[i.counter];a&&i.increment!==0&&(n=!1,a.length||a.push(1),a[Math.max(0,a.length-1)]+=i.increment)});var s=[];return n&&B.forEach(function(i){var a=t.counters[i.counter];s.push(i.counter),a||(a=t.counters[i.counter]=[]),a.push(i.reset)}),s},e})(),Wt={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]},Zt={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["Ք","Փ","Ւ","Ց","Ր","Տ","Վ","Ս","Ռ","Ջ","Պ","Չ","Ո","Շ","Ն","Յ","Մ","Ճ","Ղ","Ձ","Հ","Կ","Ծ","Խ","Լ","Ի","Ժ","Թ","Ը","Է","Զ","Ե","Դ","Գ","Բ","Ա"]},Oo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:["י׳","ט׳","ח׳","ז׳","ו׳","ה׳","ד׳","ג׳","ב׳","א׳","ת","ש","ר","ק","צ","פ","ע","ס","נ","מ","ל","כ","יט","יח","יז","טז","טו","י","ט","ח","ז","ו","ה","ד","ג","ב","א"]},Mo={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["ჵ","ჰ","ჯ","ჴ","ხ","ჭ","წ","ძ","ც","ჩ","შ","ყ","ღ","ქ","ფ","ჳ","ტ","ს","რ","ჟ","პ","ო","ჲ","ნ","მ","ლ","კ","ი","თ","ჱ","ზ","ვ","ე","დ","გ","ბ","ა"]},GA=function(e,A,t,r,B,n){return et?we(e,B,n.length>0):r.integers.reduce(function(s,i,a){for(;e>=i;)e-=i,s+=r.values[a];return s},"")+n},zB=function(e,A,t,r){var B="";do t||e--,B=r(e)+B,e/=A;while(e*A>=A);return B},T=function(e,A,t,r,B){var n=t-A+1;return(e<0?"-":"")+(zB(Math.abs(e),n,r,function(s){return S(Math.floor(s%n)+A)})+B)},mA=function(e,A,t){t===void 0&&(t=". ");var r=A.length;return zB(Math.abs(e),r,!1,function(B){return A[Math.floor(B%r)]})+t},NA=1,lA=2,fA=4,Be=8,gA=function(e,A,t,r,B,n){if(e<-9999||e>9999)return we(e,4,B.length>0);var s=Math.abs(e),i=B;if(s===0)return A[0]+i;for(var a=0;s>0&&a<=4;a++){var o=s%10;o===0&&G(n,NA)&&i!==""?i=A[o]+i:o>1||o===1&&a===0||o===1&&a===1&&G(n,lA)||o===1&&a===1&&G(n,fA)&&e>100||o===1&&a>1&&G(n,Be)?i=A[o]+(a>0?t[a-1]:"")+i:o===1&&a>0&&(i=t[a-1]+i),s=Math.floor(s/10)}return(e<0?r:"")+i},qt="十百千萬",jt="拾佰仟萬",zt="マイナス",pr="마이너스",we=function(e,A,t){var r=t?". ":"",B=t?"、":"",n=t?", ":"",s=t?" ":"";switch(A){case 0:return"•"+s;case 1:return"◦"+s;case 2:return"◾"+s;case 5:var i=T(e,48,57,!0,r);return i.length<4?"0"+i:i;case 4:return mA(e,"〇一二三四五六七八九",B);case 6:return GA(e,1,3999,Wt,3,r).toLowerCase();case 7:return GA(e,1,3999,Wt,3,r);case 8:return T(e,945,969,!1,r);case 9:return T(e,97,122,!1,r);case 10:return T(e,65,90,!1,r);case 11:return T(e,1632,1641,!0,r);case 12:case 49:return GA(e,1,9999,Zt,3,r);case 35:return GA(e,1,9999,Zt,3,r).toLowerCase();case 13:return T(e,2534,2543,!0,r);case 14:case 30:return T(e,6112,6121,!0,r);case 15:return mA(e,"子丑寅卯辰巳午未申酉戌亥",B);case 16:return mA(e,"甲乙丙丁戊己庚辛壬癸",B);case 17:case 48:return gA(e,"零一二三四五六七八九",qt,"負",B,lA|fA|Be);case 47:return gA(e,"零壹貳參肆伍陸柒捌玖",jt,"負",B,NA|lA|fA|Be);case 42:return gA(e,"零一二三四五六七八九",qt,"负",B,lA|fA|Be);case 41:return gA(e,"零壹贰叁肆伍陆柒捌玖",jt,"负",B,NA|lA|fA|Be);case 26:return gA(e,"〇一二三四五六七八九","十百千万",zt,B,0);case 25:return gA(e,"零壱弐参四伍六七八九","拾百千万",zt,B,NA|lA|fA);case 31:return gA(e,"영일이삼사오육칠팔구","십백천만",pr,n,NA|lA|fA);case 33:return gA(e,"零一二三四五六七八九","十百千萬",pr,n,0);case 32:return gA(e,"零壹貳參四五六七八九","拾百千",pr,n,NA|lA|fA);case 18:return T(e,2406,2415,!0,r);case 20:return GA(e,1,19999,Mo,3,r);case 21:return T(e,2790,2799,!0,r);case 22:return T(e,2662,2671,!0,r);case 22:return GA(e,1,10999,Oo,3,r);case 23:return mA(e,"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん");case 24:return mA(e,"いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす");case 27:return T(e,3302,3311,!0,r);case 28:return mA(e,"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン",B);case 29:return mA(e,"イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス",B);case 34:return T(e,3792,3801,!0,r);case 37:return T(e,6160,6169,!0,r);case 38:return T(e,4160,4169,!0,r);case 39:return T(e,2918,2927,!0,r);case 40:return T(e,1776,1785,!0,r);case 43:return T(e,3046,3055,!0,r);case 44:return T(e,3174,3183,!0,r);case 45:return T(e,3664,3673,!0,r);case 46:return T(e,3872,3881,!0,r);case 3:default:return T(e,48,57,!0,r)}},$B="data-html2canvas-ignore",$t=(function(){function e(A,t,r){if(this.context=A,this.options=r,this.scrolledElements=[],this.referenceElement=t,this.counters=new So,this.quoteDepth=0,!t.ownerDocument)throw new Error("Cloned element does not have an owner document");this.documentElement=this.cloneNode(t.ownerDocument.documentElement,!1)}return e.prototype.toIFrame=function(A,t){var r=this,B=Go(A,t);if(!B.contentWindow)return Promise.reject("Unable to find iframe window");var n=A.defaultView.pageXOffset,s=A.defaultView.pageYOffset,i=B.contentWindow,a=i.document,o=No(B).then(function(){return P(r,void 0,void 0,function(){var Q,g;return _(this,function(w){switch(w.label){case 0:return this.scrolledElements.forEach(Po),i&&(i.scrollTo(t.left,t.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(i.scrollY!==t.top||i.scrollX!==t.left)&&(this.context.logger.warn("Unable to restore scroll position for cloned document"),this.context.windowBounds=this.context.windowBounds.add(i.scrollX-t.left,i.scrollY-t.top,0,0))),Q=this.options.onclone,g=this.clonedReferenceElement,typeof g>"u"?[2,Promise.reject("Error finding the "+this.referenceElement.nodeName+" in the cloned document")]:a.fonts&&a.fonts.ready?[4,a.fonts.ready]:[3,2];case 1:w.sent(),w.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,Vo(a)]:[3,4];case 3:w.sent(),w.label=4;case 4:return typeof Q=="function"?[2,Promise.resolve().then(function(){return Q(a,g)}).then(function(){return B})]:[2,B]}})})});return a.open(),a.write(_o(document.doctype)+""),Jo(this.referenceElement.ownerDocument,n,s),a.replaceChild(a.adoptNode(this.documentElement),a.documentElement),a.close(),o},e.prototype.createElementClone=function(A){if(Jr(A,2))debugger;if(ZB(A))return this.createCanvasClone(A);if(Pt(A))return this.createVideoClone(A);if(kt(A))return this.createStyleClone(A);var t=A.cloneNode(!1);return Wr(t)&&(Wr(A)&&A.currentSrc&&A.currentSrc!==A.src&&(t.src=A.currentSrc,t.srcset=""),t.loading==="lazy"&&(t.loading="eager")),Yt(t)?this.createCustomElementClone(t):t},e.prototype.createCustomElementClone=function(A){var t=document.createElement("html2canvascustomelement");return Ir(A.style,t),t},e.prototype.createStyleClone=function(A){try{var t=A.sheet;if(t&&t.cssRules){var r=[].slice.call(t.cssRules,0).reduce(function(n,s){return s&&typeof s.cssText=="string"?n+s.cssText:n},""),B=A.cloneNode(!1);return B.textContent=r,B}}catch(n){if(this.context.logger.error("Unable to access cssRules property",n),n.name!=="SecurityError")throw n}return A.cloneNode(!1)},e.prototype.createCanvasClone=function(A){var t;if(this.options.inlineImages&&A.ownerDocument){var r=A.ownerDocument.createElement("img");try{return r.src=A.toDataURL(),r}catch{this.context.logger.info("Unable to inline canvas contents, canvas is tainted",A)}}var B=A.cloneNode(!1);try{B.width=A.width,B.height=A.height;var n=A.getContext("2d"),s=B.getContext("2d");if(s)if(!this.options.allowTaint&&n)s.putImageData(n.getImageData(0,0,A.width,A.height),0,0);else{var i=(t=A.getContext("webgl2"))!==null&&t!==void 0?t:A.getContext("webgl");if(i){var a=i.getContextAttributes();(a==null?void 0:a.preserveDrawingBuffer)===!1&&this.context.logger.warn("Unable to clone WebGL context as it has preserveDrawingBuffer=false",A)}s.drawImage(A,0,0)}return B}catch{this.context.logger.info("Unable to clone canvas as it is tainted",A)}return B},e.prototype.createVideoClone=function(A){var t=A.ownerDocument.createElement("canvas");t.width=A.offsetWidth,t.height=A.offsetHeight;var r=t.getContext("2d");try{return r&&(r.drawImage(A,0,0,t.width,t.height),this.options.allowTaint||r.getImageData(0,0,t.width,t.height)),t}catch{this.context.logger.info("Unable to clone video as it is tainted",A)}var B=A.ownerDocument.createElement("canvas");return B.width=A.offsetWidth,B.height=A.offsetHeight,B},e.prototype.appendChildNode=function(A,t,r){(!_A(t)||!To(t)&&!t.hasAttribute($B)&&(typeof this.options.ignoreElements!="function"||!this.options.ignoreElements(t)))&&(!this.options.copyStyles||!_A(t)||!kt(t))&&A.appendChild(this.cloneNode(t,r))},e.prototype.cloneChildNodes=function(A,t,r){for(var B=this,n=A.shadowRoot?A.shadowRoot.firstChild:A.firstChild;n;n=n.nextSibling)if(_A(n)&&jB(n)&&typeof n.assignedNodes=="function"){var s=n.assignedNodes();s.length&&s.forEach(function(i){return B.appendChildNode(t,i,r)})}else this.appendChildNode(t,n,r)},e.prototype.cloneNode=function(A,t){if(YB(A))return document.createTextNode(A.data);if(!A.ownerDocument)return A.cloneNode(!1);var r=A.ownerDocument.defaultView;if(r&&_A(A)&&(Yr(A)||Ne(A))){var B=this.createElementClone(A);B.style.transitionProperty="none";var n=r.getComputedStyle(A),s=r.getComputedStyle(A,":before"),i=r.getComputedStyle(A,":after");this.referenceElement===A&&Yr(B)&&(this.clonedReferenceElement=B),Bt(B)&&Wo(B);var a=this.counters.parse(new Lt(this.context,n)),o=this.resolvePseudoContent(A,B,s,oe.BEFORE);Yt(A)&&(t=!0),Pt(A)||this.cloneChildNodes(A,B,t),o&&B.insertBefore(o,B.firstChild);var Q=this.resolvePseudoContent(A,B,i,oe.AFTER);return Q&&B.appendChild(Q),this.counters.pop(a),(n&&(this.options.copyStyles||Ne(A))&&!qB(A)||t)&&Ir(n,B),(A.scrollTop!==0||A.scrollLeft!==0)&&this.scrolledElements.push([B,A.scrollLeft,A.scrollTop]),(Ye(A)||We(A))&&(Ye(B)||We(B))&&(B.value=A.value),B}return A.cloneNode(!1)},e.prototype.resolvePseudoContent=function(A,t,r,B){var n=this;if(r){var s=r.content,i=t.ownerDocument;if(!(!i||!s||s==="none"||s==="-moz-alt-content"||r.display==="none")){this.counters.parse(new Lt(this.context,r));var a=new mi(this.context,r),o=i.createElement("html2canvaspseudoelement");Ir(r,o),a.content.forEach(function(g){if(g.type===0)o.appendChild(i.createTextNode(g.value));else if(g.type===22){var w=i.createElement("img");w.src=g.value,w.style.opacity="1",o.appendChild(w)}else if(g.type===18){if(g.name==="attr"){var f=g.values.filter(D);f.length&&o.appendChild(i.createTextNode(A.getAttribute(f[0].value)||""))}else if(g.name==="counter"){var c=g.values.filter(PA),C=c[0],H=c[1];if(C&&D(C)){var h=n.counters.getCounterValue(C.value),F=H&&D(H)?_r.parse(n.context,H.value):3;o.appendChild(i.createTextNode(we(h,F,!1)))}}else if(g.name==="counters"){var K=g.values.filter(PA),C=K[0],p=K[1],H=K[2];if(C&&D(C)){var d=n.counters.getCounterValues(C.value),l=H&&D(H)?_r.parse(n.context,H.value):3,v=p&&p.type===0?p.value:"",y=d.map(function(k){return we(k,l,!1)}).join(v);o.appendChild(i.createTextNode(y))}}}else if(g.type===20)switch(g.value){case"open-quote":o.appendChild(i.createTextNode(mt(a.quotes,n.quoteDepth++,!0)));break;case"close-quote":o.appendChild(i.createTextNode(mt(a.quotes,--n.quoteDepth,!1)));break;default:o.appendChild(i.createTextNode(g.value))}}),o.className=Zr+" "+qr;var Q=B===oe.BEFORE?" "+Zr:" "+qr;return Ne(t)?t.className.baseValue+=Q:t.className+=Q,o}}},e.destroy=function(A){return A.parentNode?(A.parentNode.removeChild(A),!0):!1},e})(),oe;(function(e){e[e.BEFORE=0]="BEFORE",e[e.AFTER=1]="AFTER"})(oe||(oe={}));var Go=function(e,A){var t=e.createElement("iframe");return t.className="html2canvas-container",t.style.visibility="hidden",t.style.position="fixed",t.style.left="-10000px",t.style.top="0px",t.style.border="0",t.width=A.width.toString(),t.height=A.height.toString(),t.scrolling="no",t.setAttribute($B,"true"),e.body.appendChild(t),t},Ro=function(e){return new Promise(function(A){if(e.complete){A();return}if(!e.src){A();return}e.onload=A,e.onerror=A})},Vo=function(e){return Promise.all([].slice.call(e.images,0).map(Ro))},No=function(e){return new Promise(function(A,t){var r=e.contentWindow;if(!r)return t("No window assigned for iframe");var B=r.document;r.onload=e.onload=function(){r.onload=e.onload=null;var n=setInterval(function(){B.body.childNodes.length>0&&B.readyState==="complete"&&(clearInterval(n),A(e))},50)}})},Xo=["all","d","content"],Ir=function(e,A){for(var t=e.length-1;t>=0;t--){var r=e.item(t);Xo.indexOf(r)===-1&&A.style.setProperty(r,e.getPropertyValue(r))}return A},_o=function(e){var A="";return e&&(A+=""),A},Jo=function(e,A,t){e&&e.defaultView&&(A!==e.defaultView.pageXOffset||t!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(A,t)},Po=function(e){var A=e[0],t=e[1],r=e[2];A.scrollLeft=t,A.scrollTop=r},ko=":before",Yo=":after",Zr="___html2canvas___pseudoelement_before",qr="___html2canvas___pseudoelement_after",AB=`{ + content: "" !important; + display: none !important; +}`,Wo=function(e){Zo(e,"."+Zr+ko+AB+` + .`+qr+Yo+AB)},Zo=function(e,A){var t=e.ownerDocument;if(t){var r=t.createElement("style");r.textContent=A,e.appendChild(r)}},An=(function(){function e(){}return e.getOrigin=function(A){var t=e._link;return t?(t.href=A,t.href=t.href,t.protocol+t.hostname+t.port):"about:blank"},e.isSameOrigin=function(A){return e.getOrigin(A)===e._origin},e.setContext=function(A){e._link=A.document.createElement("a"),e._origin=e.getOrigin(A.location.href)},e._origin="about:blank",e})(),qo=(function(){function e(A,t){this.context=A,this._options=t,this._cache={}}return e.prototype.addImage=function(A){var t=Promise.resolve();return this.has(A)||(yr(A)||AQ(A))&&(this._cache[A]=this.loadImage(A)).catch(function(){}),t},e.prototype.match=function(A){return this._cache[A]},e.prototype.loadImage=function(A){return P(this,void 0,void 0,function(){var t,r,B,n,s=this;return _(this,function(i){switch(i.label){case 0:return t=An.isSameOrigin(A),r=!vr(A)&&this._options.useCORS===!0&&N.SUPPORT_CORS_IMAGES&&!t,B=!vr(A)&&!t&&!yr(A)&&typeof this._options.proxy=="string"&&N.SUPPORT_CORS_XHR&&!r,!t&&this._options.allowTaint===!1&&!vr(A)&&!yr(A)&&!B&&!r?[2]:(n=A,B?[4,this.proxy(n)]:[3,2]);case 1:n=i.sent(),i.label=2;case 2:return this.context.logger.debug("Added image "+A.substring(0,256)),[4,new Promise(function(a,o){var Q=new Image;Q.onload=function(){return a(Q)},Q.onerror=o,(eQ(n)||r)&&(Q.crossOrigin="anonymous"),Q.src=n,Q.complete===!0&&setTimeout(function(){return a(Q)},500),s._options.imageTimeout>0&&setTimeout(function(){return o("Timed out ("+s._options.imageTimeout+"ms) loading image")},s._options.imageTimeout)})];case 3:return[2,i.sent()]}})})},e.prototype.has=function(A){return typeof this._cache[A]<"u"},e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},e.prototype.proxy=function(A){var t=this,r=this._options.proxy;if(!r)throw new Error("No proxy defined");var B=A.substring(0,256);return new Promise(function(n,s){var i=N.SUPPORT_RESPONSE_TYPE?"blob":"text",a=new XMLHttpRequest;a.onload=function(){if(a.status===200)if(i==="text")n(a.response);else{var g=new FileReader;g.addEventListener("load",function(){return n(g.result)},!1),g.addEventListener("error",function(w){return s(w)},!1),g.readAsDataURL(a.response)}else s("Failed to proxy resource "+B+" with status code "+a.status)},a.onerror=s;var o=r.indexOf("?")>-1?"&":"?";if(a.open("GET",""+r+o+"url="+encodeURIComponent(A)+"&responseType="+i),i!=="text"&&a instanceof XMLHttpRequest&&(a.responseType=i),t._options.imageTimeout){var Q=t._options.imageTimeout;a.timeout=Q,a.ontimeout=function(){return s("Timed out ("+Q+"ms) proxying "+B)}}a.send()})},e})(),jo=/^data:image\/svg\+xml/i,zo=/^data:image\/.*;base64,/i,$o=/^data:image\/.*/i,AQ=function(e){return N.SUPPORT_SVG_DRAWING||!rQ(e)},vr=function(e){return $o.test(e)},eQ=function(e){return zo.test(e)},yr=function(e){return e.substr(0,4)==="blob"},rQ=function(e){return e.substr(-3).toLowerCase()==="svg"||jo.test(e)},u=(function(){function e(A,t){this.type=0,this.x=A,this.y=t}return e.prototype.add=function(A,t){return new e(this.x+A,this.y+t)},e})(),RA=function(e,A,t){return new u(e.x+(A.x-e.x)*t,e.y+(A.y-e.y)*t)},Te=(function(){function e(A,t,r,B){this.type=1,this.start=A,this.startControl=t,this.endControl=r,this.end=B}return e.prototype.subdivide=function(A,t){var r=RA(this.start,this.startControl,A),B=RA(this.startControl,this.endControl,A),n=RA(this.endControl,this.end,A),s=RA(r,B,A),i=RA(B,n,A),a=RA(s,i,A);return t?new e(this.start,r,s,a):new e(a,i,n,this.end)},e.prototype.add=function(A,t){return new e(this.start.add(A,t),this.startControl.add(A,t),this.endControl.add(A,t),this.end.add(A,t))},e.prototype.reverse=function(){return new e(this.end,this.endControl,this.startControl,this.start)},e})(),$=function(e){return e.type===1},tQ=(function(){function e(A){var t=A.styles,r=A.bounds,B=re(t.borderTopLeftRadius,r.width,r.height),n=B[0],s=B[1],i=re(t.borderTopRightRadius,r.width,r.height),a=i[0],o=i[1],Q=re(t.borderBottomRightRadius,r.width,r.height),g=Q[0],w=Q[1],f=re(t.borderBottomLeftRadius,r.width,r.height),c=f[0],C=f[1],H=[];H.push((n+a)/r.width),H.push((c+g)/r.width),H.push((s+C)/r.height),H.push((o+w)/r.height);var h=Math.max.apply(Math,H);h>1&&(n/=h,s/=h,a/=h,o/=h,g/=h,w/=h,c/=h,C/=h);var F=r.width-a,K=r.height-w,p=r.width-g,d=r.height-C,l=t.borderTopWidth,v=t.borderRightWidth,y=t.borderBottomWidth,E=t.borderLeftWidth,O=b(t.paddingTop,A.bounds.width),k=b(t.paddingRight,A.bounds.width),q=b(t.paddingBottom,A.bounds.width),L=b(t.paddingLeft,A.bounds.width);this.topLeftBorderDoubleOuterBox=n>0||s>0?x(r.left+E/3,r.top+l/3,n-E/3,s-l/3,m.TOP_LEFT):new u(r.left+E/3,r.top+l/3),this.topRightBorderDoubleOuterBox=n>0||s>0?x(r.left+F,r.top+l/3,a-v/3,o-l/3,m.TOP_RIGHT):new u(r.left+r.width-v/3,r.top+l/3),this.bottomRightBorderDoubleOuterBox=g>0||w>0?x(r.left+p,r.top+K,g-v/3,w-y/3,m.BOTTOM_RIGHT):new u(r.left+r.width-v/3,r.top+r.height-y/3),this.bottomLeftBorderDoubleOuterBox=c>0||C>0?x(r.left+E/3,r.top+d,c-E/3,C-y/3,m.BOTTOM_LEFT):new u(r.left+E/3,r.top+r.height-y/3),this.topLeftBorderDoubleInnerBox=n>0||s>0?x(r.left+E*2/3,r.top+l*2/3,n-E*2/3,s-l*2/3,m.TOP_LEFT):new u(r.left+E*2/3,r.top+l*2/3),this.topRightBorderDoubleInnerBox=n>0||s>0?x(r.left+F,r.top+l*2/3,a-v*2/3,o-l*2/3,m.TOP_RIGHT):new u(r.left+r.width-v*2/3,r.top+l*2/3),this.bottomRightBorderDoubleInnerBox=g>0||w>0?x(r.left+p,r.top+K,g-v*2/3,w-y*2/3,m.BOTTOM_RIGHT):new u(r.left+r.width-v*2/3,r.top+r.height-y*2/3),this.bottomLeftBorderDoubleInnerBox=c>0||C>0?x(r.left+E*2/3,r.top+d,c-E*2/3,C-y*2/3,m.BOTTOM_LEFT):new u(r.left+E*2/3,r.top+r.height-y*2/3),this.topLeftBorderStroke=n>0||s>0?x(r.left+E/2,r.top+l/2,n-E/2,s-l/2,m.TOP_LEFT):new u(r.left+E/2,r.top+l/2),this.topRightBorderStroke=n>0||s>0?x(r.left+F,r.top+l/2,a-v/2,o-l/2,m.TOP_RIGHT):new u(r.left+r.width-v/2,r.top+l/2),this.bottomRightBorderStroke=g>0||w>0?x(r.left+p,r.top+K,g-v/2,w-y/2,m.BOTTOM_RIGHT):new u(r.left+r.width-v/2,r.top+r.height-y/2),this.bottomLeftBorderStroke=c>0||C>0?x(r.left+E/2,r.top+d,c-E/2,C-y/2,m.BOTTOM_LEFT):new u(r.left+E/2,r.top+r.height-y/2),this.topLeftBorderBox=n>0||s>0?x(r.left,r.top,n,s,m.TOP_LEFT):new u(r.left,r.top),this.topRightBorderBox=a>0||o>0?x(r.left+F,r.top,a,o,m.TOP_RIGHT):new u(r.left+r.width,r.top),this.bottomRightBorderBox=g>0||w>0?x(r.left+p,r.top+K,g,w,m.BOTTOM_RIGHT):new u(r.left+r.width,r.top+r.height),this.bottomLeftBorderBox=c>0||C>0?x(r.left,r.top+d,c,C,m.BOTTOM_LEFT):new u(r.left,r.top+r.height),this.topLeftPaddingBox=n>0||s>0?x(r.left+E,r.top+l,Math.max(0,n-E),Math.max(0,s-l),m.TOP_LEFT):new u(r.left+E,r.top+l),this.topRightPaddingBox=a>0||o>0?x(r.left+Math.min(F,r.width-v),r.top+l,F>r.width+v?0:Math.max(0,a-v),Math.max(0,o-l),m.TOP_RIGHT):new u(r.left+r.width-v,r.top+l),this.bottomRightPaddingBox=g>0||w>0?x(r.left+Math.min(p,r.width-E),r.top+Math.min(K,r.height-y),Math.max(0,g-v),Math.max(0,w-y),m.BOTTOM_RIGHT):new u(r.left+r.width-v,r.top+r.height-y),this.bottomLeftPaddingBox=c>0||C>0?x(r.left+E,r.top+Math.min(d,r.height-y),Math.max(0,c-E),Math.max(0,C-y),m.BOTTOM_LEFT):new u(r.left+E,r.top+r.height-y),this.topLeftContentBox=n>0||s>0?x(r.left+E+L,r.top+l+O,Math.max(0,n-(E+L)),Math.max(0,s-(l+O)),m.TOP_LEFT):new u(r.left+E+L,r.top+l+O),this.topRightContentBox=a>0||o>0?x(r.left+Math.min(F,r.width+E+L),r.top+l+O,F>r.width+E+L?0:a-E+L,o-(l+O),m.TOP_RIGHT):new u(r.left+r.width-(v+k),r.top+l+O),this.bottomRightContentBox=g>0||w>0?x(r.left+Math.min(p,r.width-(E+L)),r.top+Math.min(K,r.height+l+O),Math.max(0,g-(v+k)),w-(y+q),m.BOTTOM_RIGHT):new u(r.left+r.width-(v+k),r.top+r.height-(y+q)),this.bottomLeftContentBox=c>0||C>0?x(r.left+E+L,r.top+d,Math.max(0,c-(E+L)),C-(y+q),m.BOTTOM_LEFT):new u(r.left+E+L,r.top+r.height-(y+q))}return e})(),m;(function(e){e[e.TOP_LEFT=0]="TOP_LEFT",e[e.TOP_RIGHT=1]="TOP_RIGHT",e[e.BOTTOM_RIGHT=2]="BOTTOM_RIGHT",e[e.BOTTOM_LEFT=3]="BOTTOM_LEFT"})(m||(m={}));var x=function(e,A,t,r,B){var n=4*((Math.sqrt(2)-1)/3),s=t*n,i=r*n,a=e+t,o=A+r;switch(B){case m.TOP_LEFT:return new Te(new u(e,o),new u(e,o-i),new u(a-s,A),new u(a,A));case m.TOP_RIGHT:return new Te(new u(e,A),new u(e+s,A),new u(a,o-i),new u(a,o));case m.BOTTOM_RIGHT:return new Te(new u(a,A),new u(a,A+i),new u(e+s,o),new u(e,o));case m.BOTTOM_LEFT:default:return new Te(new u(a,o),new u(a-s,o),new u(e,A+i),new u(e,A))}},Ze=function(e){return[e.topLeftBorderBox,e.topRightBorderBox,e.bottomRightBorderBox,e.bottomLeftBorderBox]},BQ=function(e){return[e.topLeftContentBox,e.topRightContentBox,e.bottomRightContentBox,e.bottomLeftContentBox]},qe=function(e){return[e.topLeftPaddingBox,e.topRightPaddingBox,e.bottomRightPaddingBox,e.bottomLeftPaddingBox]},nQ=(function(){function e(A,t,r){this.offsetX=A,this.offsetY=t,this.matrix=r,this.type=0,this.target=6}return e})(),Se=(function(){function e(A,t){this.path=A,this.target=t,this.type=1}return e})(),sQ=(function(){function e(A){this.opacity=A,this.type=2,this.target=6}return e})(),aQ=function(e){return e.type===0},en=function(e){return e.type===1},iQ=function(e){return e.type===2},eB=function(e,A){return e.length===A.length?e.some(function(t,r){return t===A[r]}):!1},oQ=function(e,A,t,r,B){return e.map(function(n,s){switch(s){case 0:return n.add(A,t);case 1:return n.add(A+r,t);case 2:return n.add(A+r,t+B);case 3:return n.add(A,t+B)}return n})},rn=(function(){function e(A){this.element=A,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]}return e})(),tn=(function(){function e(A,t){if(this.container=A,this.parent=t,this.effects=[],this.curves=new tQ(this.container),this.container.styles.opacity<1&&this.effects.push(new sQ(this.container.styles.opacity)),this.container.styles.transform!==null){var r=this.container.bounds.left+this.container.styles.transformOrigin[0].number,B=this.container.bounds.top+this.container.styles.transformOrigin[1].number,n=this.container.styles.transform;this.effects.push(new nQ(r,B,n))}if(this.container.styles.overflowX!==0){var s=Ze(this.curves),i=qe(this.curves);eB(s,i)?this.effects.push(new Se(s,6)):(this.effects.push(new Se(s,2)),this.effects.push(new Se(i,4)))}}return e.prototype.getEffects=function(A){for(var t=[2,3].indexOf(this.container.styles.position)===-1,r=this.parent,B=this.effects.slice(0);r;){var n=r.effects.filter(function(a){return!en(a)});if(t||r.container.styles.position!==0||!r.parent){if(B.unshift.apply(B,n),t=[2,3].indexOf(r.container.styles.position)===-1,r.container.styles.overflowX!==0){var s=Ze(r.curves),i=qe(r.curves);eB(s,i)||B.unshift(new Se(i,6))}}else B.unshift.apply(B,n);r=r.parent}return B.filter(function(a){return G(a.target,A)})},e})(),jr=function(e,A,t,r){e.container.elements.forEach(function(B){var n=G(B.flags,4),s=G(B.flags,2),i=new tn(B,e);G(B.styles.display,2048)&&r.push(i);var a=G(B.flags,8)?[]:r;if(n||s){var o=n||B.styles.isPositioned()?t:A,Q=new rn(i);if(B.styles.isPositioned()||B.styles.opacity<1||B.styles.isTransformed()){var g=B.styles.zIndex.order;if(g<0){var w=0;o.negativeZIndex.some(function(c,C){return g>c.element.container.styles.zIndex.order?(w=C,!1):w>0}),o.negativeZIndex.splice(w,0,Q)}else if(g>0){var f=0;o.positiveZIndex.some(function(c,C){return g>=c.element.container.styles.zIndex.order?(f=C+1,!1):f>0}),o.positiveZIndex.splice(f,0,Q)}else o.zeroOrAutoZIndexOrTransformedOrOpacity.push(Q)}else B.styles.isFloating()?o.nonPositionedFloats.push(Q):o.nonPositionedInlineLevel.push(Q);jr(i,Q,n?Q:t,a)}else B.styles.isInlineLevel()?A.inlineLevel.push(i):A.nonInlineLevel.push(i),jr(i,A,t,a);G(B.flags,8)&&Bn(B,a)})},Bn=function(e,A){for(var t=e instanceof kr?e.start:1,r=e instanceof kr?e.reversed:!1,B=0;B"u"?e[0]:t},fQ=function(e,A,t,r,B){var n=A[0],s=A[1],i=t[0],a=t[1];switch(e){case 2:return[new u(Math.round(r.left),Math.round(r.top+s)),new u(Math.round(r.left+r.width),Math.round(r.top+s)),new u(Math.round(r.left+r.width),Math.round(a+r.top+s)),new u(Math.round(r.left),Math.round(a+r.top+s))];case 3:return[new u(Math.round(r.left+n),Math.round(r.top)),new u(Math.round(r.left+n+i),Math.round(r.top)),new u(Math.round(r.left+n+i),Math.round(r.height+r.top)),new u(Math.round(r.left+n),Math.round(r.height+r.top))];case 1:return[new u(Math.round(r.left+n),Math.round(r.top+s)),new u(Math.round(r.left+n+i),Math.round(r.top+s)),new u(Math.round(r.left+n+i),Math.round(r.top+s+a)),new u(Math.round(r.left+n),Math.round(r.top+s+a))];default:return[new u(Math.round(B.left),Math.round(B.top)),new u(Math.round(B.left+B.width),Math.round(B.top)),new u(Math.round(B.left+B.width),Math.round(B.height+B.top)),new u(Math.round(B.left),Math.round(B.height+B.top))]}},UQ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",tB="Hidden Text",FQ=(function(){function e(A){this._data={},this._document=A}return e.prototype.parseMetrics=function(A,t){var r=this._document.createElement("div"),B=this._document.createElement("img"),n=this._document.createElement("span"),s=this._document.body;r.style.visibility="hidden",r.style.fontFamily=A,r.style.fontSize=t,r.style.margin="0",r.style.padding="0",r.style.whiteSpace="nowrap",s.appendChild(r),B.src=UQ,B.width=1,B.height=1,B.style.margin="0",B.style.padding="0",B.style.verticalAlign="baseline",n.style.fontFamily=A,n.style.fontSize=t,n.style.margin="0",n.style.padding="0",n.appendChild(this._document.createTextNode(tB)),r.appendChild(n),r.appendChild(B);var i=B.offsetTop-n.offsetTop+2;r.removeChild(n),r.appendChild(this._document.createTextNode(tB)),r.style.lineHeight="normal",B.style.verticalAlign="super";var a=B.offsetTop-r.offsetTop+2;return s.removeChild(r),{baseline:i,middle:a}},e.prototype.getMetrics=function(A,t){var r=A+" "+t;return typeof this._data[r]>"u"&&(this._data[r]=this.parseMetrics(A,t)),this._data[r]},e})(),sn=(function(){function e(A,t){this.context=A,this.options=t}return e})(),hQ=1e4,dQ=(function(e){tA(A,e);function A(t,r){var B=e.call(this,t,r)||this;return B._activeEffects=[],B.canvas=r.canvas?r.canvas:document.createElement("canvas"),B.ctx=B.canvas.getContext("2d"),r.canvas||(B.canvas.width=Math.floor(r.width*r.scale),B.canvas.height=Math.floor(r.height*r.scale),B.canvas.style.width=r.width+"px",B.canvas.style.height=r.height+"px"),B.fontMetrics=new FQ(document),B.ctx.scale(B.options.scale,B.options.scale),B.ctx.translate(-r.x,-r.y),B.ctx.textBaseline="bottom",B._activeEffects=[],B.context.logger.debug("Canvas renderer initialized ("+r.width+"x"+r.height+") with scale "+r.scale),B}return A.prototype.applyEffects=function(t){for(var r=this;this._activeEffects.length;)this.popEffect();t.forEach(function(B){return r.applyEffect(B)})},A.prototype.applyEffect=function(t){this.ctx.save(),iQ(t)&&(this.ctx.globalAlpha=t.opacity),aQ(t)&&(this.ctx.translate(t.offsetX,t.offsetY),this.ctx.transform(t.matrix[0],t.matrix[1],t.matrix[2],t.matrix[3],t.matrix[4],t.matrix[5]),this.ctx.translate(-t.offsetX,-t.offsetY)),en(t)&&(this.path(t.path),this.ctx.clip()),this._activeEffects.push(t)},A.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},A.prototype.renderStack=function(t){return P(this,void 0,void 0,function(){var r;return _(this,function(B){switch(B.label){case 0:return r=t.element.container.styles,r.isVisible()?[4,this.renderStackContent(t)]:[3,2];case 1:B.sent(),B.label=2;case 2:return[2]}})})},A.prototype.renderNode=function(t){return P(this,void 0,void 0,function(){return _(this,function(r){switch(r.label){case 0:if(G(t.container.flags,16))debugger;return t.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(t)]:[3,3];case 1:return r.sent(),[4,this.renderNodeContent(t)];case 2:r.sent(),r.label=3;case 3:return[2]}})})},A.prototype.renderTextWithLetterSpacing=function(t,r,B){var n=this;if(r===0)this.ctx.fillText(t.text,t.bounds.left,t.bounds.top+B);else{var s=rt(t.text);s.reduce(function(i,a){return n.ctx.fillText(a,i,t.bounds.top+B),i+n.ctx.measureText(a).width},t.bounds.left)}},A.prototype.createFontStyle=function(t){var r=t.fontVariant.filter(function(s){return s==="normal"||s==="small-caps"}).join(""),B=vQ(t.fontFamily).join(", "),n=Ce(t.fontSize)?""+t.fontSize.number+t.fontSize.unit:t.fontSize.number+"px";return[[t.fontStyle,r,t.fontWeight,n,B].join(" "),B,n]},A.prototype.renderTextNode=function(t,r){return P(this,void 0,void 0,function(){var B,n,s,i,a,o,Q,g,w=this;return _(this,function(f){return B=this.createFontStyle(r),n=B[0],s=B[1],i=B[2],this.ctx.font=n,this.ctx.direction=r.direction===1?"rtl":"ltr",this.ctx.textAlign="left",this.ctx.textBaseline="alphabetic",a=this.fontMetrics.getMetrics(s,i),o=a.baseline,Q=a.middle,g=r.paintOrder,t.textBounds.forEach(function(c){g.forEach(function(C){switch(C){case 0:w.ctx.fillStyle=R(r.color),w.renderTextWithLetterSpacing(c,r.letterSpacing,o);var H=r.textShadow;H.length&&c.text.trim().length&&(H.slice(0).reverse().forEach(function(h){w.ctx.shadowColor=R(h.color),w.ctx.shadowOffsetX=h.offsetX.number*w.options.scale,w.ctx.shadowOffsetY=h.offsetY.number*w.options.scale,w.ctx.shadowBlur=h.blur.number,w.renderTextWithLetterSpacing(c,r.letterSpacing,o)}),w.ctx.shadowColor="",w.ctx.shadowOffsetX=0,w.ctx.shadowOffsetY=0,w.ctx.shadowBlur=0),r.textDecorationLine.length&&(w.ctx.fillStyle=R(r.textDecorationColor||r.color),r.textDecorationLine.forEach(function(h){switch(h){case 1:w.ctx.fillRect(c.bounds.left,Math.round(c.bounds.top+o),c.bounds.width,1);break;case 2:w.ctx.fillRect(c.bounds.left,Math.round(c.bounds.top),c.bounds.width,1);break;case 3:w.ctx.fillRect(c.bounds.left,Math.ceil(c.bounds.top+Q),c.bounds.width,1);break}}));break;case 1:r.webkitTextStrokeWidth&&c.text.trim().length&&(w.ctx.strokeStyle=R(r.webkitTextStrokeColor),w.ctx.lineWidth=r.webkitTextStrokeWidth,w.ctx.lineJoin=window.chrome?"miter":"round",w.ctx.strokeText(c.text,c.bounds.left,c.bounds.top+o)),w.ctx.strokeStyle="",w.ctx.lineWidth=0,w.ctx.lineJoin="miter";break}})}),[2]})})},A.prototype.renderReplacedElement=function(t,r,B){if(B&&t.intrinsicWidth>0&&t.intrinsicHeight>0){var n=je(t),s=qe(r);this.path(s),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(B,0,0,t.intrinsicWidth,t.intrinsicHeight,n.left,n.top,n.width,n.height),this.ctx.restore()}},A.prototype.renderNodeContent=function(t){return P(this,void 0,void 0,function(){var r,B,n,s,i,a,F,F,o,Q,g,w,p,f,c,d,C,H,h,F,K,p,d;return _(this,function(l){switch(l.label){case 0:this.applyEffects(t.getEffects(4)),r=t.container,B=t.curves,n=r.styles,s=0,i=r.textNodes,l.label=1;case 1:return s0&&V>0&&(y=n.ctx.createPattern(d,"repeat"),n.renderRepeat(O,y,Y,W))):aa(Q)&&(E=Kr(t,r,[null,null,null]),O=E[0],k=E[1],q=E[2],L=E[3],V=E[4],CA=Q.position.length===0?[$r]:Q.position,Y=b(CA[0],L),W=b(CA[CA.length-1],V),IA=ra(Q,Y,W,L,V),BA=IA[0],uA=IA[1],BA>0&&uA>0&&(vA=n.ctx.createRadialGradient(k+Y,q+W,0,k+Y,q+W,BA),It(Q.stops,BA*2).forEach(function(YA){return vA.addColorStop(YA.stop,R(YA.color))}),n.path(O),n.ctx.fillStyle=vA,BA!==uA?(yA=t.bounds.left+.5*t.bounds.width,iA=t.bounds.top+.5*t.bounds.height,KA=uA/BA,oA=1/KA,n.ctx.save(),n.ctx.translate(yA,iA),n.ctx.transform(1,0,0,KA,0,0),n.ctx.translate(-yA,-iA),n.ctx.fillRect(k,oA*(q-iA)+iA,L,V*oA),n.ctx.restore()):n.ctx.fill())),TA.label=6;case 6:return r--,[2]}})},n=this,s=0,i=t.styles.backgroundImage.slice(0).reverse(),o.label=1;case 1:return s0?Q.style!==2?[3,5]:[4,this.renderDashedDottedBorder(Q.color,Q.width,i,t.curves,2)]:[3,11]):[3,13];case 4:return w.sent(),[3,11];case 5:return Q.style!==3?[3,7]:[4,this.renderDashedDottedBorder(Q.color,Q.width,i,t.curves,3)];case 6:return w.sent(),[3,11];case 7:return Q.style!==4?[3,9]:[4,this.renderDoubleBorder(Q.color,Q.width,i,t.curves)];case 8:return w.sent(),[3,11];case 9:return[4,this.renderSolidBorder(Q.color,i,t.curves)];case 10:w.sent(),w.label=11;case 11:i++,w.label=12;case 12:return a++,[3,3];case 13:return[2]}})})},A.prototype.renderDashedDottedBorder=function(t,r,B,n,s){return P(this,void 0,void 0,function(){var i,a,o,Q,g,w,f,c,C,H,h,F,K,p,d,l,d,l;return _(this,function(v){return this.ctx.save(),i=cQ(n,B),a=rB(n,B),s===2&&(this.path(a),this.ctx.clip()),$(a[0])?(o=a[0].start.x,Q=a[0].start.y):(o=a[0].x,Q=a[0].y),$(a[1])?(g=a[1].end.x,w=a[1].end.y):(g=a[1].x,w=a[1].y),B===0||B===2?f=Math.abs(o-g):f=Math.abs(Q-w),this.ctx.beginPath(),s===3?this.formatPath(i):this.formatPath(a.slice(0,2)),c=r<3?r*3:r*2,C=r<3?r*2:r,s===3&&(c=r,C=r),H=!0,f<=c*2?H=!1:f<=c*2+C?(h=f/(2*c+C),c*=h,C*=h):(F=Math.floor((f+C)/(c+C)),K=(f-F*c)/(F-1),p=(f-(F+1)*c)/F,C=p<=0||Math.abs(C-K):not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}:where(.-space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -3) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-6{row-gap:calc(var(--spacing) * 6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-50>:not(:last-child)){border-color:var(--color-gray-50)}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-slate-50>:not(:last-child)){border-color:var(--color-slate-50)}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.5rem\]{border-radius:1.5rem}.rounded-\[2\.2rem\]{border-radius:2.2rem}.rounded-\[2\.5rem\]{border-radius:2.5rem}.rounded-\[2rem\]{border-radius:2rem}.rounded-\[3rem\]{border-radius:3rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-2xl{border-top-left-radius:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-br-none{border-bottom-right-radius:0}.rounded-br-xl{border-bottom-right-radius:var(--radius-xl)}.rounded-bl-none{border-bottom-left-radius:0}.rounded-bl-xl{border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-8{border-style:var(--tw-border-style);border-width:8px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-500{border-color:var(--color-amber-500)}.border-amber-600{border-color:var(--color-amber-600)}.border-amber-700{border-color:var(--color-amber-700)}.border-amber-800{border-color:var(--color-amber-800)}.border-blue-50{border-color:var(--color-blue-50)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-100\/50{border-color:#dbeafe80}@supports (color:color-mix(in lab,red,red)){.border-blue-100\/50{border-color:color-mix(in oklab,var(--color-blue-100) 50%,transparent)}}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-700{border-color:var(--color-blue-700)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-gray-50{border-color:var(--color-gray-50)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-200\/50{border-color:#e5e7eb80}@supports (color:color-mix(in lab,red,red)){.border-gray-200\/50{border-color:color-mix(in oklab,var(--color-gray-200) 50%,transparent)}}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-green-50{border-color:var(--color-green-50)}.border-green-100{border-color:var(--color-green-100)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-green-400{border-color:var(--color-green-400)}.border-green-500{border-color:var(--color-green-500)}.border-green-600{border-color:var(--color-green-600)}.border-indigo-100{border-color:var(--color-indigo-100)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-indigo-600{border-color:var(--color-indigo-600)}.border-orange-100{border-color:var(--color-orange-100)}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-600{border-color:var(--color-purple-600)}.border-purple-800{border-color:var(--color-purple-800)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500{border-color:var(--color-red-500)}.border-slate-50{border-color:var(--color-slate-50)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.border-white\/50{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.border-white\/50{border-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.border-yellow-200{border-color:var(--color-yellow-200)}.border-t-blue-600{border-top-color:var(--color-blue-600)}.border-t-transparent{border-top-color:#0000}.bg-\[\#2d6a4f\]{background-color:#2d6a4f}.bg-\[\#F8FAFC\]{background-color:#f8fafc}.bg-\[\#d49a4a\]{background-color:#d49a4a}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/30{background-color:#fffbeb4d}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/30{background-color:color-mix(in oklab,var(--color-amber-50) 30%,transparent)}}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-100\/50{background-color:#fef3c680}@supports (color:color-mix(in lab,red,red)){.bg-amber-100\/50{background-color:color-mix(in oklab,var(--color-amber-100) 50%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-amber-800{background-color:var(--color-amber-800)}.bg-black{background-color:var(--color-black)}.bg-black\/0{background-color:#0000}@supports (color:color-mix(in lab,red,red)){.bg-black\/0{background-color:color-mix(in oklab,var(--color-black) 0%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black) 90%,transparent)}}.bg-black\/95{background-color:#000000f2}@supports (color:color-mix(in lab,red,red)){.bg-black\/95{background-color:color-mix(in oklab,var(--color-black) 95%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/20{background-color:#eff6ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/20{background-color:color-mix(in oklab,var(--color-blue-50) 20%,transparent)}}.bg-blue-50\/40{background-color:#eff6ff66}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/40{background-color:color-mix(in oklab,var(--color-blue-50) 40%,transparent)}}.bg-blue-50\/50{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/50{background-color:color-mix(in oklab,var(--color-blue-50) 50%,transparent)}}.bg-blue-50\/70{background-color:#eff6ffb3}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50) 70%,transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-100\/50{background-color:#dbeafe80}@supports (color:color-mix(in lab,red,red)){.bg-blue-100\/50{background-color:color-mix(in oklab,var(--color-blue-100) 50%,transparent)}}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/10{background-color:color-mix(in oklab,var(--color-blue-400) 10%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-600\/10{background-color:#155dfc1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-600\/10{background-color:color-mix(in oklab,var(--color-blue-600) 10%,transparent)}}.bg-blue-600\/20{background-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.bg-blue-600\/20{background-color:color-mix(in oklab,var(--color-blue-600) 20%,transparent)}}.bg-current{background-color:currentColor}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-100\/50{background-color:#d0fae580}@supports (color:color-mix(in lab,red,red)){.bg-emerald-100\/50{background-color:color-mix(in oklab,var(--color-emerald-100) 50%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/30{background-color:#f9fafb4d}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/30{background-color:color-mix(in oklab,var(--color-gray-50) 30%,transparent)}}.bg-gray-50\/40{background-color:#f9fafb66}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/40{background-color:color-mix(in oklab,var(--color-gray-50) 40%,transparent)}}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/50{background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.bg-gray-50\/70{background-color:#f9fafbb3}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/70{background-color:color-mix(in oklab,var(--color-gray-50) 70%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-950{background-color:var(--color-gray-950)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-50\/50{background-color:#eef2ff80}@supports (color:color-mix(in lab,red,red)){.bg-indigo-50\/50{background-color:color-mix(in oklab,var(--color-indigo-50) 50%,transparent)}}.bg-indigo-50\/60{background-color:#eef2ff99}@supports (color:color-mix(in lab,red,red)){.bg-indigo-50\/60{background-color:color-mix(in oklab,var(--color-indigo-50) 60%,transparent)}}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-200{background-color:var(--color-indigo-200)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-800{background-color:var(--color-purple-800)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-100\/50{background-color:#ffe2e280}@supports (color:color-mix(in lab,red,red)){.bg-red-100\/50{background-color:color-mix(in oklab,var(--color-red-100) 50%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-600\/80{background-color:#e40014cc}@supports (color:color-mix(in lab,red,red)){.bg-red-600\/80{background-color:color-mix(in oklab,var(--color-red-600) 80%,transparent)}}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/30{background-color:#f8fafc4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/30{background-color:color-mix(in oklab,var(--color-slate-50) 30%,transparent)}}.bg-slate-50\/50{background-color:#f8fafc80}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/50{background-color:color-mix(in oklab,var(--color-slate-50) 50%,transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-transparent{background-color:#0000}.bg-violet-100{background-color:var(--color-violet-100)}.bg-violet-600{background-color:var(--color-violet-600)}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.bg-white\/70{background-color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab,red,red)){.bg-white\/95{background-color:color-mix(in oklab,var(--color-white) 95%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tr{--tw-gradient-position:to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black\/40{--tw-gradient-from:#0006}@supports (color:color-mix(in lab,red,red)){.from-black\/40{--tw-gradient-from:color-mix(in oklab, var(--color-black) 40%, transparent)}}.from-black\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-50\/50{--tw-gradient-from:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.from-blue-50\/50{--tw-gradient-from:color-mix(in oklab, var(--color-blue-50) 50%, transparent)}}.from-blue-50\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-50{--tw-gradient-from:var(--color-emerald-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-green-50{--tw-gradient-from:var(--color-green-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-orange-50{--tw-gradient-from:var(--color-orange-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-50{--tw-gradient-from:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-600{--tw-gradient-to:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-700{--tw-gradient-to:var(--color-indigo-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.p-12{padding:calc(var(--spacing) * 12)}.p-16{padding:calc(var(--spacing) * 16)}.p-20{padding:calc(var(--spacing) * 20)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-12{padding-inline:calc(var(--spacing) * 12)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-32{padding-block:calc(var(--spacing) * 32)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-32{padding-top:calc(var(--spacing) * 32)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-20{padding-right:calc(var(--spacing) * 20)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-12{padding-left:calc(var(--spacing) * 12)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#2d6a4f\]{color:#2d6a4f}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-black{color:var(--color-black)}.text-blue-100{color:var(--color-blue-100)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-200{color:var(--color-indigo-200)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-500{color:var(--color-pink-500)}.text-purple-300{color:var(--color-purple-300)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-100{color:var(--color-red-100)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-rose-600{color:var(--color-rose-600)}.text-sky-500{color:var(--color-sky-500)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-transparent{color:#0000}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-white\/50{color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.line-through{text-decoration-line:line-through}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-blue-200{-webkit-text-decoration-color:var(--color-blue-200);text-decoration-color:var(--color-blue-200)}.underline-offset-8{text-underline-offset:8px}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-100{opacity:1}.opacity-\[0\.03\]{opacity:.03}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(37\,99\,235\,0\.5\)\]{--tw-shadow:0 0 10px var(--tw-shadow-color,#2563eb80);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_30px_rgb\(0\,0\,0\,0\.04\)\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.06\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_40px_-15px_rgba\(0\,0\,0\,0\.05\)\]{--tw-shadow:0 10px 40px -15px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_-15px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:0 20px 50px -15px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_-15px_rgba\(0\,0\,0\,0\.03\)\]{--tw-shadow:0 20px 50px -15px var(--tw-shadow-color,#00000008);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 20px 50px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_50px_100px_-20px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:0 50px 100px -20px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_50px_100px_-20px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0 50px 100px -20px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[2px_0_10px_rgba\(37\,99\,235\,0\.3\)\]{--tw-shadow:2px 0 10px var(--tw-shadow-color,#2563eb4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-amber-100{--tw-shadow-color:oklch(96.2% .059 95.617)}@supports (color:color-mix(in lab,red,red)){.shadow-amber-100{--tw-shadow-color:color-mix(in oklab, var(--color-amber-100) var(--tw-shadow-alpha), transparent)}}.shadow-blue-100{--tw-shadow-color:oklch(93.2% .032 255.585)}@supports (color:color-mix(in lab,red,red)){.shadow-blue-100{--tw-shadow-color:color-mix(in oklab, var(--color-blue-100) var(--tw-shadow-alpha), transparent)}}.shadow-blue-200{--tw-shadow-color:oklch(88.2% .059 254.128)}@supports (color:color-mix(in lab,red,red)){.shadow-blue-200{--tw-shadow-color:color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent)}}.shadow-blue-300{--tw-shadow-color:oklch(80.9% .105 251.813)}@supports (color:color-mix(in lab,red,red)){.shadow-blue-300{--tw-shadow-color:color-mix(in oklab, var(--color-blue-300) var(--tw-shadow-alpha), transparent)}}.shadow-emerald-100{--tw-shadow-color:oklch(95% .052 163.051)}@supports (color:color-mix(in lab,red,red)){.shadow-emerald-100{--tw-shadow-color:color-mix(in oklab, var(--color-emerald-100) var(--tw-shadow-alpha), transparent)}}.shadow-green-100{--tw-shadow-color:oklch(96.2% .044 156.743)}@supports (color:color-mix(in lab,red,red)){.shadow-green-100{--tw-shadow-color:color-mix(in oklab, var(--color-green-100) var(--tw-shadow-alpha), transparent)}}.ring-blue-100{--tw-ring-color:var(--color-blue-100)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-green-100{--tw-ring-color:var(--color-green-100)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-offset-4{outline-offset:4px}.outline-gray-100{outline-color:var(--color-gray-100)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[80px\]{--tw-blur:blur(80px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:text-blue-500:is(:where(.group):focus-within *){color:var(--color-blue-500)}@media(hover:hover){.group-hover\:translate-x-0:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:bg-black\/30:is(:where(.group):hover *){background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-black\/30:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.group-hover\:bg-blue-600:is(:where(.group):hover *){background-color:var(--color-blue-600)}.group-hover\:bg-indigo-600:is(:where(.group):hover *){background-color:var(--color-indigo-600)}.group-hover\:bg-rose-300:is(:where(.group):hover *){background-color:var(--color-rose-300)}.group-hover\:text-blue-500:is(:where(.group):hover *){color:var(--color-blue-500)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-indigo-400:is(:where(.group):hover *){color:var(--color-indigo-400)}.group-hover\:text-purple-500:is(:where(.group):hover *){color:var(--color-purple-500)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:shadow-blue-200:is(:where(.group):hover *){--tw-shadow-color:oklch(88.2% .059 254.128)}@supports (color:color-mix(in lab,red,red)){.group-hover\:shadow-blue-200:is(:where(.group):hover *){--tw-shadow-color:color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent)}}.group-hover\/btn\:translate-x-1:is(:where(.group\/btn):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.selection\:bg-blue-100 ::selection{background-color:var(--color-blue-100)}.selection\:bg-blue-100::selection{background-color:var(--color-blue-100)}.selection\:text-blue-900 ::selection{color:var(--color-blue-900)}.selection\:text-blue-900::selection{color:var(--color-blue-900)}.placeholder\:text-gray-300::placeholder{color:var(--color-gray-300)}.placeholder\:text-slate-300::placeholder{color:var(--color-slate-300)}.placeholder\:normal-case::placeholder{text-transform:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-2:before{content:var(--tw-content);top:calc(var(--spacing) * 2)}.before\:bottom-2:before{content:var(--tw-content);bottom:calc(var(--spacing) * 2)}.before\:left-\[7px\]:before{content:var(--tw-content);left:7px}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing) * .5)}.before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--color-gray-200)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing) * 0)}@media(hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-amber-300:hover{border-color:var(--color-amber-300)}.hover\:border-amber-400:hover{border-color:var(--color-amber-400)}.hover\:border-blue-100:hover{border-color:var(--color-blue-100)}.hover\:border-blue-200:hover{border-color:var(--color-blue-200)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-blue-400\/50:hover{border-color:#54a2ff80}@supports (color:color-mix(in lab,red,red)){.hover\:border-blue-400\/50:hover{border-color:color-mix(in oklab,var(--color-blue-400) 50%,transparent)}}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-emerald-200:hover{border-color:var(--color-emerald-200)}.hover\:border-gray-100:hover{border-color:var(--color-gray-100)}.hover\:border-gray-200:hover{border-color:var(--color-gray-200)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:border-green-300:hover{border-color:var(--color-green-300)}.hover\:border-green-400:hover{border-color:var(--color-green-400)}.hover\:border-indigo-200:hover{border-color:var(--color-indigo-200)}.hover\:border-indigo-300:hover{border-color:var(--color-indigo-300)}.hover\:border-indigo-400:hover{border-color:var(--color-indigo-400)}.hover\:border-orange-400:hover{border-color:var(--color-orange-400)}.hover\:border-purple-100:hover{border-color:var(--color-purple-100)}.hover\:border-purple-200:hover{border-color:var(--color-purple-200)}.hover\:border-purple-300:hover{border-color:var(--color-purple-300)}.hover\:border-purple-400:hover{border-color:var(--color-purple-400)}.hover\:border-red-100:hover{border-color:var(--color-red-100)}.hover\:border-red-200:hover{border-color:var(--color-red-200)}.hover\:border-red-400:hover{border-color:var(--color-red-400)}.hover\:border-sky-400:hover{border-color:var(--color-sky-400)}.hover\:border-teal-400:hover{border-color:var(--color-teal-400)}.hover\:border-violet-400:hover{border-color:var(--color-violet-400)}.hover\:border-yellow-400:hover{border-color:var(--color-yellow-400)}.hover\:bg-\[\#1b4332\]:hover{background-color:#1b4332}.hover\:bg-amber-50:hover{background-color:var(--color-amber-50)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-amber-700:hover{background-color:var(--color-amber-700)}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-50\/30:hover{background-color:#eff6ff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-50\/30:hover{background-color:color-mix(in oklab,var(--color-blue-50) 30%,transparent)}}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-50\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50) 50%,transparent)}}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-emerald-700:hover{background-color:var(--color-emerald-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-50\/50:hover{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-50\/50:hover{background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.hover\:bg-gray-400:hover{background-color:var(--color-gray-400)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.hover\:bg-green-50\/50:hover{background-color:#f0fdf480}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-50\/50:hover{background-color:color-mix(in oklab,var(--color-green-50) 50%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-50\/50:hover{background-color:#eef2ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-50\/50:hover{background-color:color-mix(in oklab,var(--color-indigo-50) 50%,transparent)}}.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-orange-50\/50:hover{background-color:#fff7ed80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-50\/50:hover{background-color:color-mix(in oklab,var(--color-orange-50) 50%,transparent)}}.hover\:bg-orange-600:hover{background-color:var(--color-orange-600)}.hover\:bg-purple-50:hover{background-color:var(--color-purple-50)}.hover\:bg-purple-50\/50:hover{background-color:#faf5ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-50\/50:hover{background-color:color-mix(in oklab,var(--color-purple-50) 50%,transparent)}}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-50\/50:hover{background-color:#fef2f280}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-50\/50:hover{background-color:color-mix(in oklab,var(--color-red-50) 50%,transparent)}}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-sky-50\/50:hover{background-color:#f0f9ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sky-50\/50:hover{background-color:color-mix(in oklab,var(--color-sky-50) 50%,transparent)}}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-50\/50:hover{background-color:#f8fafc80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-50\/50:hover{background-color:color-mix(in oklab,var(--color-slate-50) 50%,transparent)}}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-teal-50\/50:hover{background-color:#f0fdfa80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-teal-50\/50:hover{background-color:color-mix(in oklab,var(--color-teal-50) 50%,transparent)}}.hover\:bg-teal-700:hover{background-color:var(--color-teal-700)}.hover\:bg-violet-50\/50:hover{background-color:#f5f3ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-violet-50\/50:hover{background-color:color-mix(in oklab,var(--color-violet-50) 50%,transparent)}}.hover\:bg-violet-700:hover{background-color:var(--color-violet-700)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:bg-yellow-50\/50:hover{background-color:#fefce880}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-50\/50:hover{background-color:color-mix(in oklab,var(--color-yellow-50) 50%,transparent)}}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-emerald-500:hover{color:var(--color-emerald-500)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-800:hover{color:var(--color-green-800)}.hover\:text-indigo-700:hover{color:var(--color-indigo-700)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_8px_32px_rgba\(59\,130\,246\,0\.15\)\]:hover{--tw-shadow:0 8px 32px var(--tw-shadow-color,#3b82f626);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_20px_50px_-20px_rgba\(0\,0\,0\,0\.1\)\]:hover{--tw-shadow:0 20px 50px -20px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_20px_50px_rgba\(8\,112\,184\,0\.1\)\]:hover{--tw-shadow:0 20px 50px var(--tw-shadow-color,#0870b81a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-blue-50\/50:hover{--tw-shadow-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-blue-50\/50:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-blue-50) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-blue-200:hover{--tw-shadow-color:oklch(88.2% .059 254.128)}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-blue-200:hover{--tw-shadow-color:color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-emerald-200:hover{--tw-shadow-color:oklch(90.5% .093 164.15)}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-emerald-200:hover{--tw-shadow-color:color-mix(in oklab, var(--color-emerald-200) var(--tw-shadow-alpha), transparent)}}}.focus\:border-2:focus{border-style:var(--tw-border-style);border-width:2px}.focus\:border-amber-300:focus{border-color:var(--color-amber-300)}.focus\:border-amber-400:focus{border-color:var(--color-amber-400)}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-400:focus{border-color:var(--color-blue-400)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-blue-600:focus{border-color:var(--color-blue-600)}.focus\:border-green-400:focus{border-color:var(--color-green-400)}.focus\:border-green-500:focus{border-color:var(--color-green-500)}.focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.focus\:border-indigo-400:focus{border-color:var(--color-indigo-400)}.focus\:border-orange-400:focus{border-color:var(--color-orange-400)}.focus\:border-purple-400:focus{border-color:var(--color-purple-400)}.focus\:border-red-400:focus{border-color:var(--color-red-400)}.focus\:border-transparent:focus{border-color:#0000}.focus\:border-white:focus{border-color:var(--color-white)}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-blue-50:focus{--tw-ring-color:var(--color-blue-50)}.focus\:ring-blue-100:focus{--tw-ring-color:var(--color-blue-100)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-emerald-100:focus{--tw-ring-color:var(--color-emerald-100)}.focus\:ring-indigo-100:focus{--tw-ring-color:var(--color-indigo-100)}.focus\:ring-purple-100:focus{--tw-ring-color:var(--color-purple-100)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-\[0\.98\]:active{scale:.98}.active\:cursor-grabbing:active{cursor:grabbing}.active\:border-purple-300:active{border-color:var(--color-purple-300)}.active\:bg-gray-200:active{background-color:var(--color-gray-200)}.active\:bg-purple-800:active{background-color:var(--color-purple-800)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}@media(hover:hover){.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}}@media(min-width:40rem){.sm\:mb-4{margin-bottom:calc(var(--spacing) * 4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:h-9{height:calc(var(--spacing) * 9)}.sm\:h-11{height:calc(var(--spacing) * 11)}.sm\:h-12{height:calc(var(--spacing) * 12)}.sm\:w-9{width:calc(var(--spacing) * 9)}.sm\:w-11{width:calc(var(--spacing) * 11)}.sm\:w-12{width:calc(var(--spacing) * 12)}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-3{gap:calc(var(--spacing) * 3)}.sm\:gap-4{gap:calc(var(--spacing) * 4)}:where(.sm\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.sm\:gap-x-12{column-gap:calc(var(--spacing) * 12)}.sm\:gap-y-16{row-gap:calc(var(--spacing) * 16)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:rounded-xl{border-radius:var(--radius-xl)}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:p-5{padding:calc(var(--spacing) * 5)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\:py-2{padding-block:calc(var(--spacing) * 2)}.sm\:py-4{padding-block:calc(var(--spacing) * 4)}.sm\:py-6{padding-block:calc(var(--spacing) * 6)}.sm\:py-10{padding-block:calc(var(--spacing) * 10)}.sm\:pr-2{padding-right:calc(var(--spacing) * 2)}.sm\:pl-2{padding-left:calc(var(--spacing) * 2)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-\[9px\]{font-size:9px}.sm\:text-\[11px\]{font-size:11px}.sm\:opacity-0{opacity:0}@media(hover:hover){.sm\:group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}}@media(min-width:48rem){.md\:relative{position:relative}.md\:col-span-2{grid-column:span 2/span 2}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-\[98vh\]{height:98vh}.md\:w-\[96vw\]{width:96vw}.md\:max-w-\[300px\]{max-width:300px}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:gap-4{gap:calc(var(--spacing) * 4)}.md\:rounded-2xl{border-radius:var(--radius-2xl)}.md\:rounded-\[2\.5rem\]{border-radius:2.5rem}.md\:rounded-\[2rem\]{border-radius:2rem}.md\:rounded-xl{border-radius:var(--radius-xl)}.md\:p-8{padding:calc(var(--spacing) * 8)}.md\:px-8{padding-inline:calc(var(--spacing) * 8)}.md\:text-left{text-align:left}.md\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:w-1\/2{width:50%}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}:where(.lg\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}.lg\:gap-x-8{column-gap:calc(var(--spacing) * 8)}.lg\:gap-y-5{row-gap:calc(var(--spacing) * 5)}.lg\:gap-y-6{row-gap:calc(var(--spacing) * 6)}.lg\:p-3{padding:calc(var(--spacing) * 3)}.lg\:p-4{padding:calc(var(--spacing) * 4)}.lg\:p-6{padding:calc(var(--spacing) * 6)}.lg\:p-8{padding:calc(var(--spacing) * 8)}.lg\:p-24{padding:calc(var(--spacing) * 24)}.lg\:py-3{padding-block:calc(var(--spacing) * 3)}.lg\:pt-48{padding-top:calc(var(--spacing) * 48)}.lg\:pb-0{padding-bottom:calc(var(--spacing) * 0)}.lg\:pb-40{padding-bottom:calc(var(--spacing) * 40)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media(min-width:80rem){.xl\:col-span-10{grid-column:span 10/span 10}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}}@media print{.print\:hidden{display:none}.print\:max-w-full{max-width:100%}.print\:rounded-none{border-radius:0}.print\:border-0{border-style:var(--tw-border-style);border-width:0}.print\:bg-white{background-color:var(--color-white)}.print\:p-0{padding:calc(var(--spacing) * 0)}.print\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.\[\&\>svg\]\:h-4>svg{height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:w-4>svg{width:calc(var(--spacing) * 4)}@media(min-width:40rem){.sm\:\[\&\>svg\]\:h-5>svg{height:calc(var(--spacing) * 5)}.sm\:\[\&\>svg\]\:w-5>svg{width:calc(var(--spacing) * 5)}}}body{background-color:#f3f4f6;font-family:Inter,sans-serif}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.fc{font-family:Inter,sans-serif}.fc-toolbar-title{color:#1f2937;font-size:1.25rem!important;font-weight:600!important}.fc-button-primary{background-color:#2563eb!important;border-color:#2563eb!important}.fc-daygrid-event{border-radius:4px;font-size:.75rem;font-weight:500}.uppercase-input,.uppercase-textarea,.uppercase-select{text-transform:uppercase}.dark-date-input::-webkit-calendar-picker-indicator{filter:invert();cursor:pointer}.fc{max-height:100%}.fc-theme-standard td,.fc-theme-standard th{border:1px solid #e5e7eb!important}.fc-timegrid-slot{height:3em!important}.fc-col-header-cell{background-color:#f9fafb;padding:8px 0!important}.fc-scrollgrid{border-radius:8px;overflow:hidden}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} diff --git a/frontend/dist/assets/index-CwbNbjIf.css b/frontend/dist/assets/index-CwbNbjIf.css deleted file mode 100644 index 28ed989..0000000 --- a/frontend/dist/assets/index-CwbNbjIf.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-800:oklch(47% .157 37.304);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-600:oklch(58.6% .253 17.585);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--animate-bounce:bounce 1s infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.-top-10{top:calc(var(--spacing) * -10)}.top-0{top:calc(var(--spacing) * 0)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-4{top:calc(var(--spacing) * 4)}.top-6{top:calc(var(--spacing) * 6)}.top-40{top:calc(var(--spacing) * 40)}.top-full{top:100%}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.-right-10{right:calc(var(--spacing) * -10)}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-2\.5{right:calc(var(--spacing) * 2.5)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-6{right:calc(var(--spacing) * 6)}.-bottom-10{bottom:calc(var(--spacing) * -10)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.-left-10{left:calc(var(--spacing) * -10)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.left-4{left:calc(var(--spacing) * 4)}.left-10{left:calc(var(--spacing) * 10)}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.z-\[100\]{z-index:100}.z-\[1002\]{z-index:1002}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-6{grid-column:span 6/span 6}.col-span-8{grid-column:span 8/span 8}.col-span-12{grid-column:span 12/span 12}.col-span-full{grid-column:1/-1}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-auto{margin-inline:auto}.-mt-8{margin-top:calc(var(--spacing) * -8)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-20{margin-top:calc(var(--spacing) * 20)}.mt-auto{margin-top:auto}.-mr-8{margin-right:calc(var(--spacing) * -8)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-20{margin-bottom:calc(var(--spacing) * 20)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.h-0\.5{height:calc(var(--spacing) * .5)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-64{height:calc(var(--spacing) * 64)}.h-72{height:calc(var(--spacing) * 72)}.h-80{height:calc(var(--spacing) * 80)}.h-96{height:calc(var(--spacing) * 96)}.h-\[2px\]{height:2px}.h-\[200px\]{height:200px}.h-\[400px\]{height:400px}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[450px\]{max-height:450px}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[160px\]{min-height:160px}.min-h-\[400px\]{min-height:400px}.min-h-\[600px\]{min-height:600px}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-\[2px\]{width:2px}.w-\[30\%\]{width:30%}.w-\[70\%\]{width:70%}.w-\[380px\]{width:380px}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[120px\]{max-width:120px}.max-w-\[200px\]{max-width:200px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[160px\]{min-width:160px}.min-w-\[200px\]{min-width:200px}.min-w-\[300px\]{min-width:300px}.flex-1{flex:1}.flex-\[2\]{flex:2}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.origin-bottom{transform-origin:bottom}.origin-top-right{transform-origin:100% 0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1\/2{--tw-translate-x: 50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-20{--tw-translate-x:calc(var(--spacing) * 20);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-1\/2{--tw-translate-y: 50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-105{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.skew-x-12{--tw-skew-x:skewX(12deg);transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform-gpu{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-bounce{animation:var(--animate-bounce)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}.gap-16{gap:calc(var(--spacing) * 16)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-12{column-gap:calc(var(--spacing) * 12)}:where(.-space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -3) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing) * 6)}.gap-y-16{row-gap:calc(var(--spacing) * 16)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-50>:not(:last-child)){border-color:var(--color-gray-50)}:where(.divide-gray-100>:not(:last-child)){border-color:var(--color-gray-100)}:where(.divide-slate-50>:not(:last-child)){border-color:var(--color-slate-50)}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.5rem\]{border-radius:1.5rem}.rounded-\[2\.2rem\]{border-radius:2.2rem}.rounded-\[2\.5rem\]{border-radius:2.5rem}.rounded-\[2rem\]{border-radius:2rem}.rounded-\[3rem\]{border-radius:3rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-br-xl{border-bottom-right-radius:var(--radius-xl)}.rounded-bl-xl{border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-8{border-style:var(--tw-border-style);border-width:8px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-none{--tw-border-style:none;border-style:none}.border-amber-100{border-color:var(--color-amber-100)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-600{border-color:var(--color-amber-600)}.border-amber-700{border-color:var(--color-amber-700)}.border-amber-800{border-color:var(--color-amber-800)}.border-blue-50{border-color:var(--color-blue-50)}.border-blue-100{border-color:var(--color-blue-100)}.border-blue-100\/50{border-color:#dbeafe80}@supports (color:color-mix(in lab,red,red)){.border-blue-100\/50{border-color:color-mix(in oklab,var(--color-blue-100) 50%,transparent)}}.border-blue-200{border-color:var(--color-blue-200)}.border-blue-300{border-color:var(--color-blue-300)}.border-blue-500{border-color:var(--color-blue-500)}.border-blue-600{border-color:var(--color-blue-600)}.border-blue-700{border-color:var(--color-blue-700)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-gray-50{border-color:var(--color-gray-50)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-200\/50{border-color:#e5e7eb80}@supports (color:color-mix(in lab,red,red)){.border-gray-200\/50{border-color:color-mix(in oklab,var(--color-gray-200) 50%,transparent)}}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-green-50{border-color:var(--color-green-50)}.border-green-100{border-color:var(--color-green-100)}.border-green-200{border-color:var(--color-green-200)}.border-green-300{border-color:var(--color-green-300)}.border-green-400{border-color:var(--color-green-400)}.border-green-600{border-color:var(--color-green-600)}.border-indigo-100{border-color:var(--color-indigo-100)}.border-indigo-300{border-color:var(--color-indigo-300)}.border-orange-100{border-color:var(--color-orange-100)}.border-purple-200{border-color:var(--color-purple-200)}.border-purple-600{border-color:var(--color-purple-600)}.border-purple-800{border-color:var(--color-purple-800)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500{border-color:var(--color-red-500)}.border-slate-50{border-color:var(--color-slate-50)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/50{border-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.border-white\/50{border-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.border-yellow-200{border-color:var(--color-yellow-200)}.border-t-blue-600{border-top-color:var(--color-blue-600)}.border-t-transparent{border-top-color:#0000}.bg-\[\#2d6a4f\]{background-color:#2d6a4f}.bg-\[\#F8FAFC\]{background-color:#f8fafc}.bg-\[\#d49a4a\]{background-color:#d49a4a}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/30{background-color:#fffbeb4d}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/30{background-color:color-mix(in oklab,var(--color-amber-50) 30%,transparent)}}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-100\/50{background-color:#fef3c680}@supports (color:color-mix(in lab,red,red)){.bg-amber-100\/50{background-color:color-mix(in oklab,var(--color-amber-100) 50%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-600{background-color:var(--color-amber-600)}.bg-amber-800{background-color:var(--color-amber-800)}.bg-black{background-color:var(--color-black)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/20{background-color:#eff6ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/20{background-color:color-mix(in oklab,var(--color-blue-50) 20%,transparent)}}.bg-blue-50\/40{background-color:#eff6ff66}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/40{background-color:color-mix(in oklab,var(--color-blue-50) 40%,transparent)}}.bg-blue-50\/50{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/50{background-color:color-mix(in oklab,var(--color-blue-50) 50%,transparent)}}.bg-blue-50\/70{background-color:#eff6ffb3}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/70{background-color:color-mix(in oklab,var(--color-blue-50) 70%,transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-100\/50{background-color:#dbeafe80}@supports (color:color-mix(in lab,red,red)){.bg-blue-100\/50{background-color:color-mix(in oklab,var(--color-blue-100) 50%,transparent)}}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/10{background-color:color-mix(in oklab,var(--color-blue-400) 10%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-600\/10{background-color:#155dfc1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-600\/10{background-color:color-mix(in oklab,var(--color-blue-600) 10%,transparent)}}.bg-blue-600\/20{background-color:#155dfc33}@supports (color:color-mix(in lab,red,red)){.bg-blue-600\/20{background-color:color-mix(in oklab,var(--color-blue-600) 20%,transparent)}}.bg-current{background-color:currentColor}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-100\/50{background-color:#d0fae580}@supports (color:color-mix(in lab,red,red)){.bg-emerald-100\/50{background-color:color-mix(in oklab,var(--color-emerald-100) 50%,transparent)}}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\/30{background-color:#f9fafb4d}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/30{background-color:color-mix(in oklab,var(--color-gray-50) 30%,transparent)}}.bg-gray-50\/40{background-color:#f9fafb66}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/40{background-color:color-mix(in oklab,var(--color-gray-50) 40%,transparent)}}.bg-gray-50\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/50{background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.bg-gray-50\/70{background-color:#f9fafbb3}@supports (color:color-mix(in lab,red,red)){.bg-gray-50\/70{background-color:color-mix(in oklab,var(--color-gray-50) 70%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-950{background-color:var(--color-gray-950)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-300{background-color:var(--color-green-300)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-50\/50{background-color:#eef2ff80}@supports (color:color-mix(in lab,red,red)){.bg-indigo-50\/50{background-color:color-mix(in oklab,var(--color-indigo-50) 50%,transparent)}}.bg-indigo-50\/60{background-color:#eef2ff99}@supports (color:color-mix(in lab,red,red)){.bg-indigo-50\/60{background-color:color-mix(in oklab,var(--color-indigo-50) 60%,transparent)}}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-200{background-color:var(--color-indigo-200)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-500{background-color:var(--color-purple-500)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-800{background-color:var(--color-purple-800)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-100\/50{background-color:#ffe2e280}@supports (color:color-mix(in lab,red,red)){.bg-red-100\/50{background-color:color-mix(in oklab,var(--color-red-100) 50%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-rose-200{background-color:var(--color-rose-200)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-50\/30{background-color:#f8fafc4d}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/30{background-color:color-mix(in oklab,var(--color-slate-50) 30%,transparent)}}.bg-slate-50\/50{background-color:#f8fafc80}@supports (color:color-mix(in lab,red,red)){.bg-slate-50\/50{background-color:color-mix(in oklab,var(--color-slate-50) 50%,transparent)}}.bg-slate-100{background-color:var(--color-slate-100)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-transparent{background-color:#0000}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white) 50%,transparent)}}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.bg-white\/70{background-color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab,red,red)){.bg-white\/95{background-color:color-mix(in oklab,var(--color-white) 95%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-l{--tw-gradient-position:to left in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-tr{--tw-gradient-position:to top right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-black\/40{--tw-gradient-from:#0006}@supports (color:color-mix(in lab,red,red)){.from-black\/40{--tw-gradient-from:color-mix(in oklab, var(--color-black) 40%, transparent)}}.from-black\/40{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-50\/50{--tw-gradient-from:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.from-blue-50\/50{--tw-gradient-from:color-mix(in oklab, var(--color-blue-50) 50%, transparent)}}.from-blue-50\/50{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-50{--tw-gradient-from:var(--color-emerald-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-gray-50{--tw-gradient-from:var(--color-gray-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-green-50{--tw-gradient-from:var(--color-green-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-orange-50{--tw-gradient-from:var(--color-orange-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-50{--tw-gradient-from:var(--color-slate-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-600{--tw-gradient-to:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-700{--tw-gradient-to:var(--color-indigo-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.p-12{padding:calc(var(--spacing) * 12)}.p-16{padding:calc(var(--spacing) * 16)}.p-20{padding:calc(var(--spacing) * 20)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-12{padding-inline:calc(var(--spacing) * 12)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-32{padding-block:calc(var(--spacing) * 32)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-32{padding-top:calc(var(--spacing) * 32)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-12{padding-left:calc(var(--spacing) * 12)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#2d6a4f\]{color:#2d6a4f}.text-amber-400{color:var(--color-amber-400)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-black{color:var(--color-black)}.text-blue-100{color:var(--color-blue-100)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-indigo-400{color:var(--color-indigo-400)}.text-indigo-500{color:var(--color-indigo-500)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-orange-500{color:var(--color-orange-500)}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-500{color:var(--color-pink-500)}.text-purple-500{color:var(--color-purple-500)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-100{color:var(--color-red-100)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-rose-600{color:var(--color-rose-600)}.text-sky-500{color:var(--color-sky-500)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-teal-500{color:var(--color-teal-500)}.text-teal-600{color:var(--color-teal-600)}.text-transparent{color:#0000}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.text-white\/70{color:color-mix(in oklab,var(--color-white) 70%,transparent)}}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.underline{text-decoration-line:underline}.decoration-blue-200{-webkit-text-decoration-color:var(--color-blue-200);text-decoration-color:var(--color-blue-200)}.underline-offset-8{text-underline-offset:8px}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-gray-500::placeholder{color:var(--color-gray-500)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.opacity-\[0\.03\]{opacity:.03}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(37\,99\,235\,0\.5\)\]{--tw-shadow:0 0 10px var(--tw-shadow-color,#2563eb80);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_30px_rgb\(0\,0\,0\,0\.04\)\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.06\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_40px_-15px_rgba\(0\,0\,0\,0\.05\)\]{--tw-shadow:0 10px 40px -15px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_-15px_rgba\(0\,0\,0\,0\.1\)\]{--tw-shadow:0 20px 50px -15px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_-15px_rgba\(0\,0\,0\,0\.03\)\]{--tw-shadow:0 20px 50px -15px var(--tw-shadow-color,#00000008);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_20px_50px_rgba\(0\,0\,0\,0\.15\)\]{--tw-shadow:0 20px 50px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_50px_100px_-20px_rgba\(0\,0\,0\,0\.2\)\]{--tw-shadow:0 50px 100px -20px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_50px_100px_-20px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0 50px 100px -20px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[2px_0_10px_rgba\(37\,99\,235\,0\.3\)\]{--tw-shadow:2px 0 10px var(--tw-shadow-color,#2563eb4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-amber-100{--tw-shadow-color:oklch(96.2% .059 95.617)}@supports (color:color-mix(in lab,red,red)){.shadow-amber-100{--tw-shadow-color:color-mix(in oklab, var(--color-amber-100) var(--tw-shadow-alpha), transparent)}}.shadow-blue-100{--tw-shadow-color:oklch(93.2% .032 255.585)}@supports (color:color-mix(in lab,red,red)){.shadow-blue-100{--tw-shadow-color:color-mix(in oklab, var(--color-blue-100) var(--tw-shadow-alpha), transparent)}}.shadow-blue-200{--tw-shadow-color:oklch(88.2% .059 254.128)}@supports (color:color-mix(in lab,red,red)){.shadow-blue-200{--tw-shadow-color:color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent)}}.shadow-blue-300{--tw-shadow-color:oklch(80.9% .105 251.813)}@supports (color:color-mix(in lab,red,red)){.shadow-blue-300{--tw-shadow-color:color-mix(in oklab, var(--color-blue-300) var(--tw-shadow-alpha), transparent)}}.shadow-emerald-100{--tw-shadow-color:oklch(95% .052 163.051)}@supports (color:color-mix(in lab,red,red)){.shadow-emerald-100{--tw-shadow-color:color-mix(in oklab, var(--color-emerald-100) var(--tw-shadow-alpha), transparent)}}.shadow-green-100{--tw-shadow-color:oklch(96.2% .044 156.743)}@supports (color:color-mix(in lab,red,red)){.shadow-green-100{--tw-shadow-color:color-mix(in oklab, var(--color-green-100) var(--tw-shadow-alpha), transparent)}}.shadow-green-200{--tw-shadow-color:oklch(92.5% .084 155.995)}@supports (color:color-mix(in lab,red,red)){.shadow-green-200{--tw-shadow-color:color-mix(in oklab, var(--color-green-200) var(--tw-shadow-alpha), transparent)}}.ring-blue-100{--tw-ring-color:var(--color-blue-100)}.ring-blue-200{--tw-ring-color:var(--color-blue-200)}.ring-blue-500{--tw-ring-color:var(--color-blue-500)}.ring-gray-300{--tw-ring-color:var(--color-gray-300)}.ring-green-100{--tw-ring-color:var(--color-green-100)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-offset-4{outline-offset:4px}.outline-gray-100{outline-color:var(--color-gray-100)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-\[80px\]{--tw-blur:blur(80px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.group-focus-within\:text-blue-500:is(:where(.group):focus-within *){color:var(--color-blue-500)}@media(hover:hover){.group-hover\:translate-x-0:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:bg-blue-600:is(:where(.group):hover *){background-color:var(--color-blue-600)}.group-hover\:bg-indigo-600:is(:where(.group):hover *){background-color:var(--color-indigo-600)}.group-hover\:bg-rose-300:is(:where(.group):hover *){background-color:var(--color-rose-300)}.group-hover\:text-blue-500:is(:where(.group):hover *){color:var(--color-blue-500)}.group-hover\:text-blue-600:is(:where(.group):hover *){color:var(--color-blue-600)}.group-hover\:text-gray-600:is(:where(.group):hover *){color:var(--color-gray-600)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:shadow-blue-200:is(:where(.group):hover *){--tw-shadow-color:oklch(88.2% .059 254.128)}@supports (color:color-mix(in lab,red,red)){.group-hover\:shadow-blue-200:is(:where(.group):hover *){--tw-shadow-color:color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent)}}.group-hover\/btn\:translate-x-1:is(:where(.group\/btn):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.selection\:bg-blue-100 ::selection{background-color:var(--color-blue-100)}.selection\:bg-blue-100::selection{background-color:var(--color-blue-100)}.selection\:text-blue-900 ::selection{color:var(--color-blue-900)}.selection\:text-blue-900::selection{color:var(--color-blue-900)}.placeholder\:text-gray-300::placeholder{color:var(--color-gray-300)}.placeholder\:text-slate-300::placeholder{color:var(--color-slate-300)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-2:before{content:var(--tw-content);top:calc(var(--spacing) * 2)}.before\:bottom-2:before{content:var(--tw-content);bottom:calc(var(--spacing) * 2)}.before\:left-\[7px\]:before{content:var(--tw-content);left:7px}.before\:w-0\.5:before{content:var(--tw-content);width:calc(var(--spacing) * .5)}.before\:bg-gray-200:before{content:var(--tw-content);background-color:var(--color-gray-200)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:pb-0:last-child{padding-bottom:calc(var(--spacing) * 0)}@media(hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-amber-400:hover{border-color:var(--color-amber-400)}.hover\:border-blue-100:hover{border-color:var(--color-blue-100)}.hover\:border-blue-200:hover{border-color:var(--color-blue-200)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-blue-400:hover{border-color:var(--color-blue-400)}.hover\:border-blue-400\/50:hover{border-color:#54a2ff80}@supports (color:color-mix(in lab,red,red)){.hover\:border-blue-400\/50:hover{border-color:color-mix(in oklab,var(--color-blue-400) 50%,transparent)}}.hover\:border-blue-500:hover{border-color:var(--color-blue-500)}.hover\:border-emerald-200:hover{border-color:var(--color-emerald-200)}.hover\:border-gray-100:hover{border-color:var(--color-gray-100)}.hover\:border-gray-200:hover{border-color:var(--color-gray-200)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:border-gray-400:hover{border-color:var(--color-gray-400)}.hover\:border-green-400:hover{border-color:var(--color-green-400)}.hover\:border-indigo-400:hover{border-color:var(--color-indigo-400)}.hover\:border-orange-400:hover{border-color:var(--color-orange-400)}.hover\:border-purple-400:hover{border-color:var(--color-purple-400)}.hover\:border-red-100:hover{border-color:var(--color-red-100)}.hover\:border-red-200:hover{border-color:var(--color-red-200)}.hover\:border-red-400:hover{border-color:var(--color-red-400)}.hover\:border-sky-400:hover{border-color:var(--color-sky-400)}.hover\:border-teal-400:hover{border-color:var(--color-teal-400)}.hover\:border-violet-400:hover{border-color:var(--color-violet-400)}.hover\:border-yellow-400:hover{border-color:var(--color-yellow-400)}.hover\:bg-\[\#1b4332\]:hover{background-color:#1b4332}.hover\:bg-amber-50:hover{background-color:var(--color-amber-50)}.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-amber-700:hover{background-color:var(--color-amber-700)}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-blue-50\/30:hover{background-color:#eff6ff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-50\/30:hover{background-color:color-mix(in oklab,var(--color-blue-50) 30%,transparent)}}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-50\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50) 50%,transparent)}}.hover\:bg-blue-200:hover{background-color:var(--color-blue-200)}.hover\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-emerald-700:hover{background-color:var(--color-emerald-700)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-50\/50:hover{background-color:#f9fafb80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-50\/50:hover{background-color:color-mix(in oklab,var(--color-gray-50) 50%,transparent)}}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-gray-300:hover{background-color:var(--color-gray-300)}.hover\:bg-gray-400:hover{background-color:var(--color-gray-400)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-green-50:hover{background-color:var(--color-green-50)}.hover\:bg-green-50\/50:hover{background-color:#f0fdf480}@supports (color:color-mix(in lab,red,red)){.hover\:bg-green-50\/50:hover{background-color:color-mix(in oklab,var(--color-green-50) 50%,transparent)}}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-50\/50:hover{background-color:#eef2ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-50\/50:hover{background-color:color-mix(in oklab,var(--color-indigo-50) 50%,transparent)}}.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-orange-50\/50:hover{background-color:#fff7ed80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-50\/50:hover{background-color:color-mix(in oklab,var(--color-orange-50) 50%,transparent)}}.hover\:bg-orange-600:hover{background-color:var(--color-orange-600)}.hover\:bg-purple-50\/50:hover{background-color:#faf5ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-50\/50:hover{background-color:color-mix(in oklab,var(--color-purple-50) 50%,transparent)}}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-50\/50:hover{background-color:#fef2f280}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-50\/50:hover{background-color:color-mix(in oklab,var(--color-red-50) 50%,transparent)}}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-sky-50\/50:hover{background-color:#f0f9ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sky-50\/50:hover{background-color:color-mix(in oklab,var(--color-sky-50) 50%,transparent)}}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-50\/50:hover{background-color:#f8fafc80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-50\/50:hover{background-color:color-mix(in oklab,var(--color-slate-50) 50%,transparent)}}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-teal-50\/50:hover{background-color:#f0fdfa80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-teal-50\/50:hover{background-color:color-mix(in oklab,var(--color-teal-50) 50%,transparent)}}.hover\:bg-teal-700:hover{background-color:var(--color-teal-700)}.hover\:bg-violet-50\/50:hover{background-color:#f5f3ff80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-violet-50\/50:hover{background-color:color-mix(in oklab,var(--color-violet-50) 50%,transparent)}}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-yellow-50\/50:hover{background-color:#fefce880}@supports (color:color-mix(in lab,red,red)){.hover\:bg-yellow-50\/50:hover{background-color:color-mix(in oklab,var(--color-yellow-50) 50%,transparent)}}.hover\:text-blue-500:hover{color:var(--color-blue-500)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-800:hover{color:var(--color-blue-800)}.hover\:text-emerald-500:hover{color:var(--color-emerald-500)}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-indigo-700:hover{color:var(--color-indigo-700)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_8px_32px_rgba\(59\,130\,246\,0\.15\)\]:hover{--tw-shadow:0 8px 32px var(--tw-shadow-color,#3b82f626);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_20px_50px_-20px_rgba\(0\,0\,0\,0\.1\)\]:hover{--tw-shadow:0 20px 50px -20px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-\[0_20px_50px_rgba\(8\,112\,184\,0\.1\)\]:hover{--tw-shadow:0 20px 50px var(--tw-shadow-color,#0870b81a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-blue-50\/50:hover{--tw-shadow-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-blue-50\/50:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-blue-50) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-blue-200:hover{--tw-shadow-color:oklch(88.2% .059 254.128)}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-blue-200:hover{--tw-shadow-color:color-mix(in oklab, var(--color-blue-200) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-emerald-200:hover{--tw-shadow-color:oklch(90.5% .093 164.15)}@supports (color:color-mix(in lab,red,red)){.hover\:shadow-emerald-200:hover{--tw-shadow-color:color-mix(in oklab, var(--color-emerald-200) var(--tw-shadow-alpha), transparent)}}}.focus\:border-2:focus{border-style:var(--tw-border-style);border-width:2px}.focus\:border-amber-300:focus{border-color:var(--color-amber-300)}.focus\:border-amber-400:focus{border-color:var(--color-amber-400)}.focus\:border-blue-300:focus{border-color:var(--color-blue-300)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:border-blue-600:focus{border-color:var(--color-blue-600)}.focus\:border-green-500:focus{border-color:var(--color-green-500)}.focus\:border-indigo-300:focus{border-color:var(--color-indigo-300)}.focus\:border-orange-400:focus{border-color:var(--color-orange-400)}.focus\:border-red-400:focus{border-color:var(--color-red-400)}.focus\:border-transparent:focus{border-color:#0000}.focus\:bg-white:focus{background-color:var(--color-white)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-blue-50:focus{--tw-ring-color:var(--color-blue-50)}.focus\:ring-blue-100:focus{--tw-ring-color:var(--color-blue-100)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-emerald-100:focus{--tw-ring-color:var(--color-emerald-100)}.focus\:ring-indigo-100:focus{--tw-ring-color:var(--color-indigo-100)}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-\[0\.98\]:active{scale:.98}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-400:disabled{background-color:var(--color-gray-400)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}@media(hover:hover){.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}}@media(min-width:40rem){.sm\:mb-4{margin-bottom:calc(var(--spacing) * 4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:h-9{height:calc(var(--spacing) * 9)}.sm\:w-9{width:calc(var(--spacing) * 9)}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:gap-2{gap:calc(var(--spacing) * 2)}:where(.sm\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.sm\:gap-x-12{column-gap:calc(var(--spacing) * 12)}.sm\:gap-y-16{row-gap:calc(var(--spacing) * 16)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-8{padding-inline:calc(var(--spacing) * 8)}.sm\:py-6{padding-block:calc(var(--spacing) * 6)}.sm\:py-10{padding-block:calc(var(--spacing) * 10)}.sm\:pr-2{padding-right:calc(var(--spacing) * 2)}.sm\:pl-2{padding-left:calc(var(--spacing) * 2)}.sm\:text-\[11px\]{font-size:11px}}@media(min-width:48rem){.md\:relative{position:relative}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-\[98vh\]{height:98vh}.md\:w-\[96vw\]{width:96vw}.md\:max-w-\[300px\]{max-width:300px}.md\:translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-end{align-items:flex-end}.md\:gap-4{gap:calc(var(--spacing) * 4)}.md\:rounded-2xl{border-radius:var(--radius-2xl)}.md\:rounded-\[2\.5rem\]{border-radius:2.5rem}.md\:rounded-\[2rem\]{border-radius:2rem}.md\:rounded-xl{border-radius:var(--radius-xl)}.md\:p-8{padding:calc(var(--spacing) * 8)}.md\:px-8{padding-inline:calc(var(--spacing) * 8)}.md\:text-left{text-align:left}.md\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:inline-block{display:inline-block}.lg\:w-1\/2{width:50%}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}:where(.lg\:space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}.lg\:gap-x-8{column-gap:calc(var(--spacing) * 8)}.lg\:gap-y-5{row-gap:calc(var(--spacing) * 5)}.lg\:gap-y-6{row-gap:calc(var(--spacing) * 6)}.lg\:p-3{padding:calc(var(--spacing) * 3)}.lg\:p-4{padding:calc(var(--spacing) * 4)}.lg\:p-6{padding:calc(var(--spacing) * 6)}.lg\:p-8{padding:calc(var(--spacing) * 8)}.lg\:p-24{padding:calc(var(--spacing) * 24)}.lg\:py-3{padding-block:calc(var(--spacing) * 3)}.lg\:pt-48{padding-top:calc(var(--spacing) * 48)}.lg\:pb-0{padding-bottom:calc(var(--spacing) * 0)}.lg\:pb-40{padding-bottom:calc(var(--spacing) * 40)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.lg\:text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.lg\:text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.lg\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media(min-width:80rem){.xl\:col-span-10{grid-column:span 10/span 10}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}}@media print{.print\:hidden{display:none}.print\:max-w-full{max-width:100%}.print\:rounded-none{border-radius:0}.print\:border-0{border-style:var(--tw-border-style);border-width:0}.print\:bg-white{background-color:var(--color-white)}.print\:p-0{padding:calc(var(--spacing) * 0)}.print\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}body{background-color:#f3f4f6;font-family:Inter,sans-serif}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.fc{font-family:Inter,sans-serif}.fc-toolbar-title{color:#1f2937;font-size:1.25rem!important;font-weight:600!important}.fc-button-primary{background-color:#2563eb!important;border-color:#2563eb!important}.fc-daygrid-event{border-radius:4px;font-size:.75rem;font-weight:500}.uppercase-input,.uppercase-textarea,.uppercase-select{text-transform:uppercase}.dark-date-input::-webkit-calendar-picker-indicator{filter:invert();cursor:pointer}.fc{max-height:100%}.fc-theme-standard td,.fc-theme-standard th{border:1px solid #e5e7eb!important}.fc-timegrid-slot{height:3em!important}.fc-col-header-cell{background-color:#f9fafb;padding:8px 0!important}.fc-scrollgrid{border-radius:8px;overflow:hidden}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} diff --git a/frontend/dist/assets/index-DBXVhurK.js b/frontend/dist/assets/index-DBXVhurK.js deleted file mode 100644 index a311e83..0000000 --- a/frontend/dist/assets/index-DBXVhurK.js +++ /dev/null @@ -1,737 +0,0 @@ -var Fy=t=>{throw TypeError(t)};var ep=(t,e,n)=>e.has(t)||Fy("Cannot "+n);var U=(t,e,n)=>(ep(t,e,"read from private field"),n?n.call(t):e.get(t)),we=(t,e,n)=>e.has(t)?Fy("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),me=(t,e,n,r)=>(ep(t,e,"write to private field"),r?r.call(t,n):e.set(t,n),n),He=(t,e,n)=>(ep(t,e,"access private method"),n);var dd=(t,e,n,r)=>({set _(i){me(t,e,i,n)},get _(){return U(t,e,r)}});(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const c of i)if(c.type==="childList")for(const d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&r(d)}).observe(document,{childList:!0,subtree:!0});function n(i){const c={};return i.integrity&&(c.integrity=i.integrity),i.referrerPolicy&&(c.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?c.credentials="include":i.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function r(i){if(i.ep)return;i.ep=!0;const c=n(i);fetch(i.href,c)}})();function _N(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var tp={exports:{}},Zi={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Vy;function Q2(){if(Vy)return Zi;Vy=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(r,i,c){var d=null;if(c!==void 0&&(d=""+c),i.key!==void 0&&(d=""+i.key),"key"in i){c={};for(var f in i)f!=="key"&&(c[f]=i[f])}else c=i;return i=c.ref,{$$typeof:t,type:r,key:d,ref:i!==void 0?i:null,props:c}}return Zi.Fragment=e,Zi.jsx=n,Zi.jsxs=n,Zi}var qy;function W2(){return qy||(qy=1,tp.exports=Q2()),tp.exports}var s=W2(),np={exports:{}},Te={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var $y;function X2(){if($y)return Te;$y=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),d=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),y=Symbol.for("react.activity"),x=Symbol.iterator;function v(T){return T===null||typeof T!="object"?null:(T=x&&T[x]||T["@@iterator"],typeof T=="function"?T:null)}var N={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},j=Object.assign,S={};function R(T,X,le){this.props=T,this.context=X,this.refs=S,this.updater=le||N}R.prototype.isReactComponent={},R.prototype.setState=function(T,X){if(typeof T!="object"&&typeof T!="function"&&T!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,T,X,"setState")},R.prototype.forceUpdate=function(T){this.updater.enqueueForceUpdate(this,T,"forceUpdate")};function w(){}w.prototype=R.prototype;function D(T,X,le){this.props=T,this.context=X,this.refs=S,this.updater=le||N}var C=D.prototype=new w;C.constructor=D,j(C,R.prototype),C.isPureReactComponent=!0;var I=Array.isArray;function L(){}var F={H:null,A:null,T:null,S:null},Y=Object.prototype.hasOwnProperty;function $(T,X,le){var se=le.ref;return{$$typeof:t,type:T,key:X,ref:se!==void 0?se:null,props:le}}function M(T,X){return $(T.type,X,T.props)}function H(T){return typeof T=="object"&&T!==null&&T.$$typeof===t}function ne(T){var X={"=":"=0",":":"=2"};return"$"+T.replace(/[=:]/g,function(le){return X[le]})}var ee=/\/+/g;function he(T,X){return typeof T=="object"&&T!==null&&T.key!=null?ne(""+T.key):X.toString(36)}function pe(T){switch(T.status){case"fulfilled":return T.value;case"rejected":throw T.reason;default:switch(typeof T.status=="string"?T.then(L,L):(T.status="pending",T.then(function(X){T.status==="pending"&&(T.status="fulfilled",T.value=X)},function(X){T.status==="pending"&&(T.status="rejected",T.reason=X)})),T.status){case"fulfilled":return T.value;case"rejected":throw T.reason}}throw T}function z(T,X,le,se,Ne){var Ae=typeof T;(Ae==="undefined"||Ae==="boolean")&&(T=null);var Re=!1;if(T===null)Re=!0;else switch(Ae){case"bigint":case"string":case"number":Re=!0;break;case"object":switch(T.$$typeof){case t:case e:Re=!0;break;case b:return Re=T._init,z(Re(T._payload),X,le,se,Ne)}}if(Re)return Ne=Ne(T),Re=se===""?"."+he(T,0):se,I(Ne)?(le="",Re!=null&&(le=Re.replace(ee,"$&/")+"/"),z(Ne,X,le,"",function(St){return St})):Ne!=null&&(H(Ne)&&(Ne=M(Ne,le+(Ne.key==null||T&&T.key===Ne.key?"":(""+Ne.key).replace(ee,"$&/")+"/")+Re)),X.push(Ne)),1;Re=0;var ft=se===""?".":se+":";if(I(T))for(var Le=0;Le>>1,re=z[te];if(0>>1;tei(le,G))sei(Ne,le)?(z[te]=Ne,z[se]=G,te=se):(z[te]=le,z[X]=G,te=X);else if(sei(Ne,G))z[te]=Ne,z[se]=G,te=se;else break e}}return oe}function i(z,oe){var G=z.sortIndex-oe.sortIndex;return G!==0?G:z.id-oe.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var d=Date,f=d.now();t.unstable_now=function(){return d.now()-f}}var h=[],p=[],b=1,y=null,x=3,v=!1,N=!1,j=!1,S=!1,R=typeof setTimeout=="function"?setTimeout:null,w=typeof clearTimeout=="function"?clearTimeout:null,D=typeof setImmediate<"u"?setImmediate:null;function C(z){for(var oe=n(p);oe!==null;){if(oe.callback===null)r(p);else if(oe.startTime<=z)r(p),oe.sortIndex=oe.expirationTime,e(h,oe);else break;oe=n(p)}}function I(z){if(j=!1,C(z),!N)if(n(h)!==null)N=!0,L||(L=!0,ne());else{var oe=n(p);oe!==null&&pe(I,oe.startTime-z)}}var L=!1,F=-1,Y=5,$=-1;function M(){return S?!0:!(t.unstable_now()-$z&&M());){var te=y.callback;if(typeof te=="function"){y.callback=null,x=y.priorityLevel;var re=te(y.expirationTime<=z);if(z=t.unstable_now(),typeof re=="function"){y.callback=re,C(z),oe=!0;break t}y===n(h)&&r(h),C(z)}else r(h);y=n(h)}if(y!==null)oe=!0;else{var T=n(p);T!==null&&pe(I,T.startTime-z),oe=!1}}break e}finally{y=null,x=G,v=!1}oe=void 0}}finally{oe?ne():L=!1}}}var ne;if(typeof D=="function")ne=function(){D(H)};else if(typeof MessageChannel<"u"){var ee=new MessageChannel,he=ee.port2;ee.port1.onmessage=H,ne=function(){he.postMessage(null)}}else ne=function(){R(H,0)};function pe(z,oe){F=R(function(){z(t.unstable_now())},oe)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(z){z.callback=null},t.unstable_forceFrameRate=function(z){0>z||125te?(z.sortIndex=G,e(p,z),n(h)===null&&z===n(p)&&(j?(w(F),F=-1):j=!0,pe(I,G-te))):(z.sortIndex=re,e(h,z),N||v||(N=!0,L||(L=!0,ne()))),z},t.unstable_shouldYield=M,t.unstable_wrapCallback=function(z){var oe=x;return function(){var G=x;x=oe;try{return z.apply(this,arguments)}finally{x=G}}}})(rp)),rp}var Wy;function K2(){return Wy||(Wy=1,sp.exports=Z2()),sp.exports}var lp={exports:{}},Vt={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Xy;function J2(){if(Xy)return Vt;Xy=1;var t=xu();function e(h){var p="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),lp.exports=J2(),lp.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ky;function eC(){if(Ky)return Ki;Ky=1;var t=K2(),e=xu(),n=MN();function r(a){var l="https://react.dev/errors/"+a;if(1re||(a.current=te[re],te[re]=null,re--)}function le(a,l){re++,te[re]=a.current,a.current=l}var se=T(null),Ne=T(null),Ae=T(null),Re=T(null);function ft(a,l){switch(le(Ae,l),le(Ne,a),le(se,null),l.nodeType){case 9:case 11:a=(a=l.documentElement)&&(a=a.namespaceURI)?fy(a):0;break;default:if(a=l.tagName,l=l.namespaceURI)l=fy(l),a=hy(l,a);else switch(a){case"svg":a=1;break;case"math":a=2;break;default:a=0}}X(se),le(se,a)}function Le(){X(se),X(Ne),X(Ae)}function St(a){a.memoizedState!==null&&le(Re,a);var l=se.current,o=hy(l,a.type);l!==o&&(le(Ne,a),le(se,o))}function Wt(a){Ne.current===a&&(X(se),X(Ne)),Re.current===a&&(X(Re),Yi._currentValue=G)}var fe,W;function de(a){if(fe===void 0)try{throw Error()}catch(o){var l=o.stack.trim().match(/\n( *(at )?)/);fe=l&&l[1]||"",W=-1)":-1g||k[u]!==q[g]){var ae=` -`+k[u].replace(" at new "," at ");return a.displayName&&ae.includes("")&&(ae=ae.replace("",a.displayName)),ae}while(1<=u&&0<=g);break}}}finally{ye=!1,Error.prepareStackTrace=o}return(o=a?a.displayName||a.name:"")?de(o):""}function Wn(a,l){switch(a.tag){case 26:case 27:case 5:return de(a.type);case 16:return de("Lazy");case 13:return a.child!==l&&l!==null?de("Suspense Fallback"):de("Suspense");case 19:return de("SuspenseList");case 0:case 15:return Me(a.type,!1);case 11:return Me(a.type.render,!1);case 1:return Me(a.type,!0);case 31:return de("Activity");default:return""}}function si(a){try{var l="",o=null;do l+=Wn(a,o),o=a,a=a.return;while(a);return l}catch(u){return` -Error generating stack: `+u.message+` -`+u.stack}}var Pu=Object.prototype.hasOwnProperty,Uu=t.unstable_scheduleCallback,Bu=t.unstable_cancelCallback,wA=t.unstable_shouldYield,CA=t.unstable_requestPaint,hn=t.unstable_now,DA=t.unstable_getCurrentPriorityLevel,Vm=t.unstable_ImmediatePriority,qm=t.unstable_UserBlockingPriority,Yo=t.unstable_NormalPriority,OA=t.unstable_LowPriority,$m=t.unstable_IdlePriority,RA=t.log,TA=t.unstable_setDisableYieldValue,ri=null,pn=null;function Xa(a){if(typeof RA=="function"&&TA(a),pn&&typeof pn.setStrictMode=="function")try{pn.setStrictMode(ri,a)}catch{}}var gn=Math.clz32?Math.clz32:MA,kA=Math.log,_A=Math.LN2;function MA(a){return a>>>=0,a===0?32:31-(kA(a)/_A|0)|0}var Qo=256,Wo=262144,Xo=4194304;function Vs(a){var l=a&42;if(l!==0)return l;switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return a&261888;case 262144:case 524288:case 1048576:case 2097152:return a&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return a&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return a}}function Zo(a,l,o){var u=a.pendingLanes;if(u===0)return 0;var g=0,m=a.suspendedLanes,E=a.pingedLanes;a=a.warmLanes;var O=u&134217727;return O!==0?(u=O&~m,u!==0?g=Vs(u):(E&=O,E!==0?g=Vs(E):o||(o=O&~a,o!==0&&(g=Vs(o))))):(O=u&~m,O!==0?g=Vs(O):E!==0?g=Vs(E):o||(o=u&~a,o!==0&&(g=Vs(o)))),g===0?0:l!==0&&l!==g&&(l&m)===0&&(m=g&-g,o=l&-l,m>=o||m===32&&(o&4194048)!==0)?l:g}function li(a,l){return(a.pendingLanes&~(a.suspendedLanes&~a.pingedLanes)&l)===0}function IA(a,l){switch(a){case 1:case 2:case 4:case 8:case 64:return l+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ym(){var a=Xo;return Xo<<=1,(Xo&62914560)===0&&(Xo=4194304),a}function Hu(a){for(var l=[],o=0;31>o;o++)l.push(a);return l}function ii(a,l){a.pendingLanes|=l,l!==268435456&&(a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0)}function LA(a,l,o,u,g,m){var E=a.pendingLanes;a.pendingLanes=o,a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0,a.expiredLanes&=o,a.entangledLanes&=o,a.errorRecoveryDisabledLanes&=o,a.shellSuspendCounter=0;var O=a.entanglements,k=a.expirationTimes,q=a.hiddenUpdates;for(o=E&~o;0"u")return null;try{return a.activeElement||a.body}catch{return a.body}}var GA=/[\n"\\]/g;function Mn(a){return a.replace(GA,function(l){return"\\"+l.charCodeAt(0).toString(16)+" "})}function Yu(a,l,o,u,g,m,E,O){a.name="",E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"?a.type=E:a.removeAttribute("type"),l!=null?E==="number"?(l===0&&a.value===""||a.value!=l)&&(a.value=""+_n(l)):a.value!==""+_n(l)&&(a.value=""+_n(l)):E!=="submit"&&E!=="reset"||a.removeAttribute("value"),l!=null?Qu(a,E,_n(l)):o!=null?Qu(a,E,_n(o)):u!=null&&a.removeAttribute("value"),g==null&&m!=null&&(a.defaultChecked=!!m),g!=null&&(a.checked=g&&typeof g!="function"&&typeof g!="symbol"),O!=null&&typeof O!="function"&&typeof O!="symbol"&&typeof O!="boolean"?a.name=""+_n(O):a.removeAttribute("name")}function lx(a,l,o,u,g,m,E,O){if(m!=null&&typeof m!="function"&&typeof m!="symbol"&&typeof m!="boolean"&&(a.type=m),l!=null||o!=null){if(!(m!=="submit"&&m!=="reset"||l!=null)){$u(a);return}o=o!=null?""+_n(o):"",l=l!=null?""+_n(l):o,O||l===a.value||(a.value=l),a.defaultValue=l}u=u??g,u=typeof u!="function"&&typeof u!="symbol"&&!!u,a.checked=O?a.checked:!!u,a.defaultChecked=!!u,E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"&&(a.name=E),$u(a)}function Qu(a,l,o){l==="number"&&ec(a.ownerDocument)===a||a.defaultValue===""+o||(a.defaultValue=""+o)}function Hr(a,l,o,u){if(a=a.options,l){l={};for(var g=0;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ju=!1;if(ya)try{var ui={};Object.defineProperty(ui,"passive",{get:function(){Ju=!0}}),window.addEventListener("test",ui,ui),window.removeEventListener("test",ui,ui)}catch{Ju=!1}var Ka=null,ef=null,nc=null;function hx(){if(nc)return nc;var a,l=ef,o=l.length,u,g="value"in Ka?Ka.value:Ka.textContent,m=g.length;for(a=0;a=pi),yx=" ",vx=!1;function Nx(a,l){switch(a){case"keyup":return mw.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ex(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var qr=!1;function bw(a,l){switch(a){case"compositionend":return Ex(l);case"keypress":return l.which!==32?null:(vx=!0,yx);case"textInput":return a=l.data,a===yx&&vx?null:a;default:return null}}function yw(a,l){if(qr)return a==="compositionend"||!rf&&Nx(a,l)?(a=hx(),nc=ef=Ka=null,qr=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:o,offset:l-a};a=u}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Rx(o)}}function kx(a,l){return a&&l?a===l?!0:a&&a.nodeType===3?!1:l&&l.nodeType===3?kx(a,l.parentNode):"contains"in a?a.contains(l):a.compareDocumentPosition?!!(a.compareDocumentPosition(l)&16):!1:!1}function _x(a){a=a!=null&&a.ownerDocument!=null&&a.ownerDocument.defaultView!=null?a.ownerDocument.defaultView:window;for(var l=ec(a.document);l instanceof a.HTMLIFrameElement;){try{var o=typeof l.contentWindow.location.href=="string"}catch{o=!1}if(o)a=l.contentWindow;else break;l=ec(a.document)}return l}function cf(a){var l=a&&a.nodeName&&a.nodeName.toLowerCase();return l&&(l==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||l==="textarea"||a.contentEditable==="true")}var Cw=ya&&"documentMode"in document&&11>=document.documentMode,$r=null,df=null,bi=null,uf=!1;function Mx(a,l,o){var u=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;uf||$r==null||$r!==ec(u)||(u=$r,"selectionStart"in u&&cf(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),bi&&xi(bi,u)||(bi=u,u=Wc(df,"onSelect"),0>=E,g-=E,la=1<<32-gn(l)+g|o<_e?(Be=ve,ve=null):Be=ve.sibling;var Xe=Q(B,ve,V[_e],ie);if(Xe===null){ve===null&&(ve=Be);break}a&&ve&&Xe.alternate===null&&l(B,ve),P=m(Xe,P,_e),We===null?Se=Xe:We.sibling=Xe,We=Xe,ve=Be}if(_e===V.length)return o(B,ve),Ge&&Na(B,_e),Se;if(ve===null){for(;_e_e?(Be=ve,ve=null):Be=ve.sibling;var vs=Q(B,ve,Xe.value,ie);if(vs===null){ve===null&&(ve=Be);break}a&&ve&&vs.alternate===null&&l(B,ve),P=m(vs,P,_e),We===null?Se=vs:We.sibling=vs,We=vs,ve=Be}if(Xe.done)return o(B,ve),Ge&&Na(B,_e),Se;if(ve===null){for(;!Xe.done;_e++,Xe=V.next())Xe=ce(B,Xe.value,ie),Xe!==null&&(P=m(Xe,P,_e),We===null?Se=Xe:We.sibling=Xe,We=Xe);return Ge&&Na(B,_e),Se}for(ve=u(ve);!Xe.done;_e++,Xe=V.next())Xe=J(ve,B,_e,Xe.value,ie),Xe!==null&&(a&&Xe.alternate!==null&&ve.delete(Xe.key===null?_e:Xe.key),P=m(Xe,P,_e),We===null?Se=Xe:We.sibling=Xe,We=Xe);return a&&ve.forEach(function(Y2){return l(B,Y2)}),Ge&&Na(B,_e),Se}function lt(B,P,V,ie){if(typeof V=="object"&&V!==null&&V.type===j&&V.key===null&&(V=V.props.children),typeof V=="object"&&V!==null){switch(V.$$typeof){case v:e:{for(var Se=V.key;P!==null;){if(P.key===Se){if(Se=V.type,Se===j){if(P.tag===7){o(B,P.sibling),ie=g(P,V.props.children),ie.return=B,B=ie;break e}}else if(P.elementType===Se||typeof Se=="object"&&Se!==null&&Se.$$typeof===Y&&tr(Se)===P.type){o(B,P.sibling),ie=g(P,V.props),Si(ie,V),ie.return=B,B=ie;break e}o(B,P);break}else l(B,P);P=P.sibling}V.type===j?(ie=Xs(V.props.children,B.mode,ie,V.key),ie.return=B,B=ie):(ie=fc(V.type,V.key,V.props,null,B.mode,ie),Si(ie,V),ie.return=B,B=ie)}return E(B);case N:e:{for(Se=V.key;P!==null;){if(P.key===Se)if(P.tag===4&&P.stateNode.containerInfo===V.containerInfo&&P.stateNode.implementation===V.implementation){o(B,P.sibling),ie=g(P,V.children||[]),ie.return=B,B=ie;break e}else{o(B,P);break}else l(B,P);P=P.sibling}ie=bf(V,B.mode,ie),ie.return=B,B=ie}return E(B);case Y:return V=tr(V),lt(B,P,V,ie)}if(pe(V))return xe(B,P,V,ie);if(ne(V)){if(Se=ne(V),typeof Se!="function")throw Error(r(150));return V=Se.call(V),De(B,P,V,ie)}if(typeof V.then=="function")return lt(B,P,yc(V),ie);if(V.$$typeof===D)return lt(B,P,gc(B,V),ie);vc(B,V)}return typeof V=="string"&&V!==""||typeof V=="number"||typeof V=="bigint"?(V=""+V,P!==null&&P.tag===6?(o(B,P.sibling),ie=g(P,V),ie.return=B,B=ie):(o(B,P),ie=xf(V,B.mode,ie),ie.return=B,B=ie),E(B)):o(B,P)}return function(B,P,V,ie){try{ji=0;var Se=lt(B,P,V,ie);return al=null,Se}catch(ve){if(ve===nl||ve===xc)throw ve;var We=xn(29,ve,null,B.mode);return We.lanes=ie,We.return=B,We}finally{}}}var ar=a0(!0),s0=a0(!1),as=!1;function Rf(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Tf(a,l){a=a.updateQueue,l.updateQueue===a&&(l.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,callbacks:null})}function ss(a){return{lane:a,tag:0,payload:null,callback:null,next:null}}function rs(a,l,o){var u=a.updateQueue;if(u===null)return null;if(u=u.shared,(Ze&2)!==0){var g=u.pending;return g===null?l.next=l:(l.next=g.next,g.next=l),u.pending=l,l=uc(a),Hx(a,null,o),l}return dc(a,u,l,o),uc(a)}function Ai(a,l,o){if(l=l.updateQueue,l!==null&&(l=l.shared,(o&4194048)!==0)){var u=l.lanes;u&=a.pendingLanes,o|=u,l.lanes=o,Wm(a,o)}}function kf(a,l){var o=a.updateQueue,u=a.alternate;if(u!==null&&(u=u.updateQueue,o===u)){var g=null,m=null;if(o=o.firstBaseUpdate,o!==null){do{var E={lane:o.lane,tag:o.tag,payload:o.payload,callback:null,next:null};m===null?g=m=E:m=m.next=E,o=o.next}while(o!==null);m===null?g=m=l:m=m.next=l}else g=m=l;o={baseState:u.baseState,firstBaseUpdate:g,lastBaseUpdate:m,shared:u.shared,callbacks:u.callbacks},a.updateQueue=o;return}a=o.lastBaseUpdate,a===null?o.firstBaseUpdate=l:a.next=l,o.lastBaseUpdate=l}var _f=!1;function wi(){if(_f){var a=tl;if(a!==null)throw a}}function Ci(a,l,o,u){_f=!1;var g=a.updateQueue;as=!1;var m=g.firstBaseUpdate,E=g.lastBaseUpdate,O=g.shared.pending;if(O!==null){g.shared.pending=null;var k=O,q=k.next;k.next=null,E===null?m=q:E.next=q,E=k;var ae=a.alternate;ae!==null&&(ae=ae.updateQueue,O=ae.lastBaseUpdate,O!==E&&(O===null?ae.firstBaseUpdate=q:O.next=q,ae.lastBaseUpdate=k))}if(m!==null){var ce=g.baseState;E=0,ae=q=k=null,O=m;do{var Q=O.lane&-536870913,J=Q!==O.lane;if(J?(Ue&Q)===Q:(u&Q)===Q){Q!==0&&Q===el&&(_f=!0),ae!==null&&(ae=ae.next={lane:0,tag:O.tag,payload:O.payload,callback:null,next:null});e:{var xe=a,De=O;Q=l;var lt=o;switch(De.tag){case 1:if(xe=De.payload,typeof xe=="function"){ce=xe.call(lt,ce,Q);break e}ce=xe;break e;case 3:xe.flags=xe.flags&-65537|128;case 0:if(xe=De.payload,Q=typeof xe=="function"?xe.call(lt,ce,Q):xe,Q==null)break e;ce=y({},ce,Q);break e;case 2:as=!0}}Q=O.callback,Q!==null&&(a.flags|=64,J&&(a.flags|=8192),J=g.callbacks,J===null?g.callbacks=[Q]:J.push(Q))}else J={lane:Q,tag:O.tag,payload:O.payload,callback:O.callback,next:null},ae===null?(q=ae=J,k=ce):ae=ae.next=J,E|=Q;if(O=O.next,O===null){if(O=g.shared.pending,O===null)break;J=O,O=J.next,J.next=null,g.lastBaseUpdate=J,g.shared.pending=null}}while(!0);ae===null&&(k=ce),g.baseState=k,g.firstBaseUpdate=q,g.lastBaseUpdate=ae,m===null&&(g.shared.lanes=0),ds|=E,a.lanes=E,a.memoizedState=ce}}function r0(a,l){if(typeof a!="function")throw Error(r(191,a));a.call(l)}function l0(a,l){var o=a.callbacks;if(o!==null)for(a.callbacks=null,a=0;am?m:8;var E=z.T,O={};z.T=O,Kf(a,!1,l,o);try{var k=g(),q=z.S;if(q!==null&&q(O,k),k!==null&&typeof k=="object"&&typeof k.then=="function"){var ae=Lw(k,u);Ri(a,l,ae,En(a))}else Ri(a,l,u,En(a))}catch(ce){Ri(a,l,{then:function(){},status:"rejected",reason:ce},En())}finally{oe.p=m,E!==null&&O.types!==null&&(E.types=O.types),z.T=E}}function Gw(){}function Xf(a,l,o,u){if(a.tag!==5)throw Error(r(476));var g=P0(a).queue;z0(a,g,l,G,o===null?Gw:function(){return U0(a),o(u)})}function P0(a){var l=a.memoizedState;if(l!==null)return l;l={memoizedState:G,baseState:G,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Aa,lastRenderedState:G},next:null};var o={};return l.next={memoizedState:o,baseState:o,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Aa,lastRenderedState:o},next:null},a.memoizedState=l,a=a.alternate,a!==null&&(a.memoizedState=l),l}function U0(a){var l=P0(a);l.next===null&&(l=a.alternate.memoizedState),Ri(a,l.next.queue,{},En())}function Zf(){return Ut(Yi)}function B0(){return Et().memoizedState}function H0(){return Et().memoizedState}function Fw(a){for(var l=a.return;l!==null;){switch(l.tag){case 24:case 3:var o=En();a=ss(o);var u=rs(l,a,o);u!==null&&(on(u,l,o),Ai(u,l,o)),l={cache:wf()},a.payload=l;return}l=l.return}}function Vw(a,l,o){var u=En();o={lane:u,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},Rc(a)?F0(l,o):(o=gf(a,l,o,u),o!==null&&(on(o,a,u),V0(o,l,u)))}function G0(a,l,o){var u=En();Ri(a,l,o,u)}function Ri(a,l,o,u){var g={lane:u,revertLane:0,gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null};if(Rc(a))F0(l,g);else{var m=a.alternate;if(a.lanes===0&&(m===null||m.lanes===0)&&(m=l.lastRenderedReducer,m!==null))try{var E=l.lastRenderedState,O=m(E,o);if(g.hasEagerState=!0,g.eagerState=O,mn(O,E))return dc(a,l,g,0),it===null&&cc(),!1}catch{}finally{}if(o=gf(a,l,g,u),o!==null)return on(o,a,u),V0(o,l,u),!0}return!1}function Kf(a,l,o,u){if(u={lane:2,revertLane:Rh(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},Rc(a)){if(l)throw Error(r(479))}else l=gf(a,o,u,2),l!==null&&on(l,a,2)}function Rc(a){var l=a.alternate;return a===ke||l!==null&&l===ke}function F0(a,l){rl=jc=!0;var o=a.pending;o===null?l.next=l:(l.next=o.next,o.next=l),a.pending=l}function V0(a,l,o){if((o&4194048)!==0){var u=l.lanes;u&=a.pendingLanes,o|=u,l.lanes=o,Wm(a,o)}}var Ti={readContext:Ut,use:wc,useCallback:xt,useContext:xt,useEffect:xt,useImperativeHandle:xt,useLayoutEffect:xt,useInsertionEffect:xt,useMemo:xt,useReducer:xt,useRef:xt,useState:xt,useDebugValue:xt,useDeferredValue:xt,useTransition:xt,useSyncExternalStore:xt,useId:xt,useHostTransitionStatus:xt,useFormState:xt,useActionState:xt,useOptimistic:xt,useMemoCache:xt,useCacheRefresh:xt};Ti.useEffectEvent=xt;var q0={readContext:Ut,use:wc,useCallback:function(a,l){return Xt().memoizedState=[a,l===void 0?null:l],a},useContext:Ut,useEffect:D0,useImperativeHandle:function(a,l,o){o=o!=null?o.concat([a]):null,Dc(4194308,4,k0.bind(null,l,a),o)},useLayoutEffect:function(a,l){return Dc(4194308,4,a,l)},useInsertionEffect:function(a,l){Dc(4,2,a,l)},useMemo:function(a,l){var o=Xt();l=l===void 0?null:l;var u=a();if(sr){Xa(!0);try{a()}finally{Xa(!1)}}return o.memoizedState=[u,l],u},useReducer:function(a,l,o){var u=Xt();if(o!==void 0){var g=o(l);if(sr){Xa(!0);try{o(l)}finally{Xa(!1)}}}else g=l;return u.memoizedState=u.baseState=g,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:g},u.queue=a,a=a.dispatch=Vw.bind(null,ke,a),[u.memoizedState,a]},useRef:function(a){var l=Xt();return a={current:a},l.memoizedState=a},useState:function(a){a=qf(a);var l=a.queue,o=G0.bind(null,ke,l);return l.dispatch=o,[a.memoizedState,o]},useDebugValue:Qf,useDeferredValue:function(a,l){var o=Xt();return Wf(o,a,l)},useTransition:function(){var a=qf(!1);return a=z0.bind(null,ke,a.queue,!0,!1),Xt().memoizedState=a,[!1,a]},useSyncExternalStore:function(a,l,o){var u=ke,g=Xt();if(Ge){if(o===void 0)throw Error(r(407));o=o()}else{if(o=l(),it===null)throw Error(r(349));(Ue&127)!==0||f0(u,l,o)}g.memoizedState=o;var m={value:o,getSnapshot:l};return g.queue=m,D0(p0.bind(null,u,m,a),[a]),u.flags|=2048,il(9,{destroy:void 0},h0.bind(null,u,m,o,l),null),o},useId:function(){var a=Xt(),l=it.identifierPrefix;if(Ge){var o=ia,u=la;o=(u&~(1<<32-gn(u)-1)).toString(32)+o,l="_"+l+"R_"+o,o=Sc++,0<\/script>",m=m.removeChild(m.firstChild);break;case"select":m=typeof u.is=="string"?E.createElement("select",{is:u.is}):E.createElement("select"),u.multiple?m.multiple=!0:u.size&&(m.size=u.size);break;default:m=typeof u.is=="string"?E.createElement(g,{is:u.is}):E.createElement(g)}}m[zt]=l,m[tn]=u;e:for(E=l.child;E!==null;){if(E.tag===5||E.tag===6)m.appendChild(E.stateNode);else if(E.tag!==4&&E.tag!==27&&E.child!==null){E.child.return=E,E=E.child;continue}if(E===l)break e;for(;E.sibling===null;){if(E.return===null||E.return===l)break e;E=E.return}E.sibling.return=E.return,E=E.sibling}l.stateNode=m;e:switch(Ht(m,g,u),g){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&Ca(l)}}return ut(l),fh(l,l.type,a===null?null:a.memoizedProps,l.pendingProps,o),null;case 6:if(a&&l.stateNode!=null)a.memoizedProps!==u&&Ca(l);else{if(typeof u!="string"&&l.stateNode===null)throw Error(r(166));if(a=Ae.current,Kr(l)){if(a=l.stateNode,o=l.memoizedProps,u=null,g=Pt,g!==null)switch(g.tag){case 27:case 5:u=g.memoizedProps}a[zt]=l,a=!!(a.nodeValue===o||u!==null&&u.suppressHydrationWarning===!0||dy(a.nodeValue,o)),a||ts(l,!0)}else a=Xc(a).createTextNode(u),a[zt]=l,l.stateNode=a}return ut(l),null;case 31:if(o=l.memoizedState,a===null||a.memoizedState!==null){if(u=Kr(l),o!==null){if(a===null){if(!u)throw Error(r(318));if(a=l.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(r(557));a[zt]=l}else Zs(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;ut(l),a=!1}else o=Ef(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=o),a=!0;if(!a)return l.flags&256?(yn(l),l):(yn(l),null);if((l.flags&128)!==0)throw Error(r(558))}return ut(l),null;case 13:if(u=l.memoizedState,a===null||a.memoizedState!==null&&a.memoizedState.dehydrated!==null){if(g=Kr(l),u!==null&&u.dehydrated!==null){if(a===null){if(!g)throw Error(r(318));if(g=l.memoizedState,g=g!==null?g.dehydrated:null,!g)throw Error(r(317));g[zt]=l}else Zs(),(l.flags&128)===0&&(l.memoizedState=null),l.flags|=4;ut(l),g=!1}else g=Ef(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=g),g=!0;if(!g)return l.flags&256?(yn(l),l):(yn(l),null)}return yn(l),(l.flags&128)!==0?(l.lanes=o,l):(o=u!==null,a=a!==null&&a.memoizedState!==null,o&&(u=l.child,g=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(g=u.alternate.memoizedState.cachePool.pool),m=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(m=u.memoizedState.cachePool.pool),m!==g&&(u.flags|=2048)),o!==a&&o&&(l.child.flags|=8192),Ic(l,l.updateQueue),ut(l),null);case 4:return Le(),a===null&&Mh(l.stateNode.containerInfo),ut(l),null;case 10:return ja(l.type),ut(l),null;case 19:if(X(Nt),u=l.memoizedState,u===null)return ut(l),null;if(g=(l.flags&128)!==0,m=u.rendering,m===null)if(g)_i(u,!1);else{if(bt!==0||a!==null&&(a.flags&128)!==0)for(a=l.child;a!==null;){if(m=Ec(a),m!==null){for(l.flags|=128,_i(u,!1),a=m.updateQueue,l.updateQueue=a,Ic(l,a),l.subtreeFlags=0,a=o,o=l.child;o!==null;)Gx(o,a),o=o.sibling;return le(Nt,Nt.current&1|2),Ge&&Na(l,u.treeForkCount),l.child}a=a.sibling}u.tail!==null&&hn()>Bc&&(l.flags|=128,g=!0,_i(u,!1),l.lanes=4194304)}else{if(!g)if(a=Ec(m),a!==null){if(l.flags|=128,g=!0,a=a.updateQueue,l.updateQueue=a,Ic(l,a),_i(u,!0),u.tail===null&&u.tailMode==="hidden"&&!m.alternate&&!Ge)return ut(l),null}else 2*hn()-u.renderingStartTime>Bc&&o!==536870912&&(l.flags|=128,g=!0,_i(u,!1),l.lanes=4194304);u.isBackwards?(m.sibling=l.child,l.child=m):(a=u.last,a!==null?a.sibling=m:l.child=m,u.last=m)}return u.tail!==null?(a=u.tail,u.rendering=a,u.tail=a.sibling,u.renderingStartTime=hn(),a.sibling=null,o=Nt.current,le(Nt,g?o&1|2:o&1),Ge&&Na(l,u.treeForkCount),a):(ut(l),null);case 22:case 23:return yn(l),If(),u=l.memoizedState!==null,a!==null?a.memoizedState!==null!==u&&(l.flags|=8192):u&&(l.flags|=8192),u?(o&536870912)!==0&&(l.flags&128)===0&&(ut(l),l.subtreeFlags&6&&(l.flags|=8192)):ut(l),o=l.updateQueue,o!==null&&Ic(l,o.retryQueue),o=null,a!==null&&a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(o=a.memoizedState.cachePool.pool),u=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(u=l.memoizedState.cachePool.pool),u!==o&&(l.flags|=2048),a!==null&&X(er),null;case 24:return o=null,a!==null&&(o=a.memoizedState.cache),l.memoizedState.cache!==o&&(l.flags|=2048),ja(At),ut(l),null;case 25:return null;case 30:return null}throw Error(r(156,l.tag))}function Ww(a,l){switch(vf(l),l.tag){case 1:return a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 3:return ja(At),Le(),a=l.flags,(a&65536)!==0&&(a&128)===0?(l.flags=a&-65537|128,l):null;case 26:case 27:case 5:return Wt(l),null;case 31:if(l.memoizedState!==null){if(yn(l),l.alternate===null)throw Error(r(340));Zs()}return a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 13:if(yn(l),a=l.memoizedState,a!==null&&a.dehydrated!==null){if(l.alternate===null)throw Error(r(340));Zs()}return a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 19:return X(Nt),null;case 4:return Le(),null;case 10:return ja(l.type),null;case 22:case 23:return yn(l),If(),a!==null&&X(er),a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 24:return ja(At),null;case 25:return null;default:return null}}function gb(a,l){switch(vf(l),l.tag){case 3:ja(At),Le();break;case 26:case 27:case 5:Wt(l);break;case 4:Le();break;case 31:l.memoizedState!==null&&yn(l);break;case 13:yn(l);break;case 19:X(Nt);break;case 10:ja(l.type);break;case 22:case 23:yn(l),If(),a!==null&&X(er);break;case 24:ja(At)}}function Mi(a,l){try{var o=l.updateQueue,u=o!==null?o.lastEffect:null;if(u!==null){var g=u.next;o=g;do{if((o.tag&a)===a){u=void 0;var m=o.create,E=o.inst;u=m(),E.destroy=u}o=o.next}while(o!==g)}}catch(O){nt(l,l.return,O)}}function os(a,l,o){try{var u=l.updateQueue,g=u!==null?u.lastEffect:null;if(g!==null){var m=g.next;u=m;do{if((u.tag&a)===a){var E=u.inst,O=E.destroy;if(O!==void 0){E.destroy=void 0,g=l;var k=o,q=O;try{q()}catch(ae){nt(g,k,ae)}}}u=u.next}while(u!==m)}}catch(ae){nt(l,l.return,ae)}}function mb(a){var l=a.updateQueue;if(l!==null){var o=a.stateNode;try{l0(l,o)}catch(u){nt(a,a.return,u)}}}function xb(a,l,o){o.props=rr(a.type,a.memoizedProps),o.state=a.memoizedState;try{o.componentWillUnmount()}catch(u){nt(a,l,u)}}function Ii(a,l){try{var o=a.ref;if(o!==null){switch(a.tag){case 26:case 27:case 5:var u=a.stateNode;break;case 30:u=a.stateNode;break;default:u=a.stateNode}typeof o=="function"?a.refCleanup=o(u):o.current=u}}catch(g){nt(a,l,g)}}function oa(a,l){var o=a.ref,u=a.refCleanup;if(o!==null)if(typeof u=="function")try{u()}catch(g){nt(a,l,g)}finally{a.refCleanup=null,a=a.alternate,a!=null&&(a.refCleanup=null)}else if(typeof o=="function")try{o(null)}catch(g){nt(a,l,g)}else o.current=null}function bb(a){var l=a.type,o=a.memoizedProps,u=a.stateNode;try{e:switch(l){case"button":case"input":case"select":case"textarea":o.autoFocus&&u.focus();break e;case"img":o.src?u.src=o.src:o.srcSet&&(u.srcset=o.srcSet)}}catch(g){nt(a,a.return,g)}}function hh(a,l,o){try{var u=a.stateNode;x2(u,a.type,o,l),u[tn]=l}catch(g){nt(a,a.return,g)}}function yb(a){return a.tag===5||a.tag===3||a.tag===26||a.tag===27&&gs(a.type)||a.tag===4}function ph(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||yb(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.tag===27&&gs(a.type)||a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function gh(a,l,o){var u=a.tag;if(u===5||u===6)a=a.stateNode,l?(o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o).insertBefore(a,l):(l=o.nodeType===9?o.body:o.nodeName==="HTML"?o.ownerDocument.body:o,l.appendChild(a),o=o._reactRootContainer,o!=null||l.onclick!==null||(l.onclick=ba));else if(u!==4&&(u===27&&gs(a.type)&&(o=a.stateNode,l=null),a=a.child,a!==null))for(gh(a,l,o),a=a.sibling;a!==null;)gh(a,l,o),a=a.sibling}function Lc(a,l,o){var u=a.tag;if(u===5||u===6)a=a.stateNode,l?o.insertBefore(a,l):o.appendChild(a);else if(u!==4&&(u===27&&gs(a.type)&&(o=a.stateNode),a=a.child,a!==null))for(Lc(a,l,o),a=a.sibling;a!==null;)Lc(a,l,o),a=a.sibling}function vb(a){var l=a.stateNode,o=a.memoizedProps;try{for(var u=a.type,g=l.attributes;g.length;)l.removeAttributeNode(g[0]);Ht(l,u,o),l[zt]=a,l[tn]=o}catch(m){nt(a,a.return,m)}}var Da=!1,Dt=!1,mh=!1,Nb=typeof WeakSet=="function"?WeakSet:Set,kt=null;function Xw(a,l){if(a=a.containerInfo,zh=ad,a=_x(a),cf(a)){if("selectionStart"in a)var o={start:a.selectionStart,end:a.selectionEnd};else e:{o=(o=a.ownerDocument)&&o.defaultView||window;var u=o.getSelection&&o.getSelection();if(u&&u.rangeCount!==0){o=u.anchorNode;var g=u.anchorOffset,m=u.focusNode;u=u.focusOffset;try{o.nodeType,m.nodeType}catch{o=null;break e}var E=0,O=-1,k=-1,q=0,ae=0,ce=a,Q=null;t:for(;;){for(var J;ce!==o||g!==0&&ce.nodeType!==3||(O=E+g),ce!==m||u!==0&&ce.nodeType!==3||(k=E+u),ce.nodeType===3&&(E+=ce.nodeValue.length),(J=ce.firstChild)!==null;)Q=ce,ce=J;for(;;){if(ce===a)break t;if(Q===o&&++q===g&&(O=E),Q===m&&++ae===u&&(k=E),(J=ce.nextSibling)!==null)break;ce=Q,Q=ce.parentNode}ce=J}o=O===-1||k===-1?null:{start:O,end:k}}else o=null}o=o||{start:0,end:0}}else o=null;for(Ph={focusedElem:a,selectionRange:o},ad=!1,kt=l;kt!==null;)if(l=kt,a=l.child,(l.subtreeFlags&1028)!==0&&a!==null)a.return=l,kt=a;else for(;kt!==null;){switch(l=kt,m=l.alternate,a=l.flags,l.tag){case 0:if((a&4)!==0&&(a=l.updateQueue,a=a!==null?a.events:null,a!==null))for(o=0;o title"))),Ht(m,u,o),m[zt]=a,Tt(m),u=m;break e;case"link":var E=Cy("link","href",g).get(u+(o.href||""));if(E){for(var O=0;Olt&&(E=lt,lt=De,De=E);var B=Tx(O,De),P=Tx(O,lt);if(B&&P&&(J.rangeCount!==1||J.anchorNode!==B.node||J.anchorOffset!==B.offset||J.focusNode!==P.node||J.focusOffset!==P.offset)){var V=ce.createRange();V.setStart(B.node,B.offset),J.removeAllRanges(),De>lt?(J.addRange(V),J.extend(P.node,P.offset)):(V.setEnd(P.node,P.offset),J.addRange(V))}}}}for(ce=[],J=O;J=J.parentNode;)J.nodeType===1&&ce.push({element:J,left:J.scrollLeft,top:J.scrollTop});for(typeof O.focus=="function"&&O.focus(),O=0;Oo?32:o,z.T=null,o=jh,jh=null;var m=fs,E=_a;if(Rt=0,fl=fs=null,_a=0,(Ze&6)!==0)throw Error(r(331));var O=Ze;if(Ze|=4,kb(m.current),Ob(m,m.current,E,o),Ze=O,Hi(0,!1),pn&&typeof pn.onPostCommitFiberRoot=="function")try{pn.onPostCommitFiberRoot(ri,m)}catch{}return!0}finally{oe.p=g,z.T=u,Xb(a,l)}}function Kb(a,l,o){l=Ln(o,l),l=nh(a.stateNode,l,2),a=rs(a,l,2),a!==null&&(ii(a,2),ca(a))}function nt(a,l,o){if(a.tag===3)Kb(a,a,o);else for(;l!==null;){if(l.tag===3){Kb(l,a,o);break}else if(l.tag===1){var u=l.stateNode;if(typeof l.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(us===null||!us.has(u))){a=Ln(o,a),o=J0(2),u=rs(l,o,2),u!==null&&(eb(o,u,l,a),ii(u,2),ca(u));break}}l=l.return}}function Ch(a,l,o){var u=a.pingCache;if(u===null){u=a.pingCache=new Jw;var g=new Set;u.set(l,g)}else g=u.get(l),g===void 0&&(g=new Set,u.set(l,g));g.has(o)||(yh=!0,g.add(o),a=s2.bind(null,a,l,o),l.then(a,a))}function s2(a,l,o){var u=a.pingCache;u!==null&&u.delete(l),a.pingedLanes|=a.suspendedLanes&o,a.warmLanes&=~o,it===a&&(Ue&o)===o&&(bt===4||bt===3&&(Ue&62914560)===Ue&&300>hn()-Uc?(Ze&2)===0&&hl(a,0):vh|=o,ul===Ue&&(ul=0)),ca(a)}function Jb(a,l){l===0&&(l=Ym()),a=Ws(a,l),a!==null&&(ii(a,l),ca(a))}function r2(a){var l=a.memoizedState,o=0;l!==null&&(o=l.retryLane),Jb(a,o)}function l2(a,l){var o=0;switch(a.tag){case 31:case 13:var u=a.stateNode,g=a.memoizedState;g!==null&&(o=g.retryLane);break;case 19:u=a.stateNode;break;case 22:u=a.stateNode._retryCache;break;default:throw Error(r(314))}u!==null&&u.delete(l),Jb(a,o)}function i2(a,l){return Uu(a,l)}var $c=null,gl=null,Dh=!1,Yc=!1,Oh=!1,ps=0;function ca(a){a!==gl&&a.next===null&&(gl===null?$c=gl=a:gl=gl.next=a),Yc=!0,Dh||(Dh=!0,c2())}function Hi(a,l){if(!Oh&&Yc){Oh=!0;do for(var o=!1,u=$c;u!==null;){if(a!==0){var g=u.pendingLanes;if(g===0)var m=0;else{var E=u.suspendedLanes,O=u.pingedLanes;m=(1<<31-gn(42|a)+1)-1,m&=g&~(E&~O),m=m&201326741?m&201326741|1:m?m|2:0}m!==0&&(o=!0,ay(u,m))}else m=Ue,m=Zo(u,u===it?m:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(m&3)===0||li(u,m)||(o=!0,ay(u,m));u=u.next}while(o);Oh=!1}}function o2(){ey()}function ey(){Yc=Dh=!1;var a=0;ps!==0&&y2()&&(a=ps);for(var l=hn(),o=null,u=$c;u!==null;){var g=u.next,m=ty(u,l);m===0?(u.next=null,o===null?$c=g:o.next=g,g===null&&(gl=o)):(o=u,(a!==0||(m&3)!==0)&&(Yc=!0)),u=g}Rt!==0&&Rt!==5||Hi(a),ps!==0&&(ps=0)}function ty(a,l){for(var o=a.suspendedLanes,u=a.pingedLanes,g=a.expirationTimes,m=a.pendingLanes&-62914561;0O)break;var ae=k.transferSize,ce=k.initiatorType;ae&&uy(ce)&&(k=k.responseEnd,E+=ae*(k"u"?null:document;function jy(a,l,o){var u=ml;if(u&&typeof l=="string"&&l){var g=Mn(l);g='link[rel="'+a+'"][href="'+g+'"]',typeof o=="string"&&(g+='[crossorigin="'+o+'"]'),Ey.has(g)||(Ey.add(g),a={rel:a,crossOrigin:o,href:l},u.querySelector(g)===null&&(l=u.createElement("link"),Ht(l,"link",a),Tt(l),u.head.appendChild(l)))}}function D2(a){Ma.D(a),jy("dns-prefetch",a,null)}function O2(a,l){Ma.C(a,l),jy("preconnect",a,l)}function R2(a,l,o){Ma.L(a,l,o);var u=ml;if(u&&a&&l){var g='link[rel="preload"][as="'+Mn(l)+'"]';l==="image"&&o&&o.imageSrcSet?(g+='[imagesrcset="'+Mn(o.imageSrcSet)+'"]',typeof o.imageSizes=="string"&&(g+='[imagesizes="'+Mn(o.imageSizes)+'"]')):g+='[href="'+Mn(a)+'"]';var m=g;switch(l){case"style":m=xl(a);break;case"script":m=bl(a)}Gn.has(m)||(a=y({rel:"preload",href:l==="image"&&o&&o.imageSrcSet?void 0:a,as:l},o),Gn.set(m,a),u.querySelector(g)!==null||l==="style"&&u.querySelector(qi(m))||l==="script"&&u.querySelector($i(m))||(l=u.createElement("link"),Ht(l,"link",a),Tt(l),u.head.appendChild(l)))}}function T2(a,l){Ma.m(a,l);var o=ml;if(o&&a){var u=l&&typeof l.as=="string"?l.as:"script",g='link[rel="modulepreload"][as="'+Mn(u)+'"][href="'+Mn(a)+'"]',m=g;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":m=bl(a)}if(!Gn.has(m)&&(a=y({rel:"modulepreload",href:a},l),Gn.set(m,a),o.querySelector(g)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(o.querySelector($i(m)))return}u=o.createElement("link"),Ht(u,"link",a),Tt(u),o.head.appendChild(u)}}}function k2(a,l,o){Ma.S(a,l,o);var u=ml;if(u&&a){var g=Ur(u).hoistableStyles,m=xl(a);l=l||"default";var E=g.get(m);if(!E){var O={loading:0,preload:null};if(E=u.querySelector(qi(m)))O.loading=5;else{a=y({rel:"stylesheet",href:a,"data-precedence":l},o),(o=Gn.get(m))&&qh(a,o);var k=E=u.createElement("link");Tt(k),Ht(k,"link",a),k._p=new Promise(function(q,ae){k.onload=q,k.onerror=ae}),k.addEventListener("load",function(){O.loading|=1}),k.addEventListener("error",function(){O.loading|=2}),O.loading|=4,Kc(E,l,u)}E={type:"stylesheet",instance:E,count:1,state:O},g.set(m,E)}}}function _2(a,l){Ma.X(a,l);var o=ml;if(o&&a){var u=Ur(o).hoistableScripts,g=bl(a),m=u.get(g);m||(m=o.querySelector($i(g)),m||(a=y({src:a,async:!0},l),(l=Gn.get(g))&&$h(a,l),m=o.createElement("script"),Tt(m),Ht(m,"link",a),o.head.appendChild(m)),m={type:"script",instance:m,count:1,state:null},u.set(g,m))}}function M2(a,l){Ma.M(a,l);var o=ml;if(o&&a){var u=Ur(o).hoistableScripts,g=bl(a),m=u.get(g);m||(m=o.querySelector($i(g)),m||(a=y({src:a,async:!0,type:"module"},l),(l=Gn.get(g))&&$h(a,l),m=o.createElement("script"),Tt(m),Ht(m,"link",a),o.head.appendChild(m)),m={type:"script",instance:m,count:1,state:null},u.set(g,m))}}function Sy(a,l,o,u){var g=(g=Ae.current)?Zc(g):null;if(!g)throw Error(r(446));switch(a){case"meta":case"title":return null;case"style":return typeof o.precedence=="string"&&typeof o.href=="string"?(l=xl(o.href),o=Ur(g).hoistableStyles,u=o.get(l),u||(u={type:"style",instance:null,count:0,state:null},o.set(l,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(o.rel==="stylesheet"&&typeof o.href=="string"&&typeof o.precedence=="string"){a=xl(o.href);var m=Ur(g).hoistableStyles,E=m.get(a);if(E||(g=g.ownerDocument||g,E={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},m.set(a,E),(m=g.querySelector(qi(a)))&&!m._p&&(E.instance=m,E.state.loading=5),Gn.has(a)||(o={rel:"preload",as:"style",href:o.href,crossOrigin:o.crossOrigin,integrity:o.integrity,media:o.media,hrefLang:o.hrefLang,referrerPolicy:o.referrerPolicy},Gn.set(a,o),m||I2(g,a,o,E.state))),l&&u===null)throw Error(r(528,""));return E}if(l&&u!==null)throw Error(r(529,""));return null;case"script":return l=o.async,o=o.src,typeof o=="string"&&l&&typeof l!="function"&&typeof l!="symbol"?(l=bl(o),o=Ur(g).hoistableScripts,u=o.get(l),u||(u={type:"script",instance:null,count:0,state:null},o.set(l,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,a))}}function xl(a){return'href="'+Mn(a)+'"'}function qi(a){return'link[rel="stylesheet"]['+a+"]"}function Ay(a){return y({},a,{"data-precedence":a.precedence,precedence:null})}function I2(a,l,o,u){a.querySelector('link[rel="preload"][as="style"]['+l+"]")?u.loading=1:(l=a.createElement("link"),u.preload=l,l.addEventListener("load",function(){return u.loading|=1}),l.addEventListener("error",function(){return u.loading|=2}),Ht(l,"link",o),Tt(l),a.head.appendChild(l))}function bl(a){return'[src="'+Mn(a)+'"]'}function $i(a){return"script[async]"+a}function wy(a,l,o){if(l.count++,l.instance===null)switch(l.type){case"style":var u=a.querySelector('style[data-href~="'+Mn(o.href)+'"]');if(u)return l.instance=u,Tt(u),u;var g=y({},o,{"data-href":o.href,"data-precedence":o.precedence,href:null,precedence:null});return u=(a.ownerDocument||a).createElement("style"),Tt(u),Ht(u,"style",g),Kc(u,o.precedence,a),l.instance=u;case"stylesheet":g=xl(o.href);var m=a.querySelector(qi(g));if(m)return l.state.loading|=4,l.instance=m,Tt(m),m;u=Ay(o),(g=Gn.get(g))&&qh(u,g),m=(a.ownerDocument||a).createElement("link"),Tt(m);var E=m;return E._p=new Promise(function(O,k){E.onload=O,E.onerror=k}),Ht(m,"link",u),l.state.loading|=4,Kc(m,o.precedence,a),l.instance=m;case"script":return m=bl(o.src),(g=a.querySelector($i(m)))?(l.instance=g,Tt(g),g):(u=o,(g=Gn.get(m))&&(u=y({},o),$h(u,g)),a=a.ownerDocument||a,g=a.createElement("script"),Tt(g),Ht(g,"link",u),a.head.appendChild(g),l.instance=g);case"void":return null;default:throw Error(r(443,l.type))}else l.type==="stylesheet"&&(l.state.loading&4)===0&&(u=l.instance,l.state.loading|=4,Kc(u,o.precedence,a));return l.instance}function Kc(a,l,o){for(var u=o.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),g=u.length?u[u.length-1]:null,m=g,E=0;E title"):null)}function L2(a,l,o){if(o===1||l.itemProp!=null)return!1;switch(a){case"meta":case"title":return!0;case"style":if(typeof l.precedence!="string"||typeof l.href!="string"||l.href==="")break;return!0;case"link":if(typeof l.rel!="string"||typeof l.href!="string"||l.href===""||l.onLoad||l.onError)break;switch(l.rel){case"stylesheet":return a=l.disabled,typeof l.precedence=="string"&&a==null;default:return!0}case"script":if(l.async&&typeof l.async!="function"&&typeof l.async!="symbol"&&!l.onLoad&&!l.onError&&l.src&&typeof l.src=="string")return!0}return!1}function Oy(a){return!(a.type==="stylesheet"&&(a.state.loading&3)===0)}function z2(a,l,o,u){if(o.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(o.state.loading&4)===0){if(o.instance===null){var g=xl(u.href),m=l.querySelector(qi(g));if(m){l=m._p,l!==null&&typeof l=="object"&&typeof l.then=="function"&&(a.count++,a=ed.bind(a),l.then(a,a)),o.state.loading|=4,o.instance=m,Tt(m);return}m=l.ownerDocument||l,u=Ay(u),(g=Gn.get(g))&&qh(u,g),m=m.createElement("link"),Tt(m);var E=m;E._p=new Promise(function(O,k){E.onload=O,E.onerror=k}),Ht(m,"link",u),o.instance=m}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(o,l),(l=o.state.preload)&&(o.state.loading&3)===0&&(a.count++,o=ed.bind(a),l.addEventListener("load",o),l.addEventListener("error",o))}}var Yh=0;function P2(a,l){return a.stylesheets&&a.count===0&&nd(a,a.stylesheets),0Yh?50:800)+l);return a.unsuspend=o,function(){a.unsuspend=null,clearTimeout(u),clearTimeout(g)}}:null}function ed(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)nd(this,this.stylesheets);else if(this.unsuspend){var a=this.unsuspend;this.unsuspend=null,a()}}}var td=null;function nd(a,l){a.stylesheets=null,a.unsuspend!==null&&(a.count++,td=new Map,l.forEach(U2,a),td=null,ed.call(a))}function U2(a,l){if(!(l.state.loading&4)){var o=td.get(a);if(o)var u=o.get(null);else{o=new Map,td.set(a,o);for(var g=a.querySelectorAll("link[data-precedence],style[data-precedence]"),m=0;m"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),ap.exports=eC(),ap.exports}var nC=tC();const ev=t=>t?t.toUpperCase():"",Fn=t=>{const e={...t};for(const n in e)typeof e[n]=="string"&&n!=="id"&&n!=="email"&&n!=="start"&&n!=="end"&&!n.includes("data")&&!n.includes("cor")&&n!=="corAgenda"&&n!=="corCartao"&&(e[n]=e[n].toUpperCase());return e},be="/api",Ee=async(t,e={})=>{const n=localStorage.getItem("SCOREODONTO_AUTH_TOKEN"),r={...e.headers,...n?{Authorization:`Bearer ${n}`}:{}};return fetch(t,{...e,headers:r})},K={dbConfig:{database:"scoreodonto"},login:async(t,e)=>{const n=t.toLowerCase().trim(),r=e.trim();try{const i=await Ee(`${be}/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:n,password:r})});if(i.ok){const c=await i.json();return localStorage.setItem("SCOREODONTO_AUTH_TOKEN",c.token),localStorage.setItem("SCOREODONTO_USER_DATA",JSON.stringify(c.user)),localStorage.setItem("SCOREODONTO_WORKSPACES",JSON.stringify(c.workspaces)),c.workspaces&&c.workspaces.length>0&&localStorage.setItem("SCOREODONTO_ACTIVE_WORKSPACE",JSON.stringify(c.workspaces[0])),!0}return!1}catch(i){return console.error("Login error:",i),!1}},logout:()=>{localStorage.removeItem("SCOREODONTO_AUTH_TOKEN"),localStorage.removeItem("SCOREODONTO_USER_DATA"),localStorage.removeItem("SCOREODONTO_WORKSPACES"),localStorage.removeItem("SCOREODONTO_ACTIVE_WORKSPACE"),window.location.href="/",window.location.reload()},isAuthenticated:()=>!!localStorage.getItem("SCOREODONTO_AUTH_TOKEN"),getCurrentUser:()=>{const t=localStorage.getItem("SCOREODONTO_USER_DATA");if(!t)return null;try{return JSON.parse(t).email}catch{return null}},getCurrentUserName:()=>{const t=localStorage.getItem("SCOREODONTO_USER_DATA");if(!t)return"USUÁRIO";try{return JSON.parse(t).nome}catch{return"USUÁRIO"}},getWorkspaces:()=>{const t=localStorage.getItem("SCOREODONTO_WORKSPACES");return t?JSON.parse(t):[]},getActiveWorkspace:()=>{const t=localStorage.getItem("SCOREODONTO_ACTIVE_WORKSPACE");return t?JSON.parse(t):null},switchWorkspace:t=>{const n=K.getWorkspaces().find(r=>r.id===t);n&&(["SCOREODONTO_CACHE_PACIENTES","SCOREODONTO_CACHE_AGENDAMENTOS","SCOREODONTO_CACHE_FINANCEIRO","SCOREODONTO_CACHE_DENTISTAS","SCOREODONTO_CACHE_GUIAS","SCOREODONTO_CACHE_GTO","SCOREODONTO_CACHE_PROCEDIMENTOS","SCOREODONTO_CACHE_PLANOS","SCOREODONTO_CACHE_NOTIFICACOES"].forEach(i=>localStorage.removeItem(i)),console.log(`[SECURITY] Cache cleared for tenant switch to: ${t}`),localStorage.setItem("SCOREODONTO_ACTIVE_WORKSPACE",JSON.stringify(n)),window.location.reload())},getCurrentRole:()=>{const t=K.getActiveWorkspace();return(t==null?void 0:t.role)||"paciente"},getDashboardStats:async()=>await(await Ee(`${be}/dashboard/stats`)).json(),isDbConfigured:()=>localStorage.getItem("SCOREODONTO_DB_CONFIGURED")==="true",runInstallScript:async t=>{const e=["--------------------------------------------------"," SCOREODONTO - ATUALIZADOR DE BANCO DE DADOS ","--------------------------------------------------","[INFO] VERIFICANDO AMBIENTE...","[OK] AMBIENTE POSTGRESQL DETECTADO.",`[INFO] CONECTANDO DB: ${K.dbConfig.database}...`,"[INFO] INICIANDO BACKUP DE SEGURANCA...",`[OK] BACKUP SALVO EM: ./bkp_database/BKP_${new Date().toISOString().replace(/[:.]/g,"-")}.SQL`,"[INFO] CONECTANDO API GOOGLE SHEETS...","[INFO] LENDO PLANILHA: 'Dados Pacientes'..."," > 1.240 LINHAS ENCONTRADAS."," > VALIDANDO DADOS (CPF, TELEFONE)...","[INFO] SINCRONIZANDO COM POSTGRESQL (scoreodonto)..."," > FORCANDO PADRAO 'UPPERCASE' EM TODOS OS CAMPOS TEXTUAIS..."," > ATUALIZANDO TABELA: PACIENTES..."," > ATUALIZANDO TABELA: FINANCEIRO..."," > ATUALIZANDO TABELA: AGENDA...","[INFO] LIMPANDO CACHE DE SESSAO...","--------------------------------------------------"," ATUALIZACAO CONCLUIDA COM SUCESSO! ","--------------------------------------------------"];for(const n of e)await new Promise(r=>setTimeout(r,600)),t(n);return localStorage.setItem("SCOREODONTO_DB_CONFIGURED","true"),!0},syncGoogleSheetsToPg:async t=>(t("INICIANDO CONEXÃO COM GOOGLE SHEETS..."),await new Promise(e=>setTimeout(e,800)),t("LENDO ABA 'DADOS PACIENTES'..."),await new Promise(e=>setTimeout(e,800)),t(`CONECTANDO AO POSTGRESQL (${K.dbConfig.database})...`),await new Promise(e=>setTimeout(e,800)),t("COMPARANDO REGISTROS (HASH CHECK)..."),await new Promise(e=>setTimeout(e,1e3)),t("INSERINDO 2 NOVOS PACIENTES NO POSTGRESQL..."),t("ATUALIZANDO 4 AGENDAMENTOS..."),await new Promise(e=>setTimeout(e,500)),t("SINCRONIZAÇÃO CONCLUÍDA COM SUCESSO!"),!0),getPacientes:async(t="",e="recentes")=>{const n=new URLSearchParams;return t.trim()&&n.set("q",t.trim()),e&&n.set("sort",e),(await Ee(`${be}/pacientes?${n}`)).json()},checkCpfExists:async t=>{const e=t.replace(/\D/g,"");if(!e)return!1;const n=await Ee(`${be}/pacientes?q=${encodeURIComponent(t)}`),{data:r}=await n.json();return(r||[]).some(c=>c.cpf.replace(/\D/g,"")===e)},savePaciente:async t=>{const e=Fn(t),n={...e,id:e.id||`p_${Date.now()}`};return await(await Ee(`${be}/pacientes`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).json()},updatePaciente:async t=>{const e=Fn(t);return await(await Ee(`${be}/pacientes/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},getGruposFamiliares:async t=>{const e=t!=null&&t.trim()?`${be}/grupos-familiares?q=${encodeURIComponent(t)}`:`${be}/grupos-familiares`,r=await(await Ee(e)).json();return Array.isArray(r)?r:[]},criarGrupoFamiliar:async(t,e)=>(await Ee(`${be}/grupos-familiares`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({nome:t,responsavel_id:e})})).json(),getMembrosFamilia:async t=>(await Ee(`${be}/grupos-familiares/${t}/membros`)).json(),getModelosReceita:async t=>{const e=t?`${be}/modelos-receita?especialidadeId=${t}`:`${be}/modelos-receita`,r=await(await Ee(e)).json();return Array.isArray(r)?r:[]},saveModeloReceita:async t=>(await Ee(`${be}/modelos-receita`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json(),updateModeloReceita:async t=>(await Ee(`${be}/modelos-receita/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json(),deleteModeloReceita:async t=>{await Ee(`${be}/modelos-receita/${t}`,{method:"DELETE"})},savePedidoExame:async t=>(await Ee(`${be}/pedidos-exame`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json(),getPedidosExame:async t=>{const e=t?`${be}/pedidos-exame?pacienteId=${t}`:`${be}/pedidos-exame`,r=await(await Ee(e)).json();return Array.isArray(r)?r:[]},getDentistas:async t=>{const e=t?`${be}/dentistas?clinicaId=${t}`:`${be}/dentistas`;return await(await Ee(e)).json()},getPlanos:async()=>await(await Ee(`${be}/planos`)).json(),updateDentista:async t=>{const e=Fn(t);return await(await Ee(`${be}/dentistas/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},saveDentista:async t=>{const e=K.getActiveWorkspace(),r={...Fn(t),id:Math.random().toString(),clinica_id:e==null?void 0:e.id};return await(await Ee(`${be}/dentistas`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)})).json()},reorderDentistas:async t=>await(await Ee(`${be}/dentistas/reorder`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({orders:t})})).json(),deleteDentista:async t=>{await Ee(`${be}/dentistas/${t}`,{method:"DELETE"})},getHorariosByDentista:async(t,e)=>await(await Ee(`${be}/dentistas/${t}/horarios?clinicaId=${e}`)).json(),saveHorario:async t=>await(await Ee(`${be}/dentistas/horarios`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json(),deleteHorario:async t=>{await Ee(`${be}/dentistas/horarios/${t}`,{method:"DELETE"})},getProductivityReport:async(t,e,n)=>await(await Ee(`${be}/reports/productivity?clinicaId=${t}&start=${e||""}&end=${n||""}`)).json(),updateEspecialidade:async t=>{const e=Fn(t);return await(await Ee(`${be}/especialidades/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},saveEspecialidade:async t=>{const n={...Fn(t),id:Math.random().toString()};return await(await Ee(`${be}/especialidades`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).json()},reorderEspecialidades:async t=>await(await Ee(`${be}/especialidades/reorder`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({orders:t})})).json(),deleteEspecialidade:async t=>{await Ee(`${be}/especialidades/${t}`,{method:"DELETE"})},updateProcedimento:async t=>{const e=Fn(t);return await(await Ee(`${be}/procedimentos/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},saveProcedimento:async t=>{const n={...Fn(t),id:Math.random().toString()};return await(await Ee(`${be}/procedimentos`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).json()},reorderProcedimentos:async t=>await(await Ee(`${be}/procedimentos/reorder`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({orders:t})})).json(),deleteProcedimento:async t=>{await Ee(`${be}/procedimentos/${t}`,{method:"DELETE"})},updatePlano:async t=>{const e=Fn(t);return await(await Ee(`${be}/planos/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},savePlano:async t=>{const n={...Fn(t),id:Math.random().toString()};return await(await Ee(`${be}/planos`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).json()},deletePlano:async t=>{await Ee(`${be}/planos/${t}`,{method:"DELETE"})},getEspecialidades:async()=>await(await Ee(`${be}/especialidades`)).json(),getProcedimentos:async()=>await(await Ee(`${be}/procedimentos`)).json(),getFinanceiro:async()=>await(await Ee(`${be}/financeiro`)).json(),saveFinanceiro:async t=>{const e=Fn(t);return await(await Ee(`${be}/financeiro`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},updateFinanceiro:async t=>{const e=Fn(t);return await(await Ee(`${be}/financeiro/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json()},deleteFinanceiro:async t=>{await Ee(`${be}/financeiro/${t}`,{method:"DELETE"})},getAgendamentos:async()=>await(await Ee(`${be}/agendamentos`,{})).json(),salvarAgendamento:async t=>{const e=await Ee(`${be}/agendamentos`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!e.ok){const n=await e.json();throw new Error(n.message||"Erro ao salvar agendamento.")}return await e.json()},atualizarAgendamento:async(t,e)=>{const n=await Ee(`${be}/agendamentos/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){const r=await n.json();throw new Error(r.message||"Erro ao atualizar agendamento.")}return await n.json()},excluirAgendamento:async t=>{await Ee(`${be}/agendamentos/${t}`,{method:"DELETE"})},getOrtoTreatments:async()=>[{id:"t1",pacienteId:"1",pacienteNome:"ANA SILVA",dataNascimento:"2014-03-15",responsavel:"MARIA SILVA",tipoPaciente:"Adolescente",triagem:{queixaPrincipal:"DENTES TORTOS NA FRENTE",historicoMedico:"NENHUMA CONDIÇÃO RELEVANTE",medicacao:"NENHUMA",alergias:"NENHUMA",respiracaoBucal:!1,habitos:"BRUXISMO LEVE NOTURNO"},diagnostico:{classeAngle:"II",perfil:"Convexo",apinhamento:"Moderado",mordida:"Profunda",linhaMedia:"1MM PARA ESQUERDA"},dataInicio:"2024-08-10",tipoAparelho:"AUTOLIGADO METÁLICO",extracoes:"NÃO",sequenciaFios:"0.12 → 0.14 → 0.16 → 0.18 → 0.20x0.25",elasticos:"CLASSE II",iprPlanejado:"NÃO",tempoEstimado:"18–24 MESES",valor:4500,formaPagamento:"PARCELADO 24X",faseAtual:"NIVELAMENTO",fioAtual:"0.16",classificacao:"CLASSE II",cooperacao:"Média",percentualConcluido:35,ultimaConsulta:"2026-01-14",proximaConsulta:"2026-02-14",mesesRestantes:14,status:"Em Tratamento",evolucoes:[{id:"ev1",data:"2024-08-10",tipo:"Colagem",procedimento:"COLAGEM APARELHO SUPERIOR E INFERIOR",proximoRetorno:"2024-09-10",fio:"0.12",higiene:8,cooperacao:"Boa"},{id:"ev2",data:"2024-09-10",tipo:"Manutenção",procedimento:"TROCA DE FIO SUPERIOR 0.14",proximoRetorno:"2024-10-10",fio:"0.14",higiene:7,cooperacao:"Boa"},{id:"ev3",data:"2024-10-10",tipo:"Troca de fio",procedimento:"TROCA DE FIO SUPERIOR 0.16 + ELÁSTICO CLASSE II",proximoRetorno:"2024-11-10",fio:"0.16",elastico:"CLASSE II",higiene:6,cooperacao:"Média"},{id:"ev4",data:"2025-11-10",tipo:"Manutenção",procedimento:"MANUTENÇÃO + PROFILAXIA",proximoRetorno:"2025-12-10",fio:"0.16",elastico:"CLASSE II",procedimentos:["Profilaxia"],higiene:5,cooperacao:"Média",observacoes:"HIGIENE ABAIXO DO IDEAL. ORIENTAÇÕES REFORÇADAS."},{id:"ev5",data:"2026-01-14",tipo:"Manutenção",procedimento:"MANUTENÇÃO CORRENTE ELÁSTICA",proximoRetorno:"2026-02-14",fio:"0.16",elastico:"CLASSE II",higiene:6,cooperacao:"Média"}],flags:[{tipo:"warning",mensagem:"HIGIENE ABAIXO DO IDEAL"},{tipo:"info",mensagem:"COOPERAÇÃO MÉDIA NAS ÚLTIMAS 3 VISITAS"}],fotos:[{url:"",tipo:"inicio",data:"2024-08-10"},{url:"",tipo:"atual",data:"2026-01-14"}]},{id:"t2",pacienteId:"2",pacienteNome:"CARLOS EDUARDO MENDES",dataNascimento:"1990-07-22",tipoPaciente:"Adulto",triagem:{queixaPrincipal:"MORDIDA CRUZADA ANTERIOR",historicoMedico:"HIPERTENSÃO CONTROLADA",medicacao:"LOSARTANA 50MG",alergias:"DIPIRONA",respiracaoBucal:!1,habitos:"NENHUM",periodonto:"RECESSÃO GENGIVAL LEVE EM 31-41",implantes:"NENHUM",recessoes:"31 E 41 - CLASSE I MILLER",mobilidade:"NENHUMA"},diagnostico:{classeAngle:"III",perfil:"Côncavo",apinhamento:"Severo",mordida:"Cruzada",linhaMedia:"3MM PARA DIREITA"},dataInicio:"2024-03-05",tipoAparelho:"AUTOLIGADO CERÂMICO",extracoes:"1º PRÉ-MOLARES SUPERIORES (14 E 24)",sequenciaFios:"0.14 → 0.16 → 0.18 → 0.19x0.25 → 0.21x0.25",elasticos:"CLASSE III",iprPlanejado:"SIM - INFERIOR ANTERIOR",tempoEstimado:"24–30 MESES",valor:7200,formaPagamento:"PARCELADO 30X",faseAtual:"FECHAMENTO DE ESPAÇOS",fioAtual:"0.19x0.25",classificacao:"CLASSE III",cooperacao:"Boa",percentualConcluido:55,ultimaConsulta:"2026-02-05",proximaConsulta:"2026-03-05",mesesRestantes:10,status:"Em Tratamento",evolucoes:[{id:"ev6",data:"2024-03-05",tipo:"Colagem",procedimento:"COLAGEM APARELHO CERÂMICO SUP/INF + EXTRAÇÕES 14 E 24",proximoRetorno:"2024-04-05",fio:"0.14",higiene:9,cooperacao:"Boa"},{id:"ev7",data:"2025-06-05",tipo:"Manutenção",procedimento:"IPR INFERIOR ANTERIOR + MOLA FECHAMENTO",proximoRetorno:"2025-07-05",fio:"0.19x0.25",procedimentos:["IPR"],higiene:8,cooperacao:"Boa"},{id:"ev8",data:"2026-02-05",tipo:"Manutenção",procedimento:"ATIVAÇÃO MOLA + ELÁSTICO CLASSE III",proximoRetorno:"2026-03-05",fio:"0.19x0.25",elastico:"CLASSE III",higiene:9,cooperacao:"Boa"}],flags:[{tipo:"danger",mensagem:"COMPLEXIDADE ALTA - APINHAMENTO SEVERO"},{tipo:"warning",mensagem:"RISCO PERIODONTAL - RECESSÃO CLASSE I"}],fotos:[{url:"",tipo:"inicio",data:"2024-03-05"},{url:"",tipo:"atual",data:"2026-02-05"}]}],saveEvolucaoOrto:async(t,e)=>{const n={id:"ev_"+Math.random().toString(36).substring(2,8),data:new Date().toISOString().split("T")[0],tipo:e.tipo||"Manutenção",procedimento:e.procedimento||"",proximoRetorno:e.proximoRetorno||"",fio:e.fio,elastico:e.elastico,procedimentos:e.procedimentos,higiene:e.higiene,cooperacao:e.cooperacao,observacoes:e.observacoes};return console.log(`[Mock] Evolução salva no tratamento ${t}:`,n),n},updateTratamentoOrto:async t=>{console.log("[Mock] Tratamento atualizado:",t)},finalizarTratamentoOrto:async(t,e)=>{console.log(`[Mock] Tratamento ${t} finalizado com contenção:`,e)},saveLead:async t=>{const e={id:Math.random().toString(),nome:ev(t.nome),sobrenome:ev(t.sobrenome),cpf:t.cpf||"",whatsapp:t.whatsapp||"",tipoInteresse:t.tipoInteresse||"Particular",dataCadastro:new Date().toISOString(),status:"Novo"};return await Ee(`${be}/leads`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),e},getLeads:async()=>await(await Ee(`${be}/leads`)).json(),getNotifications:async()=>{try{return await(await Ee(`${be}/notificacoes`)).json()}catch{return[]}},markNotificationRead:async t=>{try{await Ee(`${be}/notificacoes/${t}/read`,{method:"PUT"})}catch(e){console.error("Erro ao marcar como lida:",e)}},markAllNotificationsRead:async()=>{try{await Ee(`${be}/notificacoes/read-all`,{method:"POST"})}catch(t){console.error("Erro ao marcar todas como lidas:",t)}},deleteNotification:async t=>{try{await Ee(`${be}/notificacoes/${t}`,{method:"DELETE"})}catch(e){console.error("Erro ao excluir notificação:",e)}},getSettings:async()=>await(await Ee(`${be}/settings`)).json(),saveSettings:async t=>await(await Ee(`${be}/settings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json(),getGoogleEvents:async()=>{try{return await(await Ee(`${be}/google/events`)).json()}catch{return[]}},getContratos:async t=>{const e=t?`?paciente_id=${t}`:"";return(await Ee(`${be}/contratos${e}`)).json()},saveContrato:async t=>(await Ee(`${be}/contratos`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})).json(),updateContrato:async t=>{await Ee(`${be}/contratos/${t.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})},deleteContrato:async t=>{await Ee(`${be}/contratos/${t}`,{method:"DELETE"})}};/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const IN=(...t)=>t.filter((e,n,r)=>!!e&&e.trim()!==""&&r.indexOf(e)===n).join(" ").trim();/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const aC=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const sC=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,n,r)=>r?r.toUpperCase():n.toLowerCase());/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tv=t=>{const e=sC(t);return e.charAt(0).toUpperCase()+e.slice(1)};/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var rC={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const lC=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1};/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iC=A.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i="",children:c,iconNode:d,...f},h)=>A.createElement("svg",{ref:h,...rC,width:e,height:e,stroke:t,strokeWidth:r?Number(n)*24/Number(e):n,className:IN("lucide",i),...!c&&!lC(f)&&{"aria-hidden":"true"},...f},[...d.map(([p,b])=>A.createElement(p,b)),...Array.isArray(c)?c:[c]]));/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ue=(t,e)=>{const n=A.forwardRef(({className:r,...i},c)=>A.createElement(iC,{ref:c,iconNode:e,className:IN(`lucide-${aC(tv(t))}`,`lucide-${t}`,r),...i}));return n.displayName=tv(t),n};/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const oC=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],$l=ue("activity",oC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cC=[["path",{d:"m7 7 10 10",key:"1fmybs"}],["path",{d:"M17 7v10H7",key:"6fjiku"}]],LN=ue("arrow-down-right",cC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dC=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],zN=ue("arrow-left",dC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uC=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Us=ue("arrow-right",uC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const fC=[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]],ud=ue("arrow-up-down",fC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hC=[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]],PN=ue("arrow-up-right",hC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const pC=[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]],gC=ue("award",pC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const mC=[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],xC=ue("badge-check",mC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bC=[["rect",{width:"20",height:"12",x:"2",y:"6",rx:"2",key:"9lu3g6"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"M6 12h.01M18 12h.01",key:"113zkx"}]],UN=ue("banknote",bC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yC=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],go=ue("bell",yC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vC=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],NC=ue("book-open",vC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const EC=[["path",{d:"M10 12h4",key:"a56b0p"}],["path",{d:"M10 8h4",key:"1sr2af"}],["path",{d:"M14 21v-3a2 2 0 0 0-4 0v3",key:"1rgiei"}],["path",{d:"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2",key:"secmi2"}],["path",{d:"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16",key:"16ra0t"}]],Rg=ue("building-2",EC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jC=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]],SC=ue("calendar-days",jC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const AC=[["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M17 14h-6",key:"bkmgh3"}],["path",{d:"M13 18H7",key:"bb0bb7"}],["path",{d:"M7 14h.01",key:"1qa3f1"}],["path",{d:"M17 18h.01",key:"1bdyru"}]],wC=ue("calendar-range",AC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const CC=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],jt=ue("calendar",CC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const DC=[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",key:"18u6gg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]],Dd=ue("camera",DC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const OC=[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]],Io=ue("chart-column",OC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const RC=[["path",{d:"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",key:"pzmjnu"}],["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}]],TC=ue("chart-pie",RC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kC=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],jl=ue("check",kC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _C=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Lo=ue("chevron-down",_C);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const MC=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],$a=ue("chevron-left",MC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const IC=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Pa=ue("chevron-right",IC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const LC=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],Tg=ue("chevron-up",LC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],bu=ue("circle-alert",zC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const PC=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Ga=ue("circle-check-big",PC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const UC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],pa=ue("circle-check",UC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const BC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 12h8",key:"1wcyev"}],["path",{d:"M12 8v8",key:"napkw2"}]],BN=ue("circle-plus",BC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const HC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],GC=ue("circle-x",HC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const FC=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"m9 14 2 2 4-4",key:"df797q"}]],HN=ue("clipboard-check",FC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const VC=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]],oo=ue("clipboard-list",VC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qC=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],Yl=ue("clock",qC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $C=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],YC=ue("copy",$C);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const QC=[["rect",{width:"20",height:"14",x:"2",y:"5",rx:"2",key:"ynyp8z"}],["line",{x1:"2",x2:"22",y1:"10",y2:"10",key:"1b3vmo"}]],WC=ue("credit-card",QC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const XC=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],Sr=ue("database",XC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ZC=[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]],Fa=ue("dollar-sign",ZC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const KC=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],kg=ue("download",KC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const JC=[["path",{d:"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z",key:"1ptgy4"}],["path",{d:"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97",key:"1sl1rz"}]],eD=ue("droplets",JC);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const tD=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],nD=ue("ellipsis",tD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const aD=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],sD=ue("eye-off",aD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rD=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],lD=ue("eye",rD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iD=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]],nv=ue("file-down",iD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const oD=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],Ba=ue("file-text",oD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cD=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"m14.5 12.5-5 5",key:"b62r18"}],["path",{d:"m9.5 12.5 5 5",key:"1rk7el"}]],av=ue("file-x",cD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dD=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]],sv=ue("folder-open",dD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uD=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],yu=ue("funnel",uD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const fD=[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]],Ql=ue("grip-vertical",fD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hD=[["path",{d:"M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5",key:"mvr1a0"}]],pD=ue("heart",hD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gD=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]],mD=ue("history",gD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const xD=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],bD=ue("image",xD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yD=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],rv=ue("inbox",yD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vD=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],GN=ue("info",vD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ND=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],lv=ue("key-round",ND);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ED=[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]],jD=ue("layout-dashboard",ED);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const SD=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],Ot=ue("loader-circle",SD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const AD=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],Ld=ue("lock",AD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const wD=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],FN=ue("log-out",wD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const CD=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],_g=ue("mail",CD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const DD=[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]],VN=ue("map-pin",DD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const OD=[["path",{d:"M11 6a13 13 0 0 0 8.4-2.8A1 1 0 0 1 21 4v12a1 1 0 0 1-1.6.8A13 13 0 0 0 11 14H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z",key:"q8bfy3"}],["path",{d:"M6 14a12 12 0 0 0 2.4 7.2 2 2 0 0 0 3.2-2.4A8 8 0 0 1 10 14",key:"1853fq"}],["path",{d:"M8 6v8",key:"15ugcq"}]],qN=ue("megaphone",OD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const RD=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],$N=ue("menu",RD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const TD=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],kD=ue("message-circle",TD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _D=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],Mg=ue("message-square",_D);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const MD=[["path",{d:"M6 18h8",key:"1borvv"}],["path",{d:"M3 22h18",key:"8prr45"}],["path",{d:"M14 22a7 7 0 1 0 0-14h-1",key:"1jwaiy"}],["path",{d:"M9 14h2",key:"197e7h"}],["path",{d:"M9 12a2 2 0 0 1-2-2V6h6v4a2 2 0 0 1-2 2Z",key:"1bmzmy"}],["path",{d:"M12 6V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3",key:"1drr47"}]],ID=ue("microscope",MD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const LD=[["path",{d:"M5 12h14",key:"1ays0h"}]],YN=ue("minus",LD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const zD=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],PD=ue("palette",zD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const UD=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],zo=ue("pencil",UD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const BD=[["line",{x1:"19",x2:"5",y1:"5",y2:"19",key:"1x9vlm"}],["circle",{cx:"6.5",cy:"6.5",r:"2.5",key:"4mh3h7"}],["circle",{cx:"17.5",cy:"17.5",r:"2.5",key:"1mdrzq"}]],HD=ue("percent",BD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const GD=[["path",{d:"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",key:"9njp5v"}]],QN=ue("phone",GD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const FD=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],VD=ue("play",FD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const qD=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],gt=ue("plus",qD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const $D=[["path",{d:"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",key:"143wyd"}],["path",{d:"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6",key:"1itne7"}],["rect",{x:"6",y:"14",width:"12",height:"8",rx:"1",key:"1ue0tg"}]],Ya=ue("printer",$D);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const YD=[["path",{d:"M4.9 16.1C1 12.2 1 5.8 4.9 1.9",key:"s0qx1y"}],["path",{d:"M7.8 4.7a6.14 6.14 0 0 0-.8 7.5",key:"1idnkw"}],["circle",{cx:"12",cy:"9",r:"2",key:"1092wv"}],["path",{d:"M16.2 4.8c2 2 2.26 5.11.8 7.47",key:"ojru2q"}],["path",{d:"M19.1 1.9a9.96 9.96 0 0 1 0 14.1",key:"rhi7fg"}],["path",{d:"M9.5 18h5",key:"mfy3pd"}],["path",{d:"m8 22 4-11 4 11",key:"25yftu"}]],QD=ue("radio-tower",YD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const WD=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],vu=ue("refresh-cw",WD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const XD=[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]],ZD=ue("rocket",XD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const KD=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],iv=ue("rotate-ccw",KD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const JD=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],Po=ue("save",JD);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const eO=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],tO=ue("scissors",eO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const nO=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Qn=ue("search",nO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const aO=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],zd=ue("settings",aO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const sO=[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]],WN=ue("share-2",sO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const rO=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]],Pd=ue("shield-alert",rO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const lO=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Ar=ue("shield-check",lO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iO=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],oO=ue("shield",iO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const cO=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],dO=ue("smartphone",cO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uO=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],fO=ue("sparkles",uO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hO=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],Uo=ue("square-pen",hO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const pO=[["path",{d:"M11 2v2",key:"1539x4"}],["path",{d:"M5 2v2",key:"1yf1q8"}],["path",{d:"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1",key:"rb5t3r"}],["path",{d:"M8 15a6 6 0 0 0 12 0v-3",key:"x18d4x"}],["circle",{cx:"20",cy:"10",r:"2",key:"ts1r5v"}]],aa=ue("stethoscope",pO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gO=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],mO=ue("tag",gO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const xO=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],ov=ue("terminal",xO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bO=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],Qt=ue("trash-2",bO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const yO=[["path",{d:"M16 17h6v-6",key:"t6n2it"}],["path",{d:"m22 17-8.5-8.5-5 5L2 7",key:"x473p"}]],vO=ue("trending-down",yO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const NO=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],XN=ue("trending-up",NO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const EO=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Ig=ue("triangle-alert",EO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const jO=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],SO=ue("upload",jO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const AO=[["path",{d:"m16 11 2 2 4-4",key:"9rsbq5"}],["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],Wl=ue("user-check",AO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const wO=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]],Ud=ue("user-plus",wO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const CO=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Bo=ue("user",CO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const DO=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],sa=ue("users",DO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const OO=[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]],RO=ue("wallet",OO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const TO=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],kO=ue("wrench",TO);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _O=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Qe=ue("x",_O);/** - * @license lucide-react v0.563.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const MO=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],IO=ue("zap",MO),LO=({activeTab:t,setActiveTab:e})=>{const n=K.getCurrentRole(),r=K.getCurrentUserName(),i=K.getCurrentUser(),c=K.getActiveWorkspace(),d=(c==null?void 0:c.cor)||"#2563eb",f=[{id:"dashboard",label:"VISÃO GERAL",icon:jD},{id:"agenda",label:"AGENDA",icon:jt},{id:"pacientes",label:"PACIENTES",icon:sa},{id:"lancar-gto",label:"LANÇAR GTO",icon:oo},{id:"ortodontia",label:"ORTODONTIA",icon:$l},{id:"financeiro",label:"FINANCEIRO",icon:Fa},{id:"relatorios",label:"RELATÓRIOS",icon:Io},{id:"contratos",label:"CONTRATOS",icon:Ba},{id:"leads",label:"GESTÃO DE LEADS",icon:qN},{id:"tratamentos",label:"MEUS TRATAMENTOS",icon:oo},{id:"clinicas",label:"MINHAS CLÍNICAS",icon:Rg},{id:"dentistas",label:"DENTISTAS",icon:aa},{id:"especialidades",label:"ESPECIALIDADES",icon:gC},{id:"procedimentos",label:"PROCEDIMENTOS",icon:oo},{id:"planos",label:"PLANOS / CONVÊNIOS",icon:NC},{id:"notificacoes",label:"NOTIFICAÇÕES",icon:go},{id:"sync",label:"SINCRONIZAÇÃO",icon:vu},{id:"configuracoes",label:"CONFIGURAÇÕES",icon:zd}].filter(p=>["admin","donoclinica"].includes(n)?!0:n==="paciente"?["tratamentos","notificacoes","configuracoes"].includes(p.id):n==="dentista"?["dashboard","pacientes","tratamentos","agenda","ortodontia","notificacoes","clinicas","configuracoes","contratos"].includes(p.id):n==="funcionario"?["dashboard","leads","pacientes","tratamentos","lancar-gto","agenda","financeiro","relatorios","notificacoes","clinicas","configuracoes","contratos"].includes(p.id):!1),h=()=>{window.confirm("TEM CERTEZA QUE DESEJA SAIR DO SISTEMA?")&&K.logout()};return s.jsxs("div",{className:"w-64 bg-white border-r border-gray-200 h-screen flex flex-col shadow-xl md:shadow-none",children:[s.jsxs("div",{className:"p-6 flex items-center gap-3",children:[s.jsx("div",{className:"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold shadow-lg transition-colors duration-500",style:{backgroundColor:d},children:s.jsx(Sr,{size:18})}),s.jsxs("div",{children:[s.jsx("span",{className:"font-bold text-lg text-gray-800 block leading-tight tracking-tight",children:"SCOREODONTO"}),s.jsx("span",{className:"text-[10px] text-gray-400 font-bold uppercase tracking-wider",children:"POSTGRESQL + GOOGLE"})]})]}),s.jsx("nav",{className:"flex-1 px-4 py-2 space-y-1 overflow-y-auto custom-scrollbar",children:f.map(p=>{const b=p.icon,y=t===p.id;return s.jsxs("button",{onClick:()=>e(p.id),className:`w-full flex items-center gap-3 px-4 py-3 rounded-xl text-[11px] font-bold uppercase transition-all duration-300 group ${y?"text-white":"text-gray-500 hover:bg-gray-50"}`,style:{backgroundColor:y?d:"transparent",boxShadow:y?`0 10px 15px -5px ${d}44`:"none"},children:[s.jsx(b,{size:18,className:`${y?"text-white":"text-gray-400 group-hover:text-gray-600"} transition-colors`,style:{color:y?"#fff":void 0}}),p.label]},p.id)})}),s.jsxs("div",{className:"p-4 border-t border-gray-100 bg-gray-50/50 space-y-2",children:[s.jsxs("button",{onClick:()=>e("configuracoes"),className:"w-full flex items-center gap-3 px-3 py-2 rounded-xl transition-all group",style:{backgroundColor:t==="configuracoes"?d:"transparent"},children:[s.jsx("div",{className:"w-8 h-8 bg-gray-100 rounded-full flex items-center justify-center text-gray-500 border border-gray-200 flex-shrink-0",children:s.jsx(Bo,{size:15})}),s.jsxs("div",{className:"min-w-0 flex-1 text-left",children:[s.jsx("p",{className:`text-[10px] font-black uppercase truncate leading-none ${t==="configuracoes"?"text-white":"text-gray-700"}`,children:r}),s.jsx("p",{className:`text-[9px] font-medium truncate mt-0.5 ${t==="configuracoes"?"text-white/70":"text-gray-400"}`,children:i})]}),s.jsx(zd,{size:14,className:t==="configuracoes"?"text-white":"text-gray-400"})]}),s.jsxs("button",{onClick:h,className:"w-full flex items-center gap-3 px-4 py-2 text-red-500 hover:bg-red-50 rounded-xl text-[10px] font-black uppercase transition-all",children:[s.jsx(FN,{size:16}),"SAIR DO SISTEMA"]})]})]})};var Dr=MN();const zO=_N(Dr),ZN=A.createContext(void 0),PO=({children:t})=>{const[e,n]=A.useState([]),r=A.useCallback((c,d)=>{const f=Date.now();n(h=>[...h,{id:f,message:c,type:d}]),setTimeout(()=>{n(h=>h.filter(p=>p.id!==f))},4e3)},[]),i={toasts:e,addToast:r};return s.jsx(ZN.Provider,{value:i,children:t})},$e=()=>{const t=A.useContext(ZN);if(!t)throw new Error("useToast must be used within a ToastProvider");return{...t,success:e=>t.addToast(e,"success"),error:e=>t.addToast(e,"error"),info:e=>t.addToast(e,"info")}},UO={success:s.jsx(Ga,{className:"text-green-500",size:20}),error:s.jsx(Ig,{className:"text-red-500",size:20}),info:s.jsx(GN,{className:"text-blue-500",size:20})},BO={success:"bg-green-50 border-green-200",error:"bg-red-50 border-red-200",info:"bg-blue-50 border-blue-200"},HO=()=>{const{toasts:t}=$e(),e=document.getElementById("toast-container");return e?Dr.createPortal(s.jsx("div",{className:"fixed top-6 right-6 z-[100] space-y-3",children:t.map(n=>s.jsxs("div",{className:`w-80 p-4 rounded-xl shadow-lg flex items-start gap-3 border animate-in slide-in-from-top-4 ${BO[n.type]}`,children:[s.jsx("div",{className:"flex-shrink-0 mt-0.5",children:UO[n.type]}),s.jsx("p",{className:"flex-1 text-sm text-gray-800 font-bold uppercase",children:n.message})]},n.id))}),e):null},fn=({title:t,description:e,children:n})=>s.jsxs("div",{className:"flex justify-between items-center mb-6",children:[s.jsxs("div",{children:[s.jsx("h2",{className:"text-2xl font-bold text-gray-900 uppercase",children:t}),e&&s.jsx("p",{className:"text-gray-500 text-xs uppercase font-bold mt-1",children:e})]}),s.jsx("div",{className:"flex items-center gap-3",children:n})]});function Ie(t,e=[]){const[n,r]=A.useState(null),[i,c]=A.useState(!0),[d,f]=A.useState(null),[h,p]=A.useState(0),b=A.useCallback(async()=>{c(!0),f(null);try{const x=await t();r(x)}catch(x){f(x instanceof Error?x:new Error("An unknown error occurred"))}finally{c(!1)}},[...e,h]);return A.useEffect(()=>{b()},[b]),{data:n,isLoading:i,error:d,refresh:()=>{p(x=>x+1)}}}const GO=()=>{const[t,e]=A.useState(!1),[n,r]=A.useState([]),[i,c]=A.useState(0),d=async()=>{try{const y=await K.getNotifications();r(y),c(y.filter(x=>!x.lida).length)}catch{console.error("Erro ao carregar notificações")}};A.useEffect(()=>{d();const y=setInterval(d,3e4);return()=>clearInterval(y)},[]);const f=()=>e(!t),h=async y=>{await K.markNotificationRead(y),r(x=>x.map(v=>v.id===y?{...v,lida:!0}:v)),c(x=>Math.max(0,x-1))},p=y=>{switch(y){case"agenda":return s.jsx(jt,{size:18,className:"text-blue-500"});case"financeiro":return s.jsx(Fa,{size:18,className:"text-emerald-500"});case"lead":return s.jsx(Wl,{size:18,className:"text-amber-500"});case"sistema":return s.jsx(Pd,{size:18,className:"text-red-500"});default:return s.jsx(Mg,{size:18,className:"text-gray-500"})}},b=y=>{switch(y){case"agenda":return"Agenda";case"financeiro":return"Financeiro";case"lead":return"Novo Lead";case"sistema":return"Sistema";default:return"Geral"}};return s.jsx("div",{className:"relative z-[1002]",children:s.jsxs("div",{className:"relative",children:[s.jsxs("button",{onClick:f,className:"group relative w-11 h-11 flex items-center justify-center rounded-xl bg-white/80 backdrop-blur-md border border-white/20 shadow-[0_8px_32px_rgba(0,0,0,0.06)] hover:shadow-[0_8px_32px_rgba(59,130,246,0.15)] hover:border-blue-400/50 transition-all duration-300",children:[s.jsx(go,{size:22,className:"text-slate-600 group-hover:text-blue-600 transition-colors"}),i>0&&s.jsxs("span",{className:"absolute -top-1.5 -right-1.5 flex h-5 w-5",children:[s.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-red-400 opacity-75"}),s.jsx("span",{className:"relative inline-flex rounded-full h-5 w-5 bg-red-500 text-[10px] font-bold text-white items-center justify-center shadow-lg",children:i})]})]}),t&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"fixed inset-0",onClick:f}),s.jsxs("div",{className:"absolute right-0 mt-4 w-[380px] bg-white/95 backdrop-blur-lg rounded-2xl shadow-[0_20px_50px_rgba(0,0,0,0.15)] border border-white/20 overflow-hidden animate-in fade-in zoom-in-95 slide-in-from-top-4 duration-300 transform origin-top-right",children:[s.jsxs("div",{className:"px-6 py-5 bg-gradient-to-r from-slate-50 to-white border-b border-slate-100 flex justify-between items-center",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-slate-800 text-lg tracking-tight",children:"Centro de Notificações"}),s.jsxs("p",{className:"text-[11px] text-slate-400 font-medium uppercase tracking-wider",children:["Você tem ",i," novas mensagens"]})]}),s.jsx("button",{onClick:f,className:"p-2 hover:bg-slate-100 rounded-full transition-colors",children:s.jsx(Qe,{size:18,className:"text-slate-400"})})]}),s.jsx("div",{className:"max-h-[450px] overflow-y-auto custom-scrollbar bg-slate-50/30",children:n.length===0?s.jsxs("div",{className:"py-20 flex flex-col items-center justify-center text-center px-8",children:[s.jsx("div",{className:"w-16 h-16 bg-slate-100 rounded-full flex items-center justify-center mb-4",children:s.jsx(go,{size:32,className:"text-slate-300"})}),s.jsx("p",{className:"text-slate-500 font-medium",children:"Tudo limpo por aqui!"}),s.jsx("p",{className:"text-xs text-slate-400 mt-1",children:"Não há notificações para mostrar no momento."})]}):s.jsx("div",{className:"divide-y divide-slate-100",children:n.map(y=>s.jsxs("div",{className:`group p-5 hover:bg-white transition-all duration-200 cursor-default ${y.lida?"":"bg-blue-50/40 relative"}`,children:[!y.lida&&s.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-1 bg-blue-500 rounded-r-full"}),s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:`mt-1 h-10 w-10 flex-shrink-0 flex items-center justify-center rounded-xl ${y.tipo==="agenda"?"bg-blue-100 text-blue-600":y.tipo==="financeiro"?"bg-emerald-100 text-emerald-600":y.tipo==="lead"?"bg-amber-100 text-amber-600":"bg-red-100 text-red-600"}`,children:p(y.tipo)}),s.jsxs("div",{className:"flex-1",children:[s.jsxs("div",{className:"flex justify-between items-center mb-1",children:[s.jsx("span",{className:"text-[11px] font-bold text-slate-400 uppercase tracking-wide",children:b(y.tipo)}),s.jsx("span",{className:"text-[10px] text-slate-400",children:new Date(y.data).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})})]}),s.jsx("h4",{className:`text-sm font-bold leading-tight ${y.lida?"text-slate-600":"text-slate-900"}`,children:y.titulo}),s.jsx("p",{className:"text-xs text-slate-500 mt-1 line-clamp-2 leading-relaxed",children:y.mensagem}),!y.lida&&s.jsx("button",{onClick:()=>h(y.id),className:"text-[11px] text-blue-600 font-bold mt-3 opacity-0 group-hover:opacity-100 transition-opacity hover:underline",children:"MARCAR COMO LIDA"})]})]})]},y.id))})}),s.jsx("div",{className:"p-4 bg-white border-t border-slate-100 text-center",children:s.jsx("button",{onClick:()=>{history.pushState({},"","/notificacoes"),e(!1)},className:"text-xs font-bold text-slate-500 hover:text-blue-600 transition-colors tracking-widest uppercase",children:"Histórico Completo"})})]})]})]})})},fd=({title:t,value:e,icon:n,trend:r,isPositive:i,color:c,onClick:d})=>{const f={blue:"bg-blue-50 text-blue-600",green:"bg-emerald-50 text-emerald-600",purple:"bg-indigo-50 text-indigo-600",amber:"bg-amber-50 text-amber-600"};return s.jsxs("div",{onClick:d,className:`bg-white rounded-[2rem] p-8 border border-gray-100 shadow-[0_10px_40px_-15px_rgba(0,0,0,0.05)] hover:shadow-[0_20px_50px_-20px_rgba(0,0,0,0.1)] transition-all duration-500 group relative overflow-hidden ${d?"cursor-pointer":""}`,children:[s.jsx("div",{className:"absolute top-0 right-0 w-32 h-32 opacity-[0.03] -mr-8 -mt-8 rounded-full bg-current transform group-hover:scale-110 transition-transform duration-700"}),s.jsx("div",{className:"flex justify-between items-start relative z-10",children:s.jsxs("div",{className:"space-y-4",children:[s.jsx("div",{className:`w-12 h-12 ${f[c]} rounded-2xl flex items-center justify-center mb-2 group-hover:scale-110 transition-transform`,children:n}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-[0.2em]",children:t}),s.jsx("h3",{className:"text-3xl font-black text-gray-900 tracking-tight mt-1",children:e})]}),r&&s.jsxs("div",{className:`flex items-center gap-1.5 text-xs font-bold ${i?"text-emerald-600":"text-rose-600"}`,children:[s.jsx("div",{className:`p-0.5 rounded-full ${i?"bg-emerald-100":"bg-rose-100"}`,children:i?s.jsx(PN,{size:12}):s.jsx(LN,{size:12})}),r]})]})})]})},FO=()=>{const{data:t,isLoading:e}=Ie(K.getDashboardStats),n=A.useMemo(()=>{if(!(t!=null&&t.growth)||t.growth.length===0)return Array(6).fill(null).map((h,p)=>({label:`MÊS ${p+1}`,receita:0,despesa:0,heightP:"0%",heightR:"0%"}));const f=Math.max(...t.growth.map(h=>Math.max(parseFloat(h.receita),parseFloat(h.despesa))),1e3);return t.growth.map(h=>{const[p,b]=h.mes.split("-");return{label:new Date(parseInt(p),parseInt(b)-1).toLocaleString("pt-BR",{month:"short"}).toUpperCase(),receita:parseFloat(h.receita),despesa:parseFloat(h.despesa),heightR:`${parseFloat(h.receita)/f*100}%`,heightD:`${parseFloat(h.despesa)/f*100}%`}}).slice(-6)},[t]),r=K.getCurrentRole(),i=["admin","donoclinica","funcionario"].includes(r);if(e)return s.jsx("div",{className:"flex items-center justify-center h-96",children:s.jsx("div",{className:"w-12 h-12 border-4 border-blue-600 border-t-transparent rounded-full animate-spin"})});const c=(t==null?void 0:t.stats)||{totalPacientes:0,totalAgendamentos:0,totalLeads:0,faturamentoTotal:0},d=(t==null?void 0:t.recentAgendamentos)||[];return s.jsxs("div",{className:"space-y-10 pb-10",children:[s.jsxs("header",{className:"flex flex-col md:flex-row md:items-end justify-between gap-6",children:[s.jsx("div",{children:s.jsx(fn,{title:"DASHBOARD ANALÍTICO",description:"Informações consolidadas em tempo real da sua clínica."})}),s.jsxs("div",{className:"flex items-center gap-3",children:[(r==="admin"||r==="donoclinica"||r==="funcionario")&&s.jsxs("button",{onClick:()=>history.pushState({},"","/relatorios"),className:"bg-white text-gray-900 border border-gray-200 px-6 py-3 rounded-2xl text-xs font-black uppercase tracking-widest hover:bg-gray-50 transition-all flex items-center gap-2 shadow-sm",children:[s.jsx(Yl,{size:16})," Relatórios"]}),(r==="admin"||r==="donoclinica"||r==="funcionario")&&s.jsxs("button",{onClick:()=>history.pushState({},"","/pacientes"),className:"bg-blue-600 text-white px-6 py-3 rounded-2xl text-xs font-black uppercase tracking-widest hover:bg-blue-700 hover:shadow-xl hover:shadow-blue-200 transition-all flex items-center gap-2 shadow-lg shadow-blue-100",children:[s.jsx(gt,{size:16})," Novo Paciente"]}),s.jsx(GO,{})]})]}),s.jsxs("div",{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-${i?"4":"2"} gap-8`,children:[s.jsx(fd,{title:"Pacientes Ativos",value:c.totalPacientes,icon:s.jsx(sa,{size:24}),trend:"+12% este mês",isPositive:!0,color:"blue",onClick:()=>history.pushState({},"","/pacientes")}),i&&s.jsx(fd,{title:"Faturamento Bruto",value:new Intl.NumberFormat("pt-BR",{style:"currency",currency:"BRL"}).format(c.faturamentoTotal),icon:s.jsx(Fa,{size:24}),trend:"+5.4% vs mês ant.",isPositive:!0,color:"green",onClick:()=>history.pushState({},"","/financeiro")}),s.jsx(fd,{title:"Agendamentos",value:c.totalAgendamentos,icon:s.jsx(jt,{size:24}),trend:"82% de ocupação",isPositive:!0,color:"purple",onClick:()=>history.pushState({},"","/agenda")}),i&&s.jsx(fd,{title:"Novas Leads",value:c.totalLeads,icon:s.jsx(qN,{size:24}),trend:"-2% vs ontem",isPositive:!1,color:"amber",onClick:()=>history.pushState({},"","/leads")})]}),s.jsxs("div",{className:`grid lg:grid-cols-${i?"3":"1"} gap-8`,children:[i&&s.jsxs("div",{className:"lg:col-span-2 bg-white rounded-[2.5rem] p-10 border border-gray-100 shadow-[0_20px_50px_-15px_rgba(0,0,0,0.03)]",children:[s.jsxs("div",{className:"flex justify-between items-center mb-10",children:[s.jsxs("div",{children:[s.jsx("h4",{className:"text-xl font-black text-gray-900 uppercase tracking-tighter italic",children:"Crescimento Mensal"}),s.jsx("p",{className:"text-xs font-bold text-gray-400 mt-1 uppercase",children:"Receitas vs Despesas Reais"})]}),s.jsxs("select",{id:"chart-period-dashboard",name:"chart-period",className:"bg-gray-50 border-none text-[10px] font-black uppercase tracking-widest px-4 py-2 rounded-xl focus:ring-2 focus:ring-blue-100 cursor-pointer",children:[s.jsx("option",{value:"6m",children:"Últimos 6 meses"}),s.jsx("option",{value:"year",children:"Este Ano"})]})]}),s.jsx("div",{className:"h-64 flex items-end justify-between gap-4 px-4",children:n.map((f,h)=>s.jsxs("div",{className:"flex-1 flex flex-col items-center gap-3 group",children:[s.jsxs("div",{className:"w-full flex justify-center gap-1 items-end h-[200px] bg-slate-50/50 rounded-2xl p-1",children:[s.jsx("div",{title:`Despesa: R$ ${f.despesa}`,className:"w-1/3 bg-rose-200 rounded-lg group-hover:bg-rose-300 transition-all duration-500 origin-bottom",style:{height:f.heightD||"5%"}}),s.jsx("div",{title:`Receita: R$ ${f.receita}`,className:"w-1/3 bg-blue-500 rounded-lg group-hover:bg-blue-600 shadow-sm group-hover:shadow-blue-200 transition-all duration-500 origin-bottom",style:{height:f.heightR||"5%"}})]}),s.jsx("span",{className:"text-[10px] font-black text-gray-400 uppercase tracking-tighter",children:f.label})]},h))}),s.jsxs("div",{className:"flex justify-center gap-6 mt-6",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-3 h-3 bg-blue-500 rounded-sm"}),s.jsx("span",{className:"text-[10px] font-bold text-gray-500 uppercase",children:"Receitas"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-3 h-3 bg-rose-200 rounded-sm"}),s.jsx("span",{className:"text-[10px] font-bold text-gray-500 uppercase",children:"Despesas"})]})]})]}),s.jsxs("div",{className:"bg-gray-900 rounded-[2.5rem] p-10 shadow-2xl shadow-blue-200 overflow-hidden relative",children:[s.jsx("div",{className:"absolute top-0 right-0 w-32 h-32 bg-blue-600/20 blur-[80px] rounded-full"}),s.jsxs("div",{className:"relative z-10 h-full flex flex-col",children:[s.jsx("h4",{className:"text-xl font-black text-white uppercase tracking-tighter italic mb-8",children:"Últimos Agendamentos"}),s.jsx("div",{className:"space-y-6 flex-1 overflow-y-auto custom-scrollbar pr-2",children:d.length>0?d.map(f=>s.jsxs("div",{onClick:()=>history.pushState({},"","/agenda"),className:"flex items-center gap-4 group cursor-pointer",children:[s.jsx("div",{className:"w-12 h-12 rounded-2xl bg-white/10 flex items-center justify-center text-blue-400 group-hover:bg-blue-600 group-hover:text-white transition-all duration-300 flex-shrink-0",children:s.jsx(jt,{size:20})}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("div",{className:"text-sm font-black text-white uppercase tracking-tight truncate",children:f.pacientenome||"Paciente"}),s.jsxs("div",{className:"text-[10px] font-bold text-gray-400 uppercase tracking-widest mt-0.5 truncate",children:[f.dentistaNome||"Dr. Dentista"," • ",new Date(f.start_time).toLocaleDateString("pt-BR")," ",new Date(f.start_time).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})]})]}),s.jsx(Pa,{size:16,className:"text-gray-600 group-hover:text-white group-hover:translate-x-1 transition-all"})]},f.id)):s.jsxs("div",{className:"flex flex-col items-center justify-center py-10 opacity-40",children:[s.jsx(jt,{size:40,className:"text-white mb-2"}),s.jsx("p",{className:"text-white text-[10px] font-bold uppercase tracking-widest",children:"Nenhum agendamento recente."})]})}),s.jsxs("button",{onClick:()=>history.pushState({},"","/agenda"),className:"w-full mt-8 bg-white/5 border border-white/10 text-white py-4 rounded-2xl text-[10px] font-black uppercase tracking-widest hover:bg-white/10 transition-all flex items-center justify-center gap-2 group",children:["Ver Agenda Completa ",s.jsx(Us,{size:14,className:"group-hover:translate-x-1 transition-transform"})]})]})]})]})]})},VO=()=>s.jsx("div",{className:"col-span-3 flex justify-center items-center py-10",children:s.jsx(Ot,{className:"animate-spin text-blue-600",size:32})}),qO=({error:t})=>s.jsxs("div",{className:"col-span-3 text-center py-10 text-red-500 uppercase font-bold text-sm",children:["ERRO AO CARREGAR LEADS: ",t.message]}),$O=({onClose:t,onSaved:e})=>{const n=$e(),[r,i]=A.useState({nome:"",sobrenome:"",whatsapp:"",tipoInteresse:"Particular"});A.useEffect(()=>{const d=f=>{f.key==="Escape"&&t()};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[t]);const c=async d=>{if(d.preventDefault(),!r.nome||!r.whatsapp){n.error("PREENCHA NOME E WHATSAPP.");return}try{await K.saveLead({...r,status:"Novo",dataCadastro:new Date().toISOString()}),n.success("LEAD CADASTRADO!"),e(),t()}catch{n.error("ERRO AO CADASTRAR LEAD.")}};return s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-green-50 to-white",children:[s.jsxs("h2",{className:"text-base font-bold text-gray-800 uppercase flex items-center gap-2",children:[s.jsx(Ud,{size:18,className:"text-green-500"})," CADASTRAR NOVO LEAD"]}),s.jsx("button",{onClick:t,className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:s.jsxs("form",{onSubmit:c,className:"space-y-4 max-w-2xl mx-auto",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"NOME"}),s.jsx("input",{type:"text",value:r.nome,onChange:d=>i(f=>({...f,nome:d.target.value.toUpperCase()})),className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5 text-sm font-semibold uppercase-input",placeholder:"NOME",required:!0})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"SOBRENOME"}),s.jsx("input",{type:"text",value:r.sobrenome,onChange:d=>i(f=>({...f,sobrenome:d.target.value.toUpperCase()})),className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5 text-sm font-semibold uppercase-input",placeholder:"SOBRENOME"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"WHATSAPP"}),s.jsx("input",{type:"text",value:r.whatsapp,onChange:d=>i(f=>({...f,whatsapp:d.target.value})),className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5 text-sm",placeholder:"(XX) XXXXX-XXXX",required:!0})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"TIPO DE INTERESSE"}),s.jsxs("select",{value:r.tipoInteresse,onChange:d=>i(f=>({...f,tipoInteresse:d.target.value})),className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5 text-sm bg-white uppercase-select",children:[s.jsx("option",{value:"Particular",children:"PARTICULAR"}),s.jsx("option",{value:"Plano",children:"PLANO"})]})]}),s.jsxs("div",{className:"flex justify-end gap-3 pt-6",children:[s.jsx("button",{type:"button",onClick:t,className:"px-6 py-2.5 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-sm uppercase",children:"CANCELAR"}),s.jsxs("button",{type:"submit",className:"px-6 py-2.5 bg-green-600 hover:bg-green-700 text-white font-bold rounded-lg text-sm uppercase flex items-center gap-2",children:[s.jsx(Ud,{size:16})," CADASTRAR"]})]})]})})]})})},YO=()=>{const{data:t,isLoading:e,error:n,refresh:r}=Ie(K.getLeads),{data:i}=Ie(K.getDentistas),[c,d]=A.useState(!1),[f,h]=A.useState(!1),[p,b]=A.useState(null),[y,x]=A.useState("TODOS"),[v,N]=A.useState(!1),j=$e();A.useEffect(()=>{if(!c)return;const D=C=>{C.key==="Escape"&&d(!1)};return document.addEventListener("keydown",D),()=>{document.removeEventListener("keydown",D)}},[c]);const S=async D=>{if(D.preventDefault(),!!p)try{j.info(`FUNCIONALIDADE DE CONVERSÃO PARA ${p.nome} EM DESENVOLVIMENTO.`),d(!1)}catch{j.error("FALHA AO CONVERTER LEAD.")}},R=["TODOS","NOVO","CONVERTIDO"],w=t==null?void 0:t.filter(D=>{var C;return y==="TODOS"?!0:((C=D.status)==null?void 0:C.toUpperCase())===y});return s.jsxs("div",{className:"space-y-6",children:[s.jsx(fn,{title:"GESTÃO DE LEADS",children:s.jsxs("div",{className:"flex gap-2",children:[s.jsxs("div",{className:"relative",children:[s.jsxs("button",{onClick:()=>N(D=>!D),className:"bg-white border border-gray-300 text-gray-600 px-3 py-2 rounded-lg text-sm flex items-center gap-2 hover:bg-gray-50 uppercase font-bold",children:[s.jsx(yu,{size:16}),y,s.jsx(Lo,{size:14,className:`transition-transform ${v?"rotate-180":""}`})]}),v&&s.jsx("div",{className:"absolute right-0 mt-1 bg-white border border-gray-200 rounded-lg shadow-lg z-10 min-w-[140px]",children:R.map(D=>s.jsx("button",{onClick:()=>{x(D),N(!1)},className:`w-full text-left px-4 py-2 text-sm font-bold uppercase hover:bg-gray-50 ${y===D?"text-blue-600 bg-blue-50":"text-gray-700"}`,children:D},D))})]}),s.jsxs("button",{onClick:()=>h(!0),className:"bg-green-600 text-white px-4 py-2 rounded-lg text-sm flex items-center gap-2 hover:bg-green-700 uppercase font-bold shadow-sm",children:[s.jsx(gt,{size:16})," NOVO LEAD"]})]})}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:[e&&s.jsx(VO,{}),n&&s.jsx(qO,{error:n}),w&&w.map(D=>s.jsxs("div",{className:`bg-white rounded-xl shadow-sm border ${D.status==="Novo"?"border-amber-200 bg-amber-50/30":"border-gray-200"} p-6 relative`,children:[D.status==="Novo"&&s.jsx("div",{className:"absolute top-4 right-4 w-2 h-2 bg-amber-500 rounded-full animate-pulse"}),s.jsxs("div",{className:"flex items-start justify-between mb-4",children:[s.jsxs("div",{children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-900 uppercase",children:[D.nome," ",D.sobrenome]}),s.jsxs("p",{className:"text-sm text-gray-500 flex items-center gap-1 mt-1 font-medium",children:[s.jsx(Mg,{size:14})," ",D.whatsapp]})]}),s.jsx("span",{className:`px-2 py-1 text-xs font-bold rounded uppercase ${D.tipoInteresse==="Particular"?"bg-orange-100 text-orange-800":"bg-purple-100 text-purple-800"}`,children:D.tipoInteresse})]}),s.jsxs("div",{className:"text-xs text-gray-400 mb-6 font-bold uppercase",children:["CADASTRADO EM: ",new Date(D.dataCadastro).toLocaleDateString()]}),D.status!=="Convertido"?s.jsxs("button",{onClick:()=>{b(D),d(!0)},className:"w-full py-2 bg-green-600 hover:bg-green-700 text-white rounded-lg flex items-center justify-center gap-2 font-bold transition-colors uppercase text-xs",children:[s.jsx(Ud,{size:18})," AGENDAR E CADASTRAR"]}):s.jsxs("div",{className:"w-full py-2 bg-gray-100 text-gray-500 rounded-lg flex items-center justify-center gap-2 font-bold uppercase text-xs",children:[s.jsx(Ga,{size:18})," CONVERTIDO"]})]},D.id)),(w==null?void 0:w.length)===0&&!e&&s.jsx("div",{className:"col-span-3 text-center py-10 text-gray-400 uppercase font-bold text-sm",children:"NENHUM LEAD ENCONTRADO."})]}),c&&p&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-blue-50 to-white",children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-800 uppercase flex items-center gap-2",children:[s.jsx(Ud,{size:18,className:"text-blue-500"})," CONVERTER LEAD"]}),s.jsx("button",{onClick:()=>d(!1),className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:s.jsxs("form",{onSubmit:S,className:"space-y-4 max-w-2xl mx-auto",children:[s.jsxs("div",{className:"bg-blue-50 p-4 rounded-lg mb-4 text-xs text-blue-800 border border-blue-100 font-bold uppercase",children:["AO SALVAR, O SISTEMA IRÁ AUTOMATICAMENTE ",s.jsx("strong",{children:"CADASTRAR O PACIENTE"})," E CRIAR O AGENDAMENTO."]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-700 mb-1 uppercase",children:"PACIENTE"}),s.jsx("input",{disabled:!0,value:`${p.nome} ${p.sobrenome}`.toUpperCase(),className:"w-full bg-gray-100 border border-gray-300 rounded-lg p-2.5 text-gray-500 uppercase font-bold"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-700 mb-1 uppercase",children:"DATA AGENDAMENTO"}),s.jsx("input",{type:"date",required:!0,className:"w-full border border-gray-300 rounded-lg p-2.5 font-semibold"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-700 mb-1 uppercase",children:"HORA"}),s.jsx("input",{type:"time",required:!0,className:"w-full border border-gray-300 rounded-lg p-2.5 font-semibold"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-700 mb-1 uppercase",children:"DENTISTA RESPONSÁVEL"}),s.jsx("select",{className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select font-semibold",children:i&&i.map(D=>s.jsx("option",{value:D.id,children:D.nome},D.id))})]}),s.jsx("div",{className:"pt-6",children:s.jsx("button",{type:"submit",className:"w-full bg-green-600 text-white py-3 rounded-lg font-bold hover:bg-green-700 uppercase text-sm shadow-sm transition-all",children:"CONFIRMAR AGENDAMENTO"})})]})})]})}),f&&s.jsx($O,{onClose:()=>h(!1),onSaved:r})]})},QO=()=>{const[t,e]=A.useState({nome:"",sobrenome:"",cpf:"",whatsapp:"",tipo:""}),[n,r]=A.useState(!1),[i,c]=A.useState(!1),d=$e(),f=async p=>{if(p.preventDefault(),r(!0),!t.tipo){d.error("POR FAVOR, SELECIONE PARTICULAR OU PLANO."),r(!1);return}try{if(await K.checkCpfExists(t.cpf)){d.error("CPF JÁ CADASTRADO. ENTRE EM CONTATO PELO WHATSAPP."),r(!1);return}await K.saveLead({nome:t.nome,sobrenome:t.sobrenome,cpf:t.cpf,whatsapp:t.whatsapp,tipoInteresse:t.tipo}),c(!0)}catch{d.error("ERRO AO ENVIAR DADOS. TENTE NOVAMENTE.")}finally{r(!1)}},h=p=>{e({...t,[p.target.name]:p.target.value.toUpperCase()})};return i?s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-white p-4",children:s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"w-16 h-16 bg-green-100 text-green-600 rounded-full flex items-center justify-center mx-auto mb-4",children:s.jsx(Ga,{size:32})}),s.jsx("h2",{className:"text-xl font-bold text-amber-900 uppercase",children:"MENSAGEM ENVIADA!"}),s.jsx("p",{className:"text-amber-800 mt-2 uppercase font-bold text-sm",children:"NOSSA EQUIPE ENTRARÁ EM CONTATO EM BREVE."})]})}):s.jsx("div",{className:"min-h-screen bg-white flex flex-col items-center justify-center p-4",children:s.jsxs("div",{className:"w-full max-w-md",children:[s.jsx("h1",{className:"text-center font-bold text-xl mb-6 text-black uppercase",children:"DEIXE SEU CONTATO"}),s.jsxs("form",{onSubmit:f,className:"space-y-4",children:[s.jsx("input",{type:"text",name:"nome",placeholder:"NOME",className:"w-full border border-amber-700 rounded-lg p-3 text-gray-800 outline-none focus:ring-2 focus:ring-amber-500 placeholder-gray-500 uppercase-input",required:!0,value:t.nome,onChange:h}),s.jsx("input",{type:"text",name:"sobrenome",placeholder:"SOBRENOME",className:"w-full border border-amber-700 rounded-lg p-3 text-gray-800 outline-none focus:ring-2 focus:ring-amber-500 placeholder-gray-500 uppercase-input",required:!0,value:t.sobrenome,onChange:h}),s.jsx("input",{type:"text",name:"cpf",placeholder:"CPF",className:"w-full border border-amber-700 rounded-lg p-3 text-gray-800 outline-none focus:ring-2 focus:ring-amber-500 placeholder-gray-500 uppercase-input",required:!0,value:t.cpf,onChange:h}),s.jsx("input",{type:"text",name:"whatsapp",placeholder:"WHATSAPP",className:"w-full border border-amber-700 rounded-lg p-3 text-gray-800 outline-none focus:ring-2 focus:ring-amber-500 placeholder-gray-500 uppercase-input",required:!0,value:t.whatsapp,onChange:h}),s.jsxs("div",{className:"flex gap-4",children:[s.jsx("button",{type:"button",onClick:()=>e({...t,tipo:"Particular"}),className:`flex-1 py-3 rounded-lg font-bold uppercase text-sm transition-colors border ${t.tipo==="Particular"?"bg-amber-800 text-white border-amber-800":"bg-amber-600 text-white border-amber-600 hover:bg-amber-700"}`,children:"PARTICULAR"}),s.jsx("button",{type:"button",onClick:()=>e({...t,tipo:"Plano"}),className:`flex-1 py-3 rounded-lg font-bold uppercase text-sm transition-colors border ${t.tipo==="Plano"?"bg-purple-800 text-white border-purple-800":"bg-purple-600 text-white border-purple-600 hover:bg-purple-700"}`,children:"PLANO"})]}),s.jsx("button",{type:"submit",disabled:n,className:"w-full py-4 bg-gray-800 text-white font-bold rounded-lg mt-6 shadow-sm hover:opacity-90 transition-opacity uppercase disabled:bg-gray-400",children:n?"VERIFICANDO...":"ENVIAR"})]})]})})};function Kt(t){return`Minified Redux error #${t}; visit https://redux.js.org/Errors?code=${t} for the full message or use the non-minified dev environment for full errors. `}var WO=typeof Symbol=="function"&&Symbol.observable||"@@observable",cv=WO,dv=()=>Math.random().toString(36).substring(7).split("").join("."),XO={INIT:`@@redux/INIT${dv()}`,REPLACE:`@@redux/REPLACE${dv()}`},uv=XO;function ZO(t){if(typeof t!="object"||t===null)return!1;let e=t;for(;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e||Object.getPrototypeOf(t)===null}function KN(t,e,n){if(typeof t!="function")throw new Error(Kt(2));if(typeof e=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Kt(0));if(typeof e=="function"&&typeof n>"u"&&(n=e,e=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Kt(1));return n(KN)(t,e)}let r=t,i=e,c=new Map,d=c,f=0,h=!1;function p(){d===c&&(d=new Map,c.forEach((S,R)=>{d.set(R,S)}))}function b(){if(h)throw new Error(Kt(3));return i}function y(S){if(typeof S!="function")throw new Error(Kt(4));if(h)throw new Error(Kt(5));let R=!0;p();const w=f++;return d.set(w,S),function(){if(R){if(h)throw new Error(Kt(6));R=!1,p(),d.delete(w),c=null}}}function x(S){if(!ZO(S))throw new Error(Kt(7));if(typeof S.type>"u")throw new Error(Kt(8));if(typeof S.type!="string")throw new Error(Kt(17));if(h)throw new Error(Kt(9));try{h=!0,i=r(i,S)}finally{h=!1}return(c=d).forEach(w=>{w()}),S}function v(S){if(typeof S!="function")throw new Error(Kt(10));r=S,x({type:uv.REPLACE})}function N(){const S=y;return{subscribe(R){if(typeof R!="object"||R===null)throw new Error(Kt(11));function w(){const C=R;C.next&&C.next(b())}return w(),{unsubscribe:S(w)}},[cv](){return this}}}return x({type:uv.INIT}),{dispatch:x,subscribe:y,getState:b,replaceReducer:v,[cv]:N}}function fv(t,e){return function(...n){return e(t.apply(this,n))}}function hv(t,e){if(typeof t=="function")return fv(t,e);if(typeof t!="object"||t===null)throw new Error(Kt(16));const n={};for(const r in t){const i=t[r];typeof i=="function"&&(n[r]=fv(i,e))}return n}function JN(...t){return t.length===0?e=>e:t.length===1?t[0]:t.reduce((e,n)=>(...r)=>e(n(...r)))}function KO(...t){return e=>(n,r)=>{const i=e(n,r);let c=()=>{throw new Error(Kt(15))};const d={getState:i.getState,dispatch:(h,...p)=>c(h,...p)},f=t.map(h=>h(d));return c=JN(...f)(i.dispatch),{...i,dispatch:c}}}var ip={exports:{}},op={};/** - * @license React - * use-sync-external-store-with-selector.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var pv;function JO(){if(pv)return op;pv=1;var t=xu();function e(h,p){return h===p&&(h!==0||1/h===1/p)||h!==h&&p!==p}var n=typeof Object.is=="function"?Object.is:e,r=t.useSyncExternalStore,i=t.useRef,c=t.useEffect,d=t.useMemo,f=t.useDebugValue;return op.useSyncExternalStoreWithSelector=function(h,p,b,y,x){var v=i(null);if(v.current===null){var N={hasValue:!1,value:null};v.current=N}else N=v.current;v=d(function(){function S(I){if(!R){if(R=!0,w=I,I=y(I),x!==void 0&&N.hasValue){var L=N.value;if(x(L,I))return D=L}return D=I}if(L=D,n(w,I))return L;var F=y(I);return x!==void 0&&x(L,F)?(w=I,L):(w=I,D=F)}var R=!1,w,D,C=b===void 0?null:b;return[function(){return S(p())},C===null?void 0:function(){return S(C())}]},[p,b,y,x]);var j=r(h,v[0],v[1]);return c(function(){N.hasValue=!0,N.value=j},[j]),f(j),j},op}var gv;function eR(){return gv||(gv=1,ip.exports=JO()),ip.exports}eR();var tR=A.version.startsWith("19"),nR=Symbol.for(tR?"react.transitional.element":"react.element"),aR=Symbol.for("react.portal"),sR=Symbol.for("react.fragment"),rR=Symbol.for("react.strict_mode"),lR=Symbol.for("react.profiler"),iR=Symbol.for("react.consumer"),oR=Symbol.for("react.context"),eE=Symbol.for("react.forward_ref"),cR=Symbol.for("react.suspense"),dR=Symbol.for("react.suspense_list"),Lg=Symbol.for("react.memo"),uR=Symbol.for("react.lazy"),fR=eE,hR=Lg;function pR(t){if(typeof t=="object"&&t!==null){const{$$typeof:e}=t;switch(e){case nR:switch(t=t.type,t){case sR:case lR:case rR:case cR:case dR:return t;default:switch(t=t&&t.$$typeof,t){case oR:case eE:case uR:case Lg:return t;case iR:return t;default:return e}}case aR:return e}}}function gR(t){return pR(t)===Lg}function mR(t,e,n,r,{areStatesEqual:i,areOwnPropsEqual:c,areStatePropsEqual:d}){let f=!1,h,p,b,y,x;function v(w,D){return h=w,p=D,b=t(h,p),y=e(r,p),x=n(b,y,p),f=!0,x}function N(){return b=t(h,p),e.dependsOnOwnProps&&(y=e(r,p)),x=n(b,y,p),x}function j(){return t.dependsOnOwnProps&&(b=t(h,p)),e.dependsOnOwnProps&&(y=e(r,p)),x=n(b,y,p),x}function S(){const w=t(h,p),D=!d(w,b);return b=w,D&&(x=n(b,y,p)),x}function R(w,D){const C=!c(D,p),I=!i(w,h,D,p);return h=w,p=D,C&&I?N():C?j():I?S():x}return function(D,C){return f?R(D,C):v(D,C)}}function xR(t,{initMapStateToProps:e,initMapDispatchToProps:n,initMergeProps:r,...i}){const c=e(t,i),d=n(t,i),f=r(t,i);return mR(c,d,f,t,i)}function bR(t,e){const n={};for(const r in t){const i=t[r];typeof i=="function"&&(n[r]=(...c)=>e(i(...c)))}return n}function Vp(t){return function(n){const r=t(n);function i(){return r}return i.dependsOnOwnProps=!1,i}}function mv(t){return t.dependsOnOwnProps?!!t.dependsOnOwnProps:t.length!==1}function tE(t,e){return function(r,{displayName:i}){const c=function(f,h){return c.dependsOnOwnProps?c.mapToProps(f,h):c.mapToProps(f,void 0)};return c.dependsOnOwnProps=!0,c.mapToProps=function(f,h){c.mapToProps=t,c.dependsOnOwnProps=mv(t);let p=c(f,h);return typeof p=="function"&&(c.mapToProps=p,c.dependsOnOwnProps=mv(p),p=c(f,h)),p},c}}function zg(t,e){return(n,r)=>{throw new Error(`Invalid value of type ${typeof t} for ${e} argument when connecting component ${r.wrappedComponentName}.`)}}function yR(t){return t&&typeof t=="object"?Vp(e=>bR(t,e)):t?typeof t=="function"?tE(t):zg(t,"mapDispatchToProps"):Vp(e=>({dispatch:e}))}function vR(t){return t?typeof t=="function"?tE(t):zg(t,"mapStateToProps"):Vp(()=>({}))}function NR(t,e,n){return{...n,...t,...e}}function ER(t){return function(n,{displayName:r,areMergedPropsEqual:i}){let c=!1,d;return function(h,p,b){const y=t(h,p,b);return c?i(y,d)||(d=y):(c=!0,d=y),d}}}function jR(t){return t?typeof t=="function"?ER(t):zg(t,"mergeProps"):()=>NR}function SR(t){t()}function AR(){let t=null,e=null;return{clear(){t=null,e=null},notify(){SR(()=>{let n=t;for(;n;)n.callback(),n=n.next})},get(){const n=[];let r=t;for(;r;)n.push(r),r=r.next;return n},subscribe(n){let r=!0;const i=e={callback:n,next:null,prev:e};return i.prev?i.prev.next=i:t=i,function(){!r||t===null||(r=!1,i.next?i.next.prev=i.prev:e=i.prev,i.prev?i.prev.next=i.next:t=i.next)}}}}var xv={notify(){},get:()=>[]};function nE(t,e){let n,r=xv,i=0,c=!1;function d(j){b();const S=r.subscribe(j);let R=!1;return()=>{R||(R=!0,S(),y())}}function f(){r.notify()}function h(){N.onStateChange&&N.onStateChange()}function p(){return c}function b(){i++,n||(n=e?e.addNestedSub(h):t.subscribe(h),r=AR())}function y(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=xv)}function x(){c||(c=!0,b())}function v(){c&&(c=!1,y())}const N={addNestedSub:d,notifyNestedSubs:f,handleChangeWrapper:h,isSubscribed:p,trySubscribe:x,tryUnsubscribe:v,getListeners:()=>r};return N}var wR=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",CR=wR(),DR=()=>typeof navigator<"u"&&navigator.product==="ReactNative",OR=DR(),RR=()=>CR||OR?A.useLayoutEffect:A.useEffect,Bd=RR();function bv(t,e){return t===e?t!==0||e!==0||1/t===1/e:t!==t&&e!==e}function cp(t,e){if(bv(t,e))return!0;if(typeof t!="object"||t===null||typeof e!="object"||e===null)return!1;const n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(let i=0;it(...e),n)}function GR(t,e,n,r,i,c){t.current=r,n.current=!1,i.current&&(i.current=null,c())}function FR(t,e,n,r,i,c,d,f,h,p,b){if(!t)return()=>{};let y=!1,x=null;const v=()=>{if(y||!f.current)return;const j=e.getState();let S,R;try{S=r(j,i.current)}catch(w){R=w,x=w}R||(x=null),S===c.current?d.current||p():(c.current=S,h.current=S,d.current=!0,b())};return n.onStateChange=v,n.trySubscribe(),v(),()=>{if(y=!0,n.tryUnsubscribe(),n.onStateChange=null,x)throw x}}function VR(t,e){return t===e}function qR(t,e,n,{pure:r,areStatesEqual:i=VR,areOwnPropsEqual:c=cp,areStatePropsEqual:d=cp,areMergedPropsEqual:f=cp,forwardRef:h=!1,context:p=sE}={}){const b=p,y=vR(t),x=yR(e),v=jR(n),N=!!t;return S=>{const R=S.displayName||S.name||"Component",w=`Connect(${R})`,D={shouldHandleStateChanges:N,displayName:w,wrappedComponentName:R,WrappedComponent:S,initMapStateToProps:y,initMapDispatchToProps:x,initMergeProps:v,areStatesEqual:i,areStatePropsEqual:d,areOwnPropsEqual:c,areMergedPropsEqual:f};function C(F){const[Y,$,M]=A.useMemo(()=>{const{reactReduxForwardedRef:fe,...W}=F;return[F.context,fe,W]},[F]),H=A.useMemo(()=>{let fe=b;return Y!=null&&Y.Consumer,fe},[Y,b]),ne=A.useContext(H),ee=!!F.store&&!!F.store.getState&&!!F.store.dispatch,he=!!ne&&!!ne.store,pe=ee?F.store:ne.store,z=he?ne.getServerState:pe.getState,oe=A.useMemo(()=>xR(pe.dispatch,D),[pe]),[G,te]=A.useMemo(()=>{if(!N)return BR;const fe=nE(pe,ee?void 0:ne.subscription),W=fe.notifyNestedSubs.bind(fe);return[fe,W]},[pe,ee,ne]),re=A.useMemo(()=>ee?ne:{...ne,subscription:G},[ee,ne,G]),T=A.useRef(void 0),X=A.useRef(M),le=A.useRef(void 0),se=A.useRef(!1),Ne=A.useRef(!1),Ae=A.useRef(void 0);Bd(()=>(Ne.current=!0,()=>{Ne.current=!1}),[]);const Re=A.useMemo(()=>()=>le.current&&M===X.current?le.current:oe(pe.getState(),M),[pe,M]),ft=A.useMemo(()=>W=>G?FR(N,pe,G,oe,X,T,se,Ne,le,te,W):()=>{},[G]);HR(GR,[X,T,se,M,le,te]);let Le;try{Le=A.useSyncExternalStore(ft,Re,z?()=>oe(z(),M):Re)}catch(fe){throw Ae.current&&(fe.message+=` -The error may be correlated with this previous error: -${Ae.current.stack} - -`),fe}Bd(()=>{Ae.current=void 0,le.current=void 0,T.current=Le});const St=A.useMemo(()=>A.createElement(S,{...Le,ref:$}),[$,S,Le]);return A.useMemo(()=>N?A.createElement(H.Provider,{value:re},St):St,[H,St,re])}const L=A.memo(C);if(L.WrappedComponent=S,L.displayName=C.displayName=w,h){const Y=A.forwardRef(function(M,H){return A.createElement(L,{...M,reactReduxForwardedRef:H})});return Y.displayName=w,Y.WrappedComponent=S,qp(Y,S)}return qp(L,S)}}var rE=qR;function $R(t){const{children:e,context:n,serverState:r,store:i}=t,c=A.useMemo(()=>{const h=nE(i);return{store:i,subscription:h,getServerState:r?()=>r:void 0}},[i,r]),d=A.useMemo(()=>i.getState(),[i]);Bd(()=>{const{subscription:h}=c;return h.onStateChange=h.notifyNestedSubs,h.trySubscribe(),d!==i.getState()&&h.notifyNestedSubs(),()=>{h.tryUnsubscribe(),h.onStateChange=void 0}},[c,d]);const f=n||sE;return A.createElement(f.Provider,{value:c},e)}var YR=$R,QR="Invariant failed";function WR(t,e){throw new Error(QR)}var ta=function(e){var n=e.top,r=e.right,i=e.bottom,c=e.left,d=r-c,f=i-n,h={top:n,right:r,bottom:i,left:c,width:d,height:f,x:c,y:n,center:{x:(r+c)/2,y:(i+n)/2}};return h},Pg=function(e,n){return{top:e.top-n.top,left:e.left-n.left,bottom:e.bottom+n.bottom,right:e.right+n.right}},Ev=function(e,n){return{top:e.top+n.top,left:e.left+n.left,bottom:e.bottom-n.bottom,right:e.right-n.right}},XR=function(e,n){return{top:e.top+n.y,left:e.left+n.x,bottom:e.bottom+n.y,right:e.right+n.x}},fp={top:0,right:0,bottom:0,left:0},Ug=function(e){var n=e.borderBox,r=e.margin,i=r===void 0?fp:r,c=e.border,d=c===void 0?fp:c,f=e.padding,h=f===void 0?fp:f,p=ta(Pg(n,i)),b=ta(Ev(n,d)),y=ta(Ev(b,h));return{marginBox:p,borderBox:ta(n),paddingBox:b,contentBox:y,margin:i,border:d,padding:h}},Vn=function(e){var n=e.slice(0,-2),r=e.slice(-2);if(r!=="px")return 0;var i=Number(n);return isNaN(i)&&WR(),i},ZR=function(){return{x:window.pageXOffset,y:window.pageYOffset}},Hd=function(e,n){var r=e.borderBox,i=e.border,c=e.margin,d=e.padding,f=XR(r,n);return Ug({borderBox:f,border:i,margin:c,padding:d})},Gd=function(e,n){return n===void 0&&(n=ZR()),Hd(e,n)},lE=function(e,n){var r={top:Vn(n.marginTop),right:Vn(n.marginRight),bottom:Vn(n.marginBottom),left:Vn(n.marginLeft)},i={top:Vn(n.paddingTop),right:Vn(n.paddingRight),bottom:Vn(n.paddingBottom),left:Vn(n.paddingLeft)},c={top:Vn(n.borderTopWidth),right:Vn(n.borderRightWidth),bottom:Vn(n.borderBottomWidth),left:Vn(n.borderLeftWidth)};return Ug({borderBox:e,margin:r,padding:i,border:c})},iE=function(e){var n=e.getBoundingClientRect(),r=window.getComputedStyle(e);return lE(n,r)},mo=function(e){var n=[],r=null,i=function(){for(var d=arguments.length,f=new Array(d),h=0;h{const c=KR(n,i.options);return t.addEventListener(i.eventName,i.fn,c),function(){t.removeEventListener(i.eventName,i.fn,c)}});return function(){r.forEach(c=>{c()})}}const JR="Invariant failed";class Vd extends Error{}Vd.prototype.toString=function(){return this.message};function ge(t,e){throw new Vd(JR)}let eT=class extends qe.Component{constructor(...e){super(...e),this.callbacks=null,this.unbind=Is,this.onWindowError=n=>{const r=this.getCallbacks();r.isDragging()&&r.tryAbort(),n.error instanceof Vd&&n.preventDefault()},this.getCallbacks=()=>{if(!this.callbacks)throw new Error("Unable to find AppCallbacks in ");return this.callbacks},this.setCallbacks=n=>{this.callbacks=n}}componentDidMount(){this.unbind=$n(window,[{eventName:"error",fn:this.onWindowError}])}componentDidCatch(e){if(e instanceof Vd){this.setState({});return}throw e}componentWillUnmount(){this.unbind()}render(){return this.props.children(this.setCallbacks)}};const tT=` - Press space bar to start a drag. - When dragging you can use the arrow keys to move the item around and escape to cancel. - Some screen readers may require you to be in focus mode or to use your pass through key -`,qd=t=>t+1,nT=t=>` - You have lifted an item in position ${qd(t.source.index)} -`,cE=(t,e)=>{const n=t.droppableId===e.droppableId,r=qd(t.index),i=qd(e.index);return n?` - You have moved the item from position ${r} - to position ${i} - `:` - You have moved the item from position ${r} - in list ${t.droppableId} - to list ${e.droppableId} - in position ${i} - `},dE=(t,e,n)=>e.droppableId===n.droppableId?` - The item ${t} - has been combined with ${n.draggableId}`:` - The item ${t} - in list ${e.droppableId} - has been combined with ${n.draggableId} - in list ${n.droppableId} - `,aT=t=>{const e=t.destination;if(e)return cE(t.source,e);const n=t.combine;return n?dE(t.draggableId,t.source,n):"You are over an area that cannot be dropped on"},jv=t=>` - The item has returned to its starting position - of ${qd(t.index)} -`,sT=t=>{if(t.reason==="CANCEL")return` - Movement cancelled. - ${jv(t.source)} - `;const e=t.destination,n=t.combine;return e?` - You have dropped the item. - ${cE(t.source,e)} - `:n?` - You have dropped the item. - ${dE(t.draggableId,t.source,n)} - `:` - The item has been dropped while not over a drop area. - ${jv(t.source)} - `},Od={dragHandleUsageInstructions:tT,onDragStart:nT,onDragUpdate:aT,onDragEnd:sT};function rT(t,e){return!!(t===e||Number.isNaN(t)&&Number.isNaN(e))}function uE(t,e){if(t.length!==e.length)return!1;for(let n=0;n({inputs:e,result:t()}))[0],r=A.useRef(!0),i=A.useRef(n),d=r.current||!!(e&&i.current.inputs&&uE(e,i.current.inputs))?i.current:{inputs:e,result:t()};return A.useEffect(()=>{r.current=!1,i.current=d},[d]),d.result}function je(t,e){return Ye(()=>t,e)}const Lt={x:0,y:0},Ft=(t,e)=>({x:t.x+e.x,y:t.y+e.y}),wn=(t,e)=>({x:t.x-e.x,y:t.y-e.y}),Ls=(t,e)=>t.x===e.x&&t.y===e.y,Xl=t=>({x:t.x!==0?-t.x:0,y:t.y!==0?-t.y:0}),Or=(t,e,n=0)=>t==="x"?{x:e,y:n}:{x:n,y:e},xo=(t,e)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2),Sv=(t,e)=>Math.min(...e.map(n=>xo(t,n))),fE=t=>e=>({x:t(e.x),y:t(e.y)});var lT=(t,e)=>{const n=ta({top:Math.max(e.top,t.top),right:Math.min(e.right,t.right),bottom:Math.min(e.bottom,t.bottom),left:Math.max(e.left,t.left)});return n.width<=0||n.height<=0?null:n};const Ho=(t,e)=>({top:t.top+e.y,left:t.left+e.x,bottom:t.bottom+e.y,right:t.right+e.x}),Av=t=>[{x:t.left,y:t.top},{x:t.right,y:t.top},{x:t.left,y:t.bottom},{x:t.right,y:t.bottom}],iT={top:0,right:0,bottom:0,left:0},oT=(t,e)=>e?Ho(t,e.scroll.diff.displacement):t,cT=(t,e,n)=>n&&n.increasedBy?{...t,[e.end]:t[e.end]+n.increasedBy[e.line]}:t,dT=(t,e)=>e&&e.shouldClipSubject?lT(e.pageMarginBox,t):ta(t);var Bl=({page:t,withPlaceholder:e,axis:n,frame:r})=>{const i=oT(t.marginBox,r),c=cT(i,n,e),d=dT(c,r);return{page:t,withPlaceholder:e,active:d}},Bg=(t,e)=>{t.frame||ge();const n=t.frame,r=wn(e,n.scroll.initial),i=Xl(r),c={...n,scroll:{initial:n.scroll.initial,current:e,diff:{value:r,displacement:i},max:n.scroll.max}},d=Bl({page:t.subject.page,withPlaceholder:t.subject.withPlaceholder,axis:t.axis,frame:c});return{...t,frame:c,subject:d}};function Mt(t,e=uE){let n=null;function r(...i){if(n&&n.lastThis===this&&e(i,n.lastArgs))return n.lastResult;const c=t.apply(this,i);return n={lastResult:c,lastArgs:i,lastThis:this},c}return r.clear=function(){n=null},r}const hE=Mt(t=>t.reduce((e,n)=>(e[n.descriptor.id]=n,e),{})),pE=Mt(t=>t.reduce((e,n)=>(e[n.descriptor.id]=n,e),{})),Nu=Mt(t=>Object.values(t)),uT=Mt(t=>Object.values(t));var Zl=Mt((t,e)=>uT(e).filter(r=>t===r.descriptor.droppableId).sort((r,i)=>r.descriptor.index-i.descriptor.index));function Hg(t){return t.at&&t.at.type==="REORDER"?t.at.destination:null}function Eu(t){return t.at&&t.at.type==="COMBINE"?t.at.combine:null}var ju=Mt((t,e)=>e.filter(n=>n.descriptor.id!==t.descriptor.id)),fT=({isMovingForward:t,draggable:e,destination:n,insideDestination:r,previousImpact:i})=>{if(!n.isCombineEnabled||!Hg(i))return null;function d(v){const N={type:"COMBINE",combine:{draggableId:v,droppableId:n.descriptor.id}};return{...i,at:N}}const f=i.displaced.all,h=f.length?f[0]:null;if(t)return h?d(h):null;const p=ju(e,r);if(!h){if(!p.length)return null;const v=p[p.length-1];return d(v.descriptor.id)}const b=p.findIndex(v=>v.descriptor.id===h);b===-1&&ge();const y=b-1;if(y<0)return null;const x=p[y];return d(x.descriptor.id)},Kl=(t,e)=>t.descriptor.droppableId===e.descriptor.id;const gE={point:Lt,value:0},bo={invisible:{},visible:{},all:[]},hT={displaced:bo,displacedBy:gE,at:null};var Yn=(t,e)=>n=>t<=n&&n<=e,mE=t=>{const e=Yn(t.top,t.bottom),n=Yn(t.left,t.right);return r=>{if(e(r.top)&&e(r.bottom)&&n(r.left)&&n(r.right))return!0;const c=e(r.top)||e(r.bottom),d=n(r.left)||n(r.right);if(c&&d)return!0;const h=r.topt.bottom,p=r.leftt.right;return h&&p?!0:h&&d||p&&c}},pT=t=>{const e=Yn(t.top,t.bottom),n=Yn(t.left,t.right);return r=>e(r.top)&&e(r.bottom)&&n(r.left)&&n(r.right)};const Gg={direction:"vertical",line:"y",crossAxisLine:"x",start:"top",end:"bottom",size:"height",crossAxisStart:"left",crossAxisEnd:"right",crossAxisSize:"width"},xE={direction:"horizontal",line:"x",crossAxisLine:"y",start:"left",end:"right",size:"width",crossAxisStart:"top",crossAxisEnd:"bottom",crossAxisSize:"height"};var gT=t=>e=>{const n=Yn(e.top,e.bottom),r=Yn(e.left,e.right);return i=>t===Gg?n(i.top)&&n(i.bottom):r(i.left)&&r(i.right)};const mT=(t,e)=>{const n=e.frame?e.frame.scroll.diff.displacement:Lt;return Ho(t,n)},xT=(t,e,n)=>e.subject.active?n(e.subject.active)(t):!1,bT=(t,e,n)=>n(e)(t),Fg=({target:t,destination:e,viewport:n,withDroppableDisplacement:r,isVisibleThroughFrameFn:i})=>{const c=r?mT(t,e):t;return xT(c,e,i)&&bT(c,n,i)},yT=t=>Fg({...t,isVisibleThroughFrameFn:mE}),bE=t=>Fg({...t,isVisibleThroughFrameFn:pT}),vT=t=>Fg({...t,isVisibleThroughFrameFn:gT(t.destination.axis)}),NT=(t,e,n)=>{if(typeof n=="boolean")return n;if(!e)return!0;const{invisible:r,visible:i}=e;if(r[t])return!1;const c=i[t];return c?c.shouldAnimate:!0};function ET(t,e){const n=t.page.marginBox,r={top:e.point.y,right:0,bottom:0,left:e.point.x};return ta(Pg(n,r))}function yo({afterDragging:t,destination:e,displacedBy:n,viewport:r,forceShouldAnimate:i,last:c}){return t.reduce(function(f,h){const p=ET(h,n),b=h.descriptor.id;if(f.all.push(b),!yT({target:p,destination:e,viewport:r,withDroppableDisplacement:!0}))return f.invisible[h.descriptor.id]=!0,f;const x=NT(b,c,i),v={draggableId:b,shouldAnimate:x};return f.visible[b]=v,f},{all:[],visible:{},invisible:{}})}function jT(t,e){if(!t.length)return 0;const n=t[t.length-1].descriptor.index;return e.inHomeList?n:n+1}function wv({insideDestination:t,inHomeList:e,displacedBy:n,destination:r}){const i=jT(t,{inHomeList:e});return{displaced:bo,displacedBy:n,at:{type:"REORDER",destination:{droppableId:r.descriptor.id,index:i}}}}function $d({draggable:t,insideDestination:e,destination:n,viewport:r,displacedBy:i,last:c,index:d,forceShouldAnimate:f}){const h=Kl(t,n);if(d==null)return wv({insideDestination:e,inHomeList:h,displacedBy:i,destination:n});const p=e.find(N=>N.descriptor.index===d);if(!p)return wv({insideDestination:e,inHomeList:h,displacedBy:i,destination:n});const b=ju(t,e),y=e.indexOf(p),x=b.slice(y);return{displaced:yo({afterDragging:x,destination:n,displacedBy:i,last:c,viewport:r.frame,forceShouldAnimate:f}),displacedBy:i,at:{type:"REORDER",destination:{droppableId:n.descriptor.id,index:d}}}}function Bs(t,e){return!!e.effected[t]}var ST=({isMovingForward:t,destination:e,draggables:n,combine:r,afterCritical:i})=>{if(!e.isCombineEnabled)return null;const c=r.draggableId,f=n[c].descriptor.index;return Bs(c,i)?t?f:f-1:t?f+1:f},AT=({isMovingForward:t,isInHomeList:e,insideDestination:n,location:r})=>{if(!n.length)return null;const i=r.index,c=t?i+1:i-1,d=n[0].descriptor.index,f=n[n.length-1].descriptor.index,h=e?f:f+1;return ch?null:c},wT=({isMovingForward:t,isInHomeList:e,draggable:n,draggables:r,destination:i,insideDestination:c,previousImpact:d,viewport:f,afterCritical:h})=>{const p=d.at;if(p||ge(),p.type==="REORDER"){const y=AT({isMovingForward:t,isInHomeList:e,location:p.destination,insideDestination:c});return y==null?null:$d({draggable:n,insideDestination:c,destination:i,viewport:f,last:d.displaced,displacedBy:d.displacedBy,index:y})}const b=ST({isMovingForward:t,destination:i,displaced:d.displaced,draggables:r,combine:p.combine,afterCritical:h});return b==null?null:$d({draggable:n,insideDestination:c,destination:i,viewport:f,last:d.displaced,displacedBy:d.displacedBy,index:b})},CT=({displaced:t,afterCritical:e,combineWith:n,displacedBy:r})=>{const i=!!(t.visible[n]||t.invisible[n]);return Bs(n,e)?i?Lt:Xl(r.point):i?r.point:Lt},DT=({afterCritical:t,impact:e,draggables:n})=>{const r=Eu(e);r||ge();const i=r.draggableId,c=n[i].page.borderBox.center,d=CT({displaced:e.displaced,afterCritical:t,combineWith:i,displacedBy:e.displacedBy});return Ft(c,d)};const yE=(t,e)=>e.margin[t.start]+e.borderBox[t.size]/2,OT=(t,e)=>e.margin[t.end]+e.borderBox[t.size]/2,Vg=(t,e,n)=>e[t.crossAxisStart]+n.margin[t.crossAxisStart]+n.borderBox[t.crossAxisSize]/2,Cv=({axis:t,moveRelativeTo:e,isMoving:n})=>Or(t.line,e.marginBox[t.end]+yE(t,n),Vg(t,e.marginBox,n)),Dv=({axis:t,moveRelativeTo:e,isMoving:n})=>Or(t.line,e.marginBox[t.start]-OT(t,n),Vg(t,e.marginBox,n)),RT=({axis:t,moveInto:e,isMoving:n})=>Or(t.line,e.contentBox[t.start]+yE(t,n),Vg(t,e.contentBox,n));var TT=({impact:t,draggable:e,draggables:n,droppable:r,afterCritical:i})=>{const c=Zl(r.descriptor.id,n),d=e.page,f=r.axis;if(!c.length)return RT({axis:f,moveInto:r.page,isMoving:d});const{displaced:h,displacedBy:p}=t,b=h.all[0];if(b){const x=n[b];if(Bs(b,i))return Dv({axis:f,moveRelativeTo:x.page,isMoving:d});const v=Hd(x.page,p.point);return Dv({axis:f,moveRelativeTo:v,isMoving:d})}const y=c[c.length-1];if(y.descriptor.id===e.descriptor.id)return d.borderBox.center;if(Bs(y.descriptor.id,i)){const x=Hd(y.page,Xl(i.displacedBy.point));return Cv({axis:f,moveRelativeTo:x,isMoving:d})}return Cv({axis:f,moveRelativeTo:y.page,isMoving:d})},$p=(t,e)=>{const n=t.frame;return n?Ft(e,n.scroll.diff.displacement):e};const kT=({impact:t,draggable:e,droppable:n,draggables:r,afterCritical:i})=>{const c=e.page.borderBox.center,d=t.at;return!n||!d?c:d.type==="REORDER"?TT({impact:t,draggable:e,draggables:r,droppable:n,afterCritical:i}):DT({impact:t,draggables:r,afterCritical:i})};var Su=t=>{const e=kT(t),n=t.droppable;return n?$p(n,e):e},vE=(t,e)=>{const n=wn(e,t.scroll.initial),r=Xl(n);return{frame:ta({top:e.y,bottom:e.y+t.frame.height,left:e.x,right:e.x+t.frame.width}),scroll:{initial:t.scroll.initial,max:t.scroll.max,current:e,diff:{value:n,displacement:r}}}};function Ov(t,e){return t.map(n=>e[n])}function _T(t,e){for(let n=0;n{const c=vE(e,Ft(e.scroll.current,i)),d=n.frame?Bg(n,Ft(n.frame.scroll.current,i)):n,f=t.displaced,h=yo({afterDragging:Ov(f.all,r),destination:n,displacedBy:t.displacedBy,viewport:c.frame,last:f,forceShouldAnimate:!1}),p=yo({afterDragging:Ov(f.all,r),destination:d,displacedBy:t.displacedBy,viewport:e.frame,last:f,forceShouldAnimate:!1}),b={},y={},x=[f,h,p];return f.all.forEach(N=>{const j=_T(N,x);if(j){y[N]=j;return}b[N]=!0}),{...t,displaced:{all:f.all,invisible:b,visible:y}}},IT=(t,e)=>Ft(t.scroll.diff.displacement,e),qg=({pageBorderBoxCenter:t,draggable:e,viewport:n})=>{const r=IT(n,t),i=wn(r,e.page.borderBox.center);return Ft(e.client.borderBox.center,i)},NE=({draggable:t,destination:e,newPageBorderBoxCenter:n,viewport:r,withDroppableDisplacement:i,onlyOnMainAxis:c=!1})=>{const d=wn(n,t.page.borderBox.center),h={target:Ho(t.page.borderBox,d),destination:e,withDroppableDisplacement:i,viewport:r};return c?vT(h):bE(h)},LT=({isMovingForward:t,draggable:e,destination:n,draggables:r,previousImpact:i,viewport:c,previousPageBorderBoxCenter:d,previousClientSelection:f,afterCritical:h})=>{if(!n.isEnabled)return null;const p=Zl(n.descriptor.id,r),b=Kl(e,n),y=fT({isMovingForward:t,draggable:e,destination:n,insideDestination:p,previousImpact:i})||wT({isMovingForward:t,isInHomeList:b,draggable:e,draggables:r,destination:n,insideDestination:p,previousImpact:i,viewport:c,afterCritical:h});if(!y)return null;const x=Su({impact:y,draggable:e,droppable:n,draggables:r,afterCritical:h});if(NE({draggable:e,destination:n,newPageBorderBoxCenter:x,viewport:c.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0}))return{clientSelection:qg({pageBorderBoxCenter:x,draggable:e,viewport:c}),impact:y,scrollJumpRequest:null};const N=wn(x,d),j=MT({impact:y,viewport:c,destination:n,draggables:r,maxScrollChange:N});return{clientSelection:f,impact:j,scrollJumpRequest:N}};const Zt=t=>{const e=t.subject.active;return e||ge(),e};var zT=({isMovingForward:t,pageBorderBoxCenter:e,source:n,droppables:r,viewport:i})=>{const c=n.subject.active;if(!c)return null;const d=n.axis,f=Yn(c[d.start],c[d.end]),h=Nu(r).filter(b=>b!==n).filter(b=>b.isEnabled).filter(b=>!!b.subject.active).filter(b=>mE(i.frame)(Zt(b))).filter(b=>{const y=Zt(b);return t?c[d.crossAxisEnd]{const y=Zt(b),x=Yn(y[d.start],y[d.end]);return f(y[d.start])||f(y[d.end])||x(c[d.start])||x(c[d.end])}).sort((b,y)=>{const x=Zt(b)[d.crossAxisStart],v=Zt(y)[d.crossAxisStart];return t?x-v:v-x}).filter((b,y,x)=>Zt(b)[d.crossAxisStart]===Zt(x[0])[d.crossAxisStart]);if(!h.length)return null;if(h.length===1)return h[0];const p=h.filter(b=>Yn(Zt(b)[d.start],Zt(b)[d.end])(e[d.line]));return p.length===1?p[0]:p.length>1?p.sort((b,y)=>Zt(b)[d.start]-Zt(y)[d.start])[0]:h.sort((b,y)=>{const x=Sv(e,Av(Zt(b))),v=Sv(e,Av(Zt(y)));return x!==v?x-v:Zt(b)[d.start]-Zt(y)[d.start]})[0]};const Rv=(t,e)=>{const n=t.page.borderBox.center;return Bs(t.descriptor.id,e)?wn(n,e.displacedBy.point):n},PT=(t,e)=>{const n=t.page.borderBox;return Bs(t.descriptor.id,e)?Ho(n,Xl(e.displacedBy.point)):n};var UT=({pageBorderBoxCenter:t,viewport:e,destination:n,insideDestination:r,afterCritical:i})=>r.filter(d=>bE({target:PT(d,i),destination:n,viewport:e.frame,withDroppableDisplacement:!0})).sort((d,f)=>{const h=xo(t,$p(n,Rv(d,i))),p=xo(t,$p(n,Rv(f,i)));return h{const r=t.axis;if(t.descriptor.mode==="virtual")return Or(r.line,e[r.line]);const i=t.subject.page.contentBox[r.size],h=Zl(t.descriptor.id,n).reduce((p,b)=>p+b.client.marginBox[r.size],0)+e[r.line]-i;return h<=0?null:Or(r.line,h)},EE=(t,e)=>({...t,scroll:{...t.scroll,max:e}}),jE=(t,e,n)=>{const r=t.frame;Kl(e,t)&&ge(),t.subject.withPlaceholder&&ge();const i=Go(t.axis,e.displaceBy).point,c=BT(t,i,n),d={placeholderSize:i,increasedBy:c,oldFrameMaxScroll:t.frame?t.frame.scroll.max:null};if(!r){const b=Bl({page:t.subject.page,withPlaceholder:d,axis:t.axis,frame:t.frame});return{...t,subject:b}}const f=c?Ft(r.scroll.max,c):r.scroll.max,h=EE(r,f),p=Bl({page:t.subject.page,withPlaceholder:d,axis:t.axis,frame:h});return{...t,subject:p,frame:h}},HT=t=>{const e=t.subject.withPlaceholder;e||ge();const n=t.frame;if(!n){const d=Bl({page:t.subject.page,axis:t.axis,frame:null,withPlaceholder:null});return{...t,subject:d}}const r=e.oldFrameMaxScroll;r||ge();const i=EE(n,r),c=Bl({page:t.subject.page,axis:t.axis,frame:i,withPlaceholder:null});return{...t,subject:c,frame:i}};var GT=({previousPageBorderBoxCenter:t,moveRelativeTo:e,insideDestination:n,draggable:r,draggables:i,destination:c,viewport:d,afterCritical:f})=>{if(!e){if(n.length)return null;const y={displaced:bo,displacedBy:gE,at:{type:"REORDER",destination:{droppableId:c.descriptor.id,index:0}}},x=Su({impact:y,draggable:r,droppable:c,draggables:i,afterCritical:f}),v=Kl(r,c)?c:jE(c,r,i);return NE({draggable:r,destination:v,newPageBorderBoxCenter:x,viewport:d.frame,withDroppableDisplacement:!1,onlyOnMainAxis:!0})?y:null}const h=t[c.axis.line]<=e.page.borderBox.center[c.axis.line],p=(()=>{const y=e.descriptor.index;return e.descriptor.id===r.descriptor.id||h?y:y+1})(),b=Go(c.axis,r.displaceBy);return $d({draggable:r,insideDestination:n,destination:c,viewport:d,displacedBy:b,last:bo,index:p})},FT=({isMovingForward:t,previousPageBorderBoxCenter:e,draggable:n,isOver:r,draggables:i,droppables:c,viewport:d,afterCritical:f})=>{const h=zT({isMovingForward:t,pageBorderBoxCenter:e,source:r,droppables:c,viewport:d});if(!h)return null;const p=Zl(h.descriptor.id,i),b=UT({pageBorderBoxCenter:e,viewport:d,destination:h,insideDestination:p,afterCritical:f}),y=GT({previousPageBorderBoxCenter:e,destination:h,draggable:n,draggables:i,moveRelativeTo:b,insideDestination:p,viewport:d,afterCritical:f});if(!y)return null;const x=Su({impact:y,draggable:n,droppable:h,draggables:i,afterCritical:f});return{clientSelection:qg({pageBorderBoxCenter:x,draggable:n,viewport:d}),impact:y,scrollJumpRequest:null}},Cn=t=>{const e=t.at;return e?e.type==="REORDER"?e.destination.droppableId:e.combine.droppableId:null};const VT=(t,e)=>{const n=Cn(t);return n?e[n]:null};var qT=({state:t,type:e})=>{const n=VT(t.impact,t.dimensions.droppables),r=!!n,i=t.dimensions.droppables[t.critical.droppable.id],c=n||i,d=c.axis.direction,f=d==="vertical"&&(e==="MOVE_UP"||e==="MOVE_DOWN")||d==="horizontal"&&(e==="MOVE_LEFT"||e==="MOVE_RIGHT");if(f&&!r)return null;const h=e==="MOVE_DOWN"||e==="MOVE_RIGHT",p=t.dimensions.draggables[t.critical.draggable.id],b=t.current.page.borderBoxCenter,{draggables:y,droppables:x}=t.dimensions;return f?LT({isMovingForward:h,previousPageBorderBoxCenter:b,draggable:p,destination:c,draggables:y,viewport:t.viewport,previousClientSelection:t.current.client.selection,previousImpact:t.impact,afterCritical:t.afterCritical}):FT({isMovingForward:h,previousPageBorderBoxCenter:b,draggable:p,isOver:c,draggables:y,droppables:x,viewport:t.viewport,afterCritical:t.afterCritical})};function cr(t){return t.phase==="DRAGGING"||t.phase==="COLLECTING"}function SE(t){const e=Yn(t.top,t.bottom),n=Yn(t.left,t.right);return function(i){return e(i.y)&&n(i.x)}}function $T(t,e){return t.lefte.left&&t.tope.top}function YT({pageBorderBox:t,draggable:e,candidates:n}){const r=e.page.borderBox.center,i=n.map(c=>{const d=c.axis,f=Or(c.axis.line,t.center[d.line],c.page.borderBox.center[d.crossAxisLine]);return{id:c.descriptor.id,distance:xo(r,f)}}).sort((c,d)=>d.distance-c.distance);return i[0]?i[0].id:null}function QT({pageBorderBox:t,draggable:e,droppables:n}){const r=Nu(n).filter(i=>{if(!i.isEnabled)return!1;const c=i.subject.active;if(!c||!$T(t,c))return!1;if(SE(c)(t.center))return!0;const d=i.axis,f=c.center[d.crossAxisLine],h=t[d.crossAxisStart],p=t[d.crossAxisEnd],b=Yn(c[d.crossAxisStart],c[d.crossAxisEnd]),y=b(h),x=b(p);return!y&&!x?!0:y?hf});return r.length?r.length===1?r[0].descriptor.id:YT({pageBorderBox:t,draggable:e,candidates:r}):null}const AE=(t,e)=>ta(Ho(t,e));var WT=(t,e)=>{const n=t.frame;return n?AE(e,n.scroll.diff.value):e};function wE({displaced:t,id:e}){return!!(t.visible[e]||t.invisible[e])}function XT({draggable:t,closest:e,inHomeList:n}){return e?n&&e.descriptor.index>t.descriptor.index?e.descriptor.index-1:e.descriptor.index:null}var ZT=({pageBorderBoxWithDroppableScroll:t,draggable:e,destination:n,insideDestination:r,last:i,viewport:c,afterCritical:d})=>{const f=n.axis,h=Go(n.axis,e.displaceBy),p=h.value,b=t[f.start],y=t[f.end],v=ju(e,r).find(j=>{const S=j.descriptor.id,R=j.page.borderBox.center[f.line],w=Bs(S,d),D=wE({displaced:i,id:S});return w?D?y<=R:b{if(!r.isCombineEnabled)return null;const d=r.axis,f=Go(r.axis,t.displaceBy),h=f.value,p=e[d.start],b=e[d.end],x=ju(t,i).find(N=>{const j=N.descriptor.id,S=N.page.borderBox,w=S[d.size]/KT,D=Bs(j,c),C=wE({displaced:n.displaced,id:j});return D?C?b>S[d.start]+w&&bS[d.start]-h+w&&pS[d.start]+h+w&&bS[d.start]+w&&p{const f=AE(e.page.borderBox,t),h=QT({pageBorderBox:f,draggable:e,droppables:r});if(!h)return hT;const p=r[h],b=Zl(p.descriptor.id,n),y=WT(p,f);return JT({pageBorderBoxWithDroppableScroll:y,draggable:e,previousImpact:i,destination:p,insideDestination:b,afterCritical:d})||ZT({pageBorderBoxWithDroppableScroll:y,draggable:e,destination:p,insideDestination:b,last:i.displaced,viewport:c,afterCritical:d})},$g=(t,e)=>({...t,[e.descriptor.id]:e});const ek=({previousImpact:t,impact:e,droppables:n})=>{const r=Cn(t),i=Cn(e);if(!r||r===i)return n;const c=n[r];if(!c.subject.withPlaceholder)return n;const d=HT(c);return $g(n,d)};var tk=({draggable:t,draggables:e,droppables:n,previousImpact:r,impact:i})=>{const c=ek({previousImpact:r,impact:i,droppables:n}),d=Cn(i);if(!d)return c;const f=n[d];if(Kl(t,f)||f.subject.withPlaceholder)return c;const h=jE(f,t,e);return $g(c,h)},co=({state:t,clientSelection:e,dimensions:n,viewport:r,impact:i,scrollJumpRequest:c})=>{const d=r||t.viewport,f=n||t.dimensions,h=e||t.current.client.selection,p=wn(h,t.initial.client.selection),b={offset:p,selection:h,borderBoxCenter:Ft(t.initial.client.borderBoxCenter,p)},y={selection:Ft(b.selection,d.scroll.current),borderBoxCenter:Ft(b.borderBoxCenter,d.scroll.current),offset:Ft(b.offset,d.scroll.diff.value)},x={client:b,page:y};if(t.phase==="COLLECTING")return{...t,dimensions:f,viewport:d,current:x};const v=f.draggables[t.critical.draggable.id],N=i||CE({pageOffset:y.offset,draggable:v,draggables:f.draggables,droppables:f.droppables,previousImpact:t.impact,viewport:d,afterCritical:t.afterCritical}),j=tk({draggable:v,impact:N,previousImpact:t.impact,draggables:f.draggables,droppables:f.droppables});return{...t,current:x,dimensions:{draggables:f.draggables,droppables:j},impact:N,viewport:d,scrollJumpRequest:c||null,forceShouldAnimate:c?!1:null}};function nk(t,e){return t.map(n=>e[n])}var DE=({impact:t,viewport:e,draggables:n,destination:r,forceShouldAnimate:i})=>{const c=t.displaced,d=nk(c.all,n),f=yo({afterDragging:d,destination:r,displacedBy:t.displacedBy,viewport:e.frame,forceShouldAnimate:i,last:c});return{...t,displaced:f}},OE=({impact:t,draggable:e,droppable:n,draggables:r,viewport:i,afterCritical:c})=>{const d=Su({impact:t,draggable:e,draggables:r,droppable:n,afterCritical:c});return qg({pageBorderBoxCenter:d,draggable:e,viewport:i})},RE=({state:t,dimensions:e,viewport:n})=>{t.movementMode!=="SNAP"&&ge();const r=t.impact,i=n||t.viewport,c=e||t.dimensions,{draggables:d,droppables:f}=c,h=d[t.critical.draggable.id],p=Cn(r);p||ge();const b=f[p],y=DE({impact:r,viewport:i,destination:b,draggables:d}),x=OE({impact:y,draggable:h,droppable:b,draggables:d,viewport:i,afterCritical:t.afterCritical});return co({impact:y,clientSelection:x,state:t,dimensions:c,viewport:i})},ak=t=>({index:t.index,droppableId:t.droppableId}),TE=({draggable:t,home:e,draggables:n,viewport:r})=>{const i=Go(e.axis,t.displaceBy),c=Zl(e.descriptor.id,n),d=c.indexOf(t);d===-1&&ge();const f=c.slice(d+1),h=f.reduce((x,v)=>(x[v.descriptor.id]=!0,x),{}),p={inVirtualList:e.descriptor.mode==="virtual",displacedBy:i,effected:h};return{impact:{displaced:yo({afterDragging:f,destination:e,displacedBy:i,last:null,viewport:r.frame,forceShouldAnimate:!1}),displacedBy:i,at:{type:"REORDER",destination:ak(t.descriptor)}},afterCritical:p}},sk=(t,e)=>({draggables:t.draggables,droppables:$g(t.droppables,e)}),rk=({draggable:t,offset:e,initialWindowScroll:n})=>{const r=Hd(t.client,e),i=Gd(r,n);return{...t,placeholder:{...t.placeholder,client:r},client:r,page:i}},lk=t=>{const e=t.frame;return e||ge(),e},ik=({additions:t,updatedDroppables:e,viewport:n})=>{const r=n.scroll.diff.value;return t.map(i=>{const c=i.descriptor.droppableId,d=e[c],h=lk(d).scroll.diff.value,p=Ft(r,h);return rk({draggable:i,offset:p,initialWindowScroll:n.scroll.initial})})},ok=({state:t,published:e})=>{const n=e.modified.map(R=>{const w=t.dimensions.droppables[R.droppableId];return Bg(w,R.scroll)}),r={...t.dimensions.droppables,...hE(n)},i=pE(ik({additions:e.additions,updatedDroppables:r,viewport:t.viewport})),c={...t.dimensions.draggables,...i};e.removals.forEach(R=>{delete c[R]});const d={droppables:r,draggables:c},f=Cn(t.impact),h=f?d.droppables[f]:null,p=d.draggables[t.critical.draggable.id],b=d.droppables[t.critical.droppable.id],{impact:y,afterCritical:x}=TE({draggable:p,home:b,draggables:c,viewport:t.viewport}),v=h&&h.isCombineEnabled?t.impact:y,N=CE({pageOffset:t.current.page.offset,draggable:d.draggables[t.critical.draggable.id],draggables:d.draggables,droppables:d.droppables,previousImpact:v,viewport:t.viewport,afterCritical:x}),j={...t,phase:"DRAGGING",impact:N,onLiftImpact:y,dimensions:d,afterCritical:x,forceShouldAnimate:!1};return t.phase==="COLLECTING"?j:{...j,phase:"DROP_PENDING",reason:t.reason,isWaiting:!1}};const Yp=t=>t.movementMode==="SNAP",hp=(t,e,n)=>{const r=sk(t.dimensions,e);return!Yp(t)||n?co({state:t,dimensions:r}):RE({state:t,dimensions:r})};function pp(t){return t.isDragging&&t.movementMode==="SNAP"?{...t,scrollJumpRequest:null}:t}const Tv={phase:"IDLE",completed:null,shouldFlush:!1};var ck=(t=Tv,e)=>{if(e.type==="FLUSH")return{...Tv,shouldFlush:!0};if(e.type==="INITIAL_PUBLISH"){t.phase!=="IDLE"&&ge();const{critical:n,clientSelection:r,viewport:i,dimensions:c,movementMode:d}=e.payload,f=c.draggables[n.draggable.id],h=c.droppables[n.droppable.id],p={selection:r,borderBoxCenter:f.client.borderBox.center,offset:Lt},b={client:p,page:{selection:Ft(p.selection,i.scroll.initial),borderBoxCenter:Ft(p.selection,i.scroll.initial),offset:Ft(p.selection,i.scroll.diff.value)}},y=Nu(c.droppables).every(j=>!j.isFixedOnPage),{impact:x,afterCritical:v}=TE({draggable:f,home:h,draggables:c.draggables,viewport:i});return{phase:"DRAGGING",isDragging:!0,critical:n,movementMode:d,dimensions:c,initial:b,current:b,isWindowScrollAllowed:y,impact:x,afterCritical:v,onLiftImpact:x,viewport:i,scrollJumpRequest:null,forceShouldAnimate:null}}if(e.type==="COLLECTION_STARTING")return t.phase==="COLLECTING"||t.phase==="DROP_PENDING"?t:(t.phase!=="DRAGGING"&&ge(),{...t,phase:"COLLECTING"});if(e.type==="PUBLISH_WHILE_DRAGGING")return t.phase==="COLLECTING"||t.phase==="DROP_PENDING"||ge(),ok({state:t,published:e.payload});if(e.type==="MOVE"){if(t.phase==="DROP_PENDING")return t;cr(t)||ge();const{client:n}=e.payload;return Ls(n,t.current.client.selection)?t:co({state:t,clientSelection:n,impact:Yp(t)?t.impact:null})}if(e.type==="UPDATE_DROPPABLE_SCROLL"){if(t.phase==="DROP_PENDING"||t.phase==="COLLECTING")return pp(t);cr(t)||ge();const{id:n,newScroll:r}=e.payload,i=t.dimensions.droppables[n];if(!i)return t;const c=Bg(i,r);return hp(t,c,!1)}if(e.type==="UPDATE_DROPPABLE_IS_ENABLED"){if(t.phase==="DROP_PENDING")return t;cr(t)||ge();const{id:n,isEnabled:r}=e.payload,i=t.dimensions.droppables[n];i||ge(),i.isEnabled===r&&ge();const c={...i,isEnabled:r};return hp(t,c,!0)}if(e.type==="UPDATE_DROPPABLE_IS_COMBINE_ENABLED"){if(t.phase==="DROP_PENDING")return t;cr(t)||ge();const{id:n,isCombineEnabled:r}=e.payload,i=t.dimensions.droppables[n];i||ge(),i.isCombineEnabled===r&&ge();const c={...i,isCombineEnabled:r};return hp(t,c,!0)}if(e.type==="MOVE_BY_WINDOW_SCROLL"){if(t.phase==="DROP_PENDING"||t.phase==="DROP_ANIMATING")return t;cr(t)||ge(),t.isWindowScrollAllowed||ge();const n=e.payload.newScroll;if(Ls(t.viewport.scroll.current,n))return pp(t);const r=vE(t.viewport,n);return Yp(t)?RE({state:t,viewport:r}):co({state:t,viewport:r})}if(e.type==="UPDATE_VIEWPORT_MAX_SCROLL"){if(!cr(t))return t;const n=e.payload.maxScroll;if(Ls(n,t.viewport.scroll.max))return t;const r={...t.viewport,scroll:{...t.viewport.scroll,max:n}};return{...t,viewport:r}}if(e.type==="MOVE_UP"||e.type==="MOVE_DOWN"||e.type==="MOVE_LEFT"||e.type==="MOVE_RIGHT"){if(t.phase==="COLLECTING"||t.phase==="DROP_PENDING")return t;t.phase!=="DRAGGING"&&ge();const n=qT({state:t,type:e.type});return n?co({state:t,impact:n.impact,clientSelection:n.clientSelection,scrollJumpRequest:n.scrollJumpRequest}):t}if(e.type==="DROP_PENDING"){const n=e.payload.reason;return t.phase!=="COLLECTING"&&ge(),{...t,phase:"DROP_PENDING",isWaiting:!0,reason:n}}if(e.type==="DROP_ANIMATE"){const{completed:n,dropDuration:r,newHomeClientOffset:i}=e.payload;return t.phase==="DRAGGING"||t.phase==="DROP_PENDING"||ge(),{phase:"DROP_ANIMATING",completed:n,dropDuration:r,newHomeClientOffset:i,dimensions:t.dimensions}}if(e.type==="DROP_COMPLETE"){const{completed:n}=e.payload;return{phase:"IDLE",completed:n,shouldFlush:!1}}return t};function Ke(t,e){return t instanceof Object&&"type"in t&&t.type===e}const dk=t=>({type:"BEFORE_INITIAL_CAPTURE",payload:t}),uk=t=>({type:"LIFT",payload:t}),fk=t=>({type:"INITIAL_PUBLISH",payload:t}),hk=t=>({type:"PUBLISH_WHILE_DRAGGING",payload:t}),pk=()=>({type:"COLLECTION_STARTING",payload:null}),gk=t=>({type:"UPDATE_DROPPABLE_SCROLL",payload:t}),mk=t=>({type:"UPDATE_DROPPABLE_IS_ENABLED",payload:t}),xk=t=>({type:"UPDATE_DROPPABLE_IS_COMBINE_ENABLED",payload:t}),kE=t=>({type:"MOVE",payload:t}),bk=t=>({type:"MOVE_BY_WINDOW_SCROLL",payload:t}),yk=t=>({type:"UPDATE_VIEWPORT_MAX_SCROLL",payload:t}),vk=()=>({type:"MOVE_UP",payload:null}),Nk=()=>({type:"MOVE_DOWN",payload:null}),Ek=()=>({type:"MOVE_RIGHT",payload:null}),jk=()=>({type:"MOVE_LEFT",payload:null}),Yg=()=>({type:"FLUSH",payload:null}),Sk=t=>({type:"DROP_ANIMATE",payload:t}),Qg=t=>({type:"DROP_COMPLETE",payload:t}),_E=t=>({type:"DROP",payload:t}),Ak=t=>({type:"DROP_PENDING",payload:t}),ME=()=>({type:"DROP_ANIMATION_FINISHED",payload:null});var wk=t=>({getState:e,dispatch:n})=>r=>i=>{if(!Ke(i,"LIFT")){r(i);return}const{id:c,clientSelection:d,movementMode:f}=i.payload,h=e();h.phase==="DROP_ANIMATING"&&n(Qg({completed:h.completed})),e().phase!=="IDLE"&&ge(),n(Yg()),n(dk({draggableId:c,movementMode:f}));const b={draggableId:c,scrollOptions:{shouldPublishImmediately:f==="SNAP"}},{critical:y,dimensions:x,viewport:v}=t.startPublishing(b);n(fk({critical:y,dimensions:x,clientSelection:d,movementMode:f,viewport:v}))},Ck=t=>()=>e=>n=>{Ke(n,"INITIAL_PUBLISH")&&t.dragging(),Ke(n,"DROP_ANIMATE")&&t.dropping(n.payload.completed.result.reason),(Ke(n,"FLUSH")||Ke(n,"DROP_COMPLETE"))&&t.resting(),e(n)};const Wg={outOfTheWay:"cubic-bezier(0.2, 0, 0, 1)",drop:"cubic-bezier(.2,1,.1,1)"},vo={opacity:{drop:0,combining:.7},scale:{drop:.75}},IE={outOfTheWay:.2,minDropTime:.33,maxDropTime:.55},or=`${IE.outOfTheWay}s ${Wg.outOfTheWay}`,uo={fluid:`opacity ${or}`,snap:`transform ${or}, opacity ${or}`,drop:t=>{const e=`${t}s ${Wg.drop}`;return`transform ${e}, opacity ${e}`},outOfTheWay:`transform ${or}`,placeholder:`height ${or}, width ${or}, margin ${or}`},kv=t=>Ls(t,Lt)?void 0:`translate(${t.x}px, ${t.y}px)`,Qp={moveTo:kv,drop:(t,e)=>{const n=kv(t);if(n)return e?`${n} scale(${vo.scale.drop})`:n}},{minDropTime:Wp,maxDropTime:LE}=IE,Dk=LE-Wp,_v=1500,Ok=.6;var Rk=({current:t,destination:e,reason:n})=>{const r=xo(t,e);if(r<=0)return Wp;if(r>=_v)return LE;const i=r/_v,c=Wp+Dk*i,d=n==="CANCEL"?c*Ok:c;return Number(d.toFixed(2))},Tk=({impact:t,draggable:e,dimensions:n,viewport:r,afterCritical:i})=>{const{draggables:c,droppables:d}=n,f=Cn(t),h=f?d[f]:null,p=d[e.descriptor.droppableId],b=OE({impact:t,draggable:e,draggables:c,afterCritical:i,droppable:h||p,viewport:r});return wn(b,e.client.borderBox.center)},kk=({draggables:t,reason:e,lastImpact:n,home:r,viewport:i,onLiftImpact:c})=>!n.at||e!=="DROP"?{impact:DE({draggables:t,impact:c,destination:r,viewport:i,forceShouldAnimate:!0}),didDropInsideDroppable:!1}:n.at.type==="REORDER"?{impact:n,didDropInsideDroppable:!0}:{impact:{...n,displaced:bo},didDropInsideDroppable:!0};const _k=({getState:t,dispatch:e})=>n=>r=>{if(!Ke(r,"DROP")){n(r);return}const i=t(),c=r.payload.reason;if(i.phase==="COLLECTING"){e(Ak({reason:c}));return}if(i.phase==="IDLE")return;i.phase==="DROP_PENDING"&&i.isWaiting&&ge(),i.phase==="DRAGGING"||i.phase==="DROP_PENDING"||ge();const f=i.critical,h=i.dimensions,p=h.draggables[i.critical.draggable.id],{impact:b,didDropInsideDroppable:y}=kk({reason:c,lastImpact:i.impact,afterCritical:i.afterCritical,onLiftImpact:i.onLiftImpact,home:i.dimensions.droppables[i.critical.droppable.id],viewport:i.viewport,draggables:i.dimensions.draggables}),x=y?Hg(b):null,v=y?Eu(b):null,N={index:f.draggable.index,droppableId:f.droppable.id},j={draggableId:p.descriptor.id,type:p.descriptor.type,source:N,reason:c,mode:i.movementMode,destination:x,combine:v},S=Tk({impact:b,draggable:p,dimensions:h,viewport:i.viewport,afterCritical:i.afterCritical}),R={critical:i.critical,afterCritical:i.afterCritical,result:j,impact:b};if(!(!Ls(i.current.client.offset,S)||!!j.combine)){e(Qg({completed:R}));return}const D=Rk({current:i.current.client.offset,destination:S,reason:c});e(Sk({newHomeClientOffset:S,dropDuration:D,completed:R}))};var zE=()=>({x:window.pageXOffset,y:window.pageYOffset});function Mk(t){return{eventName:"scroll",options:{passive:!0,capture:!1},fn:e=>{e.target!==window&&e.target!==window.document||t()}}}function Ik({onWindowScroll:t}){function e(){t(zE())}const n=mo(e),r=Mk(n);let i=Is;function c(){return i!==Is}function d(){c()&&ge(),i=$n(window,[r])}function f(){c()||ge(),n.cancel(),i(),i=Is}return{start:d,stop:f,isActive:c}}const Lk=t=>Ke(t,"DROP_COMPLETE")||Ke(t,"DROP_ANIMATE")||Ke(t,"FLUSH"),zk=t=>{const e=Ik({onWindowScroll:n=>{t.dispatch(bk({newScroll:n}))}});return n=>r=>{!e.isActive()&&Ke(r,"INITIAL_PUBLISH")&&e.start(),e.isActive()&&Lk(r)&&e.stop(),n(r)}};var Pk=t=>{let e=!1,n=!1;const r=setTimeout(()=>{n=!0}),i=c=>{e||n||(e=!0,t(c),clearTimeout(r))};return i.wasCalled=()=>e,i},Uk=()=>{const t=[],e=i=>{const c=t.findIndex(f=>f.timerId===i);c===-1&&ge();const[d]=t.splice(c,1);d.callback()};return{add:i=>{const c=setTimeout(()=>e(c)),d={timerId:c,callback:i};t.push(d)},flush:()=>{if(!t.length)return;const i=[...t];t.length=0,i.forEach(c=>{clearTimeout(c.timerId),c.callback()})}}};const Bk=(t,e)=>t==null&&e==null?!0:t==null||e==null?!1:t.droppableId===e.droppableId&&t.index===e.index,Hk=(t,e)=>t==null&&e==null?!0:t==null||e==null?!1:t.draggableId===e.draggableId&&t.droppableId===e.droppableId,Gk=(t,e)=>{if(t===e)return!0;const n=t.draggable.id===e.draggable.id&&t.draggable.droppableId===e.draggable.droppableId&&t.draggable.type===e.draggable.type&&t.draggable.index===e.draggable.index,r=t.droppable.id===e.droppable.id&&t.droppable.type===e.droppable.type;return n&&r},Ji=(t,e)=>{e()},hd=(t,e)=>({draggableId:t.draggable.id,type:t.droppable.type,source:{droppableId:t.droppable.id,index:t.draggable.index},mode:e});function gp(t,e,n,r){if(!t){n(r(e));return}const i=Pk(n);t(e,{announce:i}),i.wasCalled()||n(r(e))}var Fk=(t,e)=>{const n=Uk();let r=null;const i=(y,x)=>{r&&ge(),Ji("onBeforeCapture",()=>{const v=t().onBeforeCapture;v&&v({draggableId:y,mode:x})})},c=(y,x)=>{r&&ge(),Ji("onBeforeDragStart",()=>{const v=t().onBeforeDragStart;v&&v(hd(y,x))})},d=(y,x)=>{r&&ge();const v=hd(y,x);r={mode:x,lastCritical:y,lastLocation:v.source,lastCombine:null},n.add(()=>{Ji("onDragStart",()=>gp(t().onDragStart,v,e,Od.onDragStart))})},f=(y,x)=>{const v=Hg(x),N=Eu(x);r||ge();const j=!Gk(y,r.lastCritical);j&&(r.lastCritical=y);const S=!Bk(r.lastLocation,v);S&&(r.lastLocation=v);const R=!Hk(r.lastCombine,N);if(R&&(r.lastCombine=N),!j&&!S&&!R)return;const w={...hd(y,r.mode),combine:N,destination:v};n.add(()=>{Ji("onDragUpdate",()=>gp(t().onDragUpdate,w,e,Od.onDragUpdate))})},h=()=>{r||ge(),n.flush()},p=y=>{r||ge(),r=null,Ji("onDragEnd",()=>gp(t().onDragEnd,y,e,Od.onDragEnd))};return{beforeCapture:i,beforeStart:c,start:d,update:f,flush:h,drop:p,abort:()=>{if(!r)return;const y={...hd(r.lastCritical,r.mode),combine:null,destination:null,reason:"CANCEL"};p(y)}}},Vk=(t,e)=>{const n=Fk(t,e);return r=>i=>c=>{if(Ke(c,"BEFORE_INITIAL_CAPTURE")){n.beforeCapture(c.payload.draggableId,c.payload.movementMode);return}if(Ke(c,"INITIAL_PUBLISH")){const f=c.payload.critical;n.beforeStart(f,c.payload.movementMode),i(c),n.start(f,c.payload.movementMode);return}if(Ke(c,"DROP_COMPLETE")){const f=c.payload.completed.result;n.flush(),i(c),n.drop(f);return}if(i(c),Ke(c,"FLUSH")){n.abort();return}const d=r.getState();d.phase==="DRAGGING"&&n.update(d.critical,d.impact)}};const qk=t=>e=>n=>{if(!Ke(n,"DROP_ANIMATION_FINISHED")){e(n);return}const r=t.getState();r.phase!=="DROP_ANIMATING"&&ge(),t.dispatch(Qg({completed:r.completed}))},$k=t=>{let e=null,n=null;function r(){n&&(cancelAnimationFrame(n),n=null),e&&(e(),e=null)}return i=>c=>{if((Ke(c,"FLUSH")||Ke(c,"DROP_COMPLETE")||Ke(c,"DROP_ANIMATION_FINISHED"))&&r(),i(c),!Ke(c,"DROP_ANIMATE"))return;const d={eventName:"scroll",options:{capture:!0,passive:!1,once:!0},fn:function(){t.getState().phase==="DROP_ANIMATING"&&t.dispatch(ME())}};n=requestAnimationFrame(()=>{n=null,e=$n(window,[d])})}};var Yk=t=>()=>e=>n=>{(Ke(n,"DROP_COMPLETE")||Ke(n,"FLUSH")||Ke(n,"DROP_ANIMATE"))&&t.stopPublishing(),e(n)},Qk=t=>{let e=!1;return()=>n=>r=>{if(Ke(r,"INITIAL_PUBLISH")){e=!0,t.tryRecordFocus(r.payload.critical.draggable.id),n(r),t.tryRestoreFocusRecorded();return}if(n(r),!!e){if(Ke(r,"FLUSH")){e=!1,t.tryRestoreFocusRecorded();return}if(Ke(r,"DROP_COMPLETE")){e=!1;const i=r.payload.completed.result;i.combine&&t.tryShiftRecord(i.draggableId,i.combine.draggableId),t.tryRestoreFocusRecorded()}}}};const Wk=t=>Ke(t,"DROP_COMPLETE")||Ke(t,"DROP_ANIMATE")||Ke(t,"FLUSH");var Xk=t=>e=>n=>r=>{if(Wk(r)){t.stop(),n(r);return}if(Ke(r,"INITIAL_PUBLISH")){n(r);const i=e.getState();i.phase!=="DRAGGING"&&ge(),t.start(i);return}n(r),t.scroll(e.getState())};const Zk=t=>e=>n=>{if(e(n),!Ke(n,"PUBLISH_WHILE_DRAGGING"))return;const r=t.getState();r.phase==="DROP_PENDING"&&(r.isWaiting||t.dispatch(_E({reason:r.reason})))},Kk=JN;var Jk=({dimensionMarshal:t,focusMarshal:e,styleMarshal:n,getResponders:r,announce:i,autoScroller:c})=>KN(ck,Kk(KO(Ck(n),Yk(t),wk(t),_k,qk,$k,Zk,Xk(c),zk,Qk(e),Vk(r,i))));const mp=()=>({additions:{},removals:{},modified:{}});function e5({registry:t,callbacks:e}){let n=mp(),r=null;const i=()=>{r||(e.collectionStarting(),r=requestAnimationFrame(()=>{r=null;const{additions:h,removals:p,modified:b}=n,y=Object.keys(h).map(N=>t.draggable.getById(N).getDimension(Lt)).sort((N,j)=>N.descriptor.index-j.descriptor.index),x=Object.keys(b).map(N=>{const S=t.droppable.getById(N).callbacks.getScrollWhileDragging();return{droppableId:N,scroll:S}}),v={additions:y,removals:Object.keys(p),modified:x};n=mp(),e.publish(v)}))};return{add:h=>{const p=h.descriptor.id;n.additions[p]=h,n.modified[h.descriptor.droppableId]=!0,n.removals[p]&&delete n.removals[p],i()},remove:h=>{const p=h.descriptor;n.removals[p.id]=!0,n.modified[p.droppableId]=!0,n.additions[p.id]&&delete n.additions[p.id],i()},stop:()=>{r&&(cancelAnimationFrame(r),r=null,n=mp())}}}var PE=({scrollHeight:t,scrollWidth:e,height:n,width:r})=>{const i=wn({x:e,y:t},{x:r,y:n});return{x:Math.max(0,i.x),y:Math.max(0,i.y)}},UE=()=>{const t=document.documentElement;return t||ge(),t},BE=()=>{const t=UE();return PE({scrollHeight:t.scrollHeight,scrollWidth:t.scrollWidth,width:t.clientWidth,height:t.clientHeight})},t5=()=>{const t=zE(),e=BE(),n=t.y,r=t.x,i=UE(),c=i.clientWidth,d=i.clientHeight,f=r+c,h=n+d;return{frame:ta({top:n,left:r,right:f,bottom:h}),scroll:{initial:t,current:t,max:e,diff:{value:Lt,displacement:Lt}}}},n5=({critical:t,scrollOptions:e,registry:n})=>{const r=t5(),i=r.scroll.current,c=t.droppable,d=n.droppable.getAllByType(c.type).map(b=>b.callbacks.getDimensionAndWatchScroll(i,e)),f=n.draggable.getAllByType(t.draggable.type).map(b=>b.getDimension(i));return{dimensions:{draggables:pE(f),droppables:hE(d)},critical:t,viewport:r}};function Mv(t,e,n){return!(n.descriptor.id===e.id||n.descriptor.type!==e.type||t.droppable.getById(n.descriptor.droppableId).descriptor.mode!=="virtual")}var a5=(t,e)=>{let n=null;const r=e5({callbacks:{publish:e.publishWhileDragging,collectionStarting:e.collectionStarting},registry:t}),i=(x,v)=>{t.droppable.exists(x)||ge(),n&&e.updateDroppableIsEnabled({id:x,isEnabled:v})},c=(x,v)=>{n&&(t.droppable.exists(x)||ge(),e.updateDroppableIsCombineEnabled({id:x,isCombineEnabled:v}))},d=(x,v)=>{n&&(t.droppable.exists(x)||ge(),e.updateDroppableScroll({id:x,newScroll:v}))},f=(x,v)=>{n&&t.droppable.getById(x).callbacks.scroll(v)},h=()=>{if(!n)return;r.stop();const x=n.critical.droppable;t.droppable.getAllByType(x.type).forEach(v=>v.callbacks.dragStopped()),n.unsubscribe(),n=null},p=x=>{n||ge();const v=n.critical.draggable;x.type==="ADDITION"&&Mv(t,v,x.value)&&r.add(x.value),x.type==="REMOVAL"&&Mv(t,v,x.value)&&r.remove(x.value)};return{updateDroppableIsEnabled:i,updateDroppableIsCombineEnabled:c,scrollDroppable:f,updateDroppableScroll:d,startPublishing:x=>{n&&ge();const v=t.draggable.getById(x.draggableId),N=t.droppable.getById(v.descriptor.droppableId),j={draggable:v.descriptor,droppable:N.descriptor},S=t.subscribe(p);return n={critical:j,unsubscribe:S},n5({critical:j,registry:t,scrollOptions:x.scrollOptions})},stopPublishing:h}},HE=(t,e)=>t.phase==="IDLE"?!0:t.phase!=="DROP_ANIMATING"||t.completed.result.draggableId===e?!1:t.completed.result.reason==="DROP",s5=t=>{window.scrollBy(t.x,t.y)};const r5=Mt(t=>Nu(t).filter(e=>!(!e.isEnabled||!e.frame))),l5=(t,e)=>r5(e).find(r=>(r.frame||ge(),SE(r.frame.pageMarginBox)(t)))||null;var i5=({center:t,destination:e,droppables:n})=>{if(e){const i=n[e];return i.frame?i:null}return l5(t,n)};const No={startFromPercentage:.25,maxScrollAtPercentage:.05,maxPixelScroll:28,ease:t=>t**2,durationDampening:{stopDampeningAt:1200,accelerateAt:360},disabled:!1};var o5=(t,e,n=()=>No)=>{const r=n(),i=t[e.size]*r.startFromPercentage,c=t[e.size]*r.maxScrollAtPercentage;return{startScrollingFrom:i,maxScrollValueAt:c}},GE=({startOfRange:t,endOfRange:e,current:n})=>{const r=e-t;return r===0?0:(n-t)/r},Xg=1,c5=(t,e,n=()=>No)=>{const r=n();if(t>e.startScrollingFrom)return 0;if(t<=e.maxScrollValueAt)return r.maxPixelScroll;if(t===e.startScrollingFrom)return Xg;const c=1-GE({startOfRange:e.maxScrollValueAt,endOfRange:e.startScrollingFrom,current:t}),d=r.maxPixelScroll*r.ease(c);return Math.ceil(d)},d5=(t,e,n)=>{const r=n(),i=r.durationDampening.accelerateAt,c=r.durationDampening.stopDampeningAt,d=e,f=c,p=Date.now()-d;if(p>=c)return t;if(p{const c=c5(t,e,i);return c===0?0:r?Math.max(d5(c,n,i),Xg):c},Lv=({container:t,distanceToEdges:e,dragStartTime:n,axis:r,shouldUseTimeDampening:i,getAutoScrollerOptions:c})=>{const d=o5(t,r,c);return e[r.end]{const r=e.height>t.height,i=e.width>t.width;return!i&&!r?n:i&&r?null:{x:i?0:n.x,y:r?0:n.y}};const f5=fE(t=>t===0?0:t);var FE=({dragStartTime:t,container:e,subject:n,center:r,shouldUseTimeDampening:i,getAutoScrollerOptions:c})=>{const d={top:r.y-e.top,right:e.right-r.x,bottom:e.bottom-r.y,left:r.x-e.left},f=Lv({container:e,distanceToEdges:d,dragStartTime:t,axis:Gg,shouldUseTimeDampening:i,getAutoScrollerOptions:c}),h=Lv({container:e,distanceToEdges:d,dragStartTime:t,axis:xE,shouldUseTimeDampening:i,getAutoScrollerOptions:c}),p=f5({x:h,y:f});if(Ls(p,Lt))return null;const b=u5({container:e,subject:n,proposedScroll:p});return b?Ls(b,Lt)?null:b:null};const h5=fE(t=>t===0?0:t>0?1:-1),Zg=(()=>{const t=(e,n)=>e<0?e:e>n?e-n:0;return({current:e,max:n,change:r})=>{const i=Ft(e,r),c={x:t(i.x,n.x),y:t(i.y,n.y)};return Ls(c,Lt)?null:c}})(),VE=({max:t,current:e,change:n})=>{const r={x:Math.max(e.x,t.x),y:Math.max(e.y,t.y)},i=h5(n),c=Zg({max:r,current:e,change:i});return!c||i.x!==0&&c.x===0||i.y!==0&&c.y===0},Kg=(t,e)=>VE({current:t.scroll.current,max:t.scroll.max,change:e}),p5=(t,e)=>{if(!Kg(t,e))return null;const n=t.scroll.max,r=t.scroll.current;return Zg({current:r,max:n,change:e})},Jg=(t,e)=>{const n=t.frame;return n?VE({current:n.scroll.current,max:n.scroll.max,change:e}):!1},g5=(t,e)=>{const n=t.frame;return!n||!Jg(t,e)?null:Zg({current:n.scroll.current,max:n.scroll.max,change:e})};var m5=({viewport:t,subject:e,center:n,dragStartTime:r,shouldUseTimeDampening:i,getAutoScrollerOptions:c})=>{const d=FE({dragStartTime:r,container:t.frame,subject:e,center:n,shouldUseTimeDampening:i,getAutoScrollerOptions:c});return d&&Kg(t,d)?d:null},x5=({droppable:t,subject:e,center:n,dragStartTime:r,shouldUseTimeDampening:i,getAutoScrollerOptions:c})=>{const d=t.frame;if(!d)return null;const f=FE({dragStartTime:r,container:d.pageMarginBox,subject:e,center:n,shouldUseTimeDampening:i,getAutoScrollerOptions:c});return f&&Jg(t,f)?f:null},zv=({state:t,dragStartTime:e,shouldUseTimeDampening:n,scrollWindow:r,scrollDroppable:i,getAutoScrollerOptions:c})=>{const d=t.current.page.borderBoxCenter,h=t.dimensions.draggables[t.critical.draggable.id].page.marginBox;if(t.isWindowScrollAllowed){const y=t.viewport,x=m5({dragStartTime:e,viewport:y,subject:h,center:d,shouldUseTimeDampening:n,getAutoScrollerOptions:c});if(x){r(x);return}}const p=i5({center:d,destination:Cn(t.impact),droppables:t.dimensions.droppables});if(!p)return;const b=x5({dragStartTime:e,droppable:p,subject:h,center:d,shouldUseTimeDampening:n,getAutoScrollerOptions:c});b&&i(p.descriptor.id,b)},b5=({scrollWindow:t,scrollDroppable:e,getAutoScrollerOptions:n=()=>No})=>{const r=mo(t),i=mo(e);let c=null;const d=p=>{c||ge();const{shouldUseTimeDampening:b,dragStartTime:y}=c;zv({state:p,scrollWindow:r,scrollDroppable:i,dragStartTime:y,shouldUseTimeDampening:b,getAutoScrollerOptions:n})};return{start:p=>{c&&ge();const b=Date.now();let y=!1;const x=()=>{y=!0};zv({state:p,dragStartTime:0,shouldUseTimeDampening:!1,scrollWindow:x,scrollDroppable:x,getAutoScrollerOptions:n}),c={dragStartTime:b,shouldUseTimeDampening:y},y&&d(p)},stop:()=>{c&&(r.cancel(),i.cancel(),c=null)},scroll:d}},y5=({move:t,scrollDroppable:e,scrollWindow:n})=>{const r=(f,h)=>{const p=Ft(f.current.client.selection,h);t({client:p})},i=(f,h)=>{if(!Jg(f,h))return h;const p=g5(f,h);if(!p)return e(f.descriptor.id,h),null;const b=wn(h,p);return e(f.descriptor.id,b),wn(h,b)},c=(f,h,p)=>{if(!f||!Kg(h,p))return p;const b=p5(h,p);if(!b)return n(p),null;const y=wn(p,b);return n(y),wn(p,y)};return f=>{const h=f.scrollJumpRequest;if(!h)return;const p=Cn(f.impact);p||ge();const b=i(f.dimensions.droppables[p],h);if(!b)return;const y=f.viewport,x=c(f.isWindowScrollAllowed,y,b);x&&r(f,x)}},v5=({scrollDroppable:t,scrollWindow:e,move:n,getAutoScrollerOptions:r})=>{const i=b5({scrollWindow:e,scrollDroppable:t,getAutoScrollerOptions:r}),c=y5({move:n,scrollWindow:e,scrollDroppable:t});return{scroll:h=>{if(!(r().disabled||h.phase!=="DRAGGING")){if(h.movementMode==="FLUID"){i.scroll(h);return}h.scrollJumpRequest&&c(h)}},start:i.start,stop:i.stop}};const Hl="data-rfd",Gl=(()=>{const t=`${Hl}-drag-handle`;return{base:t,draggableId:`${t}-draggable-id`,contextId:`${t}-context-id`}})(),Xp=(()=>{const t=`${Hl}-draggable`;return{base:t,contextId:`${t}-context-id`,id:`${t}-id`}})(),N5=(()=>{const t=`${Hl}-droppable`;return{base:t,contextId:`${t}-context-id`,id:`${t}-id`}})(),Pv={contextId:`${Hl}-scroll-container-context-id`},E5=t=>e=>`[${e}="${t}"]`,eo=(t,e)=>t.map(n=>{const r=n.styles[e];return r?`${n.selector} { ${r} }`:""}).join(" "),j5="pointer-events: none;";var S5=t=>{const e=E5(t),n=(()=>{const f=` - cursor: -webkit-grab; - cursor: grab; - `;return{selector:e(Gl.contextId),styles:{always:` - -webkit-touch-callout: none; - -webkit-tap-highlight-color: rgba(0,0,0,0); - touch-action: manipulation; - `,resting:f,dragging:j5,dropAnimating:f}}})(),r=(()=>{const f=` - transition: ${uo.outOfTheWay}; - `;return{selector:e(Xp.contextId),styles:{dragging:f,dropAnimating:f,userCancel:f}}})(),i={selector:e(N5.contextId),styles:{always:"overflow-anchor: none;"}},d=[r,n,i,{selector:"body",styles:{dragging:` - cursor: grabbing; - cursor: -webkit-grabbing; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - overflow-anchor: none; - `}}];return{always:eo(d,"always"),resting:eo(d,"resting"),dragging:eo(d,"dragging"),dropAnimating:eo(d,"dropAnimating"),userCancel:eo(d,"userCancel")}};const Dn=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?A.useLayoutEffect:A.useEffect,xp=()=>{const t=document.querySelector("head");return t||ge(),t},Uv=t=>{const e=document.createElement("style");return t&&e.setAttribute("nonce",t),e.type="text/css",e};function A5(t,e){const n=Ye(()=>S5(t),[t]),r=A.useRef(null),i=A.useRef(null),c=je(Mt(y=>{const x=i.current;x||ge(),x.textContent=y}),[]),d=je(y=>{const x=r.current;x||ge(),x.textContent=y},[]);Dn(()=>{!r.current&&!i.current||ge();const y=Uv(e),x=Uv(e);return r.current=y,i.current=x,y.setAttribute(`${Hl}-always`,t),x.setAttribute(`${Hl}-dynamic`,t),xp().appendChild(y),xp().appendChild(x),d(n.always),c(n.resting),()=>{const v=N=>{const j=N.current;j||ge(),xp().removeChild(j),N.current=null};v(r),v(i)}},[e,d,c,n.always,n.resting,t]);const f=je(()=>c(n.dragging),[c,n.dragging]),h=je(y=>{if(y==="DROP"){c(n.dropAnimating);return}c(n.userCancel)},[c,n.dropAnimating,n.userCancel]),p=je(()=>{i.current&&c(n.resting)},[c,n.resting]);return Ye(()=>({dragging:f,dropping:h,resting:p}),[f,h,p])}function qE(t,e){return Array.from(t.querySelectorAll(e))}var $E=t=>t&&t.ownerDocument&&t.ownerDocument.defaultView?t.ownerDocument.defaultView:window;function Au(t){return t instanceof $E(t).HTMLElement}function w5(t,e){const n=`[${Gl.contextId}="${t}"]`,r=qE(document,n);if(!r.length)return null;const i=r.find(c=>c.getAttribute(Gl.draggableId)===e);return!i||!Au(i)?null:i}function C5(t){const e=A.useRef({}),n=A.useRef(null),r=A.useRef(null),i=A.useRef(!1),c=je(function(x,v){const N={id:x,focus:v};return e.current[x]=N,function(){const S=e.current;S[x]!==N&&delete S[x]}},[]),d=je(function(x){const v=w5(t,x);v&&v!==document.activeElement&&v.focus()},[t]),f=je(function(x,v){n.current===x&&(n.current=v)},[]),h=je(function(){r.current||i.current&&(r.current=requestAnimationFrame(()=>{r.current=null;const x=n.current;x&&d(x)}))},[d]),p=je(function(x){n.current=null;const v=document.activeElement;v&&v.getAttribute(Gl.draggableId)===x&&(n.current=x)},[]);return Dn(()=>(i.current=!0,function(){i.current=!1;const x=r.current;x&&cancelAnimationFrame(x)}),[]),Ye(()=>({register:c,tryRecordFocus:p,tryRestoreFocusRecorded:h,tryShiftRecord:f}),[c,p,h,f])}function D5(){const t={draggables:{},droppables:{}},e=[];function n(y){return e.push(y),function(){const v=e.indexOf(y);v!==-1&&e.splice(v,1)}}function r(y){e.length&&e.forEach(x=>x(y))}function i(y){return t.draggables[y]||null}function c(y){const x=i(y);return x||ge(),x}const d={register:y=>{t.draggables[y.descriptor.id]=y,r({type:"ADDITION",value:y})},update:(y,x)=>{const v=t.draggables[x.descriptor.id];v&&v.uniqueId===y.uniqueId&&(delete t.draggables[x.descriptor.id],t.draggables[y.descriptor.id]=y)},unregister:y=>{const x=y.descriptor.id,v=i(x);v&&y.uniqueId===v.uniqueId&&(delete t.draggables[x],t.droppables[y.descriptor.droppableId]&&r({type:"REMOVAL",value:y}))},getById:c,findById:i,exists:y=>!!i(y),getAllByType:y=>Object.values(t.draggables).filter(x=>x.descriptor.type===y)};function f(y){return t.droppables[y]||null}function h(y){const x=f(y);return x||ge(),x}const p={register:y=>{t.droppables[y.descriptor.id]=y},unregister:y=>{const x=f(y.descriptor.id);x&&y.uniqueId===x.uniqueId&&delete t.droppables[y.descriptor.id]},getById:h,findById:f,exists:y=>!!f(y),getAllByType:y=>Object.values(t.droppables).filter(x=>x.descriptor.type===y)};function b(){t.draggables={},t.droppables={},e.length=0}return{draggable:d,droppable:p,subscribe:n,clean:b}}function O5(){const t=Ye(D5,[]);return A.useEffect(()=>function(){t.clean()},[t]),t}var em=qe.createContext(null),Yd=()=>{const t=document.body;return t||ge(),t};const R5={position:"absolute",width:"1px",height:"1px",margin:"-1px",border:"0",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)","clip-path":"inset(100%)"},T5=t=>`rfd-announcement-${t}`;function k5(t){const e=Ye(()=>T5(t),[t]),n=A.useRef(null);return A.useEffect(function(){const c=document.createElement("div");return n.current=c,c.id=e,c.setAttribute("aria-live","assertive"),c.setAttribute("aria-atomic","true"),Fd(c.style,R5),Yd().appendChild(c),function(){setTimeout(function(){const h=Yd();h.contains(c)&&h.removeChild(c),c===n.current&&(n.current=null)})}},[e]),je(i=>{const c=n.current;if(c){c.textContent=i;return}},[])}const _5={separator:"::"};function tm(t,e=_5){const n=qe.useId();return Ye(()=>`${t}${e.separator}${n}`,[e.separator,t,n])}function M5({contextId:t,uniqueId:e}){return`rfd-hidden-text-${t}-${e}`}function I5({contextId:t,text:e}){const n=tm("hidden-text",{separator:"-"}),r=Ye(()=>M5({contextId:t,uniqueId:n}),[n,t]);return A.useEffect(function(){const c=document.createElement("div");return c.id=r,c.textContent=e,c.style.display="none",Yd().appendChild(c),function(){const f=Yd();f.contains(c)&&f.removeChild(c)}},[r,e]),r}var wu=qe.createContext(null);function YE(t){const e=A.useRef(t);return A.useEffect(()=>{e.current=t}),e}function L5(){let t=null;function e(){return!!t}function n(d){return d===t}function r(d){t&&ge();const f={abandon:d};return t=f,f}function i(){t||ge(),t=null}function c(){t&&(t.abandon(),i())}return{isClaimed:e,isActive:n,claim:r,release:i,tryAbandon:c}}function Eo(t){return t.phase==="IDLE"||t.phase==="DROP_ANIMATING"?!1:t.isDragging}const z5=9,P5=13,nm=27,QE=32,U5=33,B5=34,H5=35,G5=36,F5=37,V5=38,q5=39,$5=40,Y5={[P5]:!0,[z5]:!0};var WE=t=>{Y5[t.keyCode]&&t.preventDefault()};const Cu=(()=>{const t="visibilitychange";return typeof document>"u"?t:[t,`ms${t}`,`webkit${t}`,`moz${t}`,`o${t}`].find(r=>`on${r}`in document)||t})(),XE=0,Bv=5;function Q5(t,e){return Math.abs(e.x-t.x)>=Bv||Math.abs(e.y-t.y)>=Bv}const Hv={type:"IDLE"};function W5({cancel:t,completed:e,getPhase:n,setPhase:r}){return[{eventName:"mousemove",fn:i=>{const{button:c,clientX:d,clientY:f}=i;if(c!==XE)return;const h={x:d,y:f},p=n();if(p.type==="DRAGGING"){i.preventDefault(),p.actions.move(h);return}p.type!=="PENDING"&&ge();const b=p.point;if(!Q5(b,h))return;i.preventDefault();const y=p.actions.fluidLift(h);r({type:"DRAGGING",actions:y})}},{eventName:"mouseup",fn:i=>{const c=n();if(c.type!=="DRAGGING"){t();return}i.preventDefault(),c.actions.drop({shouldBlockNextClick:!0}),e()}},{eventName:"mousedown",fn:i=>{n().type==="DRAGGING"&&i.preventDefault(),t()}},{eventName:"keydown",fn:i=>{if(n().type==="PENDING"){t();return}if(i.keyCode===nm){i.preventDefault(),t();return}WE(i)}},{eventName:"resize",fn:t},{eventName:"scroll",options:{passive:!0,capture:!1},fn:()=>{n().type==="PENDING"&&t()}},{eventName:"webkitmouseforcedown",fn:i=>{const c=n();if(c.type==="IDLE"&&ge(),c.actions.shouldRespectForcePress()){t();return}i.preventDefault()}},{eventName:Cu,fn:t}]}function X5(t){const e=A.useRef(Hv),n=A.useRef(Is),r=Ye(()=>({eventName:"mousedown",fn:function(y){if(y.defaultPrevented||y.button!==XE||y.ctrlKey||y.metaKey||y.shiftKey||y.altKey)return;const x=t.findClosestDraggableId(y);if(!x)return;const v=t.tryGetLock(x,d,{sourceEvent:y});if(!v)return;y.preventDefault();const N={x:y.clientX,y:y.clientY};n.current(),p(v,N)}}),[t]),i=Ye(()=>({eventName:"webkitmouseforcewillbegin",fn:b=>{if(b.defaultPrevented)return;const y=t.findClosestDraggableId(b);if(!y)return;const x=t.findOptionsForDraggable(y);x&&(x.shouldRespectForcePress||t.canGetLock(y)&&b.preventDefault())}}),[t]),c=je(function(){const y={passive:!1,capture:!0};n.current=$n(window,[i,r],y)},[i,r]),d=je(()=>{e.current.type!=="IDLE"&&(e.current=Hv,n.current(),c())},[c]),f=je(()=>{const b=e.current;d(),b.type==="DRAGGING"&&b.actions.cancel({shouldBlockNextClick:!0}),b.type==="PENDING"&&b.actions.abort()},[d]),h=je(function(){const y={capture:!0,passive:!1},x=W5({cancel:f,completed:d,getPhase:()=>e.current,setPhase:v=>{e.current=v}});n.current=$n(window,x,y)},[f,d]),p=je(function(y,x){e.current.type!=="IDLE"&&ge(),e.current={type:"PENDING",point:x,actions:y},h()},[h]);Dn(function(){return c(),function(){n.current()}},[c])}function Z5(){}const K5={[B5]:!0,[U5]:!0,[G5]:!0,[H5]:!0};function J5(t,e){function n(){e(),t.cancel()}function r(){e(),t.drop()}return[{eventName:"keydown",fn:i=>{if(i.keyCode===nm){i.preventDefault(),n();return}if(i.keyCode===QE){i.preventDefault(),r();return}if(i.keyCode===$5){i.preventDefault(),t.moveDown();return}if(i.keyCode===V5){i.preventDefault(),t.moveUp();return}if(i.keyCode===q5){i.preventDefault(),t.moveRight();return}if(i.keyCode===F5){i.preventDefault(),t.moveLeft();return}if(K5[i.keyCode]){i.preventDefault();return}WE(i)}},{eventName:"mousedown",fn:n},{eventName:"mouseup",fn:n},{eventName:"click",fn:n},{eventName:"touchstart",fn:n},{eventName:"resize",fn:n},{eventName:"wheel",fn:n,options:{passive:!0}},{eventName:Cu,fn:n}]}function e_(t){const e=A.useRef(Z5),n=Ye(()=>({eventName:"keydown",fn:function(c){if(c.defaultPrevented||c.keyCode!==QE)return;const d=t.findClosestDraggableId(c);if(!d)return;const f=t.tryGetLock(d,b,{sourceEvent:c});if(!f)return;c.preventDefault();let h=!0;const p=f.snapLift();e.current();function b(){h||ge(),h=!1,e.current(),r()}e.current=$n(window,J5(p,b),{capture:!0,passive:!1})}}),[t]),r=je(function(){const c={passive:!1,capture:!0};e.current=$n(window,[n],c)},[n]);Dn(function(){return r(),function(){e.current()}},[r])}const bp={type:"IDLE"},t_=120,n_=.15;function a_({cancel:t,getPhase:e}){return[{eventName:"orientationchange",fn:t},{eventName:"resize",fn:t},{eventName:"contextmenu",fn:n=>{n.preventDefault()}},{eventName:"keydown",fn:n=>{if(e().type!=="DRAGGING"){t();return}n.keyCode===nm&&n.preventDefault(),t()}},{eventName:Cu,fn:t}]}function s_({cancel:t,completed:e,getPhase:n}){return[{eventName:"touchmove",options:{capture:!1},fn:r=>{const i=n();if(i.type!=="DRAGGING"){t();return}i.hasMoved=!0;const{clientX:c,clientY:d}=r.touches[0],f={x:c,y:d};r.preventDefault(),i.actions.move(f)}},{eventName:"touchend",fn:r=>{const i=n();if(i.type!=="DRAGGING"){t();return}r.preventDefault(),i.actions.drop({shouldBlockNextClick:!0}),e()}},{eventName:"touchcancel",fn:r=>{if(n().type!=="DRAGGING"){t();return}r.preventDefault(),t()}},{eventName:"touchforcechange",fn:r=>{const i=n();i.type==="IDLE"&&ge();const c=r.touches[0];if(!c||!(c.force>=n_))return;const f=i.actions.shouldRespectForcePress();if(i.type==="PENDING"){f&&t();return}if(f){if(i.hasMoved){r.preventDefault();return}t();return}r.preventDefault()}},{eventName:Cu,fn:t}]}function r_(t){const e=A.useRef(bp),n=A.useRef(Is),r=je(function(){return e.current},[]),i=je(function(v){e.current=v},[]),c=Ye(()=>({eventName:"touchstart",fn:function(v){if(v.defaultPrevented)return;const N=t.findClosestDraggableId(v);if(!N)return;const j=t.tryGetLock(N,f,{sourceEvent:v});if(!j)return;const S=v.touches[0],{clientX:R,clientY:w}=S,D={x:R,y:w};n.current(),y(j,D)}}),[t]),d=je(function(){const v={capture:!0,passive:!1};n.current=$n(window,[c],v)},[c]),f=je(()=>{const x=e.current;x.type!=="IDLE"&&(x.type==="PENDING"&&clearTimeout(x.longPressTimerId),i(bp),n.current(),d())},[d,i]),h=je(()=>{const x=e.current;f(),x.type==="DRAGGING"&&x.actions.cancel({shouldBlockNextClick:!0}),x.type==="PENDING"&&x.actions.abort()},[f]),p=je(function(){const v={capture:!0,passive:!1},N={cancel:h,completed:f,getPhase:r},j=$n(window,s_(N),v),S=$n(window,a_(N),v);n.current=function(){j(),S()}},[h,r,f]),b=je(function(){const v=r();v.type!=="PENDING"&&ge();const N=v.actions.fluidLift(v.point);i({type:"DRAGGING",actions:N,hasMoved:!1})},[r,i]),y=je(function(v,N){r().type!=="IDLE"&&ge();const j=setTimeout(b,t_);i({type:"PENDING",point:N,actions:v,longPressTimerId:j}),p()},[p,r,i,b]);Dn(function(){return d(),function(){n.current();const N=r();N.type==="PENDING"&&(clearTimeout(N.longPressTimerId),i(bp))}},[r,d,i]),Dn(function(){return $n(window,[{eventName:"touchmove",fn:()=>{},options:{capture:!1,passive:!1}}])},[])}const l_=["input","button","textarea","select","option","optgroup","video","audio"];function ZE(t,e){if(e==null)return!1;if(l_.includes(e.tagName.toLowerCase()))return!0;const r=e.getAttribute("contenteditable");return r==="true"||r===""?!0:e===t?!1:ZE(t,e.parentElement)}function i_(t,e){const n=e.target;return Au(n)?ZE(t,n):!1}var o_=t=>ta(t.getBoundingClientRect()).center;function c_(t){return t instanceof $E(t).Element}const d_=(()=>{const t="matches";return typeof document>"u"?t:[t,"msMatchesSelector","webkitMatchesSelector"].find(r=>r in Element.prototype)||t})();function KE(t,e){return t==null?null:t[d_](e)?t:KE(t.parentElement,e)}function u_(t,e){return t.closest?t.closest(e):KE(t,e)}function f_(t){return`[${Gl.contextId}="${t}"]`}function h_(t,e){const n=e.target;if(!c_(n))return null;const r=f_(t),i=u_(n,r);return!i||!Au(i)?null:i}function p_(t,e){const n=h_(t,e);return n?n.getAttribute(Gl.draggableId):null}function g_(t,e){const n=`[${Xp.contextId}="${t}"]`,i=qE(document,n).find(c=>c.getAttribute(Xp.id)===e);return!i||!Au(i)?null:i}function m_(t){t.preventDefault()}function pd({expected:t,phase:e,isLockActive:n,shouldWarn:r}){return!(!n()||t!==e)}function JE({lockAPI:t,store:e,registry:n,draggableId:r}){if(t.isClaimed())return!1;const i=n.draggable.findById(r);return!(!i||!i.options.isEnabled||!HE(e.getState(),r))}function x_({lockAPI:t,contextId:e,store:n,registry:r,draggableId:i,forceSensorStop:c,sourceEvent:d}){if(!JE({lockAPI:t,store:n,registry:r,draggableId:i}))return null;const h=r.draggable.getById(i),p=g_(e,h.descriptor.id);if(!p||d&&!h.options.canDragInteractiveElements&&i_(p,d))return null;const b=t.claim(c||Is);let y="PRE_DRAG";function x(){return h.options.shouldRespectForcePress}function v(){return t.isActive(b)}function N(I,L){pd({expected:I,phase:y,isLockActive:v,shouldWarn:!0})&&n.dispatch(L())}const j=N.bind(null,"DRAGGING");function S(I){function L(){t.release(),y="COMPLETED"}y!=="PRE_DRAG"&&(L(),ge()),n.dispatch(uk(I.liftActionArgs)),y="DRAGGING";function F(Y,$={shouldBlockNextClick:!1}){if(I.cleanup(),$.shouldBlockNextClick){const M=$n(window,[{eventName:"click",fn:m_,options:{once:!0,passive:!1,capture:!0}}]);setTimeout(M)}L(),n.dispatch(_E({reason:Y}))}return{isActive:()=>pd({expected:"DRAGGING",phase:y,isLockActive:v,shouldWarn:!1}),shouldRespectForcePress:x,drop:Y=>F("DROP",Y),cancel:Y=>F("CANCEL",Y),...I.actions}}function R(I){const L=mo(Y=>{j(()=>kE({client:Y}))});return{...S({liftActionArgs:{id:i,clientSelection:I,movementMode:"FLUID"},cleanup:()=>L.cancel(),actions:{move:L}}),move:L}}function w(){const I={moveUp:()=>j(vk),moveRight:()=>j(Ek),moveDown:()=>j(Nk),moveLeft:()=>j(jk)};return S({liftActionArgs:{id:i,clientSelection:o_(p),movementMode:"SNAP"},cleanup:Is,actions:I})}function D(){pd({expected:"PRE_DRAG",phase:y,isLockActive:v,shouldWarn:!0})&&t.release()}return{isActive:()=>pd({expected:"PRE_DRAG",phase:y,isLockActive:v,shouldWarn:!1}),shouldRespectForcePress:x,fluidLift:R,snapLift:w,abort:D}}const b_=[X5,e_,r_];function y_({contextId:t,store:e,registry:n,customSensors:r,enableDefaultSensors:i}){const c=[...i?b_:[],...r||[]],d=A.useState(()=>L5())[0],f=je(function(S,R){Eo(S)&&!Eo(R)&&d.tryAbandon()},[d]);Dn(function(){let S=e.getState();return e.subscribe(()=>{const w=e.getState();f(S,w),S=w})},[d,e,f]),Dn(()=>d.tryAbandon,[d.tryAbandon]);const h=je(j=>JE({lockAPI:d,registry:n,store:e,draggableId:j}),[d,n,e]),p=je((j,S,R)=>x_({lockAPI:d,registry:n,contextId:t,store:e,draggableId:j,forceSensorStop:S||null,sourceEvent:R&&R.sourceEvent?R.sourceEvent:null}),[t,d,n,e]),b=je(j=>p_(t,j),[t]),y=je(j=>{const S=n.draggable.findById(j);return S?S.options:null},[n.draggable]),x=je(function(){d.isClaimed()&&(d.tryAbandon(),e.getState().phase!=="IDLE"&&e.dispatch(Yg()))},[d,e]),v=je(()=>d.isClaimed(),[d]),N=Ye(()=>({canGetLock:h,tryGetLock:p,findClosestDraggableId:b,findOptionsForDraggable:y,tryReleaseLock:x,isLockClaimed:v}),[h,p,b,y,x,v]);for(let j=0;j({onBeforeCapture:e=>{const n=()=>{t.onBeforeCapture&&t.onBeforeCapture(e)};Dr.flushSync(n)},onBeforeDragStart:t.onBeforeDragStart,onDragStart:t.onDragStart,onDragEnd:t.onDragEnd,onDragUpdate:t.onDragUpdate}),N_=t=>({...No,...t.autoScrollerOptions,durationDampening:{...No.durationDampening,...t.autoScrollerOptions}});function to(t){return t.current||ge(),t.current}function E_(t){const{contextId:e,setCallbacks:n,sensors:r,nonce:i,dragHandleUsageInstructions:c}=t,d=A.useRef(null),f=YE(t),h=je(()=>v_(f.current),[f]),p=je(()=>N_(f.current),[f]),b=k5(e),y=I5({contextId:e,text:c}),x=A5(e,i),v=je(M=>{to(d).dispatch(M)},[]),N=Ye(()=>hv({publishWhileDragging:hk,updateDroppableScroll:gk,updateDroppableIsEnabled:mk,updateDroppableIsCombineEnabled:xk,collectionStarting:pk},v),[v]),j=O5(),S=Ye(()=>a5(j,N),[j,N]),R=Ye(()=>v5({scrollWindow:s5,scrollDroppable:S.scrollDroppable,getAutoScrollerOptions:p,...hv({move:kE},v)}),[S.scrollDroppable,v,p]),w=C5(e),D=Ye(()=>Jk({announce:b,autoScroller:R,dimensionMarshal:S,focusMarshal:w,getResponders:h,styleMarshal:x}),[b,R,S,w,h,x]);d.current=D;const C=je(()=>{const M=to(d);M.getState().phase!=="IDLE"&&M.dispatch(Yg())},[]),I=je(()=>{const M=to(d).getState();return M.phase==="DROP_ANIMATING"?!0:M.phase==="IDLE"?!1:M.isDragging},[]),L=Ye(()=>({isDragging:I,tryAbort:C}),[I,C]);n(L);const F=je(M=>HE(to(d).getState(),M),[]),Y=je(()=>cr(to(d).getState()),[]),$=Ye(()=>({marshal:S,focus:w,contextId:e,canLift:F,isMovementAllowed:Y,dragHandleUsageInstructionsId:y,registry:j}),[e,S,y,w,F,Y,j]);return y_({contextId:e,store:D,registry:j,customSensors:r||null,enableDefaultSensors:t.enableDefaultSensors!==!1}),A.useEffect(()=>C,[C]),qe.createElement(wu.Provider,{value:$},qe.createElement(YR,{context:em,store:D},t.children))}function j_(){return qe.useId()}function Jl(t){const e=j_(),n=t.dragHandleUsageInstructions||Od.dragHandleUsageInstructions;return qe.createElement(eT,null,r=>qe.createElement(E_,{nonce:t.nonce,contextId:e,setCallbacks:r,dragHandleUsageInstructions:n,enableDefaultSensors:t.enableDefaultSensors,sensors:t.sensors,onBeforeCapture:t.onBeforeCapture,onBeforeDragStart:t.onBeforeDragStart,onDragStart:t.onDragStart,onDragUpdate:t.onDragUpdate,onDragEnd:t.onDragEnd,autoScrollerOptions:t.autoScrollerOptions},t.children))}const Gv={dragging:5e3,dropAnimating:4500},S_=(t,e)=>e?uo.drop(e.duration):t?uo.snap:uo.fluid,A_=(t,e)=>{if(t)return e?vo.opacity.drop:vo.opacity.combining},w_=t=>t.forceShouldAnimate!=null?t.forceShouldAnimate:t.mode==="SNAP";function C_(t){const n=t.dimension.client,{offset:r,combineWith:i,dropping:c}=t,d=!!i,f=w_(t),h=!!c,p=h?Qp.drop(r,d):Qp.moveTo(r);return{position:"fixed",top:n.marginBox.top,left:n.marginBox.left,boxSizing:"border-box",width:n.borderBox.width,height:n.borderBox.height,transition:S_(f,c),transform:p,opacity:A_(d,h),zIndex:h?Gv.dropAnimating:Gv.dragging,pointerEvents:"none"}}function D_(t){return{transform:Qp.moveTo(t.offset),transition:t.shouldAnimateDisplacement?void 0:"none"}}function O_(t){return t.type==="DRAGGING"?C_(t):D_(t)}function R_(t,e,n=Lt){const r=window.getComputedStyle(e),i=e.getBoundingClientRect(),c=lE(i,r),d=Gd(c,n),f={client:c,tagName:e.tagName.toLowerCase(),display:r.display},h={x:c.marginBox.width,y:c.marginBox.height};return{descriptor:t,placeholder:f,displaceBy:h,client:c,page:d}}function T_(t){const e=tm("draggable"),{descriptor:n,registry:r,getDraggableRef:i,canDragInteractiveElements:c,shouldRespectForcePress:d,isEnabled:f}=t,h=Ye(()=>({canDragInteractiveElements:c,shouldRespectForcePress:d,isEnabled:f}),[c,f,d]),p=je(v=>{const N=i();return N||ge(),R_(n,N,v)},[n,i]),b=Ye(()=>({uniqueId:e,descriptor:n,options:h,getDimension:p}),[n,p,h,e]),y=A.useRef(b),x=A.useRef(!0);Dn(()=>(r.draggable.register(y.current),()=>r.draggable.unregister(y.current)),[r.draggable]),Dn(()=>{if(x.current){x.current=!1;return}const v=y.current;y.current=b,r.draggable.update(b,v)},[b,r.draggable])}var am=qe.createContext(null);function Qd(t){const e=A.useContext(t);return e||ge(),e}function k_(t){t.preventDefault()}const __=t=>{const e=A.useRef(null),n=je((L=null)=>{e.current=L},[]),r=je(()=>e.current,[]),{contextId:i,dragHandleUsageInstructionsId:c,registry:d}=Qd(wu),{type:f,droppableId:h}=Qd(am),p=Ye(()=>({id:t.draggableId,index:t.index,type:f,droppableId:h}),[t.draggableId,t.index,f,h]),{children:b,draggableId:y,isEnabled:x,shouldRespectForcePress:v,canDragInteractiveElements:N,isClone:j,mapped:S,dropAnimationFinished:R}=t;if(!j){const L=Ye(()=>({descriptor:p,registry:d,getDraggableRef:r,canDragInteractiveElements:N,shouldRespectForcePress:v,isEnabled:x}),[p,d,r,N,v,x]);T_(L)}const w=Ye(()=>x?{tabIndex:0,role:"button","aria-describedby":c,"data-rfd-drag-handle-draggable-id":y,"data-rfd-drag-handle-context-id":i,draggable:!1,onDragStart:k_}:null,[i,c,y,x]),D=je(L=>{S.type==="DRAGGING"&&S.dropping&&L.propertyName==="transform"&&Dr.flushSync(R)},[R,S]),C=Ye(()=>{const L=O_(S),F=S.type==="DRAGGING"&&S.dropping?D:void 0;return{innerRef:n,draggableProps:{"data-rfd-draggable-context-id":i,"data-rfd-draggable-id":y,style:L,onTransitionEnd:F},dragHandleProps:w}},[i,w,y,S,D,n]),I=Ye(()=>({draggableId:p.id,type:p.type,source:{index:p.index,droppableId:p.droppableId}}),[p.droppableId,p.id,p.index,p.type]);return qe.createElement(qe.Fragment,null,b(C,S.snapshot,I))};var ej=(t,e)=>t===e,tj=t=>{const{combine:e,destination:n}=t;return n?n.droppableId:e?e.droppableId:null};const M_=t=>t.combine?t.combine.draggableId:null,I_=t=>t.at&&t.at.type==="COMBINE"?t.at.combine.draggableId:null;function L_(){const t=Mt((i,c)=>({x:i,y:c})),e=Mt((i,c,d=null,f=null,h=null)=>({isDragging:!0,isClone:c,isDropAnimating:!!h,dropAnimation:h,mode:i,draggingOver:d,combineWith:f,combineTargetFor:null})),n=Mt((i,c,d,f,h=null,p=null,b=null)=>({mapped:{type:"DRAGGING",dropping:null,draggingOver:h,combineWith:p,mode:c,offset:i,dimension:d,forceShouldAnimate:b,snapshot:e(c,f,h,p,null)}}));return(i,c)=>{if(Eo(i)){if(i.critical.draggable.id!==c.draggableId)return null;const d=i.current.client.offset,f=i.dimensions.draggables[c.draggableId],h=Cn(i.impact),p=I_(i.impact),b=i.forceShouldAnimate;return n(t(d.x,d.y),i.movementMode,f,c.isClone,h,p,b)}if(i.phase==="DROP_ANIMATING"){const d=i.completed;if(d.result.draggableId!==c.draggableId)return null;const f=c.isClone,h=i.dimensions.draggables[c.draggableId],p=d.result,b=p.mode,y=tj(p),x=M_(p),N={duration:i.dropDuration,curve:Wg.drop,moveTo:i.newHomeClientOffset,opacity:x?vo.opacity.drop:null,scale:x?vo.scale.drop:null};return{mapped:{type:"DRAGGING",offset:i.newHomeClientOffset,dimension:h,dropping:N,draggingOver:y,combineWith:x,mode:b,forceShouldAnimate:null,snapshot:e(b,f,y,x,N)}}}return null}}function nj(t=null){return{isDragging:!1,isDropAnimating:!1,isClone:!1,dropAnimation:null,mode:null,draggingOver:null,combineTargetFor:t,combineWith:null}}const z_={mapped:{type:"SECONDARY",offset:Lt,combineTargetFor:null,shouldAnimateDisplacement:!0,snapshot:nj(null)}};function P_(){const t=Mt((d,f)=>({x:d,y:f})),e=Mt(nj),n=Mt((d,f=null,h)=>({mapped:{type:"SECONDARY",offset:d,combineTargetFor:f,shouldAnimateDisplacement:h,snapshot:e(f)}})),r=d=>d?n(Lt,d,!0):null,i=(d,f,h,p)=>{const b=h.displaced.visible[d],y=!!(p.inVirtualList&&p.effected[d]),x=Eu(h),v=x&&x.draggableId===d?f:null;if(!b){if(!y)return r(v);if(h.displaced.invisible[d])return null;const S=Xl(p.displacedBy.point),R=t(S.x,S.y);return n(R,v,!0)}if(y)return r(v);const N=h.displacedBy.point,j=t(N.x,N.y);return n(j,v,b.shouldAnimate)};return(d,f)=>{if(Eo(d))return d.critical.draggable.id===f.draggableId?null:i(f.draggableId,d.critical.draggable.id,d.impact,d.afterCritical);if(d.phase==="DROP_ANIMATING"){const h=d.completed;return h.result.draggableId===f.draggableId?null:i(f.draggableId,h.result.draggableId,h.impact,h.afterCritical)}return null}}const U_=()=>{const t=L_(),e=P_();return(r,i)=>t(r,i)||e(r,i)||z_},B_={dropAnimationFinished:ME},H_=rE(U_,B_,null,{context:em,areStatePropsEqual:ej})(__);function aj(t){return Qd(am).isUsingCloneFor===t.draggableId&&!t.isClone?null:qe.createElement(H_,t)}function ei(t){const e=typeof t.isDragDisabled=="boolean"?!t.isDragDisabled:!0,n=!!t.disableInteractiveElementBlocking,r=!!t.shouldRespectForcePress;return qe.createElement(aj,Fd({},t,{isClone:!1,isEnabled:e,canDragInteractiveElements:n,shouldRespectForcePress:r}))}const sj=t=>e=>t===e,G_=sj("scroll"),F_=sj("auto"),Fv=(t,e)=>e(t.overflowX)||e(t.overflowY),V_=t=>{const e=window.getComputedStyle(t),n={overflowX:e.overflowX,overflowY:e.overflowY};return Fv(n,G_)||Fv(n,F_)},q_=()=>!1,rj=t=>t==null?null:t===document.body?q_()?t:null:t===document.documentElement?null:V_(t)?t:rj(t.parentElement);var Zp=t=>({x:t.scrollLeft,y:t.scrollTop});const lj=t=>t?window.getComputedStyle(t).position==="fixed"?!0:lj(t.parentElement):!1;var $_=t=>{const e=rj(t),n=lj(t);return{closestScrollable:e,isFixedOnPage:n}},Y_=({descriptor:t,isEnabled:e,isCombineEnabled:n,isFixedOnPage:r,direction:i,client:c,page:d,closest:f})=>{const h=(()=>{if(!f)return null;const{scrollSize:x,client:v}=f,N=PE({scrollHeight:x.scrollHeight,scrollWidth:x.scrollWidth,height:v.paddingBox.height,width:v.paddingBox.width});return{pageMarginBox:f.page.marginBox,frameClient:v,scrollSize:x,shouldClipSubject:f.shouldClipSubject,scroll:{initial:f.scroll,current:f.scroll,max:N,diff:{value:Lt,displacement:Lt}}}})(),p=i==="vertical"?Gg:xE,b=Bl({page:d,withPlaceholder:null,axis:p,frame:h});return{descriptor:t,isCombineEnabled:n,isFixedOnPage:r,axis:p,isEnabled:e,client:c,page:d,frame:h,subject:b}};const Q_=(t,e)=>{const n=iE(t);if(!e||t!==e)return n;const r=n.paddingBox.top-e.scrollTop,i=n.paddingBox.left-e.scrollLeft,c=r+e.scrollHeight,d=i+e.scrollWidth,h=Pg({top:r,right:d,bottom:c,left:i},n.border);return Ug({borderBox:h,margin:n.margin,border:n.border,padding:n.padding})};var W_=({ref:t,descriptor:e,env:n,windowScroll:r,direction:i,isDropDisabled:c,isCombineEnabled:d,shouldClipSubject:f})=>{const h=n.closestScrollable,p=Q_(t,h),b=Gd(p,r),y=(()=>{if(!h)return null;const v=iE(h),N={scrollHeight:h.scrollHeight,scrollWidth:h.scrollWidth};return{client:v,page:Gd(v,r),scroll:Zp(h),scrollSize:N,shouldClipSubject:f}})();return Y_({descriptor:e,isEnabled:!c,isCombineEnabled:d,isFixedOnPage:n.isFixedOnPage,direction:i,client:p,page:b,closest:y})};const X_={passive:!1},Z_={passive:!0};var Vv=t=>t.shouldPublishImmediately?X_:Z_;const gd=t=>t&&t.env.closestScrollable||null;function K_(t){const e=A.useRef(null),n=Qd(wu),r=tm("droppable"),{registry:i,marshal:c}=n,d=YE(t),f=Ye(()=>({id:t.droppableId,type:t.type,mode:t.mode}),[t.droppableId,t.mode,t.type]),h=A.useRef(f),p=Ye(()=>Mt((C,I)=>{e.current||ge();const L={x:C,y:I};c.updateDroppableScroll(f.id,L)}),[f.id,c]),b=je(()=>{const C=e.current;return!C||!C.env.closestScrollable?Lt:Zp(C.env.closestScrollable)},[]),y=je(()=>{const C=b();p(C.x,C.y)},[b,p]),x=Ye(()=>mo(y),[y]),v=je(()=>{const C=e.current,I=gd(C);if(C&&I||ge(),C.scrollOptions.shouldPublishImmediately){y();return}x()},[x,y]),N=je((C,I)=>{e.current&&ge();const L=d.current,F=L.getDroppableRef();F||ge();const Y=$_(F),$={ref:F,descriptor:f,env:Y,scrollOptions:I};e.current=$;const M=W_({ref:F,descriptor:f,env:Y,windowScroll:C,direction:L.direction,isDropDisabled:L.isDropDisabled,isCombineEnabled:L.isCombineEnabled,shouldClipSubject:!L.ignoreContainerClipping}),H=Y.closestScrollable;return H&&(H.setAttribute(Pv.contextId,n.contextId),H.addEventListener("scroll",v,Vv($.scrollOptions))),M},[n.contextId,f,v,d]),j=je(()=>{const C=e.current,I=gd(C);return C&&I||ge(),Zp(I)},[]),S=je(()=>{const C=e.current;C||ge();const I=gd(C);e.current=null,I&&(x.cancel(),I.removeAttribute(Pv.contextId),I.removeEventListener("scroll",v,Vv(C.scrollOptions)))},[v,x]),R=je(C=>{const I=e.current;I||ge();const L=gd(I);L||ge(),L.scrollTop+=C.y,L.scrollLeft+=C.x},[]),w=Ye(()=>({getDimensionAndWatchScroll:N,getScrollWhileDragging:j,dragStopped:S,scroll:R}),[S,N,j,R]),D=Ye(()=>({uniqueId:r,descriptor:f,callbacks:w}),[w,f,r]);Dn(()=>(h.current=D.descriptor,i.droppable.register(D),()=>{e.current&&S(),i.droppable.unregister(D)}),[w,f,S,D,c,i.droppable]),Dn(()=>{e.current&&c.updateDroppableIsEnabled(h.current.id,!t.isDropDisabled)},[t.isDropDisabled,c]),Dn(()=>{e.current&&c.updateDroppableIsCombineEnabled(h.current.id,t.isCombineEnabled)},[t.isCombineEnabled,c])}function yp(){}const qv={width:0,height:0,margin:iT},J_=({isAnimatingOpenOnMount:t,placeholder:e,animate:n})=>t||n==="close"?qv:{height:e.client.borderBox.height,width:e.client.borderBox.width,margin:e.client.margin},eM=({isAnimatingOpenOnMount:t,placeholder:e,animate:n})=>{const r=J_({isAnimatingOpenOnMount:t,placeholder:e,animate:n});return{display:e.display,boxSizing:"border-box",width:r.width,height:r.height,marginTop:r.margin.top,marginRight:r.margin.right,marginBottom:r.margin.bottom,marginLeft:r.margin.left,flexShrink:"0",flexGrow:"0",pointerEvents:"none",transition:n!=="none"?uo.placeholder:null}},tM=t=>{const e=A.useRef(null),n=je(()=>{e.current&&(clearTimeout(e.current),e.current=null)},[]),{animate:r,onTransitionEnd:i,onClose:c,contextId:d}=t,[f,h]=A.useState(t.animate==="open");A.useEffect(()=>f?r!=="open"?(n(),h(!1),yp):e.current?yp:(e.current=setTimeout(()=>{e.current=null,h(!1)}),n):yp,[r,f,n]);const p=je(y=>{y.propertyName==="height"&&(i(),r==="close"&&c())},[r,c,i]),b=eM({isAnimatingOpenOnMount:f,animate:t.animate,placeholder:t.placeholder});return qe.createElement(t.placeholder.tagName,{style:b,"data-rfd-placeholder-context-id":d,onTransitionEnd:p,ref:t.innerRef})};var nM=qe.memo(tM);class aM extends qe.PureComponent{constructor(...e){super(...e),this.state={isVisible:!!this.props.on,data:this.props.on,animate:this.props.shouldAnimate&&this.props.on?"open":"none"},this.onClose=()=>{this.state.animate==="close"&&this.setState({isVisible:!1})}}static getDerivedStateFromProps(e,n){return e.shouldAnimate?e.on?{isVisible:!0,data:e.on,animate:"open"}:n.isVisible?{isVisible:!0,data:n.data,animate:"close"}:{isVisible:!1,animate:"close",data:null}:{isVisible:!!e.on,data:e.on,animate:"none"}}render(){if(!this.state.isVisible)return null;const e={onClose:this.onClose,data:this.state.data,animate:this.state.animate};return this.props.children(e)}}const sM=t=>{const e=A.useContext(wu);e||ge();const{contextId:n,isMovementAllowed:r}=e,i=A.useRef(null),c=A.useRef(null),{children:d,droppableId:f,type:h,mode:p,direction:b,ignoreContainerClipping:y,isDropDisabled:x,isCombineEnabled:v,snapshot:N,useClone:j,updateViewportMaxScroll:S,getContainerForClone:R}=t,w=je(()=>i.current,[]),D=je((H=null)=>{i.current=H},[]);je(()=>c.current,[]);const C=je((H=null)=>{c.current=H},[]),I=je(()=>{r()&&S({maxScroll:BE()})},[r,S]);K_({droppableId:f,type:h,mode:p,direction:b,isDropDisabled:x,isCombineEnabled:v,ignoreContainerClipping:y,getDroppableRef:w});const L=Ye(()=>qe.createElement(aM,{on:t.placeholder,shouldAnimate:t.shouldAnimatePlaceholder},({onClose:H,data:ne,animate:ee})=>qe.createElement(nM,{placeholder:ne,onClose:H,innerRef:C,animate:ee,contextId:n,onTransitionEnd:I})),[n,I,t.placeholder,t.shouldAnimatePlaceholder,C]),F=Ye(()=>({innerRef:D,placeholder:L,droppableProps:{"data-rfd-droppable-id":f,"data-rfd-droppable-context-id":n}}),[n,f,L,D]),Y=j?j.dragging.draggableId:null,$=Ye(()=>({droppableId:f,type:h,isUsingCloneFor:Y}),[f,Y,h]);function M(){if(!j)return null;const{dragging:H,render:ne}=j,ee=qe.createElement(aj,{draggableId:H.draggableId,index:H.source.index,isClone:!0,isEnabled:!0,shouldRespectForcePress:!1,canDragInteractiveElements:!0},(he,pe)=>ne(he,pe,H));return zO.createPortal(ee,R())}return qe.createElement(am.Provider,{value:$},d(F,N),M())};function rM(){return document.body||ge(),document.body}const $v={mode:"standard",type:"DEFAULT",direction:"vertical",isDropDisabled:!1,isCombineEnabled:!1,ignoreContainerClipping:!1,renderClone:null,getContainerForClone:rM},ij=t=>{let e={...t},n;for(n in $v)t[n]===void 0&&(e={...e,[n]:$v[n]});return e},vp=(t,e)=>t===e.droppable.type,Yv=(t,e)=>e.draggables[t.draggable.id],lM=()=>{const t={placeholder:null,shouldAnimatePlaceholder:!0,snapshot:{isDraggingOver:!1,draggingOverWith:null,draggingFromThisWith:null,isUsingPlaceholder:!1},useClone:null},e={...t,shouldAnimatePlaceholder:!1},n=Mt(c=>({draggableId:c.id,type:c.type,source:{index:c.index,droppableId:c.droppableId}})),r=Mt((c,d,f,h,p,b)=>{const y=p.descriptor.id;if(p.descriptor.droppableId===c){const N=b?{render:b,dragging:n(p.descriptor)}:null,j={isDraggingOver:f,draggingOverWith:f?y:null,draggingFromThisWith:y,isUsingPlaceholder:!0};return{placeholder:p.placeholder,shouldAnimatePlaceholder:!1,snapshot:j,useClone:N}}if(!d)return e;if(!h)return t;const v={isDraggingOver:f,draggingOverWith:y,draggingFromThisWith:null,isUsingPlaceholder:!0};return{placeholder:p.placeholder,shouldAnimatePlaceholder:!0,snapshot:v,useClone:null}});return(c,d)=>{const f=ij(d),h=f.droppableId,p=f.type,b=!f.isDropDisabled,y=f.renderClone;if(Eo(c)){const x=c.critical;if(!vp(p,x))return e;const v=Yv(x,c.dimensions),N=Cn(c.impact)===h;return r(h,b,N,N,v,y)}if(c.phase==="DROP_ANIMATING"){const x=c.completed;if(!vp(p,x.critical))return e;const v=Yv(x.critical,c.dimensions);return r(h,b,tj(x.result)===h,Cn(x.impact)===h,v,y)}if(c.phase==="IDLE"&&c.completed&&!c.shouldFlush){const x=c.completed;if(!vp(p,x.critical))return e;const v=Cn(x.impact)===h,N=!!(x.impact.at&&x.impact.at.type==="COMBINE"),j=x.critical.droppable.id===h;return v?N?t:e:j?t:e}return e}},iM={updateViewportMaxScroll:yk},ti=rE(lM,iM,(t,e,n)=>({...ij(n),...t,...e}),{context:em,areStatePropsEqual:ej})(sM),oM=["VO","SL","IV","IM","SC","Tópico","Inalatória","Colírio","Nasal"],cM=["1x/dia","2x/dia","3x/dia","4x/dia","6/6h","8/8h","12/12h","24/24h","Dose única","Se necessário"],dM=["1 dia","2 dias","3 dias","5 dias","7 dias","10 dias","14 dias","21 dias","30 dias","Contínuo"],Np={medicamento:"",dose:"",via:"VO",frequencia:"8/8h",duracao:"7 dias",instrucoes:""},Qv=({item:t,onChange:e,onSave:n,onCancel:r})=>{const i="w-full border border-gray-200 rounded-lg px-3 py-2 text-xs focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none bg-white",c=i+" appearance-none";return s.jsxs("div",{className:"bg-blue-50 border border-blue-100 rounded-xl p-3 space-y-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-500 uppercase tracking-wider",children:"Medicamento"}),s.jsx("input",{autoFocus:!0,value:t.medicamento,onChange:d=>e({...t,medicamento:d.target.value.toUpperCase()}),placeholder:"EX: AMOXICILINA 500MG",className:i})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-500 uppercase tracking-wider",children:"Dose"}),s.jsx("input",{value:t.dose,onChange:d=>e({...t,dose:d.target.value}),placeholder:"EX: 500mg",className:i})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-500 uppercase tracking-wider",children:"Via"}),s.jsx("select",{value:t.via,onChange:d=>e({...t,via:d.target.value}),className:c,children:oM.map(d=>s.jsx("option",{children:d},d))})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-500 uppercase tracking-wider",children:"Frequência"}),s.jsx("select",{value:t.frequencia,onChange:d=>e({...t,frequencia:d.target.value}),className:c,children:cM.map(d=>s.jsx("option",{children:d},d))})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-500 uppercase tracking-wider",children:"Duração"}),s.jsx("select",{value:t.duracao,onChange:d=>e({...t,duracao:d.target.value}),className:c,children:dM.map(d=>s.jsx("option",{children:d},d))})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-500 uppercase tracking-wider",children:"Instruções extras (opcional)"}),s.jsx("input",{value:t.instrucoes||"",onChange:d=>e({...t,instrucoes:d.target.value}),placeholder:"EX: TOMAR APÓS AS REFEIÇÕES",className:i})]}),s.jsxs("div",{className:"flex justify-end gap-2 pt-1",children:[s.jsx("button",{onClick:r,className:"px-3 py-1.5 bg-white border border-gray-200 text-gray-600 rounded-lg text-xs font-bold hover:bg-gray-50",children:"Cancelar"}),s.jsxs("button",{onClick:n,disabled:!t.medicamento.trim(),className:"px-3 py-1.5 bg-blue-600 text-white rounded-lg text-xs font-bold hover:bg-blue-700 disabled:opacity-40 flex items-center gap-1",children:[s.jsx(Po,{size:12})," Confirmar"]})]})]})},uM=({modelo:t,especialidades:e,onSave:n,onBack:r})=>{var ne;const i=$e(),[c,d]=A.useState((t==null?void 0:t.nome)||""),[f,h]=A.useState((t==null?void 0:t.especialidadeId)||""),[p,b]=A.useState((t==null?void 0:t.instrucoes)||""),[y,x]=A.useState((t==null?void 0:t.items)||[]),[v,N]=A.useState(null),[j,S]=A.useState(Np),[R,w]=A.useState(!1),[D,C]=A.useState(!1),I=((ne=e.find(ee=>ee.id===f))==null?void 0:ne.nome)||"",L=ee=>{if(!ee.destination)return;const he=[...y],[pe]=he.splice(ee.source.index,1);he.splice(ee.destination.index,0,pe),x(he.map((z,oe)=>({...z,ordem:oe})))},F=()=>{j.medicamento.trim()&&(x(ee=>[...ee,{...j,id:`new_${Date.now()}`,ordem:ee.length}]),S(Np),w(!1))},Y=(ee,he)=>{x(pe=>pe.map((z,oe)=>oe===ee?{...z,...he}:z))},$=ee=>x(he=>he.filter((pe,z)=>z!==ee)),M=async()=>{if(!c.trim()){i.error("NOME DO MODELO OBRIGATÓRIO");return}C(!0);try{const ee={nome:c.toUpperCase(),especialidadeId:f||void 0,especialidadeNome:I||void 0,instrucoes:p||void 0,items:y};if(t!=null&&t.id)await K.updateModeloReceita({...ee,id:t.id});else{const he=await K.saveModeloReceita(ee);n({...ee,id:he.id,items:y});return}n({...ee,id:t.id,items:y})}catch{i.error("ERRO AO SALVAR MODELO")}finally{C(!1)}},H="w-full border border-gray-200 rounded-lg px-3 py-2.5 text-sm focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none bg-white";return s.jsxs("div",{className:"flex flex-col h-full",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center gap-3",children:[s.jsx("button",{onClick:r,className:"text-gray-400 hover:text-gray-700 flex-shrink-0",children:s.jsx($a,{size:18})}),s.jsx("h3",{className:"text-sm font-black text-gray-800 uppercase",children:t?"Editar Modelo":"Novo Modelo"})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-5 space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Nome do Modelo *"}),s.jsx("input",{value:c,onChange:ee=>d(ee.target.value.toUpperCase()),className:H,placeholder:"EX: ANTIBIÓTICO PÓS-CIRÚRGICO"})]}),s.jsx("div",{className:"grid grid-cols-2 gap-3",children:s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Especialidade"}),s.jsxs("select",{value:f,onChange:ee=>h(ee.target.value),className:H+" text-sm",children:[s.jsx("option",{value:"",children:"— Geral —"}),e.map(ee=>s.jsx("option",{value:ee.id,children:ee.nome},ee.id))]})]})}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Instrução Geral (opcional)"}),s.jsx("input",{value:p,onChange:ee=>b(ee.target.value),className:H,placeholder:"EX: USO EM CASO DE INFECÇÃO ODONTOGÊNICA"})]}),s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsxs("label",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider",children:["Medicamentos (",y.length,")"]}),!R&&s.jsxs("button",{onClick:()=>w(!0),className:"flex items-center gap-1 text-xs font-bold text-blue-600 hover:text-blue-800",children:[s.jsx(gt,{size:13})," Adicionar"]})]}),R&&s.jsx("div",{className:"mb-2",children:s.jsx(Qv,{item:j,onChange:S,onSave:F,onCancel:()=>{w(!1),S(Np)}})}),s.jsx(Jl,{onDragEnd:L,children:s.jsx(ti,{droppableId:"items-receita",children:ee=>s.jsxs("div",{ref:ee.innerRef,...ee.droppableProps,className:"space-y-1.5",children:[y.map((he,pe)=>s.jsx(ei,{draggableId:he.id,index:pe,children:(z,oe)=>s.jsx("div",{ref:z.innerRef,...z.draggableProps,className:`rounded-xl border transition-shadow ${oe.isDragging?"shadow-lg border-blue-300 bg-blue-50":"border-gray-200 bg-white"}`,children:v===pe?s.jsx("div",{className:"p-2",children:s.jsx(Qv,{item:{medicamento:he.medicamento,dose:he.dose,via:he.via,frequencia:he.frequencia,duracao:he.duracao,instrucoes:he.instrucoes},onChange:G=>Y(pe,G),onSave:()=>N(null),onCancel:()=>N(null)})}):s.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[s.jsx("span",{...z.dragHandleProps,className:"text-gray-300 hover:text-gray-500 cursor-grab flex-shrink-0",children:s.jsx(Ql,{size:15})}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("p",{className:"text-xs font-bold text-gray-800 uppercase truncate",children:he.medicamento}),s.jsx("p",{className:"text-[10px] text-gray-400",children:[he.dose,he.via,he.frequencia,he.duracao].filter(Boolean).join(" · ")}),he.instrucoes&&s.jsx("p",{className:"text-[10px] text-blue-500 italic",children:he.instrucoes})]}),s.jsx("button",{onClick:()=>N(pe),className:"text-gray-300 hover:text-blue-500 flex-shrink-0",children:s.jsx(zo,{size:13})}),s.jsx("button",{onClick:()=>$(pe),className:"text-gray-300 hover:text-red-500 flex-shrink-0",children:s.jsx(Qt,{size:13})})]})})},he.id)),ee.placeholder,y.length===0&&!R&&s.jsx("div",{className:"text-center py-6 text-xs text-gray-400 border-2 border-dashed border-gray-200 rounded-xl",children:"Nenhum medicamento adicionado ainda"})]})})})]})]}),s.jsxs("div",{className:"p-4 border-t border-gray-100 flex justify-end gap-2",children:[s.jsx("button",{onClick:r,className:"px-5 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-xs uppercase",children:"Cancelar"}),s.jsxs("button",{onClick:M,disabled:D||!c.trim(),className:"px-5 py-2 bg-green-600 hover:bg-green-700 text-white font-bold rounded-lg text-xs uppercase flex items-center gap-1.5 disabled:opacity-40",children:[s.jsx(Po,{size:14})," ",D?"Salvando...":"Salvar Modelo"]})]})]})},fM=({modelo:t,paciente:e,dentista:n,onClose:r})=>{const i=new Date().toLocaleDateString("pt-BR",{day:"2-digit",month:"long",year:"numeric"});return s.jsxs("div",{className:"flex flex-col h-full",children:[s.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center justify-between print:hidden",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("button",{onClick:r,className:"text-gray-400 hover:text-gray-700",children:s.jsx($a,{size:18})}),s.jsx("h3",{className:"text-sm font-black text-gray-800 uppercase",children:"Pré-visualização"})]}),s.jsxs("button",{onClick:()=>window.print(),className:"flex items-center gap-2 px-4 py-2 bg-gray-900 text-white rounded-lg text-xs font-bold hover:bg-black",children:[s.jsx(Ya,{size:14})," Imprimir / Salvar PDF"]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto bg-gray-100 p-6 print:p-0 print:bg-white",children:s.jsxs("div",{id:"receita-print",className:"max-w-xl mx-auto bg-white rounded-2xl shadow-sm border border-gray-200 p-8 print:shadow-none print:rounded-none print:border-0 print:max-w-full",children:[s.jsxs("div",{className:"text-center border-b-2 border-gray-800 pb-4 mb-6",children:[s.jsx("h1",{className:"text-lg font-black text-gray-900 uppercase",children:"RECEITUÁRIO"}),n&&s.jsxs("p",{className:"text-sm font-bold text-gray-700 mt-1",children:[n.nome," — CRO: ",n.cro||"—","/",n.cro_uf||"—"]})]}),s.jsxs("div",{className:"mb-6 grid grid-cols-2 gap-3 text-sm",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500 text-xs uppercase font-bold",children:"Paciente"}),s.jsx("p",{className:"font-bold text-gray-900 uppercase",children:e.nome})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500 text-xs uppercase font-bold",children:"Data"}),s.jsx("p",{className:"font-bold text-gray-900",children:i})]})]}),t.instrucoes&&s.jsx("div",{className:"mb-5 p-3 bg-amber-50 border border-amber-200 rounded-lg text-xs text-amber-800 font-medium italic",children:t.instrucoes}),s.jsx("div",{className:"space-y-4",children:t.items.map((c,d)=>s.jsxs("div",{className:"border-b border-gray-100 pb-3 last:border-0 last:pb-0",children:[s.jsxs("p",{className:"font-black text-gray-900 text-sm",children:[d+1,". ",c.medicamento]}),s.jsx("p",{className:"text-gray-700 text-sm ml-4",children:[c.dose,c.via,c.frequencia,`por ${c.duracao}`].filter(Boolean).join(" — ")}),c.instrucoes&&s.jsx("p",{className:"text-gray-500 text-xs ml-4 italic mt-0.5",children:c.instrucoes})]},c.id))}),s.jsxs("div",{className:"mt-12 pt-6 border-t-2 border-gray-800 flex justify-between items-end",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs text-gray-500",children:"Assinatura e Carimbo"}),s.jsx("div",{className:"h-10"})]}),s.jsx("p",{className:"text-xs text-gray-400",children:i})]})]})})]})},hM=({paciente:t,onClose:e})=>{const n=$e(),{data:r}=Ie(K.getEspecialidades),i=r??[],{data:c}=Ie(K.getDentistas),d=c??[],[f,h]=A.useState([]),[p,b]=A.useState(!0),[y,x]=A.useState(""),[v,N]=A.useState(""),[j,S]=A.useState("lista"),[R,w]=A.useState(null),[D,C]=A.useState(null),I=d[0],L=A.useCallback(async()=>{b(!0);try{h(await K.getModelosReceita())}catch{n.error("Erro ao carregar modelos")}finally{b(!1)}},[]);A.useEffect(()=>{L()},[L]),A.useEffect(()=>{const $=M=>{M.key==="Escape"&&(j!=="lista"?S("lista"):e())};return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[j,e]);const F=async $=>{confirm("Excluir este modelo?")&&(await K.deleteModeloReceita($),h(M=>M.filter(H=>H.id!==$)))},Y=f.filter($=>{const M=!y||$.especialidadeId===y,H=!v||$.nome.toLowerCase().includes(v.toLowerCase());return M&&H});return s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col overflow-hidden animate-in fade-in zoom-in-95 duration-200",children:[j==="lista"&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-red-100 rounded-lg flex items-center justify-center",children:s.jsx(Ba,{size:15,className:"text-red-600"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-sm font-black text-gray-800 uppercase",children:"Modelos de Receita"}),s.jsx("p",{className:"text-[10px] text-gray-400 uppercase",children:t.nome})]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("button",{onClick:()=>{w(null),S("editor")},className:"flex items-center gap-1.5 px-3 py-2 bg-green-600 hover:bg-green-700 text-white text-xs font-bold rounded-lg",children:[s.jsx(gt,{size:13})," Novo Modelo"]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]})]}),s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsxs("div",{className:"w-44 border-r border-gray-100 flex-shrink-0 overflow-y-auto bg-gray-50 p-2",children:[s.jsx("p",{className:"text-[9px] font-black text-gray-400 uppercase px-2 mb-2 tracking-wider",children:"Especialidade"}),s.jsx("button",{onClick:()=>x(""),className:`w-full text-left px-2.5 py-1.5 rounded-lg text-xs font-bold mb-0.5 transition-colors ${y?"text-gray-600 hover:bg-gray-100":"bg-blue-600 text-white"}`,children:"Todas"}),i.map($=>s.jsx("button",{onClick:()=>x($.id),className:`w-full text-left px-2.5 py-1.5 rounded-lg text-xs font-bold mb-0.5 transition-colors truncate ${y===$.id?"bg-blue-600 text-white":"text-gray-600 hover:bg-gray-100"}`,children:$.nome},$.id))]}),s.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[s.jsx("div",{className:"p-3 border-b border-gray-100",children:s.jsxs("div",{className:"relative",children:[s.jsx(Qn,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400"}),s.jsx("input",{value:v,onChange:$=>N($.target.value),placeholder:"Buscar modelo...",className:"w-full pl-8 pr-3 py-2 border border-gray-200 rounded-lg text-xs focus:ring-2 focus:ring-blue-100 outline-none"})]})}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-3 space-y-2",children:[p&&s.jsx("div",{className:"text-center py-8 text-xs text-gray-400",children:"Carregando..."}),!p&&Y.length===0&&s.jsxs("div",{className:"text-center py-10",children:[s.jsx(oo,{size:28,className:"text-gray-200 mx-auto mb-2"}),s.jsx("p",{className:"text-xs text-gray-400",children:"Nenhum modelo encontrado"}),s.jsx("button",{onClick:()=>{w(null),S("editor")},className:"mt-3 text-xs font-bold text-blue-600 hover:underline",children:"+ Criar primeiro modelo"})]}),Y.map($=>s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-3 hover:border-blue-200 hover:shadow-sm transition-all group",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2",children:[s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase truncate",children:$.nome}),s.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[$.especialidadeNome&&s.jsx("span",{className:"text-[9px] bg-blue-50 text-blue-600 px-1.5 py-0.5 rounded-full font-bold uppercase",children:$.especialidadeNome}),s.jsxs("span",{className:"text-[9px] text-gray-400",children:[$.items.length," medicamento",$.items.length!==1?"s":""]})]}),$.instrucoes&&s.jsx("p",{className:"text-[10px] text-gray-400 italic mt-1 truncate",children:$.instrucoes})]}),s.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0",children:[s.jsx("button",{onClick:()=>{C($),S("print")},title:"Prescrever para este paciente",className:"p-1.5 text-gray-400 hover:text-green-600 hover:bg-green-50 rounded-lg",children:s.jsx(Ya,{size:13})}),s.jsx("button",{onClick:()=>{w($),S("editor")},className:"p-1.5 text-gray-400 hover:text-blue-600 hover:bg-blue-50 rounded-lg",children:s.jsx(zo,{size:13})}),s.jsx("button",{onClick:()=>F($.id),className:"p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded-lg",children:s.jsx(Qt,{size:13})})]})]}),$.items.length>0&&s.jsxs("div",{className:"mt-2 pt-2 border-t border-gray-50 space-y-0.5",children:[$.items.slice(0,3).map(M=>s.jsxs("p",{className:"text-[10px] text-gray-500 truncate",children:["• ",M.medicamento," — ",M.dose," ",M.frequencia]},M.id)),$.items.length>3&&s.jsxs("p",{className:"text-[10px] text-gray-400",children:["+",$.items.length-3," mais..."]})]})]},$.id))]})]})]})]}),j==="editor"&&s.jsx(uM,{modelo:R,especialidades:i,onSave:$=>{L(),S("lista"),n.success("MODELO SALVO!")},onBack:()=>S("lista")}),j==="print"&&D&&s.jsx(fM,{modelo:D,paciente:t,dentista:I,onClose:()=>S("lista")})]})})},Wd=[{categoria:"RAIO-X",icon:s.jsx(bD,{size:14}),cor:"blue",items:[{nome:"Periapical"},{nome:"Interproximal (Bite-Wing)"},{nome:"Panorâmica"},{nome:"Oclusal Superior"},{nome:"Oclusal Inferior"},{nome:"Cefalométrica Lateral"},{nome:"P.A. de Face"}]},{categoria:"TOMOGRAFIA",icon:s.jsx($l,{size:14}),cor:"purple",items:[{nome:"Cone Beam — Dente Único",regiao:""},{nome:"Cone Beam — Terço Anterior"},{nome:"Cone Beam — Arcada Completa Superior"},{nome:"Cone Beam — Arcada Completa Inferior"},{nome:"Cone Beam — Ambas Arcadas"},{nome:"ATM (Articulação Temporomandibular)"}]},{categoria:"OUTROS",icon:s.jsx(ID,{size:14}),cor:"green",items:[{nome:"Cefalometria Analítica"},{nome:"Fotografia Clínica Extraoral"},{nome:"Fotografia Clínica Intraoral"},{nome:"Modelos de Gesso / Escaneamento"},{nome:"Biópsia"},{nome:"Exame Laboratorial"}]}],Kp={blue:{bg:"bg-blue-50",text:"text-blue-700",border:"border-blue-200",chip:"bg-blue-100 text-blue-700"},purple:{bg:"bg-purple-50",text:"text-purple-700",border:"border-purple-200",chip:"bg-purple-100 text-purple-700"},green:{bg:"bg-green-50",text:"text-green-700",border:"border-green-200",chip:"bg-green-100 text-green-700"}},pM=({pedido:t,dentista:e,onClose:n})=>{const r=new Date().toLocaleDateString("pt-BR",{day:"2-digit",month:"long",year:"numeric"}),i=Wd.map(c=>({...c,selecionados:t.items.filter(d=>d.categoria===c.categoria)})).filter(c=>c.selecionados.length>0);return s.jsxs("div",{className:"flex flex-col h-full",children:[s.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center justify-between print:hidden",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("button",{onClick:n,className:"text-gray-400 hover:text-gray-700",children:s.jsx($a,{size:18})}),s.jsx("h3",{className:"text-sm font-black text-gray-800 uppercase",children:"Pré-visualização"})]}),s.jsxs("button",{onClick:()=>window.print(),className:"flex items-center gap-2 px-4 py-2 bg-gray-900 text-white rounded-lg text-xs font-bold hover:bg-black",children:[s.jsx(Ya,{size:14})," Imprimir / Salvar PDF"]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto bg-gray-100 p-6 print:p-0 print:bg-white",children:s.jsxs("div",{className:"max-w-xl mx-auto bg-white rounded-2xl shadow-sm border border-gray-200 p-8 print:shadow-none print:rounded-none print:border-0 print:max-w-full",children:[s.jsxs("div",{className:"text-center border-b-2 border-gray-800 pb-4 mb-6",children:[s.jsx("h1",{className:"text-lg font-black text-gray-900 uppercase",children:"PEDIDO DE EXAMES"}),e&&s.jsxs("p",{className:"text-sm font-bold text-gray-700 mt-1",children:[e.nome," — CRO: ",e.cro||"—","/",e.cro_uf||"—"]})]}),s.jsxs("div",{className:"mb-6 grid grid-cols-2 gap-3 text-sm",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500 text-xs uppercase font-bold",children:"Paciente"}),s.jsx("p",{className:"font-bold text-gray-900 uppercase",children:t.pacienteNome})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-500 text-xs uppercase font-bold",children:"Data"}),s.jsx("p",{className:"font-bold text-gray-900",children:r})]})]}),s.jsx("div",{className:"space-y-5",children:i.map(c=>s.jsxs("div",{children:[s.jsx("h3",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-2 border-b border-gray-100 pb-1",children:c.categoria}),s.jsx("ul",{className:"space-y-1.5",children:c.selecionados.map((d,f)=>s.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-800",children:[s.jsxs("span",{className:"font-black text-gray-400 w-5 flex-shrink-0",children:[f+1,"."]}),s.jsxs("div",{children:[s.jsx("span",{className:"font-bold",children:d.nome}),d.regiao&&s.jsxs("span",{className:"text-gray-500",children:[" — Região: ",d.regiao]}),d.observacao&&s.jsx("p",{className:"text-xs text-gray-500 italic mt-0.5",children:d.observacao})]})]},d.id))})]},c.categoria))}),t.observacoes&&s.jsxs("div",{className:"mt-5 p-3 bg-amber-50 border border-amber-200 rounded-lg text-xs text-amber-800 italic",children:[s.jsx("span",{className:"font-black not-italic uppercase",children:"Obs: "}),t.observacoes]}),s.jsxs("div",{className:"mt-12 pt-6 border-t-2 border-gray-800 flex justify-between items-end",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs text-gray-500",children:"Assinatura e Carimbo"}),s.jsx("div",{className:"h-10"})]}),s.jsx("p",{className:"text-xs text-gray-400",children:r})]})]})})]})},gM=({item:t,onChange:e,onRemove:n,dragHandle:r,isDragging:i})=>{const[c,d]=A.useState(!1),f=Wd.find(p=>p.categoria===t.categoria),h=Kp[(f==null?void 0:f.cor)||"blue"];return s.jsxs("div",{className:`rounded-xl border transition-all ${i?"shadow-lg":""} ${h.border} bg-white`,children:[s.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[s.jsx("span",{className:"text-gray-300 hover:text-gray-500 cursor-grab flex-shrink-0",children:r}),s.jsx("span",{className:`text-[9px] font-black px-1.5 py-0.5 rounded-full flex-shrink-0 ${h.chip}`,children:t.categoria}),s.jsx("p",{className:"flex-1 text-xs font-bold text-gray-800 truncate",children:t.nome}),s.jsx("button",{onClick:()=>d(p=>!p),className:`text-[9px] font-bold px-2 py-0.5 rounded-full border flex-shrink-0 ${c?"bg-gray-100 text-gray-600 border-gray-200":"text-gray-400 border-gray-200 hover:bg-gray-50"}`,children:c?"fechar":"detalhe"}),s.jsx("button",{onClick:n,className:"text-gray-300 hover:text-red-500 flex-shrink-0",children:s.jsx(Qt,{size:13})})]}),c&&s.jsxs("div",{className:"px-3 pb-3 pt-0 grid grid-cols-2 gap-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase",children:"Região / Dente"}),s.jsx("input",{value:t.regiao||"",onChange:p=>e({regiao:p.target.value}),placeholder:"ex: dente 16, arcada inf.",className:"w-full border border-gray-200 rounded-lg px-2.5 py-1.5 text-xs focus:ring-2 focus:ring-blue-100 outline-none"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase",children:"Observação"}),s.jsx("input",{value:t.observacao||"",onChange:p=>e({observacao:p.target.value}),placeholder:"ex: urgente, pós-cirúrgico",className:"w-full border border-gray-200 rounded-lg px-2.5 py-1.5 text-xs focus:ring-2 focus:ring-blue-100 outline-none"})]})]})]})},mM=({paciente:t,onClose:e})=>{const n=$e(),{data:r}=Ie(K.getDentistas),i=r??[],[c,d]=A.useState([]),[f,h]=A.useState(""),[p,b]=A.useState(""),[y,x]=A.useState(null),[v,N]=A.useState("editor"),[j,S]=A.useState(!1),R=i[0];A.useEffect(()=>{const $=M=>{M.key==="Escape"&&(v!=="editor"?N("editor"):e())};return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[v,e]);const w=Wd.map($=>({...$,items:$.items.filter(M=>!(y&&$.categoria!==y||p&&!M.nome.toLowerCase().includes(p.toLowerCase())))})).filter($=>$.items.length>0),D=($,M,H)=>{if(c.some(ne=>ne.nome===M&&ne.categoria===$)){n.error("EXAME JÁ ADICIONADO");return}d(ne=>[...ne,{id:`ex_${Date.now()}_${Math.random()}`,nome:M,categoria:$,regiao:H||"",observacao:"",ordem:ne.length}])},C=($,M)=>{d(H=>H.map(ne=>ne.id===$?{...ne,...M}:ne))},I=$=>d(M=>M.filter(H=>H.id!==$)),L=$=>{if(!$.destination)return;const M=[...c],[H]=M.splice($.source.index,1);M.splice($.destination.index,0,H),d(M.map((ne,ee)=>({...ne,ordem:ee})))},F=async()=>{if(c.length===0){n.error("ADICIONE AO MENOS UM EXAME");return}S(!0);try{await K.savePedidoExame({pacienteId:t.id,pacienteNome:t.nome,profissionalId:R==null?void 0:R.id,profissionalNome:R==null?void 0:R.nome,data:new Date().toISOString().slice(0,10),observacoes:f||void 0,items:c}),N("print")}catch{n.error("ERRO AO SALVAR PEDIDO")}finally{S(!1)}},Y={id:"preview",pacienteId:t.id,pacienteNome:t.nome,profissionalId:R==null?void 0:R.id,profissionalNome:R==null?void 0:R.nome,data:new Date().toISOString().slice(0,10),observacoes:f,items:c};return v==="print"?s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsx("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col overflow-hidden",children:s.jsx(pM,{pedido:Y,dentista:R,onClose:()=>N("editor")})})}):s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col overflow-hidden animate-in fade-in zoom-in-95 duration-200",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center justify-between flex-shrink-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-indigo-100 rounded-lg flex items-center justify-center",children:s.jsx(av,{size:15,className:"text-indigo-600"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-sm font-black text-gray-800 uppercase",children:"Pedido de Exames"}),s.jsx("p",{className:"text-[10px] text-gray-400 uppercase",children:t.nome})]})]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]}),s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsxs("div",{className:"w-80 flex-shrink-0 border-r border-gray-100 flex flex-col",children:[s.jsxs("div",{className:"p-3 border-b border-gray-100 space-y-2",children:[s.jsxs("div",{className:"relative",children:[s.jsx(Qn,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400"}),s.jsx("input",{value:p,onChange:$=>b($.target.value),placeholder:"Buscar exame...",className:"w-full pl-8 pr-3 py-2 border border-gray-200 rounded-lg text-xs focus:ring-2 focus:ring-blue-100 outline-none"})]}),s.jsxs("div",{className:"flex gap-1 flex-wrap",children:[s.jsx("button",{onClick:()=>x(null),className:`text-[10px] font-bold px-2 py-0.5 rounded-full border transition-colors ${y?"text-gray-500 border-gray-200 hover:bg-gray-50":"bg-gray-800 text-white border-gray-800"}`,children:"Todos"}),Wd.map($=>{const M=Kp[$.cor];return s.jsx("button",{onClick:()=>x(H=>H===$.categoria?null:$.categoria),className:`text-[10px] font-bold px-2 py-0.5 rounded-full border transition-colors ${y===$.categoria?M.chip+" border-transparent":"text-gray-500 border-gray-200 hover:bg-gray-50"}`,children:$.categoria},$.categoria)})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-3 space-y-4",children:[w.map($=>{const M=Kp[$.cor];return s.jsxs("div",{children:[s.jsxs("div",{className:`flex items-center gap-1.5 mb-2 ${M.text}`,children:[$.icon,s.jsx("span",{className:"text-[10px] font-black uppercase tracking-wider",children:$.categoria})]}),s.jsx("div",{className:"space-y-1",children:$.items.map(H=>{const ne=c.some(ee=>ee.nome===H.nome&&ee.categoria===$.categoria);return s.jsxs("button",{onClick:()=>D($.categoria,H.nome,H.regiao),disabled:ne,className:`w-full text-left px-3 py-2 rounded-lg text-xs transition-all flex items-center justify-between group ${ne?`${M.bg} ${M.text} font-bold opacity-60 cursor-default`:`border border-gray-100 hover:${M.bg} hover:${M.border} hover:${M.text} text-gray-600 font-medium`}`,children:[s.jsx("span",{children:H.nome}),ne?s.jsx("span",{className:"text-[9px] font-black opacity-70",children:"✓"}):s.jsx(gt,{size:12,className:"opacity-0 group-hover:opacity-100 flex-shrink-0"})]},H.nome)})})]},$.categoria)}),w.length===0&&s.jsx("p",{className:"text-xs text-gray-400 text-center py-6",children:"Nenhum exame encontrado"})]})]}),s.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[s.jsxs("div",{className:"p-3 border-b border-gray-100 flex items-center justify-between",children:[s.jsxs("p",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider",children:["Exames Selecionados ",c.length>0&&s.jsxs("span",{className:"text-blue-600 ml-1",children:["(",c.length,")"]})]}),c.length>0&&s.jsx("button",{onClick:()=>d([]),className:"text-[10px] text-red-500 hover:text-red-700 font-bold",children:"Limpar tudo"})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-3",children:c.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center",children:[s.jsx("div",{className:"w-16 h-16 bg-gray-100 rounded-2xl flex items-center justify-center mb-3",children:s.jsx(av,{size:24,className:"text-gray-300"})}),s.jsx("p",{className:"text-sm font-bold text-gray-400",children:"Nenhum exame selecionado"}),s.jsx("p",{className:"text-xs text-gray-300 mt-1",children:"Clique nos exames ao lado para adicionar"})]}):s.jsx(Jl,{onDragEnd:L,children:s.jsx(ti,{droppableId:"exames-selecionados",children:$=>s.jsxs("div",{ref:$.innerRef,...$.droppableProps,className:"space-y-2",children:[c.map((M,H)=>s.jsx(ei,{draggableId:M.id,index:H,children:(ne,ee)=>s.jsx("div",{ref:ne.innerRef,...ne.draggableProps,children:s.jsx(gM,{item:M,isDragging:ee.isDragging,dragHandle:s.jsx("span",{...ne.dragHandleProps,children:s.jsx(Ql,{size:15})}),onChange:he=>C(M.id,he),onRemove:()=>I(M.id)})})},M.id)),$.placeholder]})})})}),s.jsxs("div",{className:"p-3 border-t border-gray-100 space-y-3 flex-shrink-0",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[9px] font-black text-gray-400 uppercase tracking-wider mb-1",children:"Observações (opcional)"}),s.jsx("input",{value:f,onChange:$=>h($.target.value),placeholder:"ex: urgente, pós-cirúrgico, encaminhar para...",className:"w-full border border-gray-200 rounded-lg px-3 py-2 text-xs focus:ring-2 focus:ring-blue-100 outline-none"})]}),s.jsxs("div",{className:"flex gap-2 justify-end",children:[s.jsx("button",{onClick:e,className:"px-4 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-xs uppercase",children:"Cancelar"}),s.jsxs("button",{onClick:F,disabled:c.length===0||j,className:"flex items-center gap-2 px-5 py-2 bg-indigo-600 hover:bg-indigo-700 text-white font-bold rounded-lg text-xs uppercase disabled:opacity-40",children:[s.jsx(Ya,{size:14})," ",j?"Salvando...":"Gerar Pedido"]})]})]})]})]})]})})},Wv=t=>{let e;const n=new Set,r=(p,b)=>{const y=typeof p=="function"?p(e):p;if(!Object.is(y,e)){const x=e;e=b??(typeof y!="object"||y===null)?y:Object.assign({},e,y),n.forEach(v=>v(e,x))}},i=()=>e,f={setState:r,getState:i,getInitialState:()=>h,subscribe:p=>(n.add(p),()=>n.delete(p))},h=e=t(r,i,f);return f},xM=(t=>t?Wv(t):Wv),bM=t=>t;function yM(t,e=bM){const n=qe.useSyncExternalStore(t.subscribe,qe.useCallback(()=>e(t.getState()),[t,e]),qe.useCallback(()=>e(t.getInitialState()),[t,e]));return qe.useDebugValue(n),n}const Xv=t=>{const e=xM(t),n=r=>yM(e,r);return Object.assign(n,e),n},vM=(t=>t?Xv(t):Xv),sm=vM(t=>({paciente:null,dentista:null,credenciada:"CASSEMS - SEDE CENTRAL",items:[],pendingSearch:"",setPaciente:e=>t({paciente:e}),setDentista:e=>t({dentista:e}),setCredenciada:e=>t({credenciada:e}),addItem:e=>t(n=>({items:[...n.items,e].slice(0,20)})),removeItem:e=>t(n=>({items:n.items.filter(r=>r.id!==e)})),updateItem:(e,n)=>t(r=>({items:r.items.map(i=>i.id===e?{...i,...n}:i)})),clear:()=>t({paciente:null,dentista:null,items:[]}),setPendingSearch:e=>t({pendingSearch:e})})),qt={q1:[14,13,12,11,18,17,16,15],q2:[21,22,23,24,25,26,27,28],q4:[44,43,42,41,48,47,46,45],q3:[31,32,33,34,35,36,37,38],extras:{q1:19,q2:29,q4:49,q3:39}},Ns={q1:[null,53,52,51,null,null,55,54],q2:[61,62,63,null,64,65,null,null],q4:[null,83,82,81,null,null,85,84],q3:[71,72,73,null,74,75,null,null]},NM=["O","M","D","V","L","P"],md=t=>t.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim(),EM=()=>{var fe;const t=sm(),e=$e(),[n,r]=A.useState([]),[i,c]=A.useState([]),[d,f]=A.useState([]),[h,p]=A.useState([]),[b,y]=A.useState(""),[x,v]=A.useState(null),[N,j]=A.useState("ADULTO"),[S,R]=A.useState(!1),[w,D]=A.useState([]),[C,I]=A.useState(null),[L,F]=A.useState(""),[Y,$]=A.useState(""),[M,H]=A.useState(1),[ne,ee]=A.useState(!1),[he,pe]=A.useState("");A.useEffect(()=>{(async()=>{const de=await K.getPacientes(),ye=await K.getDentistas(),Me=await K.getEspecialidades(),Wn=await K.getProcedimentos();r(Array.isArray(de)?de:(de==null?void 0:de.data)??[]),c(ye??[]),f(Me??[]),p(Wn??[])})()},[]);const z=A.useMemo(()=>b?h.filter(W=>W.especialidadeId===b):[],[b,h]),oe=A.useMemo(()=>{if(!he)return n.slice(0,30);const W=md(he);return n.filter(de=>md(de.nome).includes(W)||de.cpf&&de.cpf.includes(he.replace(/\D/g,""))).slice(0,30)},[n,he]);A.useEffect(()=>{const{pendingSearch:W}=t;if(!W||n.length===0)return;const de=md(W),ye=n.filter(Me=>{const Wn=md(Me.nome);return Wn===de||Wn.includes(de)||de.includes(Wn)});ye.length===1?t.setPaciente(ye[0]):(ye.length>1&&pe(W),ee(!0)),t.setPendingSearch("")},[n,t.pendingSearch]);const G=W=>{if(!x){e.error("SELECIONE UM PROCEDIMENTO ANTES DE ESCOLHER O DENTE.");return}if(x.tipo_regiao!=="DENTE"){e.error("ESTE PROCEDIMENTO NÃO PERMITE SELEÇÃO DE DENTE INDIVIDUAL.");return}const de=t.items.find(ye=>ye.dente===W&&ye.procedimentoId===x.id);if(de)t.removeItem(de.id),D(ye=>ye.filter(Me=>Me!==W));else{if(t.items.length>=20){e.error("LIMITE DE 20 ITENS ATINGIDO.");return}t.addItem({id:Math.random().toString(36).substring(7),procedimentoId:x.id,codigoTUSS:x.codigo||"000000",codigoInterno:x.codigoInterno||"",descricao:x.descricao_mobile||x.nome,dente:W,face:"",quantidade:1,valorUnitario:x.valorParticular||0,valorTotal:x.valorParticular||0}),D(ye=>[...ye,W]),I(null)}},te=W=>{if((x==null?void 0:x.tipo_regiao)!=="ARCO"){e.error("ESTE PROCEDIMENTO NÃO PERMITE SELEÇÃO DE ARCO.");return}D([]),I(W)},re=()=>{if(!x){e.error("SELECIONE UM PROCEDIMENTO PRIMEIRO.");return}if(x.tipo_regiao==="ARCO"&&!C){e.error("SELECIONE UM ARCO (AI/AS).");return}if(x.exige_face&&!L.trim()){e.error("A FACE É OBRIGATÓRIA PARA ESTE PROCEDIMENTO.");return}t.addItem({id:Math.random().toString(36).substring(7),procedimentoId:x.id,codigoTUSS:x.codigo||"000000",codigoInterno:x.codigoInterno||"",descricao:x.nome,arco:C||void 0,face:L,quantidade:1,valorUnitario:x.valorParticular||0,valorTotal:x.valorParticular||0,observacao:Y||void 0}),e.success("ADICIONADO AO RASCUNHO."),I(null),F(""),$("")},T=async()=>{if(!t.paciente||!t.dentista||t.items.length===0){e.error("PACIENTE, DENTISTA E PELO MENOS 1 ITEM SÃO OBRIGATÓRIOS.");return}const W=t.items.filter(de=>{if(!de.dente)return!1;const ye=h.find(Me=>Me.id===de.procedimentoId);return(ye==null?void 0:ye.exige_face)&&!de.face});if(W.length>0){e.error(`FACE OBRIGATÓRIA PARA ${W.map(de=>`DENTE ${de.dente}`).join(", ")}`);return}try{e.success("GTO GERADA COM SUCESSO!"),t.clear(),y(""),v(null),D([]),I(null),F(""),$("")}catch{e.error("ERRO AO GERAR GTO.")}},X=t.items.reduce((W,de)=>W+de.valorTotal,0),le=()=>{S&&(N==="ADULTO"?(w.filter(de=>parseInt(de)>=50).forEach(de=>{const ye=t.items.find(Me=>Me.dente===de&&Me.procedimentoId===(x==null?void 0:x.id));ye&&t.removeItem(ye.id)}),D(de=>de.filter(ye=>parseInt(ye)<50))):(w.filter(de=>parseInt(de)<50).forEach(de=>{const ye=t.items.find(Me=>Me.dente===de&&Me.procedimentoId===(x==null?void 0:x.id));ye&&t.removeItem(ye.id)}),D(de=>de.filter(ye=>parseInt(ye)>=50)))),R(W=>!W)},se=(W,de)=>{if(W===null)return s.jsx("div",{className:"w-7 h-7 sm:w-9 sm:h-9"},`empty-${de}`);const ye=W.toString(),Me=parseInt(ye)>=50,Wn=w.includes(ye),si=!!x&&x.tipo_regiao!=="DENTE";return s.jsx("button",{onClick:()=>G(ye),disabled:si,className:`w-7 h-7 sm:w-9 sm:h-9 rounded-lg border-2 text-[9px] sm:text-[11px] font-black transition-all shadow-sm flex items-center justify-center - ${Wn?Me?"bg-amber-500 border-amber-600 text-white scale-110 z-10":"bg-blue-600 border-blue-700 text-white scale-110 z-10":si?"bg-gray-50 border-gray-100 text-gray-300 cursor-not-allowed opacity-50":Me?"bg-white border-amber-200 text-amber-700 hover:border-amber-400 hover:bg-amber-50":"bg-white border-gray-200 text-gray-700 hover:border-blue-400 hover:bg-blue-50"} - `,children:ye},ye)},Ne=s.jsxs("div",{className:"bg-white p-6 rounded-3xl border border-gray-100 shadow-xl space-y-4",children:[s.jsxs("div",{className:"flex items-center gap-3 text-blue-600 font-black text-base uppercase tracking-wider",children:[s.jsx(sa,{size:20,strokeWidth:3})," 01. Paciente"]}),t.paciente?s.jsxs("div",{className:"flex items-center justify-between bg-blue-50 border-2 border-blue-200 rounded-2xl px-4 py-3",children:[s.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[s.jsx("div",{className:"w-8 h-8 bg-blue-600 rounded-full flex items-center justify-center text-white font-black text-xs flex-shrink-0",children:t.paciente.nome.charAt(0)}),s.jsx("span",{className:"font-black text-blue-800 text-sm uppercase truncate",children:t.paciente.nome})]}),s.jsx("button",{onClick:()=>t.setPaciente(null),className:"text-xs font-bold text-blue-500 hover:text-red-500 transition-colors flex-shrink-0 ml-3 uppercase",children:"ALTERAR"})]}):s.jsxs("button",{onClick:()=>ee(!0),className:"w-full p-4 bg-gray-50 border-2 border-dashed border-blue-200 rounded-2xl font-black text-blue-400 text-sm hover:bg-blue-50 hover:border-blue-400 transition-all uppercase flex items-center justify-center gap-2",children:[s.jsx(Qn,{size:16})," SELECIONAR BENEFICIÁRIO"]})]}),Ae=s.jsxs("div",{className:"bg-white p-6 rounded-3xl border border-gray-100 shadow-xl space-y-5",children:[s.jsxs("div",{className:"flex items-center gap-3 text-orange-500 font-black text-base uppercase tracking-wider",children:[s.jsx(aa,{size:20,strokeWidth:3})," 02. Especialidade"]}),s.jsxs("div",{className:"space-y-3",children:[s.jsxs("select",{value:b,onChange:W=>{y(W.target.value),v(null),D([]),I(null)},className:"w-full p-4 bg-gray-50 border-2 border-gray-100 rounded-2xl font-black text-gray-700 text-sm focus:border-orange-400 outline-none transition-all uppercase",children:[s.jsx("option",{value:"",children:"ESCOLHA A ÁREA..."}),d.map(W=>s.jsx("option",{value:W.id,children:W.nome},W.id))]}),b&&s.jsxs("div",{className:"space-y-2",children:[s.jsxs("select",{value:(x==null?void 0:x.id)||"",onChange:W=>{const de=h.find(ye=>ye.id===W.target.value);v(de||null),D([]),I(null),F(""),$("")},className:"w-full p-4 bg-white border-2 border-orange-100 rounded-2xl font-black text-gray-800 text-sm shadow-inner uppercase",children:[s.jsx("option",{value:"",children:"BUSCAR PROCEDIMENTO"}),z.map(W=>s.jsx("option",{value:W.id,children:W.nome},W.id))]}),x&&s.jsxs("div",{className:"bg-orange-50 p-3 rounded-xl border border-orange-100",children:[s.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-bold text-orange-800",children:[s.jsx(Pa,{size:10}),x.tipo_regiao==="DENTE"?"CLIQUE OS DENTES NO ODONTOGRAMA":x.tipo_regiao==="ARCO"?"SELECIONE O ARCO (AI/AS)":"PROCEDIMENTO GERAL — CLIQUE ADICIONAR"]}),x.exige_face&&s.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-bold text-red-600 mt-1",children:[s.jsx(Pa,{size:10})," EXIGE FACE CLÍNICA"]})]})]})]})]}),Re=s.jsxs("div",{className:"bg-white p-6 rounded-3xl border border-gray-100 shadow-xl space-y-4",children:[s.jsxs("div",{className:"flex items-center gap-3 text-[#2d6a4f] font-black text-base uppercase tracking-wider",children:[s.jsx(jl,{size:20,strokeWidth:3,className:"bg-green-100 p-1 rounded-full text-green-700"})," 03. Dentista Executor"]}),s.jsxs("select",{value:((fe=t.dentista)==null?void 0:fe.id)||"",onChange:W=>{const de=i.find(ye=>ye.id===W.target.value);t.setDentista(de||null)},className:"w-full p-4 bg-gray-50 border-2 border-gray-100 rounded-2xl font-black text-gray-800 text-sm focus:border-green-500 outline-none transition-all uppercase",children:[s.jsx("option",{value:"",children:"SELECIONE O PROFISSIONAL"}),i.map(W=>s.jsx("option",{value:W.id,children:W.nome},W.id))]})]}),ft=x&&x.tipo_regiao!=="DENTE"?s.jsxs("div",{className:"bg-white p-6 rounded-3xl border border-gray-100 shadow-xl space-y-4",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"04. Face & Observações"}),x.exige_face&&s.jsx("span",{className:"text-red-500 text-[9px] font-black animate-pulse",children:"* OBRIGATÓRIO"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-400 uppercase tracking-widest mb-2",children:"Face (O, M, D, V, L, P)"}),s.jsx("input",{type:"text",value:L,onChange:W=>F(W.target.value.toUpperCase()),className:`w-full p-4 border-2 rounded-2xl text-sm font-black outline-none transition-all - ${x.exige_face?"bg-red-50 border-red-100 focus:border-red-400":"bg-gray-50 border-gray-100 focus:border-amber-400"}`,placeholder:x.exige_face?"FACE OBRIGATÓRIA...":"OPCIONAL"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-400 uppercase tracking-widest mb-2 italic",children:"Observações"}),s.jsx("textarea",{value:Y,onChange:W=>$(W.target.value),rows:3,className:"w-full p-4 bg-gray-50 border-2 border-gray-100 rounded-2xl text-[11px] focus:border-amber-400 outline-none transition-all resize-none"})]}),s.jsxs("button",{onClick:re,className:"w-full bg-[#2d6a4f] text-white py-4 rounded-2xl font-black text-sm uppercase shadow-lg shadow-green-100 hover:bg-[#1b4332] active:scale-95 transition-all flex items-center justify-center gap-2 group",children:["ADICIONAR ITEM ",s.jsx(Pa,{size:16,className:"group-hover:translate-x-1 transition-transform"})]})]}):null,Le=s.jsx("div",{className:"p-2",children:s.jsxs("button",{onClick:T,className:"w-full bg-gray-900 text-white py-5 rounded-3xl font-black text-lg uppercase shadow-xl hover:bg-black active:scale-95 transition-all flex items-center justify-center gap-3",children:[s.jsx(jl,{size:22,strokeWidth:3})," FINALIZAR GTO"]})}),St=s.jsxs("div",{className:"bg-white rounded-3xl border border-gray-100 shadow-xl p-3 sm:p-8 space-y-4 sm:space-y-6",children:[s.jsx("div",{className:"flex justify-center mb-2 sm:mb-4",children:s.jsxs("div",{className:"inline-flex bg-gray-100 p-1 rounded-xl shadow-inner",children:[s.jsx("button",{onClick:()=>{j("ADULTO"),D([]),R(!1)},className:`px-5 sm:px-8 py-2 rounded-lg text-xs font-black transition-all uppercase ${N==="ADULTO"?"bg-blue-600 text-white shadow-md scale-105":"text-gray-500 hover:text-gray-800"}`,children:"Adulto"}),s.jsx("button",{onClick:()=>{j("CRIANCA"),D([]),R(!1)},className:`px-5 sm:px-8 py-2 rounded-lg text-xs font-black transition-all uppercase ${N==="CRIANCA"?"bg-blue-600 text-white shadow-md scale-105":"text-gray-500 hover:text-gray-800"}`,children:"Criança"})]})}),s.jsxs("div",{className:"relative border-t border-b border-gray-50 py-6 sm:py-10",children:[s.jsx("div",{className:"absolute left-1/2 top-4 bottom-4 w-[2px] bg-gray-200 -translate-x-1/2"}),s.jsx("div",{className:"absolute top-1/2 left-2 right-2 h-[2px] bg-gray-200 -translate-y-1/2"}),s.jsxs("div",{className:"grid grid-cols-2 gap-x-2 sm:gap-x-12 gap-y-6 sm:gap-y-16",children:[s.jsxs("div",{className:"flex justify-end items-center gap-1 sm:gap-2 pr-1 sm:pr-2",children:[N==="ADULTO"&&se(qt.extras.q1),s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?qt.q1:Ns.q1).map((W,de)=>se(W,de))})]}),s.jsxs("div",{className:"flex justify-start items-center gap-1 sm:gap-2 pl-1 sm:pl-2",children:[s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?qt.q2:Ns.q2).map((W,de)=>se(W,de))}),N==="ADULTO"&&se(qt.extras.q2)]}),s.jsxs("div",{className:"flex justify-end items-center gap-1 sm:gap-2 pr-1 sm:pr-2",children:[N==="ADULTO"&&se(qt.extras.q4),s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?qt.q4:Ns.q4).map((W,de)=>se(W,de))})]}),s.jsxs("div",{className:"flex justify-start items-center gap-1 sm:gap-2 pl-1 sm:pl-2",children:[s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?qt.q3:Ns.q3).map((W,de)=>se(W,de))}),N==="ADULTO"&&se(qt.extras.q3)]})]})]}),S&&s.jsxs("div",{className:"border-t-2 border-dashed border-amber-200 pt-4 space-y-3 animate-in fade-in slide-in-from-top-2 duration-200",children:[s.jsx("p",{className:"text-[9px] font-black text-amber-500 uppercase tracking-widest text-center",children:N==="ADULTO"?"— DENTES DECÍDUOS —":"— DENTES PERMANENTES —"}),s.jsxs("div",{className:"relative py-4 sm:py-6",children:[s.jsx("div",{className:"absolute left-1/2 top-2 bottom-2 w-[2px] bg-amber-100 -translate-x-1/2"}),s.jsx("div",{className:"absolute top-1/2 left-2 right-2 h-[2px] bg-amber-100 -translate-y-1/2"}),s.jsxs("div",{className:"grid grid-cols-2 gap-x-2 sm:gap-x-12 gap-y-6 sm:gap-y-16",children:[s.jsxs("div",{className:"flex justify-end items-center gap-1 sm:gap-2 pr-1 sm:pr-2",children:[N==="CRIANCA"&&se(qt.extras.q1),s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?Ns.q1:qt.q1).map((W,de)=>se(W,de))})]}),s.jsxs("div",{className:"flex justify-start items-center gap-1 sm:gap-2 pl-1 sm:pl-2",children:[s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?Ns.q2:qt.q2).map((W,de)=>se(W,de))}),N==="CRIANCA"&&se(qt.extras.q2)]}),s.jsxs("div",{className:"flex justify-end items-center gap-1 sm:gap-2 pr-1 sm:pr-2",children:[N==="CRIANCA"&&se(qt.extras.q4),s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?Ns.q4:qt.q4).map((W,de)=>se(W,de))})]}),s.jsxs("div",{className:"flex justify-start items-center gap-1 sm:gap-2 pl-1 sm:pl-2",children:[s.jsx("div",{className:"grid grid-cols-4 gap-1 sm:gap-2",children:(N==="ADULTO"?Ns.q3:qt.q3).map((W,de)=>se(W,de))}),N==="CRIANCA"&&se(qt.extras.q3)]})]})]})]}),s.jsx("button",{onClick:le,className:`w-full py-2.5 rounded-2xl border-2 font-black text-[11px] uppercase transition-all flex items-center justify-center gap-2 - ${S?"border-amber-300 text-amber-600 bg-amber-50 hover:bg-amber-100":"border-dashed border-amber-200 text-amber-400 hover:border-amber-400 hover:bg-amber-50"}`,children:S?s.jsxs(s.Fragment,{children:[s.jsx(Qe,{size:13})," ",N==="ADULTO"?"REMOVER DECÍDUOS":"REMOVER PERMANENTES"]}):s.jsxs(s.Fragment,{children:[s.jsx(BN,{size:13})," ",N==="ADULTO"?"+ INCLUIR DENTES DECÍDUOS":"+ INCLUIR DENTES PERMANENTES"]})}),s.jsx("div",{className:"flex justify-center gap-4 pt-4",children:["AI","AS"].map(W=>s.jsx("button",{onClick:()=>te(W),disabled:!!x&&x.tipo_regiao!=="ARCO",className:`px-10 py-3 rounded-2xl border-2 font-black text-sm uppercase transition-all shadow-sm - ${C===W?"bg-amber-500 border-amber-600 text-white":x&&x.tipo_regiao!=="ARCO"?"bg-gray-50 border-gray-100 text-gray-300 cursor-not-allowed opacity-50":"bg-white border-gray-100 text-gray-500 hover:border-amber-400"}`,children:W==="AI"?"AI - Inferior":"AS - Superior"},W))})]}),Wt=s.jsxs("div",{className:"bg-white rounded-3xl border border-gray-100 overflow-hidden shadow-xl",children:[s.jsxs("div",{className:"bg-[#d49a4a] p-4 text-white font-black text-sm uppercase flex justify-between items-center tracking-widest",children:[s.jsx("span",{children:"PROCEDIMENTOS DO RASCUNHO"}),s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("div",{className:"bg-white/20 px-3 py-1 rounded-full text-[10px]",children:[t.items.length,"/20"]}),s.jsxs("div",{className:"bg-white/20 px-3 py-1 rounded-full text-[10px]",children:["R$ ",X.toFixed(2)]})]})]}),s.jsxs("div",{className:"p-4 sm:p-6 space-y-3",children:[t.items.length===0&&s.jsxs("div",{className:"py-14 text-center text-gray-300 font-bold uppercase flex flex-col items-center gap-4",children:[s.jsx("div",{className:"w-16 h-16 bg-gray-50 rounded-full flex items-center justify-center outline outline-gray-100 outline-offset-4",children:s.jsx(bu,{size:32})}),s.jsxs("span",{className:"text-xs",children:["SELECIONE DENTES OU ARCOS",s.jsx("br",{}),"PARA INICIAR O RASCUNHO"]})]}),t.items.map(W=>{var ye;const de=W.dente?parseInt(W.dente)>=50:!1;return s.jsxs("div",{className:"border border-gray-100 rounded-2xl p-4 bg-gray-50/40 hover:bg-white transition-all shadow-sm",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2 mb-3",children:[s.jsxs("div",{className:"flex items-center gap-2.5 min-w-0 flex-1",children:[s.jsx("span",{className:`w-10 h-10 rounded-xl flex items-center justify-center text-[11px] font-black flex-shrink-0 border-2 - ${W.dente?de?"bg-amber-100 text-amber-700 border-amber-200":"bg-blue-100 text-blue-700 border-blue-200":"bg-amber-100 text-amber-600 border-amber-200"}`,children:W.dente||W.arco||"--"}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("div",{className:"font-black text-xs text-gray-900 uppercase leading-tight truncate",children:W.descricao}),s.jsxs("div",{className:"flex items-center gap-1 mt-0.5 text-[9px] text-gray-400 font-bold uppercase",children:[s.jsx(aa,{size:8}),s.jsx("span",{className:"truncate",children:((ye=t.dentista)==null?void 0:ye.nome)||"SEM DENTISTA"})]})]})]}),s.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[s.jsxs("span",{className:"text-[10px] font-black text-green-600 whitespace-nowrap",children:["R$ ",W.valorTotal.toFixed(2)]}),s.jsx("button",{onClick:()=>{t.removeItem(W.id),W.dente&&D(Me=>Me.filter(Wn=>Wn!==W.dente))},className:"text-gray-300 hover:text-red-500 transition-colors p-0.5",children:s.jsx(Qt,{size:15})})]})]}),W.dente&&s.jsxs("div",{className:"flex items-center gap-1.5 mb-2.5 flex-wrap",children:[s.jsxs("span",{className:"text-[9px] font-black text-gray-400 uppercase tracking-wider w-full mb-1",children:["FACE CLÍNICA:",!W.face&&s.jsx("span",{className:"text-gray-300 font-normal normal-case ml-1 italic",children:"não selecionada"})]}),NM.map(Me=>s.jsx("button",{onClick:()=>t.updateItem(W.id,{face:W.face===Me?"":Me}),className:`w-9 h-9 rounded-xl border-2 text-[11px] font-black transition-all flex items-center justify-center - ${W.face===Me?"bg-blue-600 border-blue-700 text-white shadow-md":"bg-white border-gray-200 text-gray-400 hover:border-blue-300 hover:text-blue-500 hover:bg-blue-50"}`,children:Me},Me))]}),s.jsx("textarea",{value:W.observacao||"",onChange:Me=>t.updateItem(W.id,{observacao:Me.target.value}),placeholder:"OBSERVAÇÃO CLÍNICA...",rows:2,className:"w-full px-3 py-2.5 bg-white border border-gray-100 rounded-xl text-[11px] resize-none outline-none focus:border-amber-300 transition-colors placeholder:text-gray-300 leading-relaxed"})]},W.id)}),t.items.length>0&&s.jsxs("div",{className:"pt-4 border-t-2 border-dotted border-gray-200 flex justify-between items-center",children:[s.jsxs("button",{className:"flex items-center gap-2 text-blue-600 font-black text-[11px] uppercase hover:bg-blue-50 px-4 py-2 rounded-xl transition-all",children:[s.jsx(Dd,{size:16})," ANEXAR DOCUMENTOS"]}),s.jsxs("div",{className:"text-right",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-[0.2em] mb-1",children:"TOTAL"}),s.jsxs("h3",{className:"text-2xl font-black text-gray-900 px-4 py-2 bg-gray-50 rounded-2xl border border-gray-100 shadow-inner",children:["R$ ",X.toFixed(2)]})]})]})]})]});return s.jsxs("div",{className:"space-y-6 pb-20 lg:pb-0",children:[s.jsx(fn,{title:"LANÇAR GTO",description:"MONTAGEM DINÂMICA DE GUIA ODONTOLÓGICA (GTO)."}),s.jsxs("div",{className:"hidden lg:grid grid-cols-12 gap-6 items-start",children:[s.jsxs("div",{className:"col-span-8 space-y-6",children:[St,Wt]}),s.jsxs("div",{className:"col-span-4 space-y-4 sticky top-6",children:[Ne,Ae,Re,ft,Le]})]}),s.jsxs("div",{className:"lg:hidden",children:[M===1&&s.jsxs("div",{className:"space-y-4",children:[Ne,Ae,Re]}),M===2&&St,M===3&&s.jsxs("div",{className:"space-y-4",children:[ft,Wt]})]}),s.jsxs("div",{className:"fixed bottom-0 left-0 right-0 z-40 lg:hidden bg-white/95 backdrop-blur-sm border-t border-gray-200 shadow-xl px-4 py-3 flex items-center justify-between gap-2",children:[M>1?s.jsxs("button",{onClick:()=>H(W=>W-1),className:"flex items-center gap-1.5 px-4 py-2.5 rounded-2xl border-2 border-gray-200 font-black text-xs text-gray-500 hover:bg-gray-50 transition-all uppercase",children:[s.jsx($a,{size:14})," VOLTAR"]}):s.jsx("div",{className:"w-24"}),s.jsx("div",{className:"flex items-center gap-2",children:[1,2,3].map(W=>s.jsx("button",{onClick:()=>H(W),className:`transition-all rounded-full ${M===W?"w-6 h-2.5 bg-blue-600":"w-2.5 h-2.5 bg-gray-200 hover:bg-gray-400"}`},W))}),M<3?s.jsxs("button",{onClick:()=>H(W=>W+1),className:"flex items-center gap-1.5 px-4 py-2.5 rounded-2xl bg-blue-600 text-white font-black text-xs hover:bg-blue-700 active:scale-95 transition-all uppercase shadow-md",children:["PRÓXIMO ",s.jsx(Pa,{size:14})]}):s.jsxs("button",{onClick:T,className:"flex items-center gap-1.5 px-4 py-2.5 rounded-2xl bg-gray-900 text-white font-black text-xs hover:bg-black active:scale-95 transition-all uppercase shadow-md",children:["FINALIZAR ",s.jsx(jl,{size:14})]})]}),ne&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-4",children:s.jsxs("div",{className:"bg-white rounded-3xl shadow-2xl w-full max-w-md flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-6 py-5 border-b border-gray-100 flex justify-between items-center",children:[s.jsxs("h3",{className:"font-black text-gray-900 uppercase tracking-wide text-sm flex items-center gap-2",children:[s.jsx(Qn,{size:16,className:"text-blue-600"})," BUSCAR PACIENTE"]}),s.jsx("button",{onClick:()=>{ee(!1),pe("")},className:"text-gray-400 hover:text-gray-600 p-1 hover:bg-gray-100 rounded-full transition-colors",children:s.jsx(Qe,{size:20})})]}),s.jsxs("div",{className:"p-5 space-y-3",children:[s.jsx("input",{autoFocus:!0,type:"text",value:he,onChange:W=>pe(W.target.value.toUpperCase()),placeholder:"NOME OU CPF...",className:"w-full p-4 bg-gray-50 border-2 border-gray-100 rounded-2xl font-black text-gray-800 text-sm focus:border-blue-500 outline-none transition-all uppercase"}),s.jsx("div",{className:"max-h-72 overflow-y-auto space-y-1",children:oe.length===0?s.jsx("div",{className:"py-10 text-center text-gray-300 font-bold uppercase text-xs",children:he?"NENHUM PACIENTE ENCONTRADO":"CARREGANDO..."}):oe.map(W=>s.jsxs("button",{onClick:()=>{t.setPaciente(W),ee(!1),pe("")},className:"w-full text-left px-4 py-3 hover:bg-blue-50 rounded-xl transition-all flex items-center gap-3 group",children:[s.jsx("div",{className:"w-9 h-9 bg-blue-100 rounded-full flex items-center justify-center text-blue-600 font-black text-sm flex-shrink-0 group-hover:bg-blue-600 group-hover:text-white transition-colors",children:W.nome.charAt(0)}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"font-black text-sm text-gray-800 uppercase truncate",children:W.nome}),W.cpf&&s.jsx("div",{className:"text-[10px] text-gray-400 font-bold",children:W.cpf})]})]},W.id))})]})]})})]})},jM=["V","L","M","D","O"],SM=["Superior","Inferior","Ambas"],AM=["Pix","Cartão","Dinheiro","Boleto"],wM=["Pendente","Pago","Atrasado"],Jn=t=>t.toLocaleString("pt-BR",{style:"currency",currency:"BRL"});function Zv(t,e){const n=new Date(t+"T12:00:00");return n.setMonth(n.getMonth()+e),n.toISOString().slice(0,10)}const CM=({item:t,onChange:e,onRemove:n})=>{const[r,i]=A.useState(t.proc.tipo_regiao!=="GERAL"),c="border border-gray-200 rounded-lg px-2 py-1.5 text-xs focus:ring-2 focus:ring-blue-100 outline-none w-full";return s.jsxs("div",{className:"border border-gray-200 rounded-xl bg-white overflow-hidden",children:[s.jsxs("div",{className:"flex items-center gap-2 px-3 py-2.5",children:[s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase truncate",children:t.proc.nome}),s.jsxs("div",{className:"flex items-center gap-2 mt-0.5",children:[t.proc.especialidadeNome&&s.jsx("span",{className:"text-[9px] bg-blue-50 text-blue-600 px-1.5 py-0.5 rounded-full font-bold uppercase",children:t.proc.especialidadeNome}),s.jsx("span",{className:"text-[10px] font-bold text-green-600",children:Jn(t.valorUnit*t.quantidade)}),t.quantidade>1&&s.jsxs("span",{className:"text-[9px] text-gray-400",children:[t.quantidade,"× ",Jn(t.valorUnit)]})]})]}),s.jsxs("div",{className:"flex items-center gap-1 flex-shrink-0",children:[s.jsx("button",{onClick:()=>e({quantidade:Math.max(1,t.quantidade-1)}),className:"w-6 h-6 rounded-full border border-gray-200 flex items-center justify-center hover:bg-gray-100",children:s.jsx(YN,{size:10})}),s.jsx("span",{className:"w-5 text-center text-xs font-bold",children:t.quantidade}),s.jsx("button",{onClick:()=>e({quantidade:t.quantidade+1}),className:"w-6 h-6 rounded-full border border-gray-200 flex items-center justify-center hover:bg-gray-100",children:s.jsx(gt,{size:10})})]}),s.jsx("button",{onClick:()=>i(d=>!d),className:"text-gray-300 hover:text-gray-600 flex-shrink-0",children:s.jsx(Lo,{size:14,className:`transition-transform ${r?"rotate-180":""}`})}),s.jsx("button",{onClick:n,className:"text-gray-300 hover:text-red-500 flex-shrink-0",children:s.jsx(Qt,{size:13})})]}),r&&s.jsxs("div",{className:"border-t border-gray-100 bg-gray-50/50 px-3 py-2.5 grid grid-cols-2 gap-2",children:[t.proc.tipo_regiao==="DENTE"&&s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Dente(s)"}),s.jsx("input",{value:t.dente,onChange:d=>e({dente:d.target.value}),className:c,placeholder:"ex: 16, 21-22"})]}),t.proc.tipo_regiao==="ARCO"&&s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Arcada"}),s.jsxs("select",{value:t.arco,onChange:d=>e({arco:d.target.value}),className:c,children:[s.jsx("option",{value:"",children:"— Selecione —"}),SM.map(d=>s.jsx("option",{children:d},d))]})]}),t.proc.exige_face&&s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Face(s)"}),s.jsx("div",{className:"flex gap-1 flex-wrap",children:jM.map(d=>s.jsx("button",{type:"button",onClick:()=>{const f=t.face.split("").filter(Boolean),h=f.includes(d)?f.filter(p=>p!==d):[...f,d];e({face:h.join("")})},className:`w-7 h-7 rounded-lg text-[10px] font-black border transition-colors ${t.face.includes(d)?"bg-blue-600 text-white border-blue-600":"bg-white text-gray-500 border-gray-200 hover:border-blue-400"}`,children:d},d))})]}),s.jsxs("div",{className:t.proc.tipo_regiao!=="GERAL"||t.proc.exige_face?"":"col-span-2",children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Obs"}),s.jsx("input",{value:t.observacao,onChange:d=>e({observacao:d.target.value}),className:c,placeholder:"observação opcional"})]})]})]})},DM=({patient:t,onClose:e,onSaved:n})=>{const r=$e(),{data:i}=Ie(K.getProcedimentos),{data:c}=Ie(K.getEspecialidades),{data:d}=Ie(K.getPlanos),f=i??[],h=c??[],p=d??[],[b,y]=A.useState(""),[x,v]=A.useState(""),[N,j]=A.useState([]),[S,R]=A.useState(!1),[w,D]=A.useState("R$"),[C,I]=A.useState(""),[L,F]=A.useState(""),[Y,$]=A.useState(1),[M,H]=A.useState(new Date().toISOString().slice(0,10)),[ne,ee]=A.useState("Pix"),[he,pe]=A.useState("Pendente"),z=A.useMemo(()=>t.convenio?p.find(fe=>fe.nome===t.convenio)??null:null,[t.convenio,p]),oe=fe=>{var W;if(z){const de=(W=fe.valoresPlanos)==null?void 0:W.find(ye=>ye.planoId===z.id);if(de)return de.valor}return fe.valorParticular??0},G=fe=>{if(N.some(W=>W.proc.id===fe.id)){j(W=>W.map(de=>de.proc.id===fe.id?{...de,quantidade:de.quantidade+1}:de));return}j(W=>[...W,{uid:`${fe.id}_${Date.now()}`,proc:fe,quantidade:1,dente:"",face:"",arco:"",observacao:"",valorUnit:oe(fe)}])},te=(fe,W)=>j(de=>de.map(ye=>ye.uid===fe?{...ye,...W}:ye)),re=fe=>j(W=>W.filter(de=>de.uid!==fe)),T=N.reduce((fe,W)=>fe+W.valorUnit*W.quantidade,0),X=parseFloat(C)||0,le=w==="%"?T*X/100:X,se=parseFloat(L)||0,Ne=Math.max(0,T-le-se),Ae=Y>0?Ne/Y:0,Re=A.useMemo(()=>f.filter(fe=>!(x&&fe.especialidadeId!==x||b&&!fe.nome.toLowerCase().includes(b.toLowerCase()))),[f,x,b]),ft=A.useMemo(()=>{const fe={};return Re.forEach(W=>{const de=W.especialidadeId||"__geral";fe[de]||(fe[de]={esp:h.find(ye=>ye.id===W.especialidadeId)??null,procs:[]}),fe[de].procs.push(W)}),Object.values(fe).sort((W,de)=>{var ye,Me;return(((ye=W.esp)==null?void 0:ye.ordem)??99)-(((Me=de.esp)==null?void 0:Me.ordem)??99)})},[Re,h]),Le=async()=>{if(N.length===0){r.error("SELECIONE AO MENOS UM PROCEDIMENTO");return}R(!0);try{const fe=[],W=N.map(de=>{const ye=[de.dente,de.arco,de.face].filter(Boolean).join("/");return de.proc.nome+(ye?` (${ye})`:"")+(de.quantidade>1?` x${de.quantidade}`:"")}).join(", ");se>0&&fe.push({id:crypto.randomUUID(),pacienteNome:t.nome,descricao:`ENTRADA — ${W}`,valor:se,dataVencimento:M,status:"Pago",formaPagamento:ne});for(let de=0;de1?` — ${de+1}/${Y}`:"";fe.push({id:crypto.randomUUID(),pacienteNome:t.nome,descricao:W+ye,valor:parseFloat(Ae.toFixed(2)),dataVencimento:se>0?Zv(M,de+1):Zv(M,de),status:de===0&&Y===1||de===0?he:"Pendente",formaPagamento:ne})}for(const de of fe)await K.saveFinanceiro(de);r.success(`${fe.length} LANÇAMENTO(S) GERADO(S) COM SUCESSO!`),n(),e()}catch{r.error("ERRO AO SALVAR LANÇAMENTOS")}finally{R(!1)}},St="border border-gray-200 rounded-lg px-2.5 py-2 text-sm focus:ring-2 focus:ring-blue-100 outline-none w-full bg-white",Wt=fe=>N.some(W=>W.proc.id===fe);return s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col overflow-hidden animate-in fade-in zoom-in-95 duration-200",children:[s.jsxs("div",{className:"flex-shrink-0 px-5 py-4 border-b border-gray-100 flex items-center justify-between bg-gradient-to-r from-emerald-50 to-white",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-9 h-9 bg-emerald-100 rounded-xl flex items-center justify-center",children:s.jsx(Fa,{size:18,className:"text-emerald-600"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-sm font-black text-gray-800 uppercase",children:"Lançar Procedimento"}),s.jsxs("p",{className:"text-[10px] text-gray-400 uppercase font-medium",children:[t.nome,z&&s.jsx("span",{className:"ml-2 bg-emerald-100 text-emerald-700 px-1.5 py-0.5 rounded-full font-bold",children:z.nome})]})]})]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600 p-1.5 hover:bg-gray-100 rounded-lg transition-colors",children:s.jsx(Qe,{size:18})})]}),s.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[s.jsxs("div",{className:"w-72 flex-shrink-0 border-r border-gray-100 flex flex-col bg-gray-50/30",children:[s.jsxs("div",{className:"p-3 space-y-2 border-b border-gray-100 flex-shrink-0",children:[s.jsxs("div",{className:"relative",children:[s.jsx(Qn,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400"}),s.jsx("input",{value:b,onChange:fe=>y(fe.target.value),placeholder:"Buscar procedimento...",className:"w-full pl-8 pr-3 py-2 border border-gray-200 rounded-lg text-xs focus:ring-2 focus:ring-blue-100 outline-none bg-white"})]}),s.jsxs("div",{className:"flex gap-1 flex-wrap",children:[s.jsx("button",{onClick:()=>v(""),className:`text-[10px] font-bold px-2 py-0.5 rounded-full border transition-colors ${x?"text-gray-500 border-gray-200 hover:bg-gray-100":"bg-gray-800 text-white border-gray-800"}`,children:"Todas"}),h.map(fe=>s.jsx("button",{onClick:()=>v(W=>W===fe.id?"":fe.id),className:`text-[10px] font-bold px-2 py-0.5 rounded-full border transition-colors ${x===fe.id?"bg-blue-600 text-white border-blue-600":"text-gray-500 border-gray-200 hover:bg-gray-100"}`,children:fe.nome},fe.id))]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-2 space-y-3",children:[!i&&s.jsx("div",{className:"flex justify-center pt-8",children:s.jsx(Ot,{size:18,className:"animate-spin text-gray-300"})}),ft.map((fe,W)=>s.jsxs("div",{children:[fe.esp&&s.jsx("p",{className:"text-[9px] font-black text-gray-400 uppercase tracking-widest px-2 mb-1",children:fe.esp.nome}),s.jsx("div",{className:"space-y-0.5",children:fe.procs.map(de=>{const ye=oe(de),Me=Wt(de.id);return s.jsxs("button",{onClick:()=>G(de),className:`w-full text-left px-2.5 py-2 rounded-lg transition-all flex items-center justify-between gap-2 group ${Me?"bg-emerald-50 border border-emerald-200":"border border-transparent hover:bg-white hover:border-gray-200 hover:shadow-sm"}`,children:[s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:`text-xs font-bold truncate ${Me?"text-emerald-700":"text-gray-700"}`,children:de.nome}),de.codigo&&s.jsx("p",{className:"text-[9px] text-gray-400",children:de.codigo})]}),s.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[s.jsx("span",{className:`text-[10px] font-black ${Me?"text-emerald-600":"text-green-600"}`,children:Jn(ye)}),Me?s.jsx(jl,{size:13,className:"text-emerald-500"}):s.jsx(gt,{size:13,className:"text-gray-300 group-hover:text-blue-500"})]})]},de.id)})})]},W)),i&&Re.length===0&&s.jsx("p",{className:"text-xs text-gray-400 text-center pt-6",children:"Nenhum procedimento encontrado"})]})]}),s.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",children:[s.jsx("div",{className:"flex-1 overflow-y-auto p-4 space-y-2",children:N.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-center",children:[s.jsx("div",{className:"w-16 h-16 bg-gray-100 rounded-2xl flex items-center justify-center mb-3",children:s.jsx(mO,{size:24,className:"text-gray-300"})}),s.jsx("p",{className:"text-sm font-bold text-gray-400",children:"Nenhum procedimento selecionado"}),s.jsx("p",{className:"text-xs text-gray-300 mt-1",children:"Clique nos procedimentos ao lado para adicionar"})]}):N.map(fe=>s.jsx(CM,{item:fe,onChange:W=>te(fe.uid,W),onRemove:()=>re(fe.uid)},fe.uid))}),s.jsxs("div",{className:"flex-shrink-0 border-t border-gray-100 bg-gray-50/50 p-4 space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between text-sm",children:[s.jsx("span",{className:"font-bold text-gray-500 uppercase text-xs",children:"Subtotal"}),s.jsx("span",{className:"font-black text-gray-800 text-base",children:Jn(T)})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Desconto"}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx("button",{onClick:()=>D(fe=>fe==="R$"?"%":"R$"),className:"px-2 py-2 border border-gray-200 rounded-lg text-[10px] font-black text-gray-500 hover:bg-gray-100 flex-shrink-0 bg-white",children:w==="R$"?s.jsx(UN,{size:12}):s.jsx(HD,{size:12})}),s.jsx("input",{type:"number",step:"0.01",value:C,onChange:fe=>I(fe.target.value),placeholder:"0",className:St+" text-sm"})]}),le>0&&s.jsxs("p",{className:"text-[10px] text-red-500 mt-0.5",children:["− ",Jn(le)]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Entrada (R$)"}),s.jsx("input",{type:"number",step:"0.01",value:L,onChange:fe=>F(fe.target.value),placeholder:"0",className:St}),se>0&&s.jsxs("p",{className:"text-[10px] text-blue-500 mt-0.5",children:["− ",Jn(se)," (marca como Pago)"]})]})]}),s.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 p-3 space-y-2.5",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("span",{className:"text-xs font-black text-gray-500 uppercase",children:"Restante a parcelar"}),s.jsx("span",{className:"text-lg font-black text-emerald-600",children:Jn(Ne)})]}),s.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Parcelas"}),s.jsx("select",{value:Y,onChange:fe=>$(Number(fe.target.value)),className:St+" text-xs",children:Array.from({length:48},(fe,W)=>W+1).map(fe=>s.jsxs("option",{value:fe,children:[fe,"x — ",Jn(Ne/fe)]},fe))})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"1ª Parcela"}),s.jsx("input",{type:"date",value:M,onChange:fe=>H(fe.target.value),className:St+" text-xs"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Forma"}),s.jsx("select",{value:ne,onChange:fe=>ee(fe.target.value),className:St+" text-xs",children:AM.map(fe=>s.jsx("option",{children:fe},fe))})]})]}),Y>1&&s.jsxs("div",{className:"flex items-center justify-between bg-emerald-50 rounded-lg px-3 py-2",children:[s.jsxs("span",{className:"text-xs font-bold text-emerald-700",children:[Y,"x de"]}),s.jsx("span",{className:"text-sm font-black text-emerald-700",children:Jn(Ae)})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[9px] font-black text-gray-400 uppercase block mb-1",children:"Status 1ª parcela"}),s.jsx("select",{value:he,onChange:fe=>pe(fe.target.value),className:St+" text-xs",children:wM.map(fe=>s.jsx("option",{children:fe},fe))})]}),s.jsx("div",{className:"flex items-end",children:s.jsxs("div",{className:"w-full bg-gray-50 border border-gray-100 rounded-lg p-2 text-center",children:[s.jsx("p",{className:"text-[9px] font-black text-gray-400 uppercase",children:"Total geral"}),s.jsx("p",{className:"text-sm font-black text-gray-800",children:Jn(se+Ne)})]})})]})]}),s.jsxs("div",{className:"flex gap-2 pt-1",children:[s.jsx("button",{onClick:e,className:"px-5 py-2.5 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-xs uppercase flex-shrink-0",children:"Cancelar"}),s.jsxs("button",{onClick:Le,disabled:N.length===0||S,className:"flex-1 py-2.5 bg-emerald-600 hover:bg-emerald-700 text-white font-black rounded-lg text-xs uppercase disabled:opacity-40 flex items-center justify-center gap-2 transition-colors",children:[S?s.jsx(Ot,{size:14,className:"animate-spin"}):s.jsx(jl,{size:14}),S?"Salvando...":`Confirmar ${N.length>0?`— ${Jn(se+Ne)}`:""}`]})]})]})]})]})]})})};function OM(t,e){const[n,r]=A.useState(t);return A.useEffect(()=>{const i=setTimeout(()=>r(t),e);return()=>clearTimeout(i)},[t,e]),n}function RM({label:t,placeholder:e,value:n,onSelect:r,onClear:i,fetchFn:c}){const[d,f]=A.useState(""),[h,p]=A.useState([]),[b,y]=A.useState(!1),[x,v]=A.useState(!1),N=OM(d,300),j=A.useRef(null);return A.useEffect(()=>{if(!N.trim()||n){p([]),y(!1);return}v(!0),c(N).then(S=>{const R=Array.isArray(S)?S:[];p(R),y(R.length>0)}).finally(()=>v(!1))},[N]),A.useEffect(()=>{const S=R=>{j.current&&!j.current.contains(R.target)&&y(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[]),n?s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:t}),s.jsxs("div",{className:"flex items-center justify-between bg-blue-50 border border-blue-100 rounded-lg px-3 py-2",children:[s.jsx("span",{className:"text-xs font-bold text-blue-700 uppercase truncate",children:n.nome}),s.jsx("button",{type:"button",onClick:i,className:"ml-2 text-blue-300 hover:text-blue-600 flex-shrink-0",children:s.jsx(Qe,{size:13})})]})]}):s.jsxs("div",{ref:j,className:"relative",children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:t}),s.jsxs("div",{className:"relative",children:[s.jsx(Qn,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none"}),s.jsx("input",{value:d,onChange:S=>f(S.target.value),placeholder:e,className:"w-full pl-7 pr-3 py-2 border border-gray-200 rounded-lg text-xs focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none"}),x&&s.jsx(Ot,{size:12,className:"absolute right-2.5 top-1/2 -translate-y-1/2 animate-spin text-gray-400"})]}),b&&h.length>0&&s.jsx("div",{className:"absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-xl shadow-xl overflow-hidden",children:h.map(S=>s.jsxs("button",{type:"button",onClick:()=>{r(S),f(""),y(!1)},className:"w-full text-left px-3 py-2 hover:bg-blue-50 text-xs font-medium text-gray-700 flex items-center gap-2 border-b border-gray-50 last:border-0",children:[s.jsx(sa,{size:12,className:"text-gray-400 flex-shrink-0"}),S.nome]},S.id))})]})}const Kv=`CLÁUSULA 1ª – DO OBJETO -O presente contrato tem por objeto a prestação de serviços odontológicos conforme os procedimentos descritos neste instrumento, obrigando-se o profissional a realizá-los com toda a técnica e diligência necessárias. - -CLÁUSULA 2ª – DAS OBRIGAÇÕES DO CONTRATANTE -O(A) paciente obriga-se a: comparecer às consultas agendadas; comunicar cancelamentos com antecedência mínima de 24 horas; seguir as orientações clínicas do profissional; e efetuar os pagamentos nos prazos acordados. - -CLÁUSULA 3ª – DO PAGAMENTO -O valor total do tratamento, a forma de pagamento e o parcelamento estão descritos neste contrato. Em caso de atraso no pagamento, incidirão multa de 2% (dois por cento) e juros de 1% (um por cento) ao mês sobre o valor devido. - -CLÁUSULA 4ª – DA VIGÊNCIA -O presente contrato vigorará pelo período necessário à conclusão do tratamento acordado, podendo ser prorrogado mediante aditivo escrito firmado por ambas as partes. - -CLÁUSULA 5ª – DO CANCELAMENTO E DESISTÊNCIA -Em caso de desistência do tratamento pelo contratante, serão devidos os valores correspondentes aos procedimentos já realizados. Os valores pagos a maior serão restituídos no prazo de 30 dias. - -CLÁUSULA 6ª – DA PROTEÇÃO DE DADOS (LGPD) -Os dados pessoais e de saúde do contratante serão tratados em conformidade com a Lei nº 13.709/2018 (LGPD), utilizados exclusivamente para fins relacionados ao tratamento odontológico. - -CLÁUSULA 7ª – DO FORO -Fica eleito o foro da comarca do domicílio do contratado para dirimir quaisquer controvérsias oriundas do presente contrato, com renúncia expressa de qualquer outro.`,Ep=["DADOS","ITENS","CLÁUSULAS"],Sn=t=>t.toLocaleString("pt-BR",{style:"currency",currency:"BRL"}),TM=({form:t,items:e,valorTotal:n,contratoId:r,onBack:i})=>{const c=new Date().toLocaleDateString("pt-BR",{day:"2-digit",month:"long",year:"numeric"}),d=n-t.entrada,f=t.parcelas>0&&d>0?d/t.parcelas:0;return s.jsxs("div",{className:"flex flex-col h-full",children:[s.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center gap-3 print:hidden flex-shrink-0",children:[s.jsxs("button",{type:"button",onClick:i,className:"flex items-center gap-1.5 px-3 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg text-xs font-bold",children:[s.jsx($a,{size:14})," Voltar"]}),s.jsxs("button",{type:"button",onClick:()=>window.print(),className:"flex items-center gap-1.5 px-4 py-2 bg-gray-900 hover:bg-black text-white rounded-lg text-xs font-bold",children:[s.jsx(Ya,{size:14})," Imprimir / Salvar PDF"]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto bg-gray-50 p-6 print:p-0 print:bg-white",children:s.jsxs("div",{className:"max-w-3xl mx-auto bg-white rounded-2xl shadow-sm border border-gray-200 p-10 print:shadow-none print:rounded-none print:border-0 print:max-w-full",children:[s.jsxs("div",{className:"text-center border-b-2 border-gray-800 pb-6 mb-6",children:[s.jsx("h1",{className:"text-xl font-black text-gray-900 uppercase tracking-wide",children:"CONTRATO DE PRESTAÇÃO DE SERVIÇOS ODONTOLÓGICOS"}),s.jsx("p",{className:"text-sm text-gray-500 mt-1 font-bold uppercase",children:"Nome da Clínica"}),r&&s.jsxs("p",{className:"text-[10px] text-gray-400 mt-0.5",children:["Contrato Nº ",r]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-6 mb-6",children:[s.jsxs("div",{className:"border border-gray-200 rounded-xl p-4",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest mb-2",children:"CONTRATANTE (PACIENTE)"}),s.jsx("p",{className:"font-bold text-gray-800 uppercase",children:t.pacienteNome||"—"}),s.jsxs("div",{className:"mt-2 space-y-1",children:[s.jsx("p",{className:"text-xs text-gray-500",children:"CPF: ___________________________________"}),s.jsx("p",{className:"text-xs text-gray-500",children:"RG: ____________________________________"}),s.jsx("p",{className:"text-xs text-gray-500",children:"Endereço: ______________________________"})]})]}),s.jsxs("div",{className:"border border-gray-200 rounded-xl p-4",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest mb-2",children:"CONTRATADO (DENTISTA)"}),s.jsx("p",{className:"font-bold text-gray-800 uppercase",children:t.dentistaNome||"—"}),s.jsxs("div",{className:"mt-2 space-y-1",children:[s.jsx("p",{className:"text-xs text-gray-500",children:"CRO: ___________________________________"}),s.jsxs("p",{className:"text-xs text-gray-500",children:["Especialidade: ",t.especialidadeNome||"—"]}),s.jsxs("p",{className:"text-xs text-gray-500",children:["Data de início: ",t.dataInicio?new Date(t.dataInicio+"T12:00").toLocaleDateString("pt-BR"):"—"]})]})]})]}),s.jsxs("div",{className:"mb-6",children:[s.jsxs("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1",children:["OBJETO DO CONTRATO — ",t.titulo]}),e.length>0?s.jsxs("table",{className:"w-full text-sm border-collapse",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-gray-50",children:[s.jsx("th",{className:"text-left px-3 py-2 text-xs font-black text-gray-500 uppercase border border-gray-200",children:"Procedimento"}),s.jsx("th",{className:"text-center px-3 py-2 text-xs font-black text-gray-500 uppercase border border-gray-200 w-16",children:"Qtd"}),s.jsx("th",{className:"text-right px-3 py-2 text-xs font-black text-gray-500 uppercase border border-gray-200 w-28",children:"Unit."}),s.jsx("th",{className:"text-right px-3 py-2 text-xs font-black text-gray-500 uppercase border border-gray-200 w-28",children:"Total"})]})}),s.jsx("tbody",{children:e.map((h,p)=>s.jsxs("tr",{className:p%2===0?"bg-white":"bg-gray-50/50",children:[s.jsx("td",{className:"px-3 py-2 text-xs text-gray-700 border border-gray-200 font-medium uppercase",children:h.procedimentoNome}),s.jsx("td",{className:"px-3 py-2 text-xs text-gray-700 border border-gray-200 text-center",children:h.quantidade}),s.jsx("td",{className:"px-3 py-2 text-xs text-gray-700 border border-gray-200 text-right",children:Sn(h.valorUnitario)}),s.jsx("td",{className:"px-3 py-2 text-xs text-gray-700 border border-gray-200 text-right font-bold",children:Sn(h.valorTotal)})]},h.id))}),s.jsx("tfoot",{children:s.jsxs("tr",{className:"bg-gray-100",children:[s.jsx("td",{colSpan:3,className:"px-3 py-2 text-xs font-black text-gray-700 uppercase border border-gray-200 text-right",children:"VALOR TOTAL"}),s.jsx("td",{className:"px-3 py-2 text-sm font-black text-gray-900 border border-gray-200 text-right",children:Sn(n)})]})})]}):s.jsx("p",{className:"text-xs text-gray-500 italic",children:"Nenhum procedimento listado."})]}),s.jsxs("div",{className:"mb-6 border border-gray-200 rounded-xl p-4",children:[s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3",children:"RESUMO FINANCEIRO"}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Valor Total"}),s.jsx("p",{className:"font-bold text-gray-800",children:Sn(n)})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Forma de Pagamento"}),s.jsx("p",{className:"font-bold text-gray-800",children:t.formaPagamento||"—"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Entrada"}),s.jsx("p",{className:"font-bold text-gray-800",children:Sn(t.entrada)})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Restante"}),s.jsx("p",{className:"font-bold text-gray-800",children:Sn(d)})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Parcelas"}),s.jsxs("p",{className:"font-bold text-gray-800",children:[t.parcelas,"x"]})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Valor por Parcela"}),s.jsx("p",{className:"font-bold text-gray-800",children:Sn(f)})]})]})]}),t.clausulas&&s.jsxs("div",{className:"mb-6",children:[s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1",children:"CLÁUSULAS CONTRATUAIS"}),s.jsx("div",{className:"text-xs text-gray-700 whitespace-pre-wrap leading-relaxed",children:t.clausulas})]}),s.jsxs("div",{className:"mt-10 pt-6 border-t-2 border-gray-800",children:[s.jsx("p",{className:"text-xs text-gray-500 text-center mb-8",children:"Estando de pleno acordo com as cláusulas e condições acima, as partes assinam o presente contrato."}),s.jsxs("p",{className:"text-xs text-gray-500 text-center mb-10",children:["___________________, ",c,"."]}),s.jsx("div",{className:"grid grid-cols-3 gap-8",children:[{title:"CONTRATANTE (PACIENTE)",name:t.pacienteNome},{title:"CONTRATADO (DENTISTA)",name:t.dentistaNome},{title:"TESTEMUNHA",name:""}].map((h,p)=>s.jsxs("div",{className:"text-center",children:[s.jsx("div",{className:"h-16 border-b border-gray-400 mb-2"}),s.jsx("p",{className:"text-[10px] font-black text-gray-500 uppercase",children:h.title}),h.name&&s.jsx("p",{className:"text-[10px] text-gray-400 uppercase mt-0.5",children:h.name}),s.jsx("p",{className:"text-[10px] text-gray-400 mt-1",children:"CPF: __________________________"})]},p))})]}),r&&s.jsxs("div",{className:"mt-6 pt-3 border-t border-gray-100 flex justify-between items-center",children:[s.jsxs("p",{className:"text-[9px] text-gray-300",children:["ID: ",r]}),s.jsxs("p",{className:"text-[9px] text-gray-300",children:["Gerado em ",c]})]})]})})]})},oj=({contrato:t,paciente:e,onClose:n,onSaved:r})=>{var oe;const i=$e(),{data:c}=Ie(K.getDentistas),{data:d}=Ie(K.getEspecialidades),{data:f}=Ie(K.getProcedimentos),[h,p]=A.useState(0),[b,y]=A.useState("editor"),[x,v]=A.useState(!1),[N,j]=A.useState({titulo:(t==null?void 0:t.titulo)||"CONTRATO DE SERVIÇOS ODONTOLÓGICOS",status:(t==null?void 0:t.status)||"Rascunho",pacienteId:(t==null?void 0:t.pacienteId)||(e==null?void 0:e.id)||"",pacienteNome:(t==null?void 0:t.pacienteNome)||(e==null?void 0:e.nome)||"",dentistaId:(t==null?void 0:t.dentistaId)||"",dentistaNome:(t==null?void 0:t.dentistaNome)||"",especialidadeId:(t==null?void 0:t.especialidadeId)||"",especialidadeNome:(t==null?void 0:t.especialidadeNome)||"",dataInicio:(t==null?void 0:t.dataInicio)||new Date().toISOString().split("T")[0],dataFim:(t==null?void 0:t.dataFim)||"",observacoes:(t==null?void 0:t.observacoes)||"",entrada:(t==null?void 0:t.entrada)||0,parcelas:(t==null?void 0:t.parcelas)||1,formaPagamento:(t==null?void 0:t.formaPagamento)||"Pix",clausulas:(t==null?void 0:t.clausulas)||Kv}),[S,R]=A.useState(((oe=t==null?void 0:t.items)==null?void 0:oe.map((G,te)=>({id:G.id,procedimentoNome:G.procedimentoNome,quantidade:G.quantidade,valorUnitario:G.valorUnitario,valorTotal:G.valorTotal,descricao:G.descricao,ordem:G.ordem??te})))??[]),[w,D]=A.useState(e?{id:e.id,nome:e.nome}:t!=null&&t.pacienteId?{id:t.pacienteId,nome:t.pacienteNome}:null),[C,I]=A.useState(""),L=S.length>0?S.reduce((G,te)=>G+te.valorTotal,0):0,F=L-N.entrada,Y=N.parcelas>0&&F>0?F/N.parcelas:0;A.useEffect(()=>{const G=te=>{te.key==="Escape"&&n()};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[n]);const $=G=>{const te=d==null?void 0:d.find(re=>re.id===G);j(re=>({...re,especialidadeId:G,especialidadeNome:(te==null?void 0:te.nome)||"",titulo:te?`CONTRATO DE SERVIÇOS ODONTOLÓGICOS — ${te.nome.toUpperCase()}`:re.titulo}))},M=G=>{const te=S.find(T=>T.procedimentoNome===G.nome);if(te){R(T=>T.map(X=>X.id===te.id?{...X,quantidade:X.quantidade+1,valorTotal:(X.quantidade+1)*X.valorUnitario}:X));return}const re={id:Math.random().toString(36).substring(2,10),procedimentoNome:G.nome,quantidade:1,valorUnitario:G.valorParticular,valorTotal:G.valorParticular,ordem:S.length};R(T=>[...T,re])},H=()=>{const G={id:Math.random().toString(36).substring(2,10),procedimentoNome:"",quantidade:1,valorUnitario:0,valorTotal:0,ordem:S.length};R(te=>[...te,G])},ne=(G,te,re)=>{R(T=>T.map(X=>{if(X.id!==G)return X;const le={...X,[te]:re};return(te==="quantidade"||te==="valorUnitario")&&(le.valorTotal=le.quantidade*le.valorUnitario),le}))},ee=G=>R(te=>te.filter(re=>re.id!==G)),he=G=>{if(!G.destination)return;const te=[...S],[re]=te.splice(G.source.index,1);te.splice(G.destination.index,0,re),R(te.map((T,X)=>({...T,ordem:X})))},pe=async()=>{if(!N.pacienteNome&&!w){i.error("SELECIONE UM PACIENTE.");return}v(!0);try{const G={id:t==null?void 0:t.id,titulo:N.titulo,status:N.status,paciente_id:(w==null?void 0:w.id)||N.pacienteId||void 0,paciente_nome:(w==null?void 0:w.nome)||N.pacienteNome,dentista_id:N.dentistaId||void 0,dentista_nome:N.dentistaNome||void 0,especialidade_id:N.especialidadeId||void 0,especialidade_nome:N.especialidadeNome||void 0,data_inicio:N.dataInicio||void 0,data_fim:N.dataFim||void 0,valor_total:L,entrada:N.entrada,parcelas:N.parcelas,forma_pagamento:N.formaPagamento,clausulas:N.clausulas,observacoes:N.observacoes||void 0,items:S.map((te,re)=>({id:te.id,procedimento_nome:te.procedimentoNome,quantidade:te.quantidade,valor_unitario:te.valorUnitario,valor_total:te.valorTotal,descricao:te.descricao||void 0,ordem:re}))};t!=null&&t.id?await K.updateContrato({...t,...G,items:t.items}):await K.saveContrato(G),i.success("CONTRATO SALVO COM SUCESSO!"),r(),n()}catch{i.error("ERRO AO SALVAR CONTRATO.")}finally{v(!1)}},z=qe.useMemo(()=>{const G=f??[],te=C.trim()?G.filter(T=>T.nome.toLowerCase().includes(C.toLowerCase())||T.especialidadeNome.toLowerCase().includes(C.toLowerCase())):G,re={};return te.forEach(T=>{const X=T.especialidadeNome||"Outros";re[X]||(re[X]=[]),re[X].push(T)}),re},[f,C]);return b==="print"?s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200 overflow-hidden",children:[s.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center justify-between flex-shrink-0 print:hidden",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(Ba,{size:16,className:"text-indigo-600"}),s.jsx("span",{className:"text-sm font-black text-gray-800 uppercase",children:"Visualização de Impressão"})]}),s.jsx("button",{type:"button",onClick:n,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]}),s.jsx(TM,{form:N,items:S,valorTotal:L,contratoId:t==null?void 0:t.id,onBack:()=>y("editor")})]})}):s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200 overflow-hidden",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center justify-between flex-shrink-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-indigo-100 rounded-lg flex items-center justify-center",children:s.jsx(Ba,{size:16,className:"text-indigo-600"})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase",children:t?"Editar Contrato":"Novo Contrato"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-medium uppercase",children:N.pacienteNome||"Paciente não selecionado"})]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("button",{type:"button",onClick:()=>y("print"),className:"flex items-center gap-1.5 px-3 py-1.5 bg-gray-100 hover:bg-gray-200 text-gray-700 rounded-lg text-xs font-bold transition-colors",children:[s.jsx(Ya,{size:13})," Imprimir/Assinar"]}),s.jsx("button",{onClick:n,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]})]}),s.jsx("div",{className:"px-6 pt-4 pb-2 flex-shrink-0",children:s.jsx("div",{className:"flex items-center",children:Ep.map((G,te)=>s.jsxs(qe.Fragment,{children:[s.jsxs("button",{type:"button",onClick:()=>p(te),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-full text-[10px] font-black uppercase transition-all whitespace-nowrap ${h===te?"bg-indigo-600 text-white":te{D({id:G.id,nome:G.nome}),j(te=>({...te,pacienteId:G.id,pacienteNome:G.nome}))},onClear:()=>{D(null),j(G=>({...G,pacienteId:"",pacienteNome:""}))},fetchFn:G=>K.getPacientes(G).then(te=>te.data)}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Dentista"}),s.jsxs("select",{value:N.dentistaId,onChange:G=>{const te=c==null?void 0:c.find(re=>re.id===G.target.value);j(re=>({...re,dentistaId:G.target.value,dentistaNome:(te==null?void 0:te.nome)||""}))},className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",children:[s.jsx("option",{value:"",children:"— Selecionar —"}),c==null?void 0:c.map(G=>s.jsx("option",{value:G.id,children:G.nome},G.id))]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Especialidade"}),s.jsxs("select",{value:N.especialidadeId,onChange:G=>$(G.target.value),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",children:[s.jsx("option",{value:"",children:"— Selecionar —"}),d==null?void 0:d.map(G=>s.jsx("option",{value:G.id,children:G.nome},G.id))]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Título do Contrato"}),s.jsx("input",{value:N.titulo,onChange:G=>j(te=>({...te,titulo:G.target.value.toUpperCase()})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",placeholder:"CONTRATO DE SERVIÇOS ODONTOLÓGICOS"})]}),s.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Status"}),s.jsxs("select",{value:N.status,onChange:G=>j(te=>({...te,status:G.target.value})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",children:[s.jsx("option",{value:"Rascunho",children:"Rascunho"}),s.jsx("option",{value:"Ativo",children:"Ativo"}),s.jsx("option",{value:"Assinado",children:"Assinado"}),s.jsx("option",{value:"Encerrado",children:"Encerrado"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Data Início"}),s.jsx("input",{type:"date",value:N.dataInicio,onChange:G=>j(te=>({...te,dataInicio:G.target.value})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Data Fim (opcional)"}),s.jsx("input",{type:"date",value:N.dataFim,onChange:G=>j(te=>({...te,dataFim:G.target.value})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Observações"}),s.jsx("textarea",{value:N.observacoes,onChange:G=>j(te=>({...te,observacoes:G.target.value})),rows:3,className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none resize-none",placeholder:"Observações gerais do contrato..."})]})]}),h===1&&s.jsxs("div",{className:"flex-1 overflow-hidden flex gap-0 min-h-0",children:[s.jsxs("div",{className:"w-72 flex-shrink-0 border-r border-gray-100 flex flex-col min-h-0",children:[s.jsxs("div",{className:"p-3 border-b border-gray-100",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider mb-2",children:"Catálogo de Procedimentos"}),s.jsxs("div",{className:"relative",children:[s.jsx(Qn,{size:12,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none"}),s.jsx("input",{value:C,onChange:G=>I(G.target.value),placeholder:"Buscar procedimento...",className:"w-full pl-7 pr-3 py-1.5 border border-gray-200 rounded-lg text-[11px] focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none"})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-2 space-y-3",children:[Object.entries(z).map(([G,te])=>s.jsxs("div",{children:[s.jsx("p",{className:"text-[9px] font-black text-gray-400 uppercase tracking-widest px-2 py-1",children:G}),te.map(re=>s.jsxs("button",{type:"button",onClick:()=>M(re),className:"w-full flex items-center justify-between px-2 py-1.5 hover:bg-indigo-50 rounded-lg text-left transition-colors group",children:[s.jsx("span",{className:"text-[11px] text-gray-700 font-medium flex-1 truncate",children:re.nome}),s.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0 ml-1",children:[s.jsx("span",{className:"text-[10px] text-green-600 font-bold",children:Sn(re.valorParticular)}),s.jsx("div",{className:"w-5 h-5 rounded-full bg-indigo-100 group-hover:bg-indigo-600 text-indigo-600 group-hover:text-white flex items-center justify-center transition-colors",children:s.jsx(gt,{size:11})})]})]},re.id))]},G)),Object.keys(z).length===0&&s.jsx("p",{className:"text-center text-xs text-gray-400 py-6",children:"Nenhum procedimento encontrado."})]})]}),s.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[s.jsxs("div",{className:"p-3 border-b border-gray-100 flex items-center justify-between",children:[s.jsxs("p",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider",children:["Itens do Contrato (",S.length,")"]}),s.jsxs("button",{type:"button",onClick:H,className:"flex items-center gap-1 px-2.5 py-1.5 bg-indigo-50 hover:bg-indigo-100 text-indigo-700 rounded-lg text-[11px] font-bold transition-colors",children:[s.jsx(gt,{size:12})," Adicionar Item Manual"]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-3",children:S.length===0?s.jsxs("div",{className:"h-full flex flex-col items-center justify-center text-gray-400 py-10",children:[s.jsx(Ba,{size:36,className:"mb-3 opacity-30"}),s.jsx("p",{className:"text-xs font-bold uppercase",children:"Nenhum item adicionado"}),s.jsx("p",{className:"text-[10px] mt-1",children:"Clique em procedimentos no catálogo ou adicione manualmente"})]}):s.jsx(Jl,{onDragEnd:he,children:s.jsx(ti,{droppableId:"items",children:G=>s.jsxs("div",{ref:G.innerRef,...G.droppableProps,className:"space-y-2",children:[S.map((te,re)=>s.jsx(ei,{draggableId:te.id,index:re,children:(T,X)=>s.jsx("div",{ref:T.innerRef,...T.draggableProps,className:`bg-white border border-gray-200 rounded-xl p-3 ${X.isDragging?"shadow-lg border-indigo-300":""}`,children:s.jsxs("div",{className:"flex items-start gap-2",children:[s.jsx("div",{...T.dragHandleProps,className:"mt-1 text-gray-300 hover:text-gray-500 cursor-grab flex-shrink-0",children:s.jsx(Ql,{size:16})}),s.jsxs("div",{className:"flex-1 space-y-2",children:[s.jsx("input",{value:te.procedimentoNome,onChange:le=>ne(te.id,"procedimentoNome",le.target.value.toUpperCase()),className:"w-full border border-gray-200 rounded-lg px-2.5 py-1.5 text-xs font-bold text-gray-800 focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",placeholder:"Nome do procedimento"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("div",{className:"flex items-center gap-1 border border-gray-200 rounded-lg overflow-hidden",children:[s.jsx("button",{type:"button",onClick:()=>ne(te.id,"quantidade",Math.max(1,te.quantidade-1)),className:"px-2 py-1.5 hover:bg-gray-100 text-gray-600 transition-colors",children:s.jsx(YN,{size:11})}),s.jsx("span",{className:"text-xs font-bold text-gray-800 w-6 text-center",children:te.quantidade}),s.jsx("button",{type:"button",onClick:()=>ne(te.id,"quantidade",te.quantidade+1),className:"px-2 py-1.5 hover:bg-gray-100 text-gray-600 transition-colors",children:s.jsx(gt,{size:11})})]}),s.jsx("div",{className:"flex-1",children:s.jsx("input",{type:"number",step:"0.01",min:"0",value:te.valorUnitario,onChange:le=>ne(te.id,"valorUnitario",parseFloat(le.target.value)||0),className:"w-full border border-gray-200 rounded-lg px-2.5 py-1.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",placeholder:"Valor unit."})}),s.jsx("div",{className:"text-sm font-black text-indigo-600 w-24 text-right flex-shrink-0",children:Sn(te.valorTotal)}),s.jsx("button",{type:"button",onClick:()=>ee(te.id),className:"text-red-300 hover:text-red-600 flex-shrink-0 transition-colors",children:s.jsx(Qt,{size:14})})]}),s.jsx("input",{value:te.descricao||"",onChange:le=>ne(te.id,"descricao",le.target.value),className:"w-full border border-gray-100 rounded-lg px-2.5 py-1 text-[11px] text-gray-500 focus:ring-1 focus:ring-indigo-100 outline-none bg-gray-50",placeholder:"Descrição opcional..."})]})]})})},te.id)),G.placeholder]})})})}),S.length>0&&s.jsxs("div",{className:"p-3 border-t border-gray-100 flex justify-between items-center bg-indigo-50/50",children:[s.jsx("span",{className:"text-xs font-black text-gray-500 uppercase",children:"Total"}),s.jsx("span",{className:"text-lg font-black text-indigo-700",children:Sn(L)})]})]})]}),h===2&&s.jsxs("div",{className:"flex-1 overflow-y-auto px-6 py-4 space-y-5",children:[s.jsxs("div",{className:"bg-indigo-50/60 border border-indigo-100 rounded-2xl p-4 space-y-3",children:[s.jsx("p",{className:"text-[10px] font-black text-indigo-600 uppercase tracking-widest",children:"Financeiro"}),s.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Valor Total"}),s.jsx("div",{className:"w-full border border-gray-200 rounded-lg p-2.5 text-sm font-black text-indigo-700 bg-white",children:Sn(L)})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Entrada (R$)"}),s.jsx("input",{type:"number",step:"0.01",min:"0",value:N.entrada||"",onChange:G=>j(te=>({...te,entrada:parseFloat(G.target.value)||0})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",placeholder:"0,00"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Parcelas"}),s.jsx("select",{value:N.parcelas,onChange:G=>j(te=>({...te,parcelas:parseInt(G.target.value)})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",children:Array.from({length:48},(G,te)=>te+1).map(G=>s.jsxs("option",{value:G,children:[G,"x"]},G))})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Forma de Pagamento"}),s.jsx("select",{value:N.formaPagamento,onChange:G=>j(te=>({...te,formaPagamento:G.target.value})),className:"w-full border border-gray-200 rounded-lg p-2.5 text-xs focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none",children:["Pix","Dinheiro","Cartão de Crédito","Cartão de Débito","Boleto","Transferência"].map(G=>s.jsx("option",{value:G,children:G},G))})]})]}),s.jsxs("div",{className:"flex flex-wrap gap-4 pt-2 border-t border-indigo-100",children:[s.jsxs("div",{className:"text-center",children:[s.jsx("p",{className:"text-[10px] text-indigo-400 font-bold uppercase",children:"Restante"}),s.jsx("p",{className:"text-sm font-black text-indigo-700",children:Sn(F)})]}),s.jsxs("div",{className:"text-center",children:[s.jsx("p",{className:"text-[10px] text-indigo-400 font-bold uppercase",children:"Valor por Parcela"}),s.jsx("p",{className:"text-sm font-black text-indigo-700",children:Sn(Y)})]})]})]}),s.jsxs("div",{children:[s.jsxs("div",{className:"flex items-center justify-between mb-2",children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider",children:"Cláusulas Contratuais"}),s.jsx("button",{type:"button",onClick:()=>j(G=>({...G,clausulas:Kv})),className:"text-[10px] text-indigo-500 hover:text-indigo-700 font-bold uppercase transition-colors",children:"Restaurar padrão"})]}),s.jsx("textarea",{value:N.clausulas,onChange:G=>j(te=>({...te,clausulas:G.target.value})),rows:18,className:"w-full border border-gray-200 rounded-xl p-3 text-xs font-mono focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none resize-none leading-relaxed"})]})]})]}),s.jsxs("div",{className:"p-4 border-t border-gray-100 flex justify-between items-center flex-shrink-0",children:[s.jsxs("button",{type:"button",onClick:()=>h>0?p(G=>G-1):n(),className:"px-5 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:[s.jsx($a,{size:14})," ",h===0?"Cancelar":"Voltar"]}),s.jsx("div",{className:"flex items-center gap-2",children:hp(G=>G+1),className:"px-5 py-2 bg-indigo-600 hover:bg-indigo-700 text-white font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:["Próximo ",s.jsx(Pa,{size:14})]}):s.jsxs("button",{type:"button",onClick:pe,disabled:x,className:"px-5 py-2 bg-green-600 hover:bg-green-700 disabled:opacity-60 text-white font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:[x?s.jsx(Ot,{size:14,className:"animate-spin"}):s.jsx(Po,{size:14}),x?"Salvando...":"Salvar Contrato"]})})]})]})})},cj=["MÃE","PAI","FILHO","FILHA","IRMÃO","IRMÃ","CÔNJUGE","AVÔ","AVÓ","NETO","NETA","TIO","TIA","SOBRINHO","SOBRINHA","PRIMO","PRIMA","PADRASTO","MADRASTA","ENTEADO","ENTEADA"];function kM(t){if(!t)return"";if(/^\d{4}-\d{2}-\d{2}$/.test(t))return t;const e=t.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);return e?`${e[3]}-${e[2]}-${e[1]}`:""}function dj(t,e){const[n,r]=A.useState(t);return A.useEffect(()=>{const i=setTimeout(()=>{r(t)},e);return()=>clearTimeout(i)},[t,e]),n}function Xd({label:t,placeholder:e,value:n,onSelect:r,onClear:i,fetchFn:c,renderOption:d,extraAction:f}){const[h,p]=A.useState(""),[b,y]=A.useState([]),[x,v]=A.useState(!1),[N,j]=A.useState(!1),S=dj(h,300),R=A.useRef(null);return A.useEffect(()=>{if(!S.trim()||n){y([]),v(!1);return}j(!0),c(S).then(w=>{const D=Array.isArray(w)?w:[];y(D),v(D.length>0)}).finally(()=>j(!1))},[S]),A.useEffect(()=>{const w=D=>{R.current&&!R.current.contains(D.target)&&v(!1)};return document.addEventListener("mousedown",w),()=>document.removeEventListener("mousedown",w)},[]),n?s.jsxs("div",{className:"flex items-center justify-between bg-blue-50 border border-blue-100 rounded-lg px-3 py-2",children:[s.jsx("span",{className:"text-xs font-bold text-blue-700 uppercase truncate",children:n.nome}),s.jsx("button",{onClick:i,className:"ml-2 text-blue-300 hover:text-blue-600 flex-shrink-0",children:s.jsx(Qe,{size:13})})]}):s.jsxs("div",{ref:R,className:"relative",children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:t}),s.jsxs("div",{className:"flex gap-1",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Qn,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none"}),s.jsx("input",{value:h,onChange:w=>p(w.target.value),placeholder:e,className:"w-full pl-7 pr-3 py-2 border border-gray-200 rounded-lg text-xs focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none"}),N&&s.jsx(Ot,{size:12,className:"absolute right-2.5 top-1/2 -translate-y-1/2 animate-spin text-gray-400"})]}),f]}),x&&b.length>0&&s.jsx("div",{className:"absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-xl shadow-xl overflow-hidden",children:b.map(w=>s.jsx("button",{onClick:()=>{r(w),p(""),v(!1)},className:"w-full text-left px-3 py-2 hover:bg-blue-50 text-xs font-medium text-gray-700 flex items-center gap-2 border-b border-gray-50 last:border-0",children:d?d(w):w.nome},w.id))})]})}const _M=({paciente:t,onClose:e})=>(A.useEffect(()=>{const n=r=>{r.key==="Escape"&&e()};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[e]),s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-indigo-100 rounded-lg flex items-center justify-center",children:s.jsx(sa,{size:16,className:"text-indigo-600"})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase",children:"Vínculo Familiar"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-medium uppercase",children:t.nome})]})]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]}),s.jsx("div",{className:"p-4",children:t.grupoFamiliarId?s.jsxs("div",{className:"flex items-center gap-3 p-3 bg-indigo-50 rounded-xl border border-indigo-100",children:[s.jsx("div",{className:"w-9 h-9 rounded-full bg-indigo-200 flex items-center justify-center flex-shrink-0",children:s.jsx(Wl,{size:15,className:"text-indigo-700"})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-bold text-gray-800 uppercase",children:t.grupoFamiliarNome}),s.jsx("p",{className:"text-[10px] text-indigo-500 font-bold uppercase",children:t.grupoFamiliarRelacao||"Familiar"})]})]}):s.jsx("p",{className:"text-center text-xs text-gray-400 py-4",children:"Nenhum familiar vinculado."})}),s.jsx("div",{className:"p-4 border-t border-gray-100 flex justify-end",children:s.jsx("button",{onClick:e,className:"px-5 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 text-xs font-bold rounded-lg uppercase",children:"Fechar"})})]})})),MM=({patient:t,onClose:e})=>{const{data:n}=Ie(K.getDentistas),{data:r,refresh:i}=Ie(K.getAgendamentos),c=$e(),[d,f]=A.useState(30),[h,p]=A.useState(new Date().toISOString().split("T")[0]),[b,y]=A.useState(""),[x,v]=A.useState(void 0),[N,j]=A.useState("");A.useEffect(()=>{var C;n&&!x&&v((C=n[0])==null?void 0:C.id)},[n,x]),A.useEffect(()=>{const C=I=>{I.key==="Escape"&&e()};return document.addEventListener("keydown",C),()=>{document.removeEventListener("keydown",C)}},[e]);const S=n==null?void 0:n.find(C=>C.id===x),w=A.useCallback(()=>{const C=[];if(!x||!h)return C;const I=480,L=1080,F=720,Y=840,$=(r??[]).filter(M=>M.dentistaId===x&&new Date(M.start).toISOString().split("T")[0]===h).map(M=>({start:new Date(M.start).getHours()*60+new Date(M.start).getMinutes(),end:new Date(M.end).getHours()*60+new Date(M.end).getMinutes()}));for(let M=I;ML||H>=F&&HF&&ne<=Y||HY)continue;if(!$.some(pe=>H>=pe.start&&Hpe.start&&ne<=pe.end||Hpe.end)){const pe=Math.floor(H/60),z=H%60;C.push({time:`${String(pe).padStart(2,"0")}:${String(z).padStart(2,"0")}`,available:!0})}}return C},[x,h,r,d])(),D=async C=>{if(C.preventDefault(),!h||!b||!x||!N){c.error("PREENCHA TODOS OS CAMPOS PARA AGENDAR.");return}const I=new Date(`${h}T${b}:00`),L=new Date(I.getTime()+d*6e4);try{await K.salvarAgendamento({pacienteNome:t.nome,dentistaId:x,start:I.toISOString(),end:L.toISOString(),status:"Pendente",procedimento:N.toUpperCase()}),c.success(`AGENDAMENTO PARA ${t.nome} SALVO!`),i(),e()}catch{c.error("ERRO AO SALVAR AGENDAMENTO.")}};return s.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("form",{onSubmit:D,className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsx("div",{className:"p-5 border-b border-gray-200",children:s.jsxs("div",{className:"flex justify-between items-center",children:[s.jsxs("h2",{className:"text-lg font-bold text-gray-800 flex items-center gap-2",children:[s.jsx(jt,{size:20,className:"text-orange-500"})," AGENDAR CONSULTA"]}),s.jsx("button",{type:"button",onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:20})})]})}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-6 space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"PACIENTE"}),s.jsx("div",{className:"w-full bg-gray-100 p-3 rounded-lg mt-1 font-bold text-gray-800 uppercase",children:t.nome})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"DENTISTA RESPONSÁVEL"}),s.jsxs("div",{className:"flex items-center gap-2 mt-1",children:[s.jsx("select",{value:x,onChange:C=>v(C.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select",children:n==null?void 0:n.map(C=>s.jsx("option",{value:C.id,children:C.nome},C.id))}),s.jsx("div",{className:"w-7 h-7 rounded-full border-2 border-white shadow flex-shrink-0",style:{backgroundColor:(S==null?void 0:S.corAgenda)||"#ccc"}})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"DATA"}),s.jsx("input",{type:"date",value:h,onChange:C=>p(C.target.value),className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"TEMPO"}),s.jsxs("select",{value:d,onChange:C=>f(Number(C.target.value)),className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select",children:[s.jsx("option",{value:15,children:"15 MIN"}),s.jsx("option",{value:30,children:"30 MIN"}),s.jsx("option",{value:45,children:"45 MIN"}),s.jsx("option",{value:60,children:"60 MIN"})]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"HORÁRIOS"}),s.jsxs("div",{className:"grid grid-cols-6 gap-2 mt-2",children:[w.map(C=>s.jsx("button",{type:"button",onClick:()=>y(C.time),className:`py-2 rounded-lg text-sm font-bold border transition-colors ${b===C.time?"bg-blue-600 text-white border-blue-600":"bg-white border-gray-300 hover:border-blue-500"}`,children:C.time},C.time)),w.length===0&&s.jsx("p",{className:"col-span-6 text-center text-xs text-gray-500 p-4 bg-gray-50 rounded-lg",children:"NENHUM HORÁRIO DISPONÍVEL PARA ESTA DATA/DURAÇÃO."})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"PROCEDIMENTO"}),s.jsx("input",{type:"text",value:N,onChange:C=>j(C.target.value.toUpperCase()),placeholder:"EX: AVALIAÇÃO...",className:"w-full mt-1 border border-gray-300 rounded-lg p-2.5 uppercase-input"})]})]}),s.jsxs("div",{className:"p-4 bg-gray-50 border-t border-gray-200 flex justify-end gap-3",children:[s.jsx("button",{type:"button",onClick:e,className:"px-6 py-2 bg-gray-200 hover:bg-gray-300 text-gray-700 font-bold rounded-lg transition-colors text-sm uppercase",children:"CANCELAR"}),s.jsx("button",{type:"submit",className:"px-6 py-2 bg-orange-500 hover:bg-orange-600 text-white font-bold rounded-lg shadow-sm transition-colors text-sm uppercase",children:"CONFIRMAR"})]})]})})},IM=({onClose:t,onSaved:e})=>{const n=$e(),[r,i]=A.useState({nome:"",cpf:"",telefone:"",dataNascimento:"",convenio:"",email:""}),[c,d]=A.useState(null),[f,h]=A.useState(""),[p,b]=A.useState(null),{data:y}=Ie(K.getPlanos);A.useEffect(()=>{const N=j=>{j.key==="Escape"&&t()};return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[t]);const x=async N=>{if(N.preventDefault(),!r.nome||!r.cpf){n.error("PREENCHA NOME E CPF.");return}try{const j=Date.now().toString();await K.savePaciente({...r,id:j,grupoFamiliarId:c==null?void 0:c.id,grupoFamiliarRelacao:f||void 0,indicadoPorId:p==null?void 0:p.id}),n.success("PACIENTE CADASTRADO!"),e(),t()}catch{n.error("ERRO AO CADASTRAR PACIENTE.")}},v="w-full border border-gray-200 rounded-lg p-2.5 text-sm focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none";return s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex justify-between items-center",children:[s.jsxs("h2",{className:"text-sm font-black text-gray-800 uppercase flex items-center gap-2",children:[s.jsx(gt,{size:16,className:"text-green-500"})," Novo Paciente"]}),s.jsx("button",{onClick:t,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]}),s.jsxs("form",{onSubmit:x,className:"flex-1 overflow-y-auto p-5 space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Nome Completo *"}),s.jsx("input",{required:!0,value:r.nome,onChange:N=>i(j=>({...j,nome:N.target.value.toUpperCase()})),className:v,placeholder:"NOME COMPLETO"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"CPF *"}),s.jsx("input",{required:!0,value:r.cpf,onChange:N=>i(j=>({...j,cpf:N.target.value})),className:v,placeholder:"000.000.000-00"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Telefone"}),s.jsx("input",{value:r.telefone,onChange:N=>i(j=>({...j,telefone:N.target.value})),className:v,placeholder:"(67) 99999-9999"})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Nascimento"}),s.jsx("input",{type:"date",value:r.dataNascimento,onChange:N=>i(j=>({...j,dataNascimento:N.target.value})),className:v})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Convênio"}),s.jsxs("select",{value:r.convenio,onChange:N=>i(j=>({...j,convenio:N.target.value})),className:v,children:[s.jsx("option",{value:"",children:"— Particular —"}),y==null?void 0:y.map(N=>s.jsx("option",{value:N.nome,children:N.nome},N.id))]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"E-mail"}),s.jsx("input",{type:"email",value:r.email,onChange:N=>i(j=>({...j,email:N.target.value})),className:v,placeholder:"email@exemplo.com"})]}),s.jsxs("div",{className:"border-t border-gray-100 pt-3 space-y-3",children:[s.jsx(Xd,{label:"Familiar (vínculo)",placeholder:"Buscar paciente familiar...",value:c,onSelect:N=>{d({id:N.id,nome:N.nome})},onClear:()=>{d(null),h("")},fetchFn:N=>K.getPacientes(N).then(j=>j.data),renderOption:N=>s.jsxs("span",{className:"flex items-center gap-2 w-full",children:[s.jsx(sa,{size:12,className:"text-indigo-400 flex-shrink-0"}),s.jsx("span",{className:"font-bold flex-1",children:N.nome}),s.jsx("span",{className:"text-[10px] text-gray-400",children:N.cpf})]})}),c&&s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Parentesco"}),s.jsx("input",{list:"relacoes-list-novo",value:f,onChange:N=>h(N.target.value.toUpperCase()),placeholder:"EX: MÃE, PAI, IRMÃO...",className:v}),s.jsx("datalist",{id:"relacoes-list-novo",children:cj.map(N=>s.jsx("option",{value:N},N))})]}),s.jsx(Xd,{label:"Indicado por",placeholder:"Buscar paciente que indicou...",value:p,onSelect:N=>b({id:N.id,nome:N.nome}),onClear:()=>b(null),fetchFn:N=>K.getPacientes(N).then(j=>j.data),renderOption:N=>s.jsxs("span",{className:"flex items-center gap-2 w-full",children:[s.jsx(Wl,{size:12,className:"text-green-400 flex-shrink-0"}),s.jsx("span",{className:"font-bold flex-1",children:N.nome}),s.jsx("span",{className:"text-[10px] text-gray-400",children:N.cpf})]})})]}),s.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[s.jsx("button",{type:"button",onClick:t,className:"px-5 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-xs uppercase",children:"Cancelar"}),s.jsxs("button",{type:"submit",className:"px-5 py-2 bg-green-600 hover:bg-green-700 text-white font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:[s.jsx(gt,{size:14})," Cadastrar"]})]})]})]})})},LM=({patient:t,onClose:e})=>{const{data:n,isLoading:r}=Ie(K.getAgendamentos),i=(n==null?void 0:n.filter(c=>c.pacienteNome===t.nome))||[];return A.useEffect(()=>{const c=d=>{d.key==="Escape"&&e()};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[e]),s.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"p-5 border-b border-gray-200 flex justify-between items-center",children:[s.jsxs("h2",{className:"text-base font-bold text-gray-800 uppercase",children:["HISTÓRICO — ",t.nome]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:20})})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-2",children:[r&&s.jsx("p",{className:"text-center text-gray-400 text-sm",children:"CARREGANDO..."}),!r&&i.length===0&&s.jsx("p",{className:"text-center text-gray-400 text-sm py-6",children:"NENHUM AGENDAMENTO ENCONTRADO."}),i.map(c=>s.jsxs("div",{className:"flex items-center justify-between border border-gray-100 rounded-lg p-3 bg-gray-50",children:[s.jsxs("div",{children:[s.jsx("p",{className:"font-bold text-gray-800 text-sm uppercase",children:c.procedimento}),s.jsx("p",{className:"text-xs text-gray-500",children:new Date(c.start).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})})]}),s.jsx("span",{className:`text-xs font-bold px-2 py-1 rounded-full uppercase ${c.status==="Confirmado"?"bg-green-100 text-green-700":c.status==="Pendente"?"bg-amber-100 text-amber-700":"bg-gray-100 text-gray-600"}`,children:c.status})]},c.id))]}),s.jsx("div",{className:"p-4 border-t border-gray-200 flex justify-end",children:s.jsx("button",{onClick:e,className:"px-6 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-sm uppercase",children:"FECHAR"})})]})})},zM=["AC","AL","AP","AM","BA","CE","DF","ES","GO","MA","MT","MS","MG","PA","PB","PR","PE","PI","RJ","RN","RS","RO","RR","SC","SP","SE","TO"],jp=["Dados","Família","Endereço","Histórico"],PM=({patient:t,onClose:e,onSaved:n})=>{const r=$e(),{data:i}=Ie(K.getPlanos),{data:c}=Ie(K.getAgendamentos),[d,f]=A.useState(0),[h,p]=A.useState({...t,dataNascimento:kM(t.dataNascimento)}),[b,y]=A.useState(t.grupoFamiliarId?{id:t.grupoFamiliarId,nome:t.grupoFamiliarNome||""}:null),[x,v]=A.useState(t.grupoFamiliarRelacao||""),[N,j]=A.useState(t.indicadoPorId?{id:t.indicadoPorId,nome:t.indicadoPorNome||""}:null),S=(c??[]).filter(D=>D.pacienteNome===t.nome);A.useEffect(()=>{const D=C=>{C.key==="Escape"&&e()};return document.addEventListener("keydown",D),()=>document.removeEventListener("keydown",D)},[e]);const R=async()=>{try{const{grupoFamiliarNome:D,indicadoPorNome:C,...I}=h;await K.updatePaciente({...I,grupoFamiliarId:b==null?void 0:b.id,grupoFamiliarRelacao:x||void 0,indicadoPorId:N==null?void 0:N.id}),r.success("PACIENTE ATUALIZADO!"),n(),e()}catch{r.error("ERRO AO SALVAR.")}},w="w-full border border-gray-200 rounded-lg p-2.5 text-sm focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none";return s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex justify-between items-center flex-shrink-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(zo,{size:15,className:"text-blue-500"}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-sm font-black text-gray-800 uppercase",children:"Editar Paciente"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-medium uppercase",children:t.nome})]})]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]}),s.jsx("div",{className:"px-6 pt-4 pb-0 flex-shrink-0",children:s.jsx("div",{className:"flex items-center",children:jp.map((D,C)=>s.jsxs(qe.Fragment,{children:[s.jsxs("button",{onClick:()=>f(C),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-full text-[10px] font-black uppercase transition-all whitespace-nowrap ${d===C?"bg-blue-600 text-white":Cp(C=>({...C,nome:D.target.value.toUpperCase()})),className:w})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"CPF"}),s.jsx("input",{value:h.cpf,onChange:D=>p(C=>({...C,cpf:D.target.value})),className:w})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Telefone"}),s.jsx("input",{value:h.telefone,onChange:D=>p(C=>({...C,telefone:D.target.value})),className:w})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Nascimento"}),s.jsx("input",{type:"date",value:h.dataNascimento,onChange:D=>p(C=>({...C,dataNascimento:D.target.value})),className:w})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Convênio"}),s.jsxs("select",{value:h.convenio||"",onChange:D=>p(C=>({...C,convenio:D.target.value})),className:w,children:[s.jsx("option",{value:"",children:"— Particular —"}),i==null?void 0:i.map(D=>s.jsx("option",{value:D.nome,children:D.nome},D.id))]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"E-mail"}),s.jsx("input",{type:"email",value:h.email||"",onChange:D=>p(C=>({...C,email:D.target.value})),className:w})]})]}),d===1&&s.jsxs("div",{className:"space-y-4",children:[s.jsx(Xd,{label:"Familiar (vínculo)",placeholder:"Buscar paciente familiar...",value:b,onSelect:D=>{y({id:D.id,nome:D.nome})},onClear:()=>{y(null),v("")},fetchFn:D=>K.getPacientes(D).then(C=>C.data),renderOption:D=>s.jsxs("span",{className:"flex items-center gap-2 w-full",children:[s.jsx(sa,{size:12,className:"text-indigo-400 flex-shrink-0"}),s.jsx("span",{className:"font-bold flex-1",children:D.nome}),s.jsx("span",{className:"text-[10px] text-gray-400",children:D.cpf})]})}),b&&s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Parentesco"}),s.jsx("input",{list:"relacoes-list-editar",value:x,onChange:D=>v(D.target.value.toUpperCase()),placeholder:"EX: MÃE, PAI, IRMÃO...",className:w}),s.jsx("datalist",{id:"relacoes-list-editar",children:cj.map(D=>s.jsx("option",{value:D},D))})]}),s.jsx(Xd,{label:"Indicado por",placeholder:"Buscar paciente que indicou...",value:N,onSelect:D=>j({id:D.id,nome:D.nome}),onClear:()=>j(null),fetchFn:D=>K.getPacientes(D).then(C=>C.data),renderOption:D=>s.jsxs("span",{className:"flex items-center gap-2 w-full",children:[s.jsx(Wl,{size:12,className:"text-green-400 flex-shrink-0"}),s.jsx("span",{className:"font-bold flex-1",children:D.nome}),s.jsx("span",{className:"text-[10px] text-gray-400",children:D.cpf})]})})]}),d===2&&s.jsxs("div",{className:"space-y-3",children:[s.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"CEP"}),s.jsx("input",{value:h.cep||"",onChange:D=>p(C=>({...C,cep:D.target.value})),className:w,placeholder:"00000-000",maxLength:9})]}),s.jsxs("div",{className:"col-span-2",children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Logradouro"}),s.jsx("input",{value:h.logradouro||"",onChange:D=>p(C=>({...C,logradouro:D.target.value.toUpperCase()})),className:w,placeholder:"RUA, AV, TRAVESSA..."})]})]}),s.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Número"}),s.jsx("input",{value:h.numero||"",onChange:D=>p(C=>({...C,numero:D.target.value})),className:w,placeholder:"123"})]}),s.jsxs("div",{className:"col-span-2",children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Complemento"}),s.jsx("input",{value:h.complemento||"",onChange:D=>p(C=>({...C,complemento:D.target.value.toUpperCase()})),className:w,placeholder:"APTO, BLOCO..."})]})]}),s.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[s.jsxs("div",{className:"col-span-2",children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Bairro"}),s.jsx("input",{value:h.bairro||"",onChange:D=>p(C=>({...C,bairro:D.target.value.toUpperCase()})),className:w,placeholder:"BAIRRO"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"UF"}),s.jsxs("select",{value:h.estado||"",onChange:D=>p(C=>({...C,estado:D.target.value})),className:w,children:[s.jsx("option",{value:"",children:"—"}),zM.map(D=>s.jsx("option",{children:D},D))]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Cidade"}),s.jsx("input",{value:h.cidade||"",onChange:D=>p(C=>({...C,cidade:D.target.value.toUpperCase()})),className:w,placeholder:"CIDADE"})]})]}),d===3&&s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1",children:"Observações Clínicas"}),s.jsx("textarea",{rows:4,value:h.observacoes||"",onChange:D=>p(C=>({...C,observacoes:D.target.value})),className:w+" resize-none",placeholder:"ALERGIAS, HISTÓRICO MÉDICO, OBSERVAÇÕES..."})]}),s.jsxs("div",{children:[s.jsxs("p",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider mb-2",children:["Histórico de Atendimentos ",s.jsxs("span",{className:"text-blue-600",children:["(",S.length,")"]})]}),S.length===0&&s.jsx("p",{className:"text-xs text-gray-400 text-center py-4 border-2 border-dashed border-gray-100 rounded-xl",children:"Nenhum atendimento registrado."}),s.jsx("div",{className:"space-y-1.5 max-h-52 overflow-y-auto",children:S.map(D=>s.jsxs("div",{className:"flex items-center justify-between border border-gray-100 rounded-lg p-2.5 bg-gray-50/70",children:[s.jsxs("div",{children:[s.jsx("p",{className:"font-bold text-gray-800 text-xs uppercase",children:D.procedimento}),s.jsx("p",{className:"text-[10px] text-gray-400",children:new Date(D.start).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric"})})]}),s.jsx("span",{className:`text-[9px] font-black px-2 py-0.5 rounded-full uppercase ${D.status==="Confirmado"?"bg-green-100 text-green-700":D.status==="Pendente"?"bg-amber-100 text-amber-700":D.status==="Faltou"?"bg-red-100 text-red-600":"bg-gray-100 text-gray-600"}`,children:D.status})]},D.id))})]})]})]}),s.jsxs("div",{className:"p-4 border-t border-gray-100 flex justify-between items-center flex-shrink-0",children:[s.jsxs("button",{type:"button",onClick:()=>d>0?f(D=>D-1):e(),className:"px-5 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:[s.jsx($a,{size:14})," ",d===0?"Cancelar":"Voltar"]}),df(D=>D+1),className:"px-5 py-2 bg-blue-600 hover:bg-blue-700 text-white font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:["Próximo ",s.jsx(Pa,{size:14})]}):s.jsxs("button",{type:"button",onClick:R,className:"px-5 py-2 bg-green-600 hover:bg-green-700 text-white font-bold rounded-lg text-xs uppercase flex items-center gap-1.5",children:[s.jsx(Po,{size:14})," Salvar Tudo"]})]})]})})},UM=({patient:t,onClose:e})=>{const{data:n,isLoading:r}=Ie(K.getAgendamentos),i=(n??[]).filter(h=>h.pacienteNome===t.nome),c=i.filter(h=>h.status==="Concluido"),d=i.filter(h=>h.status==="Faltou"),f=c.reduce((h,p)=>(h[p.procedimento]=(h[p.procedimento]||0)+1,h),{});return A.useEffect(()=>{const h=p=>{p.key==="Escape"&&e()};return document.addEventListener("keydown",h),()=>document.removeEventListener("keydown",h)},[e]),s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"p-5 border-b border-gray-100 flex items-center justify-between flex-shrink-0",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-teal-100 rounded-lg flex items-center justify-center",children:s.jsx(aa,{size:16,className:"text-teal-600"})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase",children:"Tratamentos"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-medium uppercase",children:t.nome})]})]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]}),s.jsxs("div",{className:"grid grid-cols-3 gap-3 p-5 flex-shrink-0",children:[s.jsxs("div",{className:"bg-blue-50 rounded-xl p-3 text-center",children:[s.jsx("p",{className:"text-2xl font-black text-blue-600",children:i.length}),s.jsx("p",{className:"text-[10px] font-bold text-blue-400 uppercase",children:"Total Consultas"})]}),s.jsxs("div",{className:"bg-green-50 rounded-xl p-3 text-center",children:[s.jsx("p",{className:"text-2xl font-black text-green-600",children:c.length}),s.jsx("p",{className:"text-[10px] font-bold text-green-400 uppercase",children:"Concluídas"})]}),s.jsxs("div",{className:"bg-red-50 rounded-xl p-3 text-center",children:[s.jsx("p",{className:"text-2xl font-black text-red-600",children:d.length}),s.jsx("p",{className:"text-[10px] font-bold text-red-400 uppercase",children:"Faltas"})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto px-5 pb-5 space-y-5",children:[Object.keys(f).length>0&&s.jsxs("div",{children:[s.jsx("p",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider mb-2",children:"Procedimentos Realizados"}),s.jsx("div",{className:"space-y-1.5",children:Object.entries(f).sort(([,h],[,p])=>p-h).map(([h,p])=>s.jsxs("div",{className:"flex items-center justify-between bg-gray-50 rounded-lg px-3 py-2",children:[s.jsx("p",{className:"text-xs font-bold text-gray-700 uppercase",children:h}),s.jsxs("span",{className:"text-[10px] font-black bg-blue-100 text-blue-700 px-2 py-0.5 rounded-full",children:[p,"x"]})]},h))})]}),s.jsxs("div",{children:[s.jsxs("p",{className:"text-[10px] font-black text-gray-500 uppercase tracking-wider mb-2",children:["Histórico Cronológico (",i.length,")"]}),r&&s.jsx("p",{className:"text-xs text-gray-400 text-center py-4",children:"Carregando..."}),!r&&i.length===0&&s.jsx("p",{className:"text-xs text-gray-400 text-center py-4 border-2 border-dashed border-gray-100 rounded-xl",children:"Nenhum atendimento registrado."}),s.jsx("div",{className:"space-y-1.5",children:[...i].sort((h,p)=>new Date(p.start).getTime()-new Date(h.start).getTime()).map(h=>s.jsxs("div",{className:"flex items-center justify-between border border-gray-100 rounded-lg p-2.5",children:[s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"font-bold text-gray-800 text-xs uppercase truncate",children:h.procedimento}),s.jsx("p",{className:"text-[10px] text-gray-400",children:new Date(h.start).toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric"})})]}),s.jsx("span",{className:`text-[9px] font-black px-2 py-0.5 rounded-full uppercase flex-shrink-0 ml-2 ${h.status==="Concluido"?"bg-green-100 text-green-700":h.status==="Confirmado"?"bg-blue-100 text-blue-700":h.status==="Pendente"?"bg-amber-100 text-amber-700":"bg-red-100 text-red-600"}`,children:h.status})]},h.id))})]})]}),s.jsx("div",{className:"p-4 border-t border-gray-100 flex justify-end flex-shrink-0",children:s.jsx("button",{onClick:e,className:"px-5 py-2 bg-gray-100 hover:bg-gray-200 text-gray-700 text-xs font-bold rounded-lg uppercase",children:"Fechar"})})]})})},BM=({patient:t,onClose:e})=>{const{data:n}=Ie(K.getAgendamentos),r=(n??[]).filter(f=>f.pacienteNome===t.nome),i=r.filter(f=>f.status==="Concluido").length,c=r.filter(f=>f.status==="Faltou").length,d=new Date().toLocaleDateString("pt-BR",{day:"2-digit",month:"long",year:"numeric"});return A.useEffect(()=>{const f=h=>{h.key==="Escape"&&e()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[e]),s.jsx("div",{className:"fixed inset-0 bg-black/40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"p-4 border-b border-gray-100 flex items-center justify-between flex-shrink-0 print:hidden",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-violet-100 rounded-lg flex items-center justify-center",children:s.jsx(Io,{size:16,className:"text-violet-600"})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase",children:"Relatório do Paciente"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-medium uppercase",children:t.nome})]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsxs("button",{onClick:()=>window.print(),className:"flex items-center gap-1.5 px-3 py-2 bg-gray-900 text-white rounded-lg text-xs font-bold hover:bg-black",children:[s.jsx(Ya,{size:13})," Imprimir"]}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:18})})]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto bg-gray-50 p-6 print:p-0 print:bg-white",children:s.jsxs("div",{className:"max-w-2xl mx-auto bg-white rounded-2xl shadow-sm border border-gray-200 p-8 print:shadow-none print:rounded-none print:border-0 print:max-w-full space-y-6",children:[s.jsxs("div",{className:"border-b-2 border-gray-800 pb-4",children:[s.jsx("h1",{className:"text-lg font-black text-gray-900 uppercase",children:"Relatório do Paciente"}),s.jsxs("p",{className:"text-xs text-gray-500 mt-1",children:["Gerado em ",d]})]}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1",children:"Dados Pessoais"}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Nome"}),s.jsx("p",{className:"font-bold text-gray-800 uppercase",children:t.nome})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"CPF"}),s.jsx("p",{className:"font-bold text-gray-800",children:t.cpf||"—"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Telefone"}),s.jsx("p",{className:"font-bold text-gray-800",children:t.telefone||"—"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"E-mail"}),s.jsx("p",{className:"font-bold text-gray-800",children:t.email||"—"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Nascimento"}),s.jsx("p",{className:"font-bold text-gray-800",children:t.dataNascimento||"—"})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Convênio"}),s.jsx("p",{className:"font-bold text-gray-800",children:t.convenio||"Particular"})]})]})]}),(t.logradouro||t.cidade)&&s.jsxs("div",{children:[s.jsxs("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1 flex items-center gap-1",children:[s.jsx(VN,{size:11})," Endereço"]}),s.jsxs("p",{className:"text-sm text-gray-700",children:[[t.logradouro,t.numero,t.complemento].filter(Boolean).join(", "),t.bairro&&s.jsxs("span",{className:"block",children:[t.bairro,t.cidade&&` — ${t.cidade}/${t.estado}`]}),t.cep&&s.jsxs("span",{className:"block text-gray-400 text-xs",children:["CEP ",t.cep]})]})]}),(t.grupoFamiliarNome||t.indicadoPorNome)&&s.jsxs("div",{children:[s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1",children:"Vínculos"}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[t.grupoFamiliarNome&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Familiar"}),s.jsxs("p",{className:"font-bold text-gray-800 uppercase",children:[t.grupoFamiliarNome," ",t.grupoFamiliarRelacao&&`(${t.grupoFamiliarRelacao})`]})]}),t.indicadoPorNome&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 text-xs font-bold uppercase block",children:"Indicado por"}),s.jsx("p",{className:"font-bold text-gray-800 uppercase",children:t.indicadoPorNome})]})]})]}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1",children:"Resumo de Atendimentos"}),s.jsxs("div",{className:"grid grid-cols-3 gap-3 mb-4",children:[s.jsxs("div",{className:"bg-blue-50 rounded-xl p-3 text-center",children:[s.jsx("p",{className:"text-xl font-black text-blue-600",children:r.length}),s.jsx("p",{className:"text-[10px] font-bold text-blue-400 uppercase",children:"Total"})]}),s.jsxs("div",{className:"bg-green-50 rounded-xl p-3 text-center",children:[s.jsx("p",{className:"text-xl font-black text-green-600",children:i}),s.jsx("p",{className:"text-[10px] font-bold text-green-400 uppercase",children:"Concluídos"})]}),s.jsxs("div",{className:"bg-red-50 rounded-xl p-3 text-center",children:[s.jsx("p",{className:"text-xl font-black text-red-600",children:c}),s.jsx("p",{className:"text-[10px] font-bold text-red-400 uppercase",children:"Faltas"})]})]}),s.jsx("div",{className:"space-y-1.5 max-h-48 overflow-y-auto",children:[...r].sort((f,h)=>new Date(h.start).getTime()-new Date(f.start).getTime()).slice(0,20).map(f=>s.jsxs("div",{className:"flex items-center justify-between border border-gray-100 rounded-lg px-3 py-2",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-bold text-gray-800 uppercase",children:f.procedimento}),s.jsx("p",{className:"text-[10px] text-gray-400",children:new Date(f.start).toLocaleDateString("pt-BR")})]}),s.jsx("span",{className:`text-[9px] font-black px-2 py-0.5 rounded-full uppercase ${f.status==="Concluido"?"bg-green-100 text-green-700":f.status==="Faltou"?"bg-red-100 text-red-600":"bg-amber-100 text-amber-700"}`,children:f.status})]},f.id))})]}),t.observacoes&&s.jsxs("div",{children:[s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest mb-3 border-b border-gray-100 pb-1",children:"Observações Clínicas"}),s.jsx("p",{className:"text-sm text-gray-700 italic",children:t.observacoes})]}),s.jsxs("div",{className:"pt-6 border-t-2 border-gray-800 flex justify-between items-end",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs text-gray-500",children:"Assinatura / Responsável"}),s.jsx("div",{className:"h-8"})]}),s.jsx("p",{className:"text-xs text-gray-400",children:d})]})]})})]})})},xd=({label:t,value:e})=>{const[n,r]=A.useState(!1),i=()=>{e&&navigator.clipboard.writeText(e).then(()=>{r(!0),setTimeout(()=>r(!1),1500)})};return s.jsxs("div",{className:"flex items-center justify-between bg-gray-50/70 border border-gray-200/50 rounded-lg px-2 py-1.5 gap-1 min-w-0",children:[s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("p",{className:"text-gray-400 text-[9px] font-bold uppercase leading-none mb-0.5",children:t}),s.jsx("p",{className:"text-gray-800 font-semibold text-xs truncate leading-tight",children:e||"—"})]}),e&&s.jsx("button",{onClick:i,className:"flex-shrink-0 text-gray-300 hover:text-blue-500 transition-colors ml-1",title:`Copiar ${t}`,children:n?s.jsx(pa,{size:13,className:"text-green-500"}):s.jsx(YC,{size:13})})]})},HM=[{key:"recentes",label:"Recentes"},{key:"az",label:"A→Z"},{key:"za",label:"Z→A"},{key:"convenio",label:"Convênio"}],GM=()=>{const[t,e]=A.useState(""),[n,r]=A.useState("recentes"),i=dj(t,500),c=A.useCallback(()=>K.getPacientes(i,n),[i,n]),{data:d,isLoading:f,error:h,refresh:p}=Ie(c,[i,n]),b=(d==null?void 0:d.data)??[];d==null||d.total;const y=$e(),[x,v]=A.useState({type:null,patient:null}),[N,j]=A.useState(null),[S,R]=A.useState(!1),w=A.useCallback(()=>v({type:null,patient:null}),[]);A.useEffect(()=>{if(!(x.type!==null&&x.type!=="agendamento"&&x.type!=="historico"&&x.type!=="editar"))return;const he=pe=>{pe.key==="Escape"&&w()};return document.addEventListener("keydown",he),()=>{document.removeEventListener("keydown",he)}},[x.type,w]);const[D,C]=A.useState({tratamento:"",valorTotal:"",desconto:"",entrada:"",parcelas:1,vencimento:new Date().toISOString().split("T")[0]});A.useEffect(()=>{x.type==="asaas"&&C({tratamento:"",valorTotal:"",desconto:"",entrada:"",parcelas:1,vencimento:new Date().toISOString().split("T")[0]})},[x.type,x.patient]);const I=ee=>{const{name:he,value:pe}=ee.target;C(z=>({...z,[he]:pe}))},L=parseFloat(D.valorTotal)||0,F=parseFloat(D.desconto)||0,Y=parseFloat(D.entrada)||0,$=L-F-Y,M=$>0&&D.parcelas>0?$/Number(D.parcelas):0,H=ee=>{var he;ee.preventDefault(),y.success(`COBRANÇA GERADA NO ASAAS PARA ${(he=x.patient)==null?void 0:he.nome}!`),w()},ne=b;return s.jsxs("div",{className:"h-full flex flex-col relative",children:[s.jsx(fn,{title:"PACIENTES",children:s.jsxs("button",{onClick:()=>R(!0),className:"bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg flex items-center gap-2 transition-colors uppercase font-bold text-sm shadow-sm",children:[s.jsx(gt,{size:18}),"NOVO PACIENTE"]})}),s.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Qn,{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none",size:16}),s.jsx("input",{type:"text",placeholder:"Nome ou CPF...",className:"w-full pl-9 pr-3 py-2 border border-gray-200 rounded-lg text-sm focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none bg-white",value:t,onChange:ee=>e(ee.target.value.toUpperCase())})]}),s.jsx("div",{className:"flex items-center gap-1 bg-gray-100 rounded-lg p-1",children:HM.map(ee=>s.jsx("button",{onClick:()=>r(ee.key),className:`px-2.5 py-1 rounded-md text-[11px] font-bold transition-all whitespace-nowrap ${n===ee.key?"bg-white text-gray-800 shadow-sm":"text-gray-500 hover:text-gray-700"}`,children:ee.label},ee.key))})]}),s.jsxs("div",{className:"grid grid-cols-3 gap-3 overflow-y-auto pb-6",children:[f&&s.jsxs("div",{className:"col-span-3 text-center p-10 text-gray-500 uppercase font-bold flex justify-center items-center gap-2",children:[s.jsx(Ot,{className:"animate-spin"})," CARREGANDO DADOS DO POSTGRESQL..."]}),h&&s.jsxs("div",{className:"col-span-3 text-center p-10 text-red-600 uppercase font-bold",children:["ERRO AO CARREGAR: ",h.message]}),ne&&ne.map(ee=>s.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm hover:shadow-md transition-all duration-200 flex flex-col",children:[s.jsxs("div",{className:"px-3 pt-3 pb-2 flex-grow flex flex-col gap-2",children:[s.jsxs("div",{className:"flex items-start justify-between gap-1.5",children:[s.jsx("h3",{className:"font-bold text-blue-700 text-[11px] leading-snug uppercase break-words flex-1",children:ee.nome}),ee.convenio&&s.jsx("span",{className:"bg-green-100 text-green-700 text-[9px] font-black px-1.5 py-0.5 rounded-full uppercase shrink-0",children:ee.convenio})]}),(ee.grupoFamiliarNome||ee.indicadoPorNome)&&s.jsxs("div",{className:"flex flex-wrap gap-1",children:[ee.grupoFamiliarNome&&s.jsxs("button",{onClick:()=>j(ee),className:"flex items-center gap-1 bg-indigo-50 hover:bg-indigo-100 text-indigo-600 px-1.5 py-0.5 rounded-full text-[9px] font-bold uppercase transition-colors",children:[s.jsx(sa,{size:9}),ee.grupoFamiliarRelacao?`${ee.grupoFamiliarRelacao}: ${ee.grupoFamiliarNome}`:ee.grupoFamiliarNome]}),ee.indicadoPorNome&&s.jsxs("span",{className:"flex items-center gap-1 bg-emerald-50 text-emerald-600 px-1.5 py-0.5 rounded-full text-[9px] font-bold uppercase",children:[s.jsx(Wl,{size:9}),ee.indicadoPorNome]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-1",children:[s.jsx(xd,{label:"CPF",value:ee.cpf}),s.jsx(xd,{label:"Telefone",value:ee.telefone}),s.jsx(xd,{label:"Nascimento",value:ee.dataNascimento}),s.jsx(xd,{label:"Convênio",value:ee.convenio})]})]}),s.jsxs("div",{className:"flex border-t border-gray-100",children:[s.jsxs("button",{onClick:()=>v({type:"clinical",patient:ee}),className:"w-1/2 flex items-center justify-center gap-1.5 py-2 text-blue-600 hover:bg-blue-50 rounded-bl-xl text-[10px] font-bold transition-colors uppercase",children:[s.jsx(sv,{size:12})," Clínico"]}),s.jsx("div",{className:"border-l border-gray-100"}),s.jsxs("button",{onClick:()=>v({type:"financial",patient:ee}),className:"w-1/2 flex items-center justify-center gap-1.5 py-2 text-green-700 hover:bg-green-50 rounded-br-xl text-[10px] font-bold transition-colors uppercase",children:[s.jsx(Fa,{size:12})," Financeiro"]})]})]},ee.id))]}),N&&s.jsx(_M,{paciente:N,onClose:()=>j(null)}),S&&s.jsx(IM,{onClose:()=>R(!1),onSaved:p}),x.type==="editar"&&x.patient&&s.jsx(PM,{patient:x.patient,onClose:w,onSaved:p}),x.type==="historico"&&x.patient&&s.jsx(LM,{patient:x.patient,onClose:w}),x.type==="clinical"&&x.patient&&s.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col p-6 animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"flex justify-between items-center mb-2",children:[s.jsxs("div",{className:"flex items-center gap-3 text-gray-700 font-bold text-xl",children:[s.jsx(sv,{size:28,className:"text-gray-400"}),"Menu Clínico"]}),s.jsx("button",{onClick:w,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:20})})]}),s.jsx("p",{className:"text-gray-500 text-sm mb-6 font-bold uppercase",children:x.patient.nome}),s.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4 flex-1 content-start",children:[s.jsxs("button",{onClick:()=>v({type:"agendamento",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-orange-400 hover:bg-orange-50/50 transition-all group shadow-sm",children:[s.jsx(SC,{size:32,className:"text-orange-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"AGENDAR"})]}),s.jsxs("button",{onClick:()=>v({type:"historico",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-sky-400 hover:bg-sky-50/50 transition-all group shadow-sm",children:[s.jsx(jt,{size:32,className:"text-sky-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"AGENDAMENTOS"})]}),s.jsxs("button",{onClick:()=>v({type:"tratamentos",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-teal-400 hover:bg-teal-50/50 transition-all group shadow-sm",children:[s.jsx(aa,{size:32,className:"text-teal-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"TRATAMENTOS"})]}),s.jsxs("button",{onClick:()=>{sm.getState().setPaciente(x.patient),w(),window.location.hash="#/lancargto"},className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-yellow-400 hover:bg-yellow-50/50 transition-all group shadow-sm",children:[s.jsx(oo,{size:32,className:"text-yellow-600 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"GTOs"})]}),s.jsxs("button",{onClick:()=>v({type:"doc-receita",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-red-400 hover:bg-red-50/50 transition-all group shadow-sm",children:[s.jsx(Ba,{size:32,className:"text-red-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"RECEITA"})]}),s.jsxs("button",{onClick:()=>v({type:"doc-raiox",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-purple-400 hover:bg-purple-50/50 transition-all group shadow-sm",children:[s.jsx(QD,{size:32,className:"text-purple-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"RAIO-X"})]}),s.jsxs("button",{onClick:()=>v({type:"relatorio-paciente",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-violet-400 hover:bg-violet-50/50 transition-all group shadow-sm",children:[s.jsx(Io,{size:32,className:"text-violet-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"RELATÓRIOS"})]}),s.jsxs("button",{onClick:()=>v({type:"editar",patient:x.patient}),className:"flex flex-col items-center justify-center p-5 bg-white border border-gray-200 rounded-xl hover:border-blue-400 hover:bg-blue-50/50 transition-all group shadow-sm",children:[s.jsx(zo,{size:32,className:"text-blue-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm text-center",children:"EDITAR DADOS"})]})]})]})}),x.type==="agendamento"&&x.patient&&s.jsx(MM,{patient:x.patient,onClose:w}),x.type==="doc-receita"&&x.patient&&s.jsx(hM,{paciente:x.patient,onClose:w}),x.type==="doc-raiox"&&x.patient&&s.jsx(mM,{paciente:x.patient,onClose:w}),x.type==="tratamentos"&&x.patient&&s.jsx(UM,{patient:x.patient,onClose:w}),x.type==="relatorio-paciente"&&x.patient&&s.jsx(BM,{patient:x.patient,onClose:w}),x.type==="lancar"&&x.patient&&s.jsx(DM,{patient:x.patient,onClose:w,onSaved:p}),x.type==="contrato"&&x.patient&&s.jsx(oj,{paciente:x.patient,onClose:w,onSaved:p}),x.type==="financial"&&x.patient&&s.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col p-6 animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"flex justify-between items-center mb-2",children:[s.jsxs("div",{className:"flex items-center gap-3 text-gray-700 font-bold text-xl",children:[s.jsx(RO,{size:28,className:"text-gray-400"}),"Menu Financeiro"]}),s.jsx("button",{onClick:w,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:20})})]}),s.jsx("p",{className:"text-gray-500 text-sm mb-8 font-bold uppercase",children:x.patient.nome}),s.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-4",children:[s.jsxs("button",{onClick:()=>v({type:"lancar",patient:x.patient}),className:"flex flex-col items-center justify-center p-6 bg-white border border-gray-200 rounded-xl hover:border-green-400 hover:bg-green-50/50 transition-all group shadow-sm",children:[s.jsx(BN,{size:32,className:"text-green-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm",children:"LANÇAR"})]}),s.jsxs("button",{onClick:()=>v({type:"asaas",patient:x.patient}),className:"flex flex-col items-center justify-center p-6 bg-white border border-gray-200 rounded-xl hover:border-blue-400 hover:bg-blue-50/50 transition-all group shadow-sm",children:[s.jsx(UN,{size:32,className:"text-blue-600 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm",children:"ASAAS"})]}),s.jsxs("button",{onClick:()=>v({type:"historico",patient:x.patient}),className:"flex flex-col items-center justify-center p-6 bg-white border border-gray-200 rounded-xl hover:border-gray-400 hover:bg-gray-50/50 transition-all group shadow-sm",children:[s.jsx(mD,{size:32,className:"text-gray-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm",children:"HISTÓRICO"})]}),s.jsxs("button",{onClick:()=>v({type:"contrato",patient:x.patient}),className:"flex flex-col items-center justify-center p-6 bg-white border border-gray-200 rounded-xl hover:border-indigo-400 hover:bg-indigo-50/50 transition-all group shadow-sm",children:[s.jsx(Ba,{size:32,className:"text-indigo-500 mb-2 group-hover:scale-110 transition-transform"}),s.jsx("span",{className:"font-bold text-gray-700 text-sm",children:"CONTRATOS"})]})]})]})}),x.type==="asaas"&&x.patient&&s.jsx("div",{className:"fixed inset-0 bg-black bg-opacity-40 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsx("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col animate-in fade-in zoom-in-50 duration-200",children:s.jsxs("form",{onSubmit:H,children:[s.jsx("div",{className:"p-6 border-b border-gray-200",children:s.jsxs("div",{className:"flex justify-between items-start",children:[s.jsxs("div",{children:[s.jsxs("h2",{className:"text-lg font-bold text-gray-800 flex items-center gap-2",children:[s.jsx("span",{className:"w-6 h-4 bg-yellow-400 rounded-sm flex items-center justify-center text-yellow-800",children:s.jsx(WC,{size:14})}),"PARCELAMENTO INTELIGENTE (ASAAS)"]}),s.jsxs("p",{className:"text-sm text-gray-500 mt-2",children:["Cliente: ",s.jsx("span",{className:"font-bold uppercase",children:x.patient.nome})]})]}),s.jsx("button",{type:"button",onClick:w,className:"text-gray-400 hover:text-gray-600",children:s.jsx(Qe,{size:20})})]})}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-6 space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"TRATAMENTO"}),s.jsx("input",{type:"text",name:"tratamento",value:D.tratamento,onChange:I,placeholder:"EX: ORTODONTIA COMPLETA",className:"w-full border border-gray-300 rounded-md p-2 text-sm uppercase-input"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"VALOR TOTAL (R$)"}),s.jsx("input",{type:"number",step:"0.01",name:"valorTotal",value:D.valorTotal,onChange:I,placeholder:"0,00",className:"w-full border border-gray-300 rounded-md p-2 text-sm"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"DESCONTO (R$)"}),s.jsx("input",{type:"number",step:"0.01",name:"desconto",value:D.desconto,onChange:I,placeholder:"0,00",className:"w-full border border-gray-300 rounded-md p-2 text-sm"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"ENTRADA (R$)"}),s.jsx("input",{type:"number",step:"0.01",name:"entrada",value:D.entrada,onChange:I,placeholder:"0,00",className:"w-full border border-gray-300 rounded-md p-2 text-sm"})]}),s.jsxs("div",{className:"bg-blue-50/70 p-3 rounded-md flex justify-between items-center border border-blue-100/50",children:[s.jsx("span",{className:"font-semibold text-blue-700 text-sm",children:"SALDO A PARCELAR:"}),s.jsx("span",{className:"font-bold text-blue-700 text-lg",children:$.toLocaleString("pt-BR",{style:"currency",currency:"BRL"})})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4 pt-2",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"PARCELAS (ATÉ 48X)"}),s.jsx("select",{name:"parcelas",value:D.parcelas,onChange:I,className:"w-full border border-gray-300 rounded-md p-2 text-sm bg-white",children:Array.from({length:48},(ee,he)=>he+1).map(ee=>s.jsxs("option",{value:ee,children:[ee,"x"]},ee))})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"VENCIMENTO 1ª PARCELA"}),s.jsx("input",{type:"date",name:"vencimento",value:D.vencimento,onChange:I,className:"w-full border border-gray-300 rounded-md p-2 text-sm"})]})]}),s.jsxs("div",{className:"text-center text-blue-600 font-bold text-lg py-2",children:[D.parcelas,"x DE ",M.toLocaleString("pt-BR",{style:"currency",currency:"BRL"})]})]}),s.jsxs("div",{className:"p-6 bg-gray-50 border-t border-gray-200 flex justify-end gap-3",children:[s.jsx("button",{type:"button",onClick:w,className:"px-6 py-2 bg-gray-200 hover:bg-gray-300 text-gray-700 font-bold rounded-lg transition-colors text-sm uppercase",children:"CANCELAR"}),s.jsxs("button",{type:"submit",className:"px-6 py-2 bg-blue-600 hover:bg-blue-700 text-white font-bold rounded-lg shadow-sm flex items-center justify-center gap-2 transition-colors text-sm uppercase",children:[s.jsx(ZD,{size:16}),"GERAR CARNÊ/PIX"]})]})]})})})]})};var Du,Ce,uj,fj,Fl,hr,Jv,hj,pj,Zd={},gj=[],FM=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function ks(t,e){for(var n in e)t[n]=e[n];return t}function mj(t){var e=t.parentNode;e&&e.removeChild(t)}function _(t,e,n){var r,i,c,d={};for(c in e)c=="key"?r=e[c]:c=="ref"?i=e[c]:d[c]=e[c];if(arguments.length>2&&(d.children=arguments.length>3?Du.call(arguments,2):n),typeof t=="function"&&t.defaultProps!=null)for(c in t.defaultProps)d[c]===void 0&&(d[c]=t.defaultProps[c]);return Rd(t,d,r,i,null)}function Rd(t,e,n,r,i){var c={type:t,props:e,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:i??++uj};return i==null&&Ce.vnode!=null&&Ce.vnode(c),c}function en(){return{current:null}}function ot(t){return t.children}function VM(t,e,n,r,i){var c;for(c in n)c==="children"||c==="key"||c in e||Kd(t,c,null,n[c],r);for(c in e)i&&typeof e[c]!="function"||c==="children"||c==="key"||c==="value"||c==="checked"||n[c]===e[c]||Kd(t,c,e[c],n[c],r)}function e1(t,e,n){e[0]==="-"?t.setProperty(e,n??""):t[e]=n==null?"":typeof n!="number"||FM.test(e)?n:n+"px"}function Kd(t,e,n,r,i){var c;e:if(e==="style")if(typeof n=="string")t.style.cssText=n;else{if(typeof r=="string"&&(t.style.cssText=r=""),r)for(e in r)n&&e in n||e1(t.style,e,"");if(n)for(e in n)r&&n[e]===r[e]||e1(t.style,e,n[e])}else if(e[0]==="o"&&e[1]==="n")c=e!==(e=e.replace(/Capture$/,"")),e=e.toLowerCase()in t?e.toLowerCase().slice(2):e.slice(2),t.l||(t.l={}),t.l[e+c]=n,n?r||t.addEventListener(e,c?n1:t1,c):t.removeEventListener(e,c?n1:t1,c);else if(e!=="dangerouslySetInnerHTML"){if(i)e=e.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(e!=="width"&&e!=="height"&&e!=="href"&&e!=="list"&&e!=="form"&&e!=="tabIndex"&&e!=="download"&&e in t)try{t[e]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&e.indexOf("-")==-1?t.removeAttribute(e):t.setAttribute(e,n))}}function t1(t){Fl=!0;try{return this.l[t.type+!1](Ce.event?Ce.event(t):t)}finally{Fl=!1}}function n1(t){Fl=!0;try{return this.l[t.type+!0](Ce.event?Ce.event(t):t)}finally{Fl=!1}}function On(t,e){this.props=t,this.context=e}function jo(t,e){if(e==null)return t.__?jo(t.__,t.__.__k.indexOf(t)+1):null;for(var n;ee&&hr.sort(function(h,p){return h.__v.__b-p.__v.__b}));Jd.__r=0}function bj(t,e,n,r,i,c,d,f,h,p){var b,y,x,v,N,j,S,R=r&&r.__k||gj,w=R.length;for(n.__k=[],b=0;b0?Rd(v.type,v.props,v.key,v.ref?v.ref:null,v.__v):v)!=null){if(v.__=n,v.__b=n.__b+1,(x=R[b])===null||x&&v.key==x.key&&v.type===x.type)R[b]=void 0;else for(y=0;y=0;e--)if((n=t.__k[e])&&(r=Nj(n)))return r}return null}function rm(t,e,n,r,i,c,d,f,h){var p,b,y,x,v,N,j,S,R,w,D,C,I,L,F,Y=e.type;if(e.constructor!==void 0)return null;n.__h!=null&&(h=n.__h,f=e.__e=n.__e,e.__h=null,c=[f]),(p=Ce.__b)&&p(e);try{e:if(typeof Y=="function"){if(S=e.props,R=(p=Y.contextType)&&r[p.__c],w=p?R?R.props.value:p.__:r,n.__c?j=(b=e.__c=n.__c).__=b.__E:("prototype"in Y&&Y.prototype.render?e.__c=b=new Y(S,w):(e.__c=b=new On(S,w),b.constructor=Y,b.render=YM),R&&R.sub(b),b.props=S,b.state||(b.state={}),b.context=w,b.__n=r,y=b.__d=!0,b.__h=[],b._sb=[]),b.__s==null&&(b.__s=b.state),Y.getDerivedStateFromProps!=null&&(b.__s==b.state&&(b.__s=ks({},b.__s)),ks(b.__s,Y.getDerivedStateFromProps(S,b.__s))),x=b.props,v=b.state,b.__v=e,y)Y.getDerivedStateFromProps==null&&b.componentWillMount!=null&&b.componentWillMount(),b.componentDidMount!=null&&b.__h.push(b.componentDidMount);else{if(Y.getDerivedStateFromProps==null&&S!==x&&b.componentWillReceiveProps!=null&&b.componentWillReceiveProps(S,w),!b.__e&&b.shouldComponentUpdate!=null&&b.shouldComponentUpdate(S,b.__s,w)===!1||e.__v===n.__v){for(e.__v!==n.__v&&(b.props=S,b.state=b.__s,b.__d=!1),e.__e=n.__e,e.__k=n.__k,e.__k.forEach(function($){$&&($.__=e)}),D=0;D3;)n.pop()();if(n[1]>>1,1),e.i.removeChild(r)}}),So(_(JM,{context:e.context},t.__v),e.l)):e.l&&e.componentWillUnmount()}function tI(t,e){var n=_(eI,{__v:t,i:e});return n.containerInfo=e,n}(bd.prototype=new On).__a=function(t){var e=this,n=Dj(e.__v),r=e.o.get(t);return r[0]++,function(i){var c=function(){e.props.revealOrder?(r.push(i),p1(e,t,r)):i()};n?n(c):c()}},bd.prototype.render=function(t){this.u=null,this.o=new Map;var e=eu(t.children);t.revealOrder&&t.revealOrder[0]==="b"&&e.reverse();for(var n=e.length;n--;)this.o.set(e[n],this.u=[1,0,this.u]);return t.children},bd.prototype.componentDidUpdate=bd.prototype.componentDidMount=function(){var t=this;this.o.forEach(function(e,n){p1(t,n,e)})};var nI=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,aI=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,sI=typeof document<"u",rI=function(t){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(t)};On.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(On.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var g1=Ce.event;function lI(){}function iI(){return this.cancelBubble}function oI(){return this.defaultPrevented}Ce.event=function(t){return g1&&(t=g1(t)),t.persist=lI,t.isPropagationStopped=iI,t.isDefaultPrevented=oI,t.nativeEvent=t};var m1={configurable:!0,get:function(){return this.class}},x1=Ce.vnode;Ce.vnode=function(t){var e=t.type,n=t.props,r=n;if(typeof e=="string"){var i=e.indexOf("-")===-1;for(var c in r={},n){var d=n[c];sI&&c==="children"&&e==="noscript"||c==="value"&&"defaultValue"in n&&d==null||(c==="defaultValue"&&"value"in n&&n.value==null?c="value":c==="download"&&d===!0?d="":/ondoubleclick/i.test(c)?c="ondblclick":/^onchange(textarea|input)/i.test(c+e)&&!rI(n.type)?c="oninput":/^onfocus$/i.test(c)?c="onfocusin":/^onblur$/i.test(c)?c="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(c)?c=c.toLowerCase():i&&aI.test(c)?c=c.replace(/[A-Z0-9]/g,"-$&").toLowerCase():d===null&&(d=void 0),/^oninput$/i.test(c)&&(c=c.toLowerCase(),r[c]&&(c="oninputCapture")),r[c]=d)}e=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=eu(n.children).forEach(function(f){f.props.selected=r.value.indexOf(f.props.value)!=-1})),e=="select"&&r.defaultValue!=null&&(r.value=eu(n.children).forEach(function(f){f.props.selected=r.multiple?r.defaultValue.indexOf(f.props.value)!=-1:r.defaultValue==f.props.value})),t.props=r,n.class!=n.className&&(m1.enumerable="className"in n,n.className!=null&&(r.class=n.className),Object.defineProperty(r,"className",m1))}t.$$typeof=nI,x1&&x1(t)};var b1=Ce.__r;Ce.__r=function(t){b1&&b1(t),t.__c};const Oj=[],tg=new Map;function lm(t){Oj.push(t),tg.forEach(e=>{Tj(e,t)})}function cI(t){t.isConnected&&t.getRootNode&&Rj(t.getRootNode())}function Rj(t){let e=tg.get(t);if(!e||!e.isConnected){if(e=t.querySelector("style[data-fullcalendar]"),!e){e=document.createElement("style"),e.setAttribute("data-fullcalendar","");const n=uI();n&&(e.nonce=n);const r=t===document?document.head:t,i=t===document?r.querySelector("script,link[rel=stylesheet],link[as=style],style"):r.firstChild;r.insertBefore(e,i)}tg.set(t,e),dI(e)}}function dI(t){for(const e of Oj)Tj(t,e)}function Tj(t,e){const{sheet:n}=t,r=n.cssRules.length;e.split("}").forEach((i,c)=>{i=i.trim(),i&&n.insertRule(i+"}",r+c)})}let Cp;function uI(){return Cp===void 0&&(Cp=fI()),Cp}function fI(){const t=document.querySelector('meta[name="csp-nonce"]');if(t&&t.hasAttribute("content"))return t.getAttribute("content");const e=document.querySelector("script[nonce]");return e&&e.nonce||""}typeof document<"u"&&Rj(document);var hI=':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}';lm(hI);class im{constructor(e){this.drainedOption=e,this.isRunning=!1,this.isDirty=!1,this.pauseDepths={},this.timeoutId=0}request(e){this.isDirty=!0,this.isPaused()||(this.clearTimeout(),e==null?this.tryDrain():this.timeoutId=setTimeout(this.tryDrain.bind(this),e))}pause(e=""){let{pauseDepths:n}=this;n[e]=(n[e]||0)+1,this.clearTimeout()}resume(e="",n){let{pauseDepths:r}=this;e in r&&(n?delete r[e]:(r[e]-=1,r[e]<=0&&delete r[e]),this.tryDrain())}isPaused(){return Object.keys(this.pauseDepths).length}tryDrain(){if(!this.isRunning&&!this.isPaused()){for(this.isRunning=!0;this.isDirty;)this.isDirty=!1,this.drained();this.isRunning=!1}}clear(){this.clearTimeout(),this.isDirty=!1,this.pauseDepths={}}clearTimeout(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=0)}drained(){this.drainedOption&&this.drainedOption()}}function om(t){t.parentNode&&t.parentNode.removeChild(t)}function Yt(t,e){if(t.closest)return t.closest(e);if(!document.documentElement.contains(t))return null;do{if(pI(t,e))return t;t=t.parentElement||t.parentNode}while(t!==null&&t.nodeType===1);return null}function pI(t,e){return(t.matches||t.matchesSelector||t.msMatchesSelector).call(t,e)}function gI(t,e){let n=t instanceof HTMLElement?[t]:t,r=[];for(let i=0;i{let r=Yt(n.target,t);r&&e.call(r,n,r)}}function Mj(t,e,n,r){let i=xI(n,r);return t.addEventListener(e,i),()=>{t.removeEventListener(e,i)}}function bI(t,e,n,r){let i;return Mj(t,"mouseover",e,(c,d)=>{if(d!==i){i=d,n(c,d);let f=h=>{i=null,r(h,d),d.removeEventListener("mouseleave",f)};d.addEventListener("mouseleave",f)}})}const v1=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function yI(t,e){let n=r=>{e(r),v1.forEach(i=>{t.removeEventListener(i,n)})};v1.forEach(r=>{t.addEventListener(r,n)})}function Ij(t){return Object.assign({onClick:t},Lj(t))}function Lj(t){return{tabIndex:0,onKeyDown(e){(e.key==="Enter"||e.key===" ")&&(t(e),e.preventDefault())}}}let N1=0;function _r(){return N1+=1,String(N1)}function cm(){document.body.classList.add("fc-not-allowed")}function dm(){document.body.classList.remove("fc-not-allowed")}function vI(t){t.style.userSelect="none",t.style.webkitUserSelect="none",t.addEventListener("selectstart",Ru)}function NI(t){t.style.userSelect="",t.style.webkitUserSelect="",t.removeEventListener("selectstart",Ru)}function EI(t){t.addEventListener("contextmenu",Ru)}function jI(t){t.removeEventListener("contextmenu",Ru)}function SI(t){let e=[],n=[],r,i;for(typeof t=="string"?n=t.split(/\s*,\s*/):typeof t=="function"?n=[t]:Array.isArray(t)&&(n=t),r=0;rr.replace("$"+c,i||""),t):n}function DI(t,e){return t-e}function kd(t){return t%1===0}function OI(t){let e=t.querySelector(".fc-scrollgrid-shrink-frame"),n=t.querySelector(".fc-scrollgrid-shrink-cushion");if(!e)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!n)throw new Error("needs fc-scrollgrid-shrink-cushion className");return t.getBoundingClientRect().width-e.getBoundingClientRect().width+n.getBoundingClientRect().width}const E1=["years","months","days","milliseconds"],RI=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function Ve(t,e){return typeof t=="string"?TI(t):typeof t=="object"&&t?j1(t):typeof t=="number"?j1({[e||"milliseconds"]:t}):null}function TI(t){let e=RI.exec(t);if(e){let n=e[1]?-1:1;return{years:0,months:0,days:n*(e[2]?parseInt(e[2],10):0),milliseconds:n*((e[3]?parseInt(e[3],10):0)*60*60*1e3+(e[4]?parseInt(e[4],10):0)*60*1e3+(e[5]?parseInt(e[5],10):0)*1e3+(e[6]?parseInt(e[6],10):0))}}return null}function j1(t){let e={years:t.years||t.year||0,months:t.months||t.month||0,days:t.days||t.day||0,milliseconds:(t.hours||t.hour||0)*60*60*1e3+(t.minutes||t.minute||0)*60*1e3+(t.seconds||t.second||0)*1e3+(t.milliseconds||t.millisecond||t.ms||0)},n=t.weeks||t.week;return n&&(e.days+=n*7,e.specifiedWeeks=!0),e}function kI(t,e){return t.years===e.years&&t.months===e.months&&t.days===e.days&&t.milliseconds===e.milliseconds}function ng(t,e){return{years:t.years+e.years,months:t.months+e.months,days:t.days+e.days,milliseconds:t.milliseconds+e.milliseconds}}function _I(t,e){return{years:t.years-e.years,months:t.months-e.months,days:t.days-e.days,milliseconds:t.milliseconds-e.milliseconds}}function MI(t,e){return{years:t.years*e,months:t.months*e,days:t.days*e,milliseconds:t.milliseconds*e}}function II(t){return Al(t)/365}function LI(t){return Al(t)/30}function Al(t){return na(t)/864e5}function na(t){return t.years*(365*864e5)+t.months*(30*864e5)+t.days*864e5+t.milliseconds}function um(t,e){let n=null;for(let r=0;r=1?Math.min(i,c):i}function Dp(t,e,n,r){let i=un([e,0,1+QI(e,n,r)]),c=ct(t),d=Math.round(Mr(i,c));return Math.floor(d/7)+1}function QI(t,e,n){let r=7+e-n;return-((7+un([t,0,r]).getUTCDay()-e)%7)+r-1}function A1(t){return[t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()]}function w1(t){return new Date(t[0],t[1]||0,t[2]==null?1:t[2],t[3]||0,t[4]||0,t[5]||0)}function _s(t){return[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds(),t.getUTCMilliseconds()]}function un(t){return t.length===1&&(t=t.concat([0])),new Date(Date.UTC(...t))}function zj(t){return!isNaN(t.valueOf())}function Ms(t){return t.getUTCHours()*1e3*60*60+t.getUTCMinutes()*1e3*60+t.getUTCSeconds()*1e3+t.getUTCMilliseconds()}function Pj(t,e,n=!1){let r=t.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(e==null?r=r.replace("Z",""):e!==0&&(r=r.replace("Z",hm(e,!0)))),r}function fm(t){return t.toISOString().replace(/T.*$/,"")}function WI(t){return t.toISOString().match(/^\d{4}-\d{2}/)[0]}function XI(t){return Sl(t.getUTCHours(),2)+":"+Sl(t.getUTCMinutes(),2)+":"+Sl(t.getUTCSeconds(),2)}function hm(t,e=!1){let n=t<0?"-":"+",r=Math.abs(t),i=Math.floor(r/60),c=Math.round(r%60);return e?`${n+Sl(i,2)}:${Sl(c,2)}`:`GMT${n}${i}${c?`:${Sl(c,2)}`:""}`}function Oe(t,e,n){let r,i;return function(...c){if(!r)i=t.apply(this,c);else if(!Hs(r,c)){let d=t.apply(this,c);(!e||!e(d,i))&&(i=d)}return r=c,i}}function _d(t,e,n){let r,i;return c=>(r?ra(r,c)||(i=t.call(this,c)):i=t.call(this,c),r=c,i)}const Op={week:3,separator:9,omitZeroMinute:9,meridiem:9,omitCommas:9},nu={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},yd=/\s*([ap])\.?m\.?/i,ZI=/,/g,KI=/\s+/g,JI=/\u200e/g,e4=/UTC|GMT/;class t4{constructor(e){let n={},r={},i=9;for(let c in e)c in Op?(r[c]=e[c],Op[c]<9&&(i=Math.min(Op[c],i))):(n[c]=e[c],c in nu&&(i=Math.min(nu[c],i)));this.standardDateProps=n,this.extendedSettings=r,this.smallestUnitNum=i,this.buildFormattingFunc=Oe(C1)}format(e,n){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,n)(e)}formatRange(e,n,r,i){let{standardDateProps:c,extendedSettings:d}=this,f=i4(e.marker,n.marker,r.calendarSystem);if(!f)return this.format(e,r);let h=f;h>1&&(c.year==="numeric"||c.year==="2-digit")&&(c.month==="numeric"||c.month==="2-digit")&&(c.day==="numeric"||c.day==="2-digit")&&(h=1);let p=this.format(e,r),b=this.format(n,r);if(p===b)return p;let y=o4(c,h),x=C1(y,d,r),v=x(e),N=x(n),j=c4(p,v,b,N),S=d.separator||i||r.defaultSeparator||"";return j?j.before+v+S+N+j.after:p+S+b}getSmallestUnit(){switch(this.smallestUnitNum){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";case 2:return"day";default:return"time"}}}function C1(t,e,n){let r=Object.keys(t).length;return r===1&&t.timeZoneName==="short"?i=>hm(i.timeZoneOffset):r===0&&e.week?i=>l4(n.computeWeekNumber(i.marker),n.weekText,n.weekTextLong,n.locale,e.week):n4(t,e,n)}function n4(t,e,n){t=Object.assign({},t),e=Object.assign({},e),a4(t,e),t.timeZone="UTC";let r=new Intl.DateTimeFormat(n.locale.codes,t),i;if(e.omitZeroMinute){let c=Object.assign({},t);delete c.minute,i=new Intl.DateTimeFormat(n.locale.codes,c)}return c=>{let{marker:d}=c,f;i&&!d.getUTCMinutes()?f=i:f=r;let h=f.format(d);return s4(h,c,t,e,n)}}function a4(t,e){t.timeZoneName&&(t.hour||(t.hour="2-digit"),t.minute||(t.minute="2-digit")),t.timeZoneName==="long"&&(t.timeZoneName="short"),e.omitZeroMinute&&(t.second||t.millisecond)&&delete e.omitZeroMinute}function s4(t,e,n,r,i){return t=t.replace(JI,""),n.timeZoneName==="short"&&(t=r4(t,i.timeZone==="UTC"||e.timeZoneOffset==null?"UTC":hm(e.timeZoneOffset))),r.omitCommas&&(t=t.replace(ZI,"").trim()),r.omitZeroMinute&&(t=t.replace(":00","")),r.meridiem===!1?t=t.replace(yd,"").trim():r.meridiem==="narrow"?t=t.replace(yd,(c,d)=>d.toLocaleLowerCase()):r.meridiem==="short"?t=t.replace(yd,(c,d)=>`${d.toLocaleLowerCase()}m`):r.meridiem==="lowercase"&&(t=t.replace(yd,c=>c.toLocaleLowerCase())),t=t.replace(KI," "),t=t.trim(),t}function r4(t,e){let n=!1;return t=t.replace(e4,()=>(n=!0,e)),n||(t+=` ${e}`),t}function l4(t,e,n,r,i){let c=[];return i==="long"?c.push(n):(i==="short"||i==="narrow")&&c.push(e),(i==="long"||i==="short")&&c.push(" "),c.push(r.simpleNumberFormat.format(t)),r.options.direction==="rtl"&&c.reverse(),c.join("")}function i4(t,e,n){return n.getMarkerYear(t)!==n.getMarkerYear(e)?5:n.getMarkerMonth(t)!==n.getMarkerMonth(e)?4:n.getMarkerDay(t)!==n.getMarkerDay(e)?2:Ms(t)!==Ms(e)?1:0}function o4(t,e){let n={};for(let r in t)(!(r in nu)||nu[r]<=e)&&(n[r]=t[r]);return n}function c4(t,e,n,r){let i=0;for(;i=0;c-=1){let d=t[c][r];if(typeof d=="object"&&d)i.unshift(d);else if(d!==void 0){n[r]=d;break}}i.length&&(n[r]=gm(i))}}for(let r=t.length-1;r>=0;r-=1){let i=t[r];for(let c in i)c in n||(n[c]=i[c])}return n}function Rr(t,e){let n={};for(let r in t)e(t[r],r)&&(n[r]=t[r]);return n}function Va(t,e){let n={};for(let r in t)n[r]=e(t[r],r);return n}function Uj(t){let e={};for(let n of t)e[n]=!0;return e}function mm(t){let e=[];for(let n in t)e.push(t[n]);return e}function ra(t,e){if(t===e)return!0;for(let n in t)if(su.call(t,n)&&!(n in e))return!1;for(let n in e)if(su.call(e,n)&&t[n]!==e[n])return!1;return!0}const h4=/^on[A-Z]/;function p4(t,e){const n=g4(t,e);for(let r of n)if(!h4.test(r))return!1;return!0}function g4(t,e){let n=[];for(let r in t)su.call(t,r)&&(r in e||n.push(r));for(let r in e)su.call(e,r)&&t[r]!==e[r]&&n.push(r);return n}function Tp(t,e,n={}){if(t===e)return!0;for(let r in e)if(!(r in t&&m4(t[r],e[r],n[r])))return!1;for(let r in t)if(!(r in e))return!1;return!0}function m4(t,e,n){return t===e||n===!0?!0:n?n(t,e):!1}function x4(t,e=0,n,r=1){let i=[];n==null&&(n=Object.keys(t).length);for(let c=e;c{this.props.value!==d.value&&c.forEach(f=>{f.context=d.value,f.forceUpdate()})},this.sub=d=>{c.push(d);let f=d.componentWillUnmount;d.componentWillUnmount=()=>{c.splice(c.indexOf(d),1),f&&f.call(d)}}}return i},e}class A4{constructor(e,n,r,i){this.execFunc=e,this.emitter=n,this.scrollTime=r,this.scrollTimeReset=i,this.handleScrollRequest=c=>{this.queuedRequest=Object.assign({},this.queuedRequest||{},c),this.drain()},n.on("_scrollRequest",this.handleScrollRequest),this.fireInitialScroll()}detach(){this.emitter.off("_scrollRequest",this.handleScrollRequest)}update(e){e&&this.scrollTimeReset?this.fireInitialScroll():this.drain()}fireInitialScroll(){this.handleScrollRequest({time:this.scrollTime})}drain(){this.queuedRequest&&this.execFunc(this.queuedRequest)&&(this.queuedRequest=null)}}const Qa=Hj({});function w4(t,e,n,r,i,c,d,f,h,p,b,y,x,v){return{dateEnv:i,nowManager:c,options:n,pluginHooks:f,emitter:b,dispatch:h,getCurrentData:p,calendarApi:y,viewSpec:t,viewApi:e,dateProfileGenerator:r,theme:d,isRtl:n.direction==="rtl",addResizeHandler(N){b.on("_resize",N)},removeResizeHandler(N){b.off("_resize",N)},createScrollResponder(N){return new A4(N,b,Ve(n.scrollTime),n.scrollTimeReset)},registerInteractiveComponent:x,unregisterInteractiveComponent:v}}class Ir extends On{shouldComponentUpdate(e,n){return!Tp(this.props,e,this.propEquality)||!Tp(this.state,n,this.stateEquality)}safeSetState(e){Tp(this.state,Object.assign(Object.assign({},this.state),e),this.stateEquality)||this.setState(e)}}Ir.addPropsEquality=C4;Ir.addStateEquality=D4;Ir.contextType=Qa;Ir.prototype.propEquality={};Ir.prototype.stateEquality={};class et extends Ir{}et.contextType=Qa;function C4(t){let e=Object.create(this.prototype.propEquality);Object.assign(e,t),this.prototype.propEquality=e}function D4(t){let e=Object.create(this.prototype.stateEquality);Object.assign(e,t),this.prototype.stateEquality=e}function ga(t,e){typeof t=="function"?t(e):t&&(t.current=e)}class xm extends et{constructor(){super(...arguments),this.id=_r(),this.queuedDomNodes=[],this.currentDomNodes=[],this.handleEl=e=>{const{options:n}=this.context,{generatorName:r}=this.props;(!n.customRenderingReplaces||!sg(r,n))&&this.updateElRef(e)},this.updateElRef=e=>{this.props.elRef&&ga(this.props.elRef,e)}}render(){const{props:e,context:n}=this,{options:r}=n,{customGenerator:i,defaultGenerator:c,renderProps:d}=e,f=Gj(e,[],this.handleEl);let h=!1,p,b=[],y;if(i!=null){const x=typeof i=="function"?i(d,_):i;if(x===!0)h=!0;else{const v=x&&typeof x=="object";v&&"html"in x?f.dangerouslySetInnerHTML={__html:x.html}:v&&"domNodes"in x?b=Array.prototype.slice.call(x.domNodes):(v?fj(x):typeof x!="function")?p=x:y=x}}else h=!sg(e.generatorName,r);return h&&c&&(p=c(d)),this.queuedDomNodes=b,this.currentGeneratorMeta=y,_(e.elTag,f,p)}componentDidMount(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentDidUpdate(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentWillUnmount(){this.triggerCustomRendering(!1)}triggerCustomRendering(e){var n;const{props:r,context:i}=this,{handleCustomRendering:c,customRenderingMetaMap:d}=i.options;if(c){const f=(n=this.currentGeneratorMeta)!==null&&n!==void 0?n:d==null?void 0:d[r.generatorName];f&&c(Object.assign(Object.assign({id:this.id,isActive:e,containerEl:this.base,reportNewContainerEl:this.updateElRef,generatorMeta:f},r),{elClasses:(r.elClasses||[]).filter(O4)}))}}applyQueueudDomNodes(){const{queuedDomNodes:e,currentDomNodes:n}=this,r=this.base;if(!Hs(e,n)){n.forEach(om);for(let i of e)r.appendChild(i);this.currentDomNodes=e}}}xm.addPropsEquality({elClasses:Hs,elStyle:ra,elAttrs:p4,renderProps:ra});function sg(t,e){var n;return!!(e.handleCustomRendering&&t&&(!((n=e.customRenderingMetaMap)===null||n===void 0)&&n[t]))}function Gj(t,e,n){const r=Object.assign(Object.assign({},t.elAttrs),{ref:n});return(t.elClasses||e)&&(r.className=(t.elClasses||[]).concat(e||[]).concat(r.className||[]).filter(Boolean).join(" ")),t.elStyle&&(r.style=t.elStyle),r}function O4(t){return!!t}const Fj=Hj(0);class kn extends On{constructor(){super(...arguments),this.InnerContent=R4.bind(void 0,this),this.handleEl=e=>{this.el=e,this.props.elRef&&(ga(this.props.elRef,e),e&&this.didMountMisfire&&this.componentDidMount())}}render(){const{props:e}=this,n=T4(e.classNameGenerator,e.renderProps);if(e.children){const r=Gj(e,n,this.handleEl),i=e.children(this.InnerContent,e.renderProps,r);return e.elTag?_(e.elTag,r,i):i}else return _(xm,Object.assign(Object.assign({},e),{elRef:this.handleEl,elTag:e.elTag||"div",elClasses:(e.elClasses||[]).concat(n),renderId:this.context}))}componentDidMount(){var e,n;this.el?(n=(e=this.props).didMount)===null||n===void 0||n.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.el})):this.didMountMisfire=!0}componentWillUnmount(){var e,n;(n=(e=this.props).willUnmount)===null||n===void 0||n.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.el}))}}kn.contextType=Fj;function R4(t,e){const n=t.props;return _(xm,Object.assign({renderProps:n.renderProps,generatorName:n.generatorName,customGenerator:n.customGenerator,defaultGenerator:n.defaultGenerator,renderId:t.context},e))}function T4(t,e){const n=typeof t=="function"?t(e):t||[];return typeof n=="string"?[n]:n}class lu extends et{render(){let{props:e,context:n}=this,{options:r}=n,i={view:n.viewApi};return _(kn,{elRef:e.elRef,elTag:e.elTag||"div",elAttrs:e.elAttrs,elClasses:[...Vj(e.viewSpec),...e.elClasses||[]],elStyle:e.elStyle,renderProps:i,classNameGenerator:r.viewClassNames,generatorName:void 0,didMount:r.viewDidMount,willUnmount:r.viewWillUnmount},()=>e.children)}}function Vj(t){return[`fc-${t.type}-view`,"fc-view"]}function k4(t,e){let n=null,r=null;return t.start&&(n=e.createMarker(t.start)),t.end&&(r=e.createMarker(t.end)),!n&&!r||n&&r&&rr&&n.push({start:r,end:c.start}),c.end>r&&(r=c.end);return re.start)&&(t.start===null||e.end===null||t.start=t.start)&&(t.end===null||e.end!==null&&e.end<=t.end)}function Ha(t,e){return(t.start===null||e>=t.start)&&(t.end===null||e=e.end?new Date(e.end.valueOf()-1):t}function qj(t){let e=Math.floor(Mr(t.start,t.end))||1,n=ct(t.start),r=It(n,e);return{start:n,end:r}}function $j(t,e=Ve(0)){let n=null,r=null;if(t.end){r=ct(t.end);let i=t.end.valueOf()-r.valueOf();i&&i>=na(e)&&(r=It(r,1))}return t.start&&(n=ct(t.start),r&&r<=n&&(r=It(n,1))),{start:n,end:r}}function El(t,e,n,r){return r==="year"?Ve(n.diffWholeYears(t,e),"year"):r==="month"?Ve(n.diffWholeMonths(t,e),"month"):GI(t,e)}class Yj{constructor(e){this.props=e,this.initHiddenDays()}buildPrev(e,n,r){let{dateEnv:i}=this.props,c=i.subtract(i.startOf(n,e.currentRangeUnit),e.dateIncrement);return this.build(c,-1,r)}buildNext(e,n,r){let{dateEnv:i}=this.props,c=i.add(i.startOf(n,e.currentRangeUnit),e.dateIncrement);return this.build(c,1,r)}build(e,n,r=!0){let{props:i}=this,c,d,f,h,p,b;return c=this.buildValidRange(),c=this.trimHiddenDays(c),r&&(e=I4(e,c)),d=this.buildCurrentRangeInfo(e,n),f=/^(year|month|week|day)$/.test(d.unit),h=this.buildRenderRange(this.trimHiddenDays(d.range),d.unit,f),h=this.trimHiddenDays(h),p=h,i.showNonCurrentDates||(p=Tr(p,d.range)),p=this.adjustActiveRange(p),p=Tr(p,c),b=bm(d.range,c),Ha(h,e)||(e=h.start),{currentDate:e,validRange:c,currentRange:d.range,currentRangeUnit:d.unit,isRangeAllDay:f,activeRange:p,renderRange:h,slotMinTime:i.slotMinTime,slotMaxTime:i.slotMaxTime,isValid:b,dateIncrement:this.buildDateIncrement(d.duration)}}buildValidRange(){let e=this.props.validRangeInput,n=typeof e=="function"?e.call(this.props.calendarApi,this.props.dateEnv.toDate(this.props.nowManager.getDateMarker())):e;return this.refineRange(n)||{start:null,end:null}}buildCurrentRangeInfo(e,n){let{props:r}=this,i=null,c=null,d=null,f;return r.duration?(i=r.duration,c=r.durationUnit,d=this.buildRangeFromDuration(e,n,i,c)):(f=this.props.dayCount)?(c="day",d=this.buildRangeFromDayCount(e,n,f)):(d=this.buildCustomVisibleRange(e))?c=r.dateEnv.greatestWholeUnit(d.start,d.end).unit:(i=this.getFallbackDuration(),c=ag(i).unit,d=this.buildRangeFromDuration(e,n,i,c)),{duration:i,unit:c,range:d}}getFallbackDuration(){return Ve({day:1})}adjustActiveRange(e){let{dateEnv:n,usesMinMaxTime:r,slotMinTime:i,slotMaxTime:c}=this.props,{start:d,end:f}=e;return r&&(Al(i)<0&&(d=ct(d),d=n.add(d,i)),Al(c)>1&&(f=ct(f),f=It(f,-1),f=n.add(f,c))),{start:d,end:f}}buildRangeFromDuration(e,n,r,i){let{dateEnv:c,dateAlignment:d}=this.props,f,h,p;if(!d){let{dateIncrement:y}=this.props;y&&na(y)!d[h.defId].recurringDef);for(let h in d){let p=d[h];if(p.recurringDef){let{duration:b}=p.recurringDef;b||(b=p.allDay?c.defaultAllDayEventDuration:c.defaultTimedEventDuration);let y=z4(p,b,e,r,i.recurringTypes);for(let x of y){let v=ym(h,{start:x,end:r.add(x,b)});f[v.instanceId]=v}}}return{defs:d,instances:f}}function z4(t,e,n,r,i){let d=i[t.recurringDef.typeId].expand(t.recurringDef.typeData,{start:r.subtract(n.start,e),end:n.end},r);return t.allDay&&(d=d.map(ct)),d}const Md={id:String,groupId:String,title:String,url:String,interactive:Boolean},Qj={start:Z,end:Z,date:Z,allDay:Boolean},P4=Object.assign(Object.assign(Object.assign({},Md),Qj),{extendedProps:Z});function Wj(t,e,n,r,i=vm(n),c,d){let{refined:f,extra:h}=Xj(t,n,i),p=B4(e,n),b=L4(f,p,n.dateEnv,n.pluginHooks.recurringTypes);if(b){let x=rg(f,h,e?e.sourceId:"",b.allDay,!!b.duration,n,c);return x.recurringDef={typeId:b.typeId,typeData:b.typeData,duration:b.duration},{def:x,instance:null}}let y=U4(f,p,n,r);if(y){let x=rg(f,h,e?e.sourceId:"",y.allDay,y.hasEnd,n,c),v=ym(x.defId,y.range,y.forcedStartTzo,y.forcedEndTzo);return d&&x.publicId&&d[x.publicId]&&(v.instanceId=d[x.publicId]),{def:x,instance:v}}return null}function Xj(t,e,n=vm(e)){return pm(t,n)}function vm(t){return Object.assign(Object.assign(Object.assign({},iu),P4),t.pluginHooks.eventRefiners)}function rg(t,e,n,r,i,c,d){let f={title:t.title||"",groupId:t.groupId||"",publicId:t.id||"",url:t.url||"",recurringDef:null,defId:(d&&t.id?d[t.id]:"")||_r(),sourceId:n,allDay:r,hasEnd:i,interactive:t.interactive,ui:ou(t,c),extendedProps:Object.assign(Object.assign({},t.extendedProps||{}),e)};for(let h of c.pluginHooks.eventDefMemberAdders)Object.assign(f,h(t));return Object.freeze(f.ui.classNames),Object.freeze(f.extendedProps),f}function U4(t,e,n,r){let{allDay:i}=t,c,d=null,f=!1,h,p=null,b=t.start!=null?t.start:t.date;if(c=n.dateEnv.createMarkerMeta(b),c)d=c.marker;else if(!r)return null;return t.end!=null&&(h=n.dateEnv.createMarkerMeta(t.end)),i==null&&(e!=null?i=e:i=(!c||c.isTimeUnspecified)&&(!h||h.isTimeUnspecified)),i&&d&&(d=ct(d)),h&&(p=h.marker,i&&(p=ct(p)),d&&p<=d&&(p=null)),p?f=!0:r||(f=n.options.forceEventDuration||!1,p=n.dateEnv.add(d,i?n.options.defaultAllDayEventDuration:n.options.defaultTimedEventDuration)),{allDay:i,hasEnd:f,range:{start:d,end:p},forcedStartTzo:c?c.forcedTzo:null,forcedEndTzo:h?h.forcedTzo:null}}function B4(t,e){let n=null;return t&&(n=t.defaultAllDay),n==null&&(n=e.options.defaultAllDay),n}function Ao(t,e,n,r,i,c){let d=Rn(),f=vm(n);for(let h of t){let p=Wj(h,e,n,r,f,i,c);p&&lg(p,d)}return d}function lg(t,e=Rn()){return e.defs[t.def.defId]=t.def,t.instance&&(e.instances[t.instance.instanceId]=t.instance),e}function Nm(t,e){let n=t.instances[e];if(n){let r=t.defs[n.defId],i=ku(t,c=>H4(r,c));return i.defs[r.defId]=r,i.instances[n.instanceId]=n,i}return Rn()}function H4(t,e){return!!(t.groupId&&t.groupId===e.groupId)}function Rn(){return{defs:{},instances:{}}}function Em(t,e){return{defs:Object.assign(Object.assign({},t.defs),e.defs),instances:Object.assign(Object.assign({},t.instances),e.instances)}}function ku(t,e){let n=Rr(t.defs,e),r=Rr(t.instances,i=>n[i.defId]);return{defs:n,instances:r}}function G4(t,e){let{defs:n,instances:r}=t,i={},c={};for(let d in n)e.defs[d]||(i[d]=n[d]);for(let d in r)!e.instances[d]&&i[r[d].defId]&&(c[d]=r[d]);return{defs:i,instances:c}}function F4(t,e){return Array.isArray(t)?Ao(t,null,e,!0):typeof t=="object"&&t?Ao([t],null,e,!0):t!=null?String(t):null}function _1(t){return Array.isArray(t)?t:typeof t=="string"?t.split(/\s+/):[]}const iu={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:Z,overlap:Z,allow:Z,className:_1,classNames:_1,color:String,backgroundColor:String,borderColor:String,textColor:String},V4={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function ou(t,e){let n=F4(t.constraint,e);return{display:t.display||null,startEditable:t.startEditable!=null?t.startEditable:t.editable,durationEditable:t.durationEditable!=null?t.durationEditable:t.editable,constraints:n!=null?[n]:[],overlap:t.overlap!=null?t.overlap:null,allows:t.allow!=null?[t.allow]:[],backgroundColor:t.backgroundColor||t.color||"",borderColor:t.borderColor||t.color||"",textColor:t.textColor||"",classNames:(t.className||[]).concat(t.classNames||[])}}function Zj(t){return t.reduce(q4,V4)}function q4(t,e){return{display:e.display!=null?e.display:t.display,startEditable:e.startEditable!=null?e.startEditable:t.startEditable,durationEditable:e.durationEditable!=null?e.durationEditable:t.durationEditable,constraints:t.constraints.concat(e.constraints),overlap:typeof e.overlap=="boolean"?e.overlap:t.overlap,allows:t.allows.concat(e.allows),backgroundColor:e.backgroundColor||t.backgroundColor,borderColor:e.borderColor||t.borderColor,textColor:e.textColor||t.textColor,classNames:t.classNames.concat(e.classNames)}}const $4={id:String,defaultAllDay:Boolean,url:String,format:String,events:Z,eventDataTransform:Z,success:Z,failure:Z};function Kj(t,e,n=Jj(e)){let r;if(typeof t=="string"?r={url:t}:typeof t=="function"||Array.isArray(t)?r={events:t}:typeof t=="object"&&t&&(r=t),r){let{refined:i,extra:c}=pm(r,n),d=Y4(i,e);if(d)return{_raw:t,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:i.defaultAllDay,eventDataTransform:i.eventDataTransform,success:i.success,failure:i.failure,publicId:i.id||"",sourceId:_r(),sourceDefId:d.sourceDefId,meta:d.meta,ui:ou(i,e),extendedProps:c}}return null}function Jj(t){return Object.assign(Object.assign(Object.assign({},iu),$4),t.pluginHooks.eventSourceRefiners)}function Y4(t,e){let n=e.pluginHooks.eventSourceDefs;for(let r=n.length-1;r>=0;r-=1){let c=n[r].parseMeta(t);if(c)return{sourceDefId:r,meta:c}}return null}function Q4(t,e,n,r,i){switch(e.type){case"RECEIVE_EVENTS":return W4(t,n[e.sourceId],e.fetchId,e.fetchRange,e.rawEvents,i);case"RESET_RAW_EVENTS":return X4(t,n[e.sourceId],e.rawEvents,r.activeRange,i);case"ADD_EVENTS":return Z4(t,e.eventStore,r?r.activeRange:null,i);case"RESET_EVENTS":return e.eventStore;case"MERGE_EVENTS":return Em(t,e.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return r?kr(t,r.activeRange,i):t;case"REMOVE_EVENTS":return G4(t,e.eventStore);case"REMOVE_EVENT_SOURCE":return tS(t,e.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return ku(t,c=>!c.sourceId);case"REMOVE_ALL_EVENTS":return Rn();default:return t}}function W4(t,e,n,r,i,c){if(e&&n===e.latestFetchId){let d=Ao(eS(i,e,c),e,c);return r&&(d=kr(d,r,c)),Em(tS(t,e.sourceId),d)}return t}function X4(t,e,n,r,i){const{defIdMap:c,instanceIdMap:d}=J4(t);let f=Ao(eS(n,e,i),e,i,!1,c,d);return kr(f,r,i)}function eS(t,e,n){let r=n.options.eventDataTransform,i=e?e.eventDataTransform:null;return i&&(t=M1(t,i)),r&&(t=M1(t,r)),t}function M1(t,e){let n;if(!e)n=t;else{n=[];for(let r of t){let i=e(r);i?n.push(i):i==null&&n.push(r)}}return n}function Z4(t,e,n,r){return n&&(e=kr(e,n,r)),Em(t,e)}function I1(t,e,n){let{defs:r}=t,i=Va(t.instances,c=>r[c.defId].allDay?c:Object.assign(Object.assign({},c),{range:{start:n.createMarker(e.toDate(c.range.start,c.forcedStartTzo)),end:n.createMarker(e.toDate(c.range.end,c.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:c.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:c.forcedEndTzo}));return{defs:r,instances:i}}function tS(t,e){return ku(t,n=>n.sourceId!==e)}function K4(t,e){return{defs:t.defs,instances:Rr(t.instances,n=>!e[n.instanceId])}}function J4(t){const{defs:e,instances:n}=t,r={},i={};for(let c in e){const d=e[c],{publicId:f}=d;f&&(r[f]=c)}for(let c in n){const d=n[c],f=e[d.defId],{publicId:h}=f;h&&(i[h]=c)}return{defIdMap:r,instanceIdMap:i}}class _u{constructor(){this.handlers={},this.thisContext=null}setThisContext(e){this.thisContext=e}setOptions(e){this.options=e}on(e,n){e3(this.handlers,e,n)}off(e,n){t3(this.handlers,e,n)}trigger(e,...n){let r=this.handlers[e]||[],i=this.options&&this.options[e],c=[].concat(i||[],r);for(let d of c)d.apply(this.thisContext,n)}hasHandlers(e){return!!(this.handlers[e]&&this.handlers[e].length||this.options&&this.options[e])}}function e3(t,e,n){(t[e]||(t[e]=[])).push(n)}function t3(t,e,n){n?t[e]&&(t[e]=t[e].filter(r=>r!==n)):delete t[e]}const n3={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function a3(t,e){return Ao(s3(t),null,e)}function s3(t){let e;return t===!0?e=[{}]:Array.isArray(t)?e=t.filter(n=>n.daysOfWeek):typeof t=="object"&&t?e=[t]:e=[],e=e.map(n=>Object.assign(Object.assign({},n3),n)),e}function nS(t,e,n){n.emitter.trigger("select",Object.assign(Object.assign({},jm(t,n)),{jsEvent:e?e.origEvent:null,view:n.viewApi||n.calendarApi.view}))}function r3(t,e){e.emitter.trigger("unselect",{jsEvent:t?t.origEvent:null,view:e.viewApi||e.calendarApi.view})}function jm(t,e){let n={};for(let r of e.pluginHooks.dateSpanTransforms)Object.assign(n,r(t,e));return Object.assign(n,y3(t,e.dateEnv)),n}function L1(t,e,n){let{dateEnv:r,options:i}=n,c=e;return t?(c=ct(c),c=r.add(c,i.defaultAllDayEventDuration)):c=r.add(c,i.defaultTimedEventDuration),c}function Sm(t,e,n,r){let i=cu(t.defs,e),c=Rn();for(let d in t.defs){let f=t.defs[d];c.defs[d]=l3(f,i[d],n,r)}for(let d in t.instances){let f=t.instances[d],h=c.defs[f.defId];c.instances[d]=i3(f,h,i[f.defId],n,r)}return c}function l3(t,e,n,r){let i=n.standardProps||{};i.hasEnd==null&&e.durationEditable&&(n.startDelta||n.endDelta)&&(i.hasEnd=!0);let c=Object.assign(Object.assign(Object.assign({},t),i),{ui:Object.assign(Object.assign({},t.ui),i.ui)});n.extendedProps&&(c.extendedProps=Object.assign(Object.assign({},c.extendedProps),n.extendedProps));for(let d of r.pluginHooks.eventDefMutationAppliers)d(c,n,r);return!c.hasEnd&&r.options.forceEventDuration&&(c.hasEnd=!0),c}function i3(t,e,n,r,i){let{dateEnv:c}=i,d=r.standardProps&&r.standardProps.allDay===!0,f=r.standardProps&&r.standardProps.hasEnd===!1,h=Object.assign({},t);return d&&(h.range=qj(h.range)),r.datesDelta&&n.startEditable&&(h.range={start:c.add(h.range.start,r.datesDelta),end:c.add(h.range.end,r.datesDelta)}),r.startDelta&&n.durationEditable&&(h.range={start:c.add(h.range.start,r.startDelta),end:h.range.end}),r.endDelta&&n.durationEditable&&(h.range={start:h.range.start,end:c.add(h.range.end,r.endDelta)}),f&&(h.range={start:h.range.start,end:L1(e.allDay,h.range.start,i)}),e.allDay&&(h.range={start:ct(h.range.start),end:ct(h.range.end)}),h.range.endsS(n,e))}function sS(t,e){let n=[];return e[""]&&n.push(e[""]),e[t.defId]&&n.push(e[t.defId]),n.push(t.ui),Zj(n)}function rS(t,e){let n=t.map(c3);return n.sort((r,i)=>AI(r,i,e)),n.map(r=>r._seg)}function c3(t){let{eventRange:e}=t,n=e.def,r=e.instance?e.instance.range:e.range,i=r.start?r.start.valueOf():0,c=r.end?r.end.valueOf():0;return Object.assign(Object.assign(Object.assign({},n.extendedProps),n),{id:n.publicId,start:i,end:c,duration:c-i,allDay:Number(n.allDay),_seg:t})}function d3(t,e){let{pluginHooks:n}=e,r=n.isDraggableTransformers,{def:i,ui:c}=t.eventRange,d=c.startEditable;for(let f of r)d=f(d,i,c,e);return d}function u3(t,e){return t.isStart&&t.eventRange.ui.durationEditable&&e.options.eventResizableFromStart}function f3(t,e){return t.isEnd&&t.eventRange.ui.durationEditable}function lS(t,e,n,r,i,c,d){let{dateEnv:f,options:h}=n,{displayEventTime:p,displayEventEnd:b}=h,y=t.eventRange.def,x=t.eventRange.instance;p==null&&(p=r!==!1),b==null&&(b=i!==!1);let v=x.range.start,N=x.range.end,j=t.start||t.eventRange.range.start,S=t.end||t.eventRange.range.end,R=ct(v).valueOf()===ct(j).valueOf(),w=ct(Gs(N,-1)).valueOf()===ct(Gs(S,-1)).valueOf();return p&&!y.allDay&&(R||w)?(j=R?v:j,S=w?N:S,b&&y.hasEnd?f.formatRange(j,S,e,{forcedStartTzo:x.forcedStartTzo,forcedEndTzo:x.forcedEndTzo}):f.format(j,e,{forcedTzo:x.forcedStartTzo})):""}function zs(t,e,n){let r=t.eventRange.range;return{isPast:r.end<=(n||e.start),isFuture:r.start>=(n||e.end),isToday:e&&Ha(e,r.start)}}function h3(t){let e=["fc-event"];return t.isMirror&&e.push("fc-event-mirror"),t.isDraggable&&e.push("fc-event-draggable"),(t.isStartResizable||t.isEndResizable)&&e.push("fc-event-resizable"),t.isDragging&&e.push("fc-event-dragging"),t.isResizing&&e.push("fc-event-resizing"),t.isSelected&&e.push("fc-event-selected"),t.isStart&&e.push("fc-event-start"),t.isEnd&&e.push("fc-event-end"),t.isPast&&e.push("fc-event-past"),t.isToday&&e.push("fc-event-today"),t.isFuture&&e.push("fc-event-future"),e}function iS(t){return t.instance?t.instance.instanceId:`${t.def.defId}:${t.range.start.toISOString()}`}function oS(t,e){let{def:n,instance:r}=t.eventRange,{url:i}=n;if(i)return{href:i};let{emitter:c,options:d}=e,{eventInteractive:f}=d;return f==null&&(f=n.interactive,f==null&&(f=!!c.hasHandlers("eventClick"))),f?Lj(h=>{c.trigger("eventClick",{el:h.target,event:new pt(e,n,r),jsEvent:h,view:e.viewApi})}):{}}const p3={start:Z,end:Z,allDay:Boolean};function g3(t,e,n){let r=m3(t,e),{range:i}=r;if(!i.start)return null;if(!i.end){if(n==null)return null;i.end=e.add(i.start,n)}return r}function m3(t,e){let{refined:n,extra:r}=pm(t,p3),i=n.start?e.createMarkerMeta(n.start):null,c=n.end?e.createMarkerMeta(n.end):null,{allDay:d}=n;return d==null&&(d=i&&i.isTimeUnspecified&&(!c||c.isTimeUnspecified)),Object.assign({range:{start:i?i.marker:null,end:c?c.marker:null},allDay:d},r)}function x3(t,e){return M4(t.range,e.range)&&t.allDay===e.allDay&&b3(t,e)}function b3(t,e){for(let n in e)if(n!=="range"&&n!=="allDay"&&t[n]!==e[n])return!1;for(let n in t)if(!(n in e))return!1;return!0}function y3(t,e){return Object.assign(Object.assign({},dS(t.range,e,t.allDay)),{allDay:t.allDay})}function cS(t,e,n){return Object.assign(Object.assign({},dS(t,e,n)),{timeZone:e.timeZone})}function dS(t,e,n){return{start:e.toDate(t.start),end:e.toDate(t.end),startStr:e.formatIso(t.start,{omitTime:n}),endStr:e.formatIso(t.end,{omitTime:n})}}function v3(t,e,n){let r=Xj({editable:!1},n),i=rg(r.refined,r.extra,"",t.allDay,!0,n);return{def:i,ui:sS(i,e),instance:ym(i.defId,t.range),range:t.range,isStart:!0,isEnd:!0}}function N3(t,e,n){let r=!1,i=function(f){r||(r=!0,e(f))},c=function(f){r||(r=!0,n(f))},d=t(i,c);d&&typeof d.then=="function"&&d.then(i,c)}class U1 extends Error{constructor(e,n){super(e),this.response=n}}function E3(t,e,n){t=t.toUpperCase();const r={method:t};return t==="GET"?e+=(e.indexOf("?")===-1?"?":"&")+new URLSearchParams(n):(r.body=new URLSearchParams(n),r.headers={"Content-Type":"application/x-www-form-urlencoded"}),fetch(e,r).then(i=>{if(i.ok)return i.json().then(c=>[c,i],()=>{throw new U1("Failure parsing JSON",i)});throw new U1("Request failed",i)})}let kp;function uS(){return kp==null&&(kp=j3()),kp}function j3(){if(typeof document>"u")return!0;let t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.innerHTML="
",t.querySelector("table").style.height="100px",t.querySelector("div").style.height="100%",document.body.appendChild(t);let n=t.querySelector("div").offsetHeight>0;return document.body.removeChild(t),n}class S3 extends et{constructor(){super(...arguments),this.state={forPrint:!1},this.handleBeforePrint=()=>{ru(()=>{this.setState({forPrint:!0})})},this.handleAfterPrint=()=>{ru(()=>{this.setState({forPrint:!1})})}}render(){let{props:e}=this,{options:n}=e,{forPrint:r}=this.state,i=r||n.height==="auto"||n.contentHeight==="auto",c=!i&&n.height!=null?n.height:"",d=["fc",r?"fc-media-print":"fc-media-screen",`fc-direction-${n.direction}`,e.theme.getClass("root")];return uS()||d.push("fc-liquid-hack"),e.children(d,c,i,r)}componentDidMount(){let{emitter:e}=this.props;e.on("_beforeprint",this.handleBeforePrint),e.on("_afterprint",this.handleAfterPrint)}componentWillUnmount(){let{emitter:e}=this.props;e.off("_beforeprint",this.handleBeforePrint),e.off("_afterprint",this.handleAfterPrint)}}class ni{constructor(e){this.component=e.component,this.isHitComboAllowed=e.isHitComboAllowed||null}destroy(){}}function A3(t,e){return{component:t,el:e.el,useEventCenter:e.useEventCenter!=null?e.useEventCenter:!0,isHitComboAllowed:e.isHitComboAllowed||null}}function Am(t){return{[t.component.uid]:t}}const ig={};class ai extends On{constructor(e,n){super(e,n),this.handleRefresh=()=>{let r=this.computeTiming();r.state.nowDate.valueOf()!==this.state.nowDate.valueOf()&&this.setState(r.state),this.clearTimeout(),this.setTimeout(r.waitMs)},this.handleVisibilityChange=()=>{document.hidden||this.handleRefresh()},this.state=this.computeTiming().state}render(){let{props:e,state:n}=this;return e.children(n.nowDate,n.todayRange)}componentDidMount(){this.setTimeout(),this.context.nowManager.addResetListener(this.handleRefresh),document.addEventListener("visibilitychange",this.handleVisibilityChange)}componentDidUpdate(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())}componentWillUnmount(){this.clearTimeout(),this.context.nowManager.removeResetListener(this.handleRefresh),document.removeEventListener("visibilitychange",this.handleVisibilityChange)}computeTiming(){let{props:e,context:n}=this,r=n.nowManager.getDateMarker(),{nowIndicatorSnap:i}=n.options;i==="auto"&&(i=/year|month|week|day/.test(e.unit)||(e.unitValue||1)===1);let c,d;return i?(c=n.dateEnv.startOf(r,e.unit),d=n.dateEnv.add(c,Ve(1,e.unit)).valueOf()-r.valueOf()):(c=r,d=1e3*60),d=Math.min(1e3*60*60*24,d),{state:{nowDate:c,todayRange:w3(c)},waitMs:d}}setTimeout(e=this.computeTiming().waitMs){this.timeoutId=setTimeout(()=>{const n=this.computeTiming();this.setState(n.state,()=>{this.setTimeout(n.waitMs)})},e)}clearTimeout(){this.timeoutId&&clearTimeout(this.timeoutId)}}ai.contextType=Qa;function w3(t){let e=ct(t),n=It(e,1);return{start:e,end:n}}class C3{getCurrentData(){return this.currentDataManager.getCurrentData()}dispatch(e){this.currentDataManager.dispatch(e)}get view(){return this.getCurrentData().viewApi}batchRendering(e){e()}updateSize(){this.trigger("_resize",!0)}setOption(e,n){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:n})}getOption(e){return this.currentDataManager.currentCalendarOptionsInput[e]}getAvailableLocaleCodes(){return Object.keys(this.getCurrentData().availableRawLocales)}on(e,n){let{currentDataManager:r}=this;r.currentCalendarOptionsRefiners[e]?r.emitter.on(e,n):console.warn(`Unknown listener name '${e}'`)}off(e,n){this.currentDataManager.emitter.off(e,n)}trigger(e,...n){this.currentDataManager.emitter.trigger(e,...n)}changeView(e,n){this.batchRendering(()=>{if(this.unselect(),n)if(n.start&&n.end)this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e}),this.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:n});else{let{dateEnv:r}=this.getCurrentData();this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e,dateMarker:r.createMarker(n)})}else this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e})})}zoomTo(e,n){let r=this.getCurrentData(),i;n=n||"day",i=r.viewSpecs[n]||this.getUnitViewSpec(n),this.unselect(),i?this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:i.type,dateMarker:e}):this.dispatch({type:"CHANGE_DATE",dateMarker:e})}getUnitViewSpec(e){let{viewSpecs:n,toolbarConfig:r}=this.getCurrentData(),i=[].concat(r.header?r.header.viewsWithButtons:[],r.footer?r.footer.viewsWithButtons:[]),c,d;for(let f in n)i.push(f);for(c=0;c{this.dispatch({type:"REMOVE_EVENTS",eventStore:aS(e)})}})}getEventById(e){let n=this.getCurrentData(),{defs:r,instances:i}=n.eventStore;e=String(e);for(let c in r){let d=r[c];if(d.publicId===e){if(d.recurringDef)return new pt(n,d,null);for(let f in i){let h=i[f];if(h.defId===d.defId)return new pt(n,d,h)}}}return null}getEvents(){let e=this.getCurrentData();return wr(e.eventStore,e)}removeAllEvents(){this.dispatch({type:"REMOVE_ALL_EVENTS"})}getEventSources(){let e=this.getCurrentData(),n=e.eventSources,r=[];for(let i in n)r.push(new Nl(e,n[i]));return r}getEventSourceById(e){let n=this.getCurrentData(),r=n.eventSources;e=String(e);for(let i in r)if(r[i].publicId===e)return new Nl(n,r[i]);return null}addEventSource(e){let n=this.getCurrentData();if(e instanceof Nl)return n.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;let r=Kj(e,n);return r?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[r]}),new Nl(n,r)):null}removeAllEventSources(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})}refetchEvents(){this.dispatch({type:"FETCH_EVENT_SOURCES",isRefetch:!0})}scrollToTime(e){let n=Ve(e);n&&this.trigger("_scrollRequest",{time:n})}}function D3(t,e){return t.left>=e.left&&t.left=e.top&&t.topthis.eventUiBuilders[y]||Oe(_3));for(let b in n){let y=n[b],x=d[b]||_p,v=this.eventUiBuilders[b];p[b]={businessHours:y.businessHours||e.businessHours,dateSelection:i[b]||null,eventStore:x,eventUiBases:v(e.eventUiBases[""],y.ui,c[b]),eventSelection:x.instances[e.eventSelection]?e.eventSelection:"",eventDrag:f[b]||null,eventResize:h[b]||null}}return p}_splitDateSpan(e){let n={};if(e){let r=this.getKeysForDateSpan(e);for(let i of r)n[i]=e}return n}_getKeysForEventDefs(e){return Va(e.defs,n=>this.getKeysForEventDef(n))}_splitEventStore(e,n){let{defs:r,instances:i}=e,c={};for(let d in r)for(let f of n[d])c[f]||(c[f]=Rn()),c[f].defs[d]=r[d];for(let d in i){let f=i[d];for(let h of n[f.defId])c[h]&&(c[h].instances[d]=f)}return c}_splitIndividualUi(e,n){let r={};for(let i in e)if(i)for(let c of n[i])r[c]||(r[c]={}),r[c][i]=e[i];return r}_splitInteraction(e){let n={};if(e){let r=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),i=this._getKeysForEventDefs(e.mutatedEvents),c=this._splitEventStore(e.mutatedEvents,i),d=f=>{n[f]||(n[f]={affectedEvents:r[f]||_p,mutatedEvents:c[f]||_p,isEvent:e.isEvent})};for(let f in r)d(f);for(let f in c)d(f)}return n}}function _3(t,e,n){let r=[];t&&r.push(t),e&&r.push(e);let i={"":Zj(r)};return n&&Object.assign(i,n),i}function hS(t,e,n,r){return{dow:t.getUTCDay(),isDisabled:!!(r&&(!r.activeRange||!Ha(r.activeRange,t))),isOther:!!(r&&!Ha(r.currentRange,t)),isToday:!!(e&&Ha(e,t)),isPast:!!(e&&t=e.end)}}function wm(t,e){let n=["fc-day",`fc-day-${zI[t.dow]}`];return t.isDisabled?n.push("fc-day-disabled"):(t.isToday&&(n.push("fc-day-today"),n.push(e.getClass("today"))),t.isPast&&n.push("fc-day-past"),t.isFuture&&n.push("fc-day-future"),t.isOther&&n.push("fc-day-other")),n}const M3=mt({year:"numeric",month:"long",day:"numeric"}),I3=mt({week:"long"});function du(t,e,n="day",r=!0){const{dateEnv:i,options:c,calendarApi:d}=t;let f=i.format(e,n==="week"?I3:M3);if(c.navLinks){let h=i.toDate(e);const p=b=>{let y=n==="day"?c.navLinkDayClick:n==="week"?c.navLinkWeekClick:null;typeof y=="function"?y.call(d,i.toDate(e),b):(typeof y=="string"&&(n=y),d.zoomTo(e,n))};return Object.assign({title:ho(c.navLinkHint,[f,h],f),"data-navlink":""},r?Ij(p):{onClick:p})}return{"aria-label":f}}let Mp=null;function L3(){return Mp===null&&(Mp=z3()),Mp}function z3(){let t=document.createElement("div");fo(t,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),t.innerHTML="
",document.body.appendChild(t);let n=t.firstChild.getBoundingClientRect().left>t.getBoundingClientRect().left;return om(t),n}let Ip;function P3(){return Ip||(Ip=U3()),Ip}function U3(){let t=document.createElement("div");t.style.overflow="scroll",t.style.position="absolute",t.style.top="-9999px",t.style.left="-9999px",document.body.appendChild(t);let e=pS(t);return document.body.removeChild(t),e}function pS(t){return{x:t.offsetHeight-t.clientHeight,y:t.offsetWidth-t.clientWidth}}function B3(t,e=!1){let n=window.getComputedStyle(t),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,c=parseInt(n.borderTopWidth,10)||0,d=parseInt(n.borderBottomWidth,10)||0,f=pS(t),h=f.y-r-i,p=f.x-c-d,b={borderLeft:r,borderRight:i,borderTop:c,borderBottom:d,scrollbarBottom:p,scrollbarLeft:0,scrollbarRight:0};return L3()&&n.direction==="rtl"?b.scrollbarLeft=h:b.scrollbarRight=h,e&&(b.paddingLeft=parseInt(n.paddingLeft,10)||0,b.paddingRight=parseInt(n.paddingRight,10)||0,b.paddingTop=parseInt(n.paddingTop,10)||0,b.paddingBottom=parseInt(n.paddingBottom,10)||0),b}function H3(t,e=!1,n){let r=Cm(t),i=B3(t,e),c={left:r.left+i.borderLeft+i.scrollbarLeft,right:r.right-i.borderRight-i.scrollbarRight,top:r.top+i.borderTop,bottom:r.bottom-i.borderBottom-i.scrollbarBottom};return e&&(c.left+=i.paddingLeft,c.right-=i.paddingRight,c.top+=i.paddingTop,c.bottom-=i.paddingBottom),c}function Cm(t){let e=t.getBoundingClientRect();return{left:e.left+window.scrollX,top:e.top+window.scrollY,right:e.right+window.scrollX,bottom:e.bottom+window.scrollY}}function G3(t){let e=gS(t),n=t.getBoundingClientRect();for(let r of e){let i=fS(n,r.getBoundingClientRect());if(i)n=i;else return null}return n}function gS(t){let e=[];for(;t instanceof HTMLElement;){let n=window.getComputedStyle(t);if(n.position==="fixed")break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&e.push(t),t=t.parentNode}return e}class ql{constructor(e,n,r,i){this.els=n;let c=this.originClientRect=e.getBoundingClientRect();r&&this.buildElHorizontals(c.left),i&&this.buildElVerticals(c.top)}buildElHorizontals(e){let n=[],r=[];for(let i of this.els){let c=i.getBoundingClientRect();n.push(c.left-e),r.push(c.right-e)}this.lefts=n,this.rights=r}buildElVerticals(e){let n=[],r=[];for(let i of this.els){let c=i.getBoundingClientRect();n.push(c.top-e),r.push(c.bottom-e)}this.tops=n,this.bottoms=r}leftToIndex(e){let{lefts:n,rights:r}=this,i=n.length,c;for(c=0;c=n[c]&&e=n[c]&&e0}canScrollHorizontally(){return this.getMaxScrollLeft()>0}canScrollUp(){return this.getScrollTop()>0}canScrollDown(){return this.getScrollTop()0}canScrollRight(){return this.getScrollLeft()n.thickness||1){this.getEntryThickness=e,this.strictOrder=!1,this.allowReslicing=!1,this.maxCoord=-1,this.maxStackCnt=-1,this.levelCoords=[],this.entriesByLevel=[],this.stackCnts={}}addSegs(e){let n=[];for(let r of e)this.insertEntry(r,n);return n}insertEntry(e,n){let r=this.findInsertion(e);this.isInsertionValid(r,e)?this.insertEntryAt(e,r):this.handleInvalidInsertion(r,e,n)}isInsertionValid(e,n){return(this.maxCoord===-1||e.levelCoord+this.getEntryThickness(n)<=this.maxCoord)&&(this.maxStackCnt===-1||e.stackCntc.end&&this.insertEntry({index:e.index,thickness:e.thickness,span:{start:c.end,end:i.end}},r)}insertEntryAt(e,n){let{entriesByLevel:r,levelCoords:i}=this;n.lateral===-1?(Lp(i,n.level,n.levelCoord),Lp(r,n.level,[e])):Lp(r[n.level],n.lateral,e),this.stackCnts[Cr(e)]=n.stackCnt}findInsertion(e){let{levelCoords:n,entriesByLevel:r,strictOrder:i,stackCnts:c}=this,d=n.length,f=0,h=-1,p=-1,b=null,y=0;for(let N=0;N=f+this.getEntryThickness(e))break;let S=r[N],R,w=cg(S,e.span.start,og),D=w[0]+w[1];for(;(R=S[D])&&R.span.startf&&(f=C,b=R,h=N,p=D),C===f&&(y=Math.max(y,c[Cr(R)]+1)),D+=1}}let x=0;if(b)for(x=h+1;xn(t[i-1]))return[i,0];for(;rd)r=c+1;else return[c,1]}return[r,0]}class Y3{constructor(e,n){this.emitter=new _u}destroy(){}setMirrorIsVisible(e){}setMirrorNeedsRevert(e){}setAutoScrollEnabled(e){}}const Rm={};function Q3(t,e){return!t||e>10?mt({weekday:"short"}):e>1?mt({weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}):mt({weekday:"long"})}const xS="fc-col-header-cell";function bS(t){return t.text}class W3 extends et{render(){let{dateEnv:e,options:n,theme:r,viewApi:i}=this.context,{props:c}=this,{date:d,dateProfile:f}=c,h=hS(d,c.todayRange,null,f),p=[xS].concat(wm(h,r)),b=e.format(d,c.dayHeaderFormat),y=!h.isDisabled&&c.colCnt>1?du(this.context,d):{},x=e.toDate(d);e.namedTimeZoneImpl&&(x=Gs(x,36e5));let v=Object.assign(Object.assign(Object.assign({date:x,view:i},c.extraRenderProps),{text:b}),h);return _(kn,{elTag:"th",elClasses:p,elAttrs:Object.assign({role:"columnheader",colSpan:c.colSpan,"data-date":h.isDisabled?void 0:fm(d)},c.extraDataAttrs),renderProps:v,generatorName:"dayHeaderContent",customGenerator:n.dayHeaderContent,defaultGenerator:bS,classNameGenerator:n.dayHeaderClassNames,didMount:n.dayHeaderDidMount,willUnmount:n.dayHeaderWillUnmount},N=>_("div",{className:"fc-scrollgrid-sync-inner"},!h.isDisabled&&_(N,{elTag:"a",elAttrs:y,elClasses:["fc-col-header-cell-cushion",c.isSticky&&"fc-sticky"]})))}}const X3=mt({weekday:"long"});class Z3 extends et{render(){let{props:e}=this,{dateEnv:n,theme:r,viewApi:i,options:c}=this.context,d=It(new Date(2592e5),e.dow),f={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},h=n.format(d,e.dayHeaderFormat),p=Object.assign(Object.assign(Object.assign(Object.assign({date:d},f),{view:i}),e.extraRenderProps),{text:h});return _(kn,{elTag:"th",elClasses:[xS,...wm(f,r),...e.extraClassNames||[]],elAttrs:Object.assign({role:"columnheader",colSpan:e.colSpan},e.extraDataAttrs),renderProps:p,generatorName:"dayHeaderContent",customGenerator:c.dayHeaderContent,defaultGenerator:bS,classNameGenerator:c.dayHeaderClassNames,didMount:c.dayHeaderDidMount,willUnmount:c.dayHeaderWillUnmount},b=>_("div",{className:"fc-scrollgrid-sync-inner"},_(b,{elTag:"a",elClasses:["fc-col-header-cell-cushion",e.isSticky&&"fc-sticky"],elAttrs:{"aria-label":n.format(d,X3)}})))}}class yS extends et{constructor(){super(...arguments),this.createDayHeaderFormatter=Oe(K3)}render(){let{context:e}=this,{dates:n,dateProfile:r,datesRepDistinctDays:i,renderIntro:c}=this.props,d=this.createDayHeaderFormatter(e.options.dayHeaderFormat,i,n.length);return _(ai,{unit:"day"},(f,h)=>_("tr",{role:"row"},c&&c("day"),n.map(p=>i?_(W3,{key:p.toISOString(),date:p,dateProfile:r,todayRange:h,colCnt:n.length,dayHeaderFormat:d}):_(Z3,{key:p.getUTCDay(),dow:p.getUTCDay(),dayHeaderFormat:d}))))}}function K3(t,e,n){return t||Q3(e,n)}class vS{constructor(e,n){let r=e.start,{end:i}=e,c=[],d=[],f=-1;for(;r=n.length?n[n.length-1]+1:n[r]}}class NS{constructor(e,n){let{dates:r}=e,i,c,d;if(n){for(c=r[0].getUTCDay(),i=1;ic.groupId===t)):typeof t=="object"&&t?zp(kr(t,e,i)):[]}function zp(t){let{instances:e}=t,n=[];for(let r in e)n.push(e[r].range);return n}function s6(t,e){for(let n of t)if(Tu(n,e))return!0;return!1}const jd=/^(visible|hidden)$/;class r6 extends et{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,ga(this.props.elRef,e)}}render(){let{props:e}=this,{liquid:n,liquidIsAbsolute:r}=e,i=n&&r,c=["fc-scroller"];return n&&(r?c.push("fc-scroller-liquid-absolute"):c.push("fc-scroller-liquid")),_("div",{ref:this.handleEl,className:c.join(" "),style:{overflowX:e.overflowX,overflowY:e.overflowY,left:i&&-(e.overcomeLeft||0)||"",right:i&&-(e.overcomeRight||0)||"",bottom:i&&-(e.overcomeBottom||0)||"",marginLeft:!i&&-(e.overcomeLeft||0)||"",marginRight:!i&&-(e.overcomeRight||0)||"",marginBottom:!i&&-(e.overcomeBottom||0)||"",maxHeight:e.maxHeight||""}},e.children)}needsXScrolling(){if(jd.test(this.props.overflowX))return!1;let{el:e}=this,n=this.el.getBoundingClientRect().width-this.getYScrollbarWidth(),{children:r}=e;for(let i=0;in)return!0;return!1}needsYScrolling(){if(jd.test(this.props.overflowY))return!1;let{el:e}=this,n=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),{children:r}=e;for(let i=0;in)return!0;return!1}getXScrollbarWidth(){return jd.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight}getYScrollbarWidth(){return jd.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth}}class Ua{constructor(e){this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=(n,r)=>{let{depths:i,currentMap:c}=this,d=!1,f=!1;n!==null?(d=r in c,c[r]=n,i[r]=(i[r]||0)+1,f=!0):(i[r]-=1,i[r]||(delete c[r],delete this.callbackMap[r],d=!0)),this.masterCallback&&(d&&this.masterCallback(null,String(r)),f&&this.masterCallback(n,String(r)))}}createRef(e){let n=this.callbackMap[e];return n||(n=this.callbackMap[e]=r=>{this.handleValue(r,String(e))}),n}collect(e,n,r){return x4(this.currentMap,e,n,r)}getAll(){return mm(this.currentMap)}}function l6(t){let e=gI(t,".fc-scrollgrid-shrink"),n=0;for(let r of e)n=Math.max(n,OI(r));return Math.ceil(n)}function wS(t,e){return t.liquid&&e.liquid}function i6(t,e){return e.maxHeight!=null||wS(t,e)}function o6(t,e,n,r){let{expandRows:i}=n;return typeof e.content=="function"?e.content(n):_("table",{role:"presentation",className:[e.tableClassName,t.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:n.tableMinWidth,width:n.clientWidth,height:i?n.clientHeight:""}},n.tableColGroupNode,_(r?"thead":"tbody",{role:"presentation"},typeof e.rowContent=="function"?e.rowContent(n):e.rowContent))}function c6(t,e){return Hs(t,e,ra)}function d6(t,e){let n=[];for(let r of t){let i=r.span||1;for(let c=0;ce,c6),this.renderMicroColGroup=Oe(d6),this.scrollerRefs=new Ua,this.scrollerElRefs=new Ua(this._handleScrollerEl.bind(this)),this.state={shrinkWidth:null,forceYScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{}},this.handleSizing=()=>{this.safeSetState(Object.assign({shrinkWidth:this.computeShrinkWidth()},this.computeScrollerDims()))}}render(){let{props:e,state:n,context:r}=this,i=e.sections||[],c=this.processCols(e.cols),d=this.renderMicroColGroup(c,n.shrinkWidth),f=h6(e.liquid,r);e.collapsibleWidth&&f.push("fc-scrollgrid-collapsible");let h=i.length,p=0,b,y=[],x=[],v=[];for(;p{}},i);return _(i?"th":"td",{ref:r.elRef,role:"presentation"},_("div",{className:`fc-scroller-harness${b?" fc-scroller-harness-liquid":""}`},_(r6,{ref:this.scrollerRefs.createRef(x),elRef:this.scrollerElRefs.createRef(x),overflowY:y,overflowX:c.liquid?"hidden":"visible",maxHeight:e.maxHeight,liquid:b,liquidIsAbsolute:!0},v)))}_handleScrollerEl(e,n){let r=g6(this.props.sections,n);r&&ga(r.chunk.scrollerElRef,e)}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(){this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}computeShrinkWidth(){return f6(this.props.cols)?l6(this.scrollerElRefs.getAll()):0}computeScrollerDims(){let e=P3(),{scrollerRefs:n,scrollerElRefs:r}=this,i=!1,c={},d={};for(let f in n.currentMap){let h=n.currentMap[f];if(h&&h.needsYScrolling()){i=!0;break}}for(let f of this.props.sections){let h=f.key,p=r.currentMap[h];if(p){let b=p.parentNode;c[h]=Math.floor(b.getBoundingClientRect().width-(i?e.y:0)),d[h]=Math.floor(b.getBoundingClientRect().height)}}return{forceYScrollbars:i,scrollerClientWidths:c,scrollerClientHeights:d}}}Tm.addStateEquality({scrollerClientWidths:ra,scrollerClientHeights:ra});function g6(t,e){for(let n of t)if(n.key===e)return n;return null}class km extends et{constructor(){super(...arguments),this.buildPublicEvent=Oe((e,n,r)=>new pt(e,n,r)),this.handleEl=e=>{this.el=e,ga(this.props.elRef,e),e&&P1(e,this.props.seg)}}render(){const{props:e,context:n}=this,{options:r}=n,{seg:i}=e,{eventRange:c}=i,{ui:d}=c,f={event:this.buildPublicEvent(n,c.def,c.instance),view:n.viewApi,timeText:e.timeText,textColor:d.textColor,backgroundColor:d.backgroundColor,borderColor:d.borderColor,isDraggable:!e.disableDragging&&d3(i,n),isStartResizable:!e.disableResizing&&u3(i,n),isEndResizable:!e.disableResizing&&f3(i),isMirror:!!(e.isDragging||e.isResizing||e.isDateSelecting),isStart:!!i.isStart,isEnd:!!i.isEnd,isPast:!!e.isPast,isFuture:!!e.isFuture,isToday:!!e.isToday,isSelected:!!e.isSelected,isDragging:!!e.isDragging,isResizing:!!e.isResizing};return _(kn,{elRef:this.handleEl,elTag:e.elTag,elAttrs:e.elAttrs,elClasses:[...h3(f),...i.eventRange.ui.classNames,...e.elClasses||[]],elStyle:e.elStyle,renderProps:f,generatorName:"eventContent",customGenerator:r.eventContent,defaultGenerator:e.defaultGenerator,classNameGenerator:r.eventClassNames,didMount:r.eventDidMount,willUnmount:r.eventWillUnmount},e.children)}componentDidUpdate(e){this.el&&this.props.seg!==e.seg&&P1(this.el,this.props.seg)}}class _m extends et{render(){let{props:e,context:n}=this,{options:r}=n,{seg:i}=e,{ui:c}=i.eventRange,d=r.eventTimeFormat||e.defaultTimeFormat,f=lS(i,d,n,e.defaultDisplayEventTime,e.defaultDisplayEventEnd);return _(km,Object.assign({},e,{elTag:"a",elStyle:{borderColor:c.borderColor,backgroundColor:c.backgroundColor},elAttrs:oS(i,n),defaultGenerator:m6,timeText:f}),(h,p)=>_(ot,null,_(h,{elTag:"div",elClasses:["fc-event-main"],elStyle:{color:p.textColor}}),!!p.isStartResizable&&_("div",{className:"fc-event-resizer fc-event-resizer-start"}),!!p.isEndResizable&&_("div",{className:"fc-event-resizer fc-event-resizer-end"})))}}_m.addPropsEquality({seg:ra});function m6(t){return _("div",{className:"fc-event-main-frame"},t.timeText&&_("div",{className:"fc-event-time"},t.timeText),_("div",{className:"fc-event-title-container"},_("div",{className:"fc-event-title fc-sticky"},t.event.title||_(ot,null," "))))}const Mm=t=>_(Qa.Consumer,null,e=>{let{options:n}=e,r={isAxis:t.isAxis,date:e.dateEnv.toDate(t.date),view:e.viewApi};return _(kn,{elRef:t.elRef,elTag:t.elTag||"div",elAttrs:t.elAttrs,elClasses:t.elClasses,elStyle:t.elStyle,renderProps:r,generatorName:"nowIndicatorContent",customGenerator:n.nowIndicatorContent,classNameGenerator:n.nowIndicatorClassNames,didMount:n.nowIndicatorDidMount,willUnmount:n.nowIndicatorWillUnmount},t.children)}),x6=mt({day:"numeric"});class Im extends et{constructor(){super(...arguments),this.refineRenderProps=_d(b6)}render(){let{props:e,context:n}=this,{options:r}=n,i=this.refineRenderProps({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,isMonthStart:e.isMonthStart||!1,showDayNumber:e.showDayNumber,extraRenderProps:e.extraRenderProps,viewApi:n.viewApi,dateEnv:n.dateEnv,monthStartFormat:r.monthStartFormat});return _(kn,{elRef:e.elRef,elTag:e.elTag,elAttrs:Object.assign(Object.assign({},e.elAttrs),i.isDisabled?{}:{"data-date":fm(e.date)}),elClasses:[...wm(i,n.theme),...e.elClasses||[]],elStyle:e.elStyle,renderProps:i,generatorName:"dayCellContent",customGenerator:r.dayCellContent,defaultGenerator:e.defaultGenerator,classNameGenerator:i.isDisabled?void 0:r.dayCellClassNames,didMount:r.dayCellDidMount,willUnmount:r.dayCellWillUnmount},e.children)}}function Lm(t){return!!(t.dayCellContent||sg("dayCellContent",t))}function b6(t){let{date:e,dateEnv:n,dateProfile:r,isMonthStart:i}=t,c=hS(e,t.todayRange,null,r),d=t.showDayNumber?n.format(e,i?t.monthStartFormat:x6):"";return Object.assign(Object.assign(Object.assign({date:n.toDate(e),view:t.viewApi},c),{isMonthStart:i,dayNumberText:d}),t.extraRenderProps)}class DS extends et{render(){let{props:e}=this,{seg:n}=e;return _(km,{elTag:"div",elClasses:["fc-bg-event"],elStyle:{backgroundColor:n.eventRange.ui.backgroundColor},defaultGenerator:y6,seg:n,timeText:"",isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday,disableDragging:!0,disableResizing:!0})}}function y6(t){let{title:e}=t.event;return e&&_("div",{className:"fc-event-title"},t.event.title)}function OS(t){return _("div",{className:`fc-${t}`})}const RS=t=>_(Qa.Consumer,null,e=>{let{dateEnv:n,options:r}=e,{date:i}=t,c=r.weekNumberFormat||t.defaultFormat,d=n.computeWeekNumber(i),f=n.format(i,c),h={num:d,text:f,date:i};return _(kn,{elRef:t.elRef,elTag:t.elTag,elAttrs:t.elAttrs,elClasses:t.elClasses,elStyle:t.elStyle,renderProps:h,generatorName:"weekNumberContent",customGenerator:r.weekNumberContent,defaultGenerator:v6,classNameGenerator:r.weekNumberClassNames,didMount:r.weekNumberDidMount,willUnmount:r.weekNumberWillUnmount},t.children)});function v6(t){return t.text}const Pp=10;class N6 extends et{constructor(){super(...arguments),this.state={titleId:Ou()},this.handleRootEl=e=>{this.rootEl=e,this.props.elRef&&ga(this.props.elRef,e)},this.handleDocumentMouseDown=e=>{const n=_j(e);this.rootEl.contains(n)||this.handleCloseClick()},this.handleDocumentKeyDown=e=>{e.key==="Escape"&&this.handleCloseClick()},this.handleCloseClick=()=>{let{onClose:e}=this.props;e&&e()}}render(){let{theme:e,options:n}=this.context,{props:r,state:i}=this,c=["fc-popover",e.getClass("popover")].concat(r.extraClassNames||[]);return tI(_("div",Object.assign({},r.extraAttrs,{id:r.id,className:c.join(" "),"aria-labelledby":i.titleId,ref:this.handleRootEl}),_("div",{className:"fc-popover-header "+e.getClass("popoverHeader")},_("span",{className:"fc-popover-title",id:i.titleId},r.title),_("span",{className:"fc-popover-close "+e.getIconClass("close"),title:n.closeHint,onClick:this.handleCloseClick})),_("div",{className:"fc-popover-body "+e.getClass("popoverContent")},r.children)),r.parentEl)}componentDidMount(){document.addEventListener("mousedown",this.handleDocumentMouseDown),document.addEventListener("keydown",this.handleDocumentKeyDown),this.updateSize()}componentWillUnmount(){document.removeEventListener("mousedown",this.handleDocumentMouseDown),document.removeEventListener("keydown",this.handleDocumentKeyDown)}updateSize(){let{isRtl:e}=this.context,{alignmentEl:n,alignGridTop:r}=this.props,{rootEl:i}=this,c=G3(n);if(c){let d=i.getBoundingClientRect(),f=r?Yt(n,".fc-scrollgrid").getBoundingClientRect().top:c.top,h=e?c.right-d.width:c.left;f=Math.max(f,Pp),h=Math.min(h,document.documentElement.clientWidth-Pp-d.width),h=Math.max(h,Pp);let p=i.offsetParent.getBoundingClientRect();fo(i,{top:f-p.top,left:h-p.left})}}}class E6 extends ma{constructor(){super(...arguments),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,useEventCenter:!1}):this.context.unregisterInteractiveComponent(this)}}render(){let{options:e,dateEnv:n}=this.context,{props:r}=this,{startDate:i,todayRange:c,dateProfile:d}=r,f=n.format(i,e.dayPopoverFormat);return _(Im,{elRef:this.handleRootEl,date:i,dateProfile:d,todayRange:c},(h,p,b)=>_(N6,{elRef:b.ref,id:r.id,title:f,extraClassNames:["fc-more-popover"].concat(b.className||[]),extraAttrs:b,parentEl:r.parentEl,alignmentEl:r.alignmentEl,alignGridTop:r.alignGridTop,onClose:r.onClose},Lm(e)&&_(h,{elTag:"div",elClasses:["fc-more-popover-misc"]}),r.children))}queryHit(e,n,r,i){let{rootEl:c,props:d}=this;return e>=0&&e=0&&n{this.linkEl=e,this.props.elRef&&ga(this.props.elRef,e)},this.handleClick=e=>{let{props:n,context:r}=this,{moreLinkClick:i}=r.options,c=B1(n).start;function d(f){let{def:h,instance:p,range:b}=f.eventRange;return{event:new pt(r,h,p),start:r.dateEnv.toDate(b.start),end:r.dateEnv.toDate(b.end),isStart:f.isStart,isEnd:f.isEnd}}typeof i=="function"&&(i=i({date:c,allDay:!!n.allDayDate,allSegs:n.allSegs.map(d),hiddenSegs:n.hiddenSegs.map(d),jsEvent:e,view:r.viewApi})),!i||i==="popover"?this.setState({isPopoverOpen:!0}):typeof i=="string"&&r.calendarApi.zoomTo(c,i)},this.handlePopoverClose=()=>{this.setState({isPopoverOpen:!1})}}render(){let{props:e,state:n}=this;return _(Qa.Consumer,null,r=>{let{viewApi:i,options:c,calendarApi:d}=r,{moreLinkText:f}=c,{moreCnt:h}=e,p=B1(e),b=typeof f=="function"?f.call(d,h):`+${h} ${f}`,y=ho(c.moreLinkHint,[h],b),x={num:h,shortText:`+${h}`,text:b,view:i};return _(ot,null,!!e.moreCnt&&_(kn,{elTag:e.elTag||"a",elRef:this.handleLinkEl,elClasses:[...e.elClasses||[],"fc-more-link"],elStyle:e.elStyle,elAttrs:Object.assign(Object.assign(Object.assign({},e.elAttrs),Ij(this.handleClick)),{title:y,"aria-expanded":n.isPopoverOpen,"aria-controls":n.isPopoverOpen?n.popoverId:""}),renderProps:x,generatorName:"moreLinkContent",customGenerator:c.moreLinkContent,defaultGenerator:e.defaultGenerator||j6,classNameGenerator:c.moreLinkClassNames,didMount:c.moreLinkDidMount,willUnmount:c.moreLinkWillUnmount},e.children),n.isPopoverOpen&&_(E6,{id:n.popoverId,startDate:p.start,endDate:p.end,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:e.extraDateSpan,parentEl:this.parentEl,alignmentEl:e.alignmentElRef?e.alignmentElRef.current:this.linkEl,alignGridTop:e.alignGridTop,forceTimed:e.forceTimed,onClose:this.handlePopoverClose},e.popoverContent()))})}componentDidMount(){this.updateParentEl()}componentDidUpdate(){this.updateParentEl()}updateParentEl(){this.linkEl&&(this.parentEl=Yt(this.linkEl,".fc-view-harness"))}}function j6(t){return t.text}function B1(t){if(t.allDayDate)return{start:t.allDayDate,end:It(t.allDayDate,1)};let{hiddenSegs:e}=t;return{start:kS(e),end:A6(e)}}function kS(t){return t.reduce(S6).eventRange.range.start}function S6(t,e){return t.eventRange.range.starte.eventRange.range.end?t:e}class C6{constructor(){this.handlers=[]}set(e){this.currentValue=e;for(let n of this.handlers)n(e)}subscribe(e){this.handlers.push(e),this.currentValue!==void 0&&e(this.currentValue)}}class D6 extends C6{constructor(){super(...arguments),this.map=new Map}handle(e){const{map:n}=this;let r=!1;e.isActive?(n.set(e.id,e),r=!0):n.has(e.id)&&(n.delete(e.id),r=!0),r&&this.set(n)}}const O6=[],_S={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"},MS=Object.assign(Object.assign({},_S),{buttonHints:{prev:"Previous $0",next:"Next $0",today(t,e){return e==="day"?"Today":`This ${t}`}},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint(t){return`Show ${t} more event${t===1?"":"s"}`}});function R6(t){let e=t.length>0?t[0].code:"en",n=O6.concat(t),r={en:MS};for(let i of n)r[i.code]=i;return{map:r,defaultCode:e}}function IS(t,e){return typeof t=="object"&&!Array.isArray(t)?LS(t.code,[t.code],t):T6(t,e)}function T6(t,e){let n=[].concat(t||[]),r=k6(n,e)||MS;return LS(t,n,r)}function k6(t,e){for(let n=0;n0;i-=1){let c=r.slice(0,i).join("-");if(e[c])return e[c]}}return null}function LS(t,e,n){let r=gm([_S,n],["buttonText"]);delete r.code;let{week:i}=r;return delete r.week,{codeArg:t,codes:e,week:i,simpleNumberFormat:new Intl.NumberFormat(t),options:r}}function Wa(t){return{id:_r(),name:t.name,premiumReleaseDate:t.premiumReleaseDate?new Date(t.premiumReleaseDate):void 0,deps:t.deps||[],reducers:t.reducers||[],isLoadingFuncs:t.isLoadingFuncs||[],contextInit:[].concat(t.contextInit||[]),eventRefiners:t.eventRefiners||{},eventDefMemberAdders:t.eventDefMemberAdders||[],eventSourceRefiners:t.eventSourceRefiners||{},isDraggableTransformers:t.isDraggableTransformers||[],eventDragMutationMassagers:t.eventDragMutationMassagers||[],eventDefMutationAppliers:t.eventDefMutationAppliers||[],dateSelectionTransformers:t.dateSelectionTransformers||[],datePointTransforms:t.datePointTransforms||[],dateSpanTransforms:t.dateSpanTransforms||[],views:t.views||{},viewPropsTransformers:t.viewPropsTransformers||[],isPropsValid:t.isPropsValid||null,externalDefTransforms:t.externalDefTransforms||[],viewContainerAppends:t.viewContainerAppends||[],eventDropTransformers:t.eventDropTransformers||[],componentInteractions:t.componentInteractions||[],calendarInteractions:t.calendarInteractions||[],themeClasses:t.themeClasses||{},eventSourceDefs:t.eventSourceDefs||[],cmdFormatter:t.cmdFormatter,recurringTypes:t.recurringTypes||[],namedTimeZonedImpl:t.namedTimeZonedImpl,initialView:t.initialView||"",elementDraggingImpl:t.elementDraggingImpl,optionChangeHandlers:t.optionChangeHandlers||{},scrollGridImpl:t.scrollGridImpl||null,listenerRefiners:t.listenerRefiners||{},optionRefiners:t.optionRefiners||{},propSetHandlers:t.propSetHandlers||{}}}function _6(t,e){let n={},r={premiumReleaseDate:void 0,reducers:[],isLoadingFuncs:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function i(c){for(let d of c){const f=d.name,h=n[f];h===void 0?(n[f]=d.id,i(d.deps),r=I6(r,d)):h!==d.id&&console.warn(`Duplicate plugin '${f}'`)}}return t&&i(t),i(e),r}function M6(){let t=[],e=[],n;return(r,i)=>((!n||!Hs(r,t)||!Hs(i,e))&&(n=_6(r,i)),t=r,e=i,n)}function I6(t,e){return{premiumReleaseDate:L6(t.premiumReleaseDate,e.premiumReleaseDate),reducers:t.reducers.concat(e.reducers),isLoadingFuncs:t.isLoadingFuncs.concat(e.isLoadingFuncs),contextInit:t.contextInit.concat(e.contextInit),eventRefiners:Object.assign(Object.assign({},t.eventRefiners),e.eventRefiners),eventDefMemberAdders:t.eventDefMemberAdders.concat(e.eventDefMemberAdders),eventSourceRefiners:Object.assign(Object.assign({},t.eventSourceRefiners),e.eventSourceRefiners),isDraggableTransformers:t.isDraggableTransformers.concat(e.isDraggableTransformers),eventDragMutationMassagers:t.eventDragMutationMassagers.concat(e.eventDragMutationMassagers),eventDefMutationAppliers:t.eventDefMutationAppliers.concat(e.eventDefMutationAppliers),dateSelectionTransformers:t.dateSelectionTransformers.concat(e.dateSelectionTransformers),datePointTransforms:t.datePointTransforms.concat(e.datePointTransforms),dateSpanTransforms:t.dateSpanTransforms.concat(e.dateSpanTransforms),views:Object.assign(Object.assign({},t.views),e.views),viewPropsTransformers:t.viewPropsTransformers.concat(e.viewPropsTransformers),isPropsValid:e.isPropsValid||t.isPropsValid,externalDefTransforms:t.externalDefTransforms.concat(e.externalDefTransforms),viewContainerAppends:t.viewContainerAppends.concat(e.viewContainerAppends),eventDropTransformers:t.eventDropTransformers.concat(e.eventDropTransformers),calendarInteractions:t.calendarInteractions.concat(e.calendarInteractions),componentInteractions:t.componentInteractions.concat(e.componentInteractions),themeClasses:Object.assign(Object.assign({},t.themeClasses),e.themeClasses),eventSourceDefs:t.eventSourceDefs.concat(e.eventSourceDefs),cmdFormatter:e.cmdFormatter||t.cmdFormatter,recurringTypes:t.recurringTypes.concat(e.recurringTypes),namedTimeZonedImpl:e.namedTimeZonedImpl||t.namedTimeZonedImpl,initialView:t.initialView||e.initialView,elementDraggingImpl:t.elementDraggingImpl||e.elementDraggingImpl,optionChangeHandlers:Object.assign(Object.assign({},t.optionChangeHandlers),e.optionChangeHandlers),scrollGridImpl:e.scrollGridImpl||t.scrollGridImpl,listenerRefiners:Object.assign(Object.assign({},t.listenerRefiners),e.listenerRefiners),optionRefiners:Object.assign(Object.assign({},t.optionRefiners),e.optionRefiners),propSetHandlers:Object.assign(Object.assign({},t.propSetHandlers),e.propSetHandlers)}}function L6(t,e){return t===void 0?e:e===void 0?t:new Date(Math.max(t.valueOf(),e.valueOf()))}class Fs extends Fo{}Fs.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"};Fs.prototype.baseIconClass="fc-icon";Fs.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"};Fs.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"};Fs.prototype.iconOverrideOption="buttonIcons";Fs.prototype.iconOverrideCustomButtonOption="icon";Fs.prototype.iconOverridePrefix="fc-icon-";function z6(t,e){let n={},r;for(r in t)ug(r,n,t,e);for(r in e)ug(r,n,t,e);return n}function ug(t,e,n,r){if(e[t])return e[t];let i=P6(t,e,n,r);return i&&(e[t]=i),i}function P6(t,e,n,r){let i=n[t],c=r[t],d=b=>i&&i[b]!==null?i[b]:c&&c[b]!==null?c[b]:null,f=d("component"),h=d("superType"),p=null;if(h){if(h===t)throw new Error("Can't have a custom view type that references itself");p=ug(h,e,n,r)}return!f&&p&&(f=p.component),f?{type:t,component:f,defaults:Object.assign(Object.assign({},p?p.defaults:{}),i?i.rawOptions:{}),overrides:Object.assign(Object.assign({},p?p.overrides:{}),c?c.rawOptions:{})}:null}function H1(t){return Va(t,U6)}function U6(t){let e=typeof t=="function"?{component:t}:t,{component:n}=e;return e.content?n=G1(e):n&&!(n.prototype instanceof et)&&(n=G1(Object.assign(Object.assign({},e),{content:n}))),{superType:e.type,component:n,rawOptions:e}}function G1(t){return e=>_(Qa.Consumer,null,n=>_(kn,{elTag:"div",elClasses:Vj(n.viewSpec),renderProps:Object.assign(Object.assign({},e),{nextDayThreshold:n.options.nextDayThreshold}),generatorName:void 0,customGenerator:t.content,classNameGenerator:t.classNames,didMount:t.didMount,willUnmount:t.willUnmount}))}function B6(t,e,n,r){let i=H1(t),c=H1(e.views),d=z6(i,c);return Va(d,f=>H6(f,c,e,n,r))}function H6(t,e,n,r,i){let c=t.overrides.duration||t.defaults.duration||r.duration||n.duration,d=null,f="",h="",p={};if(c&&(d=G6(c),d)){let x=ag(d);f=x.unit,x.value===1&&(h=f,p=e[f]?e[f].rawOptions:{})}let b=x=>{let v=x.buttonText||{},N=t.defaults.buttonTextKey;return N!=null&&v[N]!=null?v[N]:v[t.type]!=null?v[t.type]:v[h]!=null?v[h]:null},y=x=>{let v=x.buttonHints||{},N=t.defaults.buttonTextKey;return N!=null&&v[N]!=null?v[N]:v[t.type]!=null?v[t.type]:v[h]!=null?v[h]:null};return{type:t.type,component:t.component,duration:d,durationUnit:f,singleUnit:h,optionDefaults:t.defaults,optionOverrides:Object.assign(Object.assign({},p),t.overrides),buttonTextOverride:b(r)||b(n)||t.overrides.buttonText,buttonTextDefault:b(i)||t.defaults.buttonText||b(po)||t.type,buttonTitleOverride:y(r)||y(n)||t.overrides.buttonHint,buttonTitleDefault:y(i)||t.defaults.buttonHint||y(po)}}let F1={};function G6(t){let e=JSON.stringify(t),n=F1[e];return n===void 0&&(n=Ve(t),F1[e]=n),n}function F6(t,e){switch(e.type){case"CHANGE_VIEW_TYPE":t=e.viewType}return t}function V6(t,e){switch(e.type){case"CHANGE_DATE":return e.dateMarker;default:return t}}function q6(t,e,n){let r=t.initialDate;return r!=null?e.createMarker(r):n.getDateMarker()}function $6(t,e){switch(e.type){case"SET_OPTION":return Object.assign(Object.assign({},t),{[e.optionName]:e.rawOptionValue});default:return t}}function Y6(t,e,n,r){let i;switch(e.type){case"CHANGE_VIEW_TYPE":return r.build(e.dateMarker||n);case"CHANGE_DATE":return r.build(e.dateMarker);case"PREV":if(i=r.buildPrev(t,n),i.isValid)return i;break;case"NEXT":if(i=r.buildNext(t,n),i.isValid)return i;break}return t}function Q6(t,e,n){let r=e?e.activeRange:null;return PS({},tL(t,n),r,n)}function W6(t,e,n,r){let i=n?n.activeRange:null;switch(e.type){case"ADD_EVENT_SOURCES":return PS(t,e.sources,i,r);case"REMOVE_EVENT_SOURCE":return Z6(t,e.sourceId);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return n?US(t,i,r):t;case"FETCH_EVENT_SOURCES":return zm(t,e.sourceIds?Uj(e.sourceIds):BS(t,r),i,e.isRefetch||!1,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return eL(t,e.sourceId,e.fetchId,e.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return t}}function X6(t,e,n){let r=e?e.activeRange:null;return zm(t,BS(t,n),r,!0,n)}function zS(t){for(let e in t)if(t[e].isFetching)return!0;return!1}function PS(t,e,n,r){let i={};for(let c of e)i[c.sourceId]=c;return n&&(i=US(i,n,r)),Object.assign(Object.assign({},t),i)}function Z6(t,e){return Rr(t,n=>n.sourceId!==e)}function US(t,e,n){return zm(t,Rr(t,r=>K6(r,e,n)),e,!1,n)}function K6(t,e,n){return HS(t,n)?!n.options.lazyFetching||!t.fetchRange||t.isFetching||e.startt.fetchRange.end:!t.latestFetchId}function zm(t,e,n,r,i){let c={};for(let d in t){let f=t[d];e[d]?c[d]=J6(f,n,r,i):c[d]=f}return c}function J6(t,e,n,r){let{options:i,calendarApi:c}=r,d=r.pluginHooks.eventSourceDefs[t.sourceDefId],f=_r();return d.fetch({eventSource:t,range:e,isRefetch:n,context:r},h=>{let{rawEvents:p}=h;i.eventSourceSuccess&&(p=i.eventSourceSuccess.call(c,p,h.response)||p),t.success&&(p=t.success.call(c,p,h.response)||p),r.dispatch({type:"RECEIVE_EVENTS",sourceId:t.sourceId,fetchId:f,fetchRange:e,rawEvents:p})},h=>{let p=!1;i.eventSourceFailure&&(i.eventSourceFailure.call(c,h),p=!0),t.failure&&(t.failure(h),p=!0),p||console.warn(h.message,h),r.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:t.sourceId,fetchId:f,fetchRange:e,error:h})}),Object.assign(Object.assign({},t),{isFetching:!0,latestFetchId:f})}function eL(t,e,n,r){let i=t[e];return i&&n===i.latestFetchId?Object.assign(Object.assign({},t),{[e]:Object.assign(Object.assign({},i),{isFetching:!1,fetchRange:r})}):t}function BS(t,e){return Rr(t,n=>HS(n,e))}function tL(t,e){let n=Jj(e),r=[].concat(t.eventSources||[]),i=[];t.initialEvents&&r.unshift(t.initialEvents),t.events&&r.unshift(t.events);for(let c of r){let d=Kj(c,e,n);d&&i.push(d)}return i}function HS(t,e){return!e.pluginHooks.eventSourceDefs[t.sourceDefId].ignoreRange}function nL(t,e){switch(e.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return e.selection;default:return t}}function aL(t,e){switch(e.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return e.eventInstanceId;default:return t}}function sL(t,e){let n;switch(e.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":return n=e.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return t}}function rL(t,e){let n;switch(e.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":return n=e.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return t}}function lL(t,e,n,r,i){let c=t.headerToolbar?V1(t.headerToolbar,t,e,n,r,i):null,d=t.footerToolbar?V1(t.footerToolbar,t,e,n,r,i):null;return{header:c,footer:d}}function V1(t,e,n,r,i,c){let d={},f=[],h=!1;for(let p in t){let b=t[p],y=iL(b,e,n,r,i,c);d[p]=y.widgets,f.push(...y.viewsWithButtons),h=h||y.hasTitle}return{sectionWidgets:d,viewsWithButtons:f,hasTitle:h}}function iL(t,e,n,r,i,c){let d=e.direction==="rtl",f=e.customButtons||{},h=n.buttonText||{},p=e.buttonText||{},b=n.buttonHints||{},y=e.buttonHints||{},x=t?t.split(" "):[],v=[],N=!1;return{widgets:x.map(S=>S.split(",").map(R=>{if(R==="title")return N=!0,{buttonName:R};let w,D,C,I,L,F;if(w=f[R])C=Y=>{w.click&&w.click.call(Y.target,Y,Y.target)},(I=r.getCustomButtonIconClass(w))||(I=r.getIconClass(R,d))||(L=w.text),F=w.hint||w.text;else if(D=i[R]){v.push(R),C=()=>{c.changeView(R)},(L=D.buttonTextOverride)||(I=r.getIconClass(R,d))||(L=D.buttonTextDefault);let Y=D.buttonTextOverride||D.buttonTextDefault;F=ho(D.buttonTitleOverride||D.buttonTitleDefault||e.viewHint,[Y,R],Y)}else if(c[R])if(C=()=>{c[R]()},(L=h[R])||(I=r.getIconClass(R,d))||(L=p[R]),R==="prevYear"||R==="nextYear"){let Y=R==="prevYear"?"prev":"next";F=ho(b[Y]||y[Y],[p.year||"year","year"],p[R])}else F=Y=>ho(b[R]||y[R],[p[Y]||Y,Y],p[R]);return{buttonName:R,buttonClick:C,buttonIcon:I,buttonText:L,buttonHint:F}})),viewsWithButtons:v,hasTitle:N}}class oL{constructor(e,n,r){this.type=e,this.getCurrentData=n,this.dateEnv=r}get calendar(){return this.getCurrentData().calendarApi}get title(){return this.getCurrentData().viewTitle}get activeStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)}get activeEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)}get currentStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)}get currentEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)}getOption(e){return this.getCurrentData().options[e]}}let cL={ignoreRange:!0,parseMeta(t){return Array.isArray(t.events)?t.events:null},fetch(t,e){e({rawEvents:t.eventSource.meta})}};const dL=Wa({name:"array-event-source",eventSourceDefs:[cL]});let uL={parseMeta(t){return typeof t.events=="function"?t.events:null},fetch(t,e,n){const{dateEnv:r}=t.context,i=t.eventSource.meta;N3(i.bind(null,cS(t.range,r)),c=>e({rawEvents:c}),n)}};const fL=Wa({name:"func-event-source",eventSourceDefs:[uL]}),hL={method:String,extraParams:Z,startParam:String,endParam:String,timeZoneParam:String};let pL={parseMeta(t){return t.url&&(t.format==="json"||!t.format)?{url:t.url,format:"json",method:(t.method||"GET").toUpperCase(),extraParams:t.extraParams,startParam:t.startParam,endParam:t.endParam,timeZoneParam:t.timeZoneParam}:null},fetch(t,e,n){const{meta:r}=t.eventSource,i=mL(r,t.range,t.context);E3(r.method,r.url,i).then(([c,d])=>{e({rawEvents:c,response:d})},n)}};const gL=Wa({name:"json-event-source",eventSourceRefiners:hL,eventSourceDefs:[pL]});function mL(t,e,n){let{dateEnv:r,options:i}=n,c,d,f,h,p={};return c=t.startParam,c==null&&(c=i.startParam),d=t.endParam,d==null&&(d=i.endParam),f=t.timeZoneParam,f==null&&(f=i.timeZoneParam),typeof t.extraParams=="function"?h=t.extraParams():h=t.extraParams||{},Object.assign(p,h),p[c]=r.formatIso(e.start),p[d]=r.formatIso(e.end),r.timeZone!=="local"&&(p[f]=r.timeZone),p}const xL={daysOfWeek:Z,startTime:Ve,endTime:Ve,duration:Ve,startRecur:Z,endRecur:Z};let bL={parse(t,e){if(t.daysOfWeek||t.startTime||t.endTime||t.startRecur||t.endRecur){let n={daysOfWeek:t.daysOfWeek||null,startTime:t.startTime||null,endTime:t.endTime||null,startRecur:t.startRecur?e.createMarker(t.startRecur):null,endRecur:t.endRecur?e.createMarker(t.endRecur):null,dateEnv:e},r;return t.duration&&(r=t.duration),!r&&t.startTime&&t.endTime&&(r=_I(t.endTime,t.startTime)),{allDayGuess:!t.startTime&&!t.endTime,duration:r,typeData:n}}return null},expand(t,e,n){let r=Tr(e,{start:t.startRecur,end:t.endRecur});return r?vL(t.daysOfWeek,t.startTime,t.dateEnv,n,r):[]}};const yL=Wa({name:"simple-recurring-event",recurringTypes:[bL],eventRefiners:xL});function vL(t,e,n,r,i){let c=t?Uj(t):null,d=ct(i.start),f=i.end,h=[];for(e&&(e.milliseconds<0?f=It(f,1):e.milliseconds>=1e3*60*60*24&&(d=It(d,-1)));dzS(t.eventSources)],propSetHandlers:{dateProfile:EL,eventStore:jL}})];class AL{constructor(e,n){this.runTaskOption=e,this.drainedOption=n,this.queue=[],this.delayedRunner=new im(this.drain.bind(this))}request(e,n){this.queue.push(e),this.delayedRunner.request(n)}pause(e){this.delayedRunner.pause(e)}resume(e,n){this.delayedRunner.resume(e,n)}drain(){let{queue:e}=this;for(;e.length;){let n=[],r;for(;r=e.shift();)this.runTask(r),n.push(r);this.drained(n)}}runTask(e){this.runTaskOption&&this.runTaskOption(e)}drained(e){this.drainedOption&&this.drainedOption(e)}}function wL(t,e,n){let r;return/^(year|month)$/.test(t.currentRangeUnit)?r=t.currentRange:r=t.activeRange,n.formatRange(r.start,r.end,mt(e.titleFormat||CL(t)),{isEndExclusive:t.isRangeAllDay,defaultSeparator:e.titleRangeSeparator})}function CL(t){let{currentRangeUnit:e}=t;if(e==="year")return{year:"numeric"};if(e==="month")return{year:"numeric",month:"long"};let n=tu(t.currentRange.start,t.currentRange.end);return n!==null&&n>1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}}class $1{constructor(){this.resetListeners=new Set}handleInput(e,n){const r=this.dateEnv;if(e!==r&&(typeof n=="function"?this.nowFn=n:r||(this.nowAnchorDate=e.toDate(n?e.createMarker(n):e.createNowMarker()),this.nowAnchorQueried=Date.now()),this.dateEnv=e,r))for(const i of this.resetListeners.values())i()}getDateMarker(){return this.nowAnchorDate?this.dateEnv.timestampToMarker(this.nowAnchorDate.valueOf()+(Date.now()-this.nowAnchorQueried)):this.dateEnv.createMarker(this.nowFn())}addResetListener(e){this.resetListeners.add(e)}removeResetListener(e){this.resetListeners.delete(e)}}class DL{constructor(e){this.computeCurrentViewData=Oe(this._computeCurrentViewData),this.organizeRawLocales=Oe(R6),this.buildLocale=Oe(IS),this.buildPluginHooks=M6(),this.buildDateEnv=Oe(OL),this.buildTheme=Oe(RL),this.parseToolbars=Oe(lL),this.buildViewSpecs=Oe(B6),this.buildDateProfileGenerator=_d(TL),this.buildViewApi=Oe(kL),this.buildViewUiProps=_d(IL),this.buildEventUiBySource=Oe(_L,ra),this.buildEventUiBases=Oe(ML),this.parseContextBusinessHours=_d(LL),this.buildTitle=Oe(wL),this.nowManager=new $1,this.emitter=new _u,this.actionRunner=new AL(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.optionsForRefining=[],this.optionsForHandling=[],this.getCurrentData=()=>this.data,this.dispatch=x=>{this.actionRunner.request(x)},this.props=e,this.actionRunner.pause(),this.nowManager=new $1;let n={},r=this.computeOptionsData(e.optionOverrides,n,e.calendarApi),i=r.calendarOptions.initialView||r.pluginHooks.initialView,c=this.computeCurrentViewData(i,r,e.optionOverrides,n);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(c.options);let d={nowManager:this.nowManager,dateEnv:r.dateEnv,options:r.calendarOptions,pluginHooks:r.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},f=q6(r.calendarOptions,r.dateEnv,this.nowManager),h=c.dateProfileGenerator.build(f);Ha(h.activeRange,f)||(f=h.currentRange.start);for(let x of r.pluginHooks.contextInit)x(d);let p=Q6(r.calendarOptions,h,d),b={dynamicOptionOverrides:n,currentViewType:i,currentDate:f,dateProfile:h,businessHours:this.parseContextBusinessHours(d),eventSources:p,eventUiBases:{},eventStore:Rn(),renderableEventStore:Rn(),dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(d).selectionConfig},y=Object.assign(Object.assign({},d),b);for(let x of r.pluginHooks.reducers)Object.assign(b,x(null,null,y));Up(b,d)&&this.emitter.trigger("loading",!0),this.state=b,this.updateData(),this.actionRunner.resume()}resetOptions(e,n){let{props:r}=this;n===void 0?r.optionOverrides=e:(r.optionOverrides=Object.assign(Object.assign({},r.optionOverrides||{}),e),this.optionsForRefining.push(...n)),(n===void 0||n.length)&&this.actionRunner.request({type:"NOTHING"})}_handleAction(e){let{props:n,state:r,emitter:i}=this,c=$6(r.dynamicOptionOverrides,e),d=this.computeOptionsData(n.optionOverrides,c,n.calendarApi),f=F6(r.currentViewType,e),h=this.computeCurrentViewData(f,d,n.optionOverrides,c);n.calendarApi.currentDataManager=this,i.setThisContext(n.calendarApi),i.setOptions(h.options);let p={nowManager:this.nowManager,dateEnv:d.dateEnv,options:d.calendarOptions,pluginHooks:d.pluginHooks,calendarApi:n.calendarApi,dispatch:this.dispatch,emitter:i,getCurrentData:this.getCurrentData},{currentDate:b,dateProfile:y}=r;this.data&&this.data.dateProfileGenerator!==h.dateProfileGenerator&&(y=h.dateProfileGenerator.build(b)),b=V6(b,e),y=Y6(y,e,b,h.dateProfileGenerator),(e.type==="PREV"||e.type==="NEXT"||!Ha(y.currentRange,b))&&(b=y.currentRange.start);let x=W6(r.eventSources,e,y,p),v=Q4(r.eventStore,e,x,y,p),j=zS(x)&&!h.options.progressiveEventRendering&&r.renderableEventStore||v,{eventUiSingleBase:S,selectionConfig:R}=this.buildViewUiProps(p),w=this.buildEventUiBySource(x),D=this.buildEventUiBases(j.defs,S,w),C={dynamicOptionOverrides:c,currentViewType:f,currentDate:b,dateProfile:y,eventSources:x,eventStore:v,renderableEventStore:j,selectionConfig:R,eventUiBases:D,businessHours:this.parseContextBusinessHours(p),dateSelection:nL(r.dateSelection,e),eventSelection:aL(r.eventSelection,e),eventDrag:sL(r.eventDrag,e),eventResize:rL(r.eventResize,e)},I=Object.assign(Object.assign({},p),C);for(let Y of d.pluginHooks.reducers)Object.assign(C,Y(r,e,I));let L=Up(r,p),F=Up(C,p);!L&&F?i.trigger("loading",!0):L&&!F&&i.trigger("loading",!1),this.state=C,n.onAction&&n.onAction(e)}updateData(){let{props:e,state:n}=this,r=this.data,i=this.computeOptionsData(e.optionOverrides,n.dynamicOptionOverrides,e.calendarApi),c=this.computeCurrentViewData(n.currentViewType,i,e.optionOverrides,n.dynamicOptionOverrides),d=this.data=Object.assign(Object.assign(Object.assign({nowManager:this.nowManager,viewTitle:this.buildTitle(n.dateProfile,c.options,i.dateEnv),calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},i),c),n),f=i.pluginHooks.optionChangeHandlers,h=r&&r.calendarOptions,p=i.calendarOptions;if(h&&h!==p){h.timeZone!==p.timeZone&&(n.eventSources=d.eventSources=X6(d.eventSources,n.dateProfile,d),n.eventStore=d.eventStore=I1(d.eventStore,r.dateEnv,d.dateEnv),n.renderableEventStore=d.renderableEventStore=I1(d.renderableEventStore,r.dateEnv,d.dateEnv));for(let b in f)(this.optionsForHandling.indexOf(b)!==-1||h[b]!==p[b])&&f[b](p[b],d)}this.optionsForHandling=[],e.onData&&e.onData(d)}computeOptionsData(e,n,r){if(!this.optionsForRefining.length&&e===this.stableOptionOverrides&&n===this.stableDynamicOptionOverrides)return this.stableCalendarOptionsData;let{refinedOptions:i,pluginHooks:c,localeDefaults:d,availableLocaleData:f,extra:h}=this.processRawCalendarOptions(e,n);Y1(h);let p=this.buildDateEnv(i.timeZone,i.locale,i.weekNumberCalculation,i.firstDay,i.weekText,c,f,i.defaultRangeSeparator),b=this.buildViewSpecs(c.views,this.stableOptionOverrides,this.stableDynamicOptionOverrides,d),y=this.buildTheme(i,c),x=this.parseToolbars(i,this.stableOptionOverrides,y,b,r);return this.stableCalendarOptionsData={calendarOptions:i,pluginHooks:c,dateEnv:p,viewSpecs:b,theme:y,toolbarConfig:x,localeDefaults:d,availableRawLocales:f.map}}processRawCalendarOptions(e,n){let{locales:r,locale:i}=Rp([po,e,n]),c=this.organizeRawLocales(r),d=c.map,f=this.buildLocale(i||c.defaultCode,d).options,h=this.buildPluginHooks(e.plugins||[],SL),p=this.currentCalendarOptionsRefiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},O1),R1),T1),h.listenerRefiners),h.optionRefiners),b={},y=Rp([po,f,e,n]),x={},v=this.currentCalendarOptionsInput,N=this.currentCalendarOptionsRefined,j=!1;for(let S in y)this.optionsForRefining.indexOf(S)===-1&&(y[S]===v[S]||dr[S]&&S in v&&dr[S](v[S],y[S]))?x[S]=N[S]:p[S]?(x[S]=p[S](y[S]),j=!0):b[S]=v[S];return j&&(this.currentCalendarOptionsInput=y,this.currentCalendarOptionsRefined=x,this.stableOptionOverrides=e,this.stableDynamicOptionOverrides=n),this.optionsForHandling.push(...this.optionsForRefining),this.optionsForRefining=[],{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:h,availableLocaleData:c,localeDefaults:f,extra:b}}_computeCurrentViewData(e,n,r,i){let c=n.viewSpecs[e];if(!c)throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);let{refinedOptions:d,extra:f}=this.processRawViewOptions(c,n.pluginHooks,n.localeDefaults,r,i);Y1(f),this.nowManager.handleInput(n.dateEnv,d.now);let h=this.buildDateProfileGenerator({dateProfileGeneratorClass:c.optionDefaults.dateProfileGeneratorClass,nowManager:this.nowManager,duration:c.duration,durationUnit:c.durationUnit,usesMinMaxTime:c.optionDefaults.usesMinMaxTime,dateEnv:n.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:d.slotMinTime,slotMaxTime:d.slotMaxTime,showNonCurrentDates:d.showNonCurrentDates,dayCount:d.dayCount,dateAlignment:d.dateAlignment,dateIncrement:d.dateIncrement,hiddenDays:d.hiddenDays,weekends:d.weekends,validRangeInput:d.validRange,visibleRangeInput:d.visibleRange,fixedWeekCount:d.fixedWeekCount}),p=this.buildViewApi(e,this.getCurrentData,n.dateEnv);return{viewSpec:c,options:d,dateProfileGenerator:h,viewApi:p}}processRawViewOptions(e,n,r,i,c){let d=Rp([po,e.optionDefaults,r,i,e.optionOverrides,c]),f=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},O1),R1),T1),f4),n.listenerRefiners),n.optionRefiners),h={},p=this.currentViewOptionsInput,b=this.currentViewOptionsRefined,y=!1,x={};for(let v in d)d[v]===p[v]||dr[v]&&dr[v](d[v],p[v])?h[v]=b[v]:(d[v]===this.currentCalendarOptionsInput[v]||dr[v]&&dr[v](d[v],this.currentCalendarOptionsInput[v])?v in this.currentCalendarOptionsRefined&&(h[v]=this.currentCalendarOptionsRefined[v]):f[v]?h[v]=f[v](d[v]):x[v]=d[v],y=!0);return y&&(this.currentViewOptionsInput=d,this.currentViewOptionsRefined=h),{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:x}}}function OL(t,e,n,r,i,c,d,f){let h=IS(e||d.defaultCode,d.map);return new j4({calendarSystem:"gregory",timeZone:t,namedTimeZoneImpl:c.namedTimeZonedImpl,locale:h,weekNumberCalculation:n,firstDay:r,weekText:i,cmdFormatter:c.cmdFormatter,defaultSeparator:f})}function RL(t,e){let n=e.themeClasses[t.themeSystem]||Fs;return new n(t)}function TL(t){let e=t.dateProfileGeneratorClass||Yj;return new e(t)}function kL(t,e,n){return new oL(t,e,n)}function _L(t){return Va(t,e=>e.ui)}function ML(t,e,n){let r={"":e};for(let i in t){let c=t[i];c.sourceId&&n[c.sourceId]&&(r[i]=n[c.sourceId])}return r}function IL(t){let{options:e}=t;return{eventUiSingleBase:ou({display:e.eventDisplay,editable:e.editable,startEditable:e.eventStartEditable,durationEditable:e.eventDurationEditable,constraint:e.eventConstraint,overlap:typeof e.eventOverlap=="boolean"?e.eventOverlap:void 0,allow:e.eventAllow,backgroundColor:e.eventBackgroundColor,borderColor:e.eventBorderColor,textColor:e.eventTextColor,color:e.eventColor},t),selectionConfig:ou({constraint:e.selectConstraint,overlap:typeof e.selectOverlap=="boolean"?e.selectOverlap:void 0,allow:e.selectAllow},t)}}function Up(t,e){for(let n of e.pluginHooks.isLoadingFuncs)if(n(t))return!0;return!1}function LL(t){return a3(t.options.businessHours,t)}function Y1(t,e){for(let n in t)console.warn(`Unknown option '${n}'`)}class zL extends et{render(){let e=this.props.widgetGroups.map(n=>this.renderWidgetGroup(n));return _("div",{className:"fc-toolbar-chunk"},...e)}renderWidgetGroup(e){let{props:n}=this,{theme:r}=this.context,i=[],c=!0;for(let d of e){let{buttonName:f,buttonClick:h,buttonText:p,buttonIcon:b,buttonHint:y}=d;if(f==="title")c=!1,i.push(_("h2",{className:"fc-toolbar-title",id:n.titleId},n.title));else{let x=f===n.activeButton,v=!n.isTodayEnabled&&f==="today"||!n.isPrevEnabled&&f==="prev"||!n.isNextEnabled&&f==="next",N=[`fc-${f}-button`,r.getClass("button")];x&&N.push(r.getClass("buttonActive")),i.push(_("button",{type:"button",title:typeof y=="function"?y(n.navUnit):y,disabled:v,"aria-pressed":x,className:N.join(" "),onClick:h},p||(b?_("span",{className:b,role:"img"}):"")))}}if(i.length>1){let d=c&&r.getClass("buttonGroup")||"";return _("div",{className:d},...i)}return i[0]}}class Q1 extends et{render(){let{model:e,extraClassName:n}=this.props,r=!1,i,c,d=e.sectionWidgets,f=d.center;return d.left?(r=!0,i=d.left):i=d.start,d.right?(r=!0,c=d.right):c=d.end,_("div",{className:[n||"","fc-toolbar",r?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",i||[]),this.renderSection("center",f||[]),this.renderSection("end",c||[]))}renderSection(e,n){let{props:r}=this;return _(zL,{key:e,widgetGroups:n,title:r.title,navUnit:r.navUnit,activeButton:r.activeButton,isTodayEnabled:r.isTodayEnabled,isPrevEnabled:r.isPrevEnabled,isNextEnabled:r.isNextEnabled,titleId:r.titleId})}}class PL extends et{constructor(){super(...arguments),this.state={availableWidth:null},this.handleEl=e=>{this.el=e,ga(this.props.elRef,e),this.updateAvailableWidth()},this.handleResize=()=>{this.updateAvailableWidth()}}render(){let{props:e,state:n}=this,{aspectRatio:r}=e,i=["fc-view-harness",r||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],c="",d="";return r?n.availableWidth!==null?c=n.availableWidth/r:d=`${1/r*100}%`:c=e.height||"",_("div",{"aria-labelledby":e.labeledById,ref:this.handleEl,className:i.join(" "),style:{height:c,paddingBottom:d}},e.children)}componentDidMount(){this.context.addResizeHandler(this.handleResize)}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateAvailableWidth(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})}}class UL extends ni{constructor(e){super(e),this.handleSegClick=(n,r)=>{let{component:i}=this,{context:c}=i,d=Vl(r);if(d&&i.isValidSegDownEl(n.target)){let f=Yt(n.target,".fc-event-forced-url"),h=f?f.querySelector("a[href]").href:"";c.emitter.trigger("eventClick",{el:r,event:new pt(i.context,d.eventRange.def,d.eventRange.instance),jsEvent:n,view:c.viewApi}),h&&!n.defaultPrevented&&(window.location.href=h)}},this.destroy=Mj(e.el,"click",".fc-event",this.handleSegClick)}}class BL extends ni{constructor(e){super(e),this.handleEventElRemove=n=>{n===this.currentSegEl&&this.handleSegLeave(null,this.currentSegEl)},this.handleSegEnter=(n,r)=>{Vl(r)&&(this.currentSegEl=r,this.triggerEvent("eventMouseEnter",n,r))},this.handleSegLeave=(n,r)=>{this.currentSegEl&&(this.currentSegEl=null,this.triggerEvent("eventMouseLeave",n,r))},this.removeHoverListeners=bI(e.el,".fc-event",this.handleSegEnter,this.handleSegLeave)}destroy(){this.removeHoverListeners()}triggerEvent(e,n,r){let{component:i}=this,{context:c}=i,d=Vl(r);(!n||i.isValidSegDownEl(n.target))&&c.emitter.trigger(e,{el:r,event:new pt(c,d.eventRange.def,d.eventRange.instance),jsEvent:n,view:c.viewApi})}}class HL extends Ir{constructor(){super(...arguments),this.buildViewContext=Oe(w4),this.buildViewPropTransformers=Oe(FL),this.buildToolbarProps=Oe(GL),this.headerRef=en(),this.footerRef=en(),this.interactionsStore={},this.state={viewLabelId:Ou()},this.registerInteractiveComponent=(e,n)=>{let r=A3(e,n),d=[UL,BL].concat(this.props.pluginHooks.componentInteractions).map(f=>new f(r));this.interactionsStore[e.uid]=d,ig[e.uid]=r},this.unregisterInteractiveComponent=e=>{let n=this.interactionsStore[e.uid];if(n){for(let r of n)r.destroy();delete this.interactionsStore[e.uid]}delete ig[e.uid]},this.resizeRunner=new im(()=>{this.props.emitter.trigger("_resize",!0),this.props.emitter.trigger("windowResize",{view:this.props.viewApi})}),this.handleWindowResize=e=>{let{options:n}=this.props;n.handleWindowResize&&e.target===window&&this.resizeRunner.request(n.windowResizeDelay)}}render(){let{props:e}=this,{toolbarConfig:n,options:r}=e,i=!1,c="",d;e.isHeightAuto||e.forPrint?c="":r.height!=null?i=!0:r.contentHeight!=null?c=r.contentHeight:d=Math.max(r.aspectRatio,.5);let f=this.buildViewContext(e.viewSpec,e.viewApi,e.options,e.dateProfileGenerator,e.dateEnv,e.nowManager,e.theme,e.pluginHooks,e.dispatch,e.getCurrentData,e.emitter,e.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent),h=n.header&&n.header.hasTitle?this.state.viewLabelId:void 0;return _(Qa.Provider,{value:f},_(ai,{unit:"day"},p=>{let b=this.buildToolbarProps(e.viewSpec,e.dateProfile,e.dateProfileGenerator,e.currentDate,p,e.viewTitle);return _(ot,null,n.header&&_(Q1,Object.assign({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:n.header,titleId:h},b)),_(PL,{liquid:i,height:c,aspectRatio:d,labeledById:h},this.renderView(e),this.buildAppendContent()),n.footer&&_(Q1,Object.assign({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:n.footer,titleId:""},b)))}))}componentDidMount(){let{props:e}=this;this.calendarInteractions=e.pluginHooks.calendarInteractions.map(r=>new r(e)),window.addEventListener("resize",this.handleWindowResize);let{propSetHandlers:n}=e.pluginHooks;for(let r in n)n[r](e[r],e)}componentDidUpdate(e){let{props:n}=this,{propSetHandlers:r}=n.pluginHooks;for(let i in r)n[i]!==e[i]&&r[i](n[i],n)}componentWillUnmount(){window.removeEventListener("resize",this.handleWindowResize),this.resizeRunner.clear();for(let e of this.calendarInteractions)e.destroy();this.props.emitter.trigger("_unmount")}buildAppendContent(){let{props:e}=this,n=e.pluginHooks.viewContainerAppends.map(r=>r(e));return _(ot,{},...n)}renderView(e){let{pluginHooks:n}=e,{viewSpec:r}=e,i={dateProfile:e.dateProfile,businessHours:e.businessHours,eventStore:e.renderableEventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,isHeightAuto:e.isHeightAuto,forPrint:e.forPrint},c=this.buildViewPropTransformers(n.viewPropsTransformers);for(let f of c)Object.assign(i,f.transform(i,e));let d=r.component;return _(d,Object.assign({},i))}}function GL(t,e,n,r,i,c){let d=n.build(i,void 0,!1),f=n.buildPrev(e,r,!1),h=n.buildNext(e,r,!1);return{title:c,activeButton:t.type,navUnit:t.singleUnit,isTodayEnabled:d.isValid&&!Ha(e.currentRange,i),isPrevEnabled:f.isValid,isNextEnabled:h.isValid}}function FL(t){return t.map(e=>new e)}class VL extends C3{constructor(e,n={}){super(),this.isRendering=!1,this.isRendered=!1,this.currentClassNames=[],this.customContentRenderId=0,this.handleAction=r=>{switch(r.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":this.renderRunner.tryDrain()}},this.handleData=r=>{this.currentData=r,this.renderRunner.request(r.calendarOptions.rerenderDelay)},this.handleRenderRequest=()=>{if(this.isRendering){this.isRendered=!0;let{currentData:r}=this;ru(()=>{So(_(S3,{options:r.calendarOptions,theme:r.theme,emitter:r.emitter},(i,c,d,f)=>(this.setClassNames(i),this.setHeight(c),_(Fj.Provider,{value:this.customContentRenderId},_(HL,Object.assign({isHeightAuto:d,forPrint:f},r))))),this.el)})}else this.isRendered&&(this.isRendered=!1,So(null,this.el),this.setClassNames([]),this.setHeight(""))},cI(e),this.el=e,this.renderRunner=new im(this.handleRenderRequest),new DL({optionOverrides:n,calendarApi:this,onAction:this.handleAction,onData:this.handleData})}render(){let e=this.isRendering;e?this.customContentRenderId+=1:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()}destroy(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())}updateSize(){ru(()=>{super.updateSize()})}batchRendering(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")}pauseRendering(){this.renderRunner.pause("pauseRendering")}resumeRendering(){this.renderRunner.resume("pauseRendering",!0)}resetOptions(e,n){this.currentDataManager.resetOptions(e,n)}setClassNames(e){if(!Hs(e,this.currentClassNames)){let{classList:n}=this.el;for(let r of this.currentClassNames)n.remove(r);for(let r of e)n.add(r);this.currentClassNames=e}}setHeight(e){kj(this.el,"height",e)}}const qL=parseInt(String(qe.version).split(".")[0]),$L=qL<18;class GS extends A.Component{constructor(){super(...arguments),this.elRef=A.createRef(),this.isUpdating=!1,this.isUnmounting=!1,this.state={customRenderingMap:new Map},this.requestResize=()=>{this.isUnmounting||(this.cancelResize(),this.resizeId=requestAnimationFrame(()=>{this.doResize()}))}}render(){const e=[];for(const n of this.state.customRenderingMap.values())e.push(qe.createElement(YL,{key:n.id,customRendering:n}));return qe.createElement("div",{ref:this.elRef},e)}componentDidMount(){this.isUnmounting=!1;const e=new D6;this.handleCustomRendering=e.handle.bind(e),this.calendar=new VL(this.elRef.current,Object.assign(Object.assign({},this.props),{handleCustomRendering:this.handleCustomRendering})),this.calendar.render(),this.calendar.on("_beforeprint",()=>{Dr.flushSync(()=>{})});let n;e.subscribe(r=>{const i=Date.now(),c=!n;($L||c||this.isUpdating||this.isUnmounting||i-n<100?FS:Dr.flushSync)(()=>{this.setState({customRenderingMap:r},()=>{n=i,c?this.doResize():this.requestResize()})})})}componentDidUpdate(){this.isUpdating=!0,this.calendar.resetOptions(Object.assign(Object.assign({},this.props),{handleCustomRendering:this.handleCustomRendering})),this.isUpdating=!1}componentWillUnmount(){this.isUnmounting=!0,this.cancelResize(),this.calendar.destroy()}doResize(){this.calendar.updateSize()}cancelResize(){this.resizeId!==void 0&&(cancelAnimationFrame(this.resizeId),this.resizeId=void 0)}getApi(){return this.calendar}}GS.act=FS;class YL extends A.PureComponent{render(){const{customRendering:e}=this.props,{generatorMeta:n}=e,r=typeof n=="function"?n(e.renderProps):n;return Dr.createPortal(r,e.containerEl)}}function FS(t){t()}class QL extends ma{constructor(){super(...arguments),this.headerElRef=en()}renderSimpleLayout(e,n){let{props:r,context:i}=this,c=[],d=uu(i.options);return e&&c.push({type:"header",key:"header",isSticky:d,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),c.push({type:"body",key:"body",liquid:!0,chunk:{content:n}}),_(lu,{elClasses:["fc-daygrid"],viewSpec:i.viewSpec},_(Tm,{liquid:!r.isHeightAuto&&!r.forPrint,collapsibleWidth:r.forPrint,cols:[],sections:c}))}renderHScrollLayout(e,n,r,i){let c=this.context.pluginHooks.scrollGridImpl;if(!c)throw new Error("No ScrollGrid implementation");let{props:d,context:f}=this,h=!d.forPrint&&uu(f.options),p=!d.forPrint&&CS(f.options),b=[];return e&&b.push({type:"header",key:"header",isSticky:h,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),b.push({type:"body",key:"body",liquid:!0,chunks:[{key:"main",content:n}]}),p&&b.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"main",content:dg}]}),_(lu,{elClasses:["fc-daygrid"],viewSpec:f.viewSpec},_(c,{liquid:!d.isHeightAuto&&!d.forPrint,forPrint:d.forPrint,collapsibleWidth:d.forPrint,colGroups:[{cols:[{span:r,minWidth:i}]}],sections:b}))}}function Id(t,e){let n=[];for(let r=0;r{let i=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return _(ot,null,n.map(c=>{let d=c.eventRange.instance.instanceId;return _("div",{className:"fc-daygrid-event-harness",key:d,style:{visibility:i[d]?"hidden":""}},qS(c)?_(YS,Object.assign({seg:c,isDragging:!1,isSelected:d===e.eventSelection,defaultDisplayEventEnd:!1},zs(c,e.todayRange))):_($S,Object.assign({seg:c,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:d===e.eventSelection,defaultDisplayEventEnd:!1},zs(c,e.todayRange))))}))}})}}function ZL(t){let e=[],n=[];for(let r of t)e.push(r.seg),r.isVisible||n.push(r.seg);return{allSegs:e,invisibleSegs:n}}const KL=mt({week:"narrow"});class JL extends ma{constructor(){super(...arguments),this.rootElRef=en(),this.state={dayNumberId:Ou()},this.handleRootEl=e=>{ga(this.rootElRef,e),ga(this.props.elRef,e)}}render(){let{context:e,props:n,state:r,rootElRef:i}=this,{options:c,dateEnv:d}=e,{date:f,dateProfile:h}=n;const p=n.showDayNumber&&tz(f,h.currentRange,d);return _(Im,{elTag:"td",elRef:this.handleRootEl,elClasses:["fc-daygrid-day",...n.extraClassNames||[]],elAttrs:Object.assign(Object.assign(Object.assign({},n.extraDataAttrs),n.showDayNumber?{"aria-labelledby":r.dayNumberId}:{}),{role:"gridcell"}),defaultGenerator:ez,date:f,dateProfile:h,todayRange:n.todayRange,showDayNumber:n.showDayNumber,isMonthStart:p,extraRenderProps:n.extraRenderProps},(b,y)=>_("div",{ref:n.innerElRef,className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",style:{minHeight:n.minHeight}},n.showWeekNumber&&_(RS,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:du(e,f,"week"),date:f,defaultFormat:KL}),!y.isDisabled&&(n.showDayNumber||Lm(c)||n.forceDayTop)?_("div",{className:"fc-daygrid-day-top"},_(b,{elTag:"a",elClasses:["fc-daygrid-day-number",p&&"fc-daygrid-month-start"],elAttrs:Object.assign(Object.assign({},du(e,f)),{id:r.dayNumberId})})):n.showDayNumber?_("div",{className:"fc-daygrid-day-top",style:{visibility:"hidden"}},_("a",{className:"fc-daygrid-day-number"}," ")):void 0,_("div",{className:"fc-daygrid-day-events",ref:n.fgContentElRef},n.fgContent,_("div",{className:"fc-daygrid-day-bottom",style:{marginTop:n.moreMarginTop}},_(XL,{allDayDate:f,singlePlacements:n.singlePlacements,moreCnt:n.moreCnt,alignmentElRef:i,alignGridTop:!n.showDayNumber,extraDateSpan:n.extraDateSpan,dateProfile:n.dateProfile,eventSelection:n.eventSelection,eventDrag:n.eventDrag,eventResize:n.eventResize,todayRange:n.todayRange}))),_("div",{className:"fc-daygrid-day-bg"},n.bgContent)))}}function ez(t){return t.dayNumberText||_(ot,null," ")}function tz(t,e,n){const{start:r,end:i}=e,c=Gs(i,-1),d=n.getYear(r),f=n.getMonth(r),h=n.getYear(c),p=n.getMonth(c);return!(d===h&&f===p)&&(t.valueOf()===r.valueOf()||n.getDay(t)===1&&t.valueOf(){let w=t[R.index].eventRange.instance.instanceId+":"+R.span.start+":"+(R.span.end-1);return i[w]||1});f.allowReslicing=!0,f.strictOrder=r,e===!0||n===!0?(f.maxCoord=c,f.hiddenConsumes=!0):typeof e=="number"?f.maxStackCnt=e:typeof n=="number"&&(f.maxStackCnt=n,f.hiddenConsumes=!0);let h=[],p=[];for(let R=0;R1,S=v.span.start===f;y+=v.levelCoord-b,b=v.levelCoord+v.thickness,j?(y+=v.thickness,S&&x.push({seg:wl(N,v.span.start,v.span.end,n),isVisible:!0,isAbsolute:!0,absoluteTop:v.levelCoord,marginTop:0})):S&&(x.push({seg:wl(N,v.span.start,v.span.end,n),isVisible:!0,isAbsolute:!1,absoluteTop:v.levelCoord,marginTop:y}),y=0)}i.push(p),c.push(x),d.push(y)}return{singleColPlacements:i,multiColPlacements:c,leftoverMargins:d}}function sz(t,e){let n=[];for(let r=0;r!this.forceHidden[Cr(c)];for(let c=0;c{e&&this.updateSizing(!0)}}render(){let{props:e,state:n,context:r}=this,{options:i}=r,c=e.cells.length,d=Sd(e.businessHourSegs,c),f=Sd(e.bgEventSegs,c),h=Sd(this.getHighlightSegs(),c),p=Sd(this.getMirrorSegs(),c),{singleColPlacements:b,multiColPlacements:y,moreCnts:x,moreMarginTops:v}=nz(rS(e.fgEventSegs,i.eventOrder),e.dayMaxEvents,e.dayMaxEventRows,i.eventOrderStrict,n.segHeights,n.maxContentHeight,e.cells),N=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return _("tr",{ref:this.rootElRef,role:"row"},e.renderIntro&&e.renderIntro(),e.cells.map((j,S)=>{let R=this.renderFgSegs(S,e.forPrint?b[S]:y[S],e.todayRange,N),w=this.renderFgSegs(S,lz(p[S],y),e.todayRange,{},!!e.eventDrag,!!e.eventResize,!1);return _(JL,{key:j.key,elRef:this.cellElRefs.createRef(j.key),innerElRef:this.frameElRefs.createRef(j.key),dateProfile:e.dateProfile,date:j.date,showDayNumber:e.showDayNumbers,showWeekNumber:e.showWeekNumbers&&S===0,forceDayTop:e.showWeekNumbers,todayRange:e.todayRange,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,extraRenderProps:j.extraRenderProps,extraDataAttrs:j.extraDataAttrs,extraClassNames:j.extraClassNames,extraDateSpan:j.extraDateSpan,moreCnt:x[S],moreMarginTop:v[S],singlePlacements:b[S],fgContentElRef:this.fgElRefs.createRef(j.key),fgContent:_(ot,null,_(ot,null,R),_(ot,null,w)),bgContent:_(ot,null,this.renderFillSegs(h[S],"highlight"),this.renderFillSegs(d[S],"non-business"),this.renderFillSegs(f[S],"bg-event")),minHeight:e.cellMinHeight})}))}componentDidMount(){this.updateSizing(!0),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,n){let r=this.props;this.updateSizing(!ra(e,r))}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}renderFgSegs(e,n,r,i,c,d,f){let{context:h}=this,{eventSelection:p}=this.props,{framePositions:b}=this.state,y=this.props.cells.length===1,x=c||d||f,v=[];if(b)for(let N of n){let{seg:j}=N,{instanceId:S}=j.eventRange.instance,R=N.isVisible&&!i[S],w=N.isAbsolute,D="",C="";w&&(h.isRtl?(C=0,D=b.lefts[j.lastCol]-b.lefts[j.firstCol]):(D=0,C=b.rights[j.firstCol]-b.rights[j.lastCol])),v.push(_("div",{className:"fc-daygrid-event-harness"+(w?" fc-daygrid-event-harness-abs":""),key:QS(j),ref:x?null:this.segHarnessRefs.createRef(WS(j)),style:{visibility:R?"":"hidden",marginTop:w?"":N.marginTop,top:w?N.absoluteTop:"",left:D,right:C}},qS(j)?_(YS,Object.assign({seg:j,isDragging:c,isSelected:S===p,defaultDisplayEventEnd:y},zs(j,r))):_($S,Object.assign({seg:j,isDragging:c,isResizing:d,isDateSelecting:f,isSelected:S===p,defaultDisplayEventEnd:y},zs(j,r)))))}return v}renderFillSegs(e,n){let{isRtl:r}=this.context,{todayRange:i}=this.props,{framePositions:c}=this.state,d=[];if(c)for(let f of e){let h=r?{right:0,left:c.lefts[f.lastCol]-c.lefts[f.firstCol]}:{left:0,right:c.rights[f.firstCol]-c.rights[f.lastCol]};d.push(_("div",{key:iS(f.eventRange),className:"fc-daygrid-bg-harness",style:h},n==="bg-event"?_(DS,Object.assign({seg:f},zs(f,i))):OS(n)))}return _(ot,{},...d)}updateSizing(e){let{props:n,state:r,frameElRefs:i}=this;if(!n.forPrint&&n.clientWidth!==null){if(e){let h=n.cells.map(p=>i.currentMap[p.key]);if(h.length){let p=this.rootElRef.current,b=new ql(p,h,!0,!1);(!r.framePositions||!r.framePositions.similarTo(b))&&this.setState({framePositions:new ql(p,h,!0,!1)})}}const c=this.state.segHeights,d=this.querySegHeights(),f=n.dayMaxEvents===!0||n.dayMaxEventRows===!0;this.safeSetState({segHeights:Object.assign(Object.assign({},c),d),maxContentHeight:f?this.computeMaxContentHeight():null})}}querySegHeights(){let e=this.segHarnessRefs.currentMap,n={};for(let r in e){let i=Math.round(e[r].getBoundingClientRect().height);n[r]=Math.max(n[r]||0,i)}return n}computeMaxContentHeight(){let e=this.props.cells[0].key,n=this.cellElRefs.currentMap[e],r=this.fgElRefs.currentMap[e];return n.getBoundingClientRect().bottom-r.getBoundingClientRect().top}getCellEls(){let e=this.cellElRefs.currentMap;return this.props.cells.map(n=>e[n.key])}}XS.addStateEquality({segHeights:ra});function lz(t,e){if(!t.length)return[];let n=iz(e);return t.map(r=>({seg:r,isVisible:!0,isAbsolute:!0,absoluteTop:n[r.eventRange.instance.instanceId],marginTop:0}))}function iz(t){let e={};for(let n of t)for(let r of n)e[r.seg.eventRange.instance.instanceId]=r.absoluteTop;return e}class oz extends ma{constructor(){super(...arguments),this.splitBusinessHourSegs=Oe(Id),this.splitBgEventSegs=Oe(cz),this.splitFgEventSegs=Oe(Id),this.splitDateSelectionSegs=Oe(Id),this.splitEventDrag=Oe(W1),this.splitEventResize=Oe(W1),this.rowRefs=new Ua}render(){let{props:e,context:n}=this,r=e.cells.length,i=this.splitBusinessHourSegs(e.businessHourSegs,r),c=this.splitBgEventSegs(e.bgEventSegs,r),d=this.splitFgEventSegs(e.fgEventSegs,r),f=this.splitDateSelectionSegs(e.dateSelectionSegs,r),h=this.splitEventDrag(e.eventDrag,r),p=this.splitEventResize(e.eventResize,r),b=r>=7&&e.clientWidth?e.clientWidth/n.options.aspectRatio/6:null;return _(ai,{unit:"day"},(y,x)=>_(ot,null,e.cells.map((v,N)=>_(XS,{ref:this.rowRefs.createRef(N),key:v.length?v[0].date.toISOString():N,showDayNumbers:r>1,showWeekNumbers:e.showWeekNumbers,todayRange:x,dateProfile:e.dateProfile,cells:v,renderIntro:e.renderRowIntro,businessHourSegs:i[N],eventSelection:e.eventSelection,bgEventSegs:c[N],fgEventSegs:d[N],dateSelectionSegs:f[N],eventDrag:h[N],eventResize:p[N],dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,clientWidth:e.clientWidth,clientHeight:e.clientHeight,cellMinHeight:b,forPrint:e.forPrint}))))}componentDidMount(){this.registerInteractiveComponent()}componentDidUpdate(){this.registerInteractiveComponent()}registerInteractiveComponent(){if(!this.rootEl){const e=this.rowRefs.currentMap[0].getCellEls()[0],n=e?e.closest(".fc-daygrid-body"):null;n&&(this.rootEl=n,this.context.registerInteractiveComponent(this,{el:n,isHitComboAllowed:this.props.isHitComboAllowed}))}}componentWillUnmount(){this.rootEl&&(this.context.unregisterInteractiveComponent(this),this.rootEl=null)}prepareHits(){this.rowPositions=new ql(this.rootEl,this.rowRefs.collect().map(e=>e.getCellEls()[0]),!1,!0),this.colPositions=new ql(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)}queryHit(e,n){let{colPositions:r,rowPositions:i}=this,c=r.leftToIndex(e),d=i.topToIndex(n);if(d!=null&&c!=null){let f=this.props.cells[d][c];return{dateProfile:this.props.dateProfile,dateSpan:Object.assign({range:this.getCellRange(d,c),allDay:!0},f.extraDateSpan),dayEl:this.getCellEl(d,c),rect:{left:r.lefts[c],right:r.rights[c],top:i.tops[d],bottom:i.bottoms[d]},layer:0}}return null}getCellEl(e,n){return this.rowRefs.currentMap[e].getCellEls()[n]}getCellRange(e,n){let r=this.props.cells[e][n].date,i=It(r,1);return{start:r,end:i}}}function cz(t,e){return Id(t.filter(dz),e)}function dz(t){return t.eventRange.def.allDay}class uz extends ma{constructor(){super(...arguments),this.elRef=en(),this.needsScrollReset=!1}render(){let{props:e}=this,{dayMaxEventRows:n,dayMaxEvents:r,expandRows:i}=e,c=r===!0||n===!0;c&&!i&&(c=!1,n=null,r=null);let d=["fc-daygrid-body",c?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",i?"":"fc-daygrid-body-natural"];return _("div",{ref:this.elRef,className:d.join(" "),style:{width:e.clientWidth,minWidth:e.tableMinWidth}},_("table",{role:"presentation",className:"fc-scrollgrid-sync-table",style:{width:e.clientWidth,minWidth:e.tableMinWidth,height:i?e.clientHeight:""}},e.colGroupNode,_("tbody",{role:"presentation"},_(oz,{dateProfile:e.dateProfile,cells:e.cells,renderRowIntro:e.renderRowIntro,showWeekNumbers:e.showWeekNumbers,clientWidth:e.clientWidth,clientHeight:e.clientHeight,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,dayMaxEvents:r,dayMaxEventRows:n,forPrint:e.forPrint,isHitComboAllowed:e.isHitComboAllowed}))))}componentDidMount(){this.requestScrollReset()}componentDidUpdate(e){e.dateProfile!==this.props.dateProfile?this.requestScrollReset():this.flushScrollReset()}requestScrollReset(){this.needsScrollReset=!0,this.flushScrollReset()}flushScrollReset(){if(this.needsScrollReset&&this.props.clientWidth){const e=fz(this.elRef.current,this.props.dateProfile);if(e){const n=e.closest(".fc-daygrid-body"),r=n.closest(".fc-scroller"),i=e.getBoundingClientRect().top-n.getBoundingClientRect().top;r.scrollTop=i?i+1:0}this.needsScrollReset=!1}}}function fz(t,e){let n;return e.currentRangeUnit.match(/year|month/)&&(n=t.querySelector(`[data-date="${WI(e.currentDate)}-01"]`)),n||(n=t.querySelector(`[data-date="${fm(e.currentDate)}"]`)),n}class hz extends ES{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,n){return n.sliceRange(e)}}class ZS extends ma{constructor(){super(...arguments),this.slicer=new hz,this.tableRef=en()}render(){let{props:e,context:n}=this;return _(uz,Object.assign({ref:this.tableRef},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,n,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))}}class pz extends QL{constructor(){super(...arguments),this.buildDayTableModel=Oe(gz),this.headerRef=en(),this.tableRef=en()}render(){let{options:e,dateProfileGenerator:n}=this.context,{props:r}=this,i=this.buildDayTableModel(r.dateProfile,n),c=e.dayHeaders&&_(yS,{ref:this.headerRef,dateProfile:r.dateProfile,dates:i.headerDates,datesRepDistinctDays:i.rowCnt===1}),d=f=>_(ZS,{ref:this.tableRef,dateProfile:r.dateProfile,dayTableModel:i,businessHours:r.businessHours,dateSelection:r.dateSelection,eventStore:r.eventStore,eventUiBases:r.eventUiBases,eventSelection:r.eventSelection,eventDrag:r.eventDrag,eventResize:r.eventResize,nextDayThreshold:e.nextDayThreshold,colGroupNode:f.tableColGroupNode,tableMinWidth:f.tableMinWidth,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.weekNumbers,expandRows:!r.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:f.clientWidth,clientHeight:f.clientHeight,forPrint:r.forPrint});return e.dayMinWidth?this.renderHScrollLayout(c,d,i.colCnt,e.dayMinWidth):this.renderSimpleLayout(c,d)}}function gz(t,e){let n=new vS(t.renderRange,e);return new NS(n,/year|month|week/.test(t.currentRangeUnit))}class mz extends Yj{buildRenderRange(e,n,r){let i=super.buildRenderRange(e,n,r),{props:c}=this;return xz({currentRange:i,snapToWeek:/^(year|month)$/.test(n),fixedWeekCount:c.fixedWeekCount,dateEnv:c.dateEnv})}}function xz(t){let{dateEnv:e,currentRange:n}=t,{start:r,end:i}=n,c;if(t.snapToWeek&&(r=e.startOfWeek(r),c=e.startOfWeek(i),c.valueOf()!==i.valueOf()&&(i=S1(c,1))),t.fixedWeekCount){let d=e.startOfWeek(e.startOfMonth(It(n.end,-1))),f=Math.ceil(PI(d,i));i=S1(i,6-f)}return{start:r,end:i}}var bz=':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}';lm(bz);var yz=Wa({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:pz,dateProfileGeneratorClass:mz},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},fixedWeekCount:!0},dayGridYear:{type:"dayGrid",duration:{years:1}}}});class vz extends k3{getKeyInfo(){return{allDay:{},timed:{}}}getKeysForDateSpan(e){return e.allDay?["allDay"]:["timed"]}getKeysForEventDef(e){return e.allDay?o3(e)?["timed","allDay"]:["allDay"]:["timed"]}}const Nz=mt({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function KS(t){let e=["fc-timegrid-slot","fc-timegrid-slot-label",t.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return _(Qa.Consumer,null,n=>{if(!t.isLabeled)return _("td",{className:e.join(" "),"data-time":t.isoTimeStr});let{dateEnv:r,options:i,viewApi:c}=n,d=i.slotLabelFormat==null?Nz:Array.isArray(i.slotLabelFormat)?mt(i.slotLabelFormat[0]):mt(i.slotLabelFormat),f={level:0,time:t.time,date:r.toDate(t.date),view:c,text:r.format(t.date,d)};return _(kn,{elTag:"td",elClasses:e,elAttrs:{"data-time":t.isoTimeStr},renderProps:f,generatorName:"slotLabelContent",customGenerator:i.slotLabelContent,defaultGenerator:Ez,classNameGenerator:i.slotLabelClassNames,didMount:i.slotLabelDidMount,willUnmount:i.slotLabelWillUnmount},h=>_("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},_(h,{elTag:"div",elClasses:["fc-timegrid-slot-label-cushion","fc-scrollgrid-shrink-cushion"]})))})}function Ez(t){return t.text}class jz extends et{render(){return this.props.slatMetas.map(e=>_("tr",{key:e.key},_(KS,Object.assign({},e))))}}const Sz=mt({week:"short"}),Az=5;class wz extends ma{constructor(){super(...arguments),this.allDaySplitter=new vz,this.headerElRef=en(),this.rootElRef=en(),this.scrollerElRef=en(),this.state={slatCoords:null},this.handleScrollTopRequest=e=>{let n=this.scrollerElRef.current;n&&(n.scrollTop=e)},this.renderHeadAxis=(e,n="")=>{let{options:r}=this.context,{dateProfile:i}=this.props,c=i.renderRange,f=Mr(c.start,c.end)===1?du(this.context,c.start,"week"):{};return r.weekNumbers&&e==="day"?_(RS,{elTag:"th",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},date:c.start,defaultFormat:Sz},h=>_("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame","fc-timegrid-axis-frame-liquid"].join(" "),style:{height:n}},_(h,{elTag:"a",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"],elAttrs:f}))):_("th",{"aria-hidden":!0,className:"fc-timegrid-axis"},_("div",{className:"fc-timegrid-axis-frame",style:{height:n}}))},this.renderTableRowAxis=e=>{let{options:n,viewApi:r}=this.context,i={text:n.allDayText,view:r};return _(kn,{elTag:"td",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},renderProps:i,generatorName:"allDayContent",customGenerator:n.allDayContent,defaultGenerator:Cz,classNameGenerator:n.allDayClassNames,didMount:n.allDayDidMount,willUnmount:n.allDayWillUnmount},c=>_("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame",e==null?" fc-timegrid-axis-frame-liquid":""].join(" "),style:{height:e}},_(c,{elTag:"span",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"]})))},this.handleSlatCoords=e=>{this.setState({slatCoords:e})}}renderSimpleLayout(e,n,r){let{context:i,props:c}=this,d=[],f=uu(i.options);return e&&d.push({type:"header",key:"header",isSticky:f,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),n&&(d.push({type:"body",key:"all-day",chunk:{content:n}}),d.push({type:"body",key:"all-day-divider",outerContent:_("tr",{role:"presentation",className:"fc-scrollgrid-section"},_("td",{className:"fc-timegrid-divider "+i.theme.getClass("tableCellShaded")}))})),d.push({type:"body",key:"body",liquid:!0,expandRows:!!i.options.expandRows,chunk:{scrollerElRef:this.scrollerElRef,content:r}}),_(lu,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:i.viewSpec},_(Tm,{liquid:!c.isHeightAuto&&!c.forPrint,collapsibleWidth:c.forPrint,cols:[{width:"shrink"}],sections:d}))}renderHScrollLayout(e,n,r,i,c,d,f){let h=this.context.pluginHooks.scrollGridImpl;if(!h)throw new Error("No ScrollGrid implementation");let{context:p,props:b}=this,y=!b.forPrint&&uu(p.options),x=!b.forPrint&&CS(p.options),v=[];e&&v.push({type:"header",key:"header",isSticky:y,syncRowHeights:!0,chunks:[{key:"axis",rowContent:j=>_("tr",{role:"presentation"},this.renderHeadAxis("day",j.rowSyncHeights[0]))},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),n&&(v.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:j=>_("tr",{role:"presentation"},this.renderTableRowAxis(j.rowSyncHeights[0]))},{key:"cols",content:n}]}),v.push({key:"all-day-divider",type:"body",outerContent:_("tr",{role:"presentation",className:"fc-scrollgrid-section"},_("td",{colSpan:2,className:"fc-timegrid-divider "+p.theme.getClass("tableCellShaded")}))}));let N=p.options.nowIndicator;return v.push({type:"body",key:"body",liquid:!0,expandRows:!!p.options.expandRows,chunks:[{key:"axis",content:j=>_("div",{className:"fc-timegrid-axis-chunk"},_("table",{"aria-hidden":!0,style:{height:j.expandRows?j.clientHeight:""}},j.tableColGroupNode,_("tbody",null,_(jz,{slatMetas:d}))),_("div",{className:"fc-timegrid-now-indicator-container"},_(ai,{unit:N?"minute":"day"},S=>{let R=N&&f&&f.safeComputeTop(S);return typeof R=="number"?_(Mm,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:R},isAxis:!0,date:S}):null})))},{key:"cols",scrollerElRef:this.scrollerElRef,content:r}]}),x&&v.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:dg},{key:"cols",content:dg}]}),_(lu,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:p.viewSpec},_(h,{liquid:!b.isHeightAuto&&!b.forPrint,forPrint:b.forPrint,collapsibleWidth:!1,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:i,minWidth:c}]}],sections:v}))}getAllDayMaxEventProps(){let{dayMaxEvents:e,dayMaxEventRows:n}=this.context.options;return(e===!0||n===!0)&&(e=void 0,n=Az),{dayMaxEvents:e,dayMaxEventRows:n}}}function Cz(t){return t.text}class Dz{constructor(e,n,r){this.positions=e,this.dateProfile=n,this.slotDuration=r}safeComputeTop(e){let{dateProfile:n}=this;if(Ha(n.currentRange,e)){let r=ct(e),i=e.valueOf()-r.valueOf();if(i>=na(n.slotMinTime)&&i{let f={time:c.time,date:n.dateEnv.toDate(c.date),view:n.viewApi};return _("tr",{key:c.key,ref:i.createRef(c.key)},e.axis&&_(KS,Object.assign({},c)),_(kn,{elTag:"td",elClasses:["fc-timegrid-slot","fc-timegrid-slot-lane",!c.isLabeled&&"fc-timegrid-slot-minor"],elAttrs:{"data-time":c.isoTimeStr},renderProps:f,generatorName:"slotLaneContent",customGenerator:r.slotLaneContent,classNameGenerator:r.slotLaneClassNames,didMount:r.slotLaneDidMount,willUnmount:r.slotLaneWillUnmount}))}))}}class Rz extends et{constructor(){super(...arguments),this.rootElRef=en(),this.slatElRefs=new Ua}render(){let{props:e,context:n}=this;return _("div",{ref:this.rootElRef,className:"fc-timegrid-slots"},_("table",{"aria-hidden":!0,className:n.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},e.tableColGroupNode,_(Oz,{slatElRefs:this.slatElRefs,axis:e.axis,slatMetas:e.slatMetas})))}componentDidMount(){this.updateSizing()}componentDidUpdate(){this.updateSizing()}componentWillUnmount(){this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{context:e,props:n}=this;n.onCoords&&n.clientWidth!==null&&this.rootElRef.current.offsetHeight&&n.onCoords(new Dz(new ql(this.rootElRef.current,Tz(this.slatElRefs.currentMap,n.slatMetas),!1,!0),this.props.dateProfile,e.options.slotDuration))}}function Tz(t,e){return e.map(n=>t[n.key])}function no(t,e){let n=[],r;for(r=0;reA(e.hiddenSegs,e),defaultGenerator:_z,forceTimed:!0},n=>_(n,{elTag:"div",elClasses:["fc-timegrid-more-link-inner","fc-sticky"]}))}}function _z(t){return t.shortText}function Mz(t,e,n){let r=new mS;e!=null&&(r.strictOrder=e),n!=null&&(r.maxStackCnt=n);let i=r.addSegs(t),c=q3(i),d=Iz(r);return d=Uz(d,1),{segRects:Bz(d),hiddenGroups:c}}function Iz(t){const{entriesByLevel:e}=t,n=Pm((r,i)=>r+":"+i,(r,i)=>{let c=Pz(t,r,i),d=Z1(c,n),f=e[r][i];return[Object.assign(Object.assign({},f),{nextLevelNodes:d[0]}),f.thickness+d[1]]});return Z1(e.length?{level:0,lateralStart:0,lateralEnd:e[0].length}:null,n)[0]}function Z1(t,e){if(!t)return[[],0];let{level:n,lateralStart:r,lateralEnd:i}=t,c=r,d=[];for(;cCr(r),(r,i,c)=>{let{nextLevelNodes:d,thickness:f}=r,h=f+c,p=f/h,b,y=[];if(!d.length)b=e;else for(let v of d)if(b===void 0){let N=n(v,i,h);b=N[0],y.push(N[1])}else{let N=n(v,b,0);y.push(N[1])}let x=(b-i)*p;return[b-x,Object.assign(Object.assign({},r),{thickness:x,nextLevelNodes:y})]});return t.map(r=>n(r,0,0)[1])}function Bz(t){let e=[];const n=Pm((i,c,d)=>Cr(i),(i,c,d)=>{let f=Object.assign(Object.assign({},i),{levelCoord:c,stackDepth:d,stackForward:0});return e.push(f),f.stackForward=r(i.nextLevelNodes,c+i.thickness,d+1)+1});function r(i,c,d){let f=0;for(let h of i)f=Math.max(n(h,c,d),f);return f}return r(t,0,0),e}function Pm(t,e){const n={};return(...r)=>{let i=t(...r);return i in n?n[i]:n[i]=e(...r)}}function K1(t,e,n=null,r=0){let i=[];if(n)for(let c=0;c_("div",{className:"fc-timegrid-col-frame"},_("div",{className:"fc-timegrid-col-bg"},this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(e.dateSelectionSegs,"highlight")),_("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(f,d,!1,!1,!1)),_("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(c,{},!!e.eventDrag,!!e.eventResize,!!i,"mirror")),_("div",{className:"fc-timegrid-now-indicator-container"},this.renderNowIndicator(e.nowIndicatorSegs)),Lm(r)&&_(h,{elTag:"div",elClasses:["fc-timegrid-col-misc"]})))}renderFgSegs(e,n,r,i,c,d){let{props:f}=this;return f.forPrint?eA(e,f):this.renderPositionedFgSegs(e,n,r,i,c,d)}renderPositionedFgSegs(e,n,r,i,c,d){let{eventMaxStack:f,eventShortHeight:h,eventOrderStrict:p,eventMinHeight:b}=this.context.options,{date:y,slatCoords:x,eventSelection:v,todayRange:N,nowDate:j}=this.props,S=r||i||c,R=K1(e,y,x,b),{segPlacements:w,hiddenGroups:D}=Hz(e,R,p,f);return _(ot,null,this.renderHiddenGroups(D,e),w.map(C=>{let{seg:I,rect:L}=C,F=I.eventRange.instance.instanceId,Y=S||!!(!n[F]&&L),$=Bp(L&&L.span),M=!S&&L?this.computeSegHStyle(L):{left:0,right:0},H=!!L&&L.stackForward>0,ne=!!L&&L.span.end-L.span.start{let y=Bp(b.span),x=Vz(b.entries,n);return _(kz,{key:Pj(kS(x)),hiddenSegs:x,top:y.top,bottom:y.bottom,extraDateSpan:r,dateProfile:i,todayRange:c,nowDate:d,eventSelection:f,eventDrag:h,eventResize:p})}))}renderFillSegs(e,n){let{props:r,context:i}=this,d=K1(e,r.date,r.slatCoords,i.options.eventMinHeight).map((f,h)=>{let p=e[h];return _("div",{key:iS(p.eventRange),className:"fc-timegrid-bg-harness",style:Bp(f)},n==="bg-event"?_(DS,Object.assign({seg:p},zs(p,r.todayRange,r.nowDate))):OS(n))});return _(ot,null,d)}renderNowIndicator(e){let{slatCoords:n,date:r}=this.props;return n?e.map((i,c)=>_(Mm,{key:c,elClasses:["fc-timegrid-now-indicator-line"],elStyle:{top:n.computeDateTop(i.start,r)},isAxis:!1,date:r})):null}computeSegHStyle(e){let{isRtl:n,options:r}=this.context,i=r.slotEventOverlap,c=e.levelCoord,d=e.levelCoord+e.thickness,f,h;i&&(d=Math.min(1,c+(d-c)*2)),n?(f=1-d,h=c):(f=c,h=1-d);let p={zIndex:e.stackDepth+1,left:f*100+"%",right:h*100+"%"};return i&&!e.stackForward&&(p[n?"marginLeft":"marginRight"]=20),p}}function eA(t,{todayRange:e,nowDate:n,eventSelection:r,eventDrag:i,eventResize:c}){let d=(i?i.affectedInstances:null)||(c?c.affectedInstances:null)||{};return _(ot,null,t.map(f=>{let h=f.eventRange.instance.instanceId;return _("div",{key:h,style:{visibility:d[h]?"hidden":""}},_(JS,Object.assign({seg:f,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:h===r,isShort:!1},zs(f,e,n))))}))}function Bp(t){return t?{top:t.start,bottom:-t.end}:{top:"",bottom:""}}function Vz(t,e){return t.map(n=>e[n.index])}class qz extends et{constructor(){super(...arguments),this.splitFgEventSegs=Oe(no),this.splitBgEventSegs=Oe(no),this.splitBusinessHourSegs=Oe(no),this.splitNowIndicatorSegs=Oe(no),this.splitDateSelectionSegs=Oe(no),this.splitEventDrag=Oe(X1),this.splitEventResize=Oe(X1),this.rootElRef=en(),this.cellElRefs=new Ua}render(){let{props:e,context:n}=this,r=n.options.nowIndicator&&e.slatCoords&&e.slatCoords.safeComputeTop(e.nowDate),i=e.cells.length,c=this.splitFgEventSegs(e.fgEventSegs,i),d=this.splitBgEventSegs(e.bgEventSegs,i),f=this.splitBusinessHourSegs(e.businessHourSegs,i),h=this.splitNowIndicatorSegs(e.nowIndicatorSegs,i),p=this.splitDateSelectionSegs(e.dateSelectionSegs,i),b=this.splitEventDrag(e.eventDrag,i),y=this.splitEventResize(e.eventResize,i);return _("div",{className:"fc-timegrid-cols",ref:this.rootElRef},_("table",{role:"presentation",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,_("tbody",{role:"presentation"},_("tr",{role:"row"},e.axis&&_("td",{"aria-hidden":!0,className:"fc-timegrid-col fc-timegrid-axis"},_("div",{className:"fc-timegrid-col-frame"},_("div",{className:"fc-timegrid-now-indicator-container"},typeof r=="number"&&_(Mm,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:r},isAxis:!0,date:e.nowDate})))),e.cells.map((x,v)=>_(Fz,{key:x.key,elRef:this.cellElRefs.createRef(x.key),dateProfile:e.dateProfile,date:x.date,nowDate:e.nowDate,todayRange:e.todayRange,extraRenderProps:x.extraRenderProps,extraDataAttrs:x.extraDataAttrs,extraClassNames:x.extraClassNames,extraDateSpan:x.extraDateSpan,fgEventSegs:c[v],bgEventSegs:d[v],businessHourSegs:f[v],nowIndicatorSegs:h[v],dateSelectionSegs:p[v],eventDrag:b[v],eventResize:y[v],slatCoords:e.slatCoords,eventSelection:e.eventSelection,forPrint:e.forPrint}))))))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}updateCoords(){let{props:e}=this;e.onColCoords&&e.clientWidth!==null&&e.onColCoords(new ql(this.rootElRef.current,$z(this.cellElRefs.currentMap,e.cells),!0,!1))}}function $z(t,e){return e.map(n=>t[n.key])}class Yz extends ma{constructor(){super(...arguments),this.processSlotOptions=Oe(Qz),this.state={slatCoords:null},this.handleRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)},this.handleScrollRequest=e=>{let{onScrollTopRequest:n}=this.props,{slatCoords:r}=this.state;if(n&&r){if(e.time){let i=r.computeTimeTop(e.time);i=Math.ceil(i),i&&(i+=1),n(i)}return!0}return!1},this.handleColCoords=e=>{this.colCoords=e},this.handleSlatCoords=e=>{this.setState({slatCoords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:n}=this;return _("div",{className:"fc-timegrid-body",ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},_(Rz,{axis:e.axis,dateProfile:e.dateProfile,slatMetas:e.slatMetas,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,tableColGroupNode:e.axis?e.tableColGroupNode:null,onCoords:this.handleSlatCoords}),_(qz,{cells:e.cells,axis:e.axis,dateProfile:e.dateProfile,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange,nowDate:e.nowDate,nowIndicatorSegs:e.nowIndicatorSegs,clientWidth:e.clientWidth,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,slatCoords:n.slatCoords,onColCoords:this.handleColCoords,forPrint:e.forPrint}))}componentDidMount(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach()}queryHit(e,n){let{dateEnv:r,options:i}=this.context,{colCoords:c}=this,{dateProfile:d}=this.props,{slatCoords:f}=this.state,{snapDuration:h,snapsPerSlot:p}=this.processSlotOptions(this.props.slotDuration,i.snapDuration),b=c.leftToIndex(e),y=f.positions.topToIndex(n);if(b!=null&&y!=null){let x=this.props.cells[b],v=f.positions.tops[y],N=f.positions.getHeight(y),j=(n-v)/N,S=Math.floor(j*p),R=y*p+S,w=this.props.cells[b].date,D=ng(d.slotMinTime,MI(h,R)),C=r.add(w,D),I=r.add(C,h);return{dateProfile:d,dateSpan:Object.assign({range:{start:C,end:I},allDay:!1},x.extraDateSpan),dayEl:c.els[b],rect:{left:c.lefts[b],right:c.rights[b],top:v,bottom:v+N},layer:0}}return null}}function Qz(t,e){let n=e||t,r=um(t,n);return r===null&&(n=t,r=1),{snapDuration:n,snapsPerSlot:r}}class Wz extends ES{sliceRange(e,n){let r=[];for(let i=0;i_(Yz,Object.assign({ref:this.timeColsRef},this.slicer.sliceProps(e,r,null,n,f),{forPrint:e.forPrint,axis:e.axis,dateProfile:r,slatMetas:e.slatMetas,slotDuration:e.slotDuration,cells:i.cells[0],tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,clientWidth:e.clientWidth,clientHeight:e.clientHeight,expandRows:e.expandRows,nowDate:h,nowIndicatorSegs:c&&this.slicer.sliceNowDate(h,r,d,n,f),todayRange:p,onScrollTopRequest:e.onScrollTopRequest,onSlatCoords:e.onSlatCoords})))}}function Zz(t,e,n){let r=[];for(let i of t.headerDates)r.push({start:n.add(i,e.slotMinTime),end:n.add(i,e.slotMaxTime)});return r}const J1=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];function Kz(t,e,n,r,i){let c=new Date(0),d=t,f=Ve(0),h=n||Jz(r),p=[];for(;na(d)=0;e-=1)if(n=Ve(J1[e]),r=um(n,t),r!==null&&r>1)return n;return t}class eP extends wz{constructor(){super(...arguments),this.buildTimeColsModel=Oe(tP),this.buildSlatMetas=Oe(Kz)}render(){let{options:e,dateEnv:n,dateProfileGenerator:r}=this.context,{props:i}=this,{dateProfile:c}=i,d=this.buildTimeColsModel(c,r),f=this.allDaySplitter.splitProps(i),h=this.buildSlatMetas(c.slotMinTime,c.slotMaxTime,e.slotLabelInterval,e.slotDuration,n),{dayMinWidth:p}=e,b=!p,y=p,x=e.dayHeaders&&_(yS,{dates:d.headerDates,dateProfile:c,datesRepDistinctDays:!0,renderIntro:b?this.renderHeadAxis:null}),v=e.allDaySlot!==!1&&(j=>_(ZS,Object.assign({},f.allDay,{dateProfile:c,dayTableModel:d,nextDayThreshold:e.nextDayThreshold,tableMinWidth:j.tableMinWidth,colGroupNode:j.tableColGroupNode,renderRowIntro:b?this.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:this.headerElRef,clientWidth:j.clientWidth,clientHeight:j.clientHeight,forPrint:i.forPrint},this.getAllDayMaxEventProps()))),N=j=>_(Xz,Object.assign({},f.timed,{dayTableModel:d,dateProfile:c,axis:b,slotDuration:e.slotDuration,slatMetas:h,forPrint:i.forPrint,tableColGroupNode:j.tableColGroupNode,tableMinWidth:j.tableMinWidth,clientWidth:j.clientWidth,clientHeight:j.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:j.expandRows,onScrollTopRequest:this.handleScrollTopRequest}));return y?this.renderHScrollLayout(x,v,N,d.colCnt,p,h,this.state.slatCoords):this.renderSimpleLayout(x,v,N)}}function tP(t,e){let n=new vS(t.renderRange,e);return new NS(n,!1)}var nP='.fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-arrow,.fc .fc-timegrid-now-indicator-line{pointer-events:none}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}';lm(nP);const aP={allDaySlot:Boolean};var sP=Wa({name:"@fullcalendar/timegrid",initialView:"timeGridWeek",optionRefiners:aP,views:{timeGrid:{component:eP,usesMinMaxTime:!0,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});Rm.touchMouseIgnoreWait=500;let fg=0,fu=0,hg=!1;class tA{constructor(e){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=n=>{if(!this.shouldIgnoreMouse()&&rP(n)&&this.tryStart(n)){let r=this.createEventFromMouse(n,!0);this.emitter.trigger("pointerdown",r),this.initScrollWatch(r),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=n=>{let r=this.createEventFromMouse(n);this.recordCoords(r),this.emitter.trigger("pointermove",r)},this.handleMouseUp=n=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(n)),this.cleanup()},this.handleTouchStart=n=>{if(this.tryStart(n)){this.isTouchDragging=!0;let r=this.createEventFromTouch(n,!0);this.emitter.trigger("pointerdown",r),this.initScrollWatch(r);let i=n.target;this.shouldIgnoreMove||i.addEventListener("touchmove",this.handleTouchMove),i.addEventListener("touchend",this.handleTouchEnd),i.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=n=>{let r=this.createEventFromTouch(n);this.recordCoords(r),this.emitter.trigger("pointermove",r)},this.handleTouchEnd=n=>{if(this.isDragging){let r=n.target;r.removeEventListener("touchmove",this.handleTouchMove),r.removeEventListener("touchend",this.handleTouchEnd),r.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(n)),this.cleanup(),this.isTouchDragging=!1,lP()}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=n=>{if(!this.shouldIgnoreMove){let r=window.scrollX-this.prevScrollX+this.prevPageX,i=window.scrollY-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:n,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:r,pageY:i,deltaX:r-this.origPageX,deltaY:i-this.origPageY})}},this.containerEl=e,this.emitter=new _u,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),iP()}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),oP()}tryStart(e){let n=this.querySubjectEl(e),r=e.target;return n&&(!this.handleSelector||Yt(r,this.handleSelector))?(this.subjectEl=n,this.isDragging=!0,this.wasTouchScroll=!1,!0):!1}cleanup(){hg=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(e){return this.selector?Yt(e.target,this.selector):this.containerEl}shouldIgnoreMouse(){return fg||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(hg=!0)}initScrollWatch(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.scrollX,this.prevScrollY=window.scrollY)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(e,n){let r=0,i=0;return n?(this.origPageX=e.pageX,this.origPageY=e.pageY):(r=e.pageX-this.origPageX,i=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:r,deltaY:i}}createEventFromTouch(e,n){let r=e.touches,i,c,d=0,f=0;return r&&r.length?(i=r[0].pageX,c=r[0].pageY):(i=e.pageX,c=e.pageY),n?(this.origPageX=i,this.origPageY=c):(d=i-this.origPageX,f=c-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:i,pageY:c,deltaX:d,deltaY:f}}}function rP(t){return t.button===0&&!t.ctrlKey}function lP(){fg+=1,setTimeout(()=>{fg-=1},Rm.touchMouseIgnoreWait)}function iP(){fu+=1,fu===1&&window.addEventListener("touchmove",nA,{passive:!1})}function oP(){fu-=1,fu||window.removeEventListener("touchmove",nA,{passive:!1})}function nA(t){hg&&t.preventDefault()}class cP{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(e,n,r){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=n-window.scrollX,this.origScreenY=r-window.scrollY,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(e,n){this.deltaX=e-window.scrollX-this.origScreenX,this.deltaY=n-window.scrollY-this.origScreenY,this.updateElPosition()}setIsVisible(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)}stop(e,n){let r=()=>{this.cleanup(),n()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(r,this.revertDuration):setTimeout(r,0)}doRevertAnimation(e,n){let r=this.mirrorEl,i=this.sourceEl.getBoundingClientRect();r.style.transition="top "+n+"ms,left "+n+"ms",fo(r,{left:i.left,top:i.top}),yI(r,()=>{r.style.transition="",e()})}cleanup(){this.mirrorEl&&(om(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&fo(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let e=this.sourceElRect,n=this.mirrorEl;return n||(n=this.mirrorEl=this.sourceEl.cloneNode(!0),n.style.userSelect="none",n.style.webkitUserSelect="none",n.style.pointerEvents="none",n.classList.add("fc-event-dragging"),fo(n,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(n)),n}}class aA extends Dm{constructor(e,n){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=e,this.doesListening=n,this.scrollTop=this.origScrollTop=e.getScrollTop(),this.scrollLeft=this.origScrollLeft=e.getScrollLeft(),this.scrollWidth=e.getScrollWidth(),this.scrollHeight=e.getScrollHeight(),this.clientWidth=e.getClientWidth(),this.clientHeight=e.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class sA extends aA{constructor(e,n){super(new F3(e),n)}getEventTarget(){return this.scrollController.el}computeClientRect(){return H3(this.scrollController.el)}}class dP extends aA{constructor(e){super(new V3,e)}getEventTarget(){return window}computeClientRect(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}}handleScrollChange(){this.clientRect=this.computeClientRect()}}const eN=typeof performance=="function"?performance.now:Date.now;class uP{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let e=this.computeBestEdge(this.pointerScreenX+window.scrollX,this.pointerScreenY+window.scrollY);if(e){let n=eN();this.handleSide(e,(n-this.msSinceRequest)/1e3),this.requestAnimation(n)}else this.isAnimating=!1}}}start(e,n,r){this.isEnabled&&(this.scrollCaches=this.buildCaches(r),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,n))}handleMove(e,n){if(this.isEnabled){let r=e-window.scrollX,i=n-window.scrollY,c=this.pointerScreenY===null?0:i-this.pointerScreenY,d=this.pointerScreenX===null?0:r-this.pointerScreenX;c<0?this.everMovedUp=!0:c>0&&(this.everMovedDown=!0),d<0?this.everMovedLeft=!0:d>0&&(this.everMovedRight=!0),this.pointerScreenX=r,this.pointerScreenY=i,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(eN()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let e of this.scrollCaches)e.destroy();this.scrollCaches=null}}requestAnimation(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)}handleSide(e,n){let{scrollCache:r}=e,{edgeThreshold:i}=this,c=i-e.distance,d=c*c/(i*i)*this.maxVelocity*n,f=1;switch(e.name){case"left":f=-1;case"right":r.setScrollLeft(r.getScrollLeft()+d*f);break;case"top":f=-1;case"bottom":r.setScrollTop(r.getScrollTop()+d*f);break}}computeBestEdge(e,n){let{edgeThreshold:r}=this,i=null,c=this.scrollCaches||[];for(let d of c){let f=d.clientRect,h=e-f.left,p=f.right-e,b=n-f.top,y=f.bottom-n;h>=0&&p>=0&&b>=0&&y>=0&&(b<=r&&this.everMovedUp&&d.canScrollUp()&&(!i||i.distance>b)&&(i={scrollCache:d,name:"top",distance:b}),y<=r&&this.everMovedDown&&d.canScrollDown()&&(!i||i.distance>y)&&(i={scrollCache:d,name:"bottom",distance:y}),h<=r&&this.everMovedLeft&&d.canScrollLeft()&&(!i||i.distance>h)&&(i={scrollCache:d,name:"left",distance:h}),p<=r&&this.everMovedRight&&d.canScrollRight()&&(!i||i.distance>p)&&(i={scrollCache:d,name:"right",distance:p}))}return i}buildCaches(e){return this.queryScrollEls(e).map(n=>n===window?new dP(!1):new sA(n,!1))}queryScrollEls(e){let n=[];for(let r of this.scrollQuery)typeof r=="object"?n.push(r):n.push(...Array.prototype.slice.call(e.getRootNode().querySelectorAll(r)));return n}}class Vo extends Y3{constructor(e,n){super(e),this.containerEl=e,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=i=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,vI(document.body),EI(document.body),i.isTouch||i.origEvent.preventDefault(),this.emitter.trigger("pointerdown",i),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(i.subjectEl,i.pageX,i.pageY),this.startDelay(i),this.minDistance||this.handleDistanceSurpassed(i)))},this.onPointerMove=i=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",i),!this.isDistanceSurpassed){let c=this.minDistance,d,{deltaX:f,deltaY:h}=i;d=f*f+h*h,d>=c*c&&this.handleDistanceSurpassed(i)}this.isDragging&&(i.origEvent.type!=="scroll"&&(this.mirror.handleMove(i.pageX,i.pageY),this.autoScroller.handleMove(i.pageX,i.pageY)),this.emitter.trigger("dragmove",i))}},this.onPointerUp=i=>{this.isInteracting&&(this.isInteracting=!1,NI(document.body),jI(document.body),this.emitter.trigger("pointerup",i),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(i)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let r=this.pointer=new tA(e);r.emitter.on("pointerdown",this.onPointerDown),r.emitter.on("pointermove",this.onPointerMove),r.emitter.on("pointerup",this.onPointerUp),n&&(r.selector=n),this.mirror=new cP,this.autoScroller=new uP}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(e){typeof this.delay=="number"?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(e)},this.delay):this.handleDelayEnd(e)}handleDelayEnd(e){this.isDelayEnded=!0,this.tryStartDrag(e)}handleDistanceSurpassed(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)}tryStartDrag(e){this.isDelayEnded&&this.isDistanceSurpassed&&(!this.pointer.wasTouchScroll||this.touchScrollAllowed)&&(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY,this.containerEl),this.emitter.trigger("dragstart",e),this.touchScrollAllowed===!1&&this.pointer.cancelTouchScroll())}tryStopDrag(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))}stopDrag(e){this.isDragging=!1,this.emitter.trigger("dragend",e)}setIgnoreMove(e){this.pointer.shouldIgnoreMove=e}setMirrorIsVisible(e){this.mirror.setIsVisible(e)}setMirrorNeedsRevert(e){this.mirrorNeedsRevert=e}setAutoScrollEnabled(e){this.autoScroller.isEnabled=e}}class fP{constructor(e){this.el=e,this.origRect=Cm(e),this.scrollCaches=gS(e).map(n=>new sA(n,!0))}destroy(){for(let e of this.scrollCaches)e.destroy()}computeLeft(){let e=this.origRect.left;for(let n of this.scrollCaches)e+=n.origScrollLeft-n.getScrollLeft();return e}computeTop(){let e=this.origRect.top;for(let n of this.scrollCaches)e+=n.origScrollTop-n.getScrollTop();return e}isWithinClipping(e,n){let r={left:e,top:n};for(let i of this.scrollCaches)if(!hP(i.getEventTarget())&&!D3(r,i.clientRect))return!1;return!0}}function hP(t){let e=t.tagName;return e==="HTML"||e==="BODY"}class Mu{constructor(e,n){this.useSubjectCenter=!1,this.requireInitial=!0,this.disablePointCheck=!1,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=r=>{let{dragging:i}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(r),this.initialHit||!this.requireInitial?(i.setIgnoreMove(!1),this.emitter.trigger("pointerdown",r)):i.setIgnoreMove(!0)},this.handleDragStart=r=>{this.emitter.trigger("dragstart",r),this.handleMove(r,!0)},this.handleDragMove=r=>{this.emitter.trigger("dragmove",r),this.handleMove(r)},this.handlePointerUp=r=>{this.releaseHits(),this.emitter.trigger("pointerup",r)},this.handleDragEnd=r=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,r),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",r)},this.droppableStore=n,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new _u}processFirstCoord(e){let n={left:e.pageX,top:e.pageY},r=n,i=e.subjectEl,c;i instanceof HTMLElement&&(c=Cm(i),r=O3(r,c));let d=this.initialHit=this.queryHitForOffset(r.left,r.top);if(d){if(this.useSubjectCenter&&c){let f=fS(c,d.rect);f&&(r=R3(f))}this.coordAdjust=T3(r,n)}else this.coordAdjust={left:0,top:0}}handleMove(e,n){let r=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);(n||!Iu(this.movingHit,r))&&(this.movingHit=r,this.emitter.trigger("hitupdate",r,!1,e))}prepareHits(){this.offsetTrackers=Va(this.droppableStore,e=>(e.component.prepareHits(),new fP(e.el)))}releaseHits(){let{offsetTrackers:e}=this;for(let n in e)e[n].destroy();this.offsetTrackers={}}queryHitForOffset(e,n){let{droppableStore:r,offsetTrackers:i}=this,c=null;for(let d in r){let f=r[d].component,h=i[d];if(h&&h.isWithinClipping(e,n)){let p=h.computeLeft(),b=h.computeTop(),y=e-p,x=n-b,{origRect:v}=h,N=v.right-v.left,j=v.bottom-v.top;if(y>=0&&y=0&&xc.layer)&&(S.componentId=d,S.context=f.context,S.rect.left+=p,S.rect.right+=p,S.rect.top+=b,S.rect.bottom+=b,c=S)}}}return c}}function Iu(t,e){return!t&&!e?!0:!!t!=!!e?!1:x3(t.dateSpan,e.dateSpan)}function rA(t,e){let n={};for(let r of e.pluginHooks.datePointTransforms)Object.assign(n,r(t,e));return Object.assign(n,pP(t,e.dateEnv)),n}function pP(t,e){return{date:e.toDate(t.range.start),dateStr:e.formatIso(t.range.start,{omitTime:t.allDay}),allDay:t.allDay}}class gP extends ni{constructor(e){super(e),this.handlePointerDown=r=>{let{dragging:i}=this,c=r.origEvent.target;i.setIgnoreMove(!this.component.isValidDateDownEl(c))},this.handleDragEnd=r=>{let{component:i}=this,{pointer:c}=this.dragging;if(!c.wasTouchScroll){let{initialHit:d,finalHit:f}=this.hitDragging;if(d&&f&&Iu(d,f)){let{context:h}=i,p=Object.assign(Object.assign({},rA(d.dateSpan,h)),{dayEl:d.dayEl,jsEvent:r.origEvent,view:h.viewApi||h.calendarApi.view});h.emitter.trigger("dateClick",p)}}},this.dragging=new Vo(e.el),this.dragging.autoScroller.isEnabled=!1;let n=this.hitDragging=new Mu(this.dragging,Am(e));n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}}class mP extends ni{constructor(e){super(e),this.dragSelection=null,this.handlePointerDown=d=>{let{component:f,dragging:h}=this,{options:p}=f.context,b=p.selectable&&f.isValidDateDownEl(d.origEvent.target);h.setIgnoreMove(!b),h.delay=d.isTouch?xP(f):null},this.handleDragStart=d=>{this.component.context.calendarApi.unselect(d)},this.handleHitUpdate=(d,f)=>{let{context:h}=this.component,p=null,b=!1;if(d){let y=this.hitDragging.initialHit;d.componentId===y.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(y,d)||(p=bP(y,d,h.pluginHooks.dateSelectionTransformers)),(!p||!J3(p,d.dateProfile,h))&&(b=!0,p=null)}p?h.dispatch({type:"SELECT_DATES",selection:p}):f||h.dispatch({type:"UNSELECT_DATES"}),b?cm():dm(),f||(this.dragSelection=p)},this.handlePointerUp=d=>{this.dragSelection&&(nS(this.dragSelection,d,this.component.context),this.dragSelection=null)};let{component:n}=e,{options:r}=n.context,i=this.dragging=new Vo(e.el);i.touchScrollAllowed=!1,i.minDistance=r.selectMinDistance||0,i.autoScroller.isEnabled=r.dragScroll;let c=this.hitDragging=new Mu(this.dragging,Am(e));c.emitter.on("pointerdown",this.handlePointerDown),c.emitter.on("dragstart",this.handleDragStart),c.emitter.on("hitupdate",this.handleHitUpdate),c.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}}function xP(t){let{options:e}=t.context,n=e.selectLongPressDelay;return n==null&&(n=e.longPressDelay),n}function bP(t,e,n){let r=t.dateSpan,i=e.dateSpan,c=[r.range.start,r.range.end,i.range.start,i.range.end];c.sort(DI);let d={};for(let f of n){let h=f(t,e);if(h===!1)return null;h&&Object.assign(d,h)}return d.range={start:c[0],end:c[3]},d.allDay=r.allDay,d}class qo extends ni{constructor(e){super(e),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=d=>{let f=d.origEvent.target,{component:h,dragging:p}=this,{mirror:b}=p,{options:y}=h.context,x=h.context;this.subjectEl=d.subjectEl;let v=this.subjectSeg=Vl(d.subjectEl),j=(this.eventRange=v.eventRange).instance.instanceId;this.relevantEvents=Nm(x.getCurrentData().eventStore,j),p.minDistance=d.isTouch?0:y.eventDragMinDistance,p.delay=d.isTouch&&j!==h.props.eventSelection?vP(h):null,y.fixedMirrorParent?b.parentNode=y.fixedMirrorParent:b.parentNode=Yt(f,".fc"),b.revertDuration=y.dragRevertDuration;let S=h.isValidSegDownEl(f)&&!Yt(f,".fc-event-resizer");p.setIgnoreMove(!S),this.isDragging=S&&d.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=d=>{let f=this.component.context,h=this.eventRange,p=h.instance.instanceId;d.isTouch?p!==this.component.props.eventSelection&&f.dispatch({type:"SELECT_EVENT",eventInstanceId:p}):f.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(f.calendarApi.unselect(d),f.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new pt(f,h.def,h.instance),jsEvent:d.origEvent,view:f.viewApi}))},this.handleHitUpdate=(d,f)=>{if(!this.isDragging)return;let h=this.relevantEvents,p=this.hitDragging.initialHit,b=this.component.context,y=null,x=null,v=null,N=!1,j={affectedEvents:h,mutatedEvents:Rn(),isEvent:!0};if(d){y=d.context;let S=y.options;b===y||S.editable&&S.droppable?(x=yP(p,d,this.eventRange.instance.range.start,y.getCurrentData().pluginHooks.eventDragMutationMassagers),x&&(v=Sm(h,y.getCurrentData().eventUiBases,x,y),j.mutatedEvents=v,jS(j,d.dateProfile,y)||(N=!0,x=null,v=null,j.mutatedEvents=Rn()))):y=null}this.displayDrag(y,j),N?cm():dm(),f||(b===y&&Iu(p,d)&&(x=null),this.dragging.setMirrorNeedsRevert(!x),this.dragging.setMirrorIsVisible(!d||!this.subjectEl.getRootNode().querySelector(".fc-event-mirror")),this.receivingContext=y,this.validMutation=x,this.mutatedRelevantEvents=v)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=d=>{if(this.isDragging){let f=this.component.context,h=f.viewApi,{receivingContext:p,validMutation:b}=this,y=this.eventRange.def,x=this.eventRange.instance,v=new pt(f,y,x),N=this.relevantEvents,j=this.mutatedRelevantEvents,{finalHit:S}=this.hitDragging;if(this.clearDrag(),f.emitter.trigger("eventDragStop",{el:this.subjectEl,event:v,jsEvent:d.origEvent,view:h}),b){if(p===f){let R=new pt(f,j.defs[y.defId],x?j.instances[x.instanceId]:null);f.dispatch({type:"MERGE_EVENTS",eventStore:j});let w={oldEvent:v,event:R,relatedEvents:wr(j,f,x),revert(){f.dispatch({type:"MERGE_EVENTS",eventStore:N})}},D={};for(let C of f.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(D,C(b,f));f.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},w),D),{el:d.subjectEl,delta:b.datesDelta,jsEvent:d.origEvent,view:h})),f.emitter.trigger("eventChange",w)}else if(p){let R={event:v,relatedEvents:wr(N,f,x),revert(){f.dispatch({type:"MERGE_EVENTS",eventStore:N})}};f.emitter.trigger("eventLeave",Object.assign(Object.assign({},R),{draggedEl:d.subjectEl,view:h})),f.dispatch({type:"REMOVE_EVENTS",eventStore:N}),f.emitter.trigger("eventRemove",R);let w=j.defs[y.defId],D=j.instances[x.instanceId],C=new pt(p,w,D);p.dispatch({type:"MERGE_EVENTS",eventStore:j});let I={event:C,relatedEvents:wr(j,p,D),revert(){p.dispatch({type:"REMOVE_EVENTS",eventStore:j})}};p.emitter.trigger("eventAdd",I),d.isTouch&&p.dispatch({type:"SELECT_EVENT",eventInstanceId:x.instanceId}),p.emitter.trigger("drop",Object.assign(Object.assign({},rA(S.dateSpan,p)),{draggedEl:d.subjectEl,jsEvent:d.origEvent,view:S.context.viewApi})),p.emitter.trigger("eventReceive",Object.assign(Object.assign({},I),{draggedEl:d.subjectEl,view:S.context.viewApi}))}}else f.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:n}=this,{options:r}=n.context,i=this.dragging=new Vo(e.el);i.pointer.selector=qo.SELECTOR,i.touchScrollAllowed=!1,i.autoScroller.isEnabled=r.dragScroll;let c=this.hitDragging=new Mu(this.dragging,ig);c.useSubjectCenter=e.useEventCenter,c.emitter.on("pointerdown",this.handlePointerDown),c.emitter.on("dragstart",this.handleDragStart),c.emitter.on("hitupdate",this.handleHitUpdate),c.emitter.on("pointerup",this.handlePointerUp),c.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(e,n){let r=this.component.context,i=this.receivingContext;i&&i!==e&&(i===r?i.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:n.affectedEvents,mutatedEvents:Rn(),isEvent:!0}}):i.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:n})}clearDrag(){let e=this.component.context,{receivingContext:n}=this;n&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e!==n&&e.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}}qo.SELECTOR=".fc-event-draggable, .fc-event-resizable";function yP(t,e,n,r){let i=t.dateSpan,c=e.dateSpan,d=i.range.start,f=c.range.start,h={};i.allDay!==c.allDay&&(h.allDay=c.allDay,h.hasEnd=e.context.options.allDayMaintainDuration,c.allDay?d=ct(n):d=n);let p=El(d,f,t.context.dateEnv,t.componentId===e.componentId?t.largeUnit:null);p.milliseconds&&(h.allDay=!1);let b={datesDelta:p,standardProps:h};for(let y of r)y(b,t,e);return b}function vP(t){let{options:e}=t.context,n=e.eventLongPressDelay;return n==null&&(n=e.longPressDelay),n}class NP extends ni{constructor(e){super(e),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=c=>{let{component:d}=this,f=this.querySegEl(c),h=Vl(f),p=this.eventRange=h.eventRange;this.dragging.minDistance=d.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(c.origEvent.target)||c.isTouch&&this.component.props.eventSelection!==p.instance.instanceId)},this.handleDragStart=c=>{let{context:d}=this.component,f=this.eventRange;this.relevantEvents=Nm(d.getCurrentData().eventStore,this.eventRange.instance.instanceId);let h=this.querySegEl(c);this.draggingSegEl=h,this.draggingSeg=Vl(h),d.calendarApi.unselect(),d.emitter.trigger("eventResizeStart",{el:h,event:new pt(d,f.def,f.instance),jsEvent:c.origEvent,view:d.viewApi})},this.handleHitUpdate=(c,d,f)=>{let{context:h}=this.component,p=this.relevantEvents,b=this.hitDragging.initialHit,y=this.eventRange.instance,x=null,v=null,N=!1,j={affectedEvents:p,mutatedEvents:Rn(),isEvent:!0};c&&(c.componentId===b.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(b,c)||(x=EP(b,c,f.subjectEl.classList.contains("fc-event-resizer-start"),y.range))),x&&(v=Sm(p,h.getCurrentData().eventUiBases,x,h),j.mutatedEvents=v,jS(j,c.dateProfile,h)||(N=!0,x=null,v=null,j.mutatedEvents=null)),v?h.dispatch({type:"SET_EVENT_RESIZE",state:j}):h.dispatch({type:"UNSET_EVENT_RESIZE"}),N?cm():dm(),d||(x&&Iu(b,c)&&(x=null),this.validMutation=x,this.mutatedRelevantEvents=v)},this.handleDragEnd=c=>{let{context:d}=this.component,f=this.eventRange.def,h=this.eventRange.instance,p=new pt(d,f,h),b=this.relevantEvents,y=this.mutatedRelevantEvents;if(d.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:p,jsEvent:c.origEvent,view:d.viewApi}),this.validMutation){let x=new pt(d,y.defs[f.defId],h?y.instances[h.instanceId]:null);d.dispatch({type:"MERGE_EVENTS",eventStore:y});let v={oldEvent:p,event:x,relatedEvents:wr(y,d,h),revert(){d.dispatch({type:"MERGE_EVENTS",eventStore:b})}};d.emitter.trigger("eventResize",Object.assign(Object.assign({},v),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||Ve(0),endDelta:this.validMutation.endDelta||Ve(0),jsEvent:c.origEvent,view:d.viewApi})),d.emitter.trigger("eventChange",v)}else d.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:n}=e,r=this.dragging=new Vo(e.el);r.pointer.selector=".fc-event-resizer",r.touchScrollAllowed=!1,r.autoScroller.isEnabled=n.context.options.dragScroll;let i=this.hitDragging=new Mu(this.dragging,Am(e));i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(e){return Yt(e.subjectEl,".fc-event")}}function EP(t,e,n,r){let i=t.context.dateEnv,c=t.dateSpan.range.start,d=e.dateSpan.range.start,f=El(c,d,i,t.largeUnit);if(n){if(i.add(r.start,f)r.start)return{endDelta:f};return null}class jP{constructor(e){this.context=e,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=r=>{r.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=r=>{let i=this.context.options.unselectCancel,c=_j(r.origEvent);this.matchesCancel=!!Yt(c,i),this.matchesEvent=!!Yt(c,qo.SELECTOR)},this.onDocumentPointerUp=r=>{let{context:i}=this,{documentPointer:c}=this,d=i.getCurrentData();if(!c.wasTouchScroll){if(d.dateSelection&&!this.isRecentPointerDateSelect){let f=i.options.unselectAuto;f&&(!f||!this.matchesCancel)&&i.calendarApi.unselect(r)}d.eventSelection&&!this.matchesEvent&&i.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let n=this.documentPointer=new tA(document);n.shouldIgnoreMove=!0,n.shouldWatchScroll=!1,n.emitter.on("pointerdown",this.onDocumentPointerDown),n.emitter.on("pointerup",this.onDocumentPointerUp),e.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}}const SP={fixedMirrorParent:Z},AP={dateClick:Z,eventDragStart:Z,eventDragStop:Z,eventDrop:Z,eventResizeStart:Z,eventResizeStop:Z,eventResize:Z,drop:Z,eventReceive:Z,eventLeave:Z};Rm.dataAttrPrefix="";var wP=Wa({name:"@fullcalendar/interaction",componentInteractions:[gP,mP,qo,NP],calendarInteractions:[jP],elementDraggingImpl:Vo,optionRefiners:SP,listenerRefiners:AP});const hu=({ownerId:t,isConnected:e,onStatusChange:n})=>{const[r,i]=A.useState(!1),c=async()=>{i(!0);try{const f=await fetch(`/api/auth/google/url?dentistId=${t}`),h=await f.json();if(!f.ok||h.error){alert(`Erro: ${h.error||"Falha ao obter URL de autenticação"}`),i(!1);return}const{url:p}=h,b=600,y=700,x=window.screen.width/2-b/2,v=window.screen.height/2-y/2,N=window.open(p,"google-auth",`width=${b},height=${y},left=${x},top=${v}`),j=setInterval(()=>{(!N||N.closed)&&(clearInterval(j),i(!1),n&&n())},1e3)}catch(f){console.error("Erro ao conectar Google Agenda:",f),i(!1)}},d=async()=>{if(confirm("Deseja realmente desconectar esta agenda?")){i(!0);try{await fetch(`/api/auth/google/${t}`,{method:"DELETE"}),n&&n()}catch(f){console.error("Erro ao desconectar:",f)}finally{i(!1)}}};return e?s.jsxs("div",{className:"flex items-center gap-3 bg-emerald-50 border border-emerald-100 p-4 rounded-2xl",children:[s.jsx("div",{className:"p-2 bg-emerald-500 rounded-xl",children:s.jsx(pa,{size:18,className:"text-white"})}),s.jsxs("div",{className:"flex-1",children:[s.jsx("p",{className:"text-[10px] font-black text-emerald-800 uppercase tracking-tight",children:"Google Agenda Conectada"}),s.jsx("p",{className:"text-[9px] text-emerald-600 font-bold uppercase tracking-widest mt-0.5",children:"Sincronização Ativa"})]}),s.jsx("button",{onClick:d,disabled:r,className:"text-[9px] font-black text-red-500 hover:text-red-700 uppercase tracking-widest px-3 py-1 bg-white border border-red-100 rounded-lg shadow-sm transition-all",children:r?s.jsx(Ot,{size:12,className:"animate-spin"}):"Desconectar"})]}):s.jsxs("button",{onClick:c,disabled:r,className:"w-full group relative overflow-hidden flex items-center gap-4 bg-white border-2 border-gray-100 p-4 rounded-2xl hover:border-blue-500 hover:shadow-xl hover:shadow-blue-50/50 transition-all duration-300",children:[s.jsx("div",{className:"p-3 bg-gray-50 group-hover:bg-blue-600 rounded-xl transition-colors duration-300",children:s.jsx(jt,{size:20,className:"text-gray-400 group-hover:text-white transition-colors duration-300"})}),s.jsxs("div",{className:"text-left",children:[s.jsx("p",{className:"text-xs font-black text-gray-800 uppercase tracking-tight group-hover:text-blue-600",children:"Conectar Google Agenda"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-bold uppercase tracking-widest",children:"Sincronize horários externos"})]}),r&&s.jsx("div",{className:"absolute right-4",children:s.jsx(Ot,{size:18,className:"text-blue-600 animate-spin"})})]})},CP=({isOpen:t,onClose:e,dentists:n})=>{const[r,i]=A.useState(1),[c,d]=A.useState({clinicEmail:"",clinicCalendarId:"",googleApiKey:"",googleCalendarIds:{}}),[f,h]=A.useState(!1),[p,b]=A.useState([]),y=$e(),x=async()=>{try{const R=await(await fetch("/api/auth/google/status")).json();b(R)}catch(S){console.error("Erro ao buscar status do Google:",S)}};A.useEffect(()=>{t&&((async()=>{try{const R=await K.getSettings();d({clinicEmail:R.clinicEmail||"",clinicCalendarId:R.clinicCalendarId||"",googleApiKey:R.googleApiKey||"",googleCalendarIds:R.googleCalendarIds||{}})}catch(R){console.error("Erro ao carregar configurações:",R)}})(),x(),i(1))},[t]);const v=S=>{const R=`/api/auth/google/url?dentistId=${S}`;navigator.clipboard.writeText(R),y.success("LINK DE CONVITE COPIADO!")},N=async()=>{h(!0);try{await K.saveSettings(c),y.success("CONFIGURAÇÕES SALVAS COM SUCESSO!"),e()}catch{y.error("ERRO AO SALVAR CONFIGURAÇÕES.")}finally{h(!1)}};if(!t)return null;const j=3;return s.jsxs("div",{className:"fixed inset-0 bg-black/60 z-[60] flex items-center justify-center backdrop-blur-md p-0",children:[s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-[2.5rem] flex flex-col overflow-hidden border border-gray-100 animate-in fade-in zoom-in-95 duration-300",children:[s.jsxs("div",{className:"px-10 py-8 border-b border-gray-50 flex justify-between items-center bg-gradient-to-br from-gray-50 to-white",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"p-3 bg-blue-600 rounded-2xl shadow-lg shadow-blue-200",children:s.jsx(zd,{size:24,className:"text-white animate-spin-slow"})}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-xl font-black text-gray-900 uppercase tracking-tighter",children:"Configurações da Agenda"}),s.jsx("p",{className:"text-[10px] font-bold text-gray-400 uppercase tracking-widest mt-0.5",children:"Integrações e Comunicação"})]})]}),s.jsx("button",{onClick:e,className:"p-2 hover:bg-gray-100 rounded-xl transition-colors text-gray-400",children:s.jsx(Qe,{size:24})})]}),s.jsx("div",{className:"h-1.5 w-full bg-gray-100 flex",children:s.jsx("div",{className:"h-full bg-blue-600 transition-all duration-500 ease-out shadow-[0_0_10px_rgba(37,99,235,0.5)]",style:{width:`${r/j*100}%`}})}),s.jsx("div",{className:"flex-1 relative overflow-hidden bg-white",children:s.jsxs("div",{className:"absolute inset-0 flex transition-transform duration-500 ease-in-out transform-gpu",style:{transform:`translateX(-${(r-1)*100}%)`},children:[s.jsxs("div",{className:"w-full shrink-0 p-10 animate-in fade-in duration-700",children:[s.jsxs("div",{className:"flex items-center gap-3 mb-8",children:[s.jsx(_g,{className:"text-blue-600",size:24}),s.jsx("h3",{className:"text-sm font-black text-gray-800 uppercase tracking-tight",children:"E-mails da Clínica"})]}),s.jsx("div",{className:"space-y-6",children:s.jsxs("div",{className:"space-y-2",children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-[0.2em] ml-1",children:"E-mail para Notificações"}),s.jsx("input",{type:"email",placeholder:"EX: CONTATO@CLINICA.COM",className:"w-full bg-gray-50 border-2 border-transparent focus:border-blue-600 focus:bg-white rounded-2xl p-4 font-bold text-gray-800 outline-none transition-all shadow-sm",value:c.clinicEmail,onChange:S=>d({...c,clinicEmail:S.target.value.toUpperCase()})}),s.jsx("p",{className:"text-[10px] text-gray-400 italic ml-1",children:"* Este e-mail será usado para alertas de sistema e envio de comprovantes."})]})})]}),s.jsxs("div",{className:"w-full shrink-0 p-10 animate-in fade-in duration-700 overflow-y-auto custom-scrollbar",children:[s.jsxs("div",{className:"flex justify-between items-center mb-6",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(jt,{className:"text-emerald-600",size:24}),s.jsx("h3",{className:"text-sm font-black text-gray-800 uppercase tracking-tight",children:"Configuração Google Agenda"})]}),s.jsx("a",{href:"https://console.cloud.google.com/apis/library/calendar-json.googleapis.com",target:"_blank",rel:"noreferrer",className:"text-[9px] font-black text-white bg-black px-3 py-1.5 rounded-lg hover:opacity-80 transition-all uppercase tracking-widest",children:"1. Ativar API"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-6 mb-8",children:[s.jsx("div",{className:"space-y-4",children:s.jsxs("div",{className:"bg-emerald-50 rounded-2xl p-4 border border-emerald-100",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[s.jsx("div",{className:"w-5 h-5 bg-emerald-600 text-white text-[10px] font-black flex items-center justify-center rounded-full",children:"1"}),s.jsx("span",{className:"text-[10px] font-black text-emerald-800 uppercase",children:"Google API Key"})]}),s.jsx("input",{type:"password",placeholder:"COLE A CHAVE AQUI",className:"w-full bg-white border border-emerald-200 rounded-xl px-4 py-2 text-xs font-bold text-gray-700 outline-none focus:ring-2 focus:ring-emerald-100",value:c.googleApiKey,onChange:S=>d({...c,googleApiKey:S.target.value})}),s.jsx("a",{href:"https://console.cloud.google.com/apis/credentials",target:"_blank",rel:"noreferrer",className:"text-[8px] font-black text-emerald-600 hover:underline mt-2 inline-block uppercase",children:"Criar Credenciais ➔"})]})}),s.jsx("div",{className:"space-y-4",children:s.jsxs("div",{className:"bg-blue-50 rounded-2xl p-4 border border-blue-100",children:[s.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[s.jsx("div",{className:"w-5 h-5 bg-blue-600 text-white text-[10px] font-black flex items-center justify-center rounded-full",children:"2"}),s.jsx("span",{className:"text-[10px] font-black text-blue-800 uppercase",children:"ID Agenda Clínica"})]}),s.jsx("input",{type:"text",placeholder:"ID DA AGENDA",className:"w-full bg-white border border-blue-200 rounded-xl px-4 py-2 text-xs font-bold text-gray-700 outline-none focus:ring-2 focus:ring-blue-100",value:c.clinicCalendarId,onChange:S=>d({...c,clinicCalendarId:S.target.value})}),s.jsx("a",{href:"https://calendar.google.com/calendar/r/settings",target:"_blank",rel:"noreferrer",className:"text-[8px] font-black text-blue-600 hover:underline mt-2 inline-block uppercase",children:"Pegar ID nas Configs ➔"})]})})]}),s.jsxs("div",{className:"bg-gray-900 rounded-3xl p-6 text-white",children:[s.jsx("h4",{className:"text-[10px] font-black text-blue-400 uppercase tracking-[0.2em] mb-4",children:"Guia de Integração"}),s.jsxs("ul",{className:"space-y-3",children:[s.jsxs("li",{className:"flex gap-3 text-xs",children:[s.jsx(pa,{size:16,className:"text-emerald-500 shrink-0"}),s.jsxs("span",{className:"text-gray-300",children:["Crie um projeto no ",s.jsx("strong",{children:"Google Cloud Console"}),"."]})]}),s.jsxs("li",{className:"flex gap-3 text-xs",children:[s.jsx(pa,{size:16,className:"text-emerald-500 shrink-0"}),s.jsxs("span",{className:"text-gray-300",children:["No menu 'Biblioteca', ative a ",s.jsx("strong",{children:"Google Calendar API"}),"."]})]}),s.jsxs("li",{className:"flex gap-3 text-xs",children:[s.jsx(pa,{size:16,className:"text-emerald-500 shrink-0"}),s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsxs("span",{className:"text-gray-300",children:["Pegue o ",s.jsx("strong",{children:"ID da Agenda"})," nas configurações (Integrar agenda)."]}),s.jsx("a",{href:"https://calendar.google.com/calendar/r/settings",target:"_blank",rel:"noreferrer",className:"text-[9px] font-black text-blue-400 hover:underline flex items-center gap-1 uppercase",children:"Abrir Configurações de Agenda ➔"})]})]}),s.jsxs("li",{className:"flex gap-3 text-xs",children:[s.jsx(pa,{size:16,className:"text-emerald-500 shrink-0"}),s.jsxs("span",{className:"text-gray-300",children:["No Google Agenda, torne a agenda ",s.jsx("strong",{children:"Pública"})," nas autorizações de acesso."]})]})]})]})]}),s.jsxs("div",{className:"w-full shrink-0 p-10 animate-in fade-in duration-700 overflow-hidden flex flex-col",children:[s.jsxs("div",{className:"flex justify-between items-center mb-8",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(jt,{className:"text-emerald-600",size:24}),s.jsx("h3",{className:"text-sm font-black text-gray-800 uppercase tracking-tight",children:"Agendas dos Dentistas"})]}),s.jsx("a",{href:"https://calendar.google.com/calendar/u/0/r/settings",target:"_blank",rel:"noreferrer",className:"text-[9px] font-black text-white bg-gray-900 px-3 py-1.5 rounded-lg hover:bg-black transition-colors uppercase tracking-widest",children:"Abrir Google Calendar"})]}),s.jsxs("div",{className:"space-y-4 flex-1 overflow-y-auto pr-4 custom-scrollbar",children:[s.jsxs("div",{className:"bg-blue-50/50 p-4 rounded-2xl border border-blue-100 mb-2",children:[s.jsx("p",{className:"text-[10px] text-blue-800 font-bold mb-1 uppercase tracking-wider",children:"Nova Integração Inteligente (OAuth2)"}),s.jsx("p",{className:"text-[10px] text-blue-600 italic",children:"Agora você pode conectar agendas sem precisar torná-las públicas ou usar API Keys."})]}),s.jsxs("div",{className:"space-y-3 mb-6",children:[s.jsx("h4",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1",children:"Sua Conta (Administrador)"}),s.jsx(hu,{ownerId:"admin",isConnected:p.some(S=>S.owner_id==="admin"||S.owner_id.includes("@")),onStatusChange:x})]}),s.jsxs("div",{className:"space-y-4",children:[s.jsx("h4",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1",children:"Contas dos Dentistas"}),n!=null&&n.length?n.map(S=>{var w;const R=p.some(D=>D.owner_id===S.id);return s.jsxs("div",{className:"bg-gray-50 rounded-2xl p-4 border border-transparent hover:border-gray-200 transition-all",children:[s.jsxs("div",{className:"flex items-center justify-between mb-4",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-3 h-3 rounded-full",style:{backgroundColor:S.corAgenda}}),s.jsx("span",{className:"text-xs font-black text-gray-800 uppercase",children:S.nome})]}),R?s.jsx("span",{className:"text-[9px] font-black text-emerald-600 bg-emerald-100 px-2 py-1 rounded-lg uppercase",children:"Conectado"}):s.jsx("span",{className:"text-[9px] font-black text-gray-400 uppercase",children:"Não Vinculado"})]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx("div",{className:"flex-1",children:s.jsx(hu,{ownerId:S.id,isConnected:R,onStatusChange:x})}),!R&&s.jsx("button",{onClick:()=>v(S.id),className:"p-4 bg-gray-100 text-gray-600 rounded-2xl hover:bg-gray-200 transition-all flex items-center justify-center group",title:"Gerar Link para o Dentista",children:s.jsx(WN,{size:18,className:"group-hover:scale-110 transition-transform"})})]}),s.jsxs("div",{className:"mt-3 pt-3 border-t border-gray-200/50",children:[s.jsx("label",{className:"text-[9px] font-bold text-gray-400 uppercase ml-1",children:"ID Alternativo (API Key/Legado)"}),s.jsx("input",{type:"text",placeholder:"ID DA AGENDA GOOGLE (SE NÃO USAR OAUTH2)",className:"w-full bg-white/50 border border-gray-200 rounded-xl px-4 py-2 text-[10px] font-bold text-gray-500 outline-none focus:ring-1 focus:ring-blue-100 mt-1",value:((w=c.googleCalendarIds)==null?void 0:w[S.id])||"",onChange:D=>d({...c,googleCalendarIds:{...c.googleCalendarIds,[S.id]:D.target.value}})})]})]},S.id)}):s.jsx("p",{className:"text-center text-xs text-gray-400 py-10 uppercase font-bold",children:"Nenhum dentista cadastrado."})]})]})]})]})}),s.jsxs("div",{className:"px-10 py-8 bg-gray-50/50 border-t border-gray-100 flex justify-between items-center",children:[s.jsx("div",{className:"flex gap-2",children:r>1&&s.jsxs("button",{onClick:()=>i(r-1),className:"flex items-center gap-2 px-6 py-3 text-xs font-black text-gray-500 hover:text-gray-900 bg-white rounded-2xl border border-gray-200 hover:shadow-md transition-all uppercase tracking-widest",children:[s.jsx($a,{size:16})," Anterior"]})}),s.jsx("div",{className:"flex gap-4",children:ri(r+1),className:"flex items-center gap-2 px-8 py-4 bg-blue-600 text-white rounded-[1.5rem] text-xs font-black uppercase tracking-widest hover:bg-blue-700 hover:shadow-xl hover:shadow-blue-200 transition-all shadow-lg shadow-blue-100",children:["Próximo ",s.jsx(Pa,{size:16})]}):s.jsx("button",{onClick:N,disabled:f,className:"flex items-center gap-2 px-10 py-4 bg-emerald-600 text-white rounded-[1.5rem] text-xs font-black uppercase tracking-widest hover:bg-emerald-700 hover:shadow-xl hover:shadow-emerald-200 transition-all shadow-lg shadow-emerald-100 disabled:bg-gray-400",children:f?"Salvando...":s.jsxs(s.Fragment,{children:[s.jsx(Po,{size:16})," Salvar Tudo"]})})})]})]}),s.jsx("style",{children:` - .animate-spin-slow { - animation: spin 8s linear infinite; - } - @keyframes spin { - from { transform: rotate(0deg); } - to { transform: rotate(360deg); } - } - .custom-scrollbar::-webkit-scrollbar { - width: 4px; - } - .custom-scrollbar::-webkit-scrollbar-track { - background: #f1f1f1; - border-radius: 10px; - } - .custom-scrollbar::-webkit-scrollbar-thumb { - background: #cbd5e1; - border-radius: 10px; - } - .custom-scrollbar::-webkit-scrollbar-thumb:hover { - background: #94a3b8; - } - `})]})};function DP(t,e){const[n,r]=A.useState(t);return A.useEffect(()=>{const i=setTimeout(()=>{r(t)},e);return()=>clearTimeout(i)},[t,e]),n}const OP=({isOpen:t,onClose:e,onSave:n,dentists:r,initialDate:i,initialAppointment:c})=>{var te;const[d,f]=A.useState(null),[h,p]=A.useState(""),[b,y]=A.useState(15),[x,v]=A.useState(i?i.split("T")[0]:new Date().toISOString().split("T")[0]),[N,j]=A.useState(i?new Date(i).toTimeString().substring(0,5):""),[S,R]=A.useState((te=r==null?void 0:r[0])==null?void 0:te.id),[w,D]=A.useState(""),[C,I]=A.useState(!1),L=DP(h,400),F=A.useCallback(()=>K.getPacientes(L).then(re=>Array.isArray(re.data)?re.data:[]),[L]),{data:Y,isLoading:$}=Ie(F,[L]),{data:M,refresh:H}=Ie(K.getAgendamentos),ne=K.getActiveWorkspace(),{data:ee}=Ie(()=>S&&ne?K.getHorariosByDentista(S,ne.id):Promise.resolve([]),[S,ne==null?void 0:ne.id]),he=$e();A.useEffect(()=>{if(t)if(c){f({nome:c.pacienteNome,cpf:"",id:"temp"});const re=new Date(c.start),T=new Date(c.end);v(re.toISOString().split("T")[0]),j(re.toTimeString().substring(0,5)),y((T.getTime()-re.getTime())/6e4),R(c.dentistaId),D(c.procedimento)}else f(null),p(""),v(i?i.split("T")[0]:new Date().toISOString().split("T")[0]),j(i?new Date(i).toTimeString().substring(0,5):""),D(""),y(15),r&&r.length>0&&R(r[0].id)},[t,i,r,c]),A.useEffect(()=>{if(!t)return;const re=T=>{T.key==="Escape"&&e()};return document.addEventListener("keydown",re),()=>document.removeEventListener("keydown",re)},[t,e]);const pe=r==null?void 0:r.find(re=>re.id===S),z=A.useCallback(()=>{const re=[];if(!S||!x)return re;const T=(M??[]).filter(se=>se.dentistaId===S&&new Date(se.start).toISOString().split("T")[0]===x&&se.id!==(c==null?void 0:c.id)).map(se=>({start:new Date(se.start).getHours()*60+new Date(se.start).getMinutes(),end:new Date(se.end).getHours()*60+new Date(se.end).getMinutes()})),X=new Date(x).getUTCDay(),le=(ee==null?void 0:ee.filter(se=>se.dia_semana===X&&se.ativo))||[];if(le.length===0){for(let se=480;se<1080;se+=15)if(!T.some(Ae=>se>=Ae.start&&seLe>=Wt.start&&Le{f(re),p(""),I(!1)},G=async re=>{if(re.preventDefault(),!d||!x||!N||!S||!w){he.error("PREENCHA TODOS OS CAMPOS PARA AGENDAR.");return}const T=new Date(`${x}T${N}:00`),X=new Date(T.getTime()+b*6e4);try{const le={pacienteNome:d.nome,dentistaId:S,start:T.toISOString(),end:X.toISOString(),status:(c==null?void 0:c.status)||"Pendente",procedimento:w.toUpperCase()};c!=null&&c.id?(await K.atualizarAgendamento(c.id,le),he.success(`AGENDAMENTO DE ${d.nome} ATUALIZADO!`)):(await K.salvarAgendamento(le),he.success(`AGENDAMENTO PARA ${d.nome} SALVO!`)),H(),n()}catch{he.error("ERRO AO SALVAR AGENDAMENTO.")}};return t?s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("form",{onSubmit:G,className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-orange-50 to-white",children:[s.jsxs("h2",{className:"text-lg font-bold text-gray-800 flex items-center gap-2 uppercase",children:[s.jsx(jt,{size:22,className:"text-orange-500"})," AGENDAR CONSULTA"]}),s.jsx("button",{type:"button",onClick:e,className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:[s.jsxs("div",{className:"mb-6",children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"PACIENTE"}),d?s.jsxs("div",{className:"w-full lg:w-1/2 bg-green-50 border border-green-200 p-3 lg:p-4 rounded-lg mt-2 flex justify-between items-center",children:[s.jsx("span",{className:"font-bold text-green-800 uppercase text-sm lg:text-base",children:d.nome}),s.jsx("button",{type:"button",onClick:()=>f(null),className:"text-xs font-bold bg-blue-100 text-blue-700 hover:bg-blue-200 px-3 py-1.5 rounded-md transition-colors",children:"ALTERAR"})]}):s.jsxs("div",{className:"relative mt-2",children:[s.jsx("input",{type:"text",value:h,onChange:re=>p(re.target.value.toUpperCase()),onFocus:()=>I(!0),onBlur:()=>setTimeout(()=>I(!1),200),placeholder:"DIGITE O NOME OU CPF...",className:"w-full lg:w-1/2 bg-gray-100 p-3 lg:p-4 rounded-lg font-bold text-gray-800 uppercase focus:border-blue-500 outline-none border-2 border-transparent focus:border-2 text-sm lg:text-base"}),C&&L&&s.jsxs("ul",{className:"absolute z-10 w-full lg:w-1/2 bg-white border border-gray-300 rounded-lg mt-1 max-h-48 overflow-y-auto shadow-lg",children:[$&&s.jsx("li",{className:"p-3 text-sm text-gray-500",children:"BUSCANDO..."}),Y==null?void 0:Y.map(re=>s.jsxs("li",{onMouseDown:()=>oe(re),className:"p-3 hover:bg-gray-100 cursor-pointer uppercase font-semibold text-sm",children:[re.nome," (",re.cpf,")"]},re.id))]})]})]}),d&&s.jsx("div",{className:"animate-in fade-in space-y-6 lg:space-y-0",children:s.jsxs("div",{className:"lg:grid lg:grid-cols-3 lg:gap-x-8 lg:gap-y-6 space-y-5 lg:space-y-0",children:[s.jsxs("div",{className:"space-y-5",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"DENTISTA RESPONSÁVEL"}),s.jsxs("div",{className:"flex items-center gap-3 mt-2",children:[s.jsx("select",{value:S,onChange:re=>R(re.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 lg:p-3 bg-white uppercase-select text-sm",children:r==null?void 0:r.map(re=>s.jsx("option",{value:re.id,children:re.nome},re.id))}),s.jsx("div",{className:"w-7 h-7 rounded-full flex-shrink-0 border-2 border-white shadow-md",style:{backgroundColor:(pe==null?void 0:pe.corAgenda)||"#ccc"}})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"DATA"}),s.jsx("input",{type:"date",value:x,onChange:re=>v(re.target.value),className:"w-full mt-2 border border-gray-300 bg-white text-gray-800 rounded-lg p-2.5 lg:p-3 text-sm"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"DURAÇÃO"}),s.jsxs("select",{value:b,onChange:re=>y(Number(re.target.value)),className:"w-full mt-2 border border-gray-300 rounded-lg p-2.5 lg:p-3 bg-white uppercase-select text-sm",children:[s.jsx("option",{value:15,children:"15 MIN"}),s.jsx("option",{value:30,children:"30 MIN"}),s.jsx("option",{value:45,children:"45 MIN"}),s.jsx("option",{value:60,children:"60 MIN"})]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"PROCEDIMENTO"}),s.jsx("input",{type:"text",value:w,onChange:re=>D(re.target.value.toUpperCase()),placeholder:"EX: AVALIAÇÃO, LIMPEZA...",className:"w-full mt-2 border border-gray-300 bg-white text-gray-800 rounded-lg p-2.5 lg:p-3 uppercase-input placeholder-gray-400 text-sm"})]})]}),s.jsxs("div",{className:"lg:col-span-2",children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"HORÁRIOS DISPONÍVEIS"}),s.jsxs("div",{className:"grid grid-cols-6 lg:grid-cols-8 xl:grid-cols-10 gap-2 mt-3",children:[z.map(re=>s.jsx("button",{type:"button",onClick:()=>j(re),className:`py-2.5 lg:py-3 rounded-lg text-sm font-bold border transition-all duration-150 ${N===re?"bg-blue-600 text-white border-blue-600 shadow-md scale-105":"bg-white text-gray-800 border-gray-300 hover:border-blue-400 hover:bg-blue-50"}`,children:re},re)),z.length===0&&s.jsx("p",{className:"col-span-6 lg:col-span-8 xl:col-span-10 text-center text-sm text-gray-400 p-8 bg-gray-50 rounded-lg border border-dashed border-gray-200 uppercase font-bold",children:"NENHUM HORÁRIO DISPONÍVEL."})]})]})]})})]}),s.jsxs("div",{className:"px-5 py-4 bg-gray-50 border-t border-gray-200 flex justify-end gap-3 flex-shrink-0",children:[s.jsx("button",{type:"button",onClick:e,className:"px-8 py-2.5 bg-gray-200 hover:bg-gray-300 text-gray-800 font-bold rounded-lg transition-colors text-sm uppercase",children:"CANCELAR"}),s.jsxs("button",{type:"submit",disabled:!d,className:"px-10 py-2.5 bg-orange-500 hover:bg-orange-600 text-white font-bold rounded-lg shadow-sm transition-colors text-sm uppercase disabled:bg-gray-400 disabled:cursor-not-allowed flex items-center gap-2",children:[s.jsx(jt,{size:16})," CONFIRMAR"]})]})]})}):null},RP=({onNavigate:t})=>{var pe;const{data:e,refresh:n}=Ie(K.getAgendamentos),{data:r,refresh:i}=Ie(K.getDentistas),{data:c,refresh:d}=Ie(K.getGoogleEvents),[f,h]=A.useState([]),[p,b]=A.useState(!1),[y,x]=A.useState(!1),[v,N]=A.useState(null),[j,S]=A.useState(null),[R,w]=A.useState(!1),D=$e();A.useEffect(()=>{var z;if(e&&r){const oe=K.getCurrentRole(),G=K.getCurrentUser(),te=oe==="dentista",re=(z=r.find(le=>le.email===G))==null?void 0:z.id;let T=e;te&&(T=e.filter(le=>le.dentistaId===re));const X=T.map(le=>{const se=r.find(Ne=>Ne.id===le.dentistaId);return{id:le.id,title:`${le.pacienteNome} - ${le.procedimento}`,start:le.start,end:le.end,backgroundColor:le.status==="Faltou"?"#ef4444":se?se.corAgenda:"#94a3b8",borderColor:le.status==="Faltou"?"#ef4444":se?se.corAgenda:"#94a3b8",extendedProps:{...le,isGoogle:!1,dentistaNome:se==null?void 0:se.nome}}});if(c&&c.length>0){let le=c;te&&(le=c.filter(se=>se.extendedProps.owner_id===G)),X.push(...le)}h(X)}},[e,r,c]);const C=z=>{N(z),b(!0)},I=z=>{if(z.event.extendedProps.isGoogle){D.info(`EVENTO DO GOOGLE CALENDAR: ${z.event.title}`);return}const oe=z.event.extendedProps;S(oe),w(!0)},L=async(z,oe)=>{try{await K.atualizarAgendamento(z,{status:oe}),D.success(`STATUS ATUALIZADO PARA ${oe.toUpperCase()}`),n(),w(!1)}catch{D.error("ERRO AO ATUALIZAR STATUS.")}},F=async z=>{if(confirm("DESEJA REALMENTE EXCLUIR ESTE AGENDAMENTO?"))try{await K.excluirAgendamento(z),D.success("AGENDAMENTO EXCLUÍDO!"),n(),w(!1)}catch{D.error("ERRO AO EXCLUIR AGENDAMENTO.")}},Y=()=>{n(),d(),b(!1),S(null)},$=async z=>{if(!z.destination||!r)return;const oe=Array.from(r),[G]=oe.splice(z.source.index,1);oe.splice(z.destination.index,0,G);const te=oe.map((re,T)=>({id:re.id,ordem:T}));try{await K.reorderDentistas(te),D.success("ORDEM DOS DENTISTAS ATUALIZADA!"),i()}catch{D.error("ERRO AO REORDENAR DENTISTAS.")}},M=K.getCurrentRole(),H=K.getCurrentUser(),ne=sm(),ee=async()=>{if(!(!j||!t)){try{const z=await K.getPacientes(j.pacienteNome),oe=Array.isArray(z)?z:(z==null?void 0:z.data)??[];oe.length>0?ne.setPaciente(oe[0]):ne.setPendingSearch(j.pacienteNome)}catch{ne.setPendingSearch(j.pacienteNome)}w(!1),t("lancar-gto")}},he=r==null?void 0:r.filter(z=>M==="admin"||M==="donoclinica"||M==="funcionario"?!0:M==="dentista"?z.email===H:!1);return s.jsxs("div",{className:"space-y-6",children:[s.jsx(fn,{title:"AGENDA CLÍNICA",children:s.jsxs("div",{className:"flex gap-4 items-center",children:[s.jsx(Jl,{onDragEnd:$,children:s.jsx(ti,{droppableId:"dentists-legend",direction:"horizontal",children:z=>s.jsxs("div",{...z.droppableProps,ref:z.innerRef,className:"hidden lg:flex gap-2 items-center",children:[he==null?void 0:he.map((oe,G)=>s.jsx(ei,{draggableId:oe.id,index:G,isDragDisabled:M==="dentista",children:(te,re)=>s.jsxs("div",{ref:te.innerRef,...te.draggableProps,...te.dragHandleProps,className:`flex items-center gap-1.5 text-[10px] text-gray-700 bg-white border border-gray-200 px-3 py-1.5 rounded-full uppercase font-bold shadow-sm transition-all ${M!=="dentista"?"cursor-grab active:cursor-grabbing hover:border-gray-300":""} ${re.isDragging?"ring-2 ring-blue-500 scale-105 shadow-lg":""}`,children:[M!=="dentista"&&s.jsx(Ql,{size:12,className:"text-gray-400"}),s.jsx("div",{className:"w-2.5 h-2.5 rounded-full shadow-inner",style:{backgroundColor:oe.corAgenda}}),oe.nome]})},oe.id)),z.placeholder]})})}),(M==="admin"||M==="donoclinica")&&s.jsx("button",{onClick:()=>x(!0),className:"p-2.5 bg-white text-gray-400 hover:text-blue-600 border border-gray-200 rounded-xl transition-all hover:border-blue-200 hover:shadow-sm",children:s.jsx(zd,{size:20})}),M!=="paciente"&&s.jsxs("button",{onClick:()=>{N({dateStr:new Date().toISOString()}),b(!0)},className:"bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-bold uppercase flex items-center gap-2 hover:bg-blue-700 shadow-sm transition-colors",children:[s.jsx(gt,{size:16})," NOVO AGENDAMENTO"]})]})}),s.jsx("div",{className:"bg-white rounded-xl shadow-sm border border-gray-200 p-4 relative",style:{height:"750px"},children:s.jsx(GS,{plugins:[yz,sP,wP],initialView:"timeGridWeek",headerToolbar:{left:"prev,next today",center:"title",right:"dayGridMonth,timeGridWeek,timeGridDay"},locale:"pt-br",buttonText:{today:"HOJE",month:"MÊS",week:"SEMANA",day:"DIA"},slotMinTime:"08:00:00",slotMaxTime:"19:00:00",allDaySlot:!1,events:f,dateClick:C,eventClick:I,height:"100%",slotLabelFormat:{hour:"2-digit",minute:"2-digit",hour12:!1},eventContent:z=>{const oe=z.event.extendedProps.isGoogle;return s.jsxs("div",{className:"p-0.5 overflow-hidden uppercase h-full",children:[s.jsx("div",{className:"text-[10px] font-bold",children:z.timeText}),oe?s.jsx("div",{className:"text-[10px] font-black leading-tight break-words",children:z.event.title}):s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"text-xs truncate font-bold",children:z.event.extendedProps.pacienteNome}),s.jsx("div",{className:"text-[10px] truncate opacity-90",children:z.event.extendedProps.procedimento})]})]})}})}),R&&j&&s.jsx("div",{className:"fixed inset-0 bg-black/40 z-[70] flex items-center justify-center backdrop-blur-sm p-0 animate-in fade-in duration-200",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-[2rem] flex flex-col overflow-hidden border border-gray-100",children:[s.jsxs("div",{className:"px-8 py-6 border-b border-gray-50 flex justify-between items-center bg-gray-50/30",children:[s.jsxs("div",{className:"flex gap-2",children:[s.jsx("button",{onClick:()=>{w(!1),b(!0)},className:"p-2.5 bg-white text-gray-400 hover:text-blue-600 rounded-xl border border-gray-100 hover:shadow-md transition-all group",title:"EDITAR",children:s.jsx(Uo,{size:18,className:"group-hover:scale-110 transition-transform"})}),s.jsx("button",{onClick:()=>F(j.id),className:"p-2.5 bg-white text-gray-400 hover:text-red-600 rounded-xl border border-gray-100 hover:shadow-md transition-all group",title:"EXCLUIR",children:s.jsx(Qt,{size:18,className:"group-hover:scale-110 transition-transform"})})]}),s.jsx("button",{onClick:()=>w(!1),className:"p-2 hover:bg-gray-100 rounded-full transition-colors text-gray-400",children:s.jsx(Qe,{size:24})})]}),s.jsxs("div",{className:"p-10 space-y-8",children:[s.jsxs("div",{className:"flex items-start gap-5",children:[s.jsx("div",{className:"p-4 bg-blue-50 rounded-2xl",children:s.jsx(Bo,{size:28,className:"text-blue-600"})}),s.jsxs("div",{className:"space-y-1",children:[s.jsx("h3",{className:"text-xl font-black text-gray-900 leading-none uppercase tracking-tighter",children:j.pacienteNome}),s.jsxs("div",{className:"flex items-center gap-2 text-[10px] font-bold text-gray-400 uppercase tracking-widest mt-2 bg-gray-100 px-3 py-1 rounded-full w-fit",children:[s.jsx(aa,{size:12,className:"text-blue-400"})," ",j.procedimento]})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-8 py-6 border-y border-gray-50",children:[s.jsxs("div",{className:"space-y-3",children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"Data e Hora"}),s.jsxs("div",{className:"flex items-center gap-2 text-sm font-bold text-gray-700",children:[s.jsx(wC,{size:16,className:"text-blue-500"}),new Date(j.start).toLocaleDateString("pt-BR",{weekday:"long",day:"numeric",month:"long"})]}),s.jsxs("div",{className:"flex items-center gap-2 text-sm font-bold text-gray-700",children:[s.jsx(Yl,{size:16,className:"text-blue-500"}),new Date(j.start).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})]})]}),s.jsxs("div",{className:"space-y-3",children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"Profissional"}),s.jsxs("div",{className:"flex items-center gap-2 text-sm font-bold text-gray-700",children:[s.jsx("div",{className:"w-4 h-4 rounded-full border-2 border-white shadow-sm",style:{backgroundColor:(pe=r==null?void 0:r.find(z=>z.id===j.dentistaId))==null?void 0:pe.corAgenda}}),j.dentistaNome]})]})]}),s.jsxs("div",{className:"space-y-4",children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1",children:"Status do Atendimento"}),s.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[s.jsxs("button",{onClick:()=>L(j.id,"Faltou"),className:`flex items-center justify-center gap-2 py-4 rounded-2xl text-xs font-black uppercase tracking-widest transition-all border-2 ${j.status==="Faltou"?"bg-red-50 text-red-600 border-red-200":"bg-white border-gray-100 text-gray-500 hover:border-red-200 hover:text-red-500"}`,children:[s.jsx(bu,{size:16})," Marcar Falta"]}),s.jsxs("button",{onClick:()=>L(j.id,"Confirmado"),className:`flex items-center justify-center gap-2 py-4 rounded-2xl text-xs font-black uppercase tracking-widest transition-all border-2 ${j.status==="Confirmado"?"bg-emerald-50 text-emerald-600 border-emerald-200":"bg-white border-gray-100 text-gray-500 hover:border-emerald-200 hover:text-emerald-500"}`,children:[s.jsx(pa,{size:16})," Confirmar"]})]})]})]}),s.jsxs("div",{className:"px-10 py-8 bg-gray-50/50 border-t border-gray-100 flex gap-4",children:[t&&M!=="paciente"&&s.jsx("button",{onClick:ee,className:"flex-1 py-4 bg-emerald-600 text-white rounded-2xl text-xs font-black uppercase tracking-widest hover:bg-emerald-700 hover:shadow-xl hover:shadow-emerald-200 transition-all shadow-lg shadow-emerald-100",children:"ATENDER PACIENTE"}),s.jsx("button",{onClick:()=>{w(!1),b(!0)},className:"flex-1 py-4 bg-blue-600 text-white rounded-2xl text-xs font-black uppercase tracking-widest hover:bg-blue-700 hover:shadow-xl hover:shadow-blue-200 transition-all shadow-lg shadow-blue-100",children:"Reagendar Consulta"})]})]})}),s.jsx("style",{children:` - .animate-in { animation: animate-in 0.2s ease-out; } - @keyframes animate-in { - from { opacity: 0; transform: scale(0.95); } - to { opacity: 1; transform: scale(1); } - } - .custom-scrollbar::-webkit-scrollbar { width: 4px; } - .custom-scrollbar::-webkit-scrollbar-track { background: #f1f1f1; } - .custom-scrollbar::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 10px; } - `}),s.jsx(OP,{isOpen:p,onClose:()=>{b(!1),S(null)},onSave:Y,dentists:r,initialDate:v==null?void 0:v.dateStr,initialAppointment:j}),s.jsx(CP,{isOpen:y,onClose:()=>x(!1),dentists:r})]})};function lA(t){if(!t)return null;const e=new Date(t),n=new Date;let r=n.getFullYear()-e.getFullYear();const i=n.getMonth()-e.getMonth();return(i<0||i===0&&n.getDate(){var r;const e=lA(t.dataNascimento),n=TP(e);return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl p-5 shadow-sm",children:[s.jsxs("div",{className:"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-14 h-14 bg-purple-100 text-purple-600 rounded-full flex items-center justify-center font-bold text-lg flex-shrink-0",children:t.pacienteNome.substring(0,2)}),s.jsxs("div",{children:[s.jsxs("h2",{className:"text-xl font-bold text-gray-900 uppercase",children:[t.pacienteNome," ",e!==null&&s.jsxs("span",{className:"text-gray-500 font-normal",children:["— ",e," ANOS"]})]}),s.jsxs("div",{className:"flex flex-wrap gap-2 mt-1",children:[n&&s.jsx("span",{className:"text-[10px] font-bold bg-purple-100 text-purple-700 px-2 py-0.5 rounded-full uppercase",children:n}),s.jsx("span",{className:"text-[10px] font-bold bg-gray-100 text-gray-600 px-2 py-0.5 rounded-full uppercase",children:t.classificacao||((r=t.diagnostico)==null?void 0:r.classeAngle)}),s.jsxs("span",{className:"text-[10px] font-bold bg-blue-100 text-blue-600 px-2 py-0.5 rounded-full uppercase",children:["FASE: ",t.faseAtual]}),s.jsxs("span",{className:"text-[10px] font-bold bg-gray-100 text-gray-600 px-2 py-0.5 rounded-full uppercase",children:["FIO ",t.fioAtual]}),t.cooperacao&&s.jsxs("span",{className:`text-[10px] font-bold px-2 py-0.5 rounded-full uppercase ${Um[t.cooperacao]||""}`,children:["COOPERAÇÃO ",t.cooperacao.toUpperCase()]})]})]})]}),s.jsxs("div",{className:"flex flex-wrap gap-4 text-xs uppercase font-bold text-gray-500",children:[s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx(jt,{size:14})," ÚLTIMA: ",t.ultimaConsulta?new Date(t.ultimaConsulta).toLocaleDateString():"—"]}),s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx(jt,{size:14,className:"text-blue-500"})," PRÓX: ",t.proximaConsulta?new Date(t.proximaConsulta).toLocaleDateString():"—"]}),s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx(Yl,{size:14})," ",t.mesesRestantes??"?"," MESES RESTANTES"]})]})]}),t.percentualConcluido!=null&&s.jsxs("div",{className:"mt-4",children:[s.jsxs("div",{className:"flex justify-between text-[10px] font-bold text-gray-500 uppercase mb-1",children:[s.jsx("span",{children:"PROGRESSO DO TRATAMENTO"}),s.jsxs("span",{children:[t.percentualConcluido,"%"]})]}),s.jsx("div",{className:"w-full bg-gray-100 rounded-full h-2.5",children:s.jsx("div",{className:"bg-blue-500 h-2.5 rounded-full transition-all duration-500",style:{width:`${t.percentualConcluido}%`}})})]}),t.flags&&t.flags.length>0&&s.jsx("div",{className:"flex flex-wrap gap-2 mt-3",children:t.flags.map((i,c)=>{const d=pu[i.tipo]||pu.info;return s.jsxs("div",{className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-xs font-bold uppercase ${d.bg} ${d.text}`,children:[d.icon," ",i.mensagem]},c)})}),t.responsavel&&s.jsxs("p",{className:"mt-2 text-[10px] text-gray-400 font-bold uppercase",children:["RESPONSÁVEL: ",t.responsavel]})]})},MP=({t})=>{const[e,n]=A.useState(!1),r=t.triagem;if(!r)return null;const i=lA(t.dataNascimento),c=i!==null&&i>=18;return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden",children:[s.jsxs("button",{onClick:()=>n(!e),className:"w-full px-5 py-3 flex justify-between items-center bg-gray-50 hover:bg-gray-100 transition-colors",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2",children:[s.jsx(aa,{size:16,className:"text-purple-500"})," TRIAGEM CLÍNICA"]}),e?s.jsx(Tg,{size:18,className:"text-gray-400"}):s.jsx(Lo,{size:18,className:"text-gray-400"})]}),e&&s.jsxs("div",{className:"p-5 grid grid-cols-1 md:grid-cols-2 gap-4 text-sm animate-in fade-in",children:[s.jsx(vt,{label:"QUEIXA PRINCIPAL",value:r.queixaPrincipal}),s.jsx(vt,{label:"HISTÓRICO MÉDICO",value:r.historicoMedico}),s.jsx(vt,{label:"MEDICAÇÃO",value:r.medicacao}),s.jsx(vt,{label:"ALERGIAS",value:r.alergias}),s.jsx(vt,{label:"RESPIRAÇÃO BUCAL",value:r.respiracaoBucal?"SIM":"NÃO"}),s.jsx(vt,{label:"HÁBITOS",value:r.habitos}),c&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"col-span-full border-t pt-3 mt-1",children:s.jsx("span",{className:"text-[10px] font-bold text-purple-500 uppercase",children:"CAMPOS ADULTO"})}),s.jsx(vt,{label:"PERIODONTO",value:r.periodonto}),s.jsx(vt,{label:"IMPLANTES",value:r.implantes}),s.jsx(vt,{label:"RECESSÕES",value:r.recessoes}),s.jsx(vt,{label:"MOBILIDADE",value:r.mobilidade})]})]})]})},IP=({t})=>{const[e,n]=A.useState(!1),r=t.diagnostico;return r?s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden",children:[s.jsxs("button",{onClick:()=>n(!e),className:"w-full px-5 py-3 flex justify-between items-center bg-gray-50 hover:bg-gray-100 transition-colors",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2",children:[s.jsx(Ba,{size:16,className:"text-blue-500"})," DIAGNÓSTICO ORTODÔNTICO"]}),e?s.jsx(Tg,{size:18,className:"text-gray-400"}):s.jsx(Lo,{size:18,className:"text-gray-400"})]}),e&&s.jsxs("div",{className:"p-5 grid grid-cols-2 md:grid-cols-3 gap-4 text-sm animate-in fade-in",children:[s.jsx(vt,{label:"CLASSE ANGLE",value:r.classeAngle,highlight:!0}),s.jsx(vt,{label:"PERFIL",value:r.perfil}),s.jsx(vt,{label:"APINHAMENTO",value:r.apinhamento,highlight:r.apinhamento==="Severo"}),s.jsx(vt,{label:"MORDIDA",value:r.mordida}),s.jsx(vt,{label:"LINHA MÉDIA",value:r.linhaMedia})]})]}):null},LP=({t})=>{const[e,n]=A.useState(!0);return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden",children:[s.jsxs("button",{onClick:()=>n(!e),className:"w-full px-5 py-3 flex justify-between items-center bg-gray-50 hover:bg-gray-100 transition-colors",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2",children:[s.jsx(pD,{size:16,className:"text-pink-500"})," PLANO DE TRATAMENTO"]}),e?s.jsx(Tg,{size:18,className:"text-gray-400"}):s.jsx(Lo,{size:18,className:"text-gray-400"})]}),e&&s.jsxs("div",{className:"p-5 space-y-3 text-sm animate-in fade-in",children:[s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:[s.jsx(vt,{label:"APARELHO",value:t.tipoAparelho,highlight:!0}),s.jsx(vt,{label:"EXTRAÇÕES",value:t.extracoes}),s.jsx(vt,{label:"ELÁSTICOS",value:t.elasticos}),s.jsx(vt,{label:"IPR PLANEJADO",value:t.iprPlanejado}),s.jsx(vt,{label:"TEMPO ESTIMADO",value:t.tempoEstimado}),t.valor!=null&&s.jsx(vt,{label:"VALOR",value:`R$ ${t.valor.toLocaleString("pt-BR",{minimumFractionDigits:2})}`}),t.formaPagamento&&s.jsx(vt,{label:"PAGAMENTO",value:t.formaPagamento})]}),t.sequenciaFios&&s.jsxs("div",{className:"bg-gray-50 rounded-lg p-3 border border-gray-100 mt-2",children:[s.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"SEQUÊNCIA DE FIOS"}),s.jsx("p",{className:"font-bold text-gray-800 mt-1 tracking-wide",children:t.sequenciaFios})]})]})]})},zP=({evolucoes:t})=>{const e=[...t].sort((n,r)=>new Date(r.data).getTime()-new Date(n.data).getTime());return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx($l,{size:16,className:"text-blue-500"})," LINHA DO TEMPO — ",t.length," EVENTO",t.length!==1&&"S"]}),s.jsx("div",{className:"space-y-4 relative before:absolute before:left-[7px] before:top-2 before:bottom-2 before:w-0.5 before:bg-gray-200",children:e.map(n=>{var r;return s.jsxs("div",{className:"relative pl-7",children:[s.jsx("div",{className:`absolute left-0 top-1.5 w-3.5 h-3.5 rounded-full z-10 border-2 ${n.tipo==="Falta"?"bg-red-500 border-red-300":n.tipo==="Colagem"?"bg-green-500 border-green-300":"bg-white border-blue-500"}`}),s.jsxs("div",{className:"bg-gray-50 rounded-lg p-3 border border-gray-100",children:[s.jsxs("div",{className:"flex flex-wrap justify-between items-start gap-2 mb-1",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"font-bold text-gray-900 text-sm",children:new Date(n.data).toLocaleDateString()}),s.jsx("span",{className:"text-[9px] font-bold bg-gray-200 text-gray-600 px-2 py-0.5 rounded-full uppercase",children:n.tipo})]}),s.jsxs("span",{className:"text-[10px] text-blue-600 flex items-center gap-1 font-bold uppercase",children:["PRÓX: ",new Date(n.proximoRetorno).toLocaleDateString()," ",s.jsx(Us,{size:10})]})]}),s.jsx("p",{className:"text-xs text-gray-700 uppercase font-medium",children:n.procedimento}),s.jsxs("div",{className:"flex flex-wrap gap-2 mt-2",children:[n.fio&&s.jsxs("span",{className:"text-[9px] font-bold bg-blue-50 text-blue-600 px-2 py-0.5 rounded-full uppercase",children:["FIO: ",n.fio]}),n.elastico&&s.jsxs("span",{className:"text-[9px] font-bold bg-purple-50 text-purple-600 px-2 py-0.5 rounded-full uppercase",children:["ELÁSTICO: ",n.elastico]}),(r=n.procedimentos)==null?void 0:r.map((i,c)=>s.jsx("span",{className:"text-[9px] font-bold bg-green-50 text-green-600 px-2 py-0.5 rounded-full uppercase",children:i},c)),n.higiene!=null&&s.jsxs("span",{className:`text-[9px] font-bold px-2 py-0.5 rounded-full uppercase ${n.higiene>=7?"bg-green-50 text-green-600":n.higiene>=5?"bg-amber-50 text-amber-600":"bg-red-50 text-red-600"}`,children:["HIGIENE: ",n.higiene,"/10"]}),n.cooperacao&&s.jsxs("span",{className:`text-[9px] font-bold px-2 py-0.5 rounded-full uppercase ${Um[n.cooperacao]||""}`,children:["COOP: ",n.cooperacao.toUpperCase()]})]}),n.observacoes&&s.jsx("p",{className:"text-[10px] text-gray-500 mt-2 italic uppercase",children:n.observacoes})]})]},n.id)})})]})},PP=({tratamentoId:t,currentFio:e,onSaved:n})=>{const r=$e(),[i,c]=A.useState("Manutenção"),[d,f]=A.useState(e||""),[h,p]=A.useState(""),[b,y]=A.useState([]),[x,v]=A.useState(7),[N,j]=A.useState("Boa"),[S,R]=A.useState(""),[w,D]=A.useState(""),C=L=>{y(F=>F.includes(L)?F.filter(Y=>Y!==L):[...F,L])},I=async()=>{const L=[i,d&&`FIO ${d}`,h&&`ELÁSTICO ${h}`,...b].filter(Boolean).join(" + ");try{await K.saveEvolucaoOrto(t,{tipo:i,procedimento:L.toUpperCase(),proximoRetorno:w,fio:d||void 0,elastico:h||void 0,procedimentos:b.length>0?b:void 0,higiene:x,cooperacao:N,observacoes:S.toUpperCase()||void 0}),r.success("EVOLUÇÃO SALVA COM SUCESSO!"),c("Manutenção"),p(""),y([]),v(7),j("Boa"),R(""),D(""),n()}catch{r.error("ERRO AO SALVAR EVOLUÇÃO.")}};return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx(gt,{size:16,className:"text-green-500"})," NOVA EVOLUÇÃO"]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 text-sm",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"TIPO EVENTO"}),s.jsxs("select",{value:i,onChange:L=>c(L.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select mt-1",children:[s.jsx("option",{children:"Manutenção"}),s.jsx("option",{children:"Troca de fio"}),s.jsx("option",{children:"Colagem"}),s.jsx("option",{children:"Emergência"}),s.jsx("option",{children:"Falta"}),s.jsx("option",{children:"Finalização"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"FIO"}),s.jsxs("select",{value:d,onChange:L=>f(L.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select mt-1",children:[s.jsx("option",{value:"",children:"— MANTER ATUAL —"}),s.jsx("option",{children:"0.12"}),s.jsx("option",{children:"0.14"}),s.jsx("option",{children:"0.16"}),s.jsx("option",{children:"0.18"}),s.jsx("option",{children:"0.20x0.25"}),s.jsx("option",{children:"0.19x0.25"}),s.jsx("option",{children:"0.21x0.25"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"ELÁSTICO"}),s.jsxs("select",{value:h,onChange:L=>p(L.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select mt-1",children:[s.jsx("option",{value:"",children:"— NENHUM —"}),s.jsx("option",{children:"CLASSE II"}),s.jsx("option",{children:"CLASSE III"}),s.jsx("option",{children:"VERTICAL"}),s.jsx("option",{children:"CRUZADO"})]})]})]}),s.jsxs("div",{className:"mt-4",children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"PROCEDIMENTOS REALIZADOS"}),s.jsx("div",{className:"flex flex-wrap gap-2 mt-2",children:kP.map(L=>s.jsxs("button",{type:"button",onClick:()=>C(L.label),className:`flex items-center gap-1.5 px-3 py-2 rounded-lg text-xs font-bold uppercase border transition-all ${b.includes(L.label)?"bg-green-600 text-white border-green-600 shadow-sm":"bg-white text-gray-600 border-gray-300 hover:border-green-400 hover:bg-green-50"}`,children:[L.icon," ",L.label]},L.label))})]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-4 text-sm",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"HIGIENE (1–10)"}),s.jsx("input",{type:"range",min:1,max:10,value:x,onChange:L=>v(Number(L.target.value)),className:"w-full mt-2"}),s.jsxs("div",{className:"text-center font-bold text-lg mt-1",children:[x,s.jsx("span",{className:"text-gray-400 text-xs",children:"/10"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"COOPERAÇÃO"}),s.jsxs("select",{value:N,onChange:L=>j(L.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select mt-1",children:[s.jsx("option",{children:"Boa"}),s.jsx("option",{children:"Média"}),s.jsx("option",{children:"Ruim"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"PRÓXIMO RETORNO"}),s.jsx("input",{type:"date",value:w,onChange:L=>D(L.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white mt-1"})]})]}),s.jsxs("div",{className:"mt-4",children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"OBSERVAÇÕES CLÍNICAS"}),s.jsx("textarea",{value:S,onChange:L=>R(L.target.value.toUpperCase()),placeholder:"ANOTAÇÕES LIVRES...",className:"w-full border border-gray-300 rounded-lg p-3 mt-1 h-20 uppercase-textarea text-sm"})]}),s.jsxs("button",{onClick:I,className:"mt-4 w-full bg-green-600 hover:bg-green-700 text-white py-3 rounded-lg font-bold uppercase text-sm transition-colors shadow-sm flex items-center justify-center gap-2",children:[s.jsx(Ga,{size:16})," SALVAR EVOLUÇÃO"]})]})},UP=({t})=>{var e,n,r,i;return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx(Dd,{size:16,className:"text-indigo-500"})," COMPARATIVO FOTOGRÁFICO"]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{className:"border-2 border-dashed border-gray-200 rounded-xl p-8 flex flex-col items-center justify-center text-center bg-gray-50 min-h-[160px]",children:[s.jsx(Dd,{size:32,className:"text-gray-300 mb-2"}),s.jsx("span",{className:"text-xs font-bold text-gray-400 uppercase",children:"INÍCIO"}),((n=(e=t.fotos)==null?void 0:e.find(c=>c.tipo==="inicio"))==null?void 0:n.data)&&s.jsx("span",{className:"text-[10px] text-gray-400 mt-1",children:new Date(t.fotos.find(c=>c.tipo==="inicio").data).toLocaleDateString()})]}),s.jsxs("div",{className:"border-2 border-dashed border-gray-200 rounded-xl p-8 flex flex-col items-center justify-center text-center bg-gray-50 min-h-[160px]",children:[s.jsx(Dd,{size:32,className:"text-gray-300 mb-2"}),s.jsx("span",{className:"text-xs font-bold text-gray-400 uppercase",children:"ATUAL"}),((i=(r=t.fotos)==null?void 0:r.find(c=>c.tipo==="atual"))==null?void 0:i.data)&&s.jsx("span",{className:"text-[10px] text-gray-400 mt-1",children:new Date(t.fotos.find(c=>c.tipo==="atual").data).toLocaleDateString()})]})]}),s.jsxs("button",{className:"mt-4 w-full border-2 border-dashed border-gray-300 hover:border-blue-400 hover:bg-blue-50 py-3 rounded-lg text-xs font-bold text-gray-500 hover:text-blue-600 uppercase transition-colors flex items-center justify-center gap-2",children:[s.jsx(SO,{size:16})," UPLOAD FOTOS"]})]})},BP=({t,onFinalize:e})=>{const n=$e(),[r,i]=A.useState({alinhamento:!1,oclusao:!1,raizes:!1,estetica:!1}),[c,d]=A.useState("CONTENÇÃO FIXA INFERIOR"),[f,h]=A.useState(!1),[p,b]=A.useState(!0),[y,x]=A.useState("PERMANENTE"),v=Object.values(r).every(Boolean),N=async()=>{if(!v){n.error("PREENCHA TODOS OS CRITÉRIOS DO CHECKLIST.");return}try{await K.finalizarTratamentoOrto(t.id,{tipo:c,superior:f,inferior:p,tempoUso:y}),n.success("TRATAMENTO FINALIZADO COM SUCESSO!"),e()}catch{n.error("ERRO AO FINALIZAR TRATAMENTO.")}};return t.status==="Finalizado"?s.jsxs("div",{className:"bg-green-50 border border-green-200 rounded-xl p-5 text-center",children:[s.jsx(Ga,{size:32,className:"text-green-500 mx-auto mb-2"}),s.jsx("h3",{className:"font-bold text-green-700 uppercase",children:"TRATAMENTO FINALIZADO"}),t.contencaoTipo&&s.jsxs("p",{className:"text-xs text-green-600 mt-1 uppercase",children:["CONTENÇÃO: ",t.contencaoTipo]})]}):s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx(Ar,{size:16,className:"text-green-500"})," FINALIZAÇÃO E CONTENÇÃO"]}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"CHECKLIST OBRIGATÓRIO"}),s.jsx("div",{className:"space-y-2 mt-2",children:Object.entries({alinhamento:"ALINHAMENTO OK",oclusao:"OCLUSÃO OK",raizes:"RAÍZES PARALELAS",estetica:"ESTÉTICA ACEITA"}).map(([j,S])=>s.jsxs("label",{className:"flex items-center gap-2 text-sm cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:r[j],onChange:()=>i(R=>({...R,[j]:!R[j]})),className:"w-4 h-4 rounded border-gray-300 text-green-600"}),s.jsx("span",{className:"font-bold uppercase text-gray-700",children:S})]},j))})]}),s.jsxs("div",{className:"space-y-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"TIPO CONTENÇÃO"}),s.jsxs("select",{value:c,onChange:j=>d(j.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select mt-1 text-sm",children:[s.jsx("option",{children:"CONTENÇÃO FIXA INFERIOR"}),s.jsx("option",{children:"CONTENÇÃO FIXA SUPERIOR E INFERIOR"}),s.jsx("option",{children:"PLACA DE CONTENÇÃO REMOVÍVEL"}),s.jsx("option",{children:"ESSIX (ALINHADOR)"})]})]}),s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("label",{className:"flex items-center gap-2 text-sm cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:f,onChange:()=>h(!f),className:"w-4 h-4 rounded"}),s.jsx("span",{className:"font-bold uppercase text-gray-700",children:"SUPERIOR"})]}),s.jsxs("label",{className:"flex items-center gap-2 text-sm cursor-pointer",children:[s.jsx("input",{type:"checkbox",checked:p,onChange:()=>b(!p),className:"w-4 h-4 rounded"}),s.jsx("span",{className:"font-bold uppercase text-gray-700",children:"INFERIOR"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"TEMPO DE USO"}),s.jsxs("select",{value:y,onChange:j=>x(j.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white uppercase-select mt-1 text-sm",children:[s.jsx("option",{children:"PERMANENTE"}),s.jsx("option",{children:"6 MESES"}),s.jsx("option",{children:"12 MESES"}),s.jsx("option",{children:"24 MESES"})]})]})]})]}),s.jsxs("button",{onClick:N,disabled:!v,className:`mt-5 w-full py-3 rounded-lg font-bold uppercase text-sm transition-colors flex items-center justify-center gap-2 ${v?"bg-green-600 hover:bg-green-700 text-white shadow-sm":"bg-gray-200 text-gray-400 cursor-not-allowed"}`,children:[s.jsx(Ga,{size:16})," FINALIZAR TRATAMENTO"]})]})},HP=({t})=>{$e();const[e,n]=A.useState(350),[r,i]=A.useState(!1);return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx(HN,{size:16,className:"text-orange-500"})," CONTENÇÃO — TERMO E VALOR"]}),s.jsx("div",{className:"bg-amber-50 border border-amber-200 rounded-lg p-4 mb-4",children:s.jsxs("div",{className:"flex items-start gap-2",children:[s.jsx(bu,{size:18,className:"text-amber-600 flex-shrink-0 mt-0.5"}),s.jsxs("div",{children:[s.jsx("p",{className:"text-xs font-bold text-amber-700 uppercase mb-1",children:"TERMO DE CIÊNCIA"}),s.jsxs("p",{className:"text-xs text-amber-800 leading-relaxed",children:["O PACIENTE DECLARA ESTAR CIENTE DE QUE A ",s.jsx("strong",{children:"CONTENÇÃO ORTODÔNTICA"})," (FIXA E/OU REMOVÍVEL) É UM PROCEDIMENTO ",s.jsx("strong",{children:"SEPARADO DO TRATAMENTO ORTODÔNTICO"})," E ",s.jsx("strong",{children:"NÃO ESTÁ INCLUÍDA NO VALOR DA MANUTENÇÃO MENSAL"}),". O CUSTO DA CONTENÇÃO SERÁ COBRADO À PARTE, CONFORME VALORES ABAIXO INFORMADOS."]})]})]})}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"VALOR DA CONTENÇÃO (R$)"}),s.jsx("input",{type:"number",value:e,onChange:c=>n(Number(c.target.value)),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white mt-1 text-sm font-bold",min:0,step:50}),s.jsx("p",{className:"text-[10px] text-gray-400 mt-1",children:"VALOR COBRADO SEPARADAMENTE DA MENSALIDADE"})]}),s.jsx("div",{className:"flex flex-col justify-end",children:s.jsxs("label",{className:"flex items-start gap-2 cursor-pointer bg-gray-50 border border-gray-200 rounded-lg p-3",children:[s.jsx("input",{type:"checkbox",checked:r,onChange:()=>i(!r),className:"w-4 h-4 rounded border-gray-300 text-orange-600 mt-0.5"}),s.jsx("span",{className:"text-xs font-bold uppercase text-gray-700 leading-relaxed",children:"PACIENTE CIENTE E DE ACORDO COM A COBRANÇA SEPARADA DA CONTENÇÃO"})]})})]}),r&&s.jsxs("div",{className:"mt-3 bg-green-50 border border-green-200 rounded-lg p-3 flex items-center gap-2",children:[s.jsx(Ga,{size:16,className:"text-green-500"}),s.jsxs("span",{className:"text-xs font-bold text-green-700 uppercase",children:["TERMO ACEITO — R$ ",e.toLocaleString("pt-BR",{minimumFractionDigits:2})]})]})]})},GP=({t})=>{const e=$e(),[n,r]=A.useState([]),[i,c]=A.useState("LIMPEZA / PROFILAXIA"),[d,f]=A.useState(""),[h,p]=A.useState(""),b=["LIMPEZA / PROFILAXIA","DENTE COM CÁRIE","DENTE PARA EXTRAIR","RASPAGEM PERIODONTAL"],y=()=>{r(v=>[...v,{tipo:i,dente:d.toUpperCase()||void 0,obs:h.toUpperCase()||void 0}]),f(""),p(""),e.success("SOLICITAÇÃO ADICIONADA!")},x=v=>{r(N=>N.filter((j,S)=>S!==v))};return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx(aa,{size:16,className:"text-red-500"})," SOLICITAÇÕES CLÍNICAS"]}),n.length>0&&s.jsx("div",{className:"space-y-2 mb-4",children:n.map((v,N)=>s.jsxs("div",{className:"flex items-center justify-between bg-gray-50 border border-gray-200 rounded-lg p-3",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("span",{className:`w-2 h-2 rounded-full flex-shrink-0 ${v.tipo.includes("CÁRIE")?"bg-red-500":v.tipo.includes("EXTRAIR")?"bg-orange-500":v.tipo.includes("RASPAGEM")?"bg-purple-500":"bg-blue-500"}`}),s.jsxs("div",{children:[s.jsx("span",{className:"text-xs font-bold text-gray-800 uppercase",children:v.tipo}),v.dente&&s.jsxs("span",{className:"text-[10px] text-gray-500 ml-2",children:["DENTE: ",v.dente]}),v.obs&&s.jsx("p",{className:"text-[10px] text-gray-400 italic",children:v.obs})]})]}),s.jsx("button",{onClick:()=>x(N),className:"text-gray-400 hover:text-red-500 transition-colors",children:s.jsx(Qe,{size:16})})]},N))}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"TIPO"}),s.jsx("select",{value:i,onChange:v=>c(v.target.value),className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white mt-1 text-sm",children:b.map(v=>s.jsx("option",{children:v},v))})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"DENTE (OPCIONAL)"}),s.jsx("input",{type:"text",value:d,onChange:v=>f(v.target.value),placeholder:"EX: 36, 14",className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white mt-1 text-sm uppercase"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"OBSERVAÇÃO"}),s.jsx("input",{type:"text",value:h,onChange:v=>p(v.target.value),placeholder:"DETALHES...",className:"w-full border border-gray-300 rounded-lg p-2.5 bg-white mt-1 text-sm uppercase"})]})]}),s.jsxs("button",{onClick:y,className:"mt-3 w-full border-2 border-dashed border-gray-300 hover:border-blue-400 hover:bg-blue-50 py-2.5 rounded-lg text-xs font-bold text-gray-500 hover:text-blue-600 uppercase transition-colors flex items-center justify-center gap-2",children:[s.jsx(gt,{size:14})," ADICIONAR SOLICITAÇÃO"]})]})},FP=({t})=>{const e=$e(),n=()=>{const c=[...t.evolucoes].sort((f,h)=>new Date(f.data).getTime()-new Date(h.data).getTime()),d=["════════════════════════════════════════════════════════"," RELATÓRIO DE MANUTENÇÕES ORTODÔNTICAS","════════════════════════════════════════════════════════","",`PACIENTE: ${t.pacienteNome}`,`APARELHO: ${t.tipoAparelho}`,`INÍCIO: ${new Date(t.dataInicio).toLocaleDateString()}`,`STATUS: ${t.status}`,`FASE ATUAL: ${t.faseAtual||"—"}`,`FIO ATUAL: ${t.fioAtual||"—"}`,`PROGRESSO: ${t.percentualConcluido??"—"}%`,"","────────────────────────────────────────────────────────",` TOTAL DE ATENDIMENTOS: ${c.length}`,"────────────────────────────────────────────────────────",""];return c.forEach((f,h)=>{var p;d.push(` #${h+1} | ${new Date(f.data).toLocaleDateString()} | ${f.tipo}`),d.push(` ${f.procedimento}`),f.fio&&d.push(` FIO: ${f.fio}`),f.elastico&&d.push(` ELÁSTICO: ${f.elastico}`),(p=f.procedimentos)!=null&&p.length&&d.push(` PROC: ${f.procedimentos.join(", ")}`),f.higiene!=null&&d.push(` HIGIENE: ${f.higiene}/10`),f.cooperacao&&d.push(` COOPERAÇÃO: ${f.cooperacao}`),f.observacoes&&d.push(` OBS: ${f.observacoes}`),d.push(` PRÓXIMO RETORNO: ${new Date(f.proximoRetorno).toLocaleDateString()}`),d.push("")}),d.push("────────────────────────────────────────────────────────"),d.push(` GERADO EM: ${new Date().toLocaleString()}`),d.push(" SCOREODONTO — GESTÃO ORTODÔNTICA"),d.push("════════════════════════════════════════════════════════"),d.join(` -`)},r=()=>{const c=n(),d=new Blob([c],{type:"text/plain;charset=utf-8"}),f=URL.createObjectURL(d),h=document.createElement("a");h.href=f,h.download=`RELATORIO_ORTO_${t.pacienteNome.replace(/\s+/g,"_")}_${new Date().toISOString().split("T")[0]}.txt`,document.body.appendChild(h),h.click(),document.body.removeChild(h),URL.revokeObjectURL(f),e.success("RELATÓRIO EXPORTADO COM SUCESSO!")},i=()=>{const c=n();navigator.clipboard.writeText(c).then(()=>{e.success("RELATÓRIO COPIADO PARA ÁREA DE TRANSFERÊNCIA!")})};return s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm p-5",children:[s.jsxs("h3",{className:"font-bold text-gray-700 uppercase text-sm flex items-center gap-2 mb-4",children:[s.jsx(nv,{size:16,className:"text-teal-500"})," RELATÓRIO DE MANUTENÇÕES"]}),s.jsx("div",{className:"bg-gray-50 border border-gray-200 rounded-lg p-4 mb-4",children:s.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3 text-center",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-2xl font-bold text-gray-800",children:t.evolucoes.length}),s.jsx("p",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"ATENDIMENTOS"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-2xl font-bold text-gray-800",children:new Date(t.dataInicio).toLocaleDateString()}),s.jsx("p",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"INÍCIO"})]}),s.jsxs("div",{children:[s.jsxs("p",{className:"text-2xl font-bold text-gray-800",children:[t.percentualConcluido??"—","%"]}),s.jsx("p",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"PROGRESSO"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-2xl font-bold text-gray-800",children:t.mesesRestantes??"—"}),s.jsx("p",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"MESES REST."})]})]})}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[s.jsxs("button",{onClick:r,className:"bg-teal-600 hover:bg-teal-700 text-white py-3 rounded-lg font-bold uppercase text-sm transition-colors shadow-sm flex items-center justify-center gap-2",children:[s.jsx(nv,{size:16})," EXPORTAR RELATÓRIO (.TXT)"]}),s.jsxs("button",{onClick:i,className:"bg-gray-600 hover:bg-gray-700 text-white py-3 rounded-lg font-bold uppercase text-sm transition-colors shadow-sm flex items-center justify-center gap-2",children:[s.jsx(HN,{size:16})," COPIAR PARA ÁREA DE TRANSFERÊNCIA"]})]})]})},vt=({label:t,value:e,highlight:n})=>s.jsxs("div",{children:[s.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:t}),s.jsx("p",{className:`font-bold uppercase mt-0.5 ${n?"text-blue-600":"text-gray-800"}`,children:e||"—"})]}),VP=({treatment:t,onClose:e})=>{const[n,r]=A.useState(t),{refresh:i}=Ie(K.getOrtoTreatments),c=A.useCallback(()=>{K.getOrtoTreatments().then(d=>{const f=d.find(h=>h.id===n.id);f&&r(f)})},[n.id]);return A.useEffect(()=>{const d=f=>{f.key==="Escape"&&e()};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[e]),s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-gray-50 shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-3 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-white",children:[s.jsxs("button",{onClick:e,className:"flex items-center gap-2 text-gray-500 hover:text-gray-800 text-xs font-bold uppercase transition-colors",children:[s.jsx(zN,{size:16})," VOLTAR À LISTA"]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:`px-3 py-1 rounded-full text-[10px] font-bold uppercase ${n.status==="Finalizado"?"bg-green-100 text-green-700":n.status==="Contenção"?"bg-blue-100 text-blue-700":"bg-amber-100 text-amber-700"}`,children:n.status}),s.jsx("button",{onClick:e,className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:20})})]})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-4 lg:p-6 space-y-5",children:[s.jsx(_P,{t:n}),s.jsx(MP,{t:n}),s.jsx(IP,{t:n}),s.jsx(LP,{t:n}),s.jsx(zP,{evolucoes:n.evolucoes}),s.jsx(PP,{tratamentoId:n.id,currentFio:n.fioAtual,onSaved:c}),s.jsx(UP,{t:n}),s.jsx(HP,{t:n}),s.jsx(GP,{t:n}),s.jsx(FP,{t:n}),s.jsx(BP,{t:n,onFinalize:()=>{i(),e()}})]})]})})},qP=()=>{const{data:t,refresh:e}=Ie(K.getOrtoTreatments),[n,r]=A.useState(null);return s.jsxs("div",{className:"space-y-6",children:[s.jsx(fn,{title:"GESTÃO ORTODÔNTICA",children:s.jsxs("button",{className:"bg-blue-600 text-white px-4 py-2 rounded-lg flex items-center gap-2 hover:bg-blue-700 text-xs font-bold uppercase transition-colors shadow-sm",children:[s.jsx(gt,{size:18})," NOVO TRATAMENTO"]})}),s.jsx("div",{className:"grid grid-cols-1 gap-6",children:t==null?void 0:t.map(i=>s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl overflow-hidden shadow-sm hover:shadow-md transition-shadow cursor-pointer",onClick:()=>r(i),children:[s.jsxs("div",{className:"p-4 border-b border-gray-100 bg-gray-50 flex justify-between items-center",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-10 h-10 bg-purple-100 text-purple-600 rounded-full flex items-center justify-center font-bold text-sm",children:i.pacienteNome.substring(0,2).toUpperCase()}),s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-gray-900 uppercase",children:i.pacienteNome}),s.jsxs("p",{className:"text-[10px] text-gray-500 uppercase font-bold",children:[i.tipoAparelho," • INÍCIO: ",new Date(i.dataInicio).toLocaleDateString(),i.faseAtual&&` • FASE: ${i.faseAtual}`]})]})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[i.percentualConcluido!=null&&s.jsxs("div",{className:"hidden md:flex items-center gap-2",children:[s.jsx("div",{className:"w-24 bg-gray-200 rounded-full h-1.5",children:s.jsx("div",{className:"bg-blue-500 h-1.5 rounded-full",style:{width:`${i.percentualConcluido}%`}})}),s.jsxs("span",{className:"text-[10px] font-bold text-gray-500",children:[i.percentualConcluido,"%"]})]}),i.cooperacao&&s.jsx("span",{className:`text-[10px] font-bold px-2 py-0.5 rounded-full uppercase hidden lg:inline-block ${Um[i.cooperacao]||""}`,children:i.cooperacao}),s.jsx("span",{className:`px-3 py-1 rounded-full text-[10px] font-bold uppercase ${i.status==="Finalizado"?"bg-green-100 text-green-700":i.status==="Contenção"?"bg-blue-100 text-blue-700":"bg-green-100 text-green-700"}`,children:i.status})]})]}),s.jsxs("div",{className:"p-4",children:[s.jsxs("h4",{className:"text-xs font-bold text-gray-500 mb-3 flex items-center gap-2 uppercase",children:[s.jsx($l,{size:14})," ÚLTIMAS EVOLUÇÕES"]}),s.jsx("div",{className:"space-y-2",children:i.evolucoes.slice(-2).map(c=>s.jsxs("div",{className:"flex items-center gap-3 text-xs",children:[s.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full flex-shrink-0"}),s.jsx("span",{className:"font-bold text-gray-700",children:new Date(c.data).toLocaleDateString()}),s.jsx("span",{className:"text-gray-500 truncate uppercase",children:c.procedimento})]},c.id))}),i.flags&&i.flags.length>0&&s.jsx("div",{className:"flex gap-2 mt-3 pt-3 border-t border-gray-100",children:i.flags.map((c,d)=>{const f=pu[c.tipo]||pu.info;return s.jsx("span",{className:`text-[9px] font-bold px-2 py-1 rounded-lg border uppercase ${f.bg} ${f.text}`,children:c.mensagem},d)})})]})]},i.id))}),n&&s.jsx(VP,{treatment:n,onClose:()=>{r(null),e()}})]})};function $P(t,e){const[n,r]=A.useState(t);return A.useEffect(()=>{const i=setTimeout(()=>r(t),e);return()=>clearTimeout(i)},[t,e]),n}const YP=({onClose:t,onSaved:e})=>{const n=$e(),[r,i]=A.useState(null),[c,d]=A.useState(""),[f,h]=A.useState(!1),p=$P(c,400),[b,y]=A.useState([]),[x,v]=A.useState(!1);A.useEffect(()=>{if(!p){y([]);return}v(!0),K.getPacientes(p).then(w=>{y(w),v(!1)})},[p]);const N=w=>{i(w),d(""),h(!1)},[j,S]=A.useState({id:crypto.randomUUID(),descricao:"",valor:"",dataVencimento:new Date().toISOString().split("T")[0],status:"Pendente",formaPagamento:"Pix"});A.useEffect(()=>{const w=D=>{D.key==="Escape"&&t()};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[t]);const R=async w=>{if(w.preventDefault(),!r||!j.descricao||!j.valor){n.error("PREENCHA TODOS OS CAMPOS OBRIGATÓRIOS.");return}try{await K.saveFinanceiro({...j,pacienteNome:r.nome,valor:parseFloat(j.valor)}),n.success("LANÇAMENTO SALVO COM SUCESSO!"),e(),t()}catch{n.error("ERRO AO SALVAR LANÇAMENTO.")}};return s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("form",{onSubmit:R,className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-green-50 to-white",children:[s.jsxs("h2",{className:"text-lg font-bold text-gray-800 flex items-center gap-2",children:[s.jsx(Fa,{size:22,className:"text-green-600"})," NOVO LANÇAMENTO"]}),s.jsx("button",{type:"button",onClick:t,className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsxs("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:[s.jsxs("div",{className:"mb-6",children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"PACIENTE *"}),r?s.jsxs("div",{className:"w-full lg:w-1/2 bg-green-50 border border-green-200 p-3 lg:p-4 rounded-lg mt-2 flex justify-between items-center",children:[s.jsx("span",{className:"font-bold text-green-800 uppercase text-sm lg:text-base",children:r.nome}),s.jsx("button",{type:"button",onClick:()=>i(null),className:"text-xs font-bold bg-blue-100 text-blue-700 hover:bg-blue-200 px-3 py-1.5 rounded-md transition-colors",children:"ALTERAR"})]}):s.jsxs("div",{className:"relative mt-2",children:[s.jsx("input",{type:"text",value:c,onChange:w=>d(w.target.value.toUpperCase()),onFocus:()=>h(!0),onBlur:()=>setTimeout(()=>h(!1),200),placeholder:"DIGITE O NOME OU CPF...",className:"w-full lg:w-1/2 bg-gray-100 p-3 lg:p-4 rounded-lg font-bold text-gray-800 uppercase focus:border-blue-500 outline-none border-2 border-transparent focus:border-2 text-sm lg:text-base"}),f&&p&&s.jsxs("ul",{className:"absolute z-10 w-full lg:w-1/2 bg-white border border-gray-300 rounded-lg mt-1 max-h-48 overflow-y-auto shadow-lg",children:[x&&s.jsx("li",{className:"p-3 text-sm text-gray-500",children:"BUSCANDO..."}),b.map(w=>s.jsxs("li",{onMouseDown:()=>N(w),className:"p-3 hover:bg-gray-100 cursor-pointer uppercase font-semibold text-sm",children:[w.nome," (",w.cpf,")"]},w.id)),!x&&b.length===0&&s.jsx("li",{className:"p-3 text-sm text-gray-500",children:"NENHUM PACIENTE ENCONTRADO."})]})]})]}),s.jsxs("div",{className:"lg:grid lg:grid-cols-2 lg:gap-x-8 lg:gap-y-5 space-y-5 lg:space-y-0",children:[s.jsxs("div",{className:"lg:col-span-2",children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"DESCRIÇÃO *"}),s.jsx("input",{type:"text",required:!0,value:j.descricao,onChange:w=>S(D=>({...D,descricao:w.target.value.toUpperCase()})),className:"w-full mt-2 border border-gray-300 rounded-lg p-2.5 lg:p-3 uppercase-input text-sm",placeholder:"EX: CONSULTA AVALIAÇÃO, LIMPEZA..."})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"VALOR (R$) *"}),s.jsx("input",{type:"number",step:"0.01",required:!0,value:j.valor,onChange:w=>S(D=>({...D,valor:w.target.value})),className:"w-full mt-2 border border-gray-300 rounded-lg p-2.5 lg:p-3 text-sm",placeholder:"0,00"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"DATA VENCIMENTO"}),s.jsx("input",{type:"date",value:j.dataVencimento,onChange:w=>S(D=>({...D,dataVencimento:w.target.value})),className:"w-full mt-2 border border-gray-300 rounded-lg p-2.5 lg:p-3 text-sm"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"STATUS"}),s.jsxs("select",{value:j.status,onChange:w=>S(D=>({...D,status:w.target.value})),className:"w-full mt-2 border border-gray-300 rounded-lg p-2.5 lg:p-3 bg-white text-sm uppercase-select",children:[s.jsx("option",{value:"Pendente",children:"PENDENTE"}),s.jsx("option",{value:"Pago",children:"PAGO"}),s.jsx("option",{value:"Atrasado",children:"ATRASADO"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase tracking-wider",children:"FORMA DE PAGAMENTO"}),s.jsxs("select",{value:j.formaPagamento,onChange:w=>S(D=>({...D,formaPagamento:w.target.value})),className:"w-full mt-2 border border-gray-300 rounded-lg p-2.5 lg:p-3 bg-white text-sm uppercase-select",children:[s.jsx("option",{value:"Pix",children:"PIX"}),s.jsx("option",{value:"Boleto",children:"BOLETO"}),s.jsx("option",{value:"Cartão",children:"CARTÃO"}),s.jsx("option",{value:"Dinheiro",children:"DINHEIRO"})]})]})]})]}),s.jsxs("div",{className:"px-5 py-4 bg-gray-50 border-t border-gray-200 flex justify-end gap-3 flex-shrink-0",children:[s.jsx("button",{type:"button",onClick:t,className:"px-6 py-2.5 bg-gray-200 hover:bg-gray-300 text-gray-700 font-bold rounded-lg text-sm uppercase transition-colors",children:"CANCELAR"}),s.jsxs("button",{type:"submit",className:"px-8 py-2.5 bg-green-600 hover:bg-green-700 text-white font-bold rounded-lg shadow-sm text-sm uppercase flex items-center gap-2 transition-colors",children:[s.jsx(gt,{size:16})," SALVAR"]})]})]})})},QP=()=>{const[t,e]=A.useState([]),[n,r]=A.useState(!0),[i,c]=A.useState("TODOS"),[d,f]=A.useState(!1),[h,p]=A.useState(!1),b=$e(),y=A.useCallback(()=>{r(!0),K.getFinanceiro().then(C=>{e(C),r(!1)})},[]);A.useEffect(()=>{y()},[y]);const x=i==="TODOS"?t:t.filter(C=>C.status===i),v=t.filter(C=>C.status==="Pago").reduce((C,I)=>C+Number(I.valor),0),N=t.filter(C=>C.status==="Pendente").reduce((C,I)=>C+Number(I.valor),0),j=t.filter(C=>C.status==="Atrasado").reduce((C,I)=>C+Number(I.valor),0),S=async C=>{if(window.confirm(`CONFIRMAR PAGAMENTO DE R$ ${Number(C.valor).toFixed(2)} DE ${C.pacienteNome}?`))try{await K.updateFinanceiro({...C,status:"Pago"}),b.success(`PAGAMENTO DE ${C.pacienteNome} CONFIRMADO!`),y()}catch{b.error("ERRO AO CONFIRMAR PAGAMENTO.")}},R=async C=>{if(window.confirm(`TEM CERTEZA QUE DESEJA EXCLUIR O LANÇAMENTO DE ${C.pacienteNome}? ESTA AÇÃO NÃO PODE SER DESFEITA.`))try{await K.deleteFinanceiro(C.id),b.success("LANÇAMENTO EXCLUÍDO!"),y()}catch{b.error("ERRO AO EXCLUIR LANÇAMENTO.")}},w=C=>{b.success(`RECIBO DE ${C.pacienteNome} GERADO COM SUCESSO!`)},D=i==="TODOS"?"FILTRAR":i.toUpperCase();return s.jsxs("div",{className:"space-y-6",children:[s.jsx(fn,{title:"FINANCEIRO & FATURAMENTO",children:s.jsxs("div",{className:"flex gap-2 relative",children:[s.jsxs("div",{className:"relative",children:[s.jsxs("button",{onClick:()=>f(!d),className:`border px-3 py-2 rounded-lg flex items-center gap-2 font-bold text-xs uppercase transition-colors ${i!=="TODOS"?"bg-blue-50 border-blue-300 text-blue-700":"bg-white border-gray-300 text-gray-700 hover:bg-gray-50"}`,children:[s.jsx(yu,{size:18})," ",D]}),d&&s.jsx("div",{className:"absolute right-0 top-full mt-1 bg-white border border-gray-200 rounded-lg shadow-xl z-20 min-w-[160px] overflow-hidden",children:["TODOS","Pago","Pendente","Atrasado"].map(C=>s.jsxs("button",{onClick:()=>{c(C),f(!1)},className:`w-full text-left px-4 py-2.5 text-sm font-bold uppercase hover:bg-gray-50 transition-colors flex items-center justify-between ${i===C?"text-blue-700 bg-blue-50":"text-gray-700"}`,children:[C.toUpperCase(),i===C&&s.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-600"})]},C))})]}),s.jsxs("button",{onClick:()=>p(!0),className:"bg-green-600 text-white px-4 py-2 rounded-lg flex items-center gap-2 hover:bg-green-700 font-bold text-xs uppercase shadow-sm transition-colors",children:[s.jsx(gt,{size:18})," NOVO LANÇAMENTO"]})]})}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[s.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs text-gray-500 font-bold mb-1 uppercase",children:"RECEBIDO (MÊS)"}),s.jsxs("h3",{className:"text-2xl font-bold text-green-600",children:["R$ ",v.toLocaleString("pt-BR",{minimumFractionDigits:2})]})]}),s.jsx("div",{className:"bg-green-100 p-3 rounded-full text-green-600",children:s.jsx(XN,{size:24})})]}),s.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs text-gray-500 font-bold mb-1 uppercase",children:"A RECEBER / PENDENTE"}),s.jsxs("h3",{className:"text-2xl font-bold text-yellow-600",children:["R$ ",N.toLocaleString("pt-BR",{minimumFractionDigits:2})]})]}),s.jsx("div",{className:"bg-yellow-100 p-3 rounded-full text-yellow-600",children:s.jsx(Yl,{size:24})})]}),s.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm flex items-center justify-between",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-xs text-gray-500 font-bold mb-1 uppercase",children:"EM ATRASO"}),s.jsxs("h3",{className:"text-2xl font-bold text-red-600",children:["R$ ",j.toLocaleString("pt-BR",{minimumFractionDigits:2})]})]}),s.jsx("div",{className:"bg-red-100 p-3 rounded-full text-red-600",children:s.jsx(vO,{size:24})})]})]}),s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden",children:[s.jsxs("div",{className:"p-4 border-b border-gray-200 bg-gray-50 flex justify-between items-center",children:[s.jsxs("h3",{className:"font-bold text-gray-800 uppercase",children:["LANÇAMENTOS ",i!=="TODOS"&&s.jsxs("span",{className:"text-blue-600 text-sm",children:["(",i.toUpperCase(),")"]})]}),s.jsxs("span",{className:"text-xs text-gray-400 font-bold uppercase",children:[x.length," REGISTRO(S)"]})]}),s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-sm text-left",children:[s.jsx("thead",{className:"bg-gray-50 text-gray-500 uppercase text-xs font-bold",children:s.jsxs("tr",{children:[s.jsx("th",{className:"px-6 py-3",children:"PACIENTE"}),s.jsx("th",{className:"px-6 py-3",children:"DESCRIÇÃO"}),s.jsx("th",{className:"px-6 py-3",children:"VENCIMENTO"}),s.jsx("th",{className:"px-6 py-3",children:"VALOR"}),s.jsx("th",{className:"px-6 py-3",children:"STATUS"}),s.jsx("th",{className:"px-6 py-3 text-right",children:"AÇÕES"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-100",children:n?s.jsx("tr",{children:s.jsx("td",{colSpan:6,className:"p-6 text-center text-gray-500 uppercase font-bold",children:s.jsxs("div",{className:"flex items-center justify-center gap-2",children:[s.jsx(Ot,{className:"animate-spin",size:18})," CARREGANDO..."]})})}):x.length===0?s.jsx("tr",{children:s.jsxs("td",{colSpan:6,className:"p-10 text-center text-gray-400 uppercase font-bold text-sm",children:["NENHUM LANÇAMENTO ENCONTRADO ",i!=="TODOS"&&`COM STATUS "${i.toUpperCase()}"`,"."]})}):x.map(C=>{var I;return s.jsxs("tr",{className:"hover:bg-gray-50 transition-colors",children:[s.jsx("td",{className:"px-6 py-4 font-bold text-gray-900 uppercase",children:C.pacienteNome}),s.jsxs("td",{className:"px-6 py-4 text-gray-600 font-medium uppercase",children:[C.descricao,s.jsx("span",{className:"text-[10px] text-gray-400 block font-bold",children:(I=C.formaPagamento)==null?void 0:I.toUpperCase()})]}),s.jsx("td",{className:"px-6 py-4 text-gray-600 font-medium",children:new Date(C.dataVencimento).toLocaleDateString("pt-BR")}),s.jsxs("td",{className:"px-6 py-4 font-bold text-gray-800",children:["R$ ",Number(C.valor).toLocaleString("pt-BR",{minimumFractionDigits:2})]}),s.jsx("td",{className:"px-6 py-4",children:s.jsx("span",{className:`px-2.5 py-1 rounded-full text-[10px] font-bold uppercase - ${C.status==="Pago"?"bg-green-100 text-green-700":C.status==="Atrasado"?"bg-red-100 text-red-700":"bg-yellow-100 text-yellow-700"}`,children:C.status})}),s.jsx("td",{className:"px-6 py-4 text-right",children:s.jsxs("div",{className:"flex justify-end gap-1",children:[C.status!=="Pago"&&s.jsx("button",{onClick:()=>S(C),title:"CONFIRMAR PAGAMENTO",className:"p-1.5 text-green-600 hover:bg-green-50 rounded-lg transition-colors",children:s.jsx(Ga,{size:18})}),s.jsx("button",{onClick:()=>w(C),title:"GERAR RECIBO",className:"p-1.5 text-blue-600 hover:bg-blue-50 rounded-lg transition-colors",children:s.jsx(kg,{size:18})}),s.jsx("button",{onClick:()=>R(C),title:"EXCLUIR",className:"p-1.5 text-gray-400 hover:text-red-600 hover:bg-red-50 rounded-lg transition-colors",children:s.jsx(Qt,{size:18})})]})})]},C.id)})})]})})]}),d&&s.jsx("div",{className:"fixed inset-0 z-10",onClick:()=>f(!1)}),h&&s.jsx(YP,{onClose:()=>p(!1),onSaved:y})]})};var $o=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},gr,Ss,Cl,jN,WP=(jN=class extends $o{constructor(){super();we(this,gr);we(this,Ss);we(this,Cl);me(this,Cl,e=>{if(typeof window<"u"&&window.addEventListener){const n=()=>e();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){U(this,Ss)||this.setEventListener(U(this,Cl))}onUnsubscribe(){var e;this.hasListeners()||((e=U(this,Ss))==null||e.call(this),me(this,Ss,void 0))}setEventListener(e){var n;me(this,Cl,e),(n=U(this,Ss))==null||n.call(this),me(this,Ss,e(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(e){U(this,gr)!==e&&(me(this,gr,e),this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(n=>{n(e)})}isFocused(){var e;return typeof U(this,gr)=="boolean"?U(this,gr):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},gr=new WeakMap,Ss=new WeakMap,Cl=new WeakMap,jN),Bm=new WP,XP={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t),setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)},As,Og,SN,ZP=(SN=class{constructor(){we(this,As,XP);we(this,Og,!1)}setTimeoutProvider(t){me(this,As,t)}setTimeout(t,e){return U(this,As).setTimeout(t,e)}clearTimeout(t){U(this,As).clearTimeout(t)}setInterval(t,e){return U(this,As).setInterval(t,e)}clearInterval(t){U(this,As).clearInterval(t)}},As=new WeakMap,Og=new WeakMap,SN),pr=new ZP;function KP(t){setTimeout(t,0)}var JP=typeof window>"u"||"Deno"in globalThis;function dn(){}function eU(t,e){return typeof t=="function"?t(e):t}function pg(t){return typeof t=="number"&&t>=0&&t!==1/0}function iA(t,e){return Math.max(t+(e||0)-Date.now(),0)}function Ps(t,e){return typeof t=="function"?t(e):t}function An(t,e){return typeof t=="function"?t(e):t}function tN(t,e){const{type:n="all",exact:r,fetchStatus:i,predicate:c,queryKey:d,stale:f}=t;if(d){if(r){if(e.queryHash!==Hm(d,e.options))return!1}else if(!Co(e.queryKey,d))return!1}if(n!=="all"){const h=e.isActive();if(n==="active"&&!h||n==="inactive"&&h)return!1}return!(typeof f=="boolean"&&e.isStale()!==f||i&&i!==e.state.fetchStatus||c&&!c(e))}function nN(t,e){const{exact:n,status:r,predicate:i,mutationKey:c}=t;if(c){if(!e.options.mutationKey)return!1;if(n){if(wo(e.options.mutationKey)!==wo(c))return!1}else if(!Co(e.options.mutationKey,c))return!1}return!(r&&e.state.status!==r||i&&!i(e))}function Hm(t,e){return((e==null?void 0:e.queryKeyHashFn)||wo)(t)}function wo(t){return JSON.stringify(t,(e,n)=>mg(n)?Object.keys(n).sort().reduce((r,i)=>(r[i]=n[i],r),{}):n)}function Co(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(e).every(n=>Co(t[n],e[n])):!1}var tU=Object.prototype.hasOwnProperty;function oA(t,e,n=0){if(t===e)return t;if(n>500)return e;const r=aN(t)&&aN(e);if(!r&&!(mg(t)&&mg(e)))return e;const c=(r?t:Object.keys(t)).length,d=r?e:Object.keys(e),f=d.length,h=r?new Array(f):{};let p=0;for(let b=0;b{pr.setTimeout(e,t)})}function xg(t,e,n){return typeof n.structuralSharing=="function"?n.structuralSharing(t,e):n.structuralSharing!==!1?oA(t,e):e}function aU(t,e,n=0){const r=[...t,e];return n&&r.length>n?r.slice(1):r}function sU(t,e,n=0){const r=[e,...t];return n&&r.length>n?r.slice(0,-1):r}var Gm=Symbol();function cA(t,e){return!t.queryFn&&(e!=null&&e.initialPromise)?()=>e.initialPromise:!t.queryFn||t.queryFn===Gm?()=>Promise.reject(new Error(`Missing queryFn: '${t.queryHash}'`)):t.queryFn}function dA(t,e){return typeof t=="function"?t(...e):!!t}function rU(t,e,n){let r=!1,i;return Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(i??(i=e()),r||(r=!0,i.aborted?n():i.addEventListener("abort",n,{once:!0})),i)}),t}var Do=(()=>{let t=()=>JP;return{isServer(){return t()},setIsServer(e){t=e}}})();function bg(){let t,e;const n=new Promise((i,c)=>{t=i,e=c});n.status="pending",n.catch(()=>{});function r(i){Object.assign(n,i),delete n.resolve,delete n.reject}return n.resolve=i=>{r({status:"fulfilled",value:i}),t(i)},n.reject=i=>{r({status:"rejected",reason:i}),e(i)},n}var lU=KP;function iU(){let t=[],e=0,n=f=>{f()},r=f=>{f()},i=lU;const c=f=>{e?t.push(f):i(()=>{n(f)})},d=()=>{const f=t;t=[],f.length&&i(()=>{r(()=>{f.forEach(h=>{n(h)})})})};return{batch:f=>{let h;e++;try{h=f()}finally{e--,e||d()}return h},batchCalls:f=>(...h)=>{c(()=>{f(...h)})},schedule:c,setNotifyFunction:f=>{n=f},setBatchNotifyFunction:f=>{r=f},setScheduler:f=>{i=f}}}var Gt=iU(),Dl,ws,Ol,AN,oU=(AN=class extends $o{constructor(){super();we(this,Dl,!0);we(this,ws);we(this,Ol);me(this,Ol,e=>{if(typeof window<"u"&&window.addEventListener){const n=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){U(this,ws)||this.setEventListener(U(this,Ol))}onUnsubscribe(){var e;this.hasListeners()||((e=U(this,ws))==null||e.call(this),me(this,ws,void 0))}setEventListener(e){var n;me(this,Ol,e),(n=U(this,ws))==null||n.call(this),me(this,ws,e(this.setOnline.bind(this)))}setOnline(e){U(this,Dl)!==e&&(me(this,Dl,e),this.listeners.forEach(r=>{r(e)}))}isOnline(){return U(this,Dl)}},Dl=new WeakMap,ws=new WeakMap,Ol=new WeakMap,AN),gu=new oU;function cU(t){return Math.min(1e3*2**t,3e4)}function uA(t){return(t??"online")==="online"?gu.isOnline():!0}var yg=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function fA(t){let e=!1,n=0,r;const i=bg(),c=()=>i.status!=="pending",d=j=>{var S;if(!c()){const R=new yg(j);x(R),(S=t.onCancel)==null||S.call(t,R)}},f=()=>{e=!0},h=()=>{e=!1},p=()=>Bm.isFocused()&&(t.networkMode==="always"||gu.isOnline())&&t.canRun(),b=()=>uA(t.networkMode)&&t.canRun(),y=j=>{c()||(r==null||r(),i.resolve(j))},x=j=>{c()||(r==null||r(),i.reject(j))},v=()=>new Promise(j=>{var S;r=R=>{(c()||p())&&j(R)},(S=t.onPause)==null||S.call(t)}).then(()=>{var j;r=void 0,c()||(j=t.onContinue)==null||j.call(t)}),N=()=>{if(c())return;let j;const S=n===0?t.initialPromise:void 0;try{j=S??t.fn()}catch(R){j=Promise.reject(R)}Promise.resolve(j).then(y).catch(R=>{var L;if(c())return;const w=t.retry??(Do.isServer()?0:3),D=t.retryDelay??cU,C=typeof D=="function"?D(n,R):D,I=w===!0||typeof w=="number"&&np()?void 0:v()).then(()=>{e?x(R):N()})})};return{promise:i,status:()=>i.status,cancel:d,continue:()=>(r==null||r(),i),cancelRetry:f,continueRetry:h,canStart:b,start:()=>(b()?N():v().then(N),i)}}var mr,wN,hA=(wN=class{constructor(){we(this,mr)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),pg(this.gcTime)&&me(this,mr,pr.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(Do.isServer()?1/0:300*1e3))}clearGcTimeout(){U(this,mr)!==void 0&&(pr.clearTimeout(U(this,mr)),me(this,mr,void 0))}},mr=new WeakMap,wN);function dU(t){return{onFetch:(e,n)=>{var b,y,x,v,N;const r=e.options,i=(x=(y=(b=e.fetchOptions)==null?void 0:b.meta)==null?void 0:y.fetchMore)==null?void 0:x.direction,c=((v=e.state.data)==null?void 0:v.pages)||[],d=((N=e.state.data)==null?void 0:N.pageParams)||[];let f={pages:[],pageParams:[]},h=0;const p=async()=>{let j=!1;const S=D=>{rU(D,()=>e.signal,()=>j=!0)},R=cA(e.options,e.fetchOptions),w=async(D,C,I)=>{if(j)return Promise.reject(e.signal.reason);if(C==null&&D.pages.length)return Promise.resolve(D);const F=(()=>{const H={client:e.client,queryKey:e.queryKey,pageParam:C,direction:I?"backward":"forward",meta:e.options.meta};return S(H),H})(),Y=await R(F),{maxPages:$}=e.options,M=I?sU:aU;return{pages:M(D.pages,Y,$),pageParams:M(D.pageParams,C,$)}};if(i&&c.length){const D=i==="backward",C=D?uU:rN,I={pages:c,pageParams:d},L=C(r,I);f=await w(I,L,D)}else{const D=t??c.length;do{const C=h===0?d[0]??r.initialPageParam:rN(r,f);if(h>0&&C==null)break;f=await w(f,C),h++}while(h{var j,S;return(S=(j=e.options).persister)==null?void 0:S.call(j,p,{client:e.client,queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},n)}:e.fetchFn=p}}}function rN(t,{pages:e,pageParams:n}){const r=e.length-1;return e.length>0?t.getNextPageParam(e[r],e,n[r],n):void 0}function uU(t,{pages:e,pageParams:n}){var r;return e.length>0?(r=t.getPreviousPageParam)==null?void 0:r.call(t,e[0],e,n[0],n):void 0}var Rl,xr,Tl,qn,br,_t,Ro,yr,jn,pA,Ia,CN,fU=(CN=class extends hA{constructor(e){super();we(this,jn);we(this,Rl);we(this,xr);we(this,Tl);we(this,qn);we(this,br);we(this,_t);we(this,Ro);we(this,yr);me(this,yr,!1),me(this,Ro,e.defaultOptions),this.setOptions(e.options),this.observers=[],me(this,br,e.client),me(this,qn,U(this,br).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,me(this,xr,iN(this.options)),this.state=e.state??U(this,xr),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return U(this,Rl)}get promise(){var e;return(e=U(this,_t))==null?void 0:e.promise}setOptions(e){if(this.options={...U(this,Ro),...e},e!=null&&e._type&&me(this,Rl,e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const n=iN(this.options);n.data!==void 0&&(this.setState(lN(n.data,n.dataUpdatedAt)),me(this,xr,n))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&U(this,qn).remove(this)}setData(e,n){const r=xg(this.state.data,e,this.options);return He(this,jn,Ia).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(e){He(this,jn,Ia).call(this,{type:"setState",state:e})}cancel(e){var r,i;const n=(r=U(this,_t))==null?void 0:r.promise;return(i=U(this,_t))==null||i.cancel(e),n?n.then(dn).catch(dn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return U(this,xr)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>An(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Gm||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>Ps(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!iA(this.state.dataUpdatedAt,e)}onFocus(){var n;const e=this.observers.find(r=>r.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(n=U(this,_t))==null||n.continue()}onOnline(){var n;const e=this.observers.find(r=>r.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(n=U(this,_t))==null||n.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),U(this,qn).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(n=>n!==e),this.observers.length||(U(this,_t)&&(U(this,yr)||He(this,jn,pA).call(this)?U(this,_t).cancel({revert:!0}):U(this,_t).cancelRetry()),this.scheduleGc()),U(this,qn).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||He(this,jn,Ia).call(this,{type:"invalidate"})}async fetch(e,n){var p,b,y,x,v,N,j,S,R,w,D;if(this.state.fetchStatus!=="idle"&&((p=U(this,_t))==null?void 0:p.status())!=="rejected"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(U(this,_t))return U(this,_t).continueRetry(),U(this,_t).promise}if(e&&this.setOptions(e),!this.options.queryFn){const C=this.observers.find(I=>I.options.queryFn);C&&this.setOptions(C.options)}const r=new AbortController,i=C=>{Object.defineProperty(C,"signal",{enumerable:!0,get:()=>(me(this,yr,!0),r.signal)})},c=()=>{const C=cA(this.options,n),L=(()=>{const F={client:U(this,br),queryKey:this.queryKey,meta:this.meta};return i(F),F})();return me(this,yr,!1),this.options.persister?this.options.persister(C,L,this):C(L)},f=(()=>{const C={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:U(this,br),state:this.state,fetchFn:c};return i(C),C})(),h=U(this,Rl)==="infinite"?dU(this.options.pages):this.options.behavior;h==null||h.onFetch(f,this),me(this,Tl,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((b=f.fetchOptions)==null?void 0:b.meta))&&He(this,jn,Ia).call(this,{type:"fetch",meta:(y=f.fetchOptions)==null?void 0:y.meta}),me(this,_t,fA({initialPromise:n==null?void 0:n.initialPromise,fn:f.fetchFn,onCancel:C=>{C instanceof yg&&C.revert&&this.setState({...U(this,Tl),fetchStatus:"idle"}),r.abort()},onFail:(C,I)=>{He(this,jn,Ia).call(this,{type:"failed",failureCount:C,error:I})},onPause:()=>{He(this,jn,Ia).call(this,{type:"pause"})},onContinue:()=>{He(this,jn,Ia).call(this,{type:"continue"})},retry:f.options.retry,retryDelay:f.options.retryDelay,networkMode:f.options.networkMode,canRun:()=>!0}));try{const C=await U(this,_t).start();if(C===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(C),(v=(x=U(this,qn).config).onSuccess)==null||v.call(x,C,this),(j=(N=U(this,qn).config).onSettled)==null||j.call(N,C,this.state.error,this),C}catch(C){if(C instanceof yg){if(C.silent)return U(this,_t).promise;if(C.revert){if(this.state.data===void 0)throw C;return this.state.data}}throw He(this,jn,Ia).call(this,{type:"error",error:C}),(R=(S=U(this,qn).config).onError)==null||R.call(S,C,this),(D=(w=U(this,qn).config).onSettled)==null||D.call(w,this.state.data,C,this),C}finally{this.scheduleGc()}}},Rl=new WeakMap,xr=new WeakMap,Tl=new WeakMap,qn=new WeakMap,br=new WeakMap,_t=new WeakMap,Ro=new WeakMap,yr=new WeakMap,jn=new WeakSet,pA=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},Ia=function(e){const n=r=>{switch(e.type){case"failed":return{...r,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...gA(r.data,this.options),fetchMeta:e.meta??null};case"success":const i={...r,...lN(e.data,e.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return me(this,Tl,e.manual?i:void 0),i;case"error":const c=e.error;return{...r,error:c,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:c,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...e.state}}};this.state=n(this.state),Gt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),U(this,qn).notify({query:this,type:"updated",action:e})})},CN);function gA(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:uA(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function lN(t,e){return{data:t,dataUpdatedAt:e??Date.now(),error:null,isInvalidated:!1,status:"success"}}function iN(t){const e=typeof t.initialData=="function"?t.initialData():t.initialData,n=e!==void 0,r=n?typeof t.initialDataUpdatedAt=="function"?t.initialDataUpdatedAt():t.initialDataUpdatedAt:0;return{data:e,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var cn,Fe,To,Jt,vr,kl,La,Cs,ko,_l,Ml,Nr,Er,Ds,Il,Je,io,vg,Ng,Eg,jg,Sg,Ag,wg,mA,DN,hU=(DN=class extends $o{constructor(e,n){super();we(this,Je);we(this,cn);we(this,Fe);we(this,To);we(this,Jt);we(this,vr);we(this,kl);we(this,La);we(this,Cs);we(this,ko);we(this,_l);we(this,Ml);we(this,Nr);we(this,Er);we(this,Ds);we(this,Il,new Set);this.options=n,me(this,cn,e),me(this,Cs,null),me(this,La,bg()),this.bindMethods(),this.setOptions(n)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(U(this,Fe).addObserver(this),oN(U(this,Fe),this.options)?He(this,Je,io).call(this):this.updateResult(),He(this,Je,jg).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Cg(U(this,Fe),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Cg(U(this,Fe),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,He(this,Je,Sg).call(this),He(this,Je,Ag).call(this),U(this,Fe).removeObserver(this)}setOptions(e){const n=this.options,r=U(this,Fe);if(this.options=U(this,cn).defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof An(this.options.enabled,U(this,Fe))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");He(this,Je,wg).call(this),U(this,Fe).setOptions(this.options),n._defaulted&&!gg(this.options,n)&&U(this,cn).getQueryCache().notify({type:"observerOptionsUpdated",query:U(this,Fe),observer:this});const i=this.hasListeners();i&&cN(U(this,Fe),r,this.options,n)&&He(this,Je,io).call(this),this.updateResult(),i&&(U(this,Fe)!==r||An(this.options.enabled,U(this,Fe))!==An(n.enabled,U(this,Fe))||Ps(this.options.staleTime,U(this,Fe))!==Ps(n.staleTime,U(this,Fe)))&&He(this,Je,vg).call(this);const c=He(this,Je,Ng).call(this);i&&(U(this,Fe)!==r||An(this.options.enabled,U(this,Fe))!==An(n.enabled,U(this,Fe))||c!==U(this,Ds))&&He(this,Je,Eg).call(this,c)}getOptimisticResult(e){const n=U(this,cn).getQueryCache().build(U(this,cn),e),r=this.createResult(n,e);return gU(this,r)&&(me(this,Jt,r),me(this,kl,this.options),me(this,vr,U(this,Fe).state)),r}getCurrentResult(){return U(this,Jt)}trackResult(e,n){return new Proxy(e,{get:(r,i)=>(this.trackProp(i),n==null||n(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&U(this,La).status==="pending"&&U(this,La).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(r,i))})}trackProp(e){U(this,Il).add(e)}getCurrentQuery(){return U(this,Fe)}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const n=U(this,cn).defaultQueryOptions(e),r=U(this,cn).getQueryCache().build(U(this,cn),n);return r.fetch().then(()=>this.createResult(r,n))}fetch(e){return He(this,Je,io).call(this,{...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),U(this,Jt)))}createResult(e,n){var $;const r=U(this,Fe),i=this.options,c=U(this,Jt),d=U(this,vr),f=U(this,kl),p=e!==r?e.state:U(this,To),{state:b}=e;let y={...b},x=!1,v;if(n._optimisticResults){const M=this.hasListeners(),H=!M&&oN(e,n),ne=M&&cN(e,r,n,i);(H||ne)&&(y={...y,...gA(b.data,e.options)}),n._optimisticResults==="isRestoring"&&(y.fetchStatus="idle")}let{error:N,errorUpdatedAt:j,status:S}=y;v=y.data;let R=!1;if(n.placeholderData!==void 0&&v===void 0&&S==="pending"){let M;c!=null&&c.isPlaceholderData&&n.placeholderData===(f==null?void 0:f.placeholderData)?(M=c.data,R=!0):M=typeof n.placeholderData=="function"?n.placeholderData(($=U(this,Ml))==null?void 0:$.state.data,U(this,Ml)):n.placeholderData,M!==void 0&&(S="success",v=xg(c==null?void 0:c.data,M,n),x=!0)}if(n.select&&v!==void 0&&!R)if(c&&v===(d==null?void 0:d.data)&&n.select===U(this,ko))v=U(this,_l);else try{me(this,ko,n.select),v=n.select(v),v=xg(c==null?void 0:c.data,v,n),me(this,_l,v),me(this,Cs,null)}catch(M){me(this,Cs,M)}U(this,Cs)&&(N=U(this,Cs),v=U(this,_l),j=Date.now(),S="error");const w=y.fetchStatus==="fetching",D=S==="pending",C=S==="error",I=D&&w,L=v!==void 0,Y={status:S,fetchStatus:y.fetchStatus,isPending:D,isSuccess:S==="success",isError:C,isInitialLoading:I,isLoading:I,data:v,dataUpdatedAt:y.dataUpdatedAt,error:N,errorUpdatedAt:j,failureCount:y.fetchFailureCount,failureReason:y.fetchFailureReason,errorUpdateCount:y.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:y.dataUpdateCount>p.dataUpdateCount||y.errorUpdateCount>p.errorUpdateCount,isFetching:w,isRefetching:w&&!D,isLoadingError:C&&!L,isPaused:y.fetchStatus==="paused",isPlaceholderData:x,isRefetchError:C&&L,isStale:Fm(e,n),refetch:this.refetch,promise:U(this,La),isEnabled:An(n.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const M=Y.data!==void 0,H=Y.status==="error"&&!M,ne=pe=>{H?pe.reject(Y.error):M&&pe.resolve(Y.data)},ee=()=>{const pe=me(this,La,Y.promise=bg());ne(pe)},he=U(this,La);switch(he.status){case"pending":e.queryHash===r.queryHash&&ne(he);break;case"fulfilled":(H||Y.data!==he.value)&&ee();break;case"rejected":(!H||Y.error!==he.reason)&&ee();break}}return Y}updateResult(){const e=U(this,Jt),n=this.createResult(U(this,Fe),this.options);if(me(this,vr,U(this,Fe).state),me(this,kl,this.options),U(this,vr).data!==void 0&&me(this,Ml,U(this,Fe)),gg(n,e))return;me(this,Jt,n);const r=()=>{if(!e)return!0;const{notifyOnChangeProps:i}=this.options,c=typeof i=="function"?i():i;if(c==="all"||!c&&!U(this,Il).size)return!0;const d=new Set(c??U(this,Il));return this.options.throwOnError&&d.add("error"),Object.keys(U(this,Jt)).some(f=>{const h=f;return U(this,Jt)[h]!==e[h]&&d.has(h)})};He(this,Je,mA).call(this,{listeners:r()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&He(this,Je,jg).call(this)}},cn=new WeakMap,Fe=new WeakMap,To=new WeakMap,Jt=new WeakMap,vr=new WeakMap,kl=new WeakMap,La=new WeakMap,Cs=new WeakMap,ko=new WeakMap,_l=new WeakMap,Ml=new WeakMap,Nr=new WeakMap,Er=new WeakMap,Ds=new WeakMap,Il=new WeakMap,Je=new WeakSet,io=function(e){He(this,Je,wg).call(this);let n=U(this,Fe).fetch(this.options,e);return e!=null&&e.throwOnError||(n=n.catch(dn)),n},vg=function(){He(this,Je,Sg).call(this);const e=Ps(this.options.staleTime,U(this,Fe));if(Do.isServer()||U(this,Jt).isStale||!pg(e))return;const r=iA(U(this,Jt).dataUpdatedAt,e)+1;me(this,Nr,pr.setTimeout(()=>{U(this,Jt).isStale||this.updateResult()},r))},Ng=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(U(this,Fe)):this.options.refetchInterval)??!1},Eg=function(e){He(this,Je,Ag).call(this),me(this,Ds,e),!(Do.isServer()||An(this.options.enabled,U(this,Fe))===!1||!pg(U(this,Ds))||U(this,Ds)===0)&&me(this,Er,pr.setInterval(()=>{(this.options.refetchIntervalInBackground||Bm.isFocused())&&He(this,Je,io).call(this)},U(this,Ds)))},jg=function(){He(this,Je,vg).call(this),He(this,Je,Eg).call(this,He(this,Je,Ng).call(this))},Sg=function(){U(this,Nr)!==void 0&&(pr.clearTimeout(U(this,Nr)),me(this,Nr,void 0))},Ag=function(){U(this,Er)!==void 0&&(pr.clearInterval(U(this,Er)),me(this,Er,void 0))},wg=function(){const e=U(this,cn).getQueryCache().build(U(this,cn),this.options);if(e===U(this,Fe))return;const n=U(this,Fe);me(this,Fe,e),me(this,To,e.state),this.hasListeners()&&(n==null||n.removeObserver(this),e.addObserver(this))},mA=function(e){Gt.batch(()=>{e.listeners&&this.listeners.forEach(n=>{n(U(this,Jt))}),U(this,cn).getQueryCache().notify({query:U(this,Fe),type:"observerResultsUpdated"})})},DN);function pU(t,e){return An(e.enabled,t)!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&An(e.retryOnMount,t)===!1)}function oN(t,e){return pU(t,e)||t.state.data!==void 0&&Cg(t,e,e.refetchOnMount)}function Cg(t,e,n){if(An(e.enabled,t)!==!1&&Ps(e.staleTime,t)!=="static"){const r=typeof n=="function"?n(t):n;return r==="always"||r!==!1&&Fm(t,e)}return!1}function cN(t,e,n,r){return(t!==e||An(r.enabled,t)===!1)&&(!n.suspense||t.state.status!=="error")&&Fm(t,n)}function Fm(t,e){return An(e.enabled,t)!==!1&&t.isStaleByTime(Ps(e.staleTime,t))}function gU(t,e){return!gg(t.getCurrentResult(),e)}var _o,da,$t,jr,ua,js,ON,mU=(ON=class extends hA{constructor(e){super();we(this,ua);we(this,_o);we(this,da);we(this,$t);we(this,jr);me(this,_o,e.client),this.mutationId=e.mutationId,me(this,$t,e.mutationCache),me(this,da,[]),this.state=e.state||xU(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){U(this,da).includes(e)||(U(this,da).push(e),this.clearGcTimeout(),U(this,$t).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){me(this,da,U(this,da).filter(n=>n!==e)),this.scheduleGc(),U(this,$t).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){U(this,da).length||(this.state.status==="pending"?this.scheduleGc():U(this,$t).remove(this))}continue(){var e;return((e=U(this,jr))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var d,f,h,p,b,y,x,v,N,j,S,R,w,D,C,I,L,F;const n=()=>{He(this,ua,js).call(this,{type:"continue"})},r={client:U(this,_o),meta:this.options.meta,mutationKey:this.options.mutationKey};me(this,jr,fA({fn:()=>this.options.mutationFn?this.options.mutationFn(e,r):Promise.reject(new Error("No mutationFn found")),onFail:(Y,$)=>{He(this,ua,js).call(this,{type:"failed",failureCount:Y,error:$})},onPause:()=>{He(this,ua,js).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>U(this,$t).canRun(this)}));const i=this.state.status==="pending",c=!U(this,jr).canStart();try{if(i)n();else{He(this,ua,js).call(this,{type:"pending",variables:e,isPaused:c}),U(this,$t).config.onMutate&&await U(this,$t).config.onMutate(e,this,r);const $=await((f=(d=this.options).onMutate)==null?void 0:f.call(d,e,r));$!==this.state.context&&He(this,ua,js).call(this,{type:"pending",context:$,variables:e,isPaused:c})}const Y=await U(this,jr).start();return await((p=(h=U(this,$t).config).onSuccess)==null?void 0:p.call(h,Y,e,this.state.context,this,r)),await((y=(b=this.options).onSuccess)==null?void 0:y.call(b,Y,e,this.state.context,r)),await((v=(x=U(this,$t).config).onSettled)==null?void 0:v.call(x,Y,null,this.state.variables,this.state.context,this,r)),await((j=(N=this.options).onSettled)==null?void 0:j.call(N,Y,null,e,this.state.context,r)),He(this,ua,js).call(this,{type:"success",data:Y}),Y}catch(Y){try{await((R=(S=U(this,$t).config).onError)==null?void 0:R.call(S,Y,e,this.state.context,this,r))}catch($){Promise.reject($)}try{await((D=(w=this.options).onError)==null?void 0:D.call(w,Y,e,this.state.context,r))}catch($){Promise.reject($)}try{await((I=(C=U(this,$t).config).onSettled)==null?void 0:I.call(C,void 0,Y,this.state.variables,this.state.context,this,r))}catch($){Promise.reject($)}try{await((F=(L=this.options).onSettled)==null?void 0:F.call(L,void 0,Y,e,this.state.context,r))}catch($){Promise.reject($)}throw He(this,ua,js).call(this,{type:"error",error:Y}),Y}finally{U(this,$t).runNext(this)}}},_o=new WeakMap,da=new WeakMap,$t=new WeakMap,jr=new WeakMap,ua=new WeakSet,js=function(e){const n=r=>{switch(e.type){case"failed":return{...r,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...r,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:e.error,failureCount:r.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=n(this.state),Gt.batch(()=>{U(this,da).forEach(r=>{r.onMutationUpdate(e)}),U(this,$t).notify({mutation:this,type:"updated",action:e})})},ON);function xU(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var za,ea,Mo,RN,bU=(RN=class extends $o{constructor(e={}){super();we(this,za);we(this,ea);we(this,Mo);this.config=e,me(this,za,new Set),me(this,ea,new Map),me(this,Mo,0)}build(e,n,r){const i=new mU({client:e,mutationCache:this,mutationId:++dd(this,Mo)._,options:e.defaultMutationOptions(n),state:r});return this.add(i),i}add(e){U(this,za).add(e);const n=Ad(e);if(typeof n=="string"){const r=U(this,ea).get(n);r?r.push(e):U(this,ea).set(n,[e])}this.notify({type:"added",mutation:e})}remove(e){if(U(this,za).delete(e)){const n=Ad(e);if(typeof n=="string"){const r=U(this,ea).get(n);if(r)if(r.length>1){const i=r.indexOf(e);i!==-1&&r.splice(i,1)}else r[0]===e&&U(this,ea).delete(n)}}this.notify({type:"removed",mutation:e})}canRun(e){const n=Ad(e);if(typeof n=="string"){const r=U(this,ea).get(n),i=r==null?void 0:r.find(c=>c.state.status==="pending");return!i||i===e}else return!0}runNext(e){var r;const n=Ad(e);if(typeof n=="string"){const i=(r=U(this,ea).get(n))==null?void 0:r.find(c=>c!==e&&c.state.isPaused);return(i==null?void 0:i.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Gt.batch(()=>{U(this,za).forEach(e=>{this.notify({type:"removed",mutation:e})}),U(this,za).clear(),U(this,ea).clear()})}getAll(){return Array.from(U(this,za))}find(e){const n={exact:!0,...e};return this.getAll().find(r=>nN(n,r))}findAll(e={}){return this.getAll().filter(n=>nN(e,n))}notify(e){Gt.batch(()=>{this.listeners.forEach(n=>{n(e)})})}resumePausedMutations(){const e=this.getAll().filter(n=>n.state.isPaused);return Gt.batch(()=>Promise.all(e.map(n=>n.continue().catch(dn))))}},za=new WeakMap,ea=new WeakMap,Mo=new WeakMap,RN);function Ad(t){var e;return(e=t.options.scope)==null?void 0:e.id}var fa,TN,yU=(TN=class extends $o{constructor(e={}){super();we(this,fa);this.config=e,me(this,fa,new Map)}build(e,n,r){const i=n.queryKey,c=n.queryHash??Hm(i,n);let d=this.get(c);return d||(d=new fU({client:e,queryKey:i,queryHash:c,options:e.defaultQueryOptions(n),state:r,defaultOptions:e.getQueryDefaults(i)}),this.add(d)),d}add(e){U(this,fa).has(e.queryHash)||(U(this,fa).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const n=U(this,fa).get(e.queryHash);n&&(e.destroy(),n===e&&U(this,fa).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){Gt.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return U(this,fa).get(e)}getAll(){return[...U(this,fa).values()]}find(e){const n={exact:!0,...e};return this.getAll().find(r=>tN(n,r))}findAll(e={}){const n=this.getAll();return Object.keys(e).length>0?n.filter(r=>tN(e,r)):n}notify(e){Gt.batch(()=>{this.listeners.forEach(n=>{n(e)})})}onFocus(){Gt.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){Gt.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},fa=new WeakMap,TN),yt,Os,Rs,Ll,zl,Ts,Pl,Ul,kN,vU=(kN=class{constructor(t={}){we(this,yt);we(this,Os);we(this,Rs);we(this,Ll);we(this,zl);we(this,Ts);we(this,Pl);we(this,Ul);me(this,yt,t.queryCache||new yU),me(this,Os,t.mutationCache||new bU),me(this,Rs,t.defaultOptions||{}),me(this,Ll,new Map),me(this,zl,new Map),me(this,Ts,0)}mount(){dd(this,Ts)._++,U(this,Ts)===1&&(me(this,Pl,Bm.subscribe(async t=>{t&&(await this.resumePausedMutations(),U(this,yt).onFocus())})),me(this,Ul,gu.subscribe(async t=>{t&&(await this.resumePausedMutations(),U(this,yt).onOnline())})))}unmount(){var t,e;dd(this,Ts)._--,U(this,Ts)===0&&((t=U(this,Pl))==null||t.call(this),me(this,Pl,void 0),(e=U(this,Ul))==null||e.call(this),me(this,Ul,void 0))}isFetching(t){return U(this,yt).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return U(this,Os).findAll({...t,status:"pending"}).length}getQueryData(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=U(this,yt).get(e.queryHash))==null?void 0:n.state.data}ensureQueryData(t){const e=this.defaultQueryOptions(t),n=U(this,yt).build(this,e),r=n.state.data;return r===void 0?this.fetchQuery(t):(t.revalidateIfStale&&n.isStaleByTime(Ps(e.staleTime,n))&&this.prefetchQuery(e),Promise.resolve(r))}getQueriesData(t){return U(this,yt).findAll(t).map(({queryKey:e,state:n})=>{const r=n.data;return[e,r]})}setQueryData(t,e,n){const r=this.defaultQueryOptions({queryKey:t}),i=U(this,yt).get(r.queryHash),c=i==null?void 0:i.state.data,d=eU(e,c);if(d!==void 0)return U(this,yt).build(this,r).setData(d,{...n,manual:!0})}setQueriesData(t,e,n){return Gt.batch(()=>U(this,yt).findAll(t).map(({queryKey:r})=>[r,this.setQueryData(r,e,n)]))}getQueryState(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=U(this,yt).get(e.queryHash))==null?void 0:n.state}removeQueries(t){const e=U(this,yt);Gt.batch(()=>{e.findAll(t).forEach(n=>{e.remove(n)})})}resetQueries(t,e){const n=U(this,yt);return Gt.batch(()=>(n.findAll(t).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...t},e)))}cancelQueries(t,e={}){const n={revert:!0,...e},r=Gt.batch(()=>U(this,yt).findAll(t).map(i=>i.cancel(n)));return Promise.all(r).then(dn).catch(dn)}invalidateQueries(t,e={}){return Gt.batch(()=>(U(this,yt).findAll(t).forEach(n=>{n.invalidate()}),(t==null?void 0:t.refetchType)==="none"?Promise.resolve():this.refetchQueries({...t,type:(t==null?void 0:t.refetchType)??(t==null?void 0:t.type)??"active"},e)))}refetchQueries(t,e={}){const n={...e,cancelRefetch:e.cancelRefetch??!0},r=Gt.batch(()=>U(this,yt).findAll(t).filter(i=>!i.isDisabled()&&!i.isStatic()).map(i=>{let c=i.fetch(void 0,n);return n.throwOnError||(c=c.catch(dn)),i.state.fetchStatus==="paused"?Promise.resolve():c}));return Promise.all(r).then(dn)}fetchQuery(t){const e=this.defaultQueryOptions(t);e.retry===void 0&&(e.retry=!1);const n=U(this,yt).build(this,e);return n.isStaleByTime(Ps(e.staleTime,n))?n.fetch(e):Promise.resolve(n.state.data)}prefetchQuery(t){return this.fetchQuery(t).then(dn).catch(dn)}fetchInfiniteQuery(t){return t._type="infinite",this.fetchQuery(t)}prefetchInfiniteQuery(t){return this.fetchInfiniteQuery(t).then(dn).catch(dn)}ensureInfiniteQueryData(t){return t._type="infinite",this.ensureQueryData(t)}resumePausedMutations(){return gu.isOnline()?U(this,Os).resumePausedMutations():Promise.resolve()}getQueryCache(){return U(this,yt)}getMutationCache(){return U(this,Os)}getDefaultOptions(){return U(this,Rs)}setDefaultOptions(t){me(this,Rs,t)}setQueryDefaults(t,e){U(this,Ll).set(wo(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...U(this,Ll).values()],n={};return e.forEach(r=>{Co(t,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(t,e){U(this,zl).set(wo(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...U(this,zl).values()],n={};return e.forEach(r=>{Co(t,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(t){if(t._defaulted)return t;const e={...U(this,Rs).queries,...this.getQueryDefaults(t.queryKey),...t,_defaulted:!0};return e.queryHash||(e.queryHash=Hm(e.queryKey,e)),e.refetchOnReconnect===void 0&&(e.refetchOnReconnect=e.networkMode!=="always"),e.throwOnError===void 0&&(e.throwOnError=!!e.suspense),!e.networkMode&&e.persister&&(e.networkMode="offlineFirst"),e.queryFn===Gm&&(e.enabled=!1),e}defaultMutationOptions(t){return t!=null&&t._defaulted?t:{...U(this,Rs).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){U(this,yt).clear(),U(this,Os).clear()}},yt=new WeakMap,Os=new WeakMap,Rs=new WeakMap,Ll=new WeakMap,zl=new WeakMap,Ts=new WeakMap,Pl=new WeakMap,Ul=new WeakMap,kN),xA=A.createContext(void 0),NU=t=>{const e=A.useContext(xA);if(!e)throw new Error("No QueryClient set, use QueryClientProvider to set one");return e},EU=({client:t,children:e})=>(A.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),s.jsx(xA.Provider,{value:t,children:e})),bA=A.createContext(!1),jU=()=>A.useContext(bA);bA.Provider;function SU(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var AU=A.createContext(SU()),wU=()=>A.useContext(AU),CU=(t,e,n)=>{const r=n!=null&&n.state.error&&typeof t.throwOnError=="function"?dA(t.throwOnError,[n.state.error,n]):t.throwOnError;(t.suspense||t.experimental_prefetchInRender||r)&&(e.isReset()||(t.retryOnMount=!1))},DU=t=>{A.useEffect(()=>{t.clearReset()},[t])},OU=({result:t,errorResetBoundary:e,throwOnError:n,query:r,suspense:i})=>t.isError&&!e.isReset()&&!t.isFetching&&r&&(i&&t.data===void 0||dA(n,[t.error,r])),RU=t=>{if(t.suspense){const n=i=>i==="static"?i:Math.max(i??1e3,1e3),r=t.staleTime;t.staleTime=typeof r=="function"?(...i)=>n(r(...i)):n(r),typeof t.gcTime=="number"&&(t.gcTime=Math.max(t.gcTime,1e3))}},TU=(t,e)=>t.isLoading&&t.isFetching&&!e,kU=(t,e)=>(t==null?void 0:t.suspense)&&e.isPending,dN=(t,e,n)=>e.fetchOptimistic(t).catch(()=>{n.clearReset()});function _U(t,e,n){var x,v,N,j;const r=jU(),i=wU(),c=NU(),d=c.defaultQueryOptions(t);(v=(x=c.getDefaultOptions().queries)==null?void 0:x._experimental_beforeQuery)==null||v.call(x,d);const f=c.getQueryCache().get(d.queryHash);d._optimisticResults=r?"isRestoring":"optimistic",RU(d),CU(d,i,f),DU(i);const h=!c.getQueryCache().get(d.queryHash),[p]=A.useState(()=>new e(c,d)),b=p.getOptimisticResult(d),y=!r&&t.subscribed!==!1;if(A.useSyncExternalStore(A.useCallback(S=>{const R=y?p.subscribe(Gt.batchCalls(S)):dn;return p.updateResult(),R},[p,y]),()=>p.getCurrentResult(),()=>p.getCurrentResult()),A.useEffect(()=>{p.setOptions(d)},[d,p]),kU(d,b))throw dN(d,p,i);if(OU({result:b,errorResetBoundary:i,throwOnError:d.throwOnError,query:f,suspense:d.suspense}))throw b.error;if((j=(N=c.getDefaultOptions().queries)==null?void 0:N._experimental_afterQuery)==null||j.call(N,d,b),d.experimental_prefetchInRender&&!Do.isServer()&&TU(b,r)){const S=h?dN(d,p,i):f==null?void 0:f.promise;S==null||S.catch(dn).finally(()=>{p.updateResult()})}return d.notifyOnChangeProps?b:p.trackResult(b)}function MU(t,e){return _U(t,hU)}const yA=6048e5,IU=864e5,vA=6e4,NA=36e5,uN=Symbol.for("constructDateFrom");function qa(t,e){return typeof t=="function"?t(e):t&&typeof t=="object"&&uN in t?t[uN](e):t instanceof Date?new t.constructor(e):new Date(e)}function Tn(t,e){return qa(e||t,t)}let LU={};function Lu(){return LU}function Oo(t,e){var f,h,p,b;const n=Lu(),r=(e==null?void 0:e.weekStartsOn)??((h=(f=e==null?void 0:e.locale)==null?void 0:f.options)==null?void 0:h.weekStartsOn)??n.weekStartsOn??((b=(p=n.locale)==null?void 0:p.options)==null?void 0:b.weekStartsOn)??0,i=Tn(t,e==null?void 0:e.in),c=i.getDay(),d=(c=c.getTime()?r+1:n.getTime()>=f.getTime()?r:r-1}function fN(t){const e=Tn(t),n=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return n.setUTCFullYear(e.getFullYear()),+t-+n}function zU(t,...e){const n=qa.bind(null,e.find(r=>typeof r=="object"));return e.map(n)}function hN(t,e){const n=Tn(t,e==null?void 0:e.in);return n.setHours(0,0,0,0),n}function PU(t,e,n){const[r,i]=zU(n==null?void 0:n.in,t,e),c=hN(r),d=hN(i),f=+c-fN(c),h=+d-fN(d);return Math.round((f-h)/IU)}function UU(t,e){const n=EA(t,e),r=qa(t,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),mu(r)}function BU(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function HU(t){return!(!BU(t)&&typeof t!="number"||isNaN(+Tn(t)))}function GU(t,e){const n=Tn(t,e==null?void 0:e.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}const FU={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},VU=(t,e,n)=>{let r;const i=FU[t];return typeof i=="string"?r=i:e===1?r=i.one:r=i.other.replace("{{count}}",e.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Hp(t){return(e={})=>{const n=e.width?String(e.width):t.defaultWidth;return t.formats[n]||t.formats[t.defaultWidth]}}const qU={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},$U={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},YU={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},QU={date:Hp({formats:qU,defaultWidth:"full"}),time:Hp({formats:$U,defaultWidth:"full"}),dateTime:Hp({formats:YU,defaultWidth:"full"})},WU={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},XU=(t,e,n,r)=>WU[t];function ao(t){return(e,n)=>{const r=n!=null&&n.context?String(n.context):"standalone";let i;if(r==="formatting"&&t.formattingValues){const d=t.defaultFormattingWidth||t.defaultWidth,f=n!=null&&n.width?String(n.width):d;i=t.formattingValues[f]||t.formattingValues[d]}else{const d=t.defaultWidth,f=n!=null&&n.width?String(n.width):t.defaultWidth;i=t.values[f]||t.values[d]}const c=t.argumentCallback?t.argumentCallback(e):e;return i[c]}}const ZU={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},KU={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},JU={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},e8={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},t8={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},n8={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},a8=(t,e)=>{const n=Number(t),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},s8={ordinalNumber:a8,era:ao({values:ZU,defaultWidth:"wide"}),quarter:ao({values:KU,defaultWidth:"wide",argumentCallback:t=>t-1}),month:ao({values:JU,defaultWidth:"wide"}),day:ao({values:e8,defaultWidth:"wide"}),dayPeriod:ao({values:t8,defaultWidth:"wide",formattingValues:n8,defaultFormattingWidth:"wide"})};function so(t){return(e,n={})=>{const r=n.width,i=r&&t.matchPatterns[r]||t.matchPatterns[t.defaultMatchWidth],c=e.match(i);if(!c)return null;const d=c[0],f=r&&t.parsePatterns[r]||t.parsePatterns[t.defaultParseWidth],h=Array.isArray(f)?l8(f,y=>y.test(d)):r8(f,y=>y.test(d));let p;p=t.valueCallback?t.valueCallback(h):h,p=n.valueCallback?n.valueCallback(p):p;const b=e.slice(d.length);return{value:p,rest:b}}}function r8(t,e){for(const n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(t[n]))return n}function l8(t,e){for(let n=0;n{const r=e.match(t.matchPattern);if(!r)return null;const i=r[0],c=e.match(t.parsePattern);if(!c)return null;let d=t.valueCallback?t.valueCallback(c[0]):c[0];d=n.valueCallback?n.valueCallback(d):d;const f=e.slice(i.length);return{value:d,rest:f}}}const o8=/^(\d+)(th|st|nd|rd)?/i,c8=/\d+/i,d8={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},u8={any:[/^b/i,/^(a|c)/i]},f8={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},h8={any:[/1/i,/2/i,/3/i,/4/i]},p8={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},g8={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},m8={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},x8={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},b8={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},y8={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},v8={ordinalNumber:i8({matchPattern:o8,parsePattern:c8,valueCallback:t=>parseInt(t,10)}),era:so({matchPatterns:d8,defaultMatchWidth:"wide",parsePatterns:u8,defaultParseWidth:"any"}),quarter:so({matchPatterns:f8,defaultMatchWidth:"wide",parsePatterns:h8,defaultParseWidth:"any",valueCallback:t=>t+1}),month:so({matchPatterns:p8,defaultMatchWidth:"wide",parsePatterns:g8,defaultParseWidth:"any"}),day:so({matchPatterns:m8,defaultMatchWidth:"wide",parsePatterns:x8,defaultParseWidth:"any"}),dayPeriod:so({matchPatterns:b8,defaultMatchWidth:"any",parsePatterns:y8,defaultParseWidth:"any"})},N8={code:"en-US",formatDistance:VU,formatLong:QU,formatRelative:XU,localize:s8,match:v8,options:{weekStartsOn:0,firstWeekContainsDate:1}};function E8(t,e){const n=Tn(t,e==null?void 0:e.in);return PU(n,GU(n))+1}function j8(t,e){const n=Tn(t,e==null?void 0:e.in),r=+mu(n)-+UU(n);return Math.round(r/yA)+1}function jA(t,e){var b,y,x,v;const n=Tn(t,e==null?void 0:e.in),r=n.getFullYear(),i=Lu(),c=(e==null?void 0:e.firstWeekContainsDate)??((y=(b=e==null?void 0:e.locale)==null?void 0:b.options)==null?void 0:y.firstWeekContainsDate)??i.firstWeekContainsDate??((v=(x=i.locale)==null?void 0:x.options)==null?void 0:v.firstWeekContainsDate)??1,d=qa((e==null?void 0:e.in)||t,0);d.setFullYear(r+1,0,c),d.setHours(0,0,0,0);const f=Oo(d,e),h=qa((e==null?void 0:e.in)||t,0);h.setFullYear(r,0,c),h.setHours(0,0,0,0);const p=Oo(h,e);return+n>=+f?r+1:+n>=+p?r:r-1}function S8(t,e){var f,h,p,b;const n=Lu(),r=(e==null?void 0:e.firstWeekContainsDate)??((h=(f=e==null?void 0:e.locale)==null?void 0:f.options)==null?void 0:h.firstWeekContainsDate)??n.firstWeekContainsDate??((b=(p=n.locale)==null?void 0:p.options)==null?void 0:b.firstWeekContainsDate)??1,i=jA(t,e),c=qa((e==null?void 0:e.in)||t,0);return c.setFullYear(i,0,r),c.setHours(0,0,0,0),Oo(c,e)}function A8(t,e){const n=Tn(t,e==null?void 0:e.in),r=+Oo(n,e)-+S8(n,e);return Math.round(r/yA)+1}function at(t,e){const n=t<0?"-":"",r=Math.abs(t).toString().padStart(e,"0");return n+r}const Es={y(t,e){const n=t.getFullYear(),r=n>0?n:1-n;return at(e==="yy"?r%100:r,e.length)},M(t,e){const n=t.getMonth();return e==="M"?String(n+1):at(n+1,2)},d(t,e){return at(t.getDate(),e.length)},a(t,e){const n=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(t,e){return at(t.getHours()%12||12,e.length)},H(t,e){return at(t.getHours(),e.length)},m(t,e){return at(t.getMinutes(),e.length)},s(t,e){return at(t.getSeconds(),e.length)},S(t,e){const n=e.length,r=t.getMilliseconds(),i=Math.trunc(r*Math.pow(10,n-3));return at(i,e.length)}},vl={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},pN={G:function(t,e,n){const r=t.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(t,e,n){if(e==="yo"){const r=t.getFullYear(),i=r>0?r:1-r;return n.ordinalNumber(i,{unit:"year"})}return Es.y(t,e)},Y:function(t,e,n,r){const i=jA(t,r),c=i>0?i:1-i;if(e==="YY"){const d=c%100;return at(d,2)}return e==="Yo"?n.ordinalNumber(c,{unit:"year"}):at(c,e.length)},R:function(t,e){const n=EA(t);return at(n,e.length)},u:function(t,e){const n=t.getFullYear();return at(n,e.length)},Q:function(t,e,n){const r=Math.ceil((t.getMonth()+1)/3);switch(e){case"Q":return String(r);case"QQ":return at(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(t,e,n){const r=Math.ceil((t.getMonth()+1)/3);switch(e){case"q":return String(r);case"qq":return at(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(t,e,n){const r=t.getMonth();switch(e){case"M":case"MM":return Es.M(t,e);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(t,e,n){const r=t.getMonth();switch(e){case"L":return String(r+1);case"LL":return at(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(t,e,n,r){const i=A8(t,r);return e==="wo"?n.ordinalNumber(i,{unit:"week"}):at(i,e.length)},I:function(t,e,n){const r=j8(t);return e==="Io"?n.ordinalNumber(r,{unit:"week"}):at(r,e.length)},d:function(t,e,n){return e==="do"?n.ordinalNumber(t.getDate(),{unit:"date"}):Es.d(t,e)},D:function(t,e,n){const r=E8(t);return e==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):at(r,e.length)},E:function(t,e,n){const r=t.getDay();switch(e){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(t,e,n,r){const i=t.getDay(),c=(i-r.weekStartsOn+8)%7||7;switch(e){case"e":return String(c);case"ee":return at(c,2);case"eo":return n.ordinalNumber(c,{unit:"day"});case"eee":return n.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(i,{width:"short",context:"formatting"});case"eeee":default:return n.day(i,{width:"wide",context:"formatting"})}},c:function(t,e,n,r){const i=t.getDay(),c=(i-r.weekStartsOn+8)%7||7;switch(e){case"c":return String(c);case"cc":return at(c,e.length);case"co":return n.ordinalNumber(c,{unit:"day"});case"ccc":return n.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(i,{width:"narrow",context:"standalone"});case"cccccc":return n.day(i,{width:"short",context:"standalone"});case"cccc":default:return n.day(i,{width:"wide",context:"standalone"})}},i:function(t,e,n){const r=t.getDay(),i=r===0?7:r;switch(e){case"i":return String(i);case"ii":return at(i,e.length);case"io":return n.ordinalNumber(i,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(t,e,n){const i=t.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(i,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(i,{width:"wide",context:"formatting"})}},b:function(t,e,n){const r=t.getHours();let i;switch(r===12?i=vl.noon:r===0?i=vl.midnight:i=r/12>=1?"pm":"am",e){case"b":case"bb":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(i,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(i,{width:"wide",context:"formatting"})}},B:function(t,e,n){const r=t.getHours();let i;switch(r>=17?i=vl.evening:r>=12?i=vl.afternoon:r>=4?i=vl.morning:i=vl.night,e){case"B":case"BB":case"BBB":return n.dayPeriod(i,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(i,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(i,{width:"wide",context:"formatting"})}},h:function(t,e,n){if(e==="ho"){let r=t.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return Es.h(t,e)},H:function(t,e,n){return e==="Ho"?n.ordinalNumber(t.getHours(),{unit:"hour"}):Es.H(t,e)},K:function(t,e,n){const r=t.getHours()%12;return e==="Ko"?n.ordinalNumber(r,{unit:"hour"}):at(r,e.length)},k:function(t,e,n){let r=t.getHours();return r===0&&(r=24),e==="ko"?n.ordinalNumber(r,{unit:"hour"}):at(r,e.length)},m:function(t,e,n){return e==="mo"?n.ordinalNumber(t.getMinutes(),{unit:"minute"}):Es.m(t,e)},s:function(t,e,n){return e==="so"?n.ordinalNumber(t.getSeconds(),{unit:"second"}):Es.s(t,e)},S:function(t,e){return Es.S(t,e)},X:function(t,e,n){const r=t.getTimezoneOffset();if(r===0)return"Z";switch(e){case"X":return mN(r);case"XXXX":case"XX":return fr(r);case"XXXXX":case"XXX":default:return fr(r,":")}},x:function(t,e,n){const r=t.getTimezoneOffset();switch(e){case"x":return mN(r);case"xxxx":case"xx":return fr(r);case"xxxxx":case"xxx":default:return fr(r,":")}},O:function(t,e,n){const r=t.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+gN(r,":");case"OOOO":default:return"GMT"+fr(r,":")}},z:function(t,e,n){const r=t.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+gN(r,":");case"zzzz":default:return"GMT"+fr(r,":")}},t:function(t,e,n){const r=Math.trunc(+t/1e3);return at(r,e.length)},T:function(t,e,n){return at(+t,e.length)}};function gN(t,e=""){const n=t>0?"-":"+",r=Math.abs(t),i=Math.trunc(r/60),c=r%60;return c===0?n+String(i):n+String(i)+e+at(c,2)}function mN(t,e){return t%60===0?(t>0?"-":"+")+at(Math.abs(t)/60,2):fr(t,e)}function fr(t,e=""){const n=t>0?"-":"+",r=Math.abs(t),i=at(Math.trunc(r/60),2),c=at(r%60,2);return n+i+e+c}const xN=(t,e)=>{switch(t){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});case"PPPP":default:return e.date({width:"full"})}},SA=(t,e)=>{switch(t){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});case"pppp":default:return e.time({width:"full"})}},w8=(t,e)=>{const n=t.match(/(P+)(p+)?/)||[],r=n[1],i=n[2];if(!i)return xN(t,e);let c;switch(r){case"P":c=e.dateTime({width:"short"});break;case"PP":c=e.dateTime({width:"medium"});break;case"PPP":c=e.dateTime({width:"long"});break;case"PPPP":default:c=e.dateTime({width:"full"});break}return c.replace("{{date}}",xN(r,e)).replace("{{time}}",SA(i,e))},C8={p:SA,P:w8},D8=/^D+$/,O8=/^Y+$/,R8=["D","DD","YY","YYYY"];function T8(t){return D8.test(t)}function k8(t){return O8.test(t)}function _8(t,e,n){const r=M8(t,e,n);if(console.warn(r),R8.includes(t))throw new RangeError(r)}function M8(t,e,n){const r=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${e}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const I8=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,L8=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,z8=/^'([^]*?)'?$/,P8=/''/g,U8=/[a-zA-Z]/;function Gp(t,e,n){var b,y,x,v;const r=Lu(),i=r.locale??N8,c=r.firstWeekContainsDate??((y=(b=r.locale)==null?void 0:b.options)==null?void 0:y.firstWeekContainsDate)??1,d=r.weekStartsOn??((v=(x=r.locale)==null?void 0:x.options)==null?void 0:v.weekStartsOn)??0,f=Tn(t,n==null?void 0:n.in);if(!HU(f))throw new RangeError("Invalid time value");let h=e.match(L8).map(N=>{const j=N[0];if(j==="p"||j==="P"){const S=C8[j];return S(N,i.formatLong)}return N}).join("").match(I8).map(N=>{if(N==="''")return{isToken:!1,value:"'"};const j=N[0];if(j==="'")return{isToken:!1,value:B8(N)};if(pN[j])return{isToken:!0,value:N};if(j.match(U8))throw new RangeError("Format string contains an unescaped latin alphabet character `"+j+"`");return{isToken:!1,value:N}});i.localize.preprocessor&&(h=i.localize.preprocessor(f,h));const p={firstWeekContainsDate:c,weekStartsOn:d,locale:i};return h.map(N=>{if(!N.isToken)return N.value;const j=N.value;(k8(j)||T8(j))&&_8(j,e,String(t));const S=pN[j[0]];return S(f,j,i.localize,p)}).join("")}function B8(t){const e=t.match(z8);return e?e[1].replace(P8,"'"):t}function bN(t,e){const n=()=>qa(e==null?void 0:e.in,NaN),i=V8(t);let c;if(i.date){const p=q8(i.date,2);c=$8(p.restDateString,p.year)}if(!c||isNaN(+c))return n();const d=+c;let f=0,h;if(i.time&&(f=Y8(i.time),isNaN(f)))return n();if(i.timezone){if(h=Q8(i.timezone),isNaN(h))return n()}else{const p=new Date(d+f),b=Tn(0,e==null?void 0:e.in);return b.setFullYear(p.getUTCFullYear(),p.getUTCMonth(),p.getUTCDate()),b.setHours(p.getUTCHours(),p.getUTCMinutes(),p.getUTCSeconds(),p.getUTCMilliseconds()),b}return Tn(d+f+h,e==null?void 0:e.in)}const wd={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},H8=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,G8=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,F8=/^([+-])(\d{2})(?::?(\d{2}))?$/;function V8(t){const e={},n=t.split(wd.dateTimeDelimiter);let r;if(n.length>2)return e;if(/:/.test(n[0])?r=n[0]:(e.date=n[0],r=n[1],wd.timeZoneDelimiter.test(e.date)&&(e.date=t.split(wd.timeZoneDelimiter)[0],r=t.substr(e.date.length,t.length))),r){const i=wd.timezone.exec(r);i?(e.time=r.replace(i[1],""),e.timezone=i[1]):e.time=r}return e}function q8(t,e){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+e)+"})|(\\d{2}|[+-]\\d{"+(2+e)+"})$)"),r=t.match(n);if(!r)return{year:NaN,restDateString:""};const i=r[1]?parseInt(r[1]):null,c=r[2]?parseInt(r[2]):null;return{year:c===null?i:c*100,restDateString:t.slice((r[1]||r[2]).length)}}function $8(t,e){if(e===null)return new Date(NaN);const n=t.match(H8);if(!n)return new Date(NaN);const r=!!n[4],i=ro(n[1]),c=ro(n[2])-1,d=ro(n[3]),f=ro(n[4]),h=ro(n[5])-1;if(r)return J8(e,f,h)?W8(e,f,h):new Date(NaN);{const p=new Date(0);return!Z8(e,c,d)||!K8(e,i)?new Date(NaN):(p.setUTCFullYear(e,c,Math.max(i,d)),p)}}function ro(t){return t?parseInt(t):1}function Y8(t){const e=t.match(G8);if(!e)return NaN;const n=Fp(e[1]),r=Fp(e[2]),i=Fp(e[3]);return eB(n,r,i)?n*NA+r*vA+i*1e3:NaN}function Fp(t){return t&&parseFloat(t.replace(",","."))||0}function Q8(t){if(t==="Z")return 0;const e=t.match(F8);if(!e)return 0;const n=e[1]==="+"?-1:1,r=parseInt(e[2]),i=e[3]&&parseInt(e[3])||0;return tB(r,i)?n*(r*NA+i*vA):NaN}function W8(t,e,n){const r=new Date(0);r.setUTCFullYear(t,0,4);const i=r.getUTCDay()||7,c=(e-1)*7+n+1-i;return r.setUTCDate(r.getUTCDate()+c),r}const X8=[31,null,31,30,31,30,31,31,30,31,30,31];function AA(t){return t%400===0||t%4===0&&t%100!==0}function Z8(t,e,n){return e>=0&&e<=11&&n>=1&&n<=(X8[e]||(AA(t)?29:28))}function K8(t,e){return e>=1&&e<=(AA(t)?366:365)}function J8(t,e,n){return e>=1&&e<=53&&n>=0&&n<=6}function eB(t,e,n){return t===24?e===0&&n===0:n>=0&&n<60&&e>=0&&e<60&&t>=0&&t<25}function tB(t,e){return e>=0&&e<=59}function yN(t,e){const[n,r]=qe.useState(t);return qe.useEffect(()=>{const i=setTimeout(()=>r(t),e);return()=>clearTimeout(i)},[t,e]),n}const nB=({status:t})=>{const e={AUTORIZADO:{label:"Autorizado",color:"bg-green-100 text-green-700 border-green-200"},AUTORIZADO_PARCIAL:{label:"Autorizado Parcialmente",color:"bg-yellow-100 text-yellow-700 border-yellow-200"},NEGADO:{label:"Negado",color:"bg-red-100 text-red-700 border-red-200"},EM_ANALISE:{label:"Em Análise",color:"bg-blue-100 text-blue-700 border-blue-200"},CANCELADO:{label:"Cancelado",color:"bg-gray-100 text-gray-700 border-gray-200"}},n=e[t]||e.EM_ANALISE;return s.jsx("span",{className:`px-2 py-1 rounded-full text-[10px] font-bold border uppercase ${n.color}`,children:n.label})},aB=()=>{const[t,e]=A.useState(1),[n]=A.useState(10),[r,i]=A.useState(""),[c,d]=A.useState(""),[f,h]=A.useState(""),[p,b]=A.useState(""),[y,x]=A.useState(""),[v,N]=A.useState("dataSolicitacao"),[j,S]=A.useState("DESC"),R=yN(r,500),w=yN(c,500),D=async()=>{const H=new URLSearchParams({page:t.toString(),pageSize:n.toString(),search:R,gto:w,status:f,dataInicio:p,dataFim:y,sortField:v,sortOrder:j}),ne=localStorage.getItem("SCOREODONTO_AUTH_TOKEN"),ee=await fetch(`/api/guias?${H}`,{headers:ne?{Authorization:`Bearer ${ne}`}:{}});if(!ee.ok)throw new Error("Falha ao carregar guias");return ee.json()},{data:C,isLoading:I,isError:L,refetch:F}=MU({queryKey:["guias",t,R,w,f,p,y,v,j],queryFn:D,placeholderData:H=>H}),Y=H=>{v===H?S(j==="ASC"?"DESC":"ASC"):(N(H),S("DESC"))},$=C?Math.ceil(C.total/n):0,M=()=>{if(!(C!=null&&C.data))return;const H=["Data Solicitação","Identificação","Beneficiário","Tipo Tratamento","GTO","Situação"],ne=C.data.map(z=>[Gp(bN(z.dataSolicitacao),"dd/MM/yyyy"),z.beneficiarioIdentificacao,z.beneficiarioNome,z.tipoTratamento,z.numeroGuiaPrestador,z.status]),ee="data:text/csv;charset=utf-8,"+H.join(",")+` -`+ne.map(z=>z.join(",")).join(` -`),he=encodeURI(ee),pe=document.createElement("a");pe.setAttribute("href",he),pe.setAttribute("download",`tratamentos_${Gp(new Date,"yyyyMMdd")}.csv`),document.body.appendChild(pe),pe.click(),document.body.removeChild(pe)};return s.jsxs("div",{className:"flex flex-col h-full space-y-4",children:[s.jsx(fn,{title:"Meus Tratamentos",description:"LISTAGEM E GESTÃO DE GUIAS DE TRATAMENTO ODONTOLÓGICO (GTO).",children:s.jsxs("button",{onClick:M,className:"flex items-center gap-2 px-4 py-2 bg-gray-800 text-white rounded-lg hover:bg-gray-700 transition-colors text-sm font-bold uppercase shadow-sm",children:[s.jsx(kg,{size:18})," Exportar CSV"]})}),s.jsxs("div",{className:"bg-white p-6 rounded-xl border border-gray-200 shadow-sm space-y-4",children:[s.jsxs("div",{className:"flex flex-wrap items-end gap-4",children:[s.jsxs("div",{className:"flex-1 min-w-[200px]",children:[s.jsx("label",{className:"block text-[10px] font-bold text-gray-400 uppercase mb-1",children:"Status da Guia"}),s.jsxs("select",{value:f,onChange:H=>{h(H.target.value),e(1)},className:"w-full px-4 py-2 bg-gray-50 border border-gray-200 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none text-sm font-semibold uppercase",children:[s.jsx("option",{value:"",children:"TODOS OS STATUS"}),s.jsx("option",{value:"AUTORIZADO",children:"AUTORIZADO"}),s.jsx("option",{value:"AUTORIZADO_PARCIAL",children:"AUTORIZADO PARCIALMENTE"}),s.jsx("option",{value:"NEGADO",children:"NEGADO"}),s.jsx("option",{value:"EM_ANALISE",children:"EM ANÁLISE"}),s.jsx("option",{value:"CANCELADO",children:"CANCELADO"})]})]}),s.jsxs("div",{className:"w-48",children:[s.jsx("label",{className:"block text-[10px] font-bold text-gray-400 uppercase mb-1",children:"GTO (Número)"}),s.jsxs("div",{className:"relative",children:[s.jsx(yu,{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400",size:16}),s.jsx("input",{type:"text",placeholder:"EX: 177903",value:c,onChange:H=>{d(H.target.value),e(1)},className:"w-full pl-10 pr-4 py-2 bg-gray-50 border border-gray-200 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none text-sm font-semibold uppercase"})]})]}),s.jsxs("div",{className:"flex-1 min-w-[300px]",children:[s.jsx("label",{className:"block text-[10px] font-bold text-gray-400 uppercase mb-1",children:"Pesquisar Beneficiário"}),s.jsxs("div",{className:"relative",children:[s.jsx(Qn,{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400",size:16}),s.jsx("input",{type:"text",placeholder:"DIGITE NOME OU IDENTIFICAÇÃO...",value:r,onChange:H=>{i(H.target.value.toUpperCase()),e(1)},className:"w-full pl-10 pr-4 py-2 bg-gray-50 border border-gray-200 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none text-sm font-semibold uppercase"})]})]})]}),s.jsxs("div",{className:"flex items-center gap-4 pt-2 border-t border-gray-50",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(jt,{size:16,className:"text-gray-400"}),s.jsx("input",{type:"date",value:p,onChange:H=>{b(H.target.value),e(1)},className:"px-3 py-1.5 bg-gray-50 border border-gray-200 rounded-lg text-xs font-semibold"}),s.jsx("span",{className:"text-gray-400 font-bold text-xs uppercase",children:"até"}),s.jsx("input",{type:"date",value:y,onChange:H=>{x(H.target.value),e(1)},className:"px-3 py-1.5 bg-gray-50 border border-gray-200 rounded-lg text-xs font-semibold"})]}),s.jsx("button",{onClick:()=>{i(""),d(""),h(""),b(""),x(""),e(1)},className:"text-[10px] font-bold text-blue-600 hover:text-blue-800 uppercase",children:"Limpar Filtros"})]})]}),s.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden flex-1 flex flex-col min-h-[400px]",children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left",children:[s.jsx("thead",{children:s.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[s.jsx("th",{className:"px-6 py-4",children:s.jsxs("button",{onClick:()=>Y("dataSolicitacao"),className:"flex items-center gap-2 text-[11px] font-extrabold text-gray-500 uppercase tracking-wider hover:text-blue-600 transition-colors",children:["Data Solicitação ",s.jsx(ud,{size:14})]})}),s.jsx("th",{className:"px-6 py-4",children:s.jsx("span",{className:"text-[11px] font-extrabold text-gray-500 uppercase tracking-wider",children:"Identificação do Beneficiário"})}),s.jsx("th",{className:"px-6 py-4",children:s.jsxs("button",{onClick:()=>Y("beneficiarioNome"),className:"flex items-center gap-2 text-[11px] font-extrabold text-gray-500 uppercase tracking-wider hover:text-blue-600 transition-colors",children:["Nome Beneficiário ",s.jsx(ud,{size:14})]})}),s.jsx("th",{className:"px-6 py-4",children:s.jsx("span",{className:"text-[11px] font-extrabold text-gray-500 uppercase tracking-wider",children:"Tipo Tratamento"})}),s.jsx("th",{className:"px-6 py-4",children:s.jsxs("button",{onClick:()=>Y("numeroGuiaPrestador"),className:"flex items-center gap-2 text-[11px] font-extrabold text-gray-500 uppercase tracking-wider hover:text-blue-600 transition-colors",children:["GTO ",s.jsx(ud,{size:14})]})}),s.jsx("th",{className:"px-6 py-4",children:s.jsxs("button",{onClick:()=>Y("status"),className:"flex items-center gap-2 text-[11px] font-extrabold text-gray-500 uppercase tracking-wider hover:text-blue-600 transition-colors",children:["Situação da GTO ",s.jsx(ud,{size:14})]})})]})}),s.jsx("tbody",{className:"divide-y divide-gray-100",children:I?Array.from({length:5}).map((H,ne)=>s.jsx("tr",{className:"animate-pulse",children:s.jsx("td",{colSpan:6,className:"px-6 py-4 h-16 bg-gray-50/30"})},ne)):L?s.jsx("tr",{children:s.jsx("td",{colSpan:6,className:"px-6 py-12 text-center text-red-500 font-bold uppercase",children:"Erro ao carregar dados."})}):(C==null?void 0:C.data.length)===0?s.jsx("tr",{children:s.jsx("td",{colSpan:6,className:"px-6 py-12 text-center text-gray-400 font-bold uppercase",children:"Nenhum tratamento encontrado."})}):C==null?void 0:C.data.map(H=>s.jsxs("tr",{className:"hover:bg-blue-50/50 transition-colors cursor-pointer group",children:[s.jsx("td",{className:"px-6 py-4 text-sm font-semibold text-gray-700",children:Gp(bN(H.dataSolicitacao),"dd/MM/yyyy")}),s.jsx("td",{className:"px-6 py-4 text-sm font-bold text-blue-600 group-hover:underline",children:H.beneficiarioIdentificacao}),s.jsx("td",{className:"px-6 py-4",children:s.jsx("p",{className:"text-sm font-bold text-gray-900 uppercase",children:H.beneficiarioNome})}),s.jsx("td",{className:"px-6 py-4 text-sm text-gray-600",children:H.tipoTratamento}),s.jsx("td",{className:"px-6 py-4 text-sm font-bold text-gray-800",children:H.numeroGuiaPrestador}),s.jsx("td",{className:"px-6 py-4",children:s.jsx(nB,{status:H.status})})]},H.id))})]})}),s.jsxs("div",{className:"mt-auto bg-gray-50 px-6 py-4 border-t border-gray-200 flex items-center justify-between",children:[s.jsxs("div",{className:"text-xs font-bold text-gray-500 uppercase",children:["Mostrando ",s.jsx("span",{className:"text-gray-900",children:(C==null?void 0:C.data.length)||0})," de ",s.jsx("span",{className:"text-gray-900",children:(C==null?void 0:C.total)||0})," resultados"]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("button",{disabled:t===1,onClick:()=>e(H=>Math.max(1,H-1)),className:"p-2 border border-gray-300 rounded-lg hover:bg-white disabled:opacity-30 disabled:hover:bg-transparent transition-colors shadow-sm",children:s.jsx($a,{size:16})}),s.jsx("div",{className:"flex items-center gap-1",children:Array.from({length:$},(H,ne)=>ne+1).map(H=>s.jsx("button",{onClick:()=>e(H),className:`w-8 h-8 rounded-lg text-xs font-bold transition-all ${H===t?"bg-blue-600 text-white shadow-md":"text-gray-600 hover:bg-white border border-transparent hover:border-gray-200"}`,children:H},H))}),s.jsx("button",{disabled:t===$,onClick:()=>e(H=>Math.min($,H+1)),className:"p-2 border border-gray-300 rounded-lg hover:bg-white disabled:opacity-30 disabled:hover:bg-transparent transition-colors shadow-sm",children:s.jsx(Pa,{size:16})})]})]})]})]})},Dg="V1.0.10",sB=({onLoginSuccess:t})=>{const[e,n]=A.useState(""),[r,i]=A.useState(""),[c,d]=A.useState(!1),[f,h]=A.useState(""),[p,b]=A.useState(!0);if(A.useEffect(()=>{const x=setTimeout(()=>b(!1),3e3);return()=>clearTimeout(x)},[]),p)return s.jsxs("div",{className:"min-h-screen bg-gray-50 flex flex-col items-center justify-center p-4",children:[s.jsx(Ot,{className:"animate-spin text-blue-600 mb-4",size:48}),s.jsx("h2",{className:"text-gray-500 font-bold uppercase tracking-widest text-sm",children:"Inicializando Sistema..."}),s.jsx("span",{className:"text-gray-400 text-xs mt-2 font-mono font-bold bg-gray-200 px-2 py-1 rounded",children:Dg})]});const y=async x=>{x.preventDefault(),d(!0),h("");try{await K.login(e,r)?t():h("CREDENCIAIS INVÁLIDAS. VERIFIQUE EMAIL E SENHA.")}catch{h("ERRO DE CONEXÃO. TENTE NOVAMENTE.")}finally{d(!1)}};return s.jsx("div",{className:"min-h-screen bg-gray-50 flex items-center justify-center p-4",children:s.jsxs("div",{className:"max-w-md w-full bg-white rounded-2xl shadow-xl overflow-hidden border border-gray-100",children:[s.jsxs("div",{className:"bg-blue-600 p-8 text-center",children:[s.jsx("div",{className:"w-16 h-16 bg-white/20 rounded-xl flex items-center justify-center text-white mx-auto backdrop-blur-sm mb-4",children:s.jsx(Sr,{size:32})}),s.jsx("h1",{className:"text-2xl font-bold text-white uppercase tracking-wide",children:"SCOREODONTO"}),s.jsx("p",{className:"text-blue-100 text-xs font-bold uppercase mt-1",children:"SISTEMA INTEGRADO POSTGRESQL + GOOGLE"})]}),s.jsxs("div",{className:"p-8",children:[s.jsxs("h2",{className:"text-lg font-bold text-gray-800 uppercase mb-6 text-center flex items-center justify-center gap-2",children:[s.jsx(Ld,{size:18,className:"text-blue-600"})," ACESSO RESTRITO"]}),s.jsxs("form",{onSubmit:y,className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"USUÁRIO / EMAIL"}),s.jsxs("div",{className:"relative",children:[s.jsx(Bo,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400",size:18}),s.jsx("input",{type:"email",required:!0,value:e,onChange:x=>n(x.target.value),className:"w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none transition-all text-sm font-medium",placeholder:"ex: usuario@email.com"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-xs font-bold text-gray-500 mb-1 uppercase",children:"SENHA DE ACESSO"}),s.jsxs("div",{className:"relative",children:[s.jsx(Ld,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400",size:18}),s.jsx("input",{type:"password",required:!0,value:r,onChange:x=>i(x.target.value),className:"w-full pl-10 pr-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none transition-all text-sm font-medium",placeholder:"••••••••"})]})]}),f&&s.jsx("div",{className:"p-3 bg-red-50 text-red-600 text-xs font-bold uppercase rounded-lg border border-red-100 text-center",children:f}),s.jsx("button",{type:"submit",disabled:c,className:"w-full bg-blue-600 hover:bg-blue-700 text-white py-3 rounded-lg font-bold uppercase flex items-center justify-center gap-2 transition-all shadow-lg hover:shadow-xl disabled:opacity-70 disabled:cursor-not-allowed mt-4",children:c?s.jsx("span",{children:"VERIFICANDO..."}):s.jsxs(s.Fragment,{children:["ENTRAR NO SISTEMA ",s.jsx(Us,{size:18})]})})]}),s.jsxs("div",{className:"mt-8 flex flex-col items-center justify-center gap-2 text-gray-400 text-[10px] font-bold uppercase",children:[s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx(Ar,{size:12})," AMBIENTE SEGURO E CRIPTOGRAFADO"]}),s.jsx("span",{className:"bg-gray-100 text-gray-500 px-2 py-1 rounded font-mono",children:Dg})]})]})]})})},Cd=({icon:t,title:e,description:n})=>s.jsxs("div",{className:"bg-white/70 backdrop-blur-md p-8 rounded-3xl border border-white/50 shadow-[0_8px_30px_rgb(0,0,0,0.04)] hover:shadow-[0_20px_50px_rgba(8,112,184,0.1)] transition-all duration-500 group",children:[s.jsx("div",{className:"w-14 h-14 bg-blue-600/10 rounded-2xl flex items-center justify-center mb-6 group-hover:bg-blue-600 group-hover:text-white transition-all duration-500 text-blue-600",children:t}),s.jsx("h3",{className:"text-xl font-bold text-gray-900 mb-3 uppercase tracking-tight",children:e}),s.jsx("p",{className:"text-gray-600 leading-relaxed text-sm",children:n})]}),rB=({onGetStarted:t})=>{const[e,n]=A.useState(!1),[r,i]=A.useState(!1);return A.useEffect(()=>{const c=()=>n(window.scrollY>20);return window.addEventListener("scroll",c),()=>window.removeEventListener("scroll",c)},[]),s.jsxs("div",{className:"min-h-screen bg-[#F8FAFC] font-sans selection:bg-blue-100 selection:text-blue-900 overflow-x-hidden",children:[s.jsx("nav",{className:`fixed top-0 left-0 right-0 z-[100] transition-all duration-500 ${e?"bg-white/80 backdrop-blur-xl border-b border-gray-100 py-3 shadow-sm":"bg-transparent py-6"}`,children:s.jsxs("div",{className:"max-w-7xl mx-auto px-6 flex justify-between items-center",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-10 h-10 bg-gradient-to-tr from-blue-600 to-indigo-600 rounded-xl flex items-center justify-center shadow-lg shadow-blue-200",children:s.jsx(aa,{className:"text-white",size:24})}),s.jsxs("span",{className:"text-2xl font-black text-gray-900 tracking-tighter uppercase italic",children:["Score",s.jsx("span",{className:"text-blue-600",children:"Odonto"})]})]}),s.jsxs("div",{className:"hidden md:flex items-center gap-8",children:[s.jsx("a",{href:"#features",className:"text-sm font-bold text-gray-600 hover:text-blue-600 transition-colors uppercase tracking-widest",children:"Recursos"}),s.jsx("a",{href:"#solutions",className:"text-sm font-bold text-gray-600 hover:text-blue-600 transition-colors uppercase tracking-widest",children:"Soluções"}),s.jsx("a",{href:"#mobile",className:"text-sm font-bold text-gray-600 hover:text-blue-600 transition-colors uppercase tracking-widest",children:"Mobile"}),s.jsx("button",{onClick:t,className:"bg-gray-900 text-white px-6 py-3 rounded-full text-xs font-black uppercase tracking-widest hover:bg-blue-600 hover:shadow-xl hover:shadow-blue-200 transition-all active:scale-95",children:"Começar Agora"})]}),s.jsx("button",{className:"md:hidden p-2 text-gray-900",onClick:()=>i(!r),children:r?s.jsx(Qe,{size:28}):s.jsx($N,{size:28})})]})}),s.jsxs("section",{className:"relative pt-32 pb-20 lg:pt-48 lg:pb-40 overflow-hidden",children:[s.jsx("div",{className:"absolute top-0 right-0 w-1/2 h-full bg-gradient-to-l from-blue-50/50 to-transparent -z-10 translate-x-20 skew-x-12"}),s.jsx("div",{className:"absolute top-40 left-10 w-72 h-72 bg-blue-400/10 rounded-full blur-3xl -z-10"}),s.jsx("div",{className:"max-w-7xl mx-auto px-6",children:s.jsxs("div",{className:"grid lg:grid-cols-2 gap-16 items-center",children:[s.jsxs("div",{className:"space-y-8",children:[s.jsxs("h1",{className:"text-6xl lg:text-7xl font-black text-gray-900 leading-[1.05] tracking-tighter",children:["O Futuro da Sua Clínica é ",s.jsx("span",{className:"text-transparent bg-clip-text bg-gradient-to-r from-blue-600 to-indigo-600 underline decoration-blue-200 underline-offset-8",children:"Inteligente"})]}),s.jsx("p",{className:"text-xl text-gray-600 leading-relaxed max-w-lg font-medium",children:"Maximize a produtividade com gestão financeira, agenda com arraste e solte, e controle absoluto de tratamentos em uma plataforma única e elegante."}),s.jsxs("div",{className:"flex flex-col sm:flex-row gap-4",children:[s.jsxs("button",{onClick:t,className:"bg-blue-600 text-white px-10 py-5 rounded-2xl text-sm font-black uppercase tracking-widest shadow-2xl shadow-blue-200 hover:bg-blue-700 hover:-translate-y-1 transition-all flex items-center justify-center gap-3 group",children:["Acessar Plataforma ",s.jsx(Us,{size:18,className:"group-hover:translate-x-1 transition-transform"})]}),s.jsxs("div",{className:"flex items-center gap-4 py-2 px-4",children:[s.jsx("div",{className:"flex -space-x-3",children:[1,2,3,4].map(c=>s.jsx("div",{className:"w-10 h-10 rounded-full border-2 border-white bg-gray-200 flex items-center justify-center text-[10px] font-bold overflow-hidden shadow-sm",children:s.jsx("img",{src:`https://i.pravatar.cc/100?img=${c+10}`,alt:"User"})},c))}),s.jsxs("div",{className:"text-xs text-gray-500 font-bold uppercase tracking-tight",children:[s.jsx("span",{className:"text-gray-900",children:"+400 Clínicas"})," ",s.jsx("br",{})," que já otimizaram processos"]})]})]})]}),s.jsxs("div",{className:"relative",children:[s.jsxs("div",{className:"relative z-10 rounded-[3rem] overflow-hidden shadow-[0_50px_100px_-20px_rgba(0,0,0,0.2)] border-8 border-white group",children:[s.jsx("img",{src:"/dental_landing_hero.png",alt:"Interface ScoreOdonto",className:"w-full h-auto transform group-hover:scale-105 transition-all duration-700",onError:c=>{c.target.src="https://images.unsplash.com/photo-1594832284143-588b813ed334?q=80&w=2070&auto=format&fit=crop"}}),s.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/40 to-transparent flex items-bottom p-10 opacity-0 group-hover:opacity-100 transition-opacity duration-500",children:s.jsx("p",{className:"mt-auto text-white font-bold uppercase text-xs tracking-widest",children:"Interface Real: Dashboard Analítico"})})]}),s.jsx("div",{className:"absolute -top-10 -right-10 z-20 bg-white p-6 rounded-3xl shadow-2xl border border-blue-50 animate-bounce transition-all duration-1000 hidden md:block",style:{animationDelay:"0.2s"},children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"p-3 bg-blue-100 text-blue-600 rounded-2xl",children:s.jsx(jt,{size:24})}),s.jsxs("div",{children:[s.jsx("div",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"Sincronização Total"}),s.jsx("div",{className:"text-lg font-black text-gray-900 tracking-tight",children:"Google Agenda"})]})]})}),s.jsx("div",{className:"absolute -bottom-10 -left-10 z-20 bg-white p-6 rounded-3xl shadow-2xl border border-green-50 animate-bounce transition-all duration-1000",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"p-3 bg-green-100 text-green-600 rounded-2xl",children:s.jsx(kD,{size:24})}),s.jsxs("div",{children:[s.jsx("div",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"Comunicação"}),s.jsx("div",{className:"text-lg font-black text-gray-900 tracking-tight",children:"CRM WhatsApp"})]})]})})]})]})})]}),s.jsx("div",{className:"bg-white border-y border-gray-100 py-10",children:s.jsxs("div",{className:"max-w-7xl mx-auto px-6 overflow-hidden",children:[s.jsx("p",{className:"text-center text-[10px] font-black text-gray-400 uppercase tracking-[0.3em] mb-10",children:"Conectado com os principais convênios"}),s.jsxs("div",{className:"flex justify-between items-center opacity-30 grayscale gap-10",children:[s.jsx("span",{className:"text-2xl font-black italic",children:"CASSEMS"}),s.jsx("span",{className:"text-2xl font-black italic",children:"UNIMED"}),s.jsx("span",{className:"text-2xl font-black italic",children:"BRADESCO"}),s.jsx("span",{className:"text-2xl font-black italic",children:"SULAMÉRICA"}),s.jsx("span",{className:"text-2xl font-black italic",children:"AMIL DENTAL"}),s.jsx("span",{className:"text-2xl font-black italic",children:"REDE DENTAL"})]})]})}),s.jsx("section",{id:"features",className:"py-32 px-6",children:s.jsxs("div",{className:"max-w-7xl mx-auto",children:[s.jsxs("div",{className:"text-center max-w-3xl mx-auto mb-20 space-y-4",children:[s.jsx("h2",{className:"text-4xl lg:text-5xl font-black text-gray-900 leading-tight tracking-tighter uppercase",children:"Todo o Controle na Sua Mão"}),s.jsx("p",{className:"text-lg text-gray-600 font-medium",children:"Focamos na tecnologia para que você foque no que mais importa: o sorriso do seu paciente."})]}),s.jsxs("div",{className:"grid md:grid-cols-2 lg:grid-cols-4 gap-8",children:[s.jsx(Cd,{icon:s.jsx(jt,{size:28}),title:"Agenda 4.0",description:"Controle total com arraste e solte, cores por profissional e sincronização em tempo real."}),s.jsx(Cd,{icon:s.jsx(Ar,{size:28}),title:"GTO Segura",description:"Lançamento simplificado de guias de convênio com validação automática de erros."}),s.jsx(Cd,{icon:s.jsx(sa,{size:28}),title:"Gestão de Pacientes",description:"CRM odontológico completo com histórico clínico, anexos e ortodontia avançada."}),s.jsx(Cd,{icon:s.jsx(Io,{size:28}),title:"BI Financeiro",description:"Gráficos de produtividade, fluxo de caixa e gestão de taxas de operadoras."})]})]})}),s.jsx("section",{className:"py-20 px-6",children:s.jsxs("div",{className:"max-w-7xl mx-auto bg-gradient-to-br from-blue-600 to-indigo-700 rounded-[3rem] p-12 lg:p-24 overflow-hidden relative shadow-2xl shadow-blue-300",children:[s.jsx("div",{className:"absolute top-0 right-0 w-96 h-96 bg-white/10 rounded-full -translate-y-1/2 translate-x-1/2 blur-3xl"}),s.jsx("div",{className:"absolute bottom-0 left-0 w-64 h-64 bg-black/10 rounded-full translate-y-1/2 -translate-x-1/2 blur-3xl"}),s.jsxs("div",{className:"relative z-10 text-center space-y-8 max-w-3xl mx-auto",children:[s.jsxs("h2",{className:"text-4xl lg:text-6xl font-black text-white leading-tight tracking-tighter uppercase italic",children:["Sua Clínica Elevada ao ",s.jsx("span",{className:"bg-white text-blue-600 px-4 py-1 rounded-2xl not-italic",children:"Próximo Nível"})]}),s.jsx("p",{className:"text-blue-100 text-xl font-medium",children:"Junte-se a centenas de profissionais que já transformaram a gestão de seus consultórios. Comece agora gratuitamente."}),s.jsx("div",{className:"pt-6",children:s.jsx("button",{onClick:t,className:"bg-white text-blue-600 px-12 py-6 rounded-3xl text-sm font-black uppercase tracking-widest shadow-xl hover:bg-gray-50 hover:-translate-y-1 transition-all active:scale-95",children:"Testar Demonstrativo"})})]})]})}),s.jsxs("footer",{className:"py-20 border-t border-gray-100 bg-white",children:[s.jsxs("div",{className:"max-w-7xl mx-auto px-6 grid md:grid-cols-4 gap-12",children:[s.jsxs("div",{className:"space-y-6",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 bg-blue-600 rounded-lg flex items-center justify-center",children:s.jsx(aa,{className:"text-white",size:18})}),s.jsxs("span",{className:"text-xl font-black text-gray-900 tracking-tighter uppercase italic",children:["Score",s.jsx("span",{className:"text-blue-600",children:"Odonto"})]})]}),s.jsx("p",{className:"text-gray-500 text-sm leading-relaxed",children:"A plataforma líder em gestão odontológica para clínicas que buscam excelência e eficiência."}),s.jsxs("div",{className:"flex gap-4",children:[s.jsx("div",{className:"w-8 h-8 bg-gray-100 rounded-full hover:bg-blue-600 hover:text-white transition-all flex items-center justify-center cursor-pointer",children:s.jsx(dO,{size:16})}),s.jsx("div",{className:"w-8 h-8 bg-gray-100 rounded-full hover:bg-blue-600 hover:text-white transition-all flex items-center justify-center cursor-pointer",children:s.jsx(sa,{size:16})}),s.jsx("div",{className:"w-8 h-8 bg-gray-100 rounded-full hover:bg-blue-600 hover:text-white transition-all flex items-center justify-center cursor-pointer",children:s.jsx(IO,{size:16})})]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsx("h4",{className:"text-xs font-black text-gray-900 uppercase tracking-widest",children:"Produto"}),s.jsxs("ul",{className:"space-y-3 text-sm text-gray-500 font-bold uppercase tracking-tight",children:[s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Funcionalidades"}),s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Segurança"}),s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"API"}),s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Mobile"})]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsx("h4",{className:"text-xs font-black text-gray-900 uppercase tracking-widest",children:"Empresa"}),s.jsxs("ul",{className:"space-y-3 text-sm text-gray-500 font-bold uppercase tracking-tight",children:[s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Sobre Nós"}),s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Blog"}),s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Carreiras"}),s.jsx("li",{className:"hover:text-blue-600 cursor-pointer transition-colors",children:"Contato"})]})]}),s.jsxs("div",{className:"space-y-6",children:[s.jsx("h4",{className:"text-xs font-black text-gray-900 uppercase tracking-widest",children:"Suporte"}),s.jsxs("div",{className:"p-4 bg-gray-50 rounded-2xl border border-gray-100",children:[s.jsx("p",{className:"text-xs text-gray-500 font-bold uppercase mb-2",children:"Central de Ajuda"}),s.jsx("a",{href:"mailto:suporte@scoreodonto.com",className:"text-sm font-black text-blue-600 hover:underline",children:"suporte@scoreodonto.com"})]})]})]}),s.jsxs("div",{className:"max-w-7xl mx-auto px-6 mt-20 pt-10 border-t border-gray-50 flex flex-col md:flex-row justify-between items-center gap-6",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"© 2026 ScoreOdonto. Todos os direitos reservados."}),s.jsxs("div",{className:"flex gap-8 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:[s.jsx("span",{className:"hover:text-gray-900 cursor-pointer",children:"Termos"}),s.jsx("span",{className:"hover:text-gray-900 cursor-pointer",children:"Privacidade"}),s.jsx("span",{className:"hover:text-gray-900 cursor-pointer",children:"Cookies"})]})]})]})]})},lB=()=>{const[t,e]=A.useState(!1),[n,r]=A.useState([]),[i,c]=A.useState(!1),d=async()=>{e(!0),r([]),c(!1),await K.runInstallScript(h=>{r(p=>[...p,h])}),c(!0),e(!1)},f=()=>{window.location.href="./"};return s.jsx("div",{className:"min-h-screen bg-gray-900 flex items-center justify-center p-4",children:s.jsxs("div",{className:"w-full max-w-2xl bg-white rounded-xl shadow-2xl overflow-hidden",children:[s.jsxs("div",{className:"bg-gray-100 p-6 border-b border-gray-200 flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 bg-blue-600 rounded-lg flex items-center justify-center text-white",children:s.jsx(Sr,{size:24})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-xl font-bold text-gray-900 uppercase",children:"SCOREODONTO ADMIN"}),s.jsx("p",{className:"text-gray-500 text-xs font-bold uppercase",children:"FERRAMENTA DE ATUALIZAÇÃO DE BANCO"})]})]}),s.jsxs("button",{onClick:f,className:"text-gray-500 hover:text-gray-800 flex items-center gap-1 text-xs font-bold uppercase",children:[s.jsx(zN,{size:16})," VOLTAR AO SISTEMA"]})]}),s.jsx("div",{className:"p-8",children:!t&&n.length===0?s.jsxs("div",{className:"text-center space-y-6",children:[s.jsx("div",{className:"w-20 h-20 bg-amber-100 text-amber-600 rounded-full flex items-center justify-center mx-auto",children:s.jsx(ov,{size:40})}),s.jsxs("div",{children:[s.jsx("h2",{className:"text-lg font-bold text-gray-800 uppercase",children:"SCRIPT DE ATUALIZAÇÃO (SH/UPDATE_DB.SH)"}),s.jsx("p",{className:"text-gray-500 text-sm mt-2 max-w-md mx-auto uppercase",children:'ESTA AÇÃO IRÁ LER A PLANILHA "DADOS PACIENTES", GERAR UM BACKUP SQL E ATUALIZAR AS TABELAS DO POSTGRESQL.'})]}),s.jsx("div",{className:"bg-gray-800 text-green-400 p-4 rounded-lg font-mono text-sm text-left max-w-md mx-auto shadow-inner",children:"$ ./sh/update_db.sh --force-sync"}),s.jsxs("button",{onClick:d,className:"bg-blue-600 hover:bg-blue-700 text-white px-8 py-4 rounded-lg font-bold uppercase flex items-center gap-3 mx-auto transition-all hover:scale-105 shadow-lg",children:[s.jsx(VD,{size:20,fill:"currentColor"}),"EXECUTAR ATUALIZAÇÃO"]})]}):s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"flex justify-between items-center mb-2",children:[s.jsxs("h3",{className:"font-bold text-gray-800 uppercase flex items-center gap-2",children:[s.jsx(ov,{size:18})," TERMINAL DE SAÍDA"]}),i&&s.jsxs("span",{className:"text-green-600 text-xs font-bold uppercase flex items-center gap-1",children:[s.jsx(Ga,{size:14})," PROCESSO FINALIZADO"]})]}),s.jsxs("div",{className:"bg-gray-900 text-green-500 font-mono text-xs p-6 rounded-lg h-80 overflow-y-auto shadow-inner border-4 border-gray-800",children:[n.map((h,p)=>s.jsx("div",{className:"mb-1",children:h},p)),t&&s.jsx("div",{className:"animate-pulse mt-2",children:"_"})]}),i&&s.jsx("button",{onClick:f,className:"w-full py-3 bg-gray-200 hover:bg-gray-300 text-gray-800 font-bold rounded-lg uppercase transition-colors",children:"VOLTAR PARA O LOGIN"})]})})]})})},vN=[{name:"Azul Score",value:"#2563eb"},{name:"Verde Esmeralda",value:"#059669"},{name:"Indigo Premium",value:"#4f46e5"},{name:"Vinho Elegante",value:"#9f1239"},{name:"Slate Moderno",value:"#334155"},{name:"Laranja Vibrante",value:"#ea580c"},{name:"Teal Clínico",value:"#0d9488"},{name:"Roxo Nobre",value:"#7c3aed"}],iB=()=>{const t=K.getWorkspaces(),e=K.getActiveWorkspace(),n=$e(),r=K.getCurrentRole(),i=r==="admin"||r==="donoclinica",[c,d]=A.useState(null),[f,h]=A.useState(!1),p=y=>{if((e==null?void 0:e.id)===y){n.info("VOCÊ JÁ ESTÁ NESTA UNIDADE.");return}K.switchWorkspace(y),n.success("TROCANDO DE UNIDADE...")},b=async(y,x)=>{h(!0);try{const v=localStorage.getItem("SCOREODONTO_AUTH_TOKEN");if((await fetch(`/api/clinicas/${y}/color`,{method:"PUT",headers:{"Content-Type":"application/json",...v?{Authorization:`Bearer ${v}`}:{}},body:JSON.stringify({cor:x})})).ok){n.success("COR DA UNIDADE ATUALIZADA!");const j=t.map(S=>S.id===y?{...S,cor:x}:S);localStorage.setItem("SCOREODONTO_WORKSPACES",JSON.stringify(j)),(e==null?void 0:e.id)===y&&localStorage.setItem("SCOREODONTO_ACTIVE_WORKSPACE",JSON.stringify({...e,cor:x})),d(null),setTimeout(()=>window.location.reload(),1e3)}else n.error("ERRO AO SALVAR COR.")}catch{n.error("ERRO DE CONEXÃO.")}finally{h(!1)}};return s.jsxs("div",{className:"space-y-10 animate-in fade-in duration-500",children:[s.jsx(fn,{title:"GESTÃO DE UNIDADES",description:"Configure a identidade visual e selecione a clínica para gerenciar atendimentos."}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",children:t.map(y=>{const x=(e==null?void 0:e.id)===y.id,v=y.cor||"#2563eb";return s.jsx("div",{className:`group relative bg-white rounded-[2.5rem] p-1 border-2 transition-all duration-500 ${x?"shadow-[0_20px_50px_-15px_rgba(0,0,0,0.1)]":"border-transparent hover:border-gray-100 shadow-[0_10px_40px_-15px_rgba(0,0,0,0.05)]"}`,style:{borderColor:x?v:"transparent"},children:s.jsxs("div",{className:"px-8 py-10 rounded-[2.2rem] bg-white h-full flex flex-col",children:[s.jsxs("div",{className:"flex justify-between items-start mb-8",children:[s.jsx("div",{className:"w-16 h-16 rounded-2xl flex items-center justify-center transition-all duration-500 group-hover:scale-110 shadow-lg",style:{backgroundColor:v,color:"#fff",boxShadow:`0 10px 20px -5px ${v}44`},children:s.jsx(Rg,{size:32})}),s.jsxs("div",{className:"flex flex-col items-end gap-2",children:[x&&s.jsx("span",{className:"text-white text-[9px] font-black px-4 py-1.5 rounded-full uppercase tracking-widest shadow-sm",style:{backgroundColor:v},children:"ATIVA"}),i&&s.jsx("button",{onClick:()=>d(c===y.id?null:y.id),className:"p-2 text-gray-400 hover:text-gray-600 bg-gray-50 rounded-xl transition-colors",title:"Mudar Cor",children:s.jsx(PD,{size:16})})]})]}),s.jsxs("div",{className:"space-y-2 flex-grow",children:[s.jsx("h3",{className:"text-2xl font-black text-gray-900 uppercase tracking-tighter leading-tight",children:y.nome}),c===y.id?s.jsxs("div",{className:"mt-4 p-4 bg-gray-50 rounded-2xl border border-gray-100 animate-in slide-in-from-top-2 duration-300",children:[s.jsx("p",{className:"text-[9px] font-black text-gray-400 uppercase tracking-widest mb-3",children:"Escolha a cor da marca"}),s.jsx("div",{className:"grid grid-cols-4 gap-2",children:vN.map(N=>s.jsx("button",{onClick:()=>b(y.id,N.value),disabled:f,className:`w-full h-8 rounded-lg border-2 transition-all ${y.cor===N.value?"border-white ring-2 ring-gray-300":"border-transparent hover:scale-110"}`,style:{backgroundColor:N.value},title:N.name,children:f&&y.cor===N.value&&s.jsx(Ot,{size:12,className:"animate-spin text-white mx-auto"})},N.value))})]}):s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex items-center gap-2 text-gray-400",children:[s.jsx(VN,{size:14}),s.jsx("span",{className:"text-[10px] font-bold uppercase tracking-widest",children:"Unidade Operacional"})]}),s.jsxs("div",{className:"mt-6 pt-6 border-t border-gray-50 flex items-center gap-3",children:[s.jsx("div",{className:"w-8 h-8 rounded-full flex items-center justify-center",style:{backgroundColor:`${v}11`,color:v},children:s.jsx(oO,{size:16})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[9px] font-black text-gray-400 uppercase tracking-widest leading-none mb-1",children:"Seu Perfil"}),s.jsx("p",{className:"text-xs font-bold text-gray-700 uppercase",children:y.role})]})]})]})]}),s.jsx("button",{onClick:()=>p(y.id),disabled:x||c===y.id,className:"mt-10 w-full py-4 rounded-2xl text-xs font-black uppercase tracking-widest transition-all duration-300 flex items-center justify-center gap-3 group/btn shadow-lg",style:{backgroundColor:x?"#f3f4f6":v,color:x?"#9ca3af":"#fff",boxShadow:x?"none":`0 10px 20px -10px ${v}66`},children:x?s.jsxs(s.Fragment,{children:["UNIDADE ATUAL ",s.jsx(xC,{size:18})]}):s.jsxs(s.Fragment,{children:["ACESSAR UNIDADE ",s.jsx(Us,{size:18,className:"group-hover/btn:translate-x-1 transition-transform"})]})})]})},y.id)})}),s.jsxs("div",{className:"bg-white rounded-[2rem] p-10 border border-gray-100 flex flex-col md:flex-row items-center justify-between gap-6 shadow-sm",children:[s.jsxs("div",{className:"text-center md:text-left",children:[s.jsx("h4",{className:"text-lg font-black text-gray-900 uppercase tracking-tight italic",children:"Identidade Visual Dinâmica"}),s.jsx("p",{className:"text-sm text-gray-500 font-medium",children:"A cor escolhida será aplicada automaticamente em toda a interface desta clínica."})]}),s.jsx("div",{className:"flex gap-2",children:vN.slice(0,4).map(y=>s.jsx("div",{className:"w-3 h-3 rounded-full",style:{backgroundColor:y.value}},y.value))})]})]})},oB=()=>{const[t,e]=A.useState(1),[n,r]=A.useState(!1),i=$e(),c=new URLSearchParams(window.location.search),d=c.get("clinica"),f=c.get("nome"),h=c.get("token"),[p,b]=A.useState({nome:f||"",email:"",senha:"",cro:"",cro_uf:"MS",celular:"",especialidade:""});if(!h||!d)return s.jsx("div",{className:"min-h-screen flex items-center justify-center bg-gray-50 p-4",children:s.jsxs("div",{className:"text-center space-y-4",children:[s.jsx("div",{className:"w-20 h-20 bg-red-50 text-red-500 rounded-full flex items-center justify-center mx-auto shadow-sm",children:s.jsx(Ld,{size:40})}),s.jsx("h2",{className:"text-2xl font-black text-gray-900 uppercase",children:"LINK INVÁLIDO OU EXPIRADO"}),s.jsx("p",{className:"text-gray-500 max-w-sm mx-auto font-medium",children:"Por favor, solicite um novo convite ao administrador da clínica."})]})});const y=async x=>{x.preventDefault(),r(!0);try{(await fetch("/api/dentistas/register",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...p,id:"d_"+Math.random().toString(36).substring(2,9),clinicaId:d})})).ok?(i.success("CADASTRO REALIZADO COM SUCESSO!"),e(3)):i.error("ERRO AO REALIZAR CADASTRO.")}catch{i.error("FALHA DE CONEXÃO.")}finally{r(!1)}};return s.jsx("div",{className:"min-h-screen bg-[#F8FAFC] flex items-center justify-center p-4",children:s.jsxs("div",{className:"max-w-xl w-full",children:[s.jsxs("div",{className:"mb-10 text-center space-y-2",children:[s.jsxs("div",{className:"inline-flex items-center gap-2 px-4 py-1.5 bg-blue-50 text-blue-600 rounded-full text-[10px] font-black uppercase tracking-widest border border-blue-100 mb-4",children:[s.jsx(Ar,{size:14})," Convite de Profissional"]}),s.jsx("h1",{className:"text-4xl font-black text-gray-900 tracking-tighter uppercase leading-none",children:"Complete seu Perfil"}),s.jsxs("p",{className:"text-gray-500 font-medium",children:["Bem-vindo ao SCOREODONTO. Você está sendo convidado para a unidade: ",s.jsx("span",{className:"text-blue-600 font-bold uppercase",children:d})]})]}),s.jsxs("div",{className:"bg-white rounded-[2.5rem] shadow-[0_50px_100px_-20px_rgba(0,0,0,0.08)] border border-gray-100 overflow-hidden relative",children:[s.jsx("div",{className:"h-2 bg-gray-100 w-full",children:s.jsx("div",{className:"h-full bg-blue-600 transition-all duration-700",style:{width:`${t/3*100}%`}})}),t===1&&s.jsx("div",{className:"p-10 animate-in fade-in slide-in-from-right-10 duration-500",children:s.jsxs("form",{className:"space-y-6",onSubmit:x=>{x.preventDefault(),e(2)},children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"Seu Nome Profissional"}),s.jsxs("div",{className:"relative group",children:[s.jsx(Bo,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-400 group-focus-within:text-blue-500 transition-colors",size:20}),s.jsx("input",{required:!0,value:p.nome,onChange:x=>b({...p,nome:x.target.value.toUpperCase()}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-12 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800 uppercase",placeholder:"NOME COMPLETO"})]})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"Email de Acesso"}),s.jsxs("div",{className:"relative group",children:[s.jsx(_g,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-400",size:20}),s.jsx("input",{type:"email",required:!0,value:p.email,onChange:x=>b({...p,email:x.target.value}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-12 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800",placeholder:"seu@email.com"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"Senha de Acesso"}),s.jsxs("div",{className:"relative group",children:[s.jsx(Ld,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-400",size:20}),s.jsx("input",{type:"password",required:!0,value:p.senha,onChange:x=>b({...p,senha:x.target.value}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-12 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800",placeholder:"••••••••"})]})]})]})]}),s.jsxs("button",{type:"submit",className:"w-full bg-gray-900 text-white py-5 rounded-2xl font-black uppercase tracking-widest hover:bg-blue-600 hover:shadow-2xl hover:shadow-blue-200 transition-all flex items-center justify-center gap-3 active:scale-95",children:["Próximo Passo ",s.jsx(Us,{size:20})]})]})}),t===2&&s.jsx("div",{className:"p-10 animate-in fade-in slide-in-from-right-10 duration-500",children:s.jsxs("form",{className:"space-y-6",onSubmit:y,children:[s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"Inscrição CRO"}),s.jsxs("div",{className:"relative group",children:[s.jsx(Sr,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-400",size:20}),s.jsx("input",{required:!0,value:p.cro,onChange:x=>b({...p,cro:x.target.value}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-12 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800 uppercase",placeholder:"00000"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"Estado CRO"}),s.jsxs("select",{value:p.cro_uf,onChange:x=>b({...p,cro_uf:x.target.value}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-6 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800",children:[s.jsx("option",{children:"MS"}),s.jsx("option",{children:"SP"}),s.jsx("option",{children:"RJ"}),s.jsx("option",{children:"MG"}),s.jsx("option",{children:"PR"}),s.jsx("option",{children:"SC"})]})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"Especialidade Principal"}),s.jsxs("div",{className:"relative group",children:[s.jsx(aa,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-400",size:20}),s.jsx("input",{required:!0,value:p.especialidade,onChange:x=>b({...p,especialidade:x.target.value.toUpperCase()}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-12 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800 uppercase",placeholder:"EX: ORTODONTIA"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest ml-1 mb-2 block",children:"WhatsApp de Contato"}),s.jsxs("div",{className:"relative group",children:[s.jsx(QN,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-gray-400",size:20}),s.jsx("input",{required:!0,value:p.celular,onChange:x=>b({...p,celular:x.target.value}),className:"w-full bg-gray-50 border border-transparent focus:border-blue-500 focus:bg-white px-12 py-4 rounded-2xl outline-none transition-all font-bold text-gray-800 uppercase",placeholder:"(00) 00000-0000"})]})]})]}),s.jsxs("div",{className:"flex gap-4 pt-4",children:[s.jsx("button",{type:"button",onClick:()=>e(1),className:"flex-1 bg-gray-100 text-gray-600 py-5 rounded-2xl font-black uppercase tracking-widest hover:bg-gray-200 transition-all font-bold",children:"Voltar"}),s.jsx("button",{type:"submit",disabled:n,className:"flex-[2] bg-blue-600 text-white py-5 rounded-2xl font-black uppercase tracking-widest hover:bg-blue-700 shadow-xl shadow-blue-200 transition-all flex items-center justify-center gap-3 disabled:opacity-50",children:n?s.jsx(Ot,{className:"animate-spin"}):s.jsxs(s.Fragment,{children:["Finalizar e Entrar ",s.jsx(Us,{size:20})]})})]})]})}),t===3&&s.jsxs("div",{className:"p-16 text-center animate-in zoom-in duration-500",children:[s.jsx("div",{className:"w-24 h-24 bg-green-50 text-green-500 rounded-[2rem] flex items-center justify-center mx-auto mb-8 shadow-inner ring-1 ring-green-100",children:s.jsx(Ar,{size:48})}),s.jsx("h2",{className:"text-3xl font-black text-gray-900 uppercase tracking-tight mb-4",children:"Tudo Pronto!"}),s.jsxs("p",{className:"text-gray-500 font-medium mb-10",children:["Seu perfil foi criado e você já está vinculado à unidade ",s.jsx("br",{})," ",s.jsx("span",{className:"text-blue-600 font-bold",children:d}),"."]}),s.jsx("button",{onClick:()=>{history.pushState({},"","/login"),window.location.reload()},className:"w-full bg-gray-900 text-white py-5 rounded-2xl font-black uppercase tracking-widest hover:bg-blue-600 shadow-2xl transition-all",children:"Ir para o Login"})]})]}),s.jsxs("div",{className:"mt-8 flex items-center justify-center gap-2 text-gray-400 text-[10px] font-black uppercase tracking-widest",children:[s.jsx(Ar,{size:14})," Ambiente Seguro e Auditorado por Administradores"]})]})})},zu=({title:t,buttonLabel:e,onButtonClick:n,children:r})=>s.jsxs("div",{className:"space-y-6",children:[s.jsx(fn,{title:t,children:s.jsxs("button",{onClick:n,className:"bg-blue-600 text-white px-4 py-2 rounded-lg flex items-center gap-2 hover:bg-blue-700 font-bold text-xs uppercase transition-colors shadow-sm",children:[s.jsx(gt,{size:18})," ",e]})}),r]}),cB=({dentist:t,clinicaId:e,onClose:n})=>{const{data:r,refresh:i}=Ie(()=>K.getHorariosByDentista(t.id,e)),c=$e(),d=["DOMINGO","SEGUNDA","TERÇA","QUARTA","QUINTA","SEXTA","SÁBADO"],f=async h=>{h.preventDefault();const p=new FormData(h.target);await K.saveHorario({dentista_id:t.id,clinica_id:e,dia_semana:parseInt(p.get("dia")),hora_inicio:p.get("inicio"),hora_fim:p.get("fim"),ativo:!0}),c.success("HORÁRIO ADICIONADO!"),i()};return s.jsx("div",{className:"fixed inset-0 bg-black/60 z-[60] flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-2xl flex flex-col overflow-hidden animate-in zoom-in-95 duration-200",children:[s.jsxs("div",{className:"px-6 py-4 border-b border-gray-100 flex justify-between items-center bg-gray-50",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"text-lg font-black text-gray-900 uppercase leading-tight",children:"ESCALA DE ATENDIMENTO"}),s.jsx("p",{className:"text-[10px] text-blue-600 font-bold uppercase",children:t.nome})]}),s.jsx("button",{onClick:n,className:"p-2 hover:bg-gray-200 rounded-xl transition-colors",children:s.jsx(Qe,{size:20})})]}),s.jsxs("div",{className:"p-6 space-y-6",children:[s.jsxs("form",{onSubmit:f,className:"grid grid-cols-1 md:grid-cols-4 gap-3 bg-blue-50/50 p-4 rounded-xl border border-blue-100",children:[s.jsx("select",{name:"dia",className:"bg-white border-blue-200 border rounded-lg p-2 text-xs font-bold uppercase",required:!0,children:d.map((h,p)=>s.jsx("option",{value:p,children:h},p))}),s.jsx("input",{name:"inicio",type:"time",className:"bg-white border-blue-200 border rounded-lg p-2 text-xs font-bold",required:!0}),s.jsx("input",{name:"fim",type:"time",className:"bg-white border-blue-200 border rounded-lg p-2 text-xs font-bold",required:!0}),s.jsxs("button",{type:"submit",className:"bg-blue-600 text-white rounded-lg font-black text-[10px] uppercase hover:bg-blue-700 transition-all flex items-center justify-center gap-2",children:[s.jsx(gt,{size:14})," ADICIONAR"]})]}),s.jsx("div",{className:"space-y-2 flex-1 overflow-y-auto pr-2",children:r==null?void 0:r.map(h=>s.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded-xl border border-gray-100 hover:border-blue-200 transition-all group",children:[s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-10 h-10 bg-white rounded-lg flex items-center justify-center shadow-sm text-blue-600 border border-gray-100 font-black text-[10px]",children:d[h.dia_semana].substring(0,3)}),s.jsxs("div",{className:"flex items-center gap-2 text-xs font-black text-gray-700",children:[s.jsx(Yl,{size:14,className:"text-gray-400"}),s.jsx("span",{children:h.hora_inicio.substring(0,5)}),s.jsx(Us,{size:12,className:"text-gray-300"}),s.jsx("span",{children:h.hora_fim.substring(0,5)})]})]}),s.jsx("button",{onClick:async()=>{await K.deleteHorario(h.id),i(),c.success("REMOVIDO!")},className:"p-2 text-gray-300 hover:text-red-500 hover:bg-red-50 rounded-lg transition-all opacity-0 group-hover:opacity-100",children:s.jsx(Qt,{size:16})})]},h.id))})]})]})})},dB=()=>{const t=K.getActiveWorkspace(),{data:e,isLoading:n,error:r,refresh:i}=Ie(()=>K.getDentistas(t==null?void 0:t.id)),[c,d]=A.useState(!1),[f,h]=A.useState(null),[p,b]=A.useState(!1),[y,x]=A.useState(null),[v,N]=A.useState([]),j=$e(),S=async()=>{try{const F=await(await fetch("/api/auth/google/status")).json();N(F)}catch(L){console.error("Erro ao buscar status do Google:",L)}};A.useEffect(()=>{S()},[]),A.useEffect(()=>{if(!c)return;const L=F=>{F.key==="Escape"&&d(!1)};return document.addEventListener("keydown",L),()=>{document.removeEventListener("keydown",L)}},[c]);const R=async L=>{L.preventDefault();const F=new FormData(L.target),Y=Object.fromEntries(F);try{f&&f.id?(await K.updateDentista({...f,...Y}),j.success("DENTISTA ATUALIZADO!")):(await K.saveDentista({...Y,ativo:!0}),j.success("DENTISTA CADASTRADO!")),d(!1),i()}catch{j.error("ERRO AO SALVAR DENTISTA.")}},w=async L=>{window.confirm("TEM CERTEZA QUE DESEJA EXCLUIR ESTE DENTISTA?")&&(await K.deleteDentista(L),j.success("Dentista excluído."),i())},[D,C]=A.useState(null),I=async L=>{try{const F=K.getActiveWorkspace(),Y=await fetch("/api/dentistas/magic-link",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({clinicaId:F.id,dentistName:L.nome})}),{link:$}=await Y.json();await navigator.clipboard.writeText($),C(L.id),j.success("LINK MÁGICO COPIADO!"),setTimeout(()=>C(null),2e3)}catch{j.error("ERRO AO GERAR LINK.")}};return s.jsxs(zu,{title:"DENTISTAS & ESPECIALISTAS",buttonLabel:"NOVO DENTISTA",onButtonClick:()=>{h({}),d(!0)},children:[n&&s.jsx(Ot,{className:"animate-spin text-blue-500"}),r&&s.jsxs("p",{className:"text-red-500",children:["Erro: ",r.message]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:e==null?void 0:e.map(L=>s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm hover:shadow-md transition-shadow flex flex-col",children:[s.jsxs("div",{className:"p-5 flex-grow",children:[s.jsxs("div",{className:"flex items-start justify-between",children:[s.jsxs("div",{children:[s.jsx("h3",{className:"font-bold text-gray-900 uppercase",children:L.nome}),s.jsx("span",{className:"text-xs font-bold text-blue-600 bg-blue-50 px-2 py-0.5 rounded-full uppercase",children:L.especialidade})]}),s.jsx("div",{className:"w-4 h-4 rounded-full border-2 border-white shadow",style:{backgroundColor:L.corAgenda}})]}),s.jsxs("div",{className:"mt-4 space-y-2 text-xs text-gray-500",children:[s.jsxs("p",{className:"flex items-center gap-2 font-medium",children:[s.jsx(_g,{size:14})," ",L.email]}),s.jsxs("p",{className:"flex items-center gap-2 font-medium",children:[s.jsx(QN,{size:14})," ",L.telefone]})]}),s.jsxs("div",{className:"mt-5 border-t border-gray-50 pt-4 flex items-center gap-2",children:[s.jsx("div",{className:"flex-1",children:s.jsx(hu,{ownerId:L.id,isConnected:v.some(F=>F.owner_id===L.id),onStatusChange:S})}),s.jsx("button",{onClick:()=>I(L),title:"COMPARTILHAR LINK DE CADASTRO",className:`p-2.5 rounded-xl border transition-all ${D===L.id?"bg-green-50 text-green-600 border-green-200":"bg-gray-50 text-gray-400 border-gray-100 hover:bg-blue-50 hover:text-blue-600 hover:border-blue-100"}`,children:D===L.id?s.jsx(jl,{size:18}):s.jsx(WN,{size:18})})]})]}),s.jsxs("div",{className:"border-t border-gray-100 p-2 grid grid-cols-3 gap-1",children:[s.jsxs("button",{onClick:()=>{h(L),d(!0)},className:"text-[10px] uppercase font-bold text-gray-600 hover:bg-gray-100 py-2 rounded-md flex items-center justify-center gap-1",children:[s.jsx(Uo,{size:12})," EDITAR"]}),s.jsxs("button",{onClick:()=>{x(L),b(!0)},className:"text-[10px] uppercase font-bold text-blue-600 hover:bg-blue-50 py-2 rounded-md flex items-center justify-center gap-1",children:[s.jsx(Yl,{size:12})," ESCALA"]}),s.jsxs("button",{onClick:()=>w(L.id),className:"text-[10px] uppercase font-bold text-red-500 hover:bg-red-50 py-2 rounded-md flex items-center justify-center gap-1",children:[s.jsx(Qt,{size:12})," EXCLUIR"]})]})]},L.id))}),c&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-blue-50 to-white",children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-800 uppercase",children:[f!=null&&f.id?"EDITAR":"NOVO"," DENTISTA"]}),s.jsx("button",{onClick:()=>d(!1),className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:s.jsxs("form",{onSubmit:R,className:"space-y-4 max-w-2xl mx-auto",children:[s.jsx("input",{id:"dentista-nome",type:"text",name:"nome",placeholder:"NOME COMPLETO",defaultValue:f==null?void 0:f.nome,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input",required:!0}),s.jsx("input",{id:"dentista-email",type:"email",name:"email",placeholder:"EMAIL",defaultValue:f==null?void 0:f.email,className:"w-full border border-gray-300 rounded-lg p-2",required:!0}),s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[s.jsx("input",{id:"dentista-telefone",type:"text",name:"telefone",placeholder:"TELEFONE",defaultValue:f==null?void 0:f.telefone,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input"}),s.jsx("input",{id:"dentista-celular",type:"text",name:"celular",placeholder:"WHATSAPP / CELULAR",defaultValue:f==null?void 0:f.celular,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsx("input",{id:"dentista-cro",type:"text",name:"cro",placeholder:"NÚMERO CRO",defaultValue:f==null?void 0:f.cro,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input"}),s.jsxs("select",{id:"dentista-cro-uf",name:"cro_uf",defaultValue:(f==null?void 0:f.cro_uf)||"MS",className:"w-full border border-gray-300 rounded-lg p-2",children:[s.jsx("option",{value:"MS",children:"MS"}),s.jsx("option",{value:"SP",children:"SP"}),s.jsx("option",{value:"RJ",children:"RJ"}),s.jsx("option",{value:"MG",children:"MG"}),s.jsx("option",{value:"PR",children:"PR"}),s.jsx("option",{value:"SC",children:"SC"})]})]}),s.jsx("input",{id:"dentista-especialidade",type:"text",name:"especialidade",placeholder:"ESPECIALIDADE PRINCIPAL",defaultValue:f==null?void 0:f.especialidade,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input",required:!0}),s.jsxs("div",{children:[s.jsx("label",{htmlFor:"dentista-cor",className:"text-xs font-bold text-gray-500 uppercase",children:"COR NA AGENDA"}),s.jsx("input",{id:"dentista-cor",type:"color",name:"corAgenda",defaultValue:(f==null?void 0:f.corAgenda)||"#3B82F6",className:"w-full h-10 border border-gray-300 rounded-lg p-1"})]}),s.jsx("button",{type:"submit",className:"w-full bg-green-600 text-white py-2 rounded-lg font-bold hover:bg-green-700 uppercase",children:"SALVAR"})]})})]})}),p&&y&&t&&s.jsx(cB,{dentist:y,clinicaId:t.id,onClose:()=>{b(!1),x(null)}})]})},uB=()=>{const{data:t,isLoading:e,error:n,refresh:r}=Ie(K.getEspecialidades),[i,c]=A.useState(!1),[d,f]=A.useState(null),h=$e();A.useEffect(()=>{if(!i)return;const x=v=>{v.key==="Escape"&&c(!1)};return document.addEventListener("keydown",x),()=>{document.removeEventListener("keydown",x)}},[i]);const p=async x=>{x.preventDefault();const v=new FormData(x.target),N=Object.fromEntries(v);try{d&&d.id?(await K.updateEspecialidade({...d,...N}),h.success("ESPECIALIDADE ATUALIZADA!")):(await K.saveEspecialidade(N),h.success("ESPECIALIDADE SALVA!")),c(!1),r()}catch{h.error("ERRO AO SALVAR ESPECIALIDADE.")}},b=async x=>{window.confirm("TEM CERTEZA QUE DESEJA EXCLUIR ESTA ESPECIALIDADE?")&&(await K.deleteEspecialidade(x),h.success("Especialidade excluída."),r())},y=async x=>{if(!x.destination||!t)return;const v=Array.from(t),[N]=v.splice(x.source.index,1);v.splice(x.destination.index,0,N);const j=v.map((S,R)=>({id:S.id,ordem:R}));try{await K.reorderEspecialidades(j),h.success("ORDEM ATUALIZADA!"),r()}catch{h.error("ERRO AO REORDENAR.")}};return s.jsxs(zu,{title:"ESPECIALIDADES CLÍNICAS",buttonLabel:"NOVA ESPECIALIDADE",onButtonClick:()=>{f({}),c(!0)},children:[s.jsx("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{className:"bg-gray-50 text-gray-500 uppercase text-xs font-bold",children:s.jsxs("tr",{children:[s.jsx("th",{className:"px-6 py-3 text-left w-10"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"NOME"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"DESCRIÇÃO"}),s.jsx("th",{className:"px-6 py-3 text-right",children:"AÇÕES"})]})}),s.jsx(Jl,{onDragEnd:y,children:s.jsx(ti,{droppableId:"especialidades",children:x=>s.jsxs("tbody",{...x.droppableProps,ref:x.innerRef,className:"divide-y divide-gray-100",children:[e&&s.jsx("tr",{children:s.jsx("td",{colSpan:4,className:"p-6 text-center",children:s.jsx(Ot,{className:"animate-spin text-blue-500 mx-auto"})})}),n&&s.jsx("tr",{children:s.jsx("td",{colSpan:4,className:"p-6 text-center text-red-500",children:n.message})}),t==null?void 0:t.map((v,N)=>s.jsx(ei,{draggableId:v.id,index:N,children:(j,S)=>s.jsxs("tr",{ref:j.innerRef,...j.draggableProps,className:`${S.isDragging?"bg-blue-50 shadow-md ring-1 ring-blue-200":"bg-white"} transition-shadow`,children:[s.jsx("td",{className:"px-6 py-4 text-gray-400 cursor-grab active:cursor-grabbing",...j.dragHandleProps,children:s.jsx(Ql,{size:18})}),s.jsx("td",{className:"px-6 py-4 font-bold text-gray-800",children:v.nome}),s.jsx("td",{className:"px-6 py-4 text-gray-600",children:v.descricao}),s.jsx("td",{className:"px-6 py-4 text-right",children:s.jsxs("div",{className:"flex justify-end gap-2",children:[s.jsx("button",{onClick:()=>{f(v),c(!0)},className:"p-2 text-gray-500 hover:bg-gray-100 rounded-md",children:s.jsx(Uo,{size:16})}),s.jsx("button",{onClick:()=>b(v.id),className:"p-2 text-gray-500 hover:bg-red-50 hover:text-red-600 rounded-md",children:s.jsx(Qt,{size:16})})]})})]})},v.id)),x.placeholder]})})})]})}),i&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-blue-50 to-white",children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-800 uppercase",children:[d!=null&&d.id?"EDITAR":"NOVA"," ESPECIALIDADE"]}),s.jsx("button",{onClick:()=>c(!1),className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:s.jsxs("form",{onSubmit:p,className:"space-y-4 max-w-2xl mx-auto",children:[s.jsx("input",{id:"esp-nome",name:"nome",placeholder:"NOME DA ESPECIALIDADE",defaultValue:d==null?void 0:d.nome,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input",required:!0}),s.jsx("textarea",{id:"esp-desc",name:"descricao",placeholder:"BREVE DESCRIÇÃO",defaultValue:d==null?void 0:d.descricao,className:"w-full border border-gray-300 rounded-lg p-2 h-24 uppercase-textarea"}),s.jsx("button",{type:"submit",className:"w-full bg-green-600 text-white py-2 rounded-lg font-bold hover:bg-green-700 uppercase",children:"SALVAR"})]})})]})})]})},fB=()=>{var $;const{data:t,isLoading:e,error:n,refresh:r}=Ie(K.getProcedimentos),{data:i}=Ie(K.getEspecialidades),{data:c}=Ie(K.getPlanos),[d,f]=A.useState(!1),[h,p]=A.useState(null),[b,y]=A.useState([]),x=$e();A.useEffect(()=>{if(!d)return;const M=H=>{H.key==="Escape"&&f(!1)};return document.addEventListener("keydown",M),()=>{document.removeEventListener("keydown",M)}},[d]),A.useEffect(()=>{h&&(y(h.valoresPlanos||[]),!h.id&&!h.categoria&&p(M=>({...M,categoria:"Particular"})))},[h]);const v=()=>{const M=((t==null?void 0:t.length)||0)+1;p(H=>({...H,codigoInterno:M.toString()}))},N=async M=>{M.preventDefault();const H=new FormData(M.target),ne=Object.fromEntries(H.entries()),ee=i==null?void 0:i.find(pe=>pe.id===ne.especialidadeId),he={id:h==null?void 0:h.id,nome:ne.nome,codigo:ne.codigo,codigoInterno:ne.codigoInterno,categoria:ne.categoria,descricao:ne.descricao,descricao_mobile:ne.descricao_mobile||void 0,especialidadeId:ne.especialidadeId,especialidadeNome:(ee==null?void 0:ee.nome)||"",valorParticular:parseFloat(ne.valorParticular),tipo_regiao:(h==null?void 0:h.tipo_regiao)||"GERAL",exige_face:(h==null?void 0:h.tipo_regiao)==="DENTE"?!!(h!=null&&h.exige_face):!1,num_faces:(h==null?void 0:h.num_faces)||void 0,num_raizes:(h==null?void 0:h.num_raizes)||void 0,valoresPlanos:b.map(pe=>{var z;return{planoId:pe.planoId,planoNome:((z=c==null?void 0:c.find(oe=>oe.id===pe.planoId))==null?void 0:z.nome)||"",valor:parseFloat(pe.valor),codigoPlano:pe.codigoPlano||""}})};try{he.id?(await K.updateProcedimento(he),x.success("PROCEDIMENTO ATUALIZADO!")):(await K.saveProcedimento(he),x.success("PROCEDIMENTO SALVO!")),f(!1),r()}catch{x.error("ERRO AO SALVAR PROCEDIMENTO.")}},j=async M=>{window.confirm("TEM CERTEZA QUE DESEJA EXCLUIR ESTE PROCEDIMENTO?")&&(await K.deleteProcedimento(M),x.success("Procedimento excluído."),r())},S=()=>y(M=>[...M,{planoId:"",valor:0,codigoPlano:""}]),R=M=>y(H=>H.filter((ne,ee)=>ee!==M)),w=(M,H,ne)=>{const ee=[...b];ee[M]={...ee[M],[H]:ne},y(ee)},D=async M=>{if(!M.destination||!t)return;const H=Array.from(t),[ne]=H.splice(M.source.index,1);H.splice(M.destination.index,0,ne);const ee=H.map((he,pe)=>({id:he.id,ordem:pe}));try{await K.reorderProcedimentos(ee),x.success("ORDEM DOS PROCEDIMENTOS ATUALIZADA!"),r()}catch{x.error("ERRO AO REORDENAR PROCEDIMENTOS.")}},C=M=>M.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase(),I=C((($=i==null?void 0:i.find(M=>M.id===(h==null?void 0:h.especialidadeId)))==null?void 0:$.nome)||""),L=I.includes("dentistic"),F=I.includes("endodont"),Y=L||F;return s.jsxs(zu,{title:"PROCEDIMENTOS E VALORES",buttonLabel:"NOVO PROCEDIMENTO",onButtonClick:()=>{p({}),f(!0)},children:[s.jsx("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden",children:s.jsxs("table",{className:"w-full text-sm",children:[s.jsx("thead",{className:"bg-gray-50 text-gray-500 uppercase text-xs font-bold",children:s.jsxs("tr",{children:[s.jsx("th",{className:"px-6 py-3 text-left w-10"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"NOME"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"CÓDIGO (TUSS/INT)"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"CATEGORIA"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"ESPECIALIDADE"}),s.jsx("th",{className:"px-6 py-3 text-left",children:"VALOR PARTICULAR"}),s.jsx("th",{className:"px-6 py-3 text-right",children:"AÇÕES"})]})}),s.jsx(Jl,{onDragEnd:D,children:s.jsx(ti,{droppableId:"procedimentos",children:M=>s.jsxs("tbody",{...M.droppableProps,ref:M.innerRef,className:"divide-y divide-gray-100",children:[e&&s.jsx("tr",{children:s.jsx("td",{colSpan:7,className:"p-6 text-center",children:s.jsx(Ot,{className:"animate-spin text-blue-500 mx-auto"})})}),n&&s.jsx("tr",{children:s.jsx("td",{colSpan:7,className:"p-6 text-center text-red-500",children:n.message})}),t==null?void 0:t.map((H,ne)=>s.jsx(ei,{draggableId:H.id,index:ne,children:(ee,he)=>s.jsxs("tr",{ref:ee.innerRef,...ee.draggableProps,className:`${he.isDragging?"bg-blue-50 shadow-md ring-1 ring-blue-200":"bg-white"} transition-shadow`,children:[s.jsx("td",{className:"px-6 py-4 text-gray-400 cursor-grab active:cursor-grabbing",...ee.dragHandleProps,children:s.jsx(Ql,{size:18})}),s.jsx("td",{className:"px-6 py-4 font-bold text-gray-800",children:H.nome}),s.jsx("td",{className:"px-6 py-4",children:s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsxs("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:["TUSS: ",H.codigo||"---"]}),s.jsxs("span",{className:"text-[10px] font-bold text-blue-600 uppercase bg-blue-50 px-1.5 py-0.5 rounded w-fit",children:["INT: ",H.codigoInterno||"---"]})]})}),s.jsx("td",{className:"px-6 py-4",children:s.jsx("span",{className:"text-xs font-bold px-2 py-1 rounded-full bg-gray-100 text-gray-600 uppercase",children:H.categoria})}),s.jsx("td",{className:"px-6 py-4 text-gray-600",children:H.especialidadeNome}),s.jsxs("td",{className:"px-6 py-4 font-semibold text-gray-700",children:["R$ ",Number(H.valorParticular).toFixed(2)]}),s.jsx("td",{className:"px-6 py-4 text-right",children:s.jsxs("div",{className:"flex justify-end gap-2",children:[s.jsx("button",{onClick:()=>{p(H),f(!0)},className:"p-2 text-gray-500 hover:bg-gray-100 rounded-md",children:s.jsx(Uo,{size:16})}),s.jsx("button",{onClick:()=>j(H.id),className:"p-2 text-gray-500 hover:bg-red-50 hover:text-red-600 rounded-md",children:s.jsx(Qt,{size:16})})]})})]})},H.id)),M.placeholder]})})})]})}),d&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-blue-50 to-white",children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-800 uppercase",children:[h!=null&&h.id?"EDITAR":"NOVO"," PROCEDIMENTO"]}),s.jsx("button",{onClick:()=>f(!1),className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:s.jsxs("form",{onSubmit:N,className:"space-y-4 max-w-2xl mx-auto pb-4",children:[s.jsx("input",{name:"nome",placeholder:"NOME DO PROCEDIMENTO",defaultValue:h==null?void 0:h.nome,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input",required:!0}),s.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"CATEGORIA"}),s.jsxs("select",{name:"categoria",value:(h==null?void 0:h.categoria)||"Particular",onChange:M=>{const H=M.target.value;p(ne=>({...ne,categoria:H})),H==="Particular"&&!(h!=null&&h.codigoInterno)&&v()},className:"w-full border border-gray-300 rounded-lg p-2 bg-white uppercase-select",required:!0,children:[s.jsx("option",{value:"Particular",children:"Particular"}),s.jsx("option",{value:"Plano",children:"Plano"}),s.jsx("option",{value:"Convênio",children:"Convênio"}),s.jsx("option",{value:"Outros",children:"Outros"})]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"CÓDIGO TUSS"}),s.jsx("input",{name:"codigo",placeholder:(h==null?void 0:h.categoria)==="Plano"?"00000000":"OPCIONAL",defaultValue:h==null?void 0:h.codigo,className:`w-full border border-gray-300 rounded-lg p-2 uppercase-input ${(h==null?void 0:h.categoria)!=="Plano"?"bg-gray-50":""}`,required:(h==null?void 0:h.categoria)==="Plano"})]}),s.jsxs("div",{children:[s.jsxs("label",{className:"text-xs font-bold text-gray-500 uppercase flex justify-between",children:["CÓDIGO INTERNO",(h==null?void 0:h.categoria)!=="Particular"&&s.jsx("button",{type:"button",onClick:v,className:"text-blue-600 hover:text-blue-800",children:s.jsx(vu,{size:12})})]}),s.jsx("input",{name:"codigoInterno",placeholder:(h==null?void 0:h.categoria)==="Particular"?"AUTO (CONTAGEM + 1)":"EX: 101",value:(h==null?void 0:h.codigoInterno)||"",onChange:M=>p(H=>({...H,codigoInterno:M.target.value})),className:`w-full border border-gray-300 rounded-lg p-2 uppercase-input ${(h==null?void 0:h.categoria)==="Particular"?"bg-gray-50 text-blue-600 font-bold":""}`,required:(h==null?void 0:h.categoria)!=="Particular"})]})]}),s.jsx("textarea",{name:"descricao",placeholder:"BREVE DESCRIÇÃO",defaultValue:h==null?void 0:h.descricao,className:"w-full border border-gray-300 rounded-lg p-2 h-20 uppercase-textarea"}),s.jsxs("div",{children:[s.jsxs("label",{className:"text-xs font-bold text-gray-500 uppercase flex items-center gap-2",children:["DESCRIÇÃO MOBILE ",s.jsx("span",{className:"text-[10px] text-blue-500 font-normal normal-case",children:"(versão curta para celular)"})]}),s.jsx("input",{name:"descricao_mobile",placeholder:"EX: RESTAURAÇÃO COMP.",defaultValue:h==null?void 0:h.descricao_mobile,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input"})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"ESPECIALIDADE"}),s.jsxs("select",{name:"especialidadeId",value:(h==null?void 0:h.especialidadeId)||"",onChange:M=>{var he;const H=M.target.value,ne=C(((he=i==null?void 0:i.find(pe=>pe.id===H))==null?void 0:he.nome)||""),ee=ne.includes("dentistic")||ne.includes("endodont");p(pe=>({...pe,especialidadeId:H,tipo_regiao:ee&&(pe==null?void 0:pe.tipo_regiao)==="ARCO"?"DENTE":pe==null?void 0:pe.tipo_regiao,num_faces:void 0,num_raizes:void 0}))},className:"w-full border border-gray-300 rounded-lg p-2 bg-white uppercase-select",required:!0,children:[s.jsx("option",{value:"",children:"SELECIONE UMA ESPECIALIDADE"}),i==null?void 0:i.map(M=>s.jsx("option",{value:M.id,children:M.nome},M.id))]})]}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"VALOR PARTICULAR (R$)"}),s.jsx("input",{type:"number",step:"0.01",name:"valorParticular",placeholder:"0.00",defaultValue:h==null?void 0:h.valorParticular,className:"w-full border border-gray-300 rounded-lg p-2",required:!0})]})]}),s.jsxs("div",{className:"bg-blue-50/50 p-4 rounded-xl border border-blue-100 space-y-4",children:[s.jsxs("h4",{className:"text-[10px] font-black text-blue-600 uppercase tracking-widest flex items-center gap-2",children:[s.jsx($l,{size:12})," REGRA DO ODONTOGRAMA (GTO)"]}),s.jsxs("div",{className:"space-y-3",children:[s.jsx("label",{className:"text-xs font-bold text-gray-700 uppercase",children:"EXIGÊNCIA DE REGIÃO NO LANÇAMENTO"}),s.jsx("div",{className:`grid gap-2 ${Y?"grid-cols-2":"grid-cols-3"}`,children:[{id:"GERAL",label:"PROCED. GERAL",desc:"SEM ODONTOGRAMA"},{id:"DENTE",label:"DENTE ESPECÍFICO",desc:"LIBERA NÚMEROS"},...Y?[]:[{id:"ARCO",label:"ARCO COMPLETO",desc:"LIBERA AI / AS"}]].map(M=>s.jsxs("label",{className:` - relative flex flex-col p-3 rounded-lg border-2 cursor-pointer transition-all - ${((h==null?void 0:h.tipo_regiao)||"GERAL")===M.id?"border-blue-600 bg-blue-50 ring-2 ring-blue-100":"border-gray-200 bg-white hover:border-gray-300"} - `,children:[s.jsx("input",{type:"radio",name:"tipo_regiao",value:M.id,checked:((h==null?void 0:h.tipo_regiao)||"GERAL")===M.id,onChange:H=>p(ne=>({...ne,tipo_regiao:H.target.value})),className:"sr-only"}),s.jsx("span",{className:"text-[10px] font-black uppercase text-gray-900 leading-tight",children:M.label}),s.jsx("span",{className:"text-[9px] font-bold text-gray-400 mt-1 uppercase",children:M.desc})]},M.id))})]}),(h==null?void 0:h.tipo_regiao)==="DENTE"&&s.jsx("div",{className:"pt-2 animate-in slide-in-from-top-2 duration-200",children:s.jsxs("label",{className:"flex items-center gap-3 p-3 bg-white rounded-lg border border-blue-200 cursor-pointer hover:bg-blue-50/50 transition-colors",children:[s.jsx("div",{className:"relative flex items-center",children:s.jsx("input",{type:"checkbox",name:"exige_face",checked:!!(h!=null&&h.exige_face),onChange:M=>p(H=>({...H,exige_face:M.target.checked})),className:"w-5 h-5 rounded border-gray-300 text-blue-600 focus:ring-blue-500"})}),s.jsxs("div",{className:"flex flex-col",children:[s.jsx("span",{className:"text-[11px] font-black text-gray-800 uppercase",children:"Exigir preenchimento de Face?"}),s.jsx("span",{className:"text-[9px] font-bold text-gray-400 uppercase",children:"(O, M, D, V, L, P) será obrigatório na GTO"})]})]})}),L&&s.jsxs("div",{className:"pt-2 animate-in slide-in-from-top-2 duration-200",children:[s.jsx("label",{className:"text-[10px] font-black text-blue-700 uppercase tracking-widest mb-1.5 block",children:"Nº de Faces (Dentística)"}),s.jsxs("select",{value:(h==null?void 0:h.num_faces)||"",onChange:M=>p(H=>({...H,num_faces:M.target.value?parseInt(M.target.value):void 0})),className:"w-full border border-blue-200 rounded-lg p-2.5 bg-white text-sm font-bold text-gray-700 focus:border-blue-500 outline-none",children:[s.jsx("option",{value:"",children:"NÃO DEFINIDO"}),[1,2,3,4,5].map(M=>s.jsxs("option",{value:M,children:[M," ",M===1?"face":"faces"]},M))]})]}),F&&s.jsxs("div",{className:"pt-2 animate-in slide-in-from-top-2 duration-200",children:[s.jsx("label",{className:"text-[10px] font-black text-blue-700 uppercase tracking-widest mb-1.5 block",children:"Nº de Raízes (Endodontia)"}),s.jsxs("select",{value:(h==null?void 0:h.num_raizes)||"",onChange:M=>p(H=>({...H,num_raizes:M.target.value?parseInt(M.target.value):void 0})),className:"w-full border border-blue-200 rounded-lg p-2.5 bg-white text-sm font-bold text-gray-700 focus:border-blue-500 outline-none",children:[s.jsx("option",{value:"",children:"NÃO DEFINIDO"}),[1,2,3,4,5].map(M=>s.jsxs("option",{value:M,children:[M," ",M===1?"raiz":"raízes"]},M))]})]})]}),s.jsxs("div",{className:"pt-4",children:[s.jsx("h4",{className:"font-bold text-gray-700 uppercase mb-2",children:"VALORES PARA PLANOS / CONVÊNIOS"}),s.jsx("div",{className:"space-y-2",children:b.map((M,H)=>s.jsxs("div",{className:"flex flex-col md:flex-row items-center gap-2 bg-gray-50 p-2 rounded-lg border",children:[s.jsxs("select",{value:M.planoId,onChange:ne=>w(H,"planoId",ne.target.value),className:"flex-1 border border-gray-300 rounded-lg p-2 bg-white uppercase-select",children:[s.jsx("option",{value:"",children:"SELECIONE UM PLANO"}),c==null?void 0:c.filter(ne=>ne.tipo!=="Particular").map(ne=>s.jsx("option",{value:ne.id,children:ne.nome},ne.id))]}),s.jsx("input",{type:"number",step:"0.01",placeholder:"VALOR (R$)",value:M.valor,onChange:ne=>w(H,"valor",ne.target.value),className:"w-32 border border-gray-300 rounded-lg p-2"}),s.jsx("input",{type:"text",placeholder:"CÓD. PLANO",value:M.codigoPlano,onChange:ne=>w(H,"codigoPlano",ne.target.value),className:"w-32 border border-gray-300 rounded-lg p-2 uppercase-input"}),s.jsx("button",{type:"button",onClick:()=>R(H),className:"p-2 text-red-500 hover:bg-red-100 rounded-md",children:s.jsx(Qt,{size:16})})]},H))}),s.jsxs("button",{type:"button",onClick:S,className:"mt-2 text-xs font-bold text-blue-600 hover:underline uppercase flex items-center gap-1",children:[s.jsx(gt,{size:14})," ADICIONAR VALOR DE PLANO"]})]}),s.jsx("div",{className:"pt-4 flex-shrink-0",children:s.jsx("button",{type:"submit",className:"w-full bg-green-600 text-white py-4 rounded-xl font-black hover:bg-green-700 uppercase text-xs shadow-lg shadow-green-100 transition-all active:scale-[0.98]",children:"SALVAR PROCEDIMENTO"})})]})})]})})]})},hB=()=>{const{data:t,isLoading:e,error:n,refresh:r}=Ie(K.getPlanos),[i,c]=A.useState(!1),[d,f]=A.useState(null),h=$e();A.useEffect(()=>{if(!i)return;const y=x=>{x.key==="Escape"&&c(!1)};return document.addEventListener("keydown",y),()=>{document.removeEventListener("keydown",y)}},[i]);const p=async y=>{y.preventDefault();const x=new FormData(y.target),v=Object.fromEntries(x);try{d&&d.id?(await K.updatePlano({...d,...v}),h.success("PLANO ATUALIZADO!")):(await K.savePlano(v),h.success("PLANO SALVO!")),c(!1),r()}catch{h.error("ERRO AO SALVAR PLANO.")}},b=async y=>{window.confirm("TEM CERTEZA QUE DESEJA EXCLUIR ESTE PLANO?")&&(await K.deletePlano(y),h.success("Plano excluído."),r())};return s.jsxs(zu,{title:"PLANOS E CONVÊNIOS",buttonLabel:"NOVO PLANO",onButtonClick:()=>{f({}),c(!0)},children:[e&&s.jsx(Ot,{className:"animate-spin text-blue-500"}),n&&s.jsxs("p",{className:"text-red-500",children:["Erro: ",n.message]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:t==null?void 0:t.map(y=>s.jsxs("div",{className:"bg-white border border-gray-200 rounded-xl shadow-sm hover:shadow-md transition-shadow flex flex-col overflow-hidden",style:{borderTop:`4px solid ${y.corCartao}`},children:[s.jsxs("div",{className:"p-5 flex-grow",children:[s.jsxs("div",{className:"flex justify-between items-start",children:[s.jsx("h3",{className:"font-bold text-gray-900 uppercase",children:y.nome}),s.jsx("span",{className:"text-xs font-bold text-gray-500 bg-gray-100 px-2 py-0.5 rounded-full uppercase",children:y.tipo})]}),s.jsxs("p",{className:"text-sm text-gray-600 mt-2",children:["DESCONTO PADRÃO: ",s.jsxs("span",{className:"font-bold",children:[y.descontoPadrao,"%"]})]})]}),s.jsxs("div",{className:"border-t border-gray-100 p-2 flex gap-2 bg-gray-50/50",children:[s.jsxs("button",{onClick:()=>{f(y),c(!0)},className:"flex-1 text-xs uppercase font-bold text-gray-600 hover:bg-gray-100 py-2 rounded-md flex items-center justify-center gap-2",children:[s.jsx(Uo,{size:14})," EDITAR"]}),s.jsxs("button",{onClick:()=>b(y.id),className:"flex-1 text-xs uppercase font-bold text-red-500 hover:bg-red-50 py-2 rounded-md flex items-center justify-center gap-2",children:[s.jsx(Qt,{size:14})," EXCLUIR"]})]})]},y.id))}),i&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-50 flex items-center justify-center backdrop-blur-sm p-0",children:s.jsxs("div",{className:"bg-white shadow-2xl w-full h-dvh md:w-[96vw] md:h-[98vh] rounded-none md:rounded-xl flex flex-col overflow-hidden animate-in fade-in zoom-in-50 duration-200",children:[s.jsxs("div",{className:"px-5 py-4 border-b border-gray-200 flex justify-between items-center flex-shrink-0 bg-gradient-to-r from-blue-50 to-white",children:[s.jsxs("h3",{className:"text-lg font-bold text-gray-800 uppercase",children:[d!=null&&d.id?"EDITAR":"NOVO"," PLANO"]}),s.jsx("button",{onClick:()=>c(!1),className:"text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg p-1.5 transition-colors",children:s.jsx(Qe,{size:22})})]}),s.jsx("div",{className:"flex-1 overflow-y-auto p-5 lg:p-8",children:s.jsxs("form",{onSubmit:p,className:"space-y-4 max-w-2xl mx-auto",children:[s.jsx("input",{name:"nome",placeholder:"NOME DO PLANO/CONVÊNIO",defaultValue:d==null?void 0:d.nome,className:"w-full border border-gray-300 rounded-lg p-2 uppercase-input",required:!0}),s.jsxs("select",{name:"tipo",defaultValue:(d==null?void 0:d.tipo)||"Convenio",className:"w-full border border-gray-300 rounded-lg p-2 bg-white uppercase-select",required:!0,children:[s.jsx("option",{children:"Convenio"}),s.jsx("option",{children:"Particular"}),s.jsx("option",{children:"Parceria"})]}),s.jsx("input",{type:"number",name:"descontoPadrao",placeholder:"DESCONTO PADRÃO (%)",defaultValue:d==null?void 0:d.descontoPadrao,className:"w-full border border-gray-300 rounded-lg p-2"}),s.jsxs("div",{children:[s.jsx("label",{className:"text-xs font-bold text-gray-500 uppercase",children:"COR DO CARTÃO"}),s.jsx("input",{type:"color",name:"corCartao",defaultValue:(d==null?void 0:d.corCartao)||"#1f2937",className:"w-full h-10 border border-gray-300 rounded-lg p-1"})]}),s.jsx("button",{type:"submit",className:"w-full bg-green-600 text-white py-2 rounded-lg font-bold hover:bg-green-700 uppercase",children:"SALVAR"})]})})]})})]})},pB=["pacientes","agendamentos","financeiro","leads","guias"],gB=()=>{const[t,e]=A.useState([]),[n,r]=A.useState(null),[i,c]=A.useState(null),d=$e(),f={Authorization:`Bearer ${localStorage.getItem("SCOREODONTO_AUTH_TOKEN")}`,"Content-Type":"application/json"},h=async()=>{try{const y=await fetch("/api/sync/status",{headers:f});y.ok&&c(await y.json())}catch{}};A.useEffect(()=>{h()},[]);const p=async y=>{r(y),e([`>>> ${{push:"BACKUP PostgreSQL → Google Sheets",pull:"RESTAURAR Google Sheets → PostgreSQL","import-legacy":"IMPORTAR PACIENTES (aba PACIENTES-CONSULTT-CLINIC)..."}[y]}...`]);try{const N=await(await fetch(`/api/sync/${y}`,{method:"POST",headers:f})).json();if(e(N.logs||[]),N.success){const j={push:"BACKUP REALIZADO!",pull:"DADOS RESTAURADOS!","import-legacy":`${N.imported??0} PACIENTES IMPORTADOS!`};d.success(j[y]),h()}else d.error("ERRO NA SINCRONIZAÇÃO. VERIFIQUE OS LOGS.")}catch(v){e(N=>[...N,`[ERRO] ${v.message}`]),d.error("FALHA NA CONEXÃO.")}finally{r(null)}},b=y=>y?new Date(y).toLocaleString("pt-BR",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"—";return s.jsxs("div",{className:"max-w-5xl mx-auto space-y-6",children:[s.jsx(fn,{title:"BACKUP & SINCRONIZAÇÃO",description:"POSTGRESQL ↔ GOOGLE SHEETS",children:s.jsxs("div",{className:"flex gap-3",children:[s.jsxs("button",{onClick:()=>p("push"),disabled:!!n,className:`px-4 py-2 rounded-xl flex items-center gap-2 text-xs font-black uppercase transition-all shadow-sm ${n?"bg-gray-200 text-gray-400 cursor-not-allowed":"bg-green-600 hover:bg-green-700 text-white shadow-green-100"}`,children:[s.jsx(vu,{size:15,className:n==="push"?"animate-spin":""}),n==="push"?"ENVIANDO...":"BACKUP AGORA"]}),s.jsxs("button",{onClick:()=>p("pull"),disabled:!!n,className:`px-4 py-2 rounded-xl flex items-center gap-2 text-xs font-black uppercase transition-all shadow-sm ${n?"bg-gray-200 text-gray-400 cursor-not-allowed":"bg-blue-600 hover:bg-blue-700 text-white shadow-blue-100"}`,children:[s.jsx(Sr,{size:15,className:n==="pull"?"animate-spin":""}),n==="pull"?"IMPORTANDO...":"RESTAURAR DO BACKUP"]}),s.jsxs("button",{onClick:()=>p("import-legacy"),disabled:!!n,title:"Importa pacientes da aba PACIENTES-CONSULTT-CLINIC (Apps Script)",className:`px-4 py-2 rounded-xl flex items-center gap-2 text-xs font-black uppercase transition-all shadow-sm ${n?"bg-gray-200 text-gray-400 cursor-not-allowed":"bg-amber-500 hover:bg-amber-600 text-white shadow-amber-100"}`,children:[s.jsx(Sr,{size:15,className:n==="import-legacy"?"animate-spin":""}),n==="import-legacy"?"IMPORTANDO...":"IMPORTAR PLANILHA LEGADA"]})]})}),s.jsxs("div",{className:"bg-white rounded-2xl border border-gray-100 shadow-sm overflow-hidden",children:[s.jsx("div",{className:"px-6 py-4 border-b border-gray-50",children:s.jsx("h3",{className:"text-xs font-black text-gray-500 uppercase tracking-widest",children:"ESTADO DAS TABELAS"})}),s.jsx("div",{className:"divide-y divide-gray-50",children:pB.map(y=>{var N,j;const x=(N=i==null?void 0:i.syncStatus)==null?void 0:N[y],v=(j=i==null?void 0:i.counts)==null?void 0:j[y];return s.jsxs("div",{className:"flex items-center justify-between px-6 py-4",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:`w-2 h-2 rounded-full ${x!=null&&x.lastPush?"bg-green-400":"bg-gray-200"}`}),s.jsx("span",{className:"text-sm font-black uppercase text-gray-700",children:y})]}),s.jsxs("div",{className:"flex items-center gap-8 text-right",children:[s.jsxs("div",{children:[s.jsx("p",{className:"text-[9px] font-bold text-gray-400 uppercase",children:"No banco"}),s.jsx("p",{className:"text-sm font-black text-gray-800",children:v??"—"})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[9px] font-bold text-gray-400 uppercase",children:"Último backup"}),s.jsx("p",{className:"text-xs font-bold text-gray-600",children:b(x==null?void 0:x.lastPush)})]}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[9px] font-bold text-gray-400 uppercase",children:"Registros no backup"}),s.jsx("p",{className:"text-xs font-bold text-gray-600",children:(x==null?void 0:x.count)??"—"})]})]})]},y)})}),(i==null?void 0:i.spreadsheetId)&&s.jsxs("div",{className:"px-6 py-3 bg-gray-50 border-t border-gray-100 flex items-center gap-2",children:[s.jsx("span",{className:"text-[10px] font-bold text-gray-400 uppercase",children:"PLANILHA:"}),s.jsx("span",{className:"text-[10px] font-mono text-blue-600 truncate",children:i.spreadsheetId})]})]}),s.jsxs("div",{className:"bg-white rounded-2xl border border-gray-100 shadow-sm overflow-hidden",children:[s.jsxs("div",{className:"px-6 py-4 border-b border-gray-50 flex items-center justify-between",children:[s.jsx("h3",{className:"text-xs font-black text-gray-500 uppercase tracking-widest",children:"LOG DE OPERAÇÃO"}),t.length>0&&s.jsx("button",{onClick:()=>e([]),className:"text-[10px] font-bold text-gray-400 hover:text-gray-600 uppercase",children:"LIMPAR"})]}),s.jsx("div",{className:"p-4",children:s.jsxs("div",{className:"bg-gray-950 rounded-xl p-4 font-mono text-xs text-green-400 min-h-[160px] max-h-80 overflow-y-auto",children:[t.length===0?s.jsx("span",{className:"text-gray-600",children:"AGUARDANDO OPERAÇÃO..."}):t.map((y,x)=>s.jsx("div",{className:`mb-1 pl-2 border-l-2 ${y.startsWith("[ERRO]")?"border-red-500 text-red-400":y.startsWith("[✓]")?"border-green-400 text-green-300":"border-gray-700"}`,children:y},x)),n&&s.jsx("div",{className:"animate-pulse text-green-500 mt-1",children:"▋"})]})}),s.jsxs("div",{className:"bg-amber-50 border-t border-amber-100 px-6 py-3 flex items-start gap-3",children:[s.jsx(Sr,{size:14,className:"text-amber-600 mt-0.5 flex-shrink-0"}),s.jsx("p",{className:"text-[10px] text-amber-700 font-bold uppercase leading-relaxed",children:'BACKUP AUTOMÁTICO: cada alteração de paciente, agendamento, financeiro ou lead é enviada para a planilha automaticamente (com delay de 5s para agrupar alterações). Use "Restaurar" para recuperar dados da planilha caso o banco seja reiniciado.'})]})]})]})},mB=()=>{const[t,e]=A.useState([]),[n,r]=A.useState(!0),[i,c]=A.useState(""),[d,f]=A.useState("all"),[h,p]=A.useState("all"),b=$e(),y=async()=>{r(!0);try{const w=await K.getNotifications();e(w.sort((D,C)=>new Date(C.data).getTime()-new Date(D.data).getTime()))}catch{b.error("Erro ao carregar notificações")}finally{r(!1)}};A.useEffect(()=>{y()},[]);const x=async w=>{try{await K.markNotificationRead(w),e(D=>D.map(C=>C.id===w?{...C,lida:!0}:C)),b.success("Notificação marcada como lida")}catch{b.error("Erro ao atualizar notificação")}},v=async()=>{if(t.filter(D=>!D.lida).length!==0)try{await K.markAllNotificationsRead(),e(D=>D.map(C=>({...C,lida:!0}))),b.success("Todas as notificações foram marcadas como lidas")}catch{b.error("Erro ao atualizar notificações")}},N=async w=>{try{await K.deleteNotification(w),e(D=>D.filter(C=>C.id!==w)),b.success("Notificação removida")}catch{b.error("Erro ao excluir notificação")}},j=w=>{switch(w){case"agenda":return s.jsx(jt,{size:20,className:"text-blue-500"});case"financeiro":return s.jsx(Fa,{size:20,className:"text-emerald-500"});case"lead":return s.jsx(Wl,{size:20,className:"text-amber-500"});case"sistema":return s.jsx(Pd,{size:20,className:"text-red-500"});default:return s.jsx(Mg,{size:20,className:"text-gray-500"})}},S=t.filter(w=>{const D=w.titulo.toLowerCase().includes(i.toLowerCase())||w.mensagem.toLowerCase().includes(i.toLowerCase()),C=d==="all"||d==="unread"&&!w.lida||d==="important"&&w.tipo==="sistema",I=h==="all"||w.tipo===h;return D&&C&&I}),R=t.filter(w=>!w.lida).length;return s.jsxs("div",{className:"space-y-6 animate-in fade-in duration-500",children:[s.jsx(fn,{title:"CENTRO DE NOTIFICAÇÕES",children:s.jsxs("div",{className:"flex gap-3",children:[s.jsxs("button",{onClick:v,className:"flex items-center gap-2 px-4 py-2 bg-white border border-slate-200 text-slate-600 hover:text-blue-600 hover:border-blue-200 rounded-xl font-bold text-xs uppercase tracking-wider transition-all shadow-sm",children:[s.jsx(pa,{size:16})," Marcar todas como lidas"]}),s.jsxs("button",{onClick:y,className:"flex items-center gap-2 px-4 py-2 bg-blue-600 text-white hover:bg-blue-700 rounded-xl font-bold text-xs uppercase tracking-wider transition-all shadow-md active:scale-95",children:[s.jsx(go,{size:16})," Atualizar"]})]})}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[{label:"Total",count:t.length,icon:rv,color:"text-slate-600",bg:"bg-slate-100"},{label:"Não Lidas",count:R,icon:go,color:"text-blue-600",bg:"bg-blue-50"},{label:"Sistema",count:t.filter(w=>w.tipo==="sistema").length,icon:Pd,color:"text-red-600",bg:"bg-red-50"},{label:"Financeiro",count:t.filter(w=>w.tipo==="financeiro").length,icon:Fa,color:"text-emerald-600",bg:"bg-emerald-50"}].map((w,D)=>s.jsxs("div",{className:"bg-white p-5 rounded-2xl border border-slate-100 shadow-sm flex items-center gap-4 group hover:shadow-md transition-all",children:[s.jsx("div",{className:`p-3 rounded-xl ${w.bg} ${w.color} group-hover:scale-110 transition-transform`,children:s.jsx(w.icon,{size:24})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-[10px] font-black text-slate-400 uppercase tracking-widest",children:w.label}),s.jsx("h4",{className:"text-2xl font-black text-slate-800 tracking-tighter",children:w.count})]})]},D))}),s.jsxs("div",{className:"bg-white rounded-[2.5rem] border border-slate-100 shadow-sm overflow-hidden min-h-[600px] flex flex-col",children:[s.jsxs("div",{className:"p-8 border-b border-slate-50 flex flex-col lg:flex-row lg:items-center justify-between gap-6 bg-slate-50/30",children:[s.jsx("div",{className:"flex p-1.5 bg-slate-100 rounded-2xl w-fit",children:[{id:"all",label:"Todas"},{id:"unread",label:"Não Lidas"},{id:"important",label:"Importantes"}].map(w=>s.jsxs("button",{onClick:()=>f(w.id),className:`px-6 py-2.5 rounded-xl text-xs font-black uppercase tracking-widest transition-all ${d===w.id?"bg-white text-blue-600 shadow-sm":"text-slate-500 hover:text-slate-700"}`,children:[w.label,w.id==="unread"&&R>0&&s.jsx("span",{className:"ml-2 bg-blue-600 text-white px-1.5 py-0.5 rounded-md text-[9px]",children:R})]},w.id))}),s.jsxs("div",{className:"flex flex-1 max-w-2xl gap-3",children:[s.jsxs("div",{className:"relative flex-1 group",children:[s.jsx(Qn,{className:"absolute left-4 top-1/2 -translate-y-1/2 text-slate-400 group-focus-within:text-blue-500 transition-colors",size:18}),s.jsx("input",{type:"text",placeholder:"Pesquisar notificações...",value:i,onChange:w=>c(w.target.value),className:"w-full pl-12 pr-4 py-3.5 bg-white border border-slate-200 rounded-2xl text-sm font-bold uppercase tracking-tight focus:ring-4 focus:ring-blue-50 focus:border-blue-500 outline-none transition-all placeholder:text-slate-300"})]}),s.jsxs("select",{value:h,onChange:w=>p(w.target.value),className:"px-4 py-3.5 bg-white border border-slate-200 rounded-2xl text-xs font-black uppercase tracking-widest focus:ring-4 focus:ring-blue-50 outline-none cursor-pointer",children:[s.jsx("option",{value:"all",children:"Filtro: Todos"}),s.jsx("option",{value:"lead",children:"Novos Leads"}),s.jsx("option",{value:"agenda",children:"Agendamentos"}),s.jsx("option",{value:"financeiro",children:"Financeiro"}),s.jsx("option",{value:"sistema",children:"Alertas de Sistema"})]})]})]}),s.jsx("div",{className:"flex-1 overflow-y-auto custom-scrollbar",children:n?s.jsxs("div",{className:"flex flex-col items-center justify-center h-[400px]",children:[s.jsx("div",{className:"w-12 h-12 border-4 border-blue-100 border-t-blue-600 rounded-full animate-spin mb-4"}),s.jsx("p",{className:"text-slate-400 font-black uppercase tracking-widest text-xs",children:"Carregando Histórico..."})]}):S.length===0?s.jsxs("div",{className:"flex flex-col items-center justify-center p-20 text-center",children:[s.jsx("div",{className:"w-32 h-32 bg-slate-50 rounded-[3rem] flex items-center justify-center mb-6",children:s.jsx(rv,{size:48,className:"text-slate-200"})}),s.jsx("h3",{className:"text-xl font-black text-slate-800 uppercase tracking-tighter",children:"Nenhuma notificação encontrada"}),s.jsx("p",{className:"text-slate-400 text-sm mt-2 max-w-sm",children:"Não existem registros que correspondam aos seus filtros ou pesquisa no momento."})]}):s.jsx("div",{className:"divide-y divide-slate-50",children:S.map((w,D)=>s.jsxs("div",{className:`group p-8 transition-all hover:bg-slate-50/50 flex flex-col md:flex-row md:items-center gap-6 relative ${w.lida?"":"bg-blue-50/20"}`,style:{animationDelay:`${D*50}ms`},children:[!w.lida&&s.jsx("div",{className:"absolute left-0 top-0 bottom-0 w-1.5 bg-blue-600 rounded-r-full shadow-[2px_0_10px_rgba(37,99,235,0.3)]"}),s.jsx("div",{className:`p-4 rounded-[1.5rem] flex-shrink-0 shadow-sm border border-white transition-transform group-hover:scale-110 ${w.tipo==="agenda"?"bg-blue-100/50 text-blue-600":w.tipo==="financeiro"?"bg-emerald-100/50 text-emerald-600":w.tipo==="lead"?"bg-amber-100/50 text-amber-600":"bg-red-100/50 text-red-600"}`,children:j(w.tipo)}),s.jsxs("div",{className:"flex-1 space-y-2",children:[s.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[s.jsx("span",{className:`text-[10px] font-black uppercase tracking-[0.2em] px-3 py-1 rounded-full ${w.tipo==="agenda"?"bg-blue-100 text-blue-600":w.tipo==="financeiro"?"bg-emerald-100 text-emerald-600":w.tipo==="lead"?"bg-amber-100 text-amber-600":"bg-red-100 text-red-600"}`,children:w.tipo}),s.jsxs("span",{className:"text-[11px] font-bold text-slate-300 flex items-center gap-1.5 uppercase tracking-wider",children:[s.jsx(jt,{size:12}),new Date(w.data).toLocaleDateString("pt-BR",{day:"2-digit",month:"short",year:"numeric"})]}),s.jsxs("span",{className:"text-[11px] font-bold text-slate-300 flex items-center gap-1.5 uppercase tracking-wider",children:[s.jsx(xB,{size:12,className:"ml-2"}),new Date(w.data).toLocaleTimeString("pt-BR",{hour:"2-digit",minute:"2-digit"})]})]}),s.jsx("h3",{className:`text-lg font-black tracking-tighter uppercase ${w.lida?"text-slate-600":"text-slate-900"}`,children:w.titulo}),s.jsx("p",{className:"text-slate-500 text-sm leading-relaxed max-w-4xl",children:w.mensagem})]}),s.jsxs("div",{className:"flex items-center gap-3 opacity-0 group-hover:opacity-100 transition-all transform translate-x-4 group-hover:translate-x-0",children:[!w.lida&&s.jsx("button",{onClick:()=>x(w.id),className:"p-3 bg-blue-600 text-white rounded-xl shadow-lg shadow-blue-100 hover:bg-blue-700 hover:-translate-y-1 transition-all",title:"Marcar como lida",children:s.jsx(pa,{size:20})}),s.jsx("button",{onClick:()=>N(w.id),className:"p-3 bg-white text-slate-400 border border-slate-100 rounded-xl shadow-sm hover:text-red-600 hover:border-red-100 hover:-translate-y-1 transition-all",title:"Excluir",children:s.jsx(Qt,{size:20})}),s.jsx("button",{className:"p-3 bg-white text-slate-400 border border-slate-100 rounded-xl shadow-sm hover:text-slate-600 hover:-translate-y-1 transition-all",children:s.jsx(nD,{size:20})})]})]},w.id))})}),s.jsxs("div",{className:"p-6 bg-slate-50 border-t border-slate-100 flex items-center justify-between",children:[s.jsxs("p",{className:"text-[11px] font-bold text-slate-400 uppercase tracking-widest",children:["Mostrando ",S.length," de ",t.length," registros"]}),s.jsxs("div",{className:"flex gap-2",children:[s.jsx("button",{className:"px-5 py-2 rounded-xl bg-white border border-slate-200 text-[11px] font-black uppercase tracking-wider text-slate-500 hover:bg-slate-50 transition-colors",children:"Voltar"}),s.jsx("button",{className:"px-5 py-2 rounded-xl bg-white border border-slate-200 text-[11px] font-black uppercase tracking-wider text-slate-500 hover:bg-slate-50 transition-colors",children:"Próximo"})]})]})]})]})},xB=({size:t,className:e})=>s.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",width:t,height:t,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:e,children:[s.jsx("circle",{cx:"12",cy:"12",r:"10"}),s.jsx("polyline",{points:"12 6 12 12 16 14"})]}),bB=()=>{var x,v,N;const t=K.getActiveWorkspace(),[e,n]=A.useState(new Date(new Date().getFullYear(),new Date().getMonth(),1).toISOString().split("T")[0]),[r,i]=A.useState(new Date().toISOString().split("T")[0]),{data:c,isLoading:d,refresh:f}=Ie(()=>t?K.getProductivityReport(t.id,e,r):Promise.resolve(null),[t==null?void 0:t.id,e,r]),h=((x=c==null?void 0:c.financeiro)==null?void 0:x.receita)||0,p=((v=c==null?void 0:c.financeiro)==null?void 0:v.despesa)||0,b=h-p,y=()=>{if(!c)return;let j=`Dentista,Total,Concluidos,Faltas,Taxa Ocupacao -`;c.producao.forEach(D=>{const C=D.totalAgendamentos>0?(D.concluidos/D.totalAgendamentos*100).toFixed(1):0;j+=`${D.dentista},${D.totalAgendamentos},${D.concluidos},${D.faltas},${C}% -`});const S=new Blob([j],{type:"text/csv"}),R=window.URL.createObjectURL(S),w=document.createElement("a");w.href=R,w.download=`relatorio_producao_${e}_${r}.csv`,w.click()};return s.jsxs("div",{className:"space-y-8 animate-in fade-in duration-500 pb-10",children:[s.jsx(fn,{title:"RELATÓRIOS & PERFORMANCE",children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsxs("button",{onClick:()=>window.print(),className:"bg-white border border-gray-200 text-gray-600 p-2 rounded-lg hover:bg-gray-50 flex items-center gap-2 text-xs font-bold transition-all shadow-sm",children:[s.jsx(Ya,{size:16})," ",s.jsx("span",{className:"hidden sm:inline",children:"IMPRIMIR"})]}),s.jsxs("button",{onClick:y,className:"bg-white border border-gray-200 text-gray-600 p-2 rounded-lg hover:bg-gray-50 flex items-center gap-2 text-xs font-bold transition-all shadow-sm",children:[s.jsx(kg,{size:16})," ",s.jsx("span",{className:"hidden sm:inline",children:"EXPORTAR"})]})]})}),s.jsxs("div",{className:"bg-white p-6 rounded-2xl shadow-sm border border-gray-100 flex flex-wrap items-end gap-6",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsxs("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest flex items-center gap-2",children:[s.jsx(jt,{size:12})," INÍCIO DO PERÍODO"]}),s.jsx("input",{type:"date",value:e,onChange:j=>n(j.target.value),className:"bg-gray-50 border border-gray-200 rounded-xl px-4 py-2.5 text-sm font-bold text-gray-700 focus:ring-2 focus:ring-blue-100 outline-none transition-all"})]}),s.jsxs("div",{className:"space-y-2",children:[s.jsxs("label",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest flex items-center gap-2",children:[s.jsx(jt,{size:12})," FIM DO PERÍODO"]}),s.jsx("input",{type:"date",value:r,onChange:j=>i(j.target.value),className:"bg-gray-50 border border-gray-200 rounded-xl px-4 py-2.5 text-sm font-bold text-gray-700 focus:ring-2 focus:ring-blue-100 outline-none transition-all"})]}),s.jsxs("button",{onClick:f,className:"bg-blue-600 text-white px-6 py-3 rounded-xl font-black text-xs uppercase hover:bg-blue-700 transition-all shadow-lg shadow-blue-200 flex items-center gap-2",children:[s.jsx(yu,{size:16})," FILTRAR"]})]}),d?s.jsxs("div",{className:"flex flex-col items-center justify-center py-20 gap-4",children:[s.jsx(Ot,{className:"animate-spin text-blue-600",size:40}),s.jsx("p",{className:"text-xs font-black text-gray-400 uppercase tracking-widest",children:"Processando dados clínicos..."})]}):s.jsxs("div",{className:"space-y-8",children:[s.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6",children:[s.jsxs("div",{className:"bg-white p-6 rounded-2xl border border-gray-100 shadow-sm overflow-hidden relative group",children:[s.jsx("div",{className:"absolute top-0 right-0 p-4 opacity-10 group-hover:scale-110 transition-transform",children:s.jsx(Fa,{size:80,className:"text-green-600"})}),s.jsx("h4",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"RECEITA NO PERÍODO"}),s.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[s.jsxs("span",{className:"text-2xl font-black text-gray-900",children:["R$ ",h.toLocaleString("pt-BR",{minimumFractionDigits:2})]}),s.jsxs("span",{className:"text-green-500 text-[10px] font-black flex items-center",children:[s.jsx(PN,{size:12})," +2.4%"]})]}),s.jsx("div",{className:"mt-4 w-full bg-gray-50 h-1.5 rounded-full overflow-hidden",children:s.jsx("div",{className:"bg-green-500 h-full w-[70%]"})})]}),s.jsxs("div",{className:"bg-white p-6 rounded-2xl border border-gray-100 shadow-sm overflow-hidden relative group",children:[s.jsx("div",{className:"absolute top-0 right-0 p-4 opacity-10 group-hover:scale-110 transition-transform",children:s.jsx(XN,{size:80,className:"text-red-600"})}),s.jsx("h4",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"DESPESA NO PERÍODO"}),s.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[s.jsxs("span",{className:"text-2xl font-black text-gray-900",children:["R$ ",p.toLocaleString("pt-BR",{minimumFractionDigits:2})]}),s.jsxs("span",{className:"text-red-500 text-[10px] font-black flex items-center",children:[s.jsx(LN,{size:12})," -1.2%"]})]}),s.jsx("div",{className:"mt-4 w-full bg-gray-50 h-1.5 rounded-full overflow-hidden",children:s.jsx("div",{className:"bg-red-500 h-full w-[30%]"})})]}),s.jsxs("div",{className:"bg-white p-6 rounded-2xl border border-gray-100 shadow-sm overflow-hidden relative group",children:[s.jsx("div",{className:"absolute top-0 right-0 p-4 opacity-10 group-hover:scale-110 transition-transform",children:s.jsx($l,{size:80,className:"text-blue-600"})}),s.jsx("h4",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"SALDO OPERACIONAL"}),s.jsx("div",{className:"mt-2",children:s.jsxs("span",{className:`text-2xl font-black ${b>=0?"text-blue-600":"text-red-600"}`,children:["R$ ",b.toLocaleString("pt-BR",{minimumFractionDigits:2})]})}),s.jsx("p",{className:"mt-4 text-[10px] font-bold text-gray-400",children:"LIQUIDEZ ATUAL DA UNIDADE"})]}),s.jsxs("div",{className:"bg-white p-6 rounded-2xl border border-gray-100 shadow-sm overflow-hidden relative group",children:[s.jsx("div",{className:"absolute top-0 right-0 p-4 opacity-10 group-hover:scale-110 transition-transform",children:s.jsx(sa,{size:80,className:"text-purple-600"})}),s.jsx("h4",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"TRANSAÇÕES"}),s.jsx("div",{className:"mt-2",children:s.jsx("span",{className:"text-2xl font-black text-gray-900",children:((N=c==null?void 0:c.financeiro)==null?void 0:N.totalTransacoes)||0})}),s.jsx("p",{className:"mt-4 text-[10px] font-bold text-gray-400",children:"MOVIMENTAÇÕES FINANCEIRAS"})]})]}),s.jsxs("div",{className:"bg-white rounded-3xl border border-gray-100 shadow-xl overflow-hidden",children:[s.jsxs("div",{className:"px-8 py-6 bg-gradient-to-r from-gray-50 to-white border-b border-gray-100 flex justify-between items-center",children:[s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-10 h-10 bg-blue-600 rounded-xl flex items-center justify-center text-white shadow-lg shadow-blue-200",children:s.jsx(Io,{size:20})}),s.jsxs("div",{children:[s.jsx("h3",{className:"text-lg font-black text-gray-900 uppercase",children:"PRODUTIVIDADE POR DENTISTA"}),s.jsx("p",{className:"text-[10px] text-gray-400 font-bold uppercase tracking-widest",children:"DESEMPENHO CLÍNICO NO PERÍODO"})]})]}),s.jsxs("div",{className:"hidden sm:flex items-center gap-2 px-4 py-2 bg-blue-50 rounded-full",children:[s.jsx(TC,{size:16,className:"text-blue-600"}),s.jsx("span",{className:"text-[10px] font-black text-blue-600 uppercase",children:"Visão por Especialista"})]})]}),s.jsx("div",{className:"overflow-x-auto",children:s.jsxs("table",{className:"w-full text-left",children:[s.jsx("thead",{className:"bg-gray-50/50",children:s.jsxs("tr",{children:[s.jsx("th",{className:"px-8 py-5 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"ESPECIALISTA"}),s.jsx("th",{className:"px-8 py-5 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"TOTAL APPTS"}),s.jsx("th",{className:"px-8 py-5 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"EFETIVADOS"}),s.jsx("th",{className:"px-8 py-5 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"FALTAS"}),s.jsx("th",{className:"px-8 py-5 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"TAXA OCUPAÇÃO"}),s.jsx("th",{className:"px-8 py-5 text-[10px] font-black text-gray-400 uppercase tracking-widest",children:"STATUS"})]})}),s.jsx("tbody",{className:"divide-y divide-gray-100",children:((c==null?void 0:c.producao)||[]).map((j,S)=>{const R=j.totalAgendamentos>0?j.concluidos/j.totalAgendamentos*100:0;return s.jsxs("tr",{className:"hover:bg-blue-50/30 transition-colors group",children:[s.jsx("td",{className:"px-8 py-5",children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"w-8 h-8 rounded-lg bg-gray-100 flex items-center justify-center text-gray-400 font-black text-xs group-hover:bg-blue-600 group-hover:text-white transition-all",children:j.dentista.substring(0,2).toUpperCase()}),s.jsx("span",{className:"font-bold text-gray-900 uppercase text-xs",children:j.dentista})]})}),s.jsx("td",{className:"px-8 py-5 font-bold text-gray-600 text-xs",children:j.totalAgendamentos}),s.jsx("td",{className:"px-8 py-5 font-bold text-green-600 text-xs",children:j.concluidos}),s.jsx("td",{className:"px-8 py-5 font-bold text-red-500 text-xs",children:j.faltas}),s.jsx("td",{className:"px-8 py-5",children:s.jsxs("div",{className:"flex items-center gap-3 min-w-[120px]",children:[s.jsx("div",{className:"flex-1 h-2 bg-gray-100 rounded-full overflow-hidden shadow-inner",children:s.jsx("div",{className:`h-full transition-all duration-1000 ${R>70?"bg-green-500":R>40?"bg-blue-500":"bg-orange-400"}`,style:{width:`${R}%`}})}),s.jsxs("span",{className:"text-[10px] font-black text-gray-400",children:[R.toFixed(0),"%"]})]})}),s.jsx("td",{className:"px-8 py-5",children:R>75?s.jsx("span",{className:"px-2 py-1 bg-green-50 text-green-600 text-[9px] font-black rounded-lg uppercase border border-green-100",children:"Alta Performance"}):R>30?s.jsx("span",{className:"px-2 py-1 bg-blue-50 text-blue-600 text-[9px] font-black rounded-lg uppercase border border-blue-100",children:"Estável"}):s.jsx("span",{className:"px-2 py-1 bg-gray-50 text-gray-400 text-[9px] font-black rounded-lg uppercase border border-gray-100",children:"Baixa Ocupação"})})]},S)})})]})})]})]})]})},yB=()=>{const[t,e]=A.useState([]),[n,r]=A.useState(null),[i,c]=A.useState(""),[d,f]=A.useState(""),[h,p]=A.useState(!1),[b,y]=A.useState(!1),x=K.getCurrentRole(),v=K.getCurrentUserName(),N=K.getCurrentUser(),j=K.getActiveWorkspace(),S=(j==null?void 0:j.cor)||"#2563eb",R=$e(),w={Authorization:`Bearer ${localStorage.getItem("SCOREODONTO_AUTH_TOKEN")}`,"Content-Type":"application/json"},D=async()=>{try{const F=await fetch("/api/auth/google/status");e(await F.json())}catch{}},C=async()=>{try{const F=await fetch("/api/settings/google-credentials",{headers:w});F.ok&&r(await F.json())}catch{}};A.useEffect(()=>{D(),x==="admin"&&C()},[]);const I=async()=>{if(!i.trim()||!d.trim()){R.error("PREENCHA OS DOIS CAMPOS.");return}y(!0);try{const F=await fetch("/api/settings/google-credentials",{method:"POST",headers:w,body:JSON.stringify({clientId:i.trim(),clientSecret:d.trim()})});if(F.ok)R.success("CREDENCIAIS SALVAS!"),c(""),f(""),await C();else{const Y=await F.json();R.error(Y.error||"ERRO AO SALVAR.")}}catch{R.error("FALHA NA CONEXÃO.")}finally{y(!1)}},L=()=>{window.confirm("TEM CERTEZA QUE DESEJA SAIR DO SISTEMA?")&&K.logout()};return s.jsxs("div",{className:"space-y-8 max-w-2xl",children:[s.jsxs("div",{className:"flex items-end justify-between",children:[s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-black text-gray-900 uppercase tracking-tight",children:"Configurações"}),s.jsx("p",{className:"text-sm text-gray-400 font-medium mt-1",children:"Gerencie seu perfil e integrações"})]}),s.jsx("span",{className:"bg-gray-100 text-gray-400 text-[11px] font-mono font-bold px-3 py-1 rounded-full border border-gray-200 mb-1",children:Dg})]}),s.jsxs("div",{className:"bg-white rounded-2xl border border-gray-100 shadow-sm overflow-hidden",children:[s.jsx("div",{className:"px-6 py-4 border-b border-gray-50",children:s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest",children:"Perfil"})}),s.jsx("div",{className:"p-6",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-14 h-14 bg-gray-100 rounded-full flex items-center justify-center text-gray-500 border border-gray-200 flex-shrink-0",children:s.jsx(Bo,{size:24})}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("p",{className:"text-base font-black text-gray-800 uppercase truncate leading-none mb-1",children:v||"—"}),s.jsx("p",{className:"text-sm font-medium text-gray-400 truncate",children:N||"—"}),s.jsx("span",{className:"inline-block mt-2 text-[10px] font-black uppercase tracking-widest px-2 py-0.5 rounded-full",style:{backgroundColor:`${S}18`,color:S},children:x})]})]})})]}),s.jsxs("div",{className:"bg-white rounded-2xl border border-gray-100 shadow-sm overflow-hidden",children:[s.jsx("div",{className:"px-6 py-4 border-b border-gray-50",children:s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest",children:"Unidade Ativa"})}),s.jsx("div",{className:"p-6",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx("div",{className:"w-12 h-12 rounded-xl flex items-center justify-center text-white flex-shrink-0",style:{backgroundColor:S},children:s.jsx(Rg,{size:20})}),s.jsxs("div",{children:[s.jsx("p",{className:"text-sm font-black text-gray-800 uppercase",children:(j==null?void 0:j.nome)||"Sem unidade vinculada"}),(j==null?void 0:j.id)&&s.jsxs("p",{className:"text-[11px] text-gray-400 font-mono mt-0.5",children:["ID: ",j.id]})]}),s.jsx("div",{className:"ml-auto w-3 h-3 rounded-full flex-shrink-0",style:{backgroundColor:S}})]})})]}),x==="admin"&&s.jsxs("div",{className:"bg-white rounded-2xl border border-gray-100 shadow-sm overflow-hidden",children:[s.jsx("div",{className:"px-6 py-4 border-b border-gray-50",children:s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest",children:"Integrações Google"})}),s.jsxs("div",{className:"p-6 space-y-4 border-b border-gray-50",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(lv,{size:15,className:"text-gray-400"}),s.jsx("span",{className:"text-xs font-black text-gray-700 uppercase tracking-wide",children:"Credenciais OAuth 2.0"})]}),n!=null&&n.configured?s.jsxs("div",{className:"flex items-center gap-1.5 text-green-600 bg-green-50 px-3 py-1 rounded-full border border-green-100",children:[s.jsx(pa,{size:12}),s.jsx("span",{className:"text-[10px] font-black uppercase",children:n.fromEnv?"Via ENV":"Configurado"})]}):s.jsxs("div",{className:"flex items-center gap-1.5 text-amber-600 bg-amber-50 px-3 py-1 rounded-full border border-amber-100",children:[s.jsx(bu,{size:12}),s.jsx("span",{className:"text-[10px] font-black uppercase",children:"Não configurado"})]})]}),(n==null?void 0:n.configured)&&n.clientIdHint&&!n.fromEnv&&s.jsxs("div",{className:"bg-gray-50 rounded-xl px-4 py-3 border border-gray-100",children:[s.jsx("p",{className:"text-[10px] font-bold text-gray-400 uppercase mb-1",children:"Client ID atual"}),s.jsx("p",{className:"text-xs font-mono text-gray-600",children:n.clientIdHint})]}),(n==null?void 0:n.fromEnv)&&s.jsx("p",{className:"text-[11px] text-gray-400 font-medium",children:"Credenciais carregadas via variável de ambiente. Para substituir, preencha os campos abaixo."}),s.jsxs("div",{className:"space-y-3",children:[s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1.5",children:"Client ID"}),s.jsx("input",{type:"text",value:i,onChange:F=>c(F.target.value),placeholder:n!=null&&n.configured?"Deixe vazio para manter atual":"xxxxxxxxxxxx.apps.googleusercontent.com",className:"w-full border border-gray-200 rounded-xl px-4 py-2.5 text-sm font-mono focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none transition-all"})]}),s.jsxs("div",{children:[s.jsx("label",{className:"block text-[10px] font-black text-gray-500 uppercase tracking-wider mb-1.5",children:"Client Secret"}),s.jsxs("div",{className:"relative",children:[s.jsx("input",{type:h?"text":"password",value:d,onChange:F=>f(F.target.value),placeholder:n!=null&&n.configured?"Deixe vazio para manter atual":"GOCSPX-...",className:"w-full border border-gray-200 rounded-xl px-4 py-2.5 pr-10 text-sm font-mono focus:ring-2 focus:ring-blue-100 focus:border-blue-300 outline-none transition-all"}),s.jsx("button",{type:"button",onClick:()=>p(F=>!F),className:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",children:h?s.jsx(sD,{size:15}):s.jsx(lD,{size:15})})]})]}),s.jsxs("button",{onClick:I,disabled:b||!i.trim()&&!d.trim(),className:"w-full flex items-center justify-center gap-2 py-2.5 rounded-xl text-xs font-black uppercase tracking-widest transition-all disabled:opacity-40 disabled:cursor-not-allowed bg-gray-900 text-white hover:bg-gray-700",children:[b?s.jsx(Ot,{size:14,className:"animate-spin"}):s.jsx(lv,{size:14}),b?"Salvando...":"Salvar Credenciais"]})]}),s.jsxs("p",{className:"text-[10px] text-gray-400 leading-relaxed",children:["Obtenha as credenciais em"," ",s.jsx("span",{className:"font-mono text-blue-500",children:"console.cloud.google.com"})," ","→ APIs & Services → Credentials → OAuth 2.0 Client ID. Adicione"," ",s.jsx("span",{className:"font-mono text-gray-600",children:"https://scoreodonto.com/api/oauth2callback"})," ","como URI de redirecionamento autorizado."]})]}),s.jsxs("div",{className:"p-6",children:[s.jsx("p",{className:"text-[10px] font-black text-gray-400 uppercase tracking-widest mb-3",children:"Conta conectada"}),s.jsx(hu,{ownerId:"admin",isConnected:t.some(F=>F.owner_id==="admin"||F.owner_id===N),onStatusChange:D})]})]}),s.jsxs("div",{className:"bg-white rounded-2xl border border-gray-100 shadow-sm overflow-hidden",children:[s.jsx("div",{className:"px-6 py-4 border-b border-gray-50",children:s.jsx("h2",{className:"text-xs font-black text-gray-500 uppercase tracking-widest",children:"Segurança"})}),s.jsxs("div",{className:"p-6 space-y-3",children:[s.jsxs("div",{className:"flex items-center gap-3 text-green-600 bg-green-50 px-4 py-3 rounded-xl border border-green-100",children:[s.jsx(Ar,{size:16}),s.jsx("span",{className:"text-xs font-bold uppercase tracking-wide",children:"Sessão ativa e autenticada"})]}),s.jsxs("button",{onClick:L,className:"w-full flex items-center justify-center gap-2 px-4 py-3 bg-red-50 text-red-600 hover:bg-red-100 rounded-xl text-xs font-black uppercase tracking-widest transition-all border border-red-100",children:[s.jsx(FN,{size:16}),"Sair do Sistema"]})]})]})]})},vB=["TODOS","Ativo","Rascunho","Assinado","Encerrado"],NB={Ativo:"bg-green-100 text-green-700",Rascunho:"bg-amber-100 text-amber-700",Assinado:"bg-blue-100 text-blue-700",Encerrado:"bg-gray-100 text-gray-600"},EB=t=>t.toLocaleString("pt-BR",{style:"currency",currency:"BRL"}),jB=()=>{const t=$e(),{data:e,isLoading:n,refresh:r}=Ie(K.getContratos),i=e??[],[c,d]=A.useState(""),[f,h]=A.useState("TODOS"),[p,b]=A.useState(!1),[y,x]=A.useState(null),[v,N]=A.useState(null),j=i.filter(I=>{const L=!c.trim()||I.pacienteNome.toLowerCase().includes(c.toLowerCase())||I.titulo.toLowerCase().includes(c.toLowerCase()),F=f==="TODOS"||I.status===f;return L&&F}),S={total:i.length,ativos:i.filter(I=>I.status==="Ativo").length,rascunhos:i.filter(I=>I.status==="Rascunho").length,encerrados:i.filter(I=>I.status==="Encerrado"||I.status==="Assinado").length},R=async(I,L)=>{if(confirm(`EXCLUIR o contrato de ${L}?`))try{await K.deleteContrato(I),t.success("CONTRATO EXCLUÍDO."),r()}catch{t.error("ERRO AO EXCLUIR CONTRATO.")}},w=()=>{x(null),b(!0)},D=I=>{x(I),b(!0)},C=I=>{N(I),b(!0)};return s.jsxs("div",{className:"h-full flex flex-col",children:[s.jsx(fn,{title:"CONTRATOS",description:"Gestão de contratos de serviços odontológicos",children:s.jsxs("button",{onClick:w,className:"bg-indigo-600 hover:bg-indigo-700 text-white px-4 py-2 rounded-lg flex items-center gap-2 transition-colors uppercase font-bold text-sm shadow-sm",children:[s.jsx(gt,{size:18})," NOVO CONTRATO"]})}),s.jsx("div",{className:"grid grid-cols-4 gap-3 mb-4",children:[{label:"Total",value:S.total,color:"bg-indigo-50 text-indigo-700"},{label:"Ativos",value:S.ativos,color:"bg-green-50 text-green-700"},{label:"Rascunhos",value:S.rascunhos,color:"bg-amber-50 text-amber-700"},{label:"Encerrados/Assinados",value:S.encerrados,color:"bg-gray-50 text-gray-600"}].map(I=>s.jsxs("div",{className:`${I.color} rounded-xl p-3 text-center`,children:[s.jsx("p",{className:"text-2xl font-black",children:I.value}),s.jsx("p",{className:"text-[10px] font-bold uppercase opacity-70",children:I.label})]},I.label))}),s.jsxs("div",{className:"flex flex-col sm:flex-row gap-3 mb-4",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(Qn,{className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 pointer-events-none",size:16}),s.jsx("input",{type:"text",placeholder:"Buscar por paciente ou título...",className:"w-full pl-9 pr-3 py-2 border border-gray-200 rounded-lg text-sm focus:ring-2 focus:ring-indigo-100 focus:border-indigo-300 outline-none bg-white",value:c,onChange:I=>d(I.target.value)})]}),s.jsx("div",{className:"flex items-center gap-1 bg-gray-100 rounded-lg p-1 overflow-x-auto",children:vB.map(I=>s.jsx("button",{onClick:()=>h(I),className:`px-2.5 py-1 rounded-md text-[11px] font-bold transition-all whitespace-nowrap ${f===I?"bg-white text-gray-800 shadow-sm":"text-gray-500 hover:text-gray-700"}`,children:I},I))})]}),n&&s.jsx("div",{className:"flex-1 flex items-center justify-center",children:s.jsx(Ot,{className:"animate-spin text-indigo-400",size:32})}),!n&&j.length===0&&s.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center text-gray-400 py-20",children:[s.jsx(Ba,{size:48,className:"mb-4 opacity-30"}),s.jsx("p",{className:"text-sm font-bold uppercase",children:"Nenhum contrato encontrado"}),s.jsx("p",{className:"text-xs mt-1",children:c||f!=="TODOS"?"Tente limpar os filtros.":'Clique em "NOVO CONTRATO" para começar.'}),!c&&f==="TODOS"&&s.jsxs("button",{onClick:w,className:"mt-4 flex items-center gap-2 px-4 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg text-sm font-bold transition-colors",children:[s.jsx(gt,{size:16})," Criar Primeiro Contrato"]})]}),!n&&j.length>0&&s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4 overflow-y-auto pb-6",children:j.map(I=>{var L;return s.jsxs("div",{className:"bg-white rounded-xl border border-gray-200 shadow-sm hover:shadow-md transition-all duration-200 flex flex-col",children:[s.jsxs("div",{className:"p-4 flex-1",children:[s.jsxs("div",{className:"flex items-start justify-between gap-2 mb-2",children:[s.jsx("h3",{className:"font-black text-gray-800 text-sm uppercase leading-tight flex-1",children:I.pacienteNome}),s.jsx("span",{className:`text-[9px] font-black px-2 py-0.5 rounded-full uppercase flex-shrink-0 ${NB[I.status]||"bg-gray-100 text-gray-600"}`,children:I.status})]}),s.jsx("p",{className:"text-[11px] text-gray-500 font-medium uppercase truncate mb-2",children:I.titulo}),s.jsxs("div",{className:"flex flex-wrap gap-1 mb-3",children:[I.especialidadeNome&&s.jsx("span",{className:"bg-indigo-50 text-indigo-600 text-[9px] font-bold px-2 py-0.5 rounded-full uppercase",children:I.especialidadeNome}),I.dentistaNome&&s.jsx("span",{className:"bg-gray-50 text-gray-500 text-[9px] font-bold px-2 py-0.5 rounded-full uppercase",children:I.dentistaNome})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-2 text-[10px]",children:[s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 font-bold uppercase block",children:"Valor Total"}),s.jsx("span",{className:"font-black text-indigo-700 text-sm",children:EB(I.valorTotal)})]}),s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 font-bold uppercase block",children:"Itens"}),s.jsxs("span",{className:"font-bold text-gray-700",children:[((L=I.items)==null?void 0:L.length)??0," proc."]})]}),I.dataInicio&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 font-bold uppercase block",children:"Início"}),s.jsx("span",{className:"font-bold text-gray-700",children:new Date(I.dataInicio+"T12:00").toLocaleDateString("pt-BR")})]}),I.dataFim&&s.jsxs("div",{children:[s.jsx("span",{className:"text-gray-400 font-bold uppercase block",children:"Fim"}),s.jsx("span",{className:"font-bold text-gray-700",children:new Date(I.dataFim+"T12:00").toLocaleDateString("pt-BR")})]})]})]}),s.jsxs("div",{className:"flex border-t border-gray-100",children:[s.jsxs("button",{onClick:()=>D(I),className:"flex-1 flex items-center justify-center gap-1.5 py-2 text-indigo-600 hover:bg-indigo-50 rounded-bl-xl text-[10px] font-bold transition-colors uppercase",children:[s.jsx(zo,{size:12})," Editar"]}),s.jsx("div",{className:"border-l border-gray-100"}),s.jsxs("button",{onClick:()=>C(I),className:"flex-1 flex items-center justify-center gap-1.5 py-2 text-gray-600 hover:bg-gray-50 text-[10px] font-bold transition-colors uppercase",children:[s.jsx(Ya,{size:12})," Imprimir"]}),s.jsx("div",{className:"border-l border-gray-100"}),s.jsxs("button",{onClick:()=>R(I.id,I.pacienteNome),className:"flex-1 flex items-center justify-center gap-1.5 py-2 text-red-500 hover:bg-red-50 rounded-br-xl text-[10px] font-bold transition-colors uppercase",children:[s.jsx(Qt,{size:12})," Excluir"]})]})]},I.id)})}),p&&s.jsx(oj,{contrato:y,onClose:()=>{b(!1),x(null),N(null)},onSaved:r})]})},SB={"/":"landing","/dashboard":"dashboard","/landing":"landing","/leads":"leads","/contato":"public","/pacientes":"pacientes","/agenda":"agenda","/ortodontia":"ortodontia","/financeiro":"financeiro","/login":"login","/update":"update","/clinicas":"clinicas","/admin/dentistas":"dentistas","/admin/especialidades":"especialidades","/admin/procedimentos":"procedimentos","/admin/planos":"planos","/admin/sync":"sync","/tratamentos":"tratamentos","/lancar-gto":"lancar-gto","/notificacoes":"notificacoes","/relatorios":"relatorios","/cadastro-dentista":"cadastro-dentista","/configuracoes":"configuracoes","/contratos":"contratos"},AB={landing:"/",dashboard:"/dashboard",leads:"/leads",public:"/contato",pacientes:"/pacientes",agenda:"/agenda",ortodontia:"/ortodontia",financeiro:"/financeiro",login:"/login",update:"/update",clinicas:"/clinicas",dentistas:"/admin/dentistas",especialidades:"/admin/especialidades",procedimentos:"/admin/procedimentos",planos:"/admin/planos",tratamentos:"/tratamentos","lancar-gto":"/lancar-gto",notificacoes:"/notificacoes",relatorios:"/relatorios",sync:"/admin/sync","cadastro-dentista":"/cadastro-dentista",configuracoes:"/configuracoes",contratos:"/contratos"};function NN(){const t=window.location.pathname||"/";return SB[t]??"dashboard"}function lo(t){const e=AB[t];history.pushState({},"",e)}const wB=()=>{const[t,e]=A.useState(!1);K.getCurrentRole();const n=K.getActiveWorkspace(),r=(n==null?void 0:n.cor)||"#2563eb",i=(x,v)=>{var j;return["landing","login","public","update"].includes(x)||v==="admin"||v==="donoclinica"?!0:((j={paciente:["tratamentos","notificacoes","configuracoes"],dentista:["dashboard","pacientes","agenda","ortodontia","tratamentos","lancar-gto","notificacoes","clinicas","configuracoes","contratos"],funcionario:["dashboard","leads","pacientes","agenda","financeiro","tratamentos","lancar-gto","relatorios","notificacoes","clinicas","configuracoes","contratos"]}[v])==null?void 0:j.includes(x))||!1},c=x=>x==="paciente"?"tratamentos":"dashboard",d=()=>{const x=NN(),v=K.getCurrentRole();return K.isAuthenticated()&&["landing","login"].includes(x)?c(v):!["landing","login","public"].includes(x)&&!K.isAuthenticated()?"landing":K.isAuthenticated()&&!i(x,v)?c(v):x},[f,h]=A.useState(d),p=x=>{const v=K.getCurrentRole();i(x,v)&&(h(x),lo(x),e(!1))};A.useEffect(()=>{const x=()=>{const v=NN(),N=K.getCurrentRole();if(!["landing","login","public"].includes(v)&&!K.isAuthenticated()){h("landing"),lo("landing");return}if(K.isAuthenticated()&&!i(v,N)){const S=c(N);h(S),lo(S);return}h(v)};return window.addEventListener("popstate",x),()=>window.removeEventListener("popstate",x)},[]),A.useEffect(()=>{document.documentElement.style.setProperty("--brand-color",r),document.documentElement.style.setProperty("--brand-color-soft",`${r}11`)},[r]),A.useEffect(()=>{lo(f)},[]);const b=()=>{switch(f){case"landing":return s.jsx(rB,{onGetStarted:()=>p("login")});case"dashboard":return s.jsx(FO,{});case"leads":return s.jsx(YO,{});case"public":return s.jsx(QO,{});case"pacientes":return s.jsx(GM,{});case"agenda":return s.jsx(RP,{onNavigate:p});case"ortodontia":return s.jsx(qP,{});case"financeiro":return s.jsx(QP,{});case"dentistas":return s.jsx(dB,{});case"especialidades":return s.jsx(uB,{});case"procedimentos":return s.jsx(fB,{});case"planos":return s.jsx(hB,{});case"sync":return s.jsx(gB,{});case"tratamentos":return s.jsx(aB,{});case"lancar-gto":return s.jsx(EM,{});case"update":return s.jsx(lB,{});case"clinicas":return s.jsx(iB,{});case"notificacoes":return s.jsx(mB,{});case"relatorios":return s.jsx(bB,{});case"cadastro-dentista":return s.jsx(oB,{});case"configuracoes":return s.jsx(yB,{});case"contratos":return s.jsx(jB,{});case"login":default:return s.jsx(sB,{onLoginSuccess:()=>{const x=K.getCurrentRole(),v=c(x);h(v),lo(v)}})}},y=["landing","login","public","update","cadastro-dentista"].includes(f);return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex h-screen bg-gray-50 text-gray-800 overflow-hidden relative",children:[s.jsx("style",{children:` - :root { --brand-color: ${r}; } - .bg-brand { background-color: var(--brand-color); } - .text-brand { color: var(--brand-color); } - .border-brand { border-color: var(--brand-color); } - .hover\\:bg-brand:hover { background-color: var(--brand-color); } - .focus\\:ring-brand:focus { --tw-ring-color: var(--brand-color); } - `}),!y&&s.jsxs(s.Fragment,{children:[t&&s.jsx("div",{className:"fixed inset-0 bg-black/50 z-20 md:hidden backdrop-blur-sm transition-opacity",onClick:()=>e(!1)}),s.jsx("div",{className:`fixed inset-y-0 left-0 z-30 transform transition-transform duration-300 md:relative md:translate-x-0 ${t?"translate-x-0":"-translate-x-full"}`,children:s.jsx(LO,{activeTab:f,setActiveTab:x=>p(x)})})]}),s.jsxs("main",{className:"flex-1 h-full relative flex flex-col min-w-0",children:[!y&&s.jsx(s.Fragment,{children:s.jsxs("div",{className:"md:hidden flex items-center justify-between px-4 py-3 bg-white border-b border-gray-200",children:[s.jsx("button",{onClick:()=>e(!0),className:"p-2 text-gray-600 hover:bg-gray-100 rounded-lg transition-colors",children:s.jsx($N,{size:24})}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("div",{className:"w-8 h-8 rounded flex items-center justify-center text-white font-bold text-sm shadow-sm",style:{backgroundColor:r},children:"S"}),s.jsx("span",{className:"font-bold text-gray-800 text-sm tracking-tight uppercase",children:"SCOREODONTO"})]}),s.jsx("div",{className:"w-8"})]})}),s.jsx("div",{className:"flex-1 overflow-y-auto p-4 md:p-8 pb-20 scroll-smooth",children:s.jsx("div",{className:"max-w-7xl mx-auto h-full",children:b()})})]})]}),s.jsx(HO,{})]})};class CB extends qe.Component{constructor(e){super(e),this.handleReload=()=>{window.location.reload()},this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e,errorInfo:null}}componentDidCatch(e,n){console.error("Uncaught error:",e,n),this.setState({errorInfo:n})}render(){var e;return this.state.hasError?s.jsx("div",{className:"min-h-screen bg-red-50 flex items-center justify-center p-6 font-sans",children:s.jsxs("div",{className:"max-w-3xl w-full bg-white rounded-2xl shadow-2xl overflow-hidden border border-red-100",children:[s.jsxs("div",{className:"bg-red-600 p-6 flex items-center gap-4",children:[s.jsx("div",{className:"bg-white/20 p-3 rounded-full text-white",children:s.jsx(GC,{size:32})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-2xl font-bold text-white uppercase",children:"ERRO CRÍTICO NO SISTEMA"}),s.jsx("p",{className:"text-red-100 text-xs font-bold uppercase mt-1",children:"O APLICATIVO ENCONTROU UM PROBLEMA INESPERADO"})]})]}),s.jsxs("div",{className:"p-8",children:[s.jsxs("div",{className:"mb-6",children:[s.jsx("p",{className:"text-gray-700 font-bold uppercase mb-2",children:"O QUE ACONTECEU?"}),s.jsx("p",{className:"text-gray-600 text-sm",children:"Ocorreu uma falha durante a renderização da interface. Tente recarregar a página. Se o problema persistir, envie o log abaixo para o suporte técnico."})]}),this.state.error&&s.jsxs("div",{className:"bg-gray-900 rounded-lg p-4 mb-6 overflow-x-auto border-l-4 border-red-500",children:[s.jsxs("div",{className:"flex items-center gap-2 text-red-400 font-bold text-xs uppercase mb-2",children:[s.jsx(Ig,{size:14})," Stack Trace / Log Técnico"]}),s.jsxs("pre",{className:"text-green-400 font-mono text-xs leading-relaxed whitespace-pre-wrap break-words",children:[this.state.error.toString(),s.jsx("br",{}),(e=this.state.errorInfo)==null?void 0:e.componentStack]})]}),s.jsxs("div",{className:"flex gap-4",children:[s.jsxs("button",{onClick:this.handleReload,className:"bg-red-600 hover:bg-red-700 text-white px-6 py-3 rounded-lg font-bold uppercase flex items-center gap-2 transition-colors shadow-lg",children:[s.jsx(vu,{size:18})," RECARREGAR SISTEMA"]}),s.jsx("button",{onClick:()=>{localStorage.clear(),window.location.reload()},className:"bg-gray-200 hover:bg-gray-300 text-gray-700 px-6 py-3 rounded-lg font-bold uppercase flex items-center gap-2 transition-colors",children:"LIMPAR CACHE E REINICIAR"})]})]})]})}):this.props.children}}const DB=new vU,EN=document.getElementById("root");if(EN)nC.createRoot(EN).render(s.jsx(qe.StrictMode,{children:s.jsx(EU,{client:DB,children:s.jsx(CB,{children:s.jsx(PO,{children:s.jsx(wB,{})})})})}));else{console.error("CRITICAL: Root element #root not found. App could not be mounted.");const t=document.getElementById("global-error-display");t&&(t.style.display="block",t.innerText="ERRO CRÍTICO: O ELEMENTO #ROOT NÃO FOI ENCONTRADO NO HTML.")} diff --git a/frontend/dist/assets/index-ogxPFC13.js b/frontend/dist/assets/index-ogxPFC13.js new file mode 100644 index 0000000..7f0680c --- /dev/null +++ b/frontend/dist/assets/index-ogxPFC13.js @@ -0,0 +1,1200 @@ +var Pj=t=>{throw TypeError(t)};var Iv=(t,e,r)=>e.has(t)||Pj("Cannot "+r);var X=(t,e,r)=>(Iv(t,e,"read from private field"),r?r.call(t):e.get(t)),qe=(t,e,r)=>e.has(t)?Pj("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),Oe=(t,e,r,s)=>(Iv(t,e,"write to private field"),s?s.call(t,r):e.set(t,r),r),Nt=(t,e,r)=>(Iv(t,e,"access private method"),r);var yb=(t,e,r,s)=>({set _(o){Oe(t,e,o,r)},get _(){return X(t,e,s)}});(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const u of o)if(u.type==="childList")for(const c of u.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&s(c)}).observe(document,{childList:!0,subtree:!0});function r(o){const u={};return o.integrity&&(u.integrity=o.integrity),o.referrerPolicy&&(u.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?u.credentials="include":o.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function s(o){if(o.ep)return;o.ep=!0;const u=r(o);fetch(o.href,u)}})();var sJ=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function IO(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var _v={exports:{}},Db={},Lv={exports:{}},bm={exports:{}};bm.exports;var Ij;function OP(){return Ij||(Ij=1,(function(t,e){/** + * @license React + * react.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */(function(){function r(T,K){Object.defineProperty(u.prototype,T,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",K[0],K[1])}})}function s(T){return T===null||typeof T!="object"?null:(T=xe&&T[xe]||T["@@iterator"],typeof T=="function"?T:null)}function o(T,K){T=(T=T.constructor)&&(T.displayName||T.name)||"ReactClass";var we=T+"."+K;ne[we]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",K,T),ne[we]=!0)}function u(T,K,we){this.props=T,this.context=K,this.refs=Te,this.updater=we||pe}function c(){}function f(T,K,we){this.props=T,this.context=K,this.refs=Te,this.updater=we||pe}function p(){}function x(T){return""+T}function h(T){try{x(T);var K=!1}catch{K=!0}if(K){K=console;var we=K.error,Ve=typeof Symbol=="function"&&Symbol.toStringTag&&T[Symbol.toStringTag]||T.constructor.name||"Object";return we.call(K,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",Ve),x(T)}}function v(T){if(T==null)return null;if(typeof T=="function")return T.$$typeof===ex?null:T.displayName||T.name||null;if(typeof T=="string")return T;switch(T){case _:return"Fragment";case Ee:return"Profiler";case de:return"StrictMode";case Ie:return"Suspense";case Se:return"SuspenseList";case De:return"Activity"}if(typeof T=="object")switch(typeof T.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),T.$$typeof){case J:return"Portal";case Fe:return T.displayName||"Context";case se:return(T._context.displayName||"Context")+".Consumer";case Et:var K=T.render;return T=T.displayName,T||(T=K.displayName||K.name||"",T=T!==""?"ForwardRef("+T+")":"ForwardRef"),T;case He:return K=T.displayName||null,K!==null?K:v(T.type)||"Memo";case ot:K=T._payload,T=T._init;try{return v(T(K))}catch{}}return null}function N(T){if(T===_)return"<>";if(typeof T=="object"&&T!==null&&T.$$typeof===ot)return"<...>";try{var K=v(T);return K?"<"+K+">":"<...>"}catch{return"<...>"}}function g(){var T=Me.A;return T===null?null:T.getOwner()}function y(){return Error("react-stack-top-frame")}function V(T){if(Io.call(T,"key")){var K=Object.getOwnPropertyDescriptor(T,"key").get;if(K&&K.isReactWarning)return!1}return T.key!==void 0}function A(T,K){function we(){ml||(ml=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",K))}we.isReactWarning=!0,Object.defineProperty(T,"key",{get:we,configurable:!0})}function j(){var T=v(this.type);return lf[T]||(lf[T]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),T=this.props.ref,T!==void 0?T:null}function C(T,K,we,Ve,ke,Je){var _e=we.ref;return T={$$typeof:te,type:T,key:K,props:we,_owner:Ve},(_e!==void 0?_e:null)!==null?Object.defineProperty(T,"ref",{enumerable:!1,get:j}):Object.defineProperty(T,"ref",{enumerable:!1,value:null}),T._store={},Object.defineProperty(T._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(T,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(T,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:ke}),Object.defineProperty(T,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Je}),Object.freeze&&(Object.freeze(T.props),Object.freeze(T)),T}function O(T,K){return K=C(T.type,K,T.props,T._owner,T._debugStack,T._debugTask),T._store&&(K._store.validated=T._store.validated),K}function M(T){I(T)?T._store&&(T._store.validated=1):typeof T=="object"&&T!==null&&T.$$typeof===ot&&(T._payload.status==="fulfilled"?I(T._payload.value)&&T._payload.value._store&&(T._payload.value._store.validated=1):T._store&&(T._store.validated=1))}function I(T){return typeof T=="object"&&T!==null&&T.$$typeof===te}function k(T){var K={"=":"=0",":":"=2"};return"$"+T.replace(/[=:]/g,function(we){return K[we]})}function Q(T,K){return typeof T=="object"&&T!==null&&T.key!=null?(h(T.key),k(""+T.key)):K.toString(36)}function z(T){switch(T.status){case"fulfilled":return T.value;case"rejected":throw T.reason;default:switch(typeof T.status=="string"?T.then(p,p):(T.status="pending",T.then(function(K){T.status==="pending"&&(T.status="fulfilled",T.value=K)},function(K){T.status==="pending"&&(T.status="rejected",T.reason=K)})),T.status){case"fulfilled":return T.value;case"rejected":throw T.reason}}throw T}function L(T,K,we,Ve,ke){var Je=typeof T;(Je==="undefined"||Je==="boolean")&&(T=null);var _e=!1;if(T===null)_e=!0;else switch(Je){case"bigint":case"string":case"number":_e=!0;break;case"object":switch(T.$$typeof){case te:case J:_e=!0;break;case ot:return _e=T._init,L(_e(T._payload),K,we,Ve,ke)}}if(_e){_e=T,ke=ke(_e);var xt=Ve===""?"."+Q(_e,0):Ve;return cr(ke)?(we="",xt!=null&&(we=xt.replace(of,"$&/")+"/"),L(ke,K,we,"",function(Hn){return Hn})):ke!=null&&(I(ke)&&(ke.key!=null&&(_e&&_e.key===ke.key||h(ke.key)),we=O(ke,we+(ke.key==null||_e&&_e.key===ke.key?"":(""+ke.key).replace(of,"$&/")+"/")+xt),Ve!==""&&_e!=null&&I(_e)&&_e.key==null&&_e._store&&!_e._store.validated&&(we._store.validated=2),ke=we),K.push(ke)),1}if(_e=0,xt=Ve===""?".":Ve+":",cr(T))for(var Ke=0;Ke import('./MyComponent')) + +Did you accidentally put curly braces around the import?`,K),"default"in K||console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s + +Your code should look like: + const MyComponent = lazy(() => import('./MyComponent'))`,K),K.default;throw T._result}function ee(){var T=Me.H;return T===null&&console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: +1. You might have mismatching versions of React and the renderer (such as React DOM) +2. You might be breaking the Rules of Hooks +3. You might have more than one copy of React in the same app +See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),T}function G(){Me.asyncTransitions--}function fe(T){if(fl===null)try{var K=("require"+Math.random()).slice(0,7);fl=(t&&t[K]).call(t,"timers").setImmediate}catch{fl=function(Ve){Cd===!1&&(Cd=!0,typeof MessageChannel>"u"&&console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var ke=new MessageChannel;ke.port1.onmessage=Ve,ke.port2.postMessage(void 0)}}return fl(T)}function be(T){return 1 ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),{then:function(Ke,Hn){ke=!0,_e.then(function(ja){if(oe(K,we),we===0){try{ye(Ve),fe(function(){return me(ja,Ke,Hn)})}catch(zo){Me.thrownErrors.push(zo)}if(0 ...)"))}),Me.actQueue=null),0Me.recentlyCreatedOwnerStacks++;return C(T,ke,Ve,g(),Ke?Error("react-stack-top-frame"):Ad,Ke?Sa(N(T)):Sd)},e.createRef=function(){var T={current:null};return Object.seal(T),T},e.forwardRef=function(T){T!=null&&T.$$typeof===He?console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof T!="function"?console.error("forwardRef requires a render function but was given %s.",T===null?"null":typeof T):T.length!==0&&T.length!==2&&console.error("forwardRef render functions accept exactly two parameters: props and ref. %s",T.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),T!=null&&T.defaultProps!=null&&console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");var K={$$typeof:Et,render:T},we;return Object.defineProperty(K,"displayName",{enumerable:!1,configurable:!0,get:function(){return we},set:function(Ve){we=Ve,T.name||T.displayName||(Object.defineProperty(T,"name",{value:Ve}),T.displayName=Ve)}}),K},e.isValidElement=I,e.lazy=function(T){T={_status:-1,_result:T};var K={$$typeof:ot,_payload:T,_init:Z},we={name:"lazy",start:-1,end:-1,value:null,owner:null,debugStack:Error("react-stack-top-frame"),debugTask:console.createTask?console.createTask("lazy()"):null};return T._ioInfo=we,K._debugInfo=[{awaited:we}],K},e.memo=function(T,K){T==null&&console.error("memo: The first argument must be a component. Instead received: %s",T===null?"null":typeof T),K={$$typeof:He,type:T,compare:K===void 0?null:K};var we;return Object.defineProperty(K,"displayName",{enumerable:!1,configurable:!0,get:function(){return we},set:function(Ve){we=Ve,T.name||T.displayName||(Object.defineProperty(T,"name",{value:Ve}),T.displayName=Ve)}}),K},e.startTransition=function(T){var K=Me.T,we={};we._updatedFibers=new Set,Me.T=we;try{var Ve=T(),ke=Me.S;ke!==null&&ke(we,Ve),typeof Ve=="object"&&Ve!==null&&typeof Ve.then=="function"&&(Me.asyncTransitions++,Ve.then(G,G),Ve.then(p,jd))}catch(Je){jd(Je)}finally{K===null&&we._updatedFibers&&(T=we._updatedFibers.size,we._updatedFibers.clear(),10";if(typeof _=="object"&&_!==null&&_.$$typeof===L)return"<...>";try{var de=t(_);return de?"<"+de+">":"<...>"}catch{return"<...>"}}function o(){var _=ee.A;return _===null?null:_.getOwner()}function u(){return Error("react-stack-top-frame")}function c(_){if(G.call(_,"key")){var de=Object.getOwnPropertyDescriptor(_,"key").get;if(de&&de.isReactWarning)return!1}return _.key!==void 0}function f(_,de){function Ee(){oe||(oe=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",de))}Ee.isReactWarning=!0,Object.defineProperty(_,"key",{get:Ee,configurable:!0})}function p(){var _=t(this.type);return me[_]||(me[_]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),_=this.props.ref,_!==void 0?_:null}function x(_,de,Ee,se,Fe,Et){var Ie=Ee.ref;return _={$$typeof:y,type:_,key:de,props:Ee,_owner:se},(Ie!==void 0?Ie:null)!==null?Object.defineProperty(_,"ref",{enumerable:!1,get:p}):Object.defineProperty(_,"ref",{enumerable:!1,value:null}),_._store={},Object.defineProperty(_._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(_,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(_,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:Fe}),Object.defineProperty(_,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Et}),Object.freeze&&(Object.freeze(_.props),Object.freeze(_)),_}function h(_,de,Ee,se,Fe,Et){var Ie=de.children;if(Ie!==void 0)if(se)if(fe(Ie)){for(se=0;se +React keys must be passed directly to JSX without using spread: + let props = %s; + <%s key={someKey} {...props} />`,se,Ie,Se,Ie),J[Ie+se]=!0)}if(Ie=null,Ee!==void 0&&(r(Ee),Ie=""+Ee),c(de)&&(r(de.key),Ie=""+de.key),"key"in de){Ee={};for(var He in de)He!=="key"&&(Ee[He]=de[He])}else Ee=de;return Ie&&f(Ee,typeof _=="function"?_.displayName||_.name||"Unknown":_),x(_,Ie,Ee,o(),Fe,Et)}function v(_){N(_)?_._store&&(_._store.validated=1):typeof _=="object"&&_!==null&&_.$$typeof===L&&(_._payload.status==="fulfilled"?N(_._payload.value)&&_._payload.value._store&&(_._payload.value._store.validated=1):_._store&&(_._store.validated=1))}function N(_){return typeof _=="object"&&_!==null&&_.$$typeof===y}var g=pd(),y=Symbol.for("react.transitional.element"),V=Symbol.for("react.portal"),A=Symbol.for("react.fragment"),j=Symbol.for("react.strict_mode"),C=Symbol.for("react.profiler"),O=Symbol.for("react.consumer"),M=Symbol.for("react.context"),I=Symbol.for("react.forward_ref"),k=Symbol.for("react.suspense"),Q=Symbol.for("react.suspense_list"),z=Symbol.for("react.memo"),L=Symbol.for("react.lazy"),P=Symbol.for("react.activity"),Z=Symbol.for("react.client.reference"),ee=g.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,G=Object.prototype.hasOwnProperty,fe=Array.isArray,be=console.createTask?console.createTask:function(){return null};g={react_stack_bottom_frame:function(_){return _()}};var oe,me={},ye=g.react_stack_bottom_frame.bind(g,u)(),te=be(s(u)),J={};Db.Fragment=A,Db.jsxDEV=function(_,de,Ee,se){var Fe=1e4>ee.recentlyCreatedOwnerStacks++;return h(_,de,Ee,se,Fe?Error("react-stack-top-frame"):ye,Fe?be(s(_)):te)}})(),Db}var zj;function TP(){return zj||(zj=1,_v.exports=RP()),_v.exports}var i=TP(),D=pd();const pt=IO(D);var zv={exports:{}},rm={},Uv={exports:{}},Gv={},Uj;function MP(){return Uj||(Uj=1,(function(t){/** + * @license React + * scheduler.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */(function(){function e(){if(I=!1,L){var oe=t.unstable_now();ee=oe;var me=!0;try{e:{O=!1,M&&(M=!1,Q(P),P=-1),C=!0;var ye=j;try{t:{for(c(oe),A=s(g);A!==null&&!(A.expirationTime>oe&&p());){var te=A.callback;if(typeof te=="function"){A.callback=null,j=A.priorityLevel;var J=te(A.expirationTime<=oe);if(oe=t.unstable_now(),typeof J=="function"){A.callback=J,c(oe),me=!0;break t}A===s(g)&&o(g),c(oe)}else o(g);A=s(g)}if(A!==null)me=!0;else{var _=s(y);_!==null&&x(f,_.startTime-oe),me=!1}}break e}finally{A=null,j=ye,C=!1}me=void 0}}finally{me?G():L=!1}}}function r(oe,me){var ye=oe.length;oe.push(me);e:for(;0>>1,J=oe[te];if(0>>1;te<_;){var de=2*(te+1)-1,Ee=oe[de],se=de+1,Fe=oe[se];if(0>u(Ee,ye))seu(Fe,Ee)?(oe[te]=Fe,oe[se]=ye,te=se):(oe[te]=Ee,oe[de]=ye,te=de);else if(seu(Fe,ye))oe[te]=Fe,oe[se]=ye,te=se;else break e}}return me}function u(oe,me){var ye=oe.sortIndex-me.sortIndex;return ye!==0?ye:oe.id-me.id}function c(oe){for(var me=s(y);me!==null;){if(me.callback===null)o(y);else if(me.startTime<=oe)o(y),me.sortIndex=me.expirationTime,r(g,me);else break;me=s(y)}}function f(oe){if(M=!1,c(oe),!O)if(s(g)!==null)O=!0,L||(L=!0,G());else{var me=s(y);me!==null&&x(f,me.startTime-oe)}}function p(){return I?!0:!(t.unstable_now()-eeoe||125te?(oe.sortIndex=ye,r(y,oe),s(g)===null&&oe===s(y)&&(M?(Q(P),P=-1):M=!0,x(f,ye-te))):(oe.sortIndex=J,r(g,oe),O||C||(O=!0,L||(L=!0,G()))),oe},t.unstable_shouldYield=p,t.unstable_wrapCallback=function(oe){var me=j;return function(){var ye=j;j=me;try{return oe.apply(this,arguments)}finally{j=ye}}},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()})(Gv)),Gv}var Gj;function kP(){return Gj||(Gj=1,Uv.exports=MP()),Uv.exports}var Bv={exports:{}},Un={},Bj;function PP(){if(Bj)return Un;Bj=1;/** + * @license React + * react-dom.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */return(function(){function t(){}function e(v){return""+v}function r(v,N,g){var y=3` tag.%s',g),typeof v=="string"&&typeof N=="object"&&N!==null&&typeof N.as=="string"){g=N.as;var y=s(g,N.crossOrigin);p.d.L(v,g,{crossOrigin:y,integrity:typeof N.integrity=="string"?N.integrity:void 0,nonce:typeof N.nonce=="string"?N.nonce:void 0,type:typeof N.type=="string"?N.type:void 0,fetchPriority:typeof N.fetchPriority=="string"?N.fetchPriority:void 0,referrerPolicy:typeof N.referrerPolicy=="string"?N.referrerPolicy:void 0,imageSrcSet:typeof N.imageSrcSet=="string"?N.imageSrcSet:void 0,imageSizes:typeof N.imageSizes=="string"?N.imageSizes:void 0,media:typeof N.media=="string"?N.media:void 0})}},Un.preloadModule=function(v,N){var g="";typeof v=="string"&&v||(g+=" The `href` argument encountered was "+o(v)+"."),N!==void 0&&typeof N!="object"?g+=" The `options` argument encountered was "+o(N)+".":N&&"as"in N&&typeof N.as!="string"&&(g+=" The `as` option encountered was "+o(N.as)+"."),g&&console.error('ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `` tag.%s',g),typeof v=="string"&&(N?(g=s(N.as,N.crossOrigin),p.d.m(v,{as:typeof N.as=="string"&&N.as!=="script"?N.as:void 0,crossOrigin:g,integrity:typeof N.integrity=="string"?N.integrity:void 0})):p.d.m(v))},Un.requestFormReset=function(v){p.d.r(v)},Un.unstable_batchedUpdates=function(v,N){return v(N)},Un.useFormState=function(v,N,g){return c().useFormState(v,N,g)},Un.useFormStatus=function(){return c().useHostTransitionStatus()},Un.version="19.2.6",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop=="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})(),Un}var Fj;function _O(){return Fj||(Fj=1,Bv.exports=PP()),Bv.exports}var Hj;function IP(){if(Hj)return rm;Hj=1;/** + * @license React + * react-dom-client.development.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */return(function(){function t(n,a){for(n=n.memoizedState;n!==null&&0=a.length)return d;var m=a[l],b=xn(n)?n.slice():lt({},n);return b[m]=e(n[m],a,l+1,d),b}function r(n,a,l){if(a.length!==l.length)console.warn("copyWithRename() expects paths of the same length");else{for(var d=0;dwr?console.error("Unexpected pop."):(a!==ph[wr]&&console.error("Unexpected Fiber popped."),n.current=fh[wr],fh[wr]=null,ph[wr]=null,wr--)}function G(n,a,l){wr++,fh[wr]=n.current,ph[wr]=l,n.current=a}function fe(n){return n===null&&console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."),n}function be(n,a){G(ps,a,n),G(cc,n,n),G(fs,null,n);var l=a.nodeType;switch(l){case 9:case 11:l=l===9?"#document":"#fragment",a=(a=a.documentElement)&&(a=a.namespaceURI)?hV(a):Ir;break;default:if(l=a.tagName,a=a.namespaceURI)a=hV(a),a=vV(a,l);else switch(l){case"svg":a=zu;break;case"math":a=Nb;break;default:a=Ir}}l=l.toLowerCase(),l=mE(null,l),l={context:a,ancestorInfo:l},ee(fs,n),G(fs,l,n)}function oe(n){ee(fs,n),ee(cc,n),ee(ps,n)}function me(){return fe(fs.current)}function ye(n){n.memoizedState!==null&&G(vp,n,n);var a=fe(fs.current),l=n.type,d=vV(a.context,l);l=mE(a.ancestorInfo,l),d={context:d,ancestorInfo:l},a!==d&&(G(cc,n,n),G(fs,d,n))}function te(n){cc.current===n&&(ee(fs,n),ee(cc,n)),vp.current===n&&(ee(vp,n),nm._currentValue=Kl)}function J(){}function _(){if(mc===0){WV=console.log,QV=console.info,ZV=console.warn,JV=console.error,KV=console.group,eA=console.groupCollapsed,tA=console.groupEnd;var n={configurable:!0,enumerable:!0,value:J,writable:!0};Object.defineProperties(console,{info:n,log:n,warn:n,error:n,group:n,groupCollapsed:n,groupEnd:n})}mc++}function de(){if(mc--,mc===0){var n={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:lt({},n,{value:WV}),info:lt({},n,{value:QV}),warn:lt({},n,{value:ZV}),error:lt({},n,{value:JV}),group:lt({},n,{value:KV}),groupCollapsed:lt({},n,{value:eA}),groupEnd:lt({},n,{value:tA})})}0>mc&&console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}function Ee(n){var a=Error.prepareStackTrace;if(Error.prepareStackTrace=void 0,n=n.stack,Error.prepareStackTrace=a,n.startsWith(`Error: react-stack-top-frame +`)&&(n=n.slice(29)),a=n.indexOf(` +`),a!==-1&&(n=n.slice(a+1)),a=n.indexOf("react_stack_bottom_frame"),a!==-1&&(a=n.lastIndexOf(` +`,a)),a!==-1)n=n.slice(0,a);else return"";return n}function se(n){if(bh===void 0)try{throw Error()}catch(l){var a=l.stack.trim().match(/\n( *(at )?)/);bh=a&&a[1]||"",nA=-1)":-1w||R[b]!==q[w]){var Y=` +`+R[b].replace(" at new "," at ");return n.displayName&&Y.includes("")&&(Y=Y.replace("",n.displayName)),typeof n=="function"&&xh.set(n,Y),Y}while(1<=b&&0<=w);break}}}finally{Nh=!1,le.H=d,de(),Error.prepareStackTrace=l}return R=(R=n?n.displayName||n.name:"")?se(R):"",typeof n=="function"&&xh.set(n,R),R}function Et(n,a){switch(n.tag){case 26:case 27:case 5:return se(n.type);case 16:return se("Lazy");case 13:return n.child!==a&&a!==null?se("Suspense Fallback"):se("Suspense");case 19:return se("SuspenseList");case 0:case 15:return Fe(n.type,!1);case 11:return Fe(n.type.render,!1);case 1:return Fe(n.type,!0);case 31:return se("Activity");default:return""}}function Ie(n){try{var a="",l=null;do{a+=Et(n,l);var d=n._debugInfo;if(d)for(var m=d.length-1;0<=m;m--){var b=d[m];if(typeof b.name=="string"){var w=a;e:{var E=b.name,S=b.env,R=b.debugLocation;if(R!=null){var q=Ee(R),Y=q.lastIndexOf(` +`),B=Y===-1?q:q.slice(Y+1);if(B.indexOf(E)!==-1){var ie=` +`+B;break e}}ie=se(E+(S?" ["+S+"]":""))}a=w+ie}}l=n,n=n.return}while(n);return a}catch(Ae){return` +Error generating stack: `+Ae.message+` +`+Ae.stack}}function Se(n){return(n=n?n.displayName||n.name:"")?se(n):""}function He(){if(wi===null)return null;var n=wi._debugOwner;return n!=null?L(n):null}function ot(){if(wi===null)return"";var n=wi;try{var a="";switch(n.tag===6&&(n=n.return),n.tag){case 26:case 27:case 5:a+=se(n.type);break;case 13:a+=se("Suspense");break;case 19:a+=se("SuspenseList");break;case 31:a+=se("Activity");break;case 30:case 0:case 15:case 1:n._debugOwner||a!==""||(a+=Se(n.type));break;case 11:n._debugOwner||a!==""||(a+=Se(n.type.render))}for(;n;)if(typeof n.tag=="number"){var l=n;n=l._debugOwner;var d=l._debugStack;if(n&&d){var m=Ee(d);m!==""&&(a+=` +`+m)}}else if(n.debugStack!=null){var b=n.debugStack;(n=n.owner)&&b&&(a+=` +`+Ee(b))}else break;var w=a}catch(E){w=` +Error generating stack: `+E.message+` +`+E.stack}return w}function De(n,a,l,d,m,b,w){var E=wi;xe(n);try{return n!==null&&n._debugTask?n._debugTask.run(a.bind(null,l,d,m,b,w)):a(l,d,m,b,w)}finally{xe(E)}throw Error("runWithFiberInDEV should never be called in production. This is a bug in React.")}function xe(n){le.getCurrentStack=n===null?null:ot,Xa=!1,wi=n}function ne(n){return typeof Symbol=="function"&&Symbol.toStringTag&&n[Symbol.toStringTag]||n.constructor.name||"Object"}function pe(n){try{return Re(n),!1}catch{return!0}}function Re(n){return""+n}function Te(n,a){if(pe(n))return console.error("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",a,ne(n)),Re(n)}function Lt(n,a){if(pe(n))return console.error("The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",a,ne(n)),Re(n)}function cr(n){if(pe(n))return console.error("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.",ne(n)),Re(n)}function ex(n){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")return!1;var a=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(a.isDisabled)return!0;if(!a.supportsFiber)return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"),!0;try{lu=a.inject(n),Ln=a}catch(l){console.error("React instrumentation encountered an error: %o.",l)}return!!a.checkDCE}function Me(n){if(typeof qM=="function"&&XM(n),Ln&&typeof Ln.setStrictMode=="function")try{Ln.setStrictMode(lu,n)}catch(a){Ya||(Ya=!0,console.error("React instrumentation encountered an error: %o",a))}}function Io(n){return n>>>=0,n===0?32:31-(YM(n)/WM|0)|0}function Sa(n){var a=n&42;if(a!==0)return a;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return console.error("Should have found matching lanes. This is a bug in React."),n}}function ml(n,a,l){var d=n.pendingLanes;if(d===0)return 0;var m=0,b=n.suspendedLanes,w=n.pingedLanes;n=n.warmLanes;var E=d&134217727;return E!==0?(d=E&~b,d!==0?m=Sa(d):(w&=E,w!==0?m=Sa(w):l||(l=E&~n,l!==0&&(m=Sa(l))))):(E=d&~b,E!==0?m=Sa(E):w!==0?m=Sa(w):l||(l=d&~n,l!==0&&(m=Sa(l)))),m===0?0:a!==0&&a!==m&&(a&b)===0&&(b=m&-m,l=a&-a,b>=l||b===32&&(l&4194048)!==0)?a:m}function Zr(n,a){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&a)===0}function lf(n,a){switch(n){case 1:case 2:case 4:case 8:case 64:return a+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return console.error("Should have found matching lanes. This is a bug in React."),-1}}function Ad(){var n=Ep;return Ep<<=1,(Ep&62914560)===0&&(Ep=4194304),n}function Sd(n){for(var a=[],l=0;31>l;l++)a.push(n);return a}function Jr(n,a){n.pendingLanes|=a,a!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function of(n,a,l,d,m,b){var w=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var E=n.entanglements,S=n.expirationTimes,R=n.hiddenUpdates;for(l=w&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}function Ui(n){return n.replace(ek,function(a){return"\\"+a.charCodeAt(0).toString(16)+" "})}function eE(n,a){a.checked===void 0||a.defaultChecked===void 0||oA||(console.error("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",He()||"A component",a.type),oA=!0),a.value===void 0||a.defaultValue===void 0||lA||(console.error("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",He()||"A component",a.type),lA=!0)}function nx(n,a,l,d,m,b,w,E){n.name="",w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"?(Te(w,"type"),n.type=w):n.removeAttribute("type"),a!=null?w==="number"?(a===0&&n.value===""||n.value!=a)&&(n.value=""+zi(a)):n.value!==""+zi(a)&&(n.value=""+zi(a)):w!=="submit"&&w!=="reset"||n.removeAttribute("value"),a!=null?ix(n,w,zi(a)):l!=null?ix(n,w,zi(l)):d!=null&&n.removeAttribute("value"),m==null&&b!=null&&(n.defaultChecked=!!b),m!=null&&(n.checked=m&&typeof m!="function"&&typeof m!="symbol"),E!=null&&typeof E!="function"&&typeof E!="symbol"&&typeof E!="boolean"?(Te(E,"name"),n.name=""+zi(E)):n.removeAttribute("name")}function tE(n,a,l,d,m,b,w,E){if(b!=null&&typeof b!="function"&&typeof b!="symbol"&&typeof b!="boolean"&&(Te(b,"type"),n.type=b),a!=null||l!=null){if(!(b!=="submit"&&b!=="reset"||a!=null)){tx(n);return}l=l!=null?""+zi(l):"",a=a!=null?""+zi(a):l,E||a===n.value||(n.value=a),n.defaultValue=a}d=d??m,d=typeof d!="function"&&typeof d!="symbol"&&!!d,n.checked=E?n.checked:!!d,n.defaultChecked=!!d,w!=null&&typeof w!="function"&&typeof w!="symbol"&&typeof w!="boolean"&&(Te(w,"name"),n.name=w),tx(n)}function ix(n,a,l){a==="number"&&cf(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function nE(n,a){a.value==null&&(typeof a.children=="object"&&a.children!==null?lh.Children.forEach(a.children,function(l){l==null||typeof l=="string"||typeof l=="number"||typeof l=="bigint"||dA||(dA=!0,console.error("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to