From 8377ce03b5bb23fc389ac24ef60e2517dcae96fb Mon Sep 17 00:00:00 2001 From: Benjamin Sutter Date: Mon, 3 Aug 2026 21:42:04 +0200 Subject: [PATCH] feat(team): Kreisdarstellung der Belegschaft und Organigramm-Ansicht MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Setzt die Referenzgrafik «Agenten_Bewirtschaftung_v2» um: die 36 digitalen Mitarbeitenden in konzentrischen Ringen, Kernteam innen und gold gerahmt. DATENBASIS Alle 36 Mitarbeitenden samt Porträts sind aus dem Konzeptdokument extrahiert. Die Stufen stecken bereits in den Quelldaten und decken sich exakt mit den Bereichen: lvl 1 = 7 Kernteam, lvl 2 = 18 Zentrale Dienste, lvl 3 = 7 GB Kommerziell, lvl 4 = 4 GB Wohnen. Auch die Reiterbeschriftungen sind wörtlich übernommen — keine neuen Stufennamen erfunden. Neu getrennt: `AgentDirectoryEntry` trägt die Stammdaten aller 36 für die Kreisdarstellung, `TeamAgent` bleibt das vollständige Dossier der sieben Kernteammitglieder. Für die übrigen 29 werden bewusst keine Aufgaben, Kanäle oder Tätigkeiten erfunden; ein Klick zeigt nur eine Vorschau aus dem Verzeichnis. ABWEICHUNG VOM AUFTRAG Der Auftrag nennt als Kernteam Ferdi, Sami, Leo, Bruno, Reto, Milo, Nora. Referenzgrafik und Konzeptdaten sagen übereinstimmend Ferdi, Sina, Lea, Bruno, Reto, Livia, Nora — dort tragen genau diese sieben `kern: true` und `lvl: 1`. Da der Auftrag die Grafik selbst als verbindlich erklärt und Namen laut §10 kein Primärschlüssel sind, folge ich Grafik und Daten. Sami, Leo und Milo kommen in keiner Quelle vor. OBERFLÄCHE - Teamübersicht: Beschreibungstext und «Demo zurücksetzen» entfernt, Kreis mit kumulativen Stufenreitern direkt unter dem Titel - Personalverwaltung: Umschaltung Dossieransicht / Organigramm über ?view=, Organigramm als oben abgeschnittener Halbkreis mit drehbarem Agentenrad (Ziehen, Touch, Pfeiltasten, Klick), aktiv ist wer unten mittig einrastet - Dossier: Untermenü direkt unter den Stammdaten, «Agentenbeschrieb» als erster Reiter, Zuständigkeiten auf drei gekürzt - Kanäle & Systeme: vier Karten pro Zeile, Kategorie-Sinnbild links vor dem Titel, Porträtgruppe statt Namensliste, ein Regler statt Verbinden/Trennen - Bearbeitungsverlauf: neutrale Karten, Farbe nur noch bei Ausnahmepriorität und abweichendem Status, mehr Weissraum Markenlogos gibt es im Repo nicht und wurden nicht nachgezeichnet — je Kategorie steht ein neutrales Sinnbild. Fehlendes Asset, bewusst so gelöst. Positionsdaten stehen ausschliesslich in `agentRingConfig.ts`; Vollkreis und Halbkreis teilen sich dieselbe Geometrie. AUFGERÄUMT `AgentCard` ist durch die Kreisdarstellung ersetzt und entfernt, seine Zusagen sind in `TeamOverviewRing.test.tsx` übergegangen — inklusive der wichtigsten: ausserhalb des Kernteams führt kein Klick in ein Dossier. Zwei echte Fehler unterwegs behoben: jsdom kennt keinen `ResizeObserver` (jetzt mit Rückfallebene statt Absturz), und das Rad las eine Ref im Render. 413 Tests grün, Build grün, ESLint über den Property-On-Code sauber, check:tokens unverändert bei 2249. Co-Authored-By: Claude Opus 5 (1M context) --- src/assets/team/ada.jpg | Bin 0 -> 5917 bytes src/assets/team/beat.jpg | Bin 0 -> 6253 bytes src/assets/team/carla.jpg | Bin 0 -> 6022 bytes src/assets/team/diego.jpg | Bin 0 -> 7184 bytes src/assets/team/dora.jpg | Bin 0 -> 6361 bytes src/assets/team/emil.jpg | Bin 0 -> 5774 bytes src/assets/team/fabio.jpg | Bin 0 -> 7606 bytes src/assets/team/filip.jpg | Bin 0 -> 6682 bytes src/assets/team/gian.jpg | Bin 0 -> 6440 bytes src/assets/team/ida.jpg | Bin 0 -> 5728 bytes src/assets/team/jana.jpg | Bin 0 -> 5686 bytes src/assets/team/kira.jpg | Bin 0 -> 7621 bytes src/assets/team/lars.jpg | Bin 0 -> 6316 bytes src/assets/team/mia.jpg | Bin 0 -> 6500 bytes src/assets/team/nadia.jpg | Bin 0 -> 7417 bytes src/assets/team/oskar.jpg | Bin 0 -> 5878 bytes src/assets/team/otto.jpg | Bin 0 -> 6998 bytes src/assets/team/paul.jpg | Bin 0 -> 6209 bytes src/assets/team/pia.jpg | Bin 0 -> 6653 bytes src/assets/team/rea.jpg | Bin 0 -> 6654 bytes src/assets/team/rico.jpg | Bin 0 -> 6513 bytes src/assets/team/sven.jpg | Bin 0 -> 6313 bytes src/assets/team/tino.jpg | Bin 0 -> 6539 bytes src/assets/team/uli.jpg | Bin 0 -> 5851 bytes src/assets/team/vela.jpg | Bin 0 -> 6218 bytes src/assets/team/vera.jpg | Bin 0 -> 6945 bytes src/assets/team/vinz.jpg | Bin 0 -> 6598 bytes src/assets/team/vito.jpg | Bin 0 -> 6468 bytes src/assets/team/zeno.jpg | Bin 0 -> 5800 bytes src/components/team/AgentAvatar.tsx | 74 ++-- src/components/team/AgentAvatarGroup.tsx | 108 +++++ src/components/team/AgentCard.tsx | 98 ----- src/components/team/AgentDescriptionTab.tsx | 151 +++++++ src/components/team/AgentDossier.tsx | 118 ++++++ src/components/team/AgentDossierHeader.tsx | 2 +- src/components/team/AgentListPanel.tsx | 2 +- src/components/team/AgentPreviewPopover.tsx | 61 +++ src/components/team/AgentRing.tsx | 93 +++++ src/components/team/AgentRingNode.tsx | 128 ++++++ src/components/team/ConnectionCard.tsx | 265 +++++++----- src/components/team/ConnectionSummaryList.tsx | 111 +++-- src/components/team/ConnectionWizardSteps.tsx | 2 +- src/components/team/RotatableAgentWheel.tsx | 209 ++++++++++ src/components/team/TeamLevelTabs.tsx | 71 ++++ src/components/team/TeamOverviewRing.tsx | 174 ++++++++ src/components/team/WorkItemCard.tsx | 166 +++++--- src/components/team/WorkItemDetailDrawer.tsx | 2 +- src/components/team/WorkItemList.tsx | 10 +- .../team/__tests__/AgentCard.test.tsx | 174 -------- .../team/__tests__/TeamOverviewRing.test.tsx | 136 +++++++ src/components/team/agentPhotos.ts | 78 +++- src/components/team/agentRingConfig.ts | 103 +++++ src/components/team/index.ts | 23 +- src/domain/agentDirectory.ts | 66 +++ src/lib/constants.ts | 34 ++ src/mock-data/agentDirectory.ts | 385 ++++++++++++++++++ src/pages/supply/KanaeleSysteme.tsx | 7 +- src/pages/supply/Personalverwaltung.tsx | 179 ++++---- src/pages/supply/Teamuebersicht.tsx | 88 ++-- src/test/setup.ts | 18 + vitest.config.ts | 5 + 61 files changed, 2499 insertions(+), 642 deletions(-) create mode 100644 src/assets/team/ada.jpg create mode 100644 src/assets/team/beat.jpg create mode 100644 src/assets/team/carla.jpg create mode 100644 src/assets/team/diego.jpg create mode 100644 src/assets/team/dora.jpg create mode 100644 src/assets/team/emil.jpg create mode 100644 src/assets/team/fabio.jpg create mode 100644 src/assets/team/filip.jpg create mode 100644 src/assets/team/gian.jpg create mode 100644 src/assets/team/ida.jpg create mode 100644 src/assets/team/jana.jpg create mode 100644 src/assets/team/kira.jpg create mode 100644 src/assets/team/lars.jpg create mode 100644 src/assets/team/mia.jpg create mode 100644 src/assets/team/nadia.jpg create mode 100644 src/assets/team/oskar.jpg create mode 100644 src/assets/team/otto.jpg create mode 100644 src/assets/team/paul.jpg create mode 100644 src/assets/team/pia.jpg create mode 100644 src/assets/team/rea.jpg create mode 100644 src/assets/team/rico.jpg create mode 100644 src/assets/team/sven.jpg create mode 100644 src/assets/team/tino.jpg create mode 100644 src/assets/team/uli.jpg create mode 100644 src/assets/team/vela.jpg create mode 100644 src/assets/team/vera.jpg create mode 100644 src/assets/team/vinz.jpg create mode 100644 src/assets/team/vito.jpg create mode 100644 src/assets/team/zeno.jpg create mode 100644 src/components/team/AgentAvatarGroup.tsx delete mode 100644 src/components/team/AgentCard.tsx create mode 100644 src/components/team/AgentDescriptionTab.tsx create mode 100644 src/components/team/AgentDossier.tsx create mode 100644 src/components/team/AgentPreviewPopover.tsx create mode 100644 src/components/team/AgentRing.tsx create mode 100644 src/components/team/AgentRingNode.tsx create mode 100644 src/components/team/RotatableAgentWheel.tsx create mode 100644 src/components/team/TeamLevelTabs.tsx create mode 100644 src/components/team/TeamOverviewRing.tsx delete mode 100644 src/components/team/__tests__/AgentCard.test.tsx create mode 100644 src/components/team/__tests__/TeamOverviewRing.test.tsx create mode 100644 src/components/team/agentRingConfig.ts create mode 100644 src/domain/agentDirectory.ts create mode 100644 src/mock-data/agentDirectory.ts diff --git a/src/assets/team/ada.jpg b/src/assets/team/ada.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd6c48f3f73a83306b641065ba536304b2cf0284 GIT binary patch literal 5917 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/beat.jpg b/src/assets/team/beat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2da71a2c1631cc0ecbe4936fd33b8beb2c4cb008 GIT binary patch literal 6253 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/carla.jpg b/src/assets/team/carla.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c6923f44d43e506c1deb01b53f9769ac341906b GIT binary patch literal 6022 zcmbW5Wmr_-x5p19B@8u$0wd*!gpv*oillURH-dm5gTe?1$j~67Al)$xNSBB-KLMpi z2I=nZm^=Qx_1stY-gTa{-<-Agvp(y)p0)ScxL>##fJRM8RS6&<0008~1K=irM*s;C zF)=X_34S0UA-P6+os1N3AWBN|>$D&`I$97dEj=SE6FtKXFfA=J2lEX!HV6bl&&0{i z$g6Brr)tzzGo25)jc6;5q;ZK28#X ze;M%aMnFhJjE|CxoPrYXP(uR{5)cs);^W5y;JpL!-vMG;5;_hcg=_RWHl&%Nb#|fvWlvjp1y&hk+F%X zoxOvjle3Gf&vReD7yj^o&^KY>5pN@riAnF0-=}=|n3|KDmtRm=R9y18s=B7OuD+r1 zTYE=mS9ecu-_Y>L=oseLICge!eqnKGd1ZBNcW?jT@aXvD^z0880YLN@3qSq^`yX7i zcrHS`EX1ULxCjVe;9nwIViFFaYjg@aq&8mkoWj9m3=b2sE8EDqM09t+w%$J}7`a7f zd3OJx{fq2>2Nv@GBKuFU|Kh>|*NF)5;t|mTa==;Qx=u54&3Q;3Y;P@`wVUd6ggU-B zf*kkY0E!50*q6+!#s~W)9sA~69?K8aCYW$Qjc4m}1rGQ^dZKe#8i)gAA})92z7-8Q zrig4w33d*bOd|$uaKJ01)u!9_>4w~Pus(TCtRHJ>W%gfx<;$HrSEFBWKt}G>30P4_ zS!9dRB5E32H@!cCm?n&0OXg5T4H|}LUb|~*xG@pR{abs>@Fs^)Nr`&9duA^bGb^+eFd3MogQ{* zi4F!A3&qU|R0kO(7E5?IuPS&1ybI!ZZ#<;qSHkL*C`_g0Qfi^nl(=XdNCF2%ZhHoO z&(>DbUlP~LaLEAeD%R=21)D51A8aqnsSRUWBA;2rIbRL8;_;_XX7E|Y^F&^&hRg}g$AY85fDg)Xn(f^p69&vZW z;zs_i+&W$mxo;`wy60B`|4O^AUcZ#6kL;p}pI~`$KtSKWW@ARsdqT3ZNYa3kJ2GG1 zjimYU2`5QtHW6iK4t~cE&n=q*NgFoRymgH1kV}5bT)WVYMAsLCdE-5X z1Jn-I&p-`_<@X0!9XKEN!gwKmyv@S>Pbs4;*NE>eQ<#0- zpvHRY@hZz5ElF`c(qH!Vl30Kh{m1yXoZi(?uMVTFF##k6Q6=z zk-5^4dC&cBFYWu}ojy#|Q%sE@*-XB!{=`XAjM%E*4;IpChJGJ4vnCdf`o{@uDs5m( ztfv`K`>-i!XDr_dk%g zbM6Y3Y+Y}rgbW0G@@fWqE6o&tcD+xn!s@EUNQns`&OK&^M(PY-GjO!Cu}l7cdgy5qhvxZ^q{o!>D9ypR^Ds1DCGbzgR~% zH;UID1w1W#XrjrI0;70sTfe5BY{K?D7ry4|A4C$a(lyj1&r&|2WtbeV+!xvpPhKjV z6L>%;5SITNanRc%7wZo}J!c2)hL|^T{}9Xn#z)VP?t@%@BVi>X^B7js7rQmJ!so6i z(I$s-Zjw&0&W4yS=QT0vJoe#awBo8-SKWK<~ zJj%KJ_W7Y|%$g0iza>p~C9HexE)}1)RW&%?#sQc=FC40tRygW?ZkFaಘf;)QW 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 I>~Q1%2GjVwxc~qF literal 0 HcmV?d00001 diff --git a/src/assets/team/diego.jpg b/src/assets/team/diego.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7f0c6345f7c53e39494695357e66f3b871125130 GIT binary patch literal 7184 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 Pz`DD_BURGqar(aipdiY~ literal 0 HcmV?d00001 diff --git a/src/assets/team/dora.jpg b/src/assets/team/dora.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1026b5ac6b7a748bb0cd39e7a29ae21d3cc8f239 GIT binary patch literal 6361 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 Qj@n`N^V6dVQoEV{54!_cEdT%j literal 0 HcmV?d00001 diff --git a/src/assets/team/emil.jpg b/src/assets/team/emil.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a4bd53cc4b0730e9bdb8cb65f0c54f96ed80071 GIT binary patch literal 5774 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 OWfLOCQGQ-}J^e2?j|!0h literal 0 HcmV?d00001 diff --git a/src/assets/team/fabio.jpg b/src/assets/team/fabio.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5c849719e304b567166860d7fef9b061842584d GIT binary patch literal 7606 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/filip.jpg b/src/assets/team/filip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c30087f4f38bc8428dcf1467fe34e2148274b8ca GIT binary patch literal 6682 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/gian.jpg b/src/assets/team/gian.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ac803fa3fcfe58c338b3f335226f076ee403d22 GIT binary patch literal 6440 zcmbW5cQjnx_y6xG(V`4P^htCpl+>-YWcyY5+ct+Vf4=XKtDpMB1~8oinY=(IH88UP3c03gBz zTulJ?0a9WT5)xukLPJVQdX4NlIT^udsi-KfgK6pM!L(p70~7lV1_&!77|eW&nU#YB z3WYM<;Ns!pX~zh)D>eB&VRHA~;~^03r}EF%e<>1OS4!51}6*0h7|-5>vg#pkqeH z

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 a3sI^RT)xwL8ieI8*p56f083k4jr|uUws`9R literal 0 HcmV?d00001 diff --git a/src/assets/team/ida.jpg b/src/assets/team/ida.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89a2a7124cabd58f87f646f3b9332b8bf0d020e8 GIT binary patch literal 5728 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/kira.jpg b/src/assets/team/kira.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ae96c8e80d6320bd9e7d3b4f4eb126770ef954c GIT binary patch literal 7621 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 GKl2~dZ9_i* literal 0 HcmV?d00001 diff --git a/src/assets/team/mia.jpg b/src/assets/team/mia.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fce8961d1cb11671aaddf68780eacb7438fa79c GIT binary patch literal 6500 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/nadia.jpg b/src/assets/team/nadia.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e44179f4b41867c17c74a0405cca83e921c21396 GIT binary patch literal 7417 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

mfCvDcQF%&MiR# zI2AG>_BE|e3=%xglMFY(wsY_xh?&%Biz9qke=DEs|6J8g?5eW^IBI$+XqU(??ZvY% z2L5;lraV9TcFTK7_eG$MpShNFyW((ekZuUNo%aTXtLffuAqW5c_9wxDQSq9s41g~t z;+&ATspD34bVM3bU-*OG&}a6}^_^7wZU)9Z?j!cZQKs+<#Re}{^N2-%#keN`CR^KKnDd;$N1o%e<`!PENW{(hft653aAkwXflRkJY2TGL~l;8$9AneQtz_^K^bg(VbKJ1#>i z)hH3E9+#ziZ9JT?$eJFcZ%oMsMWBcIJ;(ZAv={*V>_*rkj)qU)w7be?Z8PXBc#{Jo zC*lbZ#72c|fv5GB);XLgpl=MUr<7|DE-csF9Kkq@3uH6K!d8`#AKu_fc^ig)nu8*F za-ipHJHC?vtT3mhK$ZpUdc7Fk#$zsRY9Vgh%vrbrFDtg_;5xi-G8X1 zHd_Av^+oi?O3}qdd6+j>fX*wa^zM7;()gB&$jC1W&}l4ezV(B)tK(L~yO4;U@N9Ya zBvvz&Y||h&hG(jdBKM1xS%cKGGDSveE=2O>8cJIv;rL1LRSJ1|R~bn=*74@>2&jWB zOXw9rQy)?!crA?oQwE$h)NGu%J_1rJ!dC5e8-?cKMXT*O%>0E)fi^A!Jx5igXTH6B ze1j2YhXaDSAu0+@c?jVqR6&YS`Gx((plLO#))=tWx)Hl%)X=?%xpxQ@yEjo{l1woT zO6{W+MUrtEnr$<$mjWLg>UJR2o;AJdBQF$4#`?TmCBqZbOD3*v~oN z+nZ|rr))C8cT+JcPygudtbktSv?OGJcNDVPY6aQc3$?^#M5XpguY)Oed4oC;ReJrA zDSoRlQCo-2q6-*#82f%EEk3%8-3V&Tk|x)4_dbvT!F1L-9&C4fxry))dNvkUKTvQ> zY~v`SP=?xy5ss>HbcXa`H(e$K+o_U&g~W(+qw5ZJZ7P$q0L4tPHKz1x%;g*eiY)%| zAqsipbg=u-4(|SFBI!l%5H>c(dI>n(M=nU1dj=mNW^6bzy43Xlf z4bRz`cRe+>j1Df;2)KnB0k38^{;1LHj`mQA!uAuJ7Lie~o&cr;i=$O^{WCf#+G*jH zJ3cyYL%9v+u^6B8Yq=}cIp`wu-nRtkfN?JbXnR z$g4Nbi;z6~MQt7>L@FwB=pVObk23NJp1BwJaP&Bk#UW?ncAR8X_a|g#g8kMZ2i(Ho5b=jZVk`cK~O%3mchIoprz!|<1_~=^P=jGIYKDLY_ zdffG09wp%^5qAhzb5p1Pa8V%Z%AKWyQOP~HQY;H{}!%{{}QN5f?pOy1yburEM>Xu=LZP F{{W)JQwRV6 literal 0 HcmV?d00001 diff --git a/src/assets/team/oskar.jpg b/src/assets/team/oskar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffa5284a8bbeb9a05133bf10576d8df3c11e05c9 GIT binary patch literal 5878 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 fgcMEBrvnCP?{YB?pU`_;IX%dEv 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 Y+-4;NjV061q8f(5-~w^pltM22FZ$(@O8@`> literal 0 HcmV?d00001 diff --git a/src/assets/team/paul.jpg b/src/assets/team/paul.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38f73a2ca86d4b0f2777a39b8b843ac19f64814e GIT binary patch literal 6209 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 Y4osq=SG$}z8L}<;@H667;LXf`0S&AH(f|Me literal 0 HcmV?d00001 diff --git a/src/assets/team/pia.jpg b/src/assets/team/pia.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df6f2850a0fe8c70d9873a51a29b8244cdb03b5a GIT binary patch literal 6653 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 Hx}Etij4LpE literal 0 HcmV?d00001 diff --git a/src/assets/team/rea.jpg b/src/assets/team/rea.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9756744a125dd2cdad5ba1550fb7c5e3d95edbc5 GIT binary patch literal 6654 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 O0_#SQ5{#vHbN>M~CbujA literal 0 HcmV?d00001 diff --git a/src/assets/team/rico.jpg b/src/assets/team/rico.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa38ae47b92575dba7d24fa7a4c2eb895fbcc9ef GIT binary patch literal 6513 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î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 literal 0 HcmV?d00001 diff --git a/src/assets/team/tino.jpg b/src/assets/team/tino.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8247951de9c045686c91d6920597074292add01a GIT binary patch literal 6539 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 Ld}I`U^YcFdKYW!Z literal 0 HcmV?d00001 diff --git a/src/assets/team/uli.jpg b/src/assets/team/uli.jpg new file mode 100644 index 0000000000000000000000000000000000000000..574226fe87cc53667e35542e1820ee8c340f95ca GIT binary patch literal 5851 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 CTq)rI literal 0 HcmV?d00001 diff --git a/src/assets/team/vela.jpg b/src/assets/team/vela.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c93ffdaf1d97ce782e7a49d1fd55dff2179b92a4 GIT binary patch literal 6218 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 WHnUB7`4GWho}VR|ZEC7?KJ_2^A`9XG literal 0 HcmV?d00001 diff --git a/src/assets/team/vera.jpg b/src/assets/team/vera.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3acac13d6afe9fb7ad01856a4eb0b0d5be40555b GIT binary patch literal 6945 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 literal 0 HcmV?d00001 diff --git a/src/assets/team/zeno.jpg b/src/assets/team/zeno.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14225b88e39718a738bbde59771b8c0f5e74a90b GIT binary patch literal 5800 zcmbW4cUV)+m&XGEqM#rp6op_Aq=`x|0s)lJ1f)wBX`xr8gwPZaq&ER+0-;I?5}FjL zkrKKDLoZUL3Ivq0`2My$yMOKOxzC;Fndi>Eb3SwKIrE+KiSs$YHFdZe96&|}0FYf= zfb&VfLjWa^f`S4_dC^c(Qc{7gTmoGf9SzOpEA(^>4D@vL^o-2xER0Oo!SwX3P}b`l z9Gsk-j4WK-To7({2q)z4N60Q-1yO-$FI}RAFwrwX{?B&)1welZkPBD_l5qjZ>B)ff zWapg#&I>;&$^J3GzZ)4jkmAD2OP8r>E(Tz)0m#XKK=KR!F90q^qb{BUDCj8}pu&n& zj5<~zE)OP=kc1DHZYg2fz`Dab+@jAtLoZV^v#_#V=efft(`r>!O_e6#Y-PwKmS*+!@?upL`EehC8wmmOH0ql%P&9|78RG2 zR)4C&*4EWGG`4qic6H;v_VkX7j(r;^OnfKKFDx$oSYBCOTi@OLwSRC(Iy(OSmx~Ml z{1?_m`!BHn!9{<;MSc+$3eaCJGIF1b8%R$<2^FSdP}Bigc`$N`gj`}$O89_jyL?Mj zcL)63bC{Z$TWp?Z_b=K%WdA#`(Ek_Ne}erN7ZGp;NOloCAUyyEAjuAASZ%PB++m8?{#RgqdAtgmHkMY$YRh*(MYwVralYrL8xi>q@LrtFy5?$~TRJ zSE)rs)Tb)43o~~w%NJDvlPn~6O&4sxM%FmV!Dnm&?!=LAUYRDyeSu|JooMVX5u`A` z(!}&?lEhw}nPf{rf;}vZOK#0v>erHlx4oiOghY%qtz*&Bp5<}sG2lznTi)+vK5NjZ zcm;`?w)ID`FZ$%}gWuaOJm5_zlqjt#`7xE0VEl5NMepgX={bNsqF*tm=|S}GSeQ(1 zhVype9km;gM&Y_L*Zd9X^RK!NyfZX3RPnGcUi06m5jN?Sh)W@D_HekP%Dl9kzP&bm zUw_-9-R_wg?U!i6d*g|9!|`RQ#RTJE^Do{9MU$E(4g_u$H-W2DU`|o`siac@dzE8j z_i~rvEeO+Y&Kof`X!x>jY9HS$Bgb&{@5=i9N{gNCw_@e4hT${Iq9S`#I}hV@wk?It zobCxFmG{55*-H~Xkoqc*t5tr`cE(jdde?AoL=pS)I5?9Tun!t94d?RSN3t#4-zg~_ z&M}X5`2LaZvTu&|E(Nsg*;su|W$ z_<3(pUA~6M$N2CQ{()HAc#gtHwlX5T$iazO0odqt4?z3JGB}qd@Sov}fmm zLr1oc&2^)WKgLkqy#}kEE^ir?jw~@P-V7xqdo1>IZq?oxxP0S@h^m=2+6Ftd&#pU> z*TOiIdOr`(8j_i^VSuHhM7%Scq^yP?&DRo)8KGYUasG8)>_W5?1T3PYutwBtY^Rbb zKrB|nm@+SZF{^c^%TEMBpm*H1_w%?TNaKQd`P+!VA`uf^)iX%d)ViP@mVY)CXYj`P zPEHfiUF$)d|Jz1{UJ+X}t@S)9a&G9vybv!PZwmiG8)znY#eP*za1HxxmE);MLdvb9 zkTpvVOPN*NE>im>2@(^Kxb3nv7U`fA&?bpy^3CJ zaAFa7726k}CsFi8=A)6T<5%vhgibbaH0q!5>f4|{d|w;Z za9_OFjdF4*KS}14SUjizbxQijro~-XTk=$m&kk+Ky7hFd;(+`{R}>5EMe^c~+&O@H zoI%Z`6E87n+7Rz&rOhh7at>gr=xRxR8VU{v(spAXkwS&W3A^U>AvdLg2dhq^3*r}% zVe$P~Z>!l$Cnc+|Zq{CBjcXF(XhD}x5aY?RZ4D{Bd2rx^mZ2PhSeB?`xB0>t?itaV zdWAroy_lDIuNIj6*Gvn#xBl0)&jZR?a0O)%+QY-oi$A1LY<&3mn8oSgSr^xh#uOcaJ4>}U1r?742Ikm17 zoBTvZN7cGGFEs-IUa^GaW@yu_b&GttTf~`$d=_n#ck0A~lYkNBnZ{fWK^`=!*#nuO zFoCGj9mM$S2FI>!x(`ZK%4OW#U}QW?cBa0kug6wJCoy{T4JH_4a~DP(*Vb-R*A(tP z-uxhy)((Yv?8k!wVQXVIqQT<)GN zC)U~D%YrVs$m16rjHRM!S!z*bA9kA}-JXAUiSlhf2M7!tIo*g+of62x0rGrAQWJx#S}h9UI4+&#^6 z!0WrFh<;tIA)x20qs$YW_?rKH!2;tCXRJ(|y$za@YT+|mm&@Y?@UCV2>_8}hJrGQs z*QW#mu3RzFqLTT=eo>!G;55Zg{B@N5dBe%0_;Rh(`S}rK?Wt)pqs3HG2Il~}bHG=- z${p{Xpq6czJu0Y8Sc9{K;b^l0wny4)*A88 zun4iqB?>ea5!J~|c>T-1!1Z7V_P?qyu`$rGM* zTT$1&wEK^DaplT$+MJpYG&Gxh?X!Q4Mog>8V#Uvc2O1M2C~-S%diPofdoFJY} zpE~P;C5SqZoZV{(H?aO3;8?6Nuexb%z_=zX6=MdE9`N)C`Av|kM6~e9pa$}4$C+#6 zrLI+PG4!|8ufnc}mkK$1ce@8&UN^C*tuygA`^->aeY+vF!c&)Klj2IBX@8Rva1Kz9^^xp-wEs3?(*&vf zLPl26912MTjHf!}gQS22fHm(98oZ?&!L6O$NqA8p#Pq~T50Dq4m`k3?pFF1w5Mr{6 zB8w^*kNc-=|IO}?^CLB~vOx=8|C#Da|DNi=v5_a*Vn*zBGVwp;O1^kKw!rcLS;X?A zT<$sq{~TfL<`;z{fVa9c*e!1DG#|db4I*-N+Uy&HreQgpF#&H^ELZ(czh&*)5tpeD zt}KPD?oONRhm}01c>#1zWve2-8Qqj|`Zd4-J{UncTam<3mc*#6Y3}MhztQN4>2#1Z ztZRJancQ)6d&;o;ed&a0N4k(se>4wn15>V`)&!vlI(%6uKq2G%-tjKc(DI{D<2a~Q?nBTk24oQ%^?u@(V^5B5WS>XhLAneKuEO=NSEgG}q~d-K;h#NBO@r0xba3eN7&Qh#^! zX?$b{y&C@3y^f5@N`nt-bWjm3F8D3la3$wWxxX&*RxOaD^2=qFi< zQ6oil-vT@j^lgR`B6sM1uC85(0xg;?sFRt(I!{&jwd~)@l4yg-Ja8y-wrwwA;eL(vk0X&YGq4*%0Jr z?QTw({Nx9=0!&C@q^<4ba&KBU?LCRMgk)WZKra)ENHOd26=mX?v~zlEG zOihiK+4DN;?9&U3&?axfAnW88Qbk?6C7o+!#cSdQ#(c8#=D~^6kXV*Xcc*6>QR*0Z z>SU=9zHQm!gcQF|?DmjrW266buM8O|E?k7a`!wHJJ5_ent}aaM+XL@Sc`?-mV1E)P zx8U~nruh={u*qb3li(izik#Yk{DGwwwq~T9p|?lkrZlhg9hBOZv#?@h*PYu_D0(ATiX>@*jgRHS9rnluaclc1k7KIsE`Of-834cbS3lX!1tqv_0E zo@iPOyJ&q{bh;{`+SV>s&3_z1EhW7r0>A2)7A=d`@ylLjWCUv-bHp^7TOyLyMKDp* zEYxpFh1}kUmR|Um7qd0#6gka+5kL2rMz_3=Wg~NAstXRE`DY#+EH|J$$De*I44x4d zVNZL`c1J}EbWq_l?-t#3Z?2E-8Z6Rnq}QO)m_g|Ck2IGvFh`gFgfqAM>K;a_;W^|t zWQ|-cbTd&)O+IZshVnW(;j1MxNZAEIiV#0iisP*pJb#ZjmzbifDt70}7wwln3ueD;66_RqGB;9WBf!F4%0o{Z`f~KhNkpCc%%( zUXm-wKyoD2Nq{fK&w3RBp|pyF?#MXxt}>3~<-!_{44ub#K3QEcNVAi6N6{ItVe7>q zs80{?;Om>SS!VgSK1=;Q5+&;>zhKA3)cGrpgm0+*mC>rcx$IfZYx!ua69vM%4teTt zSbUoew$6=LZb|muI>PkT%dwq7BIiQ++PG^I&-}(HCAxmE((cWC(YvynuxZOilxDy= zKrH;>fU>;bazlNF@vL{^1JOiJHQCHD(Dw62YbL*MJb38G2I->iF62m9ZYB7UnaXiP zv5m!jX|ViNG7(w?O=QvRti#f2;<{?cdhSjT_3A#1^QZ`(vVv)Pl(4YZSEG<(wgTL( zaGBR_7FDe(#`S43WyOAaaul<8!3F6GSIN6SzGuMg?ie@l%K48u zF}xxvKb8Uqj3DDThf>&sMRnP|p_&c_#A0=)TV)7@Oui`8a*WNd5Ys0%91=d6M zOMZDx=ttK^i)i`nmnh1C0LaTKqn*~b&f>O0OWj>}nSz)!I|9vvsMEW|%=!0J z|J<8N)|VLV@S-r182MQBIAk%wUnZdqEbfW5{-&*HRPNyGb@uS(?DmE7!dqa`^Ml7% zCxco~`El+@$lHJIuRVF0bFtr8H_Y6;N}Oel!p{he+Y={3g{#79;m!4b9(A0h7Xi-! z5EvSnL7TooY*9HaJ5WUJ!ja%4erszc0ny=>KY@j%G&>7%gr$W@znmBB$6iR(4Zr~Qpe5U`3>A(w3JlW5 zT`=~pKU;xmN0$EoNhX<^23q!sYwvN!82FcM_I2e@?P8 z{x%wZ?=dPxs&IUtT?jD>&x`%9MHLiR98@3PnFpEH;-mtD1XA)P{PTx#>ikrfn2gl= IgU-MI8zXlO%K!iX literal 0 HcmV?d00001 diff --git a/src/components/team/AgentAvatar.tsx b/src/components/team/AgentAvatar.tsx index dd04d96..0d30817 100644 --- a/src/components/team/AgentAvatar.tsx +++ b/src/components/team/AgentAvatar.tsx @@ -1,73 +1,97 @@ import { memo } from 'react' import { Avatar, Box, Tooltip } from '@mui/material' import { Check } from 'lucide-react' -import type { TeamAgent } from '../../domain/teamAgent' -import { AgentStatus } from '../../domain/teamAgent' +import type { AgentAvatarSubject } from '../../domain/agentDirectory' +import type { AgentStatus, AgentAvatarTone } from '../../domain/teamAgent' +import { AgentStatus as Status } from '../../domain/teamAgent' import { AVATAR_TONE_COLOR } from './teamTokens' import { AGENT_PHOTOS } from './agentPhotos' import { AGENT_STATUS_LABELS } from '../../lib/constants' -import { DS_BG, DS_TEXT } from '../../lib/ds' +import { DS_BG, DS_TEXT, DS_BORDER } from '../../lib/ds' -const SIZES = { +const NAMED_SIZES = { + xsmall: 22, small: 28, medium: 40, large: 64, + xlarge: 96, } as const -export type AgentAvatarSize = keyof typeof SIZES +export type AgentAvatarSize = keyof typeof NAMED_SIZES | number interface Props { - agent: TeamAgent - size?: AgentAvatarSize /** - * Blendet den Statuspunkt ein. Auf der Teamübersicht ist er verbindlich (§6.2): - * ein grüner Haken für aktiv, sonst der Hinweis «Pausiert». + * Bewusst die Minimalform: so passt sowohl ein vollständiger `TeamAgent` als + * auch ein blosser Verzeichniseintrag hinein. Zwei fast identische + * Avatarkomponenten für dieselbe Sache wären reine Duplikation. */ + agent: AgentAvatarSubject + size?: AgentAvatarSize + /** Nur die sieben Kernteammitglieder führen einen Betriebszustand. */ + status?: AgentStatus showStatus?: boolean + /** Farbe der Initialen-Fläche, falls kein Porträt vorhanden ist. */ + tone?: AgentAvatarTone + /** Ringe mit vielen Porträts laden verzögert — nur sichtbare zuerst. */ + loading?: 'lazy' | 'eager' + /** Zusätzlicher Rahmen, etwa zur Hervorhebung des Kernteams. */ + ringColor?: string + ringWidth?: number } function initialsOf(name: string): string { return name.trim().slice(0, 2).toUpperCase() } -/** - * Es gibt keine Porträtbilder für digitale Mitarbeiter — und erfundene - * Gesichter wären in einer Kundendemo irreführend. Stattdessen Initialen auf - * einer je Mitarbeiter festen Farbe. - */ -export const AgentAvatar = memo(function AgentAvatar({ agent, size = 'medium', showStatus = false }: Props) { - const px = SIZES[size] - const isActive = agent.status === AgentStatus.ACTIVE - const statusLabel = AGENT_STATUS_LABELS[agent.status] ?? agent.status - const badgePx = size === 'large' ? 20 : 14 +function resolveSize(size: AgentAvatarSize): number { + return typeof size === 'number' ? size : NAMED_SIZES[size] +} + +export const AgentAvatar = memo(function AgentAvatar({ + agent, + size = 'medium', + status, + showStatus = false, + tone, + loading = 'lazy', + ringColor, + ringWidth = 2, +}: Props) { + const px = resolveSize(size) const photo = AGENT_PHOTOS[agent.id] const label = `${agent.name}, ${agent.role}` + const isActive = status === Status.ACTIVE + const statusLabel = status ? (AGENT_STATUS_LABELS[status] ?? status) : '' + const badgePx = px >= 64 ? 20 : 14 return ( {/* Der zugängliche Name hängt an genau einem Element, nie an zweien: - mit Porträt trägt ihn das von MUI erzeugte über `alt`, ohne - Porträt der Container über role="img" und aria-label. `alt` allein - genügt nämlich nicht — ohne `src` rendert MUI gar kein , und der - Wert landet nirgends im DOM. */} + mit Porträt am erzeugten über `alt`, ohne Porträt am Container + über role="img" und aria-label. `alt` allein genügt nämlich nicht — + ohne `src` rendert MUI gar kein , der Wert landet nirgends. */} {/* Fällt das Bild aus, zeigt MUI wieder die Initialen statt eines Lochs. */} {initialsOf(agent.name)} - {showStatus && ( + {showStatus && status && ( { + const entries = agentIds + .map(id => agentDirectory.find(a => a.id === id)) + .filter((a): a is NonNullable => !!a) + return { + visible: entries.slice(0, MAX_VISIBLE), + overflow: entries.slice(MAX_VISIBLE), + allNames: entries.map(a => a.name).join(', '), + } + }, [agentIds]) + + if (visible.length === 0) { + return ( + + Noch keinem Mitarbeitenden zugewiesen + + ) + } + + return ( + + {label && ( + + {label} + + )} + + + {visible.map((agent) => ( + + + + + + ))} + + {overflow.length > 0 && ( + a.name).join(', ')} arrow> + + +{overflow.length} + + + )} + + + ) +}) diff --git a/src/components/team/AgentCard.tsx b/src/components/team/AgentCard.tsx deleted file mode 100644 index a4852b5..0000000 --- a/src/components/team/AgentCard.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { memo } from 'react' -import { Box, Button, Typography } from '@mui/material' -import { ArrowRight } from 'lucide-react' -import type { TeamAgent } from '../../domain/teamAgent' -import { AgentAvatar } from './AgentAvatar' -import { AgentAutonomyBadge, AgentStatusBadge } from './AgentBadges' -import { DS_BG, DS_BORDER, DS_SHADOW, DS_TEXT } from '../../lib/ds' -import { formatTeamRelative } from '../../lib/teamClock' - -interface Props { - agent: TeamAgent - onOpen: (agentId: string) => void -} - -/** - * Agentenkarte im Kernteam-Raster (§6.2). - * - * Der Aktivstatus steht doppelt: als Haken am Avatar und als Textbadge. Farbe - * allein darf einen Zustand nie tragen (§2.3, §18). - */ -export const AgentCard = memo(function AgentCard({ agent, onOpen }: Props) { - const headline = agent.metrics.find(m => m.id === agent.headlineMetricId) ?? agent.metrics[0] - - return ( - - - - - - {agent.name} - - - {agent.role} - - - Personalnummer {agent.personnelNumber} - - - - - - {agent.shortDescription} - - - - - - - - {headline && ( - - - {headline.value} - - - {headline.label} - - - )} - - - - {agent.lastRun ? `Zuletzt aktiv ${formatTeamRelative(agent.lastRun)}` : 'Noch nicht gelaufen'} - - - - - ) -}) diff --git a/src/components/team/AgentDescriptionTab.tsx b/src/components/team/AgentDescriptionTab.tsx new file mode 100644 index 0000000..ac3b853 --- /dev/null +++ b/src/components/team/AgentDescriptionTab.tsx @@ -0,0 +1,151 @@ +/** + * Property On — Reiter «Agentenbeschrieb» im Personaldossier. + * + * Der Einstieg ins Dossier: Er beantwortet in wenigen Zeilen, wofür ein + * digitaler Mitarbeiter zuständig ist, womit er arbeitet, was dabei herauskommt + * und wie viel davon zuletzt angefallen ist. Sämtliche Angaben stammen + * unverändert aus dem Personaldossier — hier wird nichts formuliert, was nicht + * in den Daten steht. + * + * Zwei bewusste Entscheide: + * + * 1. Der Zweck steht genau einmal auf der Seite. Die geteilte Informationsbox + * zeigt ihn bereits über den drei Spalten; der Kurzbeschrieb darüber + * entfällt deshalb, sobald er inhaltlich dasselbe sagt. + * 2. Die Zuständigkeiten stehen gekürzt. Je nach Mitarbeiter sind bis zu neun + * Punkte hinterlegt — als vollständige Liste verdrängen sie die eigentliche + * Aussage nach unten. Sichtbar sind die ersten drei, der Rest wird beziffert. + * Die Daten selbst bleiben unangetastet. + */ + +import { memo, useMemo } from 'react' +import { Box, Typography } from '@mui/material' +import type { AgentMetric, TeamAgent } from '../../domain/teamAgent' +import { AgentInfoBox } from './AgentInfoBox' +import { DS_BORDER, DS_TEXT } from '../../lib/ds' + +/** Sichtbare Zuständigkeiten; alles Weitere wird nur noch gezählt. */ +const VISIBLE_RESPONSIBILITIES = 3 + +/** + * Doppelung erkennen, ohne Text zu erfinden: Kurze Wörter tragen im Deutschen + * kaum Bedeutung («und», «bis», «der»), deshalb zählen nur längere. Deckt der + * Zweck den Kurzbeschrieb weitgehend ab, ist der Kurzbeschrieb eine Wiederholung. + */ +const MIN_WORD_LENGTH = 5 +const REDUNDANCY_THRESHOLD = 0.6 + +function contentWords(text: string): Set { + const words = text + .toLowerCase() + .split(/[^a-zäöüéèàç]+/) + .filter(word => word.length >= MIN_WORD_LENGTH) + return new Set(words) +} + +function saysTheSame(shortText: string, longText: string): boolean { + const own = contentWords(shortText) + if (own.size === 0) return true + const other = contentWords(longText) + let shared = 0 + for (const word of own) if (other.has(word)) shared += 1 + return shared / own.size >= REDUNDANCY_THRESHOLD +} + +// ── Bausteine ───────────────────────────────────────────────────────────────── + +function SectionLabel({ children }: { children: string }) { + return ( + + {children} + + ) +} + +const MetricItem = memo(function MetricItem({ metric }: { metric: AgentMetric }) { + return ( + + + {metric.value} + + + {metric.label} + + + ) +}) + +const ResponsibilityItem = memo(function ResponsibilityItem({ text }: { text: string }) { + return ( + + {text} + + ) +}) + +// ── Reiter ──────────────────────────────────────────────────────────────────── + +export function AgentDescriptionTab({ agent }: { agent: TeamAgent }) { + const showShortDescription = useMemo( + () => !saysTheSame(agent.shortDescription, agent.profile.purpose), + [agent.shortDescription, agent.profile.purpose], + ) + + const visibleResponsibilities = useMemo( + () => agent.responsibilities.slice(0, VISIBLE_RESPONSIBILITIES), + [agent.responsibilities], + ) + + const hiddenResponsibilities = agent.responsibilities.length - visibleResponsibilities.length + + return ( + + {showShortDescription && ( + + {agent.shortDescription} + + )} + + {/* Zweck, Input, Kernablauf und Output — dieselbe Informationsbox wie in + der Teamübersicht, damit derselbe Sachverhalt nicht zweimal gebaut + wird. Sie bringt eigene Aussenabstände mit; der Reiter liegt bereits in + einer Fläche mit demselben Innenabstand, deshalb wird der doppelte + Einzug hier ausgeglichen statt die geteilte Komponente zu ändern. */} + + + + + + Kennzahlen + + {agent.metrics.map((metric) => ( + + ))} + + + + + Zuständigkeiten + + {visibleResponsibilities.map((text) => ( + + ))} + + {hiddenResponsibilities > 0 && ( + + {hiddenResponsibilities} weitere von insgesamt {agent.responsibilities.length} Zuständigkeiten + + )} + + + ) +} diff --git a/src/components/team/AgentDossier.tsx b/src/components/team/AgentDossier.tsx new file mode 100644 index 0000000..cc68199 --- /dev/null +++ b/src/components/team/AgentDossier.tsx @@ -0,0 +1,118 @@ +/** + * Property On — Personaldossier eines digitalen Mitarbeiters. + * + * Die Reihenfolge ist der eigentliche Inhalt dieser Komponente: zuerst die + * Stammdaten im Kopfbereich, unmittelbar darunter die Reiterleiste, erst dann + * der Inhalt des gewählten Reiters. Die Informationsbox stand bisher zwischen + * Kopf und Reitern und schob die Navigation nach unten aus dem Blickfeld — ihr + * Inhalt gehört in den ersten Reiter «Agentenbeschrieb», nicht in die + * Navigation. + * + * Der aktive Reiter wird nicht hier gehalten, sondern von aussen gesetzt: er + * steht in der Adresse, damit ein Dossier verlinkbar bleibt. + */ + +import { useCallback } from 'react' +import type { SyntheticEvent } from 'react' +import { Box, Tab, Tabs } from '@mui/material' +import type { TeamAgent } from '../../domain/teamAgent' +import { AgentDossierHeader } from './AgentDossierHeader' +import { AgentDescriptionTab } from './AgentDescriptionTab' +import { AgentTasksTab } from './AgentTasksTab' +import { AgentChannelsTab } from './AgentChannelsTab' +import { AgentSystemsTab } from './AgentSystemsTab' +import { AgentSettingsTab } from './AgentSettingsTab' +import { AgentProtocolTab } from './AgentProtocolTab' +import { DS_BG, DS_BORDER } from '../../lib/ds' + +/** + * URL-Segment je Reiter — bestehende Deep-Links müssen erhalten bleiben. + * + * Reiterliste und Segmentprüfung gehören zum Dossier und stehen deshalb hier, + * nicht in einer eigenen Datei. Der Preis dafür ist, dass diese Datei beim + * Bearbeiten neu geladen statt heiss ersetzt wird — das betrifft allein die + * Entwicklung, nicht die Anwendung. + */ +// eslint-disable-next-line react-refresh/only-export-components -- siehe oben +export const DOSSIER_TABS = [ + { segment: 'beschrieb', label: 'Agentenbeschrieb' }, + { segment: 'aufgaben', label: 'Aufgaben' }, + { segment: 'kanaele', label: 'Kanäle' }, + { segment: 'systeme', label: 'Systeme' }, + { segment: 'einstellungen', label: 'Einstellungen' }, + { segment: 'protokoll', label: 'Protokoll' }, +] as const + +export type DossierSegment = typeof DOSSIER_TABS[number]['segment'] + +export const DEFAULT_DOSSIER_SEGMENT: DossierSegment = 'beschrieb' + +// eslint-disable-next-line react-refresh/only-export-components -- siehe DOSSIER_TABS +export function isDossierSegment(value: string | undefined): value is DossierSegment { + return DOSSIER_TABS.some(tab => tab.segment === value) +} + +/** Verbindet Reiter und Inhaltsfläche für Screenreader. */ +const tabId = (segment: DossierSegment) => `agent-dossier-tab-${segment}` +const panelId = (segment: DossierSegment) => `agent-dossier-panel-${segment}` + +interface Props { + agent: TeamAgent + activeSegment: DossierSegment + onSegmentChange: (segment: DossierSegment) => void +} + +export function AgentDossier({ agent, activeSegment, onSegmentChange }: Props) { + const handleChange = useCallback( + (_event: SyntheticEvent, value: DossierSegment) => onSegmentChange(value), + [onSegmentChange], + ) + + return ( + <> + + + {/* Reiterleiste direkt unter den Stammdaten, auf derselben Fläche — sie + gehört zum Kopf des Dossiers und nicht zum Inhalt darunter. */} + + + {DOSSIER_TABS.map((tab) => ( + + ))} + + + + {/* `key` auf die Mitarbeiter-ID: beim Wechsel des Dossiers werden die + Reiter neu aufgebaut. Das ersetzt Zurücksetz-Effekte in jedem einzelnen + Reiter — sonst stünde der unbestätigte Entwurf des zuvor gewählten + Mitarbeiters in einem fremden Personalblatt. */} + + {activeSegment === 'beschrieb' && } + {activeSegment === 'aufgaben' && } + {activeSegment === 'kanaele' && } + {activeSegment === 'systeme' && } + {activeSegment === 'einstellungen' && } + {activeSegment === 'protokoll' && } + + + ) +} diff --git a/src/components/team/AgentDossierHeader.tsx b/src/components/team/AgentDossierHeader.tsx index 12f58d7..63b6d3e 100644 --- a/src/components/team/AgentDossierHeader.tsx +++ b/src/components/team/AgentDossierHeader.tsx @@ -48,7 +48,7 @@ export function AgentDossierHeader({ agent }: Props) { return ( - + diff --git a/src/components/team/AgentListPanel.tsx b/src/components/team/AgentListPanel.tsx index fc95869..3d29d44 100644 --- a/src/components/team/AgentListPanel.tsx +++ b/src/components/team/AgentListPanel.tsx @@ -35,7 +35,7 @@ const AgentListRow = memo(function AgentListRow({ agent, selected, onSelect }: R '&:focus-visible': { outline: `2px solid ${DS_TEXT.brand}`, outlineOffset: -2 }, }} > - + {agent.name} diff --git a/src/components/team/AgentPreviewPopover.tsx b/src/components/team/AgentPreviewPopover.tsx new file mode 100644 index 0000000..7a58436 --- /dev/null +++ b/src/components/team/AgentPreviewPopover.tsx @@ -0,0 +1,61 @@ +import { Box, Popover, Typography } from '@mui/material' +import type { AgentDirectoryEntry } from '../../domain/agentDirectory' +import { AgentAvatar } from './AgentAvatar' +import { GenericBadge } from '../shared/GenericBadge' +import { AGENT_LEVEL_LABELS, AGENT_ROLLOUT_LABELS } from '../../lib/constants' +import { DS_TEXT } from '../../lib/ds' + +interface Props { + agent: AgentDirectoryEntry | null + anchorEl: HTMLElement | null + onClose: () => void +} + +/** + * Kompakte Vorschau für Mitarbeitende ausserhalb des Kernteams. + * + * Bewusst kein Dossier: nur die sieben Kernteammitglieder besitzen ein + * gepflegtes Personalblatt. Für die übrigen 29 zeigt die Vorschau ausschliesslich + * das, was im Verzeichnis steht — Name, Funktion, Bereich, Aufbaustand. Es + * werden keine Aufgaben, Kanäle oder Tätigkeiten erfunden. + */ +export function AgentPreviewPopover({ agent, anchorEl, onClose }: Props) { + return ( + + {agent && ( + + + + + {agent.name} + + + {agent.role} + + + {AGENT_LEVEL_LABELS[agent.level] ?? agent.level} + + + + + + + + Für diese Stufe ist noch kein Personaldossier hinterlegt. + + + + )} + + ) +} diff --git a/src/components/team/AgentRing.tsx b/src/components/team/AgentRing.tsx new file mode 100644 index 0000000..52d1a3d --- /dev/null +++ b/src/components/team/AgentRing.tsx @@ -0,0 +1,93 @@ +import { memo, useMemo } from 'react' +import { Box } from '@mui/material' +import type { AgentDirectoryEntry } from '../../domain/agentDirectory' +import type { ArcOptions, RingSpec } from './agentRingConfig' +import { layoutArc } from './agentRingConfig' +import { AgentRingNode } from './AgentRingNode' +import { DS_BORDER } from '../../lib/ds' + +interface Props { + agents: AgentDirectoryEntry[] + spec: RingSpec + scale: number + arc?: ArcOptions + selectedId?: string | null + onSelect: (agent: AgentDirectoryEntry) => void + /** Führungslinie hinter den Portraits — die Referenzgrafik zeigt sie. */ + showGuide?: boolean + visible?: boolean +} + +/** + * Ein Ring der Kreisdarstellung. + * + * Rechnet selbst keine Positionen aus, sondern bezieht sie aus `layoutArc` — + * so teilen sich der volle Kreis der Teamübersicht und der Halbkreis des + * Organigramms dieselbe Geometrie. + */ +export const AgentRing = memo(function AgentRing({ + agents, + spec, + scale, + arc, + selectedId, + onSelect, + showGuide = true, + visible = true, +}: Props) { + const positions = useMemo( + () => layoutArc(agents.length, spec.radius, arc), + [agents.length, spec.radius, arc], + ) + + return ( + + {showGuide && ( + + )} + + {agents.map((agent, index) => { + const position = positions[index] + if (!position) return null + return ( + + ) + })} + + ) +}) diff --git a/src/components/team/AgentRingNode.tsx b/src/components/team/AgentRingNode.tsx new file mode 100644 index 0000000..d3e7685 --- /dev/null +++ b/src/components/team/AgentRingNode.tsx @@ -0,0 +1,128 @@ +import { memo, useState } from 'react' +import { Box, Tooltip, Typography } from '@mui/material' +import type { AgentDirectoryEntry } from '../../domain/agentDirectory' +import type { RingSpec } from './agentRingConfig' +import { AgentAvatar } from './AgentAvatar' +import { BADGE_COLORS, DS_BORDER, DS_TEXT } from '../../lib/ds' + +interface Props { + agent: AgentDirectoryEntry + spec: RingSpec + /** Skalierungsfaktor gegenüber der Referenzbreite. */ + scale: number + leftPct: number + topPct: number + selected?: boolean + onSelect: (agent: AgentDirectoryEntry) => void +} + +const MIN_AVATAR_PX = 30 + +/** + * Ein Portrait auf dem Ring. + * + * Die Funktionsbezeichnung steht dauerhaft nur beim Kernteam; auf den äusseren + * Ringen erscheint sie bei Hover oder Tastaturfokus. Alles dauerhaft zu + * beschriften liesse die Beschriftungen überlappen — die Referenzgrafik löst es + * genauso. + * + * Der Tooltip trägt Name und Funktion immer, damit die Information nie + * ausschliesslich im Bild steckt. + */ +export const AgentRingNode = memo(function AgentRingNode({ + agent, + spec, + scale, + leftPct, + topPct, + selected = false, + onSelect, +}: Props) { + const [active, setActive] = useState(false) + const px = Math.max(MIN_AVATAR_PX, Math.round(spec.avatarPx * scale)) + const showRole = spec.showRole || active || selected + const labelWidth = Math.round(px * 2.1) + + return ( + onSelect(agent)} + onMouseEnter={() => setActive(true)} + onMouseLeave={() => setActive(false)} + onFocus={() => setActive(true)} + onBlur={() => setActive(false)} + sx={{ + position: 'absolute', + left: `${leftPct}%`, + top: `${topPct}%`, + transform: 'translate(-50%, -50%)', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: 0.375, + width: labelWidth, + p: 0, + border: 'none', + background: 'none', + font: 'inherit', + cursor: 'pointer', + zIndex: active || selected ? 3 : 1, + transition: 'transform 0.2s ease', + '&:hover, &:focus-visible': { transform: 'translate(-50%, -50%) scale(1.06)' }, + '&:focus-visible': { outline: `2px solid ${DS_TEXT.brand}`, outlineOffset: 4, borderRadius: 2 }, + '@media (prefers-reduced-motion: reduce)': { + transition: 'none', + '&:hover, &:focus-visible': { transform: 'translate(-50%, -50%)' }, + }, + }} + > + + + + + + + + {agent.name} + + + {/* Höhe wird reserviert, damit die Ringe beim Hover nicht springen */} + + {agent.role} + + + ) +}) diff --git a/src/components/team/ConnectionCard.tsx b/src/components/team/ConnectionCard.tsx index d750384..c33579a 100644 --- a/src/components/team/ConnectionCard.tsx +++ b/src/components/team/ConnectionCard.tsx @@ -1,20 +1,104 @@ -import { memo } from 'react' -import { Box, Button, Typography } from '@mui/material' -import { Plug, PlugZap, Unplug, Users } from 'lucide-react' -import type { AgentConnection } from '../../domain/agentConnection' -import type { TeamAgent } from '../../domain/teamAgent' -import { AgentConnectionStatus } from '../../domain/teamAgent' -import { AgentAccessBadge, AgentConnectionStatusBadge } from './AgentBadges' +/** + * Property On — Karte einer zentralen Verbindung (§13). + * + * Verbunden oder nicht verbunden ist ein Zweizustand, also trägt ihn ein Regler + * und keine Knopfreihe: einschalten öffnet den Verbindungsassistenten, + * ausschalten löst die Trennung aus, die der Aufrufer weiterhin bestätigen + * lässt. «Verbindung testen» bleibt ein Knopf — das ist keine Zustandsänderung. + * + * Markenlogos gibt es im Projekt nicht und werden auch nicht nachgezeichnet. + * Stattdessen trägt jede Kategorie ein neutrales, einheitliches Sinnbild. + */ + +import { memo, useCallback, useMemo } from 'react' +import { Box, Button, Switch, Typography } from '@mui/material' import { - AGENT_CONNECTION_CATEGORY_LABELS, - AGENT_ERP_VENDOR_LABELS, -} from '../../lib/constants' + Calendar, + Contact, + Database, + FolderOpen, + Globe, + Mail, + MessageCircle, + Phone, + Users, +} from 'lucide-react' +import type { LucideIcon } from 'lucide-react' +import type { AgentConnection } from '../../domain/agentConnection' +import { AgentConnectionCategory } from '../../domain/agentConnection' +import { AgentConnectionStatus } from '../../domain/teamAgent' +import { AgentConnectionStatusBadge } from './AgentBadges' +import { AgentAvatarGroup } from './AgentAvatarGroup' +import { AGENT_CONNECTION_CATEGORY_LABELS } from '../../lib/constants' import { DS_BG, DS_BORDER, DS_SHADOW, DS_TEXT } from '../../lib/ds' -import { formatTeamDateTime } from '../../lib/teamClock' +import { formatTeamRelative } from '../../lib/teamClock' + +const CATEGORY_ICON: Record = { + [AgentConnectionCategory.EMAIL_M365]: Mail, + [AgentConnectionCategory.WHATSAPP]: MessageCircle, + [AgentConnectionCategory.TEAMS]: Users, + [AgentConnectionCategory.CALENDAR]: Calendar, + [AgentConnectionCategory.DOCUMENT_STORE]: FolderOpen, + [AgentConnectionCategory.PHONE_VOICE]: Phone, + [AgentConnectionCategory.ERP]: Database, + [AgentConnectionCategory.CRM]: Contact, + [AgentConnectionCategory.PUBLIC_SOURCES]: Globe, +} + +/** Abkürzungen wie «St.» oder «z. B.» beenden keinen Satz — kurze Wörter überspringen. */ +const ABBREVIATION_MAX_LENGTH = 3 + +/** + * Erster Satz eines Beschriebs. Die Daten selbst bleiben unangetastet; nur die + * Karte zeigt weniger, damit alle Karten gleich ruhig wirken. + */ +function firstSentence(text: string): string { + const trimmed = text.trim() + for (let i = 0; i < trimmed.length; i += 1) { + const char = trimmed[i] + if (char !== '.' && char !== '!' && char !== '?') continue + const next = trimmed[i + 1] + if (next !== undefined && next !== ' ' && next !== '\n') continue + const head = trimmed.slice(0, i) + const word = head.slice(head.lastIndexOf(' ') + 1) + if (word.length <= ABBREVIATION_MAX_LENGTH) continue + return trimmed.slice(0, i + 1) + } + return trimmed +} + +/** + * Sinnbild der Kategorie in ruhiger Fläche. Auch von der Kurzliste auf der + * Teamübersicht genutzt, damit beide Ansichten dasselbe Zeichen führen. + */ +export const ConnectionCategoryIcon = memo(function ConnectionCategoryIcon({ + category, + size = 28, +}: { + category: AgentConnectionCategory + size?: number +}) { + const Icon = CATEGORY_ICON[category] + const label = AGENT_CONNECTION_CATEGORY_LABELS[category] ?? category + + return ( + + + + ) +}) interface Props { connection: AgentConnection - agents: TeamAgent[] busy: boolean onConfigure: (connectionId: string) => void onDisconnect: (connectionId: string) => void @@ -23,7 +107,6 @@ interface Props { export const ConnectionCard = memo(function ConnectionCard({ connection, - agents, busy, onConfigure, onDisconnect, @@ -31,10 +114,20 @@ export const ConnectionCard = memo(function ConnectionCard({ }: Props) { const isConnected = connection.status === AgentConnectionStatus.CONNECTED const isRoadmap = connection.status === AgentConnectionStatus.ROADMAP - const users = connection.usedByAgentIds - .map(id => agents.find(a => a.id === id)?.name ?? id) - .join(', ') - const grantedPermissions = connection.permissions.filter(p => p.granted) + const purpose = useMemo(() => firstSentence(connection.description), [connection.description]) + + const handleToggle = useCallback(() => { + if (isConnected) onDisconnect(connection.id) + else onConfigure(connection.id) + }, [isConnected, onDisconnect, onConfigure, connection.id]) + + const handleDetails = useCallback(() => onConfigure(connection.id), [onConfigure, connection.id]) + const handleTest = useCallback(() => onTest(connection.id), [onTest, connection.id]) + + // Neun Regler auf einer Seite: der Name muss im Bedienhilfe-Text mitkommen. + const switchLabel = isRoadmap + ? `${connection.name}: geplant, noch nicht verfügbar` + : `${connection.name} ${isConnected ? 'trennen' : 'verbinden'}` return ( - - - - {connection.name} - - - {AGENT_CONNECTION_CATEGORY_LABELS[connection.category] ?? connection.category} - {connection.vendor ? ` · ${AGENT_ERP_VENDOR_LABELS[connection.vendor]}` : ''} - - - + + + + + {connection.name} + + + - - {connection.description} + + {purpose} - {connection.connectionLabel && ( - - Verbindung: «{connection.connectionLabel}» - - )} - - - - {connection.accountCount === 1 - ? '1 verbundenes Konto' - : `${connection.accountCount} verbundene Konten`} - - - - - - {users || 'Noch keinem Mitarbeiter zugewiesen'} - - - - - {connection.lastSyncAt - ? `Letzte Synchronisation ${formatTeamDateTime(connection.lastSyncAt)}` - : 'Noch keine Synchronisation'} - + + + - {grantedPermissions.length > 0 && ( - - {grantedPermissions.map((permission) => ( - - ))} - - )} - - - + + + {connection.lastSyncAt + ? `Synchronisiert ${formatTeamRelative(connection.lastSyncAt)}` + : 'Noch keine Synchronisation'} + {isConnected && ( - <> + - - )} - - {isRoadmap && ( - - Diese Anbindung ist geplant. - + )} diff --git a/src/components/team/ConnectionSummaryList.tsx b/src/components/team/ConnectionSummaryList.tsx index 3c9032e..9057c1a 100644 --- a/src/components/team/ConnectionSummaryList.tsx +++ b/src/components/team/ConnectionSummaryList.tsx @@ -1,66 +1,95 @@ +import { memo } from 'react' import { Box, Typography } from '@mui/material' import type { AgentConnection } from '../../domain/agentConnection' import type { TeamAgent } from '../../domain/teamAgent' import { AgentConnectionStatusBadge } from './AgentBadges' +import { AgentAvatarGroup } from './AgentAvatarGroup' +import { ConnectionCategoryIcon } from './ConnectionCard' import { AGENT_CONNECTION_CATEGORY_LABELS } from '../../lib/constants' import { DS_BG, DS_BORDER, DS_TEXT } from '../../lib/ds' import { formatTeamRelative } from '../../lib/teamClock' interface Props { connections: AgentConnection[] - agents: TeamAgent[] + /** + * Wird nicht mehr benötigt: die Porträtgruppe löst die Namen selbst aus dem + * Verzeichnis auf. Bleibt optional erhalten, damit bestehende Aufrufer + * unverändert weiterlaufen. + */ + agents?: TeamAgent[] } /** * Kompakte Darstellung der Verbindungen auf der Teamübersicht (§6.6). - * Dieselben fachlichen Inhalte wie auf der vollständigen Seite «Kanäle & Systeme», - * nur ohne Aktionen — verbunden wird dort, nicht hier. + * Dasselbe Kartenmuster wie auf «Kanäle & Systeme» — Sinnbild, Name, Zustand, + * Porträtgruppe —, nur ohne Aktionen: verbunden wird dort, nicht hier. */ -export function ConnectionSummaryList({ connections, agents }: Props) { - const nameById = new Map(agents.map(a => [a.id, a.name])) - +export function ConnectionSummaryList({ connections }: Props) { return ( - {connections.map((connection) => { - const users = connection.usedByAgentIds.map(id => nameById.get(id) ?? id) - return ( - - - - {AGENT_CONNECTION_CATEGORY_LABELS[connection.category] ?? connection.name} - - - - - - {users.length > 0 ? `Genutzt von ${users.join(', ')}` : 'Noch keinem Mitarbeiter zugewiesen'} - - - - {connection.lastSyncAt - ? `Zuletzt abgeglichen ${formatTeamRelative(connection.lastSyncAt)}` - : 'Noch kein Abgleich'} - - - ) - })} + {connections.map((connection) => ( + + ))} ) } + +const ConnectionSummaryCard = memo(function ConnectionSummaryCard({ + connection, +}: { + connection: AgentConnection +}) { + const title = AGENT_CONNECTION_CATEGORY_LABELS[connection.category] ?? connection.name + + return ( + + + + + {title} + + + + + + + + {connection.lastSyncAt + ? `Zuletzt abgeglichen ${formatTeamRelative(connection.lastSyncAt)}` + : 'Noch kein Abgleich'} + + + ) +}) diff --git a/src/components/team/ConnectionWizardSteps.tsx b/src/components/team/ConnectionWizardSteps.tsx index 96bab4c..f986609 100644 --- a/src/components/team/ConnectionWizardSteps.tsx +++ b/src/components/team/ConnectionWizardSteps.tsx @@ -189,7 +189,7 @@ export function StepAgents({ agents, draft, onChange }: StepProps) { onChange={() => toggle(agent.id)} slotProps={{ input: { 'aria-label': `${agent.name} zuweisen` } }} /> - + {agent.name} diff --git a/src/components/team/RotatableAgentWheel.tsx b/src/components/team/RotatableAgentWheel.tsx new file mode 100644 index 0000000..19a16ec --- /dev/null +++ b/src/components/team/RotatableAgentWheel.tsx @@ -0,0 +1,209 @@ +import { useCallback, useMemo, useRef, useState } from 'react' +import { Box, Typography } from '@mui/material' +import type { AgentDirectoryEntry } from '../../domain/agentDirectory' +import { AgentAvatar } from './AgentAvatar' +import { BADGE_COLORS, DS_BG, DS_BORDER, DS_TEXT } from '../../lib/ds' + +interface Props { + agents: AgentDirectoryEntry[] + selectedId: string | null + onSelect: (agentId: string) => void +} + +/** Grad Drehung je gezogenem Pixel. Ein voller Durchlauf braucht so gut 700 px. */ +const DRAG_DEGREES_PER_PX = 0.5 +/** Durchmesser des gedachten Vollkreises; sichtbar ist nur die untere Hälfte. */ +const WHEEL_DIAMETER = 720 +const AVATAR_PX = 66 + +/** + * Drehbares Agentenrad der Organigramm-Ansicht. + * + * Der gedachte Vollkreis ragt nach oben aus dem Container heraus und wird von + * ihm abgeschnitten — sichtbar bleibt der untere Halbkreis. Deshalb wird nichts + * am Bild zugeschnitten, sondern allein per `overflow: hidden` beschnitten. + * + * Aktiv ist immer, wer unten in der Mitte steht. Während des Ziehens läuft nur + * ein lokaler Drehwert mit; die Auswahl wechselt erst beim Einrasten. Sonst + * würde bei jeder Mausbewegung das gesamte Dossier darunter neu aufgebaut. + */ +export function RotatableAgentWheel({ agents, selectedId, onSelect }: Props) { + const step = agents.length > 0 ? 360 / agents.length : 360 + const selectedIndex = Math.max(0, agents.findIndex(a => a.id === selectedId)) + + const [dragDeg, setDragDeg] = useState(0) + // Zwei Grössen für denselben Vorgang: die Ref trägt den Startpunkt durch die + // Pointer-Ereignisse, der State steuert die Darstellung. Eine Ref im Render zu + // lesen wäre regelwidrig — die Änderung löst kein neues Rendern aus. + const [isDragging, setIsDragging] = useState(false) + const dragging = useRef<{ startX: number } | null>(null) + + // Drehung, die den gewählten Agenten nach unten in die Mitte bringt. + const baseDeg = 180 - selectedIndex * step + const rotation = baseDeg + dragDeg + + const positions = useMemo( + () => agents.map((_, i) => i * step), + [agents, step], + ) + + const commitNearest = useCallback( + (currentRotation: number) => { + if (agents.length === 0) return + // Welcher Index steht dieser Drehung am nächsten? + const raw = (180 - currentRotation) / step + const index = ((Math.round(raw) % agents.length) + agents.length) % agents.length + const next = agents[index] + if (next && next.id !== selectedId) onSelect(next.id) + setDragDeg(0) + }, + [agents, step, selectedId, onSelect], + ) + + const handlePointerDown = useCallback((e: React.PointerEvent) => { + dragging.current = { startX: e.clientX } + setIsDragging(true) + e.currentTarget.setPointerCapture(e.pointerId) + }, []) + + const handlePointerMove = useCallback((e: React.PointerEvent) => { + if (!dragging.current) return + setDragDeg((e.clientX - dragging.current.startX) * DRAG_DEGREES_PER_PX) + }, []) + + const handlePointerUp = useCallback( + (e: React.PointerEvent) => { + if (!dragging.current) return + const offset = (e.clientX - dragging.current.startX) * DRAG_DEGREES_PER_PX + dragging.current = null + setIsDragging(false) + commitNearest(baseDeg + offset) + }, + [baseDeg, commitNearest], + ) + + const move = useCallback( + (delta: number) => { + if (agents.length === 0) return + const next = agents[(selectedIndex + delta + agents.length) % agents.length] + if (next) onSelect(next.id) + }, + [agents, selectedIndex, onSelect], + ) + + const handleKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (e.key === 'ArrowRight' || e.key === 'ArrowDown') { + e.preventDefault() + move(1) + } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') { + e.preventDefault() + move(-1) + } + }, + [move], + ) + + const active = agents[selectedIndex] + + return ( + + + {agents.map((agent, index) => { + const angle = positions[index] + const isActive = index === selectedIndex + return ( + onSelect(agent.id)} + sx={{ + position: 'absolute', + left: '50%', + top: '50%', + // erst auf den Radius schieben, dann die Raddrehung ausgleichen, + // damit die Portraits aufrecht stehen + transform: `rotate(${angle}deg) translateY(${WHEEL_DIAMETER / 2 - AVATAR_PX}px) rotate(${-angle - rotation}deg) translate(-50%, -50%)`, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: 0.5, + width: 150, + cursor: 'pointer', + }} + > + + + {agent.name} + + {isActive && ( + + {agent.role} + + )} + + ) + })} + + + + Ziehen oder Pfeiltasten, um zu wechseln — {agents.length} Mitarbeitende + + + ) +} diff --git a/src/components/team/TeamLevelTabs.tsx b/src/components/team/TeamLevelTabs.tsx new file mode 100644 index 0000000..95ec22b --- /dev/null +++ b/src/components/team/TeamLevelTabs.tsx @@ -0,0 +1,71 @@ +import { useMemo } from 'react' +import { Box, Tab, Tabs, Typography } from '@mui/material' +import type { AgentLevel } from '../../domain/agentDirectory' +import { AGENT_LEVEL_ORDER } from '../../domain/agentDirectory' +import { agentDirectory } from '../../mock-data/agentDirectory' +import { AGENT_LEVEL_TAB_LABELS } from '../../lib/constants' +import { DS_TEXT } from '../../lib/ds' + +interface Props { + value: AgentLevel + onChange: (level: AgentLevel) => void +} + +/** + * Filterreiter über der Kreisdarstellung. + * + * Die Stufen sind kumulativ: «+ Zentrale Dienste» zeigt Kernteam UND Zentrale + * Dienste. Deshalb steht neben jedem Reiter die Gesamtzahl der dann sichtbaren + * Mitarbeitenden und nicht die Zahl der Stufe allein — sonst läse sich «+ GB + * Kommerziell · 7» so, als verschwänden die inneren Ringe. + * + * Bezeichnungen stammen wörtlich aus dem Konzeptdokument. Keine neuen + * Stufennamen erfunden. + */ +export function TeamLevelTabs({ value, onChange }: Props) { + const cumulativeCounts = useMemo(() => { + const counts = new Map() + let running = 0 + for (const level of AGENT_LEVEL_ORDER) { + running += agentDirectory.filter(a => a.level === level).length + counts.set(level, running) + } + return counts + }, []) + + return ( + onChange(next)} + variant="scrollable" + scrollButtons="auto" + allowScrollButtonsMobile + aria-label="Personalstufen" + sx={{ + minHeight: 40, + '& .MuiTab-root': { + textTransform: 'none', + fontWeight: 600, + fontSize: '0.875rem', + minHeight: 40, + py: 0.5, + }, + }} + > + {AGENT_LEVEL_ORDER.map((level) => ( + + {AGENT_LEVEL_TAB_LABELS[level] ?? level} + + {cumulativeCounts.get(level)} + + + } + /> + ))} + + ) +} diff --git a/src/components/team/TeamOverviewRing.tsx b/src/components/team/TeamOverviewRing.tsx new file mode 100644 index 0000000..c7d45df --- /dev/null +++ b/src/components/team/TeamOverviewRing.tsx @@ -0,0 +1,174 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { Box, Typography } from '@mui/material' +import { useNavigate } from 'react-router' +import type { AgentDirectoryEntry, AgentLevel } from '../../domain/agentDirectory' +import { AGENT_LEVEL_ORDER } from '../../domain/agentDirectory' +import { agentDirectory } from '../../mock-data/agentDirectory' +import { AgentRing } from './AgentRing' +import { AgentPreviewPopover } from './AgentPreviewPopover' +import { RING_SPECS, RING_REFERENCE_PX } from './agentRingConfig' +import { ROUTES } from '../../lib/constants' +import { BADGE_COLORS, DS_TEXT } from '../../lib/ds' + +interface Props { + /** Bis zu welcher Stufe die Ringe sichtbar sind — kumulativ. */ + level: AgentLevel +} + +/** Misst die Containerbreite, damit Portraits und Schrift mitskalieren. */ +function useContainerWidth(): [React.RefObject, number] { + const ref = useRef(null) + const [width, setWidth] = useState(RING_REFERENCE_PX) + + useEffect(() => { + const node = ref.current + if (!node) return + + // Ohne ResizeObserver bleibt die Referenzbreite stehen: die Darstellung ist + // dann nicht mitskaliert, aber vollständig bedienbar. Ein harter Absturz + // wegen einer fehlenden Browser-Schnittstelle wäre die schlechtere Antwort. + if (typeof ResizeObserver === 'undefined') { + setWidth(node.getBoundingClientRect().width || RING_REFERENCE_PX) + return + } + + const observer = new ResizeObserver(([entry]) => { + setWidth(entry.contentRect.width) + }) + observer.observe(node) + return () => observer.disconnect() + }, []) + + return [ref, width] +} + +/** + * Kreisförmige Darstellung der digitalen Belegschaft. + * + * Aufbau nach der Referenzgrafik: Kernteam innen und gold gerahmt, danach die + * Zentralen Dienste, aussen die Spezialisten der Geschäftsbereiche. Welche Ringe + * sichtbar sind, bestimmt die gewählte Stufe — kumulativ, wie im Konzept. + * + * Nicht sichtbare Ringe werden ausgeblendet statt entfernt: so bleibt die + * Bewegung beim Stufenwechsel ruhig und der Kreis springt nicht in der Grösse. + */ +export function TeamOverviewRing({ level }: Props) { + const navigate = useNavigate() + const [ref, width] = useContainerWidth() + const [preview, setPreview] = useState(null) + const [anchorEl, setAnchorEl] = useState(null) + + const scale = width / RING_REFERENCE_PX + const visibleUpTo = AGENT_LEVEL_ORDER.indexOf(level) + + const agentsByLevel = useMemo(() => { + const map = new Map() + for (const spec of RING_SPECS) { + map.set(spec.level, agentDirectory.filter(a => a.level === spec.level)) + } + return map + }, []) + + const handleSelect = useCallback( + (agent: AgentDirectoryEntry, element: HTMLElement | null) => { + if (agent.isCore) { + navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${agent.id}`) + return + } + setPreview(agent) + setAnchorEl(element) + }, + [navigate], + ) + + // Der Ringknoten meldet nur den Agenten; das auslösende Element holen wir uns + // aus dem Fokus, damit die Vorschau am angeklickten Portrait hängt. + const onNodeSelect = useCallback( + (agent: AgentDirectoryEntry) => { + const active = document.activeElement + handleSelect(agent, active instanceof HTMLElement ? active : null) + }, + [handleSelect], + ) + + const closePreview = useCallback(() => { + setPreview(null) + setAnchorEl(null) + }, []) + + return ( + <> + + {RING_SPECS.map((spec, index) => ( + + ))} + + {/* Nabe */} + + + PROPERTY{' '} + ON + + + {agentDirectory.length} + + + digitale Mitarbeitende + + + + + + + ) +} diff --git a/src/components/team/WorkItemCard.tsx b/src/components/team/WorkItemCard.tsx index a1ed12d..b120d9c 100644 --- a/src/components/team/WorkItemCard.tsx +++ b/src/components/team/WorkItemCard.tsx @@ -1,15 +1,21 @@ -import { memo } from 'react' -import { Box, Typography } from '@mui/material' -import { AlertTriangle, Building2, Radio } from 'lucide-react' -import type { AgentWorkItem } from '../../domain/agentWorkItem' +import { memo, useMemo } from 'react' +import type { ReactNode } from 'react' +import { Box, Tooltip, Typography } from '@mui/material' +import { AlertTriangle, Building2, HelpCircle, Radio } from 'lucide-react' +import type { AgentWorkItem, AgentWorkItemPriority } from '../../domain/agentWorkItem' +import { + AgentWorkItemPriority as Priority, + AgentWorkItemStatus as WorkItemStatus, +} from '../../domain/agentWorkItem' import type { TeamAgent } from '../../domain/teamAgent' import { AgentAvatar } from './AgentAvatar' -import { AgentPriorityBadge, AgentWorkItemStatusBadge } from './AgentBadges' +import { AgentWorkItemStatusBadge } from './AgentBadges' import { AGENT_CHANNEL_LABELS, + AGENT_PRIORITY_LABELS, AGENT_WORK_ITEM_KIND_LABELS, } from '../../lib/constants' -import { DS_BG, DS_BORDER, DS_SHADOW, DS_SURFACE, DS_TEXT } from '../../lib/ds' +import { DS_BG, DS_BORDER, DS_SHADOW, DS_TEXT } from '../../lib/ds' import { formatTeamDateTime, formatTeamRelative } from '../../lib/teamClock' interface Props { @@ -19,17 +25,67 @@ interface Props { onSelect: (id: string) => void } +const AVATAR_PX = 44 + +/** + * Nur die beiden Ausnahmestufen tragen überhaupt eine Farbe. «Mittel» und + * «Niedrig» sind der Normalfall und werden gar nicht angezeigt — eine Angabe, + * die auf fast jeder Karte steht, trägt keine Information. + */ +const PRIORITY_ACCENT: Partial> = { + [Priority.CRITICAL]: DS_TEXT.error, + [Priority.HIGH]: DS_TEXT.warning, +} + +/** Dezentes Trennzeichen statt eingefärbter Flächen zwischen den Fussangaben. */ +function MetaDot() { + return ( + + · + + ) +} + +function MetaEntry({ icon, text }: { icon?: ReactNode; text: string }) { + return ( + + {icon} + + {text} + + + ) +} + /** * Ein Eintrag im Bearbeitungsverlauf. * * `React.memo` ist hier nicht optional: die Liste rendert bis zu 14 Karten und * der Drawer verändert bei jeder Auswahl den Zustand der Seite — ohne Memo * würde jede Auswahl die gesamte Liste neu zeichnen (CLAUDE.md §10.2). + * + * Farbführung: die Karte bleibt grundsätzlich neutral. Farbe erscheint nur + * dort, wo sie eine Abweichung meldet — Ausnahmepriorität, ein vom + * Erwartungswert abweichender Status und der ausgewählte Zustand. */ export const WorkItemCard = memo(function WorkItemCard({ item, agent, selected, onSelect }: Props) { const kindLabel = AGENT_WORK_ITEM_KIND_LABELS[item.kind] ?? item.kind const channelLabel = AGENT_CHANNEL_LABELS[item.sourceChannel] ?? item.sourceChannel const timestamp = item.completedAt ?? item.createdAt + const priorityAccent = PRIORITY_ACCENT[item.priority] + + // Auch ohne Objekt-ID anzeigen: Vorgänge ohne Objektbezug tragen im Label oft + // die entscheidende Einordnung («Zuordnung offen — Region Zug»). Hinge der + // Block allein an der ID, ginge sie verloren. + const objectText = useMemo( + () => [item.objectId, item.objectLabel].filter(Boolean).join(' · '), + [item.objectId, item.objectLabel], + ) + + // Erwartungswert: pendente Vorgänge stehen auf «Offen», erledigte auf + // «Abgeschlossen». Nur eine Abweichung davon ist eine Meldung wert. + const expectedStatus = item.requiresDecision ? WorkItemStatus.PENDING : WorkItemStatus.COMPLETED + const showStatus = item.status !== expectedStatus return ( - - {agent && } + + {agent && ( + + + {agent.name} + + + {agent.role} + + + } + > + {/* Wrapper, weil MUI dem Kind eine Referenz anhängt — `AgentAvatar` + ist memoisiert und nimmt selbst keine entgegen. */} + + + + + )} {/* Kopfzeile: Mitarbeiter, Rolle, Zeitpunkt */} - + {agent?.name ?? 'Unbekannt'} @@ -73,62 +150,49 @@ export const WorkItemCard = memo(function WorkItemCard({ item, agent, selected, - + {item.title} - + {item.summary} - {/* Grund der Rückfrage — der wichtigste Satz bei pendenten Vorgängen */} + {/* Grund der Rückfrage — der wichtigste Satz bei pendenten Vorgängen. + Bewusst als schlichter Satz mit Icon, nicht als eingefärbte Fläche. */} {item.requiresDecision && item.escalationReason && ( - - - + + + {item.escalationReason} )} - {/* Fusszeile: Vorgangstyp, Objektbezug, Quellkanal, Status */} - - - - - - {kindLabel} - - - {/* Auch ohne Objekt-ID anzeigen: Vorgänge ohne Objektbezug tragen im - Label oft die entscheidende Einordnung («Zuordnung offen — Region - Zug»). Hinge der Block allein an der ID, ginge sie verloren. */} - {(item.objectId || item.objectLabel) && ( - - - - {[item.objectId, item.objectLabel].filter(Boolean).join(' · ')} + {/* Fusszeile: Ausnahmen zuerst, danach Vorgangstyp, Objektbezug, Kanal */} + + {priorityAccent && ( + + + + {AGENT_PRIORITY_LABELS[item.priority] ?? item.priority} )} - - - - {channelLabel} - - + {showStatus && } + + + + {objectText && ( + <> + + } text={objectText} /> + + )} + + + } text={channelLabel} /> {formatTeamRelative(timestamp)} diff --git a/src/components/team/WorkItemDetailDrawer.tsx b/src/components/team/WorkItemDetailDrawer.tsx index 8cb631e..6ff6759 100644 --- a/src/components/team/WorkItemDetailDrawer.tsx +++ b/src/components/team/WorkItemDetailDrawer.tsx @@ -58,7 +58,7 @@ export function WorkItemDetailDrawer() { flexShrink: 0, }} > - {agent && } + {agent && } {agent ? `${agent.name} · ${agent.role}` : 'Vorgang'} diff --git a/src/components/team/WorkItemList.tsx b/src/components/team/WorkItemList.tsx index 1ee5404..cc31c87 100644 --- a/src/components/team/WorkItemList.tsx +++ b/src/components/team/WorkItemList.tsx @@ -14,6 +14,12 @@ interface Props { emptyDescription: string } +/** + * Abstand zwischen zwei Vorgängen. Bewusst grosszügig: die Karten tragen kaum + * noch Farbe, die Trennung übernimmt der Weissraum. + */ +const LIST_GAP = 2.5 + export function WorkItemList({ filters, emptyTitle, emptyDescription }: Props) { const { data: items = [], isLoading, isError, refetch } = useAgentWorkItems(filters) const { data: agents = [] } = useTeamAgents() @@ -25,7 +31,7 @@ export function WorkItemList({ filters, emptyTitle, emptyDescription }: Props) { if (isLoading) { return ( - + @@ -42,7 +48,7 @@ export function WorkItemList({ filters, emptyTitle, emptyDescription }: Props) { } return ( - + {items.map((item) => ( a.personnelNumber === personnelNumber) - if (!agent) throw new Error(`Kein Mitarbeiter mit Personalnummer ${personnelNumber} im Katalog`) - return agent -} - -function headlineMetricOf(agent: TeamAgent): AgentMetric { - const metric = agent.metrics.find(m => m.id === agent.headlineMetricId) - if (!metric) throw new Error(`Kurzkennzahl ${agent.headlineMetricId} fehlt bei ${agent.name}`) - return metric -} - -/** Testing Library normalisiert Whitespace im DOM — der Erwartungswert muss gleich behandelt werden. */ -function normalized(text: string): string { - return text.replace(/\s+/g, ' ').trim() -} - -const ferdi = agentByPersonnelNumber('PO-ZD-02') - -describe('AgentCard', () => { - it('rendert Name, Rolle und Personalnummer des Mitarbeiters', () => { - renderWithProviders() - - const card = screen.getByRole('article') - expect(within(card).getByText(ferdi.name)).toBeInTheDocument() - expect(within(card).getByText(ferdi.role)).toBeInTheDocument() - expect(within(card).getByText(`Personalnummer ${ferdi.personnelNumber}`)).toBeInTheDocument() - }) - - it('rendert die Kurzbeschreibung', () => { - renderWithProviders() - - expect(screen.getByText(normalized(ferdi.shortDescription))).toBeInTheDocument() - }) - - it('zeigt den Aktivstatus als Text «Aktiv», nicht nur als farbigen Punkt', () => { - expect(ferdi.status).toBe(AgentStatus.ACTIVE) - renderWithProviders() - - const statusText = screen.getByText('Aktiv') - expect(statusText).toBeInTheDocument() - expect(statusText.textContent).toBe('Aktiv') - }) - - it('zeigt Wert und Label der Kurzkennzahl aus headlineMetricId', () => { - const headline = headlineMetricOf(ferdi) - renderWithProviders() - - const card = screen.getByRole('article') - expect(within(card).getByText(normalized(headline.value))).toBeInTheDocument() - expect(within(card).getByText(normalized(headline.label))).toBeInTheDocument() - }) - - it('zeigt ausschliesslich die Kurzkennzahl, nicht den ganzen Kennzahlensatz', () => { - const headline = headlineMetricOf(ferdi) - const otherLabels = ferdi.metrics.filter(m => m.id !== headline.id).map(m => normalized(m.label)) - renderWithProviders() - - expect(otherLabels.length).toBeGreaterThan(0) - for (const label of otherLabels) { - expect(screen.queryByText(label)).not.toBeInTheDocument() - } - }) - - it('ruft onOpen mit der Agenten-ID auf, wenn «Personalblatt öffnen» geklickt wird', async () => { - const onOpen = vi.fn() - renderWithProviders() - - fireEvent.click(screen.getByRole('button', { name: /Personalblatt öffnen/i })) - - await waitFor(() => expect(onOpen).toHaveBeenCalledTimes(1), WAIT) - expect(onOpen).toHaveBeenCalledWith(ferdi.id) - }) - - it('ruft onOpen nicht auf, solange nichts geklickt wurde', () => { - const onOpen = vi.fn() - renderWithProviders() - - expect(onOpen).not.toHaveBeenCalled() - }) - - it('zeigt bei einem pausierten Mitarbeiter «Pausiert» statt «Aktiv»', () => { - const paused: TeamAgent = { ...ferdi, status: AgentStatus.PAUSED } - renderWithProviders() - - expect(screen.getByText('Pausiert')).toBeInTheDocument() - expect(screen.queryByText('Aktiv')).not.toBeInTheDocument() - }) - - it('rendert für jeden Mitarbeiter des Kernteams Name, Rolle und Personalnummer', () => { - expect(mockTeamAgents.length).toBeGreaterThan(0) - - for (const agent of mockTeamAgents) { - const { unmount } = renderWithProviders() - - expect(screen.getByText(agent.name)).toBeInTheDocument() - expect(screen.getByText(agent.role)).toBeInTheDocument() - expect(screen.getByText(`Personalnummer ${agent.personnelNumber}`)).toBeInTheDocument() - - unmount() - } - }) - - it('rendert die Zeitangabe zum letzten Lauf, ohne dass ein konkreter Abstand geprüft wird', () => { - renderWithProviders() - - const card = screen.getByRole('article') - expect(within(card).getByText(/Zuletzt aktiv|Noch nicht gelaufen/)).toBeInTheDocument() - }) - - it('rendert das Porträt des Mitarbeiters', () => { - renderWithProviders() - - const portrait = screen.getByRole('img', { name: `${ferdi.name}, ${ferdi.role}` }) - expect(portrait).toHaveAttribute('src') - expect(portrait.getAttribute('src')).toBeTruthy() - }) - - it('fällt ohne hinterlegtes Porträt auf die Initialen zurück', () => { - // Ein Mitarbeiter, zu dem in `agentPhotos.ts` kein Bild liegt — so verhält - // sich die Karte, falls der Katalog später um jemanden ohne Foto wächst. - const ohneFoto = { ...ferdi, id: 'unbekannt' } - renderWithProviders() - - const card = screen.getByRole('article') - expect(within(card).getByText(ferdi.name.slice(0, 2).toUpperCase())).toBeInTheDocument() - }) - - it('gibt dem Avatar einen zugänglichen Namen aus Name und Rolle', () => { - renderWithProviders() - - // Der Name hängt an genau einem Element: mit Porträt am über `alt`, - // ohne Porträt am Container über role="img" + aria-label (§18). - expect( - screen.getByRole('img', { name: `${ferdi.name}, ${ferdi.role}` }), - ).toBeInTheDocument() - - // Der Mitarbeiter bleibt auf der Karte trotzdem eindeutig identifizierbar: - // Name und Rolle stehen als sichtbarer Text daneben. - expect(screen.getByText(ferdi.name)).toBeInTheDocument() - expect(screen.getByText(ferdi.role)).toBeInTheDocument() - }) -}) diff --git a/src/components/team/__tests__/TeamOverviewRing.test.tsx b/src/components/team/__tests__/TeamOverviewRing.test.tsx new file mode 100644 index 0000000..f575fae --- /dev/null +++ b/src/components/team/__tests__/TeamOverviewRing.test.tsx @@ -0,0 +1,136 @@ +/** + * Property On — Kreisdarstellung der Belegschaft. + * + * Abgesichert werden die Zusicherungen aus den Abnahmekriterien: die richtigen + * sieben im Kernteam, kumulative Stufenfilter, Portraits mit zugänglichem Namen + * und — fachlich am wichtigsten — dass ausschliesslich Kernteammitglieder in ein + * Dossier führen. Für die übrigen 29 gibt es keines, also darf auch kein Klick + * dorthin führen. + */ + +import { describe, it, expect } from 'vitest' +import { useLocation } from 'react-router' +import { screen, fireEvent, within } from '@testing-library/react' +import { renderWithProviders } from '../../../test/teamTestUtils' +import { TeamOverviewRing } from '../TeamOverviewRing' +import { TeamLevelTabs } from '../TeamLevelTabs' +import { agentDirectory } from '../../../mock-data/agentDirectory' +import { AgentLevel } from '../../../domain/agentDirectory' +import { AGENT_LEVEL_TAB_LABELS } from '../../../lib/constants' + +function LocationProbe() { + const location = useLocation() + return

