codigo0/dist/assets/page-comunicacion-DmHQUHoW.js
planetazuzu 5d7a6500fe refactor: Fase 1 - Clean Architecture, refactorización modular y eliminación de duplicidades
-  Ticket 1.1: Estructura Clean Architecture en backend
-  Ticket 1.2: Schemas Zod compartidos
-  Ticket 1.3: Refactorización drugs.ts (1362 → 8 archivos modulares)
-  Ticket 1.4: Refactorización procedures.ts (3583 → 6 archivos modulares)
-  Ticket 1.5: Eliminación de duplicidades (~50 líneas)

Cambios principales:
- Creada estructura Clean Architecture en backend/src/
- Schemas Zod compartidos en backend/src/shared/schemas/
- Refactorización modular de drugs y procedures
- Utilidades genéricas en src/utils/ (filter, validation)
- Eliminados scripts obsoletos y documentación antigua
- Corregidos errores: QueryClient, import test-error-handling
- Build verificado y funcionando correctamente
2026-01-25 21:09:47 +01:00

2 lines
21 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{r as o,j as e,i as P,k as T,I as O,C as w,l as S,m as U,n as E}from"./0-vendor-react-DWOJpYrt.js";import{c,B as N}from"./page-ajustes-DgawOEJM.js";import{a as L}from"./1-vendor-utils-Delnuc0l.js";const m=o.forwardRef(({className:a,...s},r)=>e.jsx("div",{ref:r,className:c("rounded-lg border bg-card text-card-foreground shadow-sm",a),...s}));m.displayName="Card";const R=o.forwardRef(({className:a,...s},r)=>e.jsx("div",{ref:r,className:c("flex flex-col space-y-1.5 p-6",a),...s}));R.displayName="CardHeader";const I=o.forwardRef(({className:a,...s},r)=>e.jsx("h3",{ref:r,className:c("text-2xl font-semibold leading-none tracking-tight",a),...s}));I.displayName="CardTitle";const M=o.forwardRef(({className:a,...s},r)=>e.jsx("p",{ref:r,className:c("text-sm text-muted-foreground",a),...s}));M.displayName="CardDescription";const V=o.forwardRef(({className:a,...s},r)=>e.jsx("div",{ref:r,className:c("p-6 pt-0",a),...s}));V.displayName="CardContent";const D=o.forwardRef(({className:a,...s},r)=>e.jsx("div",{ref:r,className:c("flex items-center p-6 pt-0",a),...s}));D.displayName="CardFooter";const B={critical:"badge-critical",high:"badge-high",medium:"badge-medium",low:"bg-success/20 text-success border border-success/30",info:"badge-info",default:"bg-muted text-muted-foreground border border-border"},C=({variant:a="default",children:s,className:r})=>e.jsx("span",{className:c("inline-flex items-center px-2 py-0.5 rounded-md text-xs font-semibold uppercase tracking-wide",B[a],r),children:s}),q=L("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),y=o.forwardRef(({className:a,variant:s,...r},d)=>e.jsx("div",{ref:d,role:"alert",className:c(q({variant:s}),a),...r}));y.displayName="Alert";const z=o.forwardRef(({className:a,...s},r)=>e.jsx("h5",{ref:r,className:c("mb-1 font-medium leading-none tracking-tight",a),...s}));z.displayName="AlertTitle";const j=o.forwardRef(({className:a,...s},r)=>e.jsx("div",{ref:r,className:c("text-sm [&_p]:leading-relaxed",a),...s}));j.displayName="AlertDescription";const A=o.forwardRef(({className:a,type:s,...r},d)=>e.jsx("input",{type:s,className:c("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),ref:d,...r}));A.displayName="Input";const Q={id:"oxigeno-gafas-nasales",title:"Colocar Gafas Nasales O₂",shortTitle:"O₂ Gafas",category:"oxigenoterapia",context:"paciente",situation:"Colocar gafas nasales de oxígeno",script:"Te voy a poner oxígeno para ayudarte a respirar mejor. Vas a notar el flujo de aire en la nariz. Es normal, no te preocupes. ¿Me sigues?",variations:['Para mascarilla simple: "...en la nariz y boca"','Para mascarilla con reservorio: "...flujo de aire más concentrado"'],whenToUse:"Al colocar cualquier dispositivo de oxigenoterapia",notes:"Adaptar según dispositivo. Mantener tono tranquilo. Estructura: qué hacemos + qué notará + tranquilizar.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},k={id:"aspiracion",title:"Aspiración",shortTitle:"Aspiración",category:"aspiracion",context:"paciente",situation:"Realizar aspiración de vía aérea",script:"Necesito limpiar tu boca/garganta para que respires mejor. Vas a notar una sensación de succión, puede ser un poco molesta pero es rápida. ¿Me sigues?",variations:['Para Yankauer: "...sensación de succión en la boca"','Para sonda flexible: "...sensación de succión más profunda"'],whenToUse:"Antes de realizar aspiración de vía aérea",notes:"Anticipar sensación (succión, puede ser molesta). Adaptar según tipo de aspiración.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},F={id:"bvm",title:"Bolsa-Válvula-Mascarilla (BVM)",shortTitle:"BVM",category:"bvm_canulas",context:"paciente",situation:"Colocar BVM para ventilación asistida",script:"Necesito ayudarte a respirar con una mascarilla. Voy a colocarla sobre tu nariz y boca. Puede ser un poco incómoda pero es necesaria. ¿Me sigues?",variations:[],whenToUse:"Al colocar BVM para ventilación asistida",notes:"Ser prudente (no prometer que no dolerá si puede doler). Mantener términos operativos.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},G={id:"opa-npa",title:"Cánulas OPA/NPA",shortTitle:"OPA/NPA",category:"bvm_canulas",context:"paciente",situation:"Colocar cánula orofaríngea o nasofaríngea",script:"Necesito ayudarte a respirar mejor. Voy a colocar un dispositivo en tu boca/nariz para mantener la vía aérea abierta. Puede ser un poco incómodo pero es necesario. ¿Me sigues?",variations:['Para OPA: "...dispositivo en tu boca"','Para NPA: "...dispositivo en tu nariz"'],whenToUse:"Al colocar cánulas orofaríngeas o nasofaríngeas",notes:"Ser prudente. Mantener términos operativos. Adaptar según dispositivo.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},H={id:"curas-vendajes",title:"Curas y Vendajes",shortTitle:"Curas",category:"curas_vendajes",context:"paciente",situation:"Realizar curas y aplicar vendajes",script:"Voy a limpiar y cubrir tu herida. Primero voy a limpiar, puede molestar un poco. Luego voy a cubrirla y fijarla. ¿Me sigues?",variations:['Para abrasión: "...limpiar la rozadura"','Para laceración: "...limpiar el corte"','Para quemadura: "...limpiar la quemadura, puede ser más molesto"'],whenToUse:"Al realizar curas y aplicar vendajes",notes:"Anticipar sensaciones (limpieza puede molestar, presión al fijar). Adaptar según tipo de herida.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},Y={id:"transferencias",title:"Transferencias a Camilla/Silla",shortTitle:"Transferencias",category:"transferencias",context:"paciente",situation:"Transferir paciente a camilla o silla de evacuación",script:"Vamos a moverte a la camilla/silla para llevarte al hospital. Te voy a mover con cuidado, puede molestar un poco pero es necesario. ¿Me sigues?",variations:['Para camilla: "...a la camilla"','Para silla salvaescaleras: "...a la silla para bajar las escaleras"'],whenToUse:"Antes de transferir paciente a camilla o silla",notes:"Anticipar movimiento (puede molestar, pero es necesario). Adaptar según tipo de transferencia.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},X={id:"control-termico",title:"Control Térmico",shortTitle:"Control Térmico",category:"control_termico",context:"paciente",situation:"Aplicar medidas de control térmico",script:"Te voy a tapar con una manta para mantenerte caliente. Es importante para tu seguridad. ¿Me sigues?",variations:['Para manta térmica: "...con una manta térmica"','Para aislamiento: "...con mantas para aislarte del frío"'],whenToUse:"Al aplicar medidas de control térmico",notes:"Explicar importancia (mantener caliente, seguridad). Adaptar según situación.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},Z={id:"rcp-mando-inicial",title:"Mando Inicial - RCP",shortTitle:"Mando RCP",category:"rcp",context:"coordinacion",situation:"Asignar roles al inicio de RCP",script:"Yo llevo el mando. Tú 112. Tú DESA. Tú BVM y oxígeno.",variations:[],whenToUse:"Al inicio de RCP, para asignar roles al equipo",notes:"Órdenes claras en los primeros 15-30 segundos. Un solo líder.",source:"BLOQUE_04_1_RCP_ADULTOS.md"},$={id:"rcp-confirmacion",title:"Confirmación PCR",shortTitle:"Confirmar PCR",category:"rcp",context:"coordinacion",situation:"Confirmar PCR al equipo",script:"No responde y no respira normal: es una PCR. Empiezo compresiones.",variations:[],whenToUse:"Tras confirmar PCR, comunicar al equipo",notes:"Comunicación clara y directa. Iniciar compresiones inmediatamente.",source:"BLOQUE_04_1_RCP_ADULTOS.md"},J={id:"rcp-control-calidad",title:"Control de Calidad - RCP",shortTitle:"Calidad RCP",category:"rcp",context:"coordinacion",situation:"Dar feedback sobre calidad de compresiones",script:"Ritmo 100120, profundo 56, suelta del todo.",variations:['Para cambio de reanimador: "Cambio en 3…2…1… ¡cambio!"'],whenToUse:"Durante RCP, para mantener calidad de compresiones",notes:"Feedback continuo. Cambiar reanimador cada 2 minutos o antes si baja la calidad.",source:"BLOQUE_04_1_RCP_ADULTOS.md"},K={id:"rcp-desa",title:"Comandos DESA",shortTitle:"DESA",category:"desa",context:"coordinacion",situation:"Coordinación durante uso de DESA",script:"Coloca parches sin parar compresiones.",variations:['Antes de análisis: "¡Nadie toca! Analiza."','Antes de descarga: "¡Descarga! Reanudo compresiones ya."'],whenToUse:"Durante uso de DESA en RCP",notes:"Continuar compresiones durante colocación de parches. Pausa solo en análisis/descarga.",source:"BLOQUE_04_1_RCP_ADULTOS.md"},W={id:"rcp-familiares",title:"Comunicación con Familiares - RCP",shortTitle:"RCP Familiares",category:"rcp",context:"familiares",situation:"Comunicar situación a familiares durante RCP",script:"Ahora lo más importante es el masaje cardíaco. Estamos actuando y ya viene ayuda.",variations:[],whenToUse:"Cuando hay familiares presentes durante RCP",notes:"Mantener foco en paciente. Comunicación breve y tranquilizadora. No prometer resultados.",source:"BLOQUE_04_1_RCP_ADULTOS.md"},ee={id:"pls-paciente",title:"PLS - Para el Paciente",shortTitle:"PLS Paciente",category:"pls",context:"paciente",situation:"Colocar paciente en Posición Lateral de Seguridad",script:"Le voy a mover de lado para que respire mejor.",variations:[],whenToUse:"Antes de colocar paciente en PLS",notes:"Hablar en voz alta al paciente aunque esté inconsciente. Tono calmado y profesional.",source:"BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md"},ae={id:"pls-equipo",title:"PLS - Para el Equipo/Testigos",shortTitle:"PLS Equipo",category:"pls",context:"coordinacion",situation:"Coordinar colocación de PLS con equipo o testigos",script:"Voy a ponerlo en posición lateral de seguridad. Ayúdame a [despejar espacio/colocar una manta].",variations:['Para testigos: "Soy técnico de emergencias. Voy a colocarlo en una posición segura para que respire mejor. Necesito espacio para trabajar."','Para equipo: "Paciente inconsciente, respira, pulso presente. Voy a colocarlo en PLS. Tú [nombre], prepárate para monitorizar."'],whenToUse:"Al coordinar PLS con equipo o testigos",notes:"Mantener foco en paciente. Coordinar brevemente. No perder control de situación.",source:"BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md"},ie={id:"pls-coordinador",title:"PLS - Para Centro Coordinador",shortTitle:"PLS Coordinador",category:"pls",context:"coordinacion",situation:"Comunicar situación a centro coordinador",script:"Paciente inconsciente, respiración espontánea, pulso presente. Colocado en PLS. Precisa traslado para valoración. Llevo X minutos en escena.",variations:[],whenToUse:"Al comunicar situación a centro coordinador (estructura ALSAR-T)",notes:"Estructura ALSAR-T: ALERTA - LOCALIZACIÓN - SITUACIÓN - RECURSOS - TIEMPO.",source:"BLOQUE_04_9_POSICION_LATERAL_SEGURIDAD.md"},se={id:"paciente-agitado",title:"Paciente Agitado",shortTitle:"Agitado",category:"situaciones_dificiles",context:"situacion_dificil",situation:"Comunicación con paciente agitado",script:"Mantener tono tranquilo y liderazgo. Explicar brevemente qué se va a hacer. Dar instrucciones simples, de una en una. No discutir ni perder control de situación.",variations:[],whenToUse:"Cuando el paciente está agitado o agresivo",notes:"Mantener liderazgo. Tono tranquilo. Instrucciones simples. No discutir.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},re={id:"paciente-dolor",title:"Paciente con Dolor Intenso",shortTitle:"Dolor",category:"situaciones_dificiles",context:"situacion_dificil",situation:"Comunicación con paciente con dolor intenso",script:"Sé que duele. Voy a [acción]. Es necesario para [razón]. Puede molestar un poco más, pero es rápido.",variations:[],whenToUse:"Cuando el paciente tiene dolor intenso",notes:"Reconocer dolor brevemente. Explicar qué se va a hacer y por qué. Anticipar sensaciones. Trabajar con ritmo adecuado, hacer pausas si es posible.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},oe={id:"barrera-idiomatica",title:"Barrera Idiomática",shortTitle:"Idioma",category:"situaciones_dificiles",context:"situacion_dificil",situation:"Comunicación con barrera idiomática",script:'Usar gestos simples y claros. Dar órdenes simples: "respira", "tranquilo", "no te muevas". Usar lenguaje corporal claro.',variations:[],whenToUse:"Cuando hay barrera idiomática con el paciente",notes:"Gestos simples. Órdenes simples. Lenguaje corporal claro. Coordinar con otros intervinientes si es posible.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},te={id:"paciente-familia",title:"Paciente con Familia Alrededor",shortTitle:"Con Familia",category:"situaciones_dificiles",context:"situacion_dificil",situation:"Mantener foco con familia presente",script:'Mantener foco en paciente, no en familia. Coordinar con familia brevemente si es necesario: "necesito espacio para trabajar". No discutir con familia.',variations:[],whenToUse:"Cuando hay familia alrededor del paciente",notes:"Mantener foco en paciente. Coordinar brevemente si es necesario. No discutir. Mantener liderazgo y control de situación.",source:"BLOQUE_03_16_COMUNICACION_OPERATIVA.md"},h=[Q,k,F,G,H,Y,X,Z,$,J,K,W,ee,ae,ie,se,re,oe,te];function ne(a){return h.filter(s=>s.category===a)}function ce(a){const s=a.toLowerCase();return h.filter(r=>r.title.toLowerCase().includes(s)||r.shortTitle.toLowerCase().includes(s)||r.situation.toLowerCase().includes(s)||r.script.toLowerCase().includes(s))}const le=({script:a,onBack:s})=>{const[r,d]=o.useState(!1),[t,x]=o.useState(!1),[l,g]=o.useState(!1),p=async()=>{try{await navigator.clipboard.writeText(a.script),d(!0),setTimeout(()=>d(!1),2e3)}catch(n){console.error("Error al copiar:",n)}},v=n=>{switch(n){case"procedimiento":return"bg-blue-100 text-blue-800";case"coordinacion":return"bg-purple-100 text-purple-800";case"paciente":return"bg-green-100 text-green-800";case"familiares":return"bg-orange-100 text-orange-800";case"situacion_dificil":return"bg-red-100 text-red-800";default:return"bg-gray-100 text-gray-800"}},b=n=>{switch(n){case"procedimiento":return"Procedimiento";case"coordinacion":return"Coordinación";case"paciente":return"Paciente";case"familiares":return"Familiares";case"situacion_dificil":return"Situación Difícil";default:return n}};return e.jsxs("div",{className:"space-y-4",children:[s&&e.jsx(N,{variant:"ghost",onClick:s,className:"mb-4",children:"← Volver"}),e.jsx(m,{className:"p-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex items-start justify-between",children:e.jsxs("div",{className:"flex-1",children:[e.jsx("h2",{className:"text-2xl font-bold mb-2",children:a.title}),e.jsx("p",{className:"text-gray-600 mb-3",children:a.situation}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(C,{className:v(a.context),children:b(a.context)}),e.jsx(C,{variant:"outline",children:a.category})]})]})}),e.jsxs("div",{className:"bg-blue-50 border-l-4 border-blue-500 p-4 rounded-r-lg",children:[e.jsxs("div",{className:"flex items-start justify-between mb-2",children:[e.jsx("h3",{className:"font-semibold text-blue-900",children:"Guión para leer:"}),e.jsx(N,{size:"sm",variant:"outline",onClick:p,className:"ml-2",children:r?e.jsxs(e.Fragment,{children:[e.jsx(P,{className:"h-4 w-4 mr-1"}),"Copiado"]}):e.jsxs(e.Fragment,{children:[e.jsx(T,{className:"h-4 w-4 mr-1"}),"Copiar"]})})]}),e.jsxs("p",{className:"text-lg text-blue-900 font-medium leading-relaxed",children:['"',a.script,'"']})]}),e.jsxs(y,{children:[e.jsx(O,{className:"h-4 w-4"}),e.jsxs(j,{children:[e.jsx("strong",{children:"Cuándo usar:"})," ",a.whenToUse]})]}),a.variations&&a.variations.length>0&&e.jsxs(m,{className:"p-4 bg-gray-50",children:[e.jsxs("button",{onClick:()=>x(!t),className:"w-full flex items-center justify-between text-left",children:[e.jsx("h3",{className:"font-semibold",children:"Variaciones"}),e.jsxs("span",{className:"text-sm text-gray-500",children:[t?"Ocultar":"Mostrar"," (",a.variations.length,")"]})]}),t&&e.jsx("ul",{className:"mt-3 space-y-2",children:a.variations.map((n,f)=>e.jsx("li",{className:"text-sm text-gray-700 pl-4 border-l-2 border-gray-300",children:n},f))})]}),a.notes&&e.jsxs(m,{className:"p-4 bg-amber-50",children:[e.jsxs("button",{onClick:()=>g(!l),className:"w-full flex items-center justify-between text-left",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(w,{className:"h-4 w-4 text-amber-600"}),e.jsx("h3",{className:"font-semibold text-amber-900",children:"Notas para el TES"})]}),e.jsx("span",{className:"text-sm text-amber-700",children:l?"Ocultar":"Mostrar"})]}),l&&e.jsx("p",{className:"mt-3 text-sm text-amber-900",children:a.notes})]}),a.source&&e.jsxs("p",{className:"text-xs text-gray-500 text-right",children:["Fuente: ",a.source]})]})})]})},de=()=>{const[a,s]=o.useState(null),[r,d]=o.useState(""),[t,x]=o.useState("all"),[l,g]=o.useState("all"),p=o.useMemo(()=>{let i=h;return t!=="all"&&(i=ne(t)),l!=="all"&&(i=i.filter(u=>t==="all"?u.context===l:u.context===l&&u.category===t)),r.trim()&&(i=ce(r).filter(u=>i.includes(u))),i},[t,l,r]),v=["oxigenoterapia","aspiracion","bvm_canulas","curas_vendajes","transferencias","control_termico","rcp","desa","pls","situaciones_dificiles"],b=["procedimiento","coordinacion","paciente","familiares","situacion_dificil"],n=i=>({oxigenoterapia:"Oxigenoterapia",aspiracion:"Aspiración",bvm_canulas:"BVM/Cánulas",curas_vendajes:"Curas/Vendajes",transferencias:"Transferencias",control_termico:"Control Térmico",rcp:"RCP",desa:"DESA",pls:"PLS",situaciones_dificiles:"Situaciones Difíciles"})[i]||i,f=i=>({procedimiento:"Procedimiento",coordinacion:"Coordinación",paciente:"Paciente",familiares:"Familiares",situacion_dificil:"Situación Difícil"})[i]||i,_=i=>{switch(i){case"procedimiento":return"bg-blue-100 text-blue-800";case"coordinacion":return"bg-purple-100 text-purple-800";case"paciente":return"bg-green-100 text-green-800";case"familiares":return"bg-orange-100 text-orange-800";case"situacion_dificil":return"bg-red-100 text-red-800";default:return"bg-gray-100 text-gray-800"}};return a?e.jsx("div",{className:"container mx-auto px-4 py-6 max-w-4xl",children:e.jsx(le,{script:a,onBack:()=>s(null)})}):e.jsxs("div",{className:"container mx-auto px-4 py-6",children:[e.jsxs("div",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold mb-2 flex items-center gap-2",children:[e.jsx(S,{className:"h-8 w-8"}),"Guiones de Comunicación Operativa"]}),e.jsx("p",{className:"text-gray-600",children:"Guiones operativos para comunicación efectiva durante procedimientos, coordinación con equipo y situaciones difíciles."})]}),e.jsxs("div",{className:"mb-6 space-y-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(U,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 h-5 w-5"}),e.jsx(A,{type:"text",placeholder:"Buscar guiones por situación, título o contenido...",value:r,onChange:i=>d(i.target.value),className:"pl-10"})]}),e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(E,{className:"h-4 w-4 text-gray-500"}),e.jsx("span",{className:"text-sm font-medium text-gray-700",children:"Categoría:"}),e.jsxs("select",{value:t,onChange:i=>x(i.target.value),className:"px-3 py-1 border rounded-md text-sm",children:[e.jsx("option",{value:"all",children:"Todas"}),v.map(i=>e.jsx("option",{value:i,children:n(i)},i))]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-medium text-gray-700",children:"Contexto:"}),e.jsxs("select",{value:l,onChange:i=>g(i.target.value),className:"px-3 py-1 border rounded-md text-sm",children:[e.jsx("option",{value:"all",children:"Todos"}),b.map(i=>e.jsx("option",{value:i,children:f(i)},i))]})]}),(t!=="all"||l!=="all"||r)&&e.jsx(N,{variant:"outline",size:"sm",onClick:()=>{x("all"),g("all"),d("")},children:"Limpiar filtros"})]})]}),p.length===0?e.jsx(m,{className:"p-8 text-center",children:e.jsx("p",{className:"text-gray-500",children:"No se encontraron guiones con los filtros seleccionados."})}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:p.map(i=>e.jsx(m,{className:"p-4 cursor-pointer hover:shadow-lg transition-shadow",onClick:()=>s(i),children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"font-semibold text-lg mb-1",children:i.shortTitle}),e.jsx("p",{className:"text-sm text-gray-600 line-clamp-2",children:i.situation})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(C,{className:_(i.context),children:f(i.context)}),e.jsx(C,{variant:"outline",className:"text-xs",children:n(i.category)})]}),e.jsxs("p",{className:"text-sm text-gray-700 line-clamp-2 italic",children:['"',i.script.substring(0,100),'..."']})]})},i.id))}),e.jsxs("div",{className:"mt-6 text-sm text-gray-500 text-center",children:["Mostrando ",p.length," de ",h.length," guiones"]})]})},xe=Object.freeze(Object.defineProperty({__proto__:null,default:de},Symbol.toStringTag,{value:"Module"}));export{y as A,C as B,m as C,A as I,j as a,z as b,R as c,I as d,V as e,xe as f};