+ You are not in any Team. Teams come from the game — join a guild in-game and it will + appear here after the next sync. +
+ )} + ++ {reason.detail} +
++ {rosterSummary({ members: team.memberCount, linked: team.linkedCount })} +
++ This Team is no longer active. + {data.successor && ( + <> + {' '}It is now{' '} + {data.successor.name}. + > + )} +
+ )} + ++ {rosterSummary({ members: data.memberCount, linked: data.linkedCount })} + {data.onlineCount > 0 && ` · ${data.onlineCount} online`} +
+ {note && ( ++ {note.text} +
+ )} + ++ View the full roster → +
+ + {/* The module's spot, under the counts. Core's online number above is + the durable floor refreshed at the reconcile interval; a module + holding a live presence feed renders the current one here, without + core acquiring an SSE stack for it (§3.3). Unfilled on bare core, + and a failure inside it is contained to this section. */} +The activity feed could not be loaded.
+ )} + + {!feed.loading && !feed.error && days.length === 0 && ( +Nothing has happened here yet.
+ )} + + {days.map((day) => ( +{scopeNote}
+ )} ++ ← Back to the Team +
+ + {(team.loading || roster.loading) &&+ {rosterSummary({ members: members.length, linked })} +
+ {note && ( ++ {note.text} +
+ )} + + {emptyReason &&{emptyReason}
} + + {members.length > 0 && ( +| Name | +Rank | +Status | ++ |
|---|---|---|---|
| + {member.displayName} + {member.isLeader && ( + Leader + )} + {/* Muted text alone would read as a rendering glitch; the + chip is what makes the gap in the header line legible. */} + {!member.linked && ( + + not linked + + )} + | +{member.rankLabel || '—'} | ++ {member.online ? 'Online' : 'Offline'} + | + {/* The module's trailing cell. Nothing on bare core. + §3.4 declares this slot's props as `{ memberKey, userId, + displayName }`, and two of those cannot be supplied: + §3.2 withholds the member key and the user id from every + public roster response, so they are not in the payload + this component was rendered from. Publishing them to + reach the slot would put a game-internal identifier and + a site account id on a public page for every visitor, + module installed or not — the doc's two sections + contradict each other and §3.2 is the one that is a + security rule. The slot gets what core can honestly + give it. */} +
+ |
+
+ {note.text} +
+ )} + + {total > 0 && ( + setQuery(e.target.value)} + placeholder="Search by name or abbreviation" + aria-label="Search Teams" + style={{ + width: '100%', + padding: '10px 14px', + marginBottom: 20, + borderRadius: 8, + border: '1px solid var(--line)', + background: 'rgba(0,0,0,0.25)', + color: 'var(--head)', + fontFamily: 'var(--sans)', + }} + /> + )} + + {total === 0 && ( ++ {data.configured + ? 'No Teams yet.' + : 'This site has no Teams — no installed module supplies them.'} +
+ )} + + {total > 0 && teams.length === 0 && ( +No Team matches “{query}”.
+ )} + +