PageSourceSearch

https://trainerstudio.de/assets/TrainingPage-OAFXm7tg.js

js trainerstudio.de collected 2026-10-09 22:04:14 UTC 68,136 bytes, 21 lines download raw bytes

1import{O as Ke,r as a,a3 as qe,s as se,N as W,j as e,P as re,z as ke,y as V,L as Je,X as Be,a6 as $e,aE as I,R as lt,k as _e,D as Ge,as as oe,aL as ot,a2 as B,au as wt,aw as ct,aC as Ve,aM as St,ao as Oe,b as Le,aN as dt,aO as ut,aP as mt,aQ as ht,M as He,aR as kt,f as le,h as Ze,d as ze,aS as be,aT as _t,a4 as Ft,n as Ye,q as et,a as tt,aD as Tt,al as st,C as Ct,G as Et,p as We,aU as rt,aV as Ut,aW as zt}from"./index-SUgZbrft.js";import{u as Mt}from"./useAICoach-XFcvu_vI.js";import{u as Bt}from"./useTrainingSessions-BrzNSI3P.js";import{A as Dt,a as Pt,b as At}from"./avatar-CysAT7fu.js";import{u as Wt}from"./useFileUpload-C8vGAAOS.js";import{U as Lt}from"./upload-CUAksYr9.js";import{I as xt}from"./ImageUpload-C5jSIOHT.js";import{P as gt}from"./play-CVBXRVf3.js";import{S as pt}from"./save-DICkbYJ6.js";import{F as Rt}from"./filter-wv0IWDeY.js";import{G as Ht}from"./grip-vertical-mseWWBr_.js";import{P as Kt}from"./pencil-3GFo1nxB.js";import{T as ft}from"./trash-2-Dm6BwHAx.js";import{C as $t}from"./calendar-range-MESp75L2.js";import{u as It}from"./useGames-Cjd0owLs.js";import{E as Vt}from"./jspdf.es.min-CQC9_-pQ.js";import{u as Ot}from"./usePageTracking-CNqP9g9x.js";import{P as Gt}from"./pen-CzgD3RVS.js";/**
2 * @license lucide-react v0.462.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const bt=Ke("CalendarPlus",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M16 19h6",key:"xwg31i"}],["path",{d:"M19 16v6",key:"tddt3s"}]]);/**
7 * @license lucide-react v0.462.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const Re=Ke("GraduationCap",[["path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",key:"j76jl0"}],["path",{d:"M22 10v6",key:"1lu8f3"}],["path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5",key:"1r8lef"}]]);/**
12 * @license lucide-react v0.462.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const yt=Ke("Package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["path",{d:"m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7",key:"yx3hmr"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);/**
17 * @license lucide-react v0.462.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const jt=Ke("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]),Me=["U6","U7","U8","U9","U10","U11","U12","U13","U14","U15","U16","U17","U18"],Zt=[{name:"Dribbelkönig",category:"Technik",icon:"👑",duration_minutes:10,description:"Challenge: Wer kann am längsten dribbeln ohne den Ball zu verlieren?",min_players:4,max_players:16,materials:"1 Ball pro Spieler, Hütchen für Spielfeld",setup:"Ein Quadrat (10x10m) mit Hütchen abstecken. Jeder Spieler hat einen Ball.",execution:"Alle Spieler dribbeln im Feld. Der Trainer ruft Kommandos: 'Stopp' (Ball mit Sohle stoppen), 'Wechsel' (anderen Ball schnappen), 'Flucht' (alle zum Rand). Wer seinen Ball verliert oder zu langsam ist, macht 3 Hampelmänner und ist wieder dabei. Wer schafft eine fehlerfreie Runde?",age_groups:["U6","U7","U8"]},{name:"Tigerball",category:"Spielform",icon:"🐯",duration_minutes:12,description:"Spielform: Der Tiger versucht die Mäuse zu fangen - mit Ball am Fuß!",min_players:6,max_players:15,materials:"1 Ball pro Spieler (außer Tiger), Hütchen für Spielfeld, Leibchen für Tiger",setup:"Spielfeld 15x15m abstecken. Ein Spieler ist der Tiger (ohne Ball, mit Leibchen), alle anderen sind Mäuse mit Ball.",execution:"Die Mäuse dribbeln im Feld. Der Tiger versucht, die Bälle wegzuschießen. Wessen Ball das Feld verlässt, wird zum Tiger. Letzter Spieler mit Ball gewinnt! Variation: 2 Tiger bei größeren Gruppen.",age_groups:["U6","U7","U8"]},{name:"Tor-zu-Tor Chaos",category:"Spielform",icon:"⚽",duration_minutes:15,description:"Spielform: Mini-Fußball mit vielen Toren - Tore zählen überall!",min_players:6,max_players:12,materials:"4-6 Minitore oder Hütchentore, 2-3 Bälle, Leibchen",setup:"Mehrere kleine Tore (aus Hütchen) kreuz und quer im Feld verteilen. 2 Teams bilden.",execution:"Freies Spiel! Jedes Team kann auf alle Tore schießen. Nach jedem Tor: Ball liegt in der Mitte, beide Teams starten vom eigenen Rand. Welches Team schafft mehr Tore in 5 Minuten? Danach Seitenwechsel.",age_groups:["U6","U7","U8"]},{name:"Schatzjäger",category:"Koordination",icon:"💎",duration_minutes:10,description:"Challenge: Wer sammelt die meisten SchÃ
21¤tze in sein Nest?",min_players:8,max_players:20,materials:"Viele Bälle, 4 Hütchen als Nester, Leibchen für Teams",setup:"4 Ecken als Nester markieren. Alle Bälle in die Mitte. 4 Teams bilden, jedes Team ein Nest.",execution:"Auf Signal rennen alle zum Schatz (Mitte) und bringen immer nur EINEN Ball ins eigene Nest. Man darf auch Bälle aus anderen Nestern klauen! Nach 2 Minuten: Stop! Welches Team hat die meisten? Nächste Runde: Nur auf einem Bein hüpfen!",age_groups:["U6","U7","U8"]},{name:"Passjäger",category:"Passspiel",icon:"🎯",duration_minutes:15,description:"Spielform: 4vs1 mit Bonus-Punkten für saubere Pässe!",min_players:5,max_players:15,materials:"1 Ball, Hütchen für Feld 8x8m, Leibchen",setup:"Kleines Feld 8x8m. 4 Spieler außen, 1 Jäger in der Mitte.",execution:"Die 4 Außenspieler passen den Ball. Der Jäger versucht abzufangen. Bei 10 erfolgreichen Pässen: Jäger macht 5 Kniebeugen. Schafft der Jäger 3 Balleroberungen? Dann wechselt der letzte Passgeber. Wer war der beste Jäger (wenigste Pässe zugelasse
21n)?",age_groups:["U9","U10","U11"]},{name:"Zoneneroberung",category:"Spielform",icon:"🏆",duration_minutes:20,description:"Spielform: 4vs4 mit Bonuszonen - je tiefer, desto mehr Punkte!",min_players:8,max_players:12,materials:"Hütchen in 3 Farben, Leibchen, 1-2 Bälle",setup:"Spielfeld in 3 Zonen teilen. Zone 1 = 1 Punkt, Zone 2 = 2 Punkte, Zone 3 = 3 Punkte. Kleine Tore an den Enden.",execution:"4vs4 Spiel. Tore zählen je nach Zone, aus der geschossen wurde. In Zone 3 angekommen ohne Ballverlust? Bonuspunkt! Welches Team erreicht zuerst 15 Punkte? Fördert Tiefenspiel und Geduld im Spielaufbau.",age_groups:["U9","U10","U11"]},{name:"Wandspieler-Duell",category:"Technik",icon:"🧱",duration_minutes:12,description:"Challenge: 1vs1 mit neutralem Wandspieler - wer nutzt ihn cleverer?",min_players:6,max_players:18,materials:"Kleine Tore, Bälle, Hütchen für mehrere Felder",setup:"Mehrere 1vs1 Felder (12x8m) mit je 2 Toren. Pro Feld 2 Spieler + 1 Wandspieler an der Seite.",execution:"1vs1 Duell. Der Wandspieler darf von beiden genutzt werden (Doppelpass!), spielt aber immer direkt zurück. Wer clever kombiniert und den Wandspieler nutzt, hat Vorteile. 2 Minuten pro Duell, dann rotieren. Punkte sammeln: Wer wird Tages-Champion?",age_groups:["U9","U10","U11"]},{name:"Elfmeter-Königsturnier",category:"Abschluss",icon:"👑",duration_minutes:15,description:"Challenge: K.O.-System mit Twist - der Schütze wird zum Torwart!",min_players:6,max_players:16,materials:"Tor, viele Bälle",setup:"Ein großes Tor. Alle Spieler in einer Reihe. Erster Spieler ist Torwart.",execution:"Spieler 2 schießt Elfer auf Spieler 1. Tor? Torwart raus, Schütze wird neuer Torwart. Gehalten? Schütze raus. Wer als letzter übrig bleibt, ist Elfmeter-König! Finale: Die letzten 2 schießen abwechselnd.",age_groups:["U9","U10","U11"]},{name:"Überzahl-Blitz",category:"Taktik",icon:"⚡",duration_minutes:18,description:"Spielform: 3vs2 Konter auf Zeit - 8 Sekunden bis zum Abschluss!",min_players:10,max_players:16,materials:"Tor mit Torwart, Hütchen, Stoppuhr, Leibchen",setup:"Mittellinie markieren. 3 Angreifer starten an der Mittellinie, 2 Verteidiger am Strafraum.",execution:"Trainer spielt Ball zu Angreifern. Sie haben 8 Sekunden für den Torabschluss! Verteidiger versuchen zu verzögern. Treffer in 8 Sek = 2 Punkte, Treffer danach = 1 Punkt. Verteidiger erobert Ball = 1 Punkt für Defensive. Schnelle Rotation. Welche Gruppe sammelt mehr Punkte?",age_groups:["U12","U13","U14"]},{name:"Pressing-Falle",category:"Taktik",icon:"🪤",duration_minutes:20,description:"Spielform: 6vs4 mit Pressingauslöser - das Signal entscheidet!",min_players:10,max_players:14,materials:"Hütchen für Zonen, Leibchen, 2 Bälle",setup:"Feld in 3 Zonen. 6 Spieler im Ballbesitz vs 4 Pressing-Spieler. Markierte 'Trigger-Zone' auf einer Seite.",execution:"Das 6er-Team baut auf. Wenn der Ball in die Trigger-Zone gespielt wird, startet das 4er-Team geschlossenes Pressing! Balleroberung = Punkt. 10 Pässe ohne Verlust = Punkt. Wechsel nach 4 Minuten. Fördert Kommunikation und gemeinsames Anlaufen.",age_groups:["U12","U13","U14"]},{name:"Dribbler vs. Verteidiger Liga",category:"Zweikampf",icon:"⚔️",duration_minutes:15,description:"Challenge: 1vs1 Liga-System - jeder gegen jeden, Punkte sammeln!",min_players:8,max_players:16,materials:"Viele kleine Felder mit Hütchentoren, Bälle",setup:"Mehrere 1vs1 Felder (10x6m) aufbauen. Jeder Spieler bekommt eine Nummer.",execution:"Liga-System: 1 vs 2, 3 vs 4 usw. 90 Sekunden pro Duell. Sieg = 3 Punkte, Unentschieden = 1 Punkt. Nach jedem Duell: Eine Nummer weiter rotieren. Wer hat nach 6 Runden die meisten Punkte? Aufstieg und Abstieg zwischen den Feldern möglich!",age_groups:["U12","U13","U14"]},{name:"Flügelzangen-Spiel",category:"Spielform",icon:"🦅",duration_minutes:20,description:"Spielform: 5vs5 mit Bonus für Flanken und Außenspieler!",min_players:10,max_players:14,materials:"2 Tore, Leibchen, Hütchen für Flügelzonen",setup:"Normales Feld mit markierten Flügelzonen (außen). 5vs5 + Torhüter.",execution:"Normales Spiel, ABER: Tore nach Flanke aus der Flügelzone zählen doppelt! Kombination über außen wird belohnt. Kopfballtore = 3 Punkte! Fördert Flügelspiel und Zentrumsstürmer-Verhalten.",age_groups:["U12","U13","U14"]},{name:"Champions League Finale",category:"Spielform",icon:"🏆",duration_minutes:25,description:"Spielform: 7vs7 Turnier mit K.O.-Runden und Verlängerung!",min_players:14,max_players:22,materials:"2 große Tore, Leibchen in 2-4 Farben, Stoppuhr",setup:"Großes Spielfeld. Teams einteilen. Bei 4 Teams: Halbfinale + Finale.",execution:"Echtes Turnier! 7 Minuten Spielzeit pro Partie. Unentschieden = Golden Goal (nächstes Tor entscheidet). Finale = 10 Minuten. Verlierer-Teams spielen um Platz 3. Emotional wie ein echtes Turnier - voller Einsatz!",age_groups:["U15","U16","U17","U18"]},{name:"Umschaltblitz",category:"Taktik",icon:"💨",duration_minutes:20,description:"Spielform: Sofortiges Umschalten nach Ballgewinn/-verlust!",min_players:12,max_players:16,materials:"2 Tore, viele Bälle am Spielfeldrand, Leibchen",setup:"Normales Spielfeld. Bälle rund um das Feld verteilen. 6vs6 + 2 Torhüter.",execution:"Normales Spiel, ABER: Bei Ballverlust oder Torschuss wirft der Torwart sofort neuen Ball ins Spiel! Keine Pause, sofort umschalten. Wer nicht bereit ist, kassiert. 4x 4 Minuten mit Pausen. Trainiert Transition und mentale Frische.",age_groups:["U15","U16","U17","U18"]},{name:"Positionsspiel Pro",category:"Taktik",icon:"📐",duration_minutes:18,description:"Spielform: 8vs4 Rondo mit Positionswechseln und Zielspielern!",min_players:12,max_players:14,materials:"Großes Feld 20x20m, Leibchen, Hütchen für Zonen",setup:"8 Au
21ßenspieler bilden Quadrat, 4 Jäger in der Mitte. 2 Zielspieler an gegenüberliegenden Seiten.",execution:"Die 8er-Gruppe hält den Ball. Ziel: Den Ball von Zielspieler A zu Zielspieler B spielen = 1 Punkt. Jäger erobert = Wechsel. Nach Pass zum Zielspieler: Positionswechsel der Außenspieler! Fördert Übersicht und Passqualität unter Druck.",age_groups:["U15","U16","U17","U18"]},{name:"Abschluss-Duell unter Druck",category:"Abschluss",icon:"🎯",duration_minutes:15,description:"Challenge: 2vs1 auf Tor mit nachrückendem Verteidiger!",min_players:8,max_players:16,materials:"Tor mit Torwart, viele Bälle, Hütchen",setup:"Start an der Mittellinie. 2 Angreifer mit Ball, 1 Verteidiger 5m zurückversetzt.",execution:"Angreifer starten mit Ball, Verteidiger jagt nach! Die 2 Stürmer müssen schnell kombinieren und abschließen, bevor der Verteidiger aufschließt. Abschluss innerhalb 6 Sekunden = 2 Punkte. Später = 1 Punkt. Verteidiger verhindert = 2 Punkte für ihn. Rotation nach jedem Durchgang.",age_groups:["U15","U16","U17","U18"]},{name:"Kommando-Chaos Warm-up",category:"Warm-up",icon:"🔥",duration_minutes:8,description:"Spielform: Aufwärmen mit lustigen Kommandos und Challenges!",min_players:6,max_players:24,materials:"1 Ball pro Spieler, Hütchen",setup:"Alle dribbeln frei im Feld. Trainer ruft Kommandos.",execution:"Kommandos: 'Feuer!' = Sprint zum Rand. 'Wasser!' = Ball hochhalten. 'Sturm!' = Hinlegen mit Ball unter Bauch. 'Trainer sagt...' = Nur bei 'Trainer sagt' ausführen! Letzter bei jeder Aktion macht 3 Hampelmänner. Macht Spaß und wärmt spielerisch auf.",age_groups:["U6","U7","U8","U9","U10","U11","U12"]},{name:"Dynamisches Lauf-ABC",category:"Warm-up",icon:"🏃",duration_minutes:10,description:"Challenge: Koordinationsläufe mit Wettbewerbscharakter!",min_players:8,max_players:24,materials:"Hütchen für Laufstrecke 20m",setup:"2 Reihen nebeneinander, 20m Strecke markieren. Teams bilden.",execution:"Staffel-Format! Übungen: Knieheben, Anfersen, Seitgalopp, Rückwärtslauf, Hopserlauf. Jeder Spieler macht eine Bahn, klatscht ab, nächster startet. Welches Team ist zuerst durch alle 5 Übungen? Lockeres Auslaufen am Ende.",age_groups:["U10","U11","U12","U13","U14","U15","U16","U17","U18"]},{name:"Partner-Stretching Challenge",category:"Cool-down",icon:"🧘",duration_minutes:10,description:"Challenge: Dehnen mit Partner - wer hält länger durch?",min_players:6,max_players:24,materials:"Keine",setup:"Paare bilden. Im Kreis oder verteilt aufstellen.",execution:"Partner-Dehnübungen: A dehnt, B zählt bis 30. Dann wechseln. Challenge: Welches Paar schafft alle Übungen sauber? Übungen: Beinrückseite, Hüftbeuger, Waden, Oberschenkel, Schultern. Lockere Musik wenn möglich. Entspannter Ausklang.",age_groups:["U10","U11","U12","U13","U14","U15","U16","U17","U18"]},{name:"Torwart-Reaktions-Battle",category:"Torwart",icon:"🧤",duration_minutes:15,description:"Challenge: Torwart vs. Torwart - wer hält mehr?",min_players:4,max_players:8,materials:"2 Tore gegenüber, viele Bälle, 2+ Schützen",setup:"Zwei Tore mit 12m Abstand gegenüber. Bälle neben den Schützen bereitstellen.",execution:"2 Torhüter in ihren Toren. 2 Schützen schießen abwechselnd auf die Tore (1 Schuss pro TW). Gehaltener Ball = Punkt. 10 Schüsse pro Runde. Welcher Torwart gewinnt? Loser macht 10 Liegestütze. Fokus: Reaktion, Mut, Fußstellung.",age_groups:["U10","U11","U12","U13","U14","U15","U16","U17","U18"]}];function qt(){const[r,_]=a.useState([]),[z,L]=a.useState(!0),{user:b}=qe(),w=a.useCallback(async()=>{if(!b){_([]),L(!1);return}try{const{data:p,error:m}=await se.from("exercises").select("*").order("category",{ascending:!0});if(m)throw m;if(!p||p.length===0){const{data:g}=await se.from("profiles").select("full_name").eq("user_id",b.id).maybeSingle(),{data:j}=await se.from("teams").select("logo_url").eq("user_id",b.id).maybeSingle(),C=Zt.map(f=>({...f,user_id:b.id,creator_name:(g==null?void 0:g.full_name)||"Trainer",creator_logo_url:(j==null?void 0:j.logo_url)||null})),{data:h,error:u}=await se.from("exercises").insert(C).select();if(u)throw u;_(h||[])}else _(p)}catch(p){console.error("Error fetching exercises:",p)}finally{L(!1)}},[b]);return a.useEffect(()=>{w()},[w]),{exercises:r,isLoading:z,addExercise:async(p,m,g)=>{if(!b)return W.error("Bitte melde dich an"),null;try{let j=m,C=g;if(!j){const{data:f}=await se.from("profiles").select("full_name").eq("user_id",b.id).maybeSingle();j=(f==null?void 0:f.full_name)||"Trainer"}if(!C){const{data:f}=await se.from("teams").select("logo_url").eq("user_id",b.id).maybeSingle();C=(f==null?void 0:f.logo_url)||null}const{data:h,error:u}=await se.from("exercises").insert({...p,user_id:b.id,video_url:p.video_url||null,image_url:p.image_url||null,creator_name:j,creator_logo_url:C,age_groups:p.age_groups||[]}).select().single();if(u)throw u;return _(f=>[...f,h]),W.success("Übung hinzugefügt!"),h}catch(j){return console.error("Error adding exercise:",j),W.error("Fehler beim Hinzufügen"),null}},updateExercise:async(p,m)=>{if(!b)return null;try{const{data:g,error:j}=await se.from("exercises").update(m).eq("id",p).select().single();if(j)throw j;return _(C=>C.map(h=>h.id===p?g:h)),W.success("Übung aktualisiert!"),g}catch(g){return console.error("Error updating exercise:",g),W.error("Fehler beim Aktualisieren"),null}},deleteExercise:async p=>{if(b)try{const{error:m}=await se.from("exercises").delete().eq("id",p);if(m)throw m;_(g=>g.filter(j=>j.id!==p)),W.success("Übung gelöscht")}catch(m){console.error("Error deleting exercise:",m),W.error("Fehler beim Löschen")}},refetch:w}}function vt({value:r,onChange:_,className:z,placeholder:L="Video hochladen"}
21){const b=a.useRef(null),[w,F]=a.useState(!1),{uploadFile:y,deleteFile:S,isUploading:p,progress:m}=Wt(),g=async h=>{var D;const u=(D=h.target.files)==null?void 0:D[0];if(!u||!u.type.startsWith("video/"))return;const f=await y(u,{folder:"videos",maxSizeMB:100,allowVideo:!0});f&&_(f)},j=async h=>{var D;h.preventDefault(),F(!1);const u=(D=h.dataTransfer.files)==null?void 0:D[0];if(!u||!u.type.startsWith("video/"))return;const f=await y(u,{folder:"videos",maxSizeMB:100,allowVideo:!0});f&&_(f)},C=async()=>{r&&(await S(r),_(null))};return e.jsxs("div",{className:re("relative rounded-xl border-2 border-dashed transition-all overflow-hidden aspect-video",w?"border-primary bg-primary/10":"border-border hover:border-primary/50",z),onDragOver:h=>{h.preventDefault(),F(!0)},onDragLeave:()=>F(!1),onDrop:j,children:[e.jsx("input",{ref:b,type:"file",accept:"video/mp4,video/webm,video/ogg,video/quicktime",onChange:g,className:"hidden"}),e.jsx(ke,{mode:"wait",children:p?e.jsxs(V.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:"absolute inset-0 flex flex-col items-center justify-center bg-background/80",children:[e.jsx(Je,{className:"w-8 h-8 animate-spin text-primary mb-2"}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:[m,"%"]})]},"uploading"):r?e.jsxs(V.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},className:"absolute inset-0",children:[e.jsx("video",{src:r,className:"w-full h-full object-cover",controls:!0,preload:"metadata"}),e.jsxs("div",{className:"absolute top-2 right-2 flex gap-2",children:[e.jsx("button",{onClick:()=>{var h;return(h=b.current)==null?void 0:h.click()},className:"p-2 rounded-lg bg-black/50 hover:bg-black/70 text-white transition-colors",children:e.jsx(Lt,{className:"w-4 h-4"})}),e.jsx("button",{onClick:C,className:"p-2 rounded-lg bg-destructive/80 hover:bg-destructive text-white transition-colors",children:e.jsx(Be,{className:"w-4 h-4"})})]})]},"video"):e.jsxs(V.button,{initial:{opacity:0}
21,animate:{opacity:1},exit:{opacity:0},type:"button",onClick:()=>{var h;return(h=b.current)==null?void 0:h.click()},className:"absolute inset-0 flex flex-col items-center justify-center gap-2 text-muted-foreground hover:text-foreground transition-colors",children:[e.jsx("div",{className:"w-12 h-12 rounded-xl bg-secondary/50 flex items-center justify-center",children:e.jsx($e,{className:"w-6 h-6"})}),e.jsx("span",{className:"text-sm",children:L}),e.jsx("span",{className:"text-xs text-muted-foreground",children:"MP4, WebM oder MOV (max. 100MB)"})]},"empty")})]})}const Jt=["Warm-up","Technik","Abschluss","Taktik","Fitness","Cool-down","Passspiel","Zweikampf","Koordination","Torwart"],Qt=["⚽","🏃","🥅","📋","💪","🧘","🔄","⚔️","🎯","🛡️","⚡","🪜","🔥","💫","🧤"];function Xt({exercise:r,isOpen:_,onClose:z,onSave:L,mode:b}){var xe;const{user:w}=qe(),F=w&&r&&r.user_id===w.id,[y,S]=a.useState(b),[p,m]=a.useState(!1),[g,j]=a.useState(""),[C,h]=a.useState("Technik"),[u,f]=a.useState("⚽"),[D,O]=a.useState(""),[A,H]=a.useState(15),[G,Z]=a.useState(""),[T,ce]=a.useState(""),[de,Y]=a.useState(""),[ue,me]=a.useState(""),[he,ae]=a.useState(""),[J,E]=a.useState(null),[Q,K]=a.useState(null),[ee,ne]=a.useState([]);a.useEffect(()=>{r&&(j(r.name),h(r.category),f(r.icon),O(r.description||""),H(r.duration_minutes),Z(r.min_players||""),ce(r.max_players||""),Y(r.materials||""),me(r.setup||""),ae(r.execution||""),E(r.video_url),K(r.image_url),ne(r.age_groups||[])),S(F?b:"view")},[r,b,F]);const ye=i=>{ne(te=>te.includes(i)?te.filter(ve=>ve!==i):[...te,i])},je=async()=>{if(!(!r||!F)){m(!0);try{await L(r.id,{name:g,category:C,icon:u,description:D||null,duration_minutes:A,min_players:G===""?null:G,max_players:T===""?null:T,materials:de||null,setup:ue||null,execution:he||null,video_url:J,image_url:Q,age_groups:ee}),S("view"),z()}finally{m(!1)}}};return r?e.jsx(ke,{children:_&&e.jsx(V.div,{initial:{opacity:0}
21,animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm flex items-start sm:items-center justify-center p-4 overflow-y-auto",onClick:z,children:e.jsxs(V.div,{initial:{opacity:0,scale:.95,y:20},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.95,y:20},onClick:i=>i.stopPropagation(),className:"bg-card border border-border rounded-2xl shadow-xl w-full max-w-2xl my-4 sm:my-0 max-h-[calc(100vh-2rem)] overflow-hidden flex flex-col",children:[e.jsxs("div",{className:"p-6 border-b border-border bg-gradient-to-r from-primary/10 to-transparent flex-shrink-0",children:[r.creator_name&&e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsxs(Dt,{className:"w-8 h-8",children:[r.creator_logo_url?e.jsx(Pt,{src:r.creator_logo_url,alt:r.creator_name}):null,e.jsx(At,{className:"bg-primary/20 text-xs",children:((xe=r.creator_name)==null?void 0:xe.charAt(0))||"T"})]}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:["Erstellt von ",e.jsx("span",{className:"font-medium text-foreground",children:r.creator_name})]})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[y==="edit"?e.jsx("div",{className:"flex flex-wrap gap-1",children:Qt.map(i=>e.jsx("button",{onClick:()=>f(i),className:re("w-8 h-8 rounded-lg flex items-center justify-center text-lg transition-all",u===i?"bg-primary/20 ring-2 ring-primary":"bg-secondary/50 hover:bg-secondary"),children:i},i))}):e.jsx("div",{className:"w-12 h-12 rounded-xl bg-primary/20 flex items-center justify-center text-2xl",children:r.icon}),y==="edit"?e.jsx(I,{value:g,onChange:i=>j(i.target.value),className:"text-lg font-bold",placeholder:"Übungsname"}):e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold text-foreground",children:r.name}),e.jsx("span",{className:"text-sm text-primary",children:r.category})]})]}),e.jsx("button",{onClick:z,className:"p-2 rounded-lg hover:bg-secondary transition-colors",children:e.jsx(Be,{className:"w-5 h-5 text-muted-foreground"})})]})]}),e.jsxs("div",{className:"p-6 overflow-y-auto flex-1 space-y-6",children:[(r.image_url||y==="edit")&&e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:[e.jsx(lt,{className:"w-4 h-4 text-primary"}),"Übungsbild"]}),y==="edit"?e.jsx(xt,{value:Q,onChange:K,folder:"exercises",placeholder:"Bild der Übung hochladen",className:"max-w-md"}):Q?e.jsx("div",{className:"rounded-xl overflow-hidden border border-border",children:e.jsx("img",{src:Q,alt:r.name,className:"w-full max-h-80 object-contain bg-secondary/30"})}):null]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 p-3 rounded-xl bg-secondary/50 border border-border",children:[e.jsx(_e,{className:"w-4 h-4 text-primary"}),y==="edit"?e.jsx(I,{type:"number",value:A,onChange:i=>H(Number(i.target.value)),className:"h-6 w-16 text-sm",min:1}):e.jsxs("span",{className:"text-sm font-medium text-foreground",children:[r.duration_minutes," min"]})]}),e.jsxs("div",{className:"flex items-center gap-2 p-3 rounded-xl bg-secondary/50 border border-border",children:[e.jsx(Ge,{className:"w-4 h-4 text-primary"}),y==="edit"?e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(I,{type:"number",value:G,onChange:i=>Z(i.target.value?Number(i.target.value):""),className:"h-6 w-12 text-sm",placeholder:"Min",min:1}),e.jsx("span",{className:"text-muted-foreground",children:"-"}),e.jsx(I,{type:"number",value:T,onChange:i=>ce(i.target.value?Number(i.target.value):""),className:"h-6 w-12 text-sm",placeholder:"Max",min:1})]}):e.jsx("span",{className:"text-sm font-medium text-foreground",children:r.min_players||r.max_players?`${r.min_players||"?"} - ${r.max_players||"?"} Spieler`:"Flexibel"})]}),y==="edit"&&e.jsxs("div",{className:"col-span-2 flex items-center gap-2 p-3 rounded-xl bg-secondary/50 border border-border",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"Kategorie:"}),e.jsx("select",{value:C,onChange:i=>h(i.target.value),className:"flex-1 bg-transparent text-sm font-medium text-foreground focus:outline-none",children:Jt.map(i=>e.jsx("option",{value:i,children:i},i))})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:"📝 Beschreibung"}),y==="edit"?e.jsx(oe,{value:D,onChange:i=>O(i.target.value),placeholder:"Kurze Beschreibung der Übung...",className:"min-h-[80px]"}):e.jsx("p",{className:"text-sm text-muted-foreground bg-secondary/30 rounded-xl p-4",children:r.description||"Keine Beschreibung vorhanden"})]}),e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:[e.jsx(yt,{className:"w-4 h-4 text-primary"}),"Material"]}),y==="edit"?e.jsx(oe,{value:de,onChange:i=>Y(i.target.value),placeholder:"z.B. 4 Hütchen, 2 Bälle, Leibchen...",className:"min-h-[60
21px]"}):e.jsx("p",{className:"text-sm text-muted-foreground bg-secondary/30 rounded-xl p-4",children:r.materials||"Kein Material angegeben"})]}),e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:[e.jsx(ot,{className:"w-4 h-4 text-primary"}),"Aufbau / Platzvorbereitung"]}),y==="edit"?e.jsx(oe,{value:ue,onChange:i=>me(i.target.value),placeholder:"z.B. Quadrat 10x10m mit 4 Hütchen markieren...",className:"min-h-[80px]"}):e.jsx("p",{className:"text-sm text-muted-foreground bg-secondary/30 rounded-xl p-4",children:r.setup||"Kein Aufbau angegeben"})]}),e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:[e.jsx(gt,{className:"w-4 h-4 text-primary"}),"Durchführung"]}),y==="edit"?e.jsx(oe,{value:he,onChange:i=>ae(i.target.value),placeholder:"Detaillierte Beschreibung der Durchführung...",className:"min-h-[100px]"}):e.jsx("p",{className:"text-sm text-muted-foreground bg-secondary/30 rounded-xl p-4 whitespace-pre-wrap",children:r.execution||"Keine Durchführung angegeben"})]}),e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:[e.jsx(Re,{className:"w-4 h-4 text-primary"}),"Altersgruppen"]}),y==="edit"?e.jsx("div",{className:"flex flex-wrap gap-2",children:Me.map(i=>e.jsx("button",{type:"button",onClick:()=>ye(i),className:re("px-3 py-1.5 rounded-lg text-sm font-medium transition-all",ee.includes(i)?"bg-primary text-primary-foreground":"bg-secondary/50 hover:bg-secondary text-muted-foreground"),children:i},i))}):e.jsx("div",{className:"flex flex-wrap gap-2",children:r.age_groups&&r.age_groups.length>0?r.age_groups.map(i=>e.jsx("span",{className:"px-3 py-1 rounded-lg text-sm font-medium bg-primary/20 text-primary",children:i},i)):e.jsx("p",{className:"text-sm text-muted-foreground",children:"Keine Altersgruppen angegeben"})})]}),e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold text-foreground mb-2 flex items-center gap-2",children:[e.jsx($e,{className:"w-4 h-4 text-primary"}),"Video"]}),y==="edit"?e.jsx(vt,{value:J,onChange:E,placeholder:"Übungsvideo hochladen"}):J?e.jsx("div",{className:"rounded-xl overflow-hidden border border-border",children:e.jsx("video",{src:J,controls:!0,className:"w-full aspect-video",preload:"metadata"})}):e.jsx("p",{className:"text-sm text-muted-foreground bg-secondary/30 rounded-xl p-4",children:"Kein Video vorhanden"})]})]}),e.jsx("div",{className:"flex items-center justify-between p-6 border-t border-border bg-secondary/20 flex-shrink-0",children:y==="view"?e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:"outline",onClick:z,children:"Schließen"}),F?e.jsx(B,{onClick:()=>S("edit"),children:"Bearbeiten"}):e.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(wt,{className:"w-4 h-4"}),"Nur vom Ersteller bearbeitbar"]})]}):e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:"outline",onClick:z,children:"Abbrechen"}),e.jsx(B,{onClick:je,disabled:p||ee.length===0,children:p?e.jsx(e.Fragment,{children:"Speichere..."}):e.jsxs(e.Fragment,{children:[e.jsx(pt,{className:"w-4 h-4 mr-2"}),"Speichern"]})})]})})]})})}):null}const Ee=["Warm-up","Technik","Abschluss","Taktik","Fitness","Co
21ol-down","Passspiel","Zweikampf","Koordination","Torwart","Spielformen","Challenges"],Ue={"Warm-up":"🏃",Technik:"⚽",Abschluss:"🥅",Taktik:"📋",Fitness:"💪","Cool-down":"🧘",Passspiel:"🔄",Zweikampf:"⚔️",Koordination:"🪜",Torwart:"🧤",Spielformen:"🎮",Challenges:"🏆"},Yt=["⚽","🏃","🥅","📋","💪","🧘","🔄","⚔️","🎯","🛡️","⚡","🪜","🔥","💫","🧤"];function es({exercises:r,onAddExercise:_,onDeleteExercise:z,onOpenExercise:L,onEditExercise:b,draggedExercise:w,onDragStart:F,onDragEnd:y,weekSessions:S=[],onAddToSession:p}){const{user:m}=qe(),[g,j]=a.useState(""),[C,h]=a.useState(!1),[u,f]=a.useState(!1),[D,O]=a.useState("age"),[A,H]=a.useState(null),[G,Z]=a.useState(""),[T,ce]=a.useState("Technik"),[de,Y]=a.useState("⚽"),[ue,me]=a.useState(15),[he,ae]=a.useState(""),[J,E]=a.useState(""),[Q,K]=a.useState(""),[ee,ne]=a.useState(""),[ye,je]=a.useState(""),[xe,i]=a.useState(""),[te,ve]=a.useState(null),[De,Fe]=a.useState(null),[Ne,Pe]=a.useState([]),[ge,Ae]=a.useState(new Set(Ee)),[Te,Ie]=a.useState(new Set(Me)),[t,o]=a.useState(null),[v,k]=a.useState(null),[U,q]=a.useState(!1),[n,R]=a.useState(null),$=a.useCallback(s=>{if(S.length===0){W.info("Keine Trainings in dieser Woche vorhanden");return}R(s),q(!0)},[S]),ie=s=>{n&&p&&(p(s,n),W.success("Übung hinzugefügt!")),q(!1),R(null)},x=()=>{Z(""),ce("Technik"),Y("⚽"),me(15),ae(""),E(""),K(""),ne(""),je(""),i(""),ve(null),Fe(null),Pe([]),k(null)},we=s=>{Pe(l=>l.includes(s)?l.filter(d=>d!==s):[...l,s])},Qe=s=>{const l=s.toLowerCase().trim(),d=r.find(M=>M.name.toLowerCase().trim()===l);k(d?`Übung "${d.name}" existiert bereits in ${d.category}`:null)},Se=a.useMemo(()=>{let s=r;if(t&&(s=s.filter(l=>l.category===t)),A&&(s=s.filter(l=>{var d;return(d=l.age_groups)==null?void 0:d.includes(A)})),g.trim()){const l=g.toLowerCase();s=s.filter(d=>{var M;return d.name.toLowerCase().includes(l)||d.category.toLowerCase().includes(l)||((M=d.description)==null?void 0:M.toLowerCase().includes(l))})}return s},[r,g,t,A]),pe=a.useMemo(()=>{const s={};return Ee.forEach(l=>{const d=Se.filter(M=>M.category===l);d.length>0&&(s[l]=d)}),s},[Se]),fe=a.useMemo(()=>{const s={};return Me.forEach(l=>{const d=Se.filter(M=>{var X;return(X=M.age_groups)==null?void 0:X.includes(l)});if(d.length>0){const M={};Ee.forEach(X=>{const Xe=d.filter(Nt=>Nt.category===X);Xe.length>0&&(M[X]=Xe)}),Object.keys(M).length>0&&(s[l]=M)}}),s},[Se]),Ce=s=>{const l=new Set(ge);l.has(s)?l.delete(s):l.add(s),Ae(l)},c=s=>{const l=new Set(Te);l.has(s)?l.delete(s):l.add(s),Ie(l)},P=s=>{ce(s),Y(Ue[s]||"⚽")},N=async()=>{if(!G.trim()){W.error("Bitte gib einen Namen ein");return}const s=G.toLowerCase().trim(),l=r.find(d=>d.name.toLowerCase().trim()===s);if(l){W.error(`Übung "${l.name}" existiert bereits in ${l.category}`);return}f(!0);try{await _({name:G.trim(),category:T,icon:de,duration_minutes:ue,description:he.trim()||null,min_players:J===""?null:J,max_players:Q===""?null:Q,materials:ee.trim()||null,setup:ye.trim()||null,execution:xe.trim()||null,video_url:te,image_url:De,age_groups:Ne}),x(),h(!1)}finally{f(!1)}};return e.jsxs(V.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.25},className:"rounded-2xl border border-border bg-gradient-card p-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-4 mb-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold text-foreground",children:"Übungsbibliothek"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[r.length," Übungen • Drag & Drop zum Planen"]})]}),e.jsxs(B,{variant:"outline",size:"sm",onClick:()=>h(!C),children:[e.jsx(ct,{className:"w-4 h-4 mr-2"}),"Neue Übung"]})]}),e.jsxs("div",{className:"flex flex-col gap-3 mb-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(B,{variant:D==="age"?"default":"outline",size:"sm",onClick:()=>O("age"),children:[e.jsx(Re,{className:"w-4 h-4 mr-2"}),"Nach Altersgruppe"]}),e.jsxs(B,{variant:D==="category"?"default":"outline",size:"sm",onClick:()=>O("category"),children:[e.jsx(Rt,{className:"w-4 h-4 mr-2"}),"Nach Kategorie"]})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ve,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(I,{value:g,onChange:s=>j(s.target.value),placeholder:"Übungen suchen...",className:"pl-9"}),g&&e.jsx("button",{onClick:()=>j(""),className:"absolute right-3 top-1/2 -translate-y-1/2",children:e.jsx(Be,{className:"w-4 h-4 text-muted-foreground hover:text-foreground"})})]}),e.jsx("div",{className:"flex gap-2 overflow-x-auto pb-2 sm:pb-0",children:D==="age"?e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:A===null?"default":"outline",size:"sm",onClick:()=>H(null),className:"whitespace-nowrap",children:"Alle"}),Me.slice(5,10).map(s=>e.jsx(B,{variant:A===s?"default":"outline",size:"sm",onClick:()=>H(A===s?null:s),className:"whitespace-nowrap",children:s},s))]}):e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:t===null?"default":"outline",size:"sm",onClick:()=>o(null),className:"whitespace-nowrap",children:"Alle"}),Ee.slice(0,4).map(s=>e.jsxs(B,{variant:t===s?"default":"outline",size:"sm",onClick:()=>o(t===s?null:s),className:"whitespace-nowrap",children:[Ue[s]," ",s]},s))]})})]})]}),e.jsx(ke,{children:C&&e.jsxs(V.div,{initial:{opacity:0,height:0}
21,animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},className:"mb-4 p-5 rounded-xl bg-card border border-border shadow-lg",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsx("h4",{className:"font-semibold text-foreground",children:"Neue Übung erstellen"}),e.jsx("button",{onClick:()=>{h(!1),x()},className:"p-1 rounded hover:bg-secondary",children:e.jsx(Be,{className:"w-4 h-4 text-muted-foreground"})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e.jsxs("div",{className:"md:col-span-1",children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:"Name *"}),e.jsx(I,{value:G,onChange:s=>{Z(s.target.value),Qe(s.target.value)},placeholder:"z.B. Passquadrat",className:re(v&&"border-destructive")}),v&&e.jsxs("div",{className:"flex items-center gap-1 mt-1 text-xs text-destructive",children:[e.jsx(St,{className:"w-3 h-3"}),v]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:"Kategorie"}),e.jsx("select",{value:T,onChange:s=>P(s.target.value),className:"w-full px-3 py-2 rounded-lg bg-background border border-border text-foreground",children:Ee.map(s=>e.jsxs("option",{value:s,children:[Ue[s]," ",s]},s))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:"Icon"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:Yt.map(s=>e.jsx("button",{type:"button",onClick:()=>Y(s),className:re("w-7 h-7 rounded flex items-center justify-center text-sm transition-all",de===s?"bg-primary/20 ring-2 ring-primary":"bg-secondary/50 hover:bg-secondary"),children:s},s))})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(_e,{className:"w-3 h-3"})," Dauer (min)"]}),e.jsx(I,{type:"number",value:ue,onChange:s=>me(Number(s.target.value)),min:1})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(Ge,{className:"w-3 h-3"})," Min. Spieler"]}),e.jsx(I,{type:"number",value:J,onChange:s=>E(s.target.value?Number(s.target.value):""),placeholder:"-",min:1})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(Ge,{className:"w-3 h-3"})," Max. Spieler"]}),e.jsx(I,{type:"number",value:Q,onChange:s=>K(s.target.value?Number(s.target.value):""),placeholder:"-",min:1})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-muted-foreground mb-1 block",children:"📝 Beschreibung"}),e.jsx(oe,{value:he,onChange:s=>ae(s.target.value),placeholder:"Kurze Beschreibung der Übung...",className:"min-h-[60
21px]"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(yt,{className:"w-3 h-3"})," Material"]}),e.jsx(oe,{value:ee,onChange:s=>ne(s.target.value),placeholder:"z.B. 4 Hütchen, 2 Bälle, Leibchen...",className:"min-h-[50px]"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(ot,{className:"w-3 h-3"})," Aufbau / Platzvorbereitung"]}),e.jsx(oe,{value:ye,onChange:s=>je(s.target.value),placeholder:"z.B. Quadrat 10x10m mit 4 Hütchen markieren...",className:"min-h-[60px]"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(gt,{className:"w-3 h-3"})," Durchführung"]}),e.jsx(oe,{value:xe,onChange:s=>i(s.target.value),placeholder:"Detaillierte Beschreibung der Durchführung...",className:"min-h-[80px]"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1",children:[e.jsx(Re,{className:"w-3 h-3"})," Geeignete Altersgruppen *"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:Me.map(s=>e.jsx("button",{type:"button",onClick:()=>we(s),className:re("px-3 py-1.5 rounded-lg text-sm font-medium transition-all",Ne.includes(s)?"bg-primary text-primary-foreground":"bg-secondary/50 hover:bg-secondary text-muted-foreground"),children:s},s))}),Ne.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Wähle mindestens eine Altersgruppe"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx(lt,{className:"w-3 h-3"})," Bild (optional)"]}),e.jsx(xt,{value:De,onChange:Fe,folder:"exercises",placeholder:"Übungsbild hochladen",className:"max-w-md",aspectRatio:"wide"})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"text-xs font-medium text-muted-foreground mb-1 flex items-center gap-1",children:[e.jsx($e,{className:"w-3 h-3"})," Video (optional)"]}),e.jsx(vt,{value:te,onChange:ve,placeholder:"Übungsvideo hochladen",className:"max-w-md"})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2 border-t border-border",children:[e.jsx(B,{variant:"outline",onClick:()=>{h(!1),x()},children:"Abbrechen"}),e.jsx(B,{onClick:N,disabled:!!v||!G.trim()||Ne.length===0||u,children:u?e.jsxs(e.Fragment,{children:[e.jsx(Je,{className:"w-4 h-4 mr-2 animate-spin"}),"Speichern..."]}):e.jsxs(e.Fragment,{children:[e.jsx(pt,{className:"w-4 h-4 mr-2"}),"Übung erstellen"]})})]})]})]})}),e.jsx("div",{className:"space-y-3 max-h-[500px] overflow-y-auto pr-1",children:D==="age"?Object.keys(fe).length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:[e.jsx(Ve,{className:"w-8 h-8 mx-auto mb-2 opacity-50"}),e.jsx("p",{children:"Keine Übungen gefunden"})]}):Object.entries(fe).map(([s,l])=>e.jsxs("div",{className:"rounded-xl border border-border overflow-hidden",children:[e.jsxs("button",{onClick:()=>c(s),className:"w-full flex items-center justify-between p-3 bg-primary/10 hover:bg-primary/20 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Re,{className:"w-5 h-5 text-primary"}),e.jsx("span",{className:"font-semibold text-foreground",children:s}),e.jsxs("span",{className:"text-xs text-muted-foreground bg-secondary px-2 py-0.5 rounded-full",children:[Object.values(l).flat().length," Übungen"]})]}),Te.has(s)?e.jsx(Oe,{className:"w-4 h-4 text-muted-foreground"}):e.jsx(Le,{className:"w-4 h-4 text-muted-foreground"})]}),e.jsx(ke,{children:Te.has(s)&&e.jsx(V.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},className:"overflow-hidden",children:e.jsx("div",{className:"p-2 space-y-2",children:Object.entries(l).map(([d,M])=>e.jsxs("div",{className:"rounded-lg border border-border/50 overflow-hidden",children:[e.jsxs("button",{onClick:()=>Ce(`${s}-${d}`),className:"w-full flex items-center justify-between p-2 bg-secondary/30 hover:bg-secondary/50 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm",children:Ue[d]}),e.jsx("span",{className:"text-sm font-medium text-foreground",children:d}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["(",M.length,")"]})]}),ge.has(`${s}-${d}`)?e.jsx(Oe,{className:"w-3 h-3 text-muted-foreground"}):e.jsx(Le,{className:"w-3 h-3 text-muted-foreground"})]}),e.jsx(ke,{children:ge.has(`${s}-${d}`)&&e.jsx(V.div,{initial:{height:0,opacity:0}
21,animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},className:"overflow-hidden",children:e.jsx("div",{className:"p-2 grid grid-cols-1 gap-1",children:M.map(X=>e.jsx(at,{exercise:X,userId:m==null?void 0:m.id,draggedExercise:w,onDragStart:F,onDragEnd:y,onOpenExercise:L,onEditExercise:b,onDeleteExercise:z,onLongPress:S.length>0?$:void 0},X.id))})})})]},`${s}-${d}`))})})})]},s)):Object.keys(pe).length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:[e.jsx(Ve,{className:"w-8 h-8 mx-auto mb-2 opacity-50"}),e.jsx("p",{children:"Keine Übungen gefunden"})]}):Object.entries(pe).map(([s,l])=>e.jsxs("div",{className:"rounded-xl border border-border overflow-hidden",children:[e.jsxs("button",{onClick:()=>Ce(s),className:"w-full flex items-center justify-between p-3 bg-secondary/30 hover:bg-secondary/50 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-lg",children:Ue[s]}),e.jsx("span",{className:"font-medium text-foreground",children:s}),e.jsx("span",{className:"text-xs text-muted-foreground bg-secondary px-2 py-0.5 rounded-full",children:l.length})]}),ge.has(s)?e.jsx(Oe,{className:"w-4 h-4 text-muted-foreground"}):e.jsx(Le,{className:"w-4 h-4 text-muted-foreground"})]}),e.jsx(ke,{children:ge.has(s)&&e.jsx(V.div,{initial:{height:0,opacity:0},animate:{height:"auto",opacity:1},exit:{height:0,opacity:0},className:"overflow-hidden",children:e.jsx("div",{className:"p-2 grid grid-cols-1 sm:grid-cols-2 gap-2",children:l.map(d=>e.jsx(at,{exercise:d,userId:m==null?void 0:m.id,draggedExercise:w,onDragStart:F,onDragEnd:y,onOpenExercise:L,onEditExercise:b,onDeleteExercise:z,onLongPress:S.length>0?$:void 0},d.id))})})})]},s))}),e.jsx(dt,{open:U,onOpenChange:q,children:e.jsxs(ut,{className:"sm:max-w-md",children:[e.jsx(mt,{children:e.jsxs(ht,{className:"flex items-center gap-2",children:[e.jsx(bt,{className:"w-5 h-5 text-primary"}),"Zu welchem Training hinzufügen?"]})}),e.jsxs("div",{className:"space-y-2 mt-4",children:[n&&e.jsxs("p",{className:"text-sm text-muted-foreground mb-4",children:["Übung: ",e.jsx("span",{className:"font-medium text-foreground",children:n})]}),S.length===0?e.jsx("p",{className:"text-center text-muted-foreground py-4",children:"Keine Trainings in dieser Woche"}):S.map(s=>e.jsx("button",{onClick:()=>ie(s.id),className:"w-full p-3 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-all text-left",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-foreground",children:s.title}),e.jsxs("div",{className:"flex items-center gap-3 text-xs text-muted-foreground mt-1",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(_e,{className:"w-3 h-3"}),s.time]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(He,{className:"w-3 h-3"}),s.location]})]})]}),e.jsx("span",{className:"text-xs font-medium text-primary bg-primary/10 px-2 py-1 rounded",children:s.dayLabel})]})},s.id))]})]})})]})}function at({exercise:r,userId:_,draggedExercise:z,onDragStart:L,onDragEnd:b,onOpenExercise:w,onEditExercise:F,onDeleteExercise:y,onLongPress:S}){const p=_&&r.user_id===_,m=a.useRef(null),g=a.useRef(!1),j=()=>{g.current=!1,m.current=setTimeout(()=>{g.current=!0,S&&(navigator.vibrate&&navigator.vibrate(50),S(r.name))},500)},C=()=>{m.current&&(clearTimeout(m.current),m.current=null)},h=()=>{m.current&&(clearTimeout(m.current),m.current=null)};return e.jsxs("div",{draggable:!0,onDragStart:()=>L(r.name),onDragEnd:b,onTouchStart:j,onTouchEnd:C,onTouchMove:h,onContextMenu:u=>{S&&(u.preventDefault(),S(r.name))},className:re("px-3 py-2 rounded-lg bg-card border border-border hover:border-primary/30 cursor-grab active:cursor-grabbing transition-all flex items-center gap-2 group touch-manipulation",z===r.name&&"opacity-50 ring-2 ring-primary"),children:[e.jsx(Ht,{className:"w-3 h-3 text-muted-foreground flex-shrink-0"}),e.jsx("span",{className:"text-base flex-shrink-0",children:r.icon}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-foreground truncate",children:r.name}),e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[r.duration_minutes,"min"]}),r.video_url&&e.jsx("span",{className:"flex items-center gap-0.5 text-primary",children:e.jsx($e,{className:"w-3 h-3"})}),r.age_groups&&r.age_groups.length>0&&e.jsxs("span",{className:"text-primary/70",children:[r.age_groups.slice(0,3).join(", "),r.age_groups.length>3&&"..."]})]})]}),e.jsxs("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity flex-shrink-0",children:[S&&e.jsx("button",{onClick:u=>{u.stopPropagation(),S(r.name)},className:"p-1 rounded hover:bg-primary/20 transition-colors md:hidden",title:"Zu Training hinzufügen",children:e.jsx(bt,{className:"w-3.5 h-3.5 text-primary"})}),e.jsx("button",{onClick:u=>{u.stopPropagation(),w(r)},className:"p-1 rounded hover:bg-secondary transition-colors",title:"Details anzeigen",children:e.jsx(kt,{className:"w-3.5 h-3.5 text-primary"})}),p&&e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:u=>{u.stopPropagation(),F(r)},className:"p-1 rounded hover:bg-primary/20 transition-colors",title:"Übung bearbeiten",children:e.jsx(Kt,{className:"w-3.5 h-3.5 text-primary"})}),e.jsx("button",{onClick:u=>
21{u.stopPropagation(),y(r.id)},className:"p-1 rounded hover:bg-destructive/20 transition-colors",title:"Übung löschen",children:e.jsx(ft,{className:"w-3.5 h-3.5 text-destructive"})})]})]})]})}const ts=["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"];function ss({isOpen:r,onClose:_,onSave:z,dayOfWeek:L,weekOffset:b,existingSession:w,sessionDate:F}){const[y,S]=a.useState("Training"),[p,m]=a.useState("18:00"),[g,j]=a.useState("90 min"),[C,h]=a.useState("Hauptplatz"),[u,f]=a.useState(!1),[D,O]=a.useState(""),[A,H]=a.useState("");a.useEffect(()=>{r&&(w?(S(w.title),m(w.time),j(w.duration),h(w.location),f(w.is_recurring),O(w.recurrence_start_date||""),H(w.recurrence_end_date||"")):(S("Training"),m("18:00"),j("90 min"),h("Hauptplatz"),f(!1),O(le(F,"yyyy-MM-dd")),H("")))},[r,w,F]);const G=T=>{T.preventDefault(),z({title:y,time:p,duration:g,location:C,is_recurring:u,recurrence_start_date:u?D:null,recurrence_end_date:u&&A?A:null}),_()},Z=ts[L];return e.jsx(dt,{open:r,onOpenChange:T=>!T&&_(),children:e.jsxs(ut,{className:"sm:max-w-md",children:[e.jsx(mt,{children:e.jsxs(ht,{className:"flex items-center gap-2",children:[e.jsx(Ze,{className:"w-5 h-5 text-team-primary"}),w?"Training bearbeiten":"Neues Training"]})}),e.jsxs("form",{onSubmit:G,className:"space-y-5",children:[e.jsxs("div",{className:"p-3 rounded-lg bg-team-primary/10 border border-team-primary/20",children:[e.jsx("p",{className:"font-medium text-foreground",children:Z}),e.jsx("p",{className:"text-sm text-muted-foreground",children:le(F,"dd. MMMM yyyy",{locale:ze})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(be,{htmlFor:"title",children:"Trainingsname"}),e.jsx(I,{id:"title",value:y,onChange:T=>S(T.target.value),placeholder:"z.B. Techniktraining, Hallentraining...",required:!0})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(be,{htmlFor:"time",className:"flex items-center gap-1.5",children:[e.jsx(_e,{className:"w-3.5 h-3.5"}),"Uhrzeit"]}),e.jsx(I,{id:"time",type:"time",value:p,onChange:T=>m(T.target.value),required:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(be,{htmlFor:"duration",children:"Dauer"}),e.jsx(I,{id:"duration",value:g,onChange:T=>j(T.target.value),placeholder:"z.B. 90 min",required:!0})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(be,{htmlFor:"location",className:"flex items-center gap-1.5",children:[e.jsx(He,{className:"w-3.5 h-3.5"}),"Ort"]}),e.jsx(I,{id:"location",value:C,onChange:T=>h(T.target.value),placeholder:"z.B. Hauptplatz, Sporthalle...",required:!0})]}),e.jsxs("div",{className:"p-4 rounded-lg border border-border bg-secondary/30 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(jt,{className:"w-4 h-4 text-team-primary"}),e.jsx(be,{htmlFor:"recurring",className:"cursor-pointer",children:"Wiederkehrend"})]}),e.jsx(_t,{id:"recurring",checked:u,onCheckedChange:f})]}),u&&e.jsxs("div",{className:"space-y-3 pt-2 border-t border-border",children:[e.jsxs("p",{className:"text-xs text-muted-foreground flex items-center gap-1.5",children:[e.jsx($t,{className:"w-3.5 h-3.5"}),"Training findet jeden ",Z," statt"]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(be,{htmlFor:"startDate",className:"text-xs",children:"Von"}),e.jsx(I,{id:"startDate",type:"date",value:D,onChange:T=>O(T.target.value),required:u})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(be,{htmlFor:"endDate",className:"text-xs",children:"Bis (optional)"}),e.jsx(I,{id:"endDate",type:"date",value:A,onChange:T=>H(T.target.value),min:D})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Ohne Enddatum läuft das Training unbegrenzt weiter."})]})]}),e.jsxs("div",{className:"flex gap-3 pt-2",children:[e.jsx(B,{type:"button",variant:"outline",onClick:_,className:"flex-1",children:"Abbrechen"}),e.jsx(B,{type:"submit",variant:"premium",className:"flex-1",children:w?"Speichern":"Training erstellen"})]})]})]})})}const nt=["Mo","Di","Mi","Do","Fr","Sa","So"],it=["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"];function vs(){Ot("training");const[r,_]=a.useState(0),[z,L]=a.useState(""),[b,w]=a.useState(""),[F,y]=a.useState(null),[S,p]=a.use
21State(null),[m,g]=a.useState(!1),[j,C]=a.useState("view"),[h,u]=a.useState(!1),[f,D]=a.useState(0),[O,A]=a.useState(null),{isLoading:H,generateTrainingPlan:G}=Mt(),{exercises:Z,addExercise:T,updateExercise:ce,deleteExercise:de}=qt(),{sessions:Y,addSession:ue,updateSession:me,deleteSession:he,addExerciseToSession:ae,removeExerciseFromSession:J}=Bt(),{team:E}=Ft(),{games:Q}=It(),K=a.useMemo(()=>{const o=Ye(et(new Date,r),{weekStartsOn:1});return Array.from({length:7},(v,k)=>tt(o,k))},[r]),ee=t=>{const o=K[t];return Q.filter(v=>{const k=We(v.game_date);return rt(k,o)})},ne=a.useMemo(()=>{const t=K[0],o=K[6];return`${le(t,"dd.MM.",{locale:ze})} - ${le(o,"dd.MM.yyyy",{locale:ze})}`},[K]),ye=t=>{p(t),C("view"),g(!0)},je=t=>{p(t),C("edit"),g(!0)},xe=async(t,o)=>{await ce(t,o)},i=t=>{const o=K[t];return Y.filter(v=>{if(v.day_of_week!==t)return!1;if(v.is_recurring){const R=v.recurrence_start_date?We(v.recurrence_start_date):null,$=v.recurrence_end_date?We(v.recurrence_end_date):null;return!(R&&o<R||$&&o>$)}const k=We(v.created_at),U=Ye(k,{weekStartsOn:1}),q=et(U,v.week_offset),n=tt(q,v.day_of_week);return rt(n,o)})},te=(t,o)=>{D(t),A(o||null),u(!0)},ve=async t=>{O?await me(O.id,{title:t.title,time:t.time,duration:t.duration,location:t.location,is_recurring:t.is_recurring,recurrence_start_date:t.recurrence_start_date,recurrence_end_date:t.recurrence_end_date}):await ue(f,t.is_recurring?0:r,{title:t.title,time:t.time,duration:t.duration,location:t.location,is_recurring:t.is_recurring,recurrence_start_date:t.recurrence_start_date,recurrence_end_date:t.recurrence_end_date}),A(null)},De=async t=>{await he(t)},Fe=async()=>{if(!z.trim()){W.error("Bitte gib eine Beschreibung ein");return}const t=await G(z);t&&(w(t),W.success("Trainingsplan erstellt!")),L("")},Ne=async t=>await T(t),Pe=t=>{y(t)},ge=()=>{y(null)},Ae=async t=>{F&&(await ae(t,F),y(null))},Te=()=>{const t=[];for(const k of Y){if(!i(k.day_of_week).includes(k))continue;const q=K[k.day_of_week],[n,R]=k.time.split(":").map(Number),$=new Date(q);$.setHours(n,R,0,0);const ie=k.duration.match(/(\d+)/),x=ie?parseInt(ie[1]):90,we=new Date($.getTime()+x*60*1e3);t.push({title:k.title,startDate:$,endDate:we,location:k.location||void 0,description:k.exercises.length>0?`Übungen: ${k.exercises.join(", ")}`:void 0})}if(t.length===0){W.error("Keine Trainings in dieser Woche zum Exportieren");return}const o=(E==null?void 0:E.name)||"Training",v=Ut(t,`${o} - Training`);zt(v,`training-${o.toLowerCase().replace(/\s+/g,"-")}.ics`),W.success("Trainingsplan als iCal exportiert!")},Ie=async()=>{try{const t=new Vt,o=t.internal.pageSize.getWidth(),v=t.internal.pageSize.getHeight(),k=(E==null?void 0:E.primary_color)||"#0ea5e9",U=c=>c?c.replace(/[\u{1F300}-\u{1F9FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F600}-\u{1F64F}]|[\u{1F680}-\u{1F6FF}]|[\u{2B50}]|[\u{23F0}-\u{23FF}]|[\u{1F100}-\u{1F1FF}]|[\u{1F200}-\u{1F2FF}]|[\u{E000}-\u{F8FF}]|[\u{FE00}-\u{FEFF}]|[\u{1FA00}-\u{1FAFF}]|[\u{231A}-\u{231B}]|[\u{23E9}-\u{23F3}]|[\u{23F8}-\u{23FA}]|[\u{25AA}-\u{25AB}]|[\u{25B6}]|[\u{25C0}]|[\u{25FB}-\u{25FE}]|[\u{2614}-\u{2615}]|[\u{2648}-\u{2653}]|[\u{267F}]|[\u{2693}]|[\u{26A1}]|[\u{26AA}-\u{26AB}]|[\u{26BD}-\u{26BE}]|[\u{26C4}-\u{26C5}]|[\u{26CE}]|[\u{26D4}]|[\u{26EA}]|[\u{26F2}-\u{26F3}]|[\u{26F5}]|[\u{26FA}]|[\u{26FD}]|[\u{2702}]|[\u{2705}]|[\u{2708}-\u{270D}]|[\u{270F}]|[\u{2712}]|[\u{2714}]|[\u{2716}]|[\u{271D}]|[\u{2721}]|[\u{2728}]|[\u{2733}-\u{2734}]|[\u{2744}]|[\u{2747}]|[\u{274C}]|[\u{274E}]|[\u{2753}-\u{2755}]|[\u{2757}]|[\u{2763}-\u{2764}]|[\u{2795}-\u{2797}]|[\u{27A1}]|[\u{27B0}]|[\u{27BF}]|[\u{2934}-\u{2935}]|[\u{2B05}-\u{2B07}]|[\u{2B1B}-\u{2B1C}]|[\u{2B55}]|[\u{3030}]|[\u{303D}]|[\u{3297}]|[\u{3299}]/gu,"").trim():"",n=(c=>{const P=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(c);return P?{r:parseInt(P[1],16),g:parseInt(P[2],16),b:parseInt(P[3],16)}:{r:14,g:165,b:233}})(k),R=async c=>{try{const N=await(await fetch(c)).blob();return new Promise(s=>{const l=new FileReader;l.onloadend=()=>s(l.result),l.onerror=()=>s(null),l.readAsDataURL(N)})}catch{return null}},$=new Set;t.setFillColor(n.r,n.g,n.b),t.rect(0,0,o,45,"F");let ie=0;if(E!=null&&E.logo_url)try{const c=await R(E.logo_url);c&&(t.addImage(c,"PNG",15,8,28,28),ie=15)}catch{console.log("Could not load team logo for PDF")}t.setFontSize(28),t.setFont("helvetica","bold"),t.setTextColor(255,255,255),t.text("TRAININGSPLAN",o/2+ie,22,{align:"center"}),t.setFontSize(14),t.setFont("helvetica","normal"),t.text(ne,o/2+ie,35,{align:"center"}),E!=null&&E.name&&(t.setFontSize(16),t.setFont("helvetica","bold"),t.setTextColor(n.r,n.g,n.b),t.text(U(E.name),o/2,58,{align:"center"}));let x=E!=null&&E.name?72:60;it.forEach((c,P)=>{const N=i(P),s=K[P],l=ee(P);(N.length>0||l.length>0)&&(x>260&&(t.addPage(),x=20),t.setFillColor(n.r,n.g,n.b),t.roundedRect(15,x-5,o-30,10,2,2,"F"),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(255,255,255),t.text(`${c.toUpperCase()} - ${le(s,"dd.MM.yyyy",{locale:ze})}`,20,x+2),x+=12,l.forEach(d=>{t.setFontSize(10),t.setFont("helvetica","bold"),t.setTextColor(n.r,n.g,n.b),t.text(`SPIEL: ${d.is_home_game?"vs":"@"} ${U(d.opponent)}`,20,x),x+=5,t.setFont("helvetica","normal"),t.setTextColor(100,100,100),t.text(`   ${d.game_time||"15:00"} Uhr${d.location?` | ${U(d.location)}`:""}`,20,x),x+=7}
21),N.forEach(d=>{t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(0,0,0),t.text(`${d.time} Uhr - ${U(d.title)}`,20,x),x+=5,t.setFontSize(9),t.setFont("helvetica","normal"),t.setTextColor(100,100,100),t.text(`Dauer: ${U(d.duration)} | Ort: ${U(d.location)}`,25,x),x+=6,d.exercises.length>0&&(t.setFontSize(9),t.setTextColor(60,60,60),t.text("Uebungen:",25,x),x+=4,d.exercises.forEach((M,X)=>{t.text(`  ${X+1}. ${U(M)}`,30,x),$.add(M),x+=4})),x+=4}),x+=4)}),b&&(x>200&&(t.addPage(),x=20),t.setFillColor(n.r,n.g,n.b),t.roundedRect(15,x-5,o-30,10,2,2,"F"),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(255,255,255),t.text("KI-TRAININGSVORSCHLAG",20,x+2),x+=15,t.setFontSize(9),t.setFont("helvetica","normal"),t.setTextColor(0,0,0),t.splitTextToSize(U(b),o-40).forEach(P=>{x>275&&(t.addPage(),x=20),t.text(P,20,x),x+=4}));const we=Z.filter(c=>$.has(c.name)),Se=v-25,pe=(c,P=20)=>c+P>Se?(t.addPage(),20):c,fe=(c,P,N)=>{let s=N;return s=pe(s,25),t.setFillColor(n.r,n.g,n.b),t.roundedRect(15,s,o-30,8,2,2,"F"),t.setFontSize(11),t.setFont("helvetica","bold"),t.setTextColor(255,255,255),t.text(c,20,s+6),s+=14,t.setFontSize(10),t.setFont("helvetica","normal"),t.setTextColor(0,0,0),t.splitTextToSize(U(P),o-40).forEach(d=>{s=pe(s,6),t.text(d,20,s),s+=5}),s+=5,s};if(we.length>0)for(const c of we){t.addPage(),t.setFillColor(n.r,n.g,n.b),t.rect(0,0,o,35,"F");const P=U(c.name);t.setFontSize(20),t.setFont("helvetica","bold"),t.setTextColor(255,255,255),t.text(P.toUpperCase(),o/2,18,{align:"center"}),t.setFontSize(12),t.setFont("helvetica","normal"),t.text(`Kategorie: ${U(c.category)}`,o/2,28,{align:"center"});let N=50;if(c.image_url)try{const s=await R(c.image_url);if(s){N=pe(N,75);const M=(o-100)/2;t.addImage(s,"JPEG",M,N,100,60,void 0,"MEDIUM"),N+=70}}catch{console.log("Could not load exercise image for PDF")}N=pe(N,30),t.setFillColor(245,245,245),t.roundedRect(15,N-5,o-30,25,3,3,"F"),t.setFontSize(10),t.setTextColor(80,80,80),t.text(`Dauer: ${c.duration_minutes} Minuten`,25,N+3),t.text(`Spieler: ${c.min_players||"?"} - ${c.max_players||"?"} Spieler`,25,N+11),c.age_groups&&c.age_groups.length>0&&t.text(`Altersgruppen: ${c.age_groups.join(", ")}`,110,N+3),N+=30,c.description&&(N=fe("BESCHREIBUNG",c.description,N)),c.materials&&(N=fe("MATERIAL",c.materials,N)),c.setup&&(N=fe("AUFBAU",c.setup,N)),c.execution&&(N=fe("DURCHFUEHRUNG",c.execution,N))}const Ce=t.getNumberOfPages();for(let c=1;c<=Ce;c++)t.setPage(c),t.setFontSize(8),t.setTextColor(150,150,150),t.text(`Erstellt mit Trainer Studio | Seite ${c} von ${Ce}`,o/2,290,{align:"center"});t.save("trainingsplan.pdf"),W.success("PDF erfolgreich erstellt!")}catch(t){console.error("PDF Export error:",t),W.error("Fehler beim Erstellen des PDFs")}};return[...new Set(Z.map(t=>t.category))],e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs(V.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},className:"flex flex-col lg:flex-row lg:items-center justify-between gap-4",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-3xl font-bold text-team-secondary-contrast flex items-center gap-3",children:[e.jsx(Ze,{className:"w-8 h-8 text-team-primary"}),"Trainingsplaner"]}),e.jsx("p",{className:"text-muted-foreground",children:"Plane und organisiere deine Trainingseinheiten"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(B,{variant:"outline",onClick:Te,children:[e.jsx(Ze,{className:"w-4 h-4 mr-2"}),"iCal"]}),e.jsxs(B,{variant:"outline",onClick:Ie,children:[e.jsx(Tt,{className:"w-4 h-4 mr-2"}),"PDF"]})]})]}),e.jsxs(V.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},transition:{delay:.1},className:"rounded-2xl border border-team-primary/20 bg-team-primary/5 p-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl bg-team-primary/20 flex items-center justify-center",children:e.jsx(st,{className:"w-5 h-5 text-team-primary"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"font-semibold text-foreground",children:"KI-Trainingsplan"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Lass die KI Übungen vorschlagen"})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:z,onChange:t=>L(t.target.value),placeholder:"z.B. 'Erstelle Übungen für U15 mit Fokus auf Passspiel'",className:"flex-1 px-4 py-3 rounded-xl bg-background border border-ring/20 text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring/50",onKeyDown:t=>t.key==="Enter"&&!H&&Fe(),disabled:H}),e.jsxs(B,{variant:"premium",onClick:Fe,disabled:H,children:[H?e.jsx(Je,{className:"w-4 h-4 mr-2 animate-spin"}):e.jsx(st,{className:"w-4 h-4 mr-2"}),H?"Generiere...":"Generieren"]})]}),b&&e.jsxs("div",{className:"mt-4 p-4 rounded-xl bg-background border border-ring/20",children:[e.jsx("h4",{className:"font-semibold text-foreground mb-2",children:"KI-Trainingsplan:"}),e.jsx("pre",{className:"text-sm text-muted-foreground whitespace-pre-wrap font-sans",children:b})]})]}),e.jsxs(V.div,{initial:{opacity:0,y:10}
21,animate:{opacity:1,y:0},transition:{delay:.15},className:"flex items-center justify-between",children:[e.jsx(B,{variant:"ghost",size:"icon",onClick:()=>_(t=>t-1),children:e.jsx(Ct,{className:"w-5 h-5"})}),e.jsxs("div",{className:"text-center",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground",children:r===0?"Aktuelle Woche":r>0?`In ${r} Woche${r>1?"n":""}`:`Vor ${Math.abs(r)} Woche${Math.abs(r)>1?"n":""}`}),e.jsx("p",{className:"text-sm text-muted-foreground",children:ne})]}),e.jsx(B,{variant:"ghost",size:"icon",onClick:()=>_(t=>t+1),children:e.jsx(Le,{className:"w-5 h-5"})})]}),e.jsx(V.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.2},className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-4 lg:grid-cols-7 gap-3 lg:gap-2",children:nt.map((t,o)=>{const v=K[o],k=ee(o),U=i(o),q=le(v,"yyyy-MM-dd")===le(new Date,"yyyy-MM-dd");return U.length>0||k.length>0,e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"flex items-center justify-center gap-2 lg:block mb-2 lg:mb-0",children:[e.jsxs("div",{className:`text-sm font-medium ${q?"text-primary":"text-muted-foreground"} lg:mb-1`,children:[e.jsx("span",{className:"hidden lg:inline",children:t}),e.jsx("span",{className:"lg:hidden",children:it[o]})]}),e.jsx("div",{className:`text-xs ${q?"text-primary font-medium":"text-muted-foreground/70"} lg:mb-2`,children:le(v,"dd.MM.",{locale:ze})})]}),e.jsxs("div",{className:re("min-h-[120px] lg:min-h-[200px] rounded-xl border-2 border-dashed p-2 transition-all",U.length>0||k.length>0?"border-team-primary/30 bg-team-primary/5":"border-ring/30 hover:border-team-primary/20",F&&"border-team-primary/50 bg-team-primary/10",q&&"ring-2 ring-primary/30"),onDragOver:n=>n.preventDefault(),onDrop:()=>{U.length>0&&Ae(U[0].id)},children:[k.map(n=>e.jsxs("div",{className:"mb-2 p-2 rounded-lg bg-team-primary/10 border border-team-primary/20",children:[e.jsxs("div",{className:"flex items-center gap-1 text-xs text-team-primary font-medium mb-1",children:[e.jsx(Et,{className:"w-3 h-3"}),"Spiel"]}),e.jsxs("p",{className:"text-xs font-medium text-foreground truncate",children:[n.is_home_game?"vs":"@"," ",n.opponent]}),e.jsxs("p",{className:"text-[10px] text-muted-foreground flex items-center gap-1",children:[e.jsx(_e,{className:"w-2.5 h-2.5"}),n.game_time||"15:00"]}),n.location&&e.jsxs("p",{className:"text-[10px] text-muted-foreground flex items-center gap-1",children:[e.jsx(He,{className:"w-2.5 h-2.5"}),n.location]})]},n.id)),U.map(n=>e.jsxs(V.div,{layout:!0,className:re("mb-2 p-2 rounded-lg bg-card border border-ring/20 hover:border-team-primary/30 transition-all group",F&&"ring-2 ring-team-primary/30"),onDragOver:R=>R.preventDefault(),onDrop:R=>{R.stopPropagation(),Ae(n.id)},children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsxs("span",{className:"text-xs text-primary font-medium flex items-center gap-1",children:[e.jsx(_e,{className:"w-3 h-3"}),n.time,n.is_recurring&&e.jsx(jt,{className:"w-2.5 h-2.5 text-team-primary"})]}),e.jsxs("div",{className:"flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx("button",{onClick:()=>te(o,n),children:e.jsx(Gt,{className:"w-3 h-3 text-muted-foreground hover:text-foreground"})}),e.jsx("button",{onClick:()=>De(n.id),children:e.jsx(ft,{className:"w-3 h-3 text-destructive"})})]})]}),e.jsx("p",{className:"text-xs font-medium text-foreground truncate",children:n.title}),e.jsxs("p",{className:"text-[10px] text-muted-foreground flex items-center gap-1",children:[e.jsx(He,{className:"w-2.5 h-2.5"}),n.location]}),n.exercises.length>0&&e.jsx("div",{className:"mt-2 space-y-1",children:n.exercises.map((R,$)=>e.jsxs("div",{className:"flex items-center justify-between text-[10px] bg-secondary/50 rounded px-1.5 py-0.5",children:[e.jsx("span",{className:"truncate",children:R}),e.jsx("button",{onClick:()=>J(n.id,$),className:"opacity-0 group-hover:opacity-100 ml-1",children:e.jsx(Be,{className:"w-2.5 h-2.5 text-destructive"})})]},$))})]},n.id)),e.jsxs("button",{onClick:()=>te(o),className:"w-full p-2 rounded-lg border border-dashed border-border hover:border-primary/50 hover:bg-primary/5 transition-all flex items-center justify-center gap-1 text-muted-foreground hover:text-primary",children:[e.jsx(ct,{className:"w-3 h-3"}),e.jsx("span",{className:"text-xs",children:"Hinzufügen"})]})]})]},t)})}),e.jsx(es,{exercises:Z,onAddExercise:Ne,onDeleteExercise:de,onOpenExercise:ye,onEditExercise:je,draggedExercise:F,onDragStart:Pe,onDragEnd:ge,weekSessions:Array.from({length:7},(t,o)=>i(o).map(v=>({id:v.id,title:v.title,time:v.time,location:v.location||"Hauptplatz",dayLabel:nt[o]}))).flat(),onAddToSession:(t,o)=>{ae(t,o)}}),e.jsx(Xt,{exercise:S,isOpen:m,onClose:()=>g(!1),onSave:xe,mode:j}),e.jsx(ss,{isOpen:h,onClose:()=>{u(!1),A(null)},onSave:ve,dayOfWeek:f,weekOffset:r,existingSession:O,sessionDate:K[f]})]})}export{vs as TrainingPage};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.