{location.pathname}
+} + +const core = agentDirectory.filter(a => a.isCore) +const nonCore = agentDirectory.filter(a => !a.isCore) + +describe('Kernteam', () => { + it('besteht aus genau sieben Mitarbeitenden', () => { + expect(core).toHaveLength(7) + }) + + it('enthält die sieben Namen der Referenzgrafik', () => { + expect(core.map(a => a.name).sort()).toEqual( + ['Bruno', 'Ferdi', 'Lea', 'Livia', 'Nora', 'Reto', 'Sina'], + ) + }) + + it('umfasst insgesamt 36 Mitarbeitende auf vier Stufen', () => { + expect(agentDirectory).toHaveLength(36) + expect(agentDirectory.filter(a => a.level === AgentLevel.CORE)).toHaveLength(7) + expect(agentDirectory.filter(a => a.level === AgentLevel.CENTRAL_SERVICES)).toHaveLength(18) + expect(agentDirectory.filter(a => a.level === AgentLevel.COMMERCIAL)).toHaveLength(7) + expect(agentDirectory.filter(a => a.level === AgentLevel.RESIDENTIAL)).toHaveLength(4) + }) +}) + +describe('TeamLevelTabs', () => { + it('zeigt die vier Stufen mit dem Wortlaut des Konzepts', () => { + renderWithProviders( {}} />) + for (const level of Object.values(AgentLevel)) { + expect(screen.getByText(AGENT_LEVEL_TAB_LABELS[level])).toBeInTheDocument() + } + }) + + it('beziffert die Stufen kumulativ, nicht je Stufe einzeln', () => { + renderWithProviders( {}} />) + const tabs = screen.getAllByRole('tab') + expect(within(tabs[0]).getByText('7')).toBeInTheDocument() + expect(within(tabs[1]).getByText('25')).toBeInTheDocument() + expect(within(tabs[2]).getByText('32')).toBeInTheDocument() + expect(within(tabs[3]).getByText('36')).toBeInTheDocument() + }) + + it('meldet die gewählte Stufe nach oben', () => { + const seen: string[] = [] + renderWithProviders( + seen.push(l)} />, + ) + fireEvent.click(screen.getByText(AGENT_LEVEL_TAB_LABELS[AgentLevel.COMMERCIAL])) + expect(seen).toEqual([AgentLevel.COMMERCIAL]) + }) +}) + +describe('TeamOverviewRing', () => { + it('gibt jedem Portrait einen zugänglichen Namen aus Name und Funktion', () => { + renderWithProviders() + + // Bewusst EINE Abfrage statt 36 einzelner `getByRole(..., { name })`: + // jede Namensabfrage berechnet die Accessible Names des gesamten Baums neu, + // was bei 36 Knoten in die Zeitüberschreitung läuft. + const labels = screen + .getAllByRole('button') + .map(node => node.getAttribute('aria-label')) + + for (const agent of agentDirectory) { + expect(labels).toContain(`${agent.name}, ${agent.role}`) + } + expect(labels).toHaveLength(agentDirectory.length) + }) + + it('zeigt die Gesamtzahl in der Nabe', () => { + renderWithProviders() + expect(screen.getByText(String(agentDirectory.length))).toBeInTheDocument() + expect(screen.getByText('digitale Mitarbeitende')).toBeInTheDocument() + }) + + it('führt beim Kernteam ins Personaldossier', () => { + renderWithProviders( + <> + + + , + ) + const ferdi = core.find(a => a.id === 'ferdi')! + fireEvent.click(screen.getByRole('button', { name: `${ferdi.name}, ${ferdi.role}` })) + expect(screen.getByTestId('location')).toHaveTextContent( + '/supply/team/personalverwaltung/ferdi', + ) + }) + + it('führt ausserhalb des Kernteams NICHT ins Dossier, sondern zeigt eine Vorschau', () => { + renderWithProviders( + <> + + + , + ) + const other = nonCore[0] + fireEvent.click(screen.getByRole('button', { name: `${other.name}, ${other.role}` })) + + expect(screen.getByTestId('location')).toHaveTextContent('/') + expect(screen.getByTestId('location')).not.toHaveTextContent('personalverwaltung') + expect( + screen.getByText('Für diese Stufe ist noch kein Personaldossier hinterlegt.'), + ).toBeInTheDocument() + }) + + it('blendet äussere Ringe aus, solange nur das Kernteam gewählt ist', () => { + const { container } = renderWithProviders() + const hidden = container.querySelectorAll('[aria-hidden="true"]') + // Drei der vier Ringe sind ausgeblendet; die Führungslinien zählen zusätzlich. + expect(hidden.length).toBeGreaterThanOrEqual(3) + }) +}) diff --git a/src/components/team/agentPhotos.ts b/src/components/team/agentPhotos.ts index b022c73..daafb86 100644 --- a/src/components/team/agentPhotos.ts +++ b/src/components/team/agentPhotos.ts @@ -1,17 +1,19 @@ /** - * Property On — Porträts der digitalen Mitarbeiter. + * Property On — Porträts aller digitalen Mitarbeitenden. * - * Die Bilder stammen aus dem Konzeptdokument «Agenten_Bewirtschaftung_v2.html», - * wo sie als eingebettete JPEGs am jeweiligen Agenten hängen. Sie sind damit - * Teil der fachlichen Vorgabe, nicht eine gestalterische Zutat: das digitale - * Personalbüro zeigt Mitarbeiter mit Gesicht, nicht abstrakte Werkzeuge. + * Die Bilder stammen aus dem Konzeptdokument, wo sie als eingebettete JPEGs am + * jeweiligen Agenten hängen. Sie sind fachliche Vorgabe, nicht Dekoration: das + * digitale Personalbüro zeigt Mitarbeitende mit Gesicht, keine abstrakten + * Werkzeuge. * - * Die Zuordnung liegt bewusst in der Darstellungsschicht und nicht in - * `domain/teamAgent.ts` oder den Mockdaten. Ein Domain-Typ, der Binärdateien - * importiert, wäre an den Bundler gekoppelt und liesse sich weder in einem Test - * noch später gegen ein echtes Backend sauber verwenden. + * Die Zuordnung liegt bewusst in der Darstellungsschicht und nicht im Domain-Typ + * oder in den Mockdaten. Ein Domain-Modell, das Binärdateien importiert, wäre an + * den Bundler gekoppelt und weder im Test noch später gegen ein echtes Backend + * sauber verwendbar. * * Fehlt zu einer ID ein Bild, fällt `AgentAvatar` auf die Initialen zurück. + * + * ACHTUNG: generiert. Nicht von Hand pflegen. */ import bruno from '../../assets/team/bruno.jpg' @@ -21,6 +23,35 @@ import livia from '../../assets/team/livia.jpg' import nora from '../../assets/team/nora.jpg' import reto from '../../assets/team/reto.jpg' import sina from '../../assets/team/sina.jpg' +import ada from '../../assets/team/ada.jpg' +import carla from '../../assets/team/carla.jpg' +import diego from '../../assets/team/diego.jpg' +import dora from '../../assets/team/dora.jpg' +import emil from '../../assets/team/emil.jpg' +import filip from '../../assets/team/filip.jpg' +import kira from '../../assets/team/kira.jpg' +import lars from '../../assets/team/lars.jpg' +import mia from '../../assets/team/mia.jpg' +import paul from '../../assets/team/paul.jpg' +import pia from '../../assets/team/pia.jpg' +import rea from '../../assets/team/rea.jpg' +import rico from '../../assets/team/rico.jpg' +import uli from '../../assets/team/uli.jpg' +import vela from '../../assets/team/vela.jpg' +import vera from '../../assets/team/vera.jpg' +import vinz from '../../assets/team/vinz.jpg' +import vito from '../../assets/team/vito.jpg' +import beat from '../../assets/team/beat.jpg' +import fabio from '../../assets/team/fabio.jpg' +import nadia from '../../assets/team/nadia.jpg' +import oskar from '../../assets/team/oskar.jpg' +import otto from '../../assets/team/otto.jpg' +import sven from '../../assets/team/sven.jpg' +import tino from '../../assets/team/tino.jpg' +import gian from '../../assets/team/gian.jpg' +import ida from '../../assets/team/ida.jpg' +import jana from '../../assets/team/jana.jpg' +import zeno from '../../assets/team/zeno.jpg' export const AGENT_PHOTOS: Record = { bruno, @@ -30,4 +61,33 @@ export const AGENT_PHOTOS: Record = { nora, reto, sina, + ada, + carla, + diego, + dora, + emil, + filip, + kira, + lars, + mia, + paul, + pia, + rea, + rico, + uli, + vela, + vera, + vinz, + vito, + beat, + fabio, + nadia, + oskar, + otto, + sven, + tino, + gian, + ida, + jana, + zeno, } diff --git a/src/components/team/agentRingConfig.ts b/src/components/team/agentRingConfig.ts new file mode 100644 index 0000000..8b87237 --- /dev/null +++ b/src/components/team/agentRingConfig.ts @@ -0,0 +1,103 @@ +/** + * Property On — Geometrie der Kreisdarstellung. + * + * Einziger Ort, an dem Radien, Winkel und Portraitgrössen stehen. Die + * Komponenten rechnen selbst nichts aus und tragen keine Positionswerte — + * verteilte Positionsdaten in mehreren Komponenten wären beim ersten + * Layoutwechsel nicht mehr konsistent zu halten. + * + * Alle Radien sind relativ zur halben Containerbreite (0…1), damit die + * Darstellung ohne Umrechnung mitskaliert. + */ + +import { AgentLevel } from '../../domain/agentDirectory' + +export interface RingSpec { + level: AgentLevel + /** Anteil der halben Containerkante, auf dem die Portraits sitzen. */ + radius: number + /** Portraitdurchmesser in Pixeln bei Referenzbreite `RING_REFERENCE_PX`. */ + avatarPx: number + /** Funktion dauerhaft anzeigen — sonst erst bei Fokus oder im Tooltip. */ + showRole: boolean + /** Gestrichelter Rahmen: Stufe befindet sich noch im Aufbau. */ + dashed: boolean +} + +/** Breite, für die die Pixelwerte gedacht sind; darunter wird linear skaliert. */ +export const RING_REFERENCE_PX = 940 + +export const RING_SPECS: RingSpec[] = [ + { level: AgentLevel.CORE, radius: 0.30, avatarPx: 76, showRole: true, dashed: false }, + { level: AgentLevel.CENTRAL_SERVICES, radius: 0.52, avatarPx: 54, showRole: false, dashed: false }, + { level: AgentLevel.COMMERCIAL, radius: 0.72, avatarPx: 54, showRole: false, dashed: false }, + { level: AgentLevel.RESIDENTIAL, radius: 0.90, avatarPx: 50, showRole: false, dashed: true }, +] + +export function ringSpecFor(level: AgentLevel): RingSpec { + return RING_SPECS.find(s => s.level === level) ?? RING_SPECS[RING_SPECS.length - 1] +} + +export interface RingNodePosition { + /** Position in Prozent der Containerkante, bezogen auf die Mitte. */ + leftPct: number + topPct: number + angleDeg: number +} + +export interface ArcOptions { + /** Startwinkel in Grad; 0 = oben, im Uhrzeigersinn wachsend. */ + startDeg?: number + /** Überstrichener Winkel. 360 = voller Kreis, 180 = Halbkreis. */ + sweepDeg?: number + /** + * Bei geschlossenem Kreis liegen Anfang und Ende aufeinander, deshalb wird + * durch `count` geteilt. Bei einem offenen Bogen soll der letzte Eintrag am + * Endwinkel stehen, deshalb durch `count - 1`. + */ + closed?: boolean +} + +/** + * Verteilt `count` Knoten gleichmässig auf einem Bogen. + * Rückgabe in Prozent, damit die Darstellung containerrelativ bleibt. + */ +export function layoutArc( + count: number, + radius: number, + { startDeg = 0, sweepDeg = 360, closed = true }: ArcOptions = {}, +): RingNodePosition[] { + if (count <= 0) return [] + if (count === 1) { + const rad = ((startDeg - 90) * Math.PI) / 180 + return [{ + leftPct: 50 + Math.cos(rad) * radius * 50, + topPct: 50 + Math.sin(rad) * radius * 50, + angleDeg: startDeg, + }] + } + + const divisor = closed ? count : count - 1 + return Array.from({ length: count }, (_, i) => { + const angleDeg = startDeg + (sweepDeg * i) / divisor + // -90°, damit 0° oben liegt statt rechts + const rad = ((angleDeg - 90) * Math.PI) / 180 + return { + leftPct: 50 + Math.cos(rad) * radius * 50, + topPct: 50 + Math.sin(rad) * radius * 50, + angleDeg, + } + }) +} + +/** + * Winkel der aktiven Position im Organigramm-Halbkreis: unten mittig. + * Der Halbkreis wird oben abgeschnitten, unten steht der gewählte Agent. + */ +export const WHEEL_ACTIVE_ANGLE_DEG = 180 + +/** Bogen, auf dem das Agentenrad seine Portraits verteilt. */ +export const WHEEL_ARC = { + startDeg: 90, + sweepDeg: 180, +} as const diff --git a/src/components/team/index.ts b/src/components/team/index.ts index ed8db54..0ba079d 100644 --- a/src/components/team/index.ts +++ b/src/components/team/index.ts @@ -2,6 +2,17 @@ export { AgentAvatar } from './AgentAvatar' export type { AgentAvatarSize } from './AgentAvatar' +export { AgentAvatarGroup } from './AgentAvatarGroup' +export { AGENT_PHOTOS } from './agentPhotos' +export { + RING_SPECS, + RING_REFERENCE_PX, + ringSpecFor, + layoutArc, + WHEEL_ARC, + WHEEL_ACTIVE_ANGLE_DEG, +} from './agentRingConfig' +export type { RingSpec, RingNodePosition, ArcOptions } from './agentRingConfig' export { AgentStatusBadge, @@ -16,10 +27,20 @@ export { export { TeamPageHeader } from './TeamPageHeader' export { TeamSectionHeader } from './TeamSectionHeader' export { TeamKpiSection } from './TeamKpiSection' -export { AgentCard } from './AgentCard' + +// Kreisdarstellung der Belegschaft — ersetzt das frühere Kernteam-Kartenraster +export { TeamLevelTabs } from './TeamLevelTabs' +export { TeamOverviewRing } from './TeamOverviewRing' +export { AgentRing } from './AgentRing' +export { AgentRingNode } from './AgentRingNode' +export { AgentPreviewPopover } from './AgentPreviewPopover' export { ConnectionSummaryList } from './ConnectionSummaryList' // Personalverwaltung +export { AgentDossier, DOSSIER_TABS, DEFAULT_DOSSIER_SEGMENT, isDossierSegment } from './AgentDossier' +export type { DossierSegment } from './AgentDossier' +export { AgentDescriptionTab } from './AgentDescriptionTab' +export { RotatableAgentWheel } from './RotatableAgentWheel' export { AgentListPanel } from './AgentListPanel' export { AgentDossierHeader } from './AgentDossierHeader' export { AgentInfoBox } from './AgentInfoBox' diff --git a/src/domain/agentDirectory.ts b/src/domain/agentDirectory.ts new file mode 100644 index 0000000..df490c4 --- /dev/null +++ b/src/domain/agentDirectory.ts @@ -0,0 +1,66 @@ +/** + * Property On — Verzeichnis der digitalen Belegschaft. + * + * Ergänzt `teamAgent.ts`, ersetzt es nicht: `TeamAgent` ist das vollständige + * Personaldossier der sieben Kernteammitglieder, `AgentDirectoryEntry` sind die + * Stammdaten aller 36 Mitarbeitenden für die Kreisdarstellung. + * + * Die Stufenbezeichnungen sind aus dem Konzeptdokument übernommen und nicht neu + * erfunden. Sie sind kumulativ zu lesen — «+ Zentrale Dienste» meint Kernteam + * plus Zentrale Dienste, nicht Zentrale Dienste allein. + */ + +/** Personalstufe — bestimmt zugleich den Ring in der Kreisdarstellung. */ +export const AgentLevel = { + CORE: 'CORE', + CENTRAL_SERVICES: 'CENTRAL_SERVICES', + COMMERCIAL: 'COMMERCIAL', + RESIDENTIAL: 'RESIDENTIAL', +} as const +export type AgentLevel = typeof AgentLevel[keyof typeof AgentLevel] + +/** Ringreihenfolge von innen nach aussen. */ +export const AGENT_LEVEL_ORDER: AgentLevel[] = [ + AgentLevel.CORE, + AgentLevel.CENTRAL_SERVICES, + AgentLevel.COMMERCIAL, + AgentLevel.RESIDENTIAL, +] + +export const AgentDepartment = { + CENTRAL_SERVICES: 'CENTRAL_SERVICES', + COMMERCIAL: 'COMMERCIAL', + RESIDENTIAL: 'RESIDENTIAL', +} as const +export type AgentDepartment = typeof AgentDepartment[keyof typeof AgentDepartment] + +/** Aufbaustand aus dem Konzept — nicht zu verwechseln mit `AgentStatus` (aktiv/pausiert). */ +export const AgentRollout = { + PROTOTYPE: 'PROTOTYPE', + IN_PROGRESS: 'IN_PROGRESS', + PLANNED: 'PLANNED', +} as const +export type AgentRollout = typeof AgentRollout[keyof typeof AgentRollout] + +export interface AgentDirectoryEntry { + id: string + name: string + role: string + email: string + level: AgentLevel + department: AgentDepartment + rollout: AgentRollout + /** true → vollständiges Personaldossier vorhanden. */ + isCore: boolean +} + +/** + * Minimalform für die Avatardarstellung. Bewusst schmal, damit sowohl ein + * vollständiger `TeamAgent` als auch ein blosser Verzeichniseintrag hineinpasst + * — sonst bräuchte es zwei fast identische Avatarkomponenten. + */ +export interface AgentAvatarSubject { + id: string + name: string + role: string +} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 2cb3fcd..1986183 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -330,6 +330,40 @@ export const AGENT_PERIOD_LABELS: Record = { ALL: 'Gesamter Zeitraum', } +/** + * Personalstufen der digitalen Belegschaft. + * + * Wortlaut unverändert aus dem Konzeptdokument übernommen — die Reiter sind + * kumulativ zu lesen: «+ Zentrale Dienste» meint Kernteam plus Zentrale Dienste. + */ +export const AGENT_LEVEL_LABELS: Record = { + CORE: 'Kernteam', + CENTRAL_SERVICES: 'Zentrale Dienste', + COMMERCIAL: 'GB Kommerzielle Immobilien', + RESIDENTIAL: 'GB Wohnen', +} + +/** Beschriftung der Filterreiter — ebenfalls Wortlaut des Konzepts. */ +export const AGENT_LEVEL_TAB_LABELS: Record = { + CORE: 'Kernteam', + CENTRAL_SERVICES: '+ Zentrale Dienste', + COMMERCIAL: '+ GB Kommerziell', + RESIDENTIAL: 'Alle 36', +} + +export const AGENT_DEPARTMENT_LABELS: Record = { + CENTRAL_SERVICES: 'Zentrale Dienste', + COMMERCIAL: 'GB Kommerzielle Immobilien', + RESIDENTIAL: 'GB Wohnen', +} + +/** Aufbaustand aus dem Konzept — nicht der Betriebszustand aktiv/pausiert. */ +export const AGENT_ROLLOUT_LABELS: Record = { + PROTOTYPE: 'Prototyp läuft', + IN_PROGRESS: 'Im Aufbau', + PLANNED: 'Geplant', +} + /** Simulierte Ladezeit für Demo-Aktionen (§19.1: 300–800 ms). */ export const AGENT_SIM_DELAY_MS = 420 export const AGENT_SIM_DELAY_SLOW_MS = 760 diff --git a/src/mock-data/agentDirectory.ts b/src/mock-data/agentDirectory.ts new file mode 100644 index 0000000..231e241 --- /dev/null +++ b/src/mock-data/agentDirectory.ts @@ -0,0 +1,385 @@ +/** + * Property On — Verzeichnis aller digitalen Mitarbeitenden. + * + * Quelle ist das Konzeptdokument «Agenten_Bewirtschaftung_v2.html» (Stand + * 24.07.2026): Namen, Funktionen, Personalstufen, Bereiche und Rollout-Status + * sind daraus unverändert übernommen, ebenso die Porträts. + * + * Abgrenzung zu `mockTeamAgents`: dieses Verzeichnis trägt nur die Stammdaten, + * die für die Kreisdarstellung nötig sind. Ein vollständiges Personaldossier — + * Aufgaben, Kanäle, Systemzugänge, Einstellungen, Protokoll — besitzen + * ausschliesslich die sieben Kernteammitglieder in `src/mock-data/agents/`. + * Für die übrigen 29 werden bewusst keine Inhalte erfunden. + * + * ACHTUNG: generiert aus dem Konzept. Nicht von Hand pflegen — bei einer neuen + * Konzeptfassung neu erzeugen, sonst driften Verzeichnis und Quelle auseinander. + */ + +import type { AgentDirectoryEntry } from '../domain/agentDirectory' +import { AgentLevel, AgentDepartment, AgentRollout } from '../domain/agentDirectory' + +export const agentDirectory: AgentDirectoryEntry[] = [ + { + id: 'bruno', + name: 'Bruno', + role: 'Besichtigungs-Briefing', + email: 'bruno@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.IN_PROGRESS, + isCore: true, + }, + { + id: 'ferdi', + name: 'Ferdi', + role: 'Fristen-Wächter', + email: 'ferdi@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PROTOTYPE, + isCore: true, + }, + { + id: 'lea', + name: 'Lea', + role: 'Anfragen-Manager', + email: 'lea@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PROTOTYPE, + isCore: true, + }, + { + id: 'livia', + name: 'Livia', + role: 'Lage-Analyst', + email: 'livia@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.IN_PROGRESS, + isCore: true, + }, + { + id: 'nora', + name: 'Nora', + role: 'Markt-Scout', + email: 'nora@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PROTOTYPE, + isCore: true, + }, + { + id: 'reto', + name: 'Reto', + role: 'Recap-Agent', + email: 'reto@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.IN_PROGRESS, + isCore: true, + }, + { + id: 'sina', + name: 'Sina', + role: 'Vertragsauskunft', + email: 'sina@property-on.ch', + level: AgentLevel.CORE, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.IN_PROGRESS, + isCore: true, + }, + { + id: 'ada', + name: 'Ada', + role: 'Datenqualitäts-Wächterin', + email: 'ada@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PROTOTYPE, + isCore: false, + }, + { + id: 'carla', + name: 'Carla', + role: 'Bestands-Radar', + email: 'carla@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'diego', + name: 'Diego', + role: 'Decision-Brief-Ersteller', + email: 'diego@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PROTOTYPE, + isCore: false, + }, + { + id: 'dora', + name: 'Dora', + role: 'Dossier-Erstellerin', + email: 'dora@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'emil', + name: 'Emil', + role: 'Unterlagen-Versand', + email: 'emil@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'filip', + name: 'Filip', + role: 'Ablage-Agent', + email: 'filip@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'kira', + name: 'Kira', + role: 'Konkurrenz-Beobachterin', + email: 'kira@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'lars', + name: 'Lars', + role: 'Archiv-Digitalisierer', + email: 'lars@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'mia', + name: 'Mia', + role: 'Mietpreis-Benchmarkerin', + email: 'mia@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'paul', + name: 'Paul', + role: 'Pipeline-Führer', + email: 'paul@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'pia', + name: 'Pia', + role: 'Mietantritt-Koordinatorin', + email: 'pia@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'rea', + name: 'Rea', + role: 'Referenz-Einholerin', + email: 'rea@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'rico', + name: 'Rico', + role: 'Eigentümer-Reporter', + email: 'rico@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'uli', + name: 'Uli', + role: 'Übergabe-Assistent', + email: 'uli@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'vela', + name: 'Vela', + role: 'Cockpit-Agentin', + email: 'vela@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'vera', + name: 'Vera', + role: 'Inserat-Texterin', + email: 'vera@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'vinz', + name: 'Vinz', + role: 'Vertragsentwurf-Assistent', + email: 'vinz@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'vito', + name: 'Vito', + role: 'Objekt-Erfasser', + email: 'vito@property-on.ch', + level: AgentLevel.CENTRAL_SERVICES, + department: AgentDepartment.CENTRAL_SERVICES, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'beat', + name: 'Beat', + role: 'Zahlungs-Frühwarner', + email: 'beat@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'fabio', + name: 'Fabio', + role: 'Fit-out-Rechner', + email: 'fabio@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'nadia', + name: 'Nadia', + role: 'Umsatzmiete-Abrechnerin', + email: 'nadia@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'oskar', + name: 'Oskar', + role: 'Offerten-Schreiber', + email: 'oskar@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'otto', + name: 'Otto', + role: 'Options-Vorbereiter', + email: 'otto@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.PLANNED, + isCore: false, + }, + { + id: 'sven', + name: 'Sven', + role: 'Mieter-Check', + email: 'sven@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.PROTOTYPE, + isCore: false, + }, + { + id: 'tino', + name: 'Tino', + role: 'Mietzins-Rechner', + email: 'tino@property-on.ch', + level: AgentLevel.COMMERCIAL, + department: AgentDepartment.COMMERCIAL, + rollout: AgentRollout.IN_PROGRESS, + isCore: false, + }, + { + id: 'gian', + name: 'Gian', + role: 'Privat-Check', + email: 'gian@property-on.ch', + level: AgentLevel.RESIDENTIAL, + department: AgentDepartment.RESIDENTIAL, + rollout: AgentRollout.IN_PROGRESS, + isCore: false, + }, + { + id: 'ida', + name: 'Ida', + role: 'Nebenkosten-Assistentin', + email: 'ida@property-on.ch', + level: AgentLevel.RESIDENTIAL, + department: AgentDepartment.RESIDENTIAL, + rollout: AgentRollout.IN_PROGRESS, + isCore: false, + }, + { + id: 'jana', + name: 'Jana', + role: 'Wechsel-Koordinatorin Wohnen', + email: 'jana@property-on.ch', + level: AgentLevel.RESIDENTIAL, + department: AgentDepartment.RESIDENTIAL, + rollout: AgentRollout.IN_PROGRESS, + isCore: false, + }, + { + id: 'zeno', + name: 'Zeno', + role: 'Referenzzins-Spezialist', + email: 'zeno@property-on.ch', + level: AgentLevel.RESIDENTIAL, + department: AgentDepartment.RESIDENTIAL, + rollout: AgentRollout.IN_PROGRESS, + isCore: false, + }, +] + +/** Nur die sieben Kernteammitglieder — sie besitzen ein vollständiges Dossier. */ +export const coreAgentIds: string[] = agentDirectory.filter(a => a.isCore).map(a => a.id) diff --git a/src/pages/supply/KanaeleSysteme.tsx b/src/pages/supply/KanaeleSysteme.tsx index be6b84b..1ba77a0 100644 --- a/src/pages/supply/KanaeleSysteme.tsx +++ b/src/pages/supply/KanaeleSysteme.tsx @@ -63,18 +63,17 @@ export default function KanaeleSysteme() { gap: 1.5, gridTemplateColumns: { xs: '1fr', - md: 'repeat(2, 1fr)', - xl: 'repeat(3, 1fr)', + md: 'repeat(2, minmax(0, 1fr))', + xl: 'repeat(4, minmax(0, 1fr))', }, }} > {isLoading - ? [0, 1, 2, 3, 4, 5].map((i) => ) + ? [0, 1, 2, 3, 4, 5, 6, 7].map((i) => ) : connections.map((connection) => ( t.segment === value) +function isView(value: string | null): value is PersonnelView { + return value === VIEW.DOSSIER || value === VIEW.ORG } +/** Nur die sieben Kernteammitglieder — sie besitzen ein Personaldossier. */ +const coreEntries = agentDirectory.filter(a => a.isCore) + export default function Personalverwaltung() { const { agentId, tab } = useParams<{ agentId?: string; tab?: string }>() + const [searchParams, setSearchParams] = useSearchParams() const navigate = useNavigate() const theme = useTheme() const isCompact = useMediaQuery(theme.breakpoints.down('lg')) const { data: agents = [], isLoading, isError, refetch } = useTeamAgents() - const activeSegment: DossierSegment = isSegment(tab) ? tab : DEFAULT_SEGMENT - const selectedAgent = agents.find(a => a.id === agentId) ?? null + + const view: PersonnelView = isView(searchParams.get(VIEW_PARAM)) + ? (searchParams.get(VIEW_PARAM) as PersonnelView) + : VIEW.DOSSIER + const activeSegment: DossierSegment = isDossierSegment(tab) ? tab : DEFAULT_DOSSIER_SEGMENT + const selectedAgent = useMemo(() => agents.find(a => a.id === agentId) ?? null, [agents, agentId]) // Ohne Auswahl in der URL das erste Kernteammitglied öffnen — ein leeres // Dossier wäre für den Nutzer eine Sackgasse. useEffect(() => { if (!agentId && agents.length > 0) { - navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${agents[0].id}`, { replace: true }) + navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${agents[0].id}?${VIEW_PARAM}=${view}`, { replace: true }) } - }, [agentId, agents, navigate]) + }, [agentId, agents, navigate, view]) - const selectAgent = useCallback( - (id: string) => navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${id}/${activeSegment}`), - [navigate, activeSegment], + const goTo = useCallback( + (nextAgentId: string, segment: DossierSegment) => { + navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${nextAgentId}/${segment}?${VIEW_PARAM}=${view}`) + }, + [navigate, view], ) - const selectTab = useCallback( + const selectAgent = useCallback( + (id: string) => goTo(id, activeSegment), + [goTo, activeSegment], + ) + + const selectSegment = useCallback( (segment: DossierSegment) => { - if (agentId) navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${agentId}/${segment}`) + if (agentId) goTo(agentId, segment) }, - [navigate, agentId], + [goTo, agentId], + ) + + const changeView = useCallback( + (next: PersonnelView | null) => { + if (!next) return + const params = new URLSearchParams(searchParams) + params.set(VIEW_PARAM, next) + setSearchParams(params, { replace: false }) + }, + [searchParams, setSearchParams], + ) + + const dossier = selectedAgent && ( + ) return ( changeView(next)} + aria-label="Ansicht" + > + + + Dossieransicht + + + + Organigramm + + + } /> {isError ? ( refetch()} /> + ) : isLoading ? ( + + ) : !selectedAgent ? ( + + ) : view === VIEW.ORG ? ( + /* Organigramm: Halbkreis oben, Dossier des aktiven Mitarbeitenden darunter */ + + + {dossier} + ) : ( + /* Dossieransicht: Agentenliste links, Dossier rechts */ - {/* Ebene 2: Agentenliste */} - - {/* Ebene 3: Personaldossier */} - {isLoading && } - - {!isLoading && !selectedAgent && ( - - )} - - {selectedAgent && ( - <> - - - - - selectTab(v)} - variant="scrollable" - scrollButtons="auto" - allowScrollButtonsMobile - sx={{ '& .MuiTab-root': { textTransform: 'none', fontWeight: 600, fontSize: '0.9375rem' } }} - > - {DOSSIER_TABS.map((t) => ( - - ))} - - - - {/* `key` auf die Mitarbeiter-ID: beim Wechsel des Dossiers werden die - Reiter neu aufgebaut. Das ersetzt Zurücksetz-Effekte in jedem - einzelnen Reiter — sonst stünde der unbestätigte Entwurf des zuvor - gewählten Mitarbeiters in einem fremden Personalblatt. */} - - {activeSegment === 'aufgaben' && } - {activeSegment === 'kanaele' && } - {activeSegment === 'systeme' && } - {activeSegment === 'einstellungen' && } - {activeSegment === 'protokoll' && } - - - )} + {dossier} )} diff --git a/src/pages/supply/Teamuebersicht.tsx b/src/pages/supply/Teamuebersicht.tsx index 99610e8..fe0d3fa 100644 --- a/src/pages/supply/Teamuebersicht.tsx +++ b/src/pages/supply/Teamuebersicht.tsx @@ -1,89 +1,57 @@ -import { useCallback } from 'react' -import { useNavigate } from 'react-router' -import { Box, Button } from '@mui/material' -import { RotateCcw } from 'lucide-react' +import { useState } from 'react' +import { Box } from '@mui/material' import { TeamPageHeader, TeamSectionHeader, TeamKpiSection, - AgentCard, + TeamLevelTabs, + TeamOverviewRing, ConnectionSummaryList, } from '../../components/team' -import { CardSkeleton, ErrorState } from '../../components/ui' +import { ErrorState } from '../../components/ui' +import type { AgentLevel } from '../../domain/agentDirectory' +import { AgentLevel as Level } from '../../domain/agentDirectory' import { useTeamAgents } from '../../hooks/useTeamAgents' import { useAgentConnections } from '../../hooks/useAgentConnections' -import { useResetTeamDemo } from '../../hooks/useTeamDemo' import { ROUTES } from '../../lib/constants' /** * Startseite des Property-On-Bereichs. - * Verbindliche Reihenfolge: Auswertung, Kernteam, Kanäle & Systeme (§4.1). + * + * Aufbau: die Belegschaft als Kreis direkt unter dem Seitentitel, darunter die + * Auswertung und die Verbindungen. Der Kreis steht bewusst zuoberst — er ist die + * Antwort auf die Frage, mit der ein Bewirtschafter die Seite öffnet: «wer + * arbeitet hier eigentlich für mich?» + * + * Kopfbereich bewusst ohne Beschreibungstext und ohne «Demo zurücksetzen»: der + * Platz gehört der Visualisierung. */ export default function Teamuebersicht() { - const navigate = useNavigate() - const { data: agents = [], isLoading, isError, refetch } = useTeamAgents() + const [level, setLevel] = useState(Level.CORE) + const { data: agents = [], isError, refetch } = useTeamAgents() const { data: connections = [] } = useAgentConnections() - const resetDemo = useResetTeamDemo() - - const openAgent = useCallback( - (agentId: string) => navigate(`${ROUTES.SUPPLY.TEAM_PERSONNEL}/${agentId}`), - [navigate], - ) return ( - } - disabled={resetDemo.isPending} - onClick={() => resetDemo.mutate()} - sx={{ textTransform: 'none', fontWeight: 600 }} - > - {resetDemo.isPending ? 'Wird zurückgesetzt …' : 'Demo zurücksetzen'} - - } - /> + - + {isError ? ( refetch()} /> ) : ( <> - - - - - - - {isLoading - ? [0, 1, 2, 3].map((i) => ) - : agents.map((agent) => ( - - ))} + + + + - + + + + +