Merge pull request 'Virtual displays: the Streamed-screen and session⇄game cards showed on both tabs — they join the Configuration tab' (#353) from worktree-displays-tab-dup into main
ci / bun-nix (push) Successful in 39s
ci / web (push) Successful in 1m14s
ci / docs-site (push) Successful in 1m38s
ci / docs-drift (push) Successful in 1m4s
ci / rust-arm64 (push) Successful in 2m28s
deb / build-publish-gamescope (push) Successful in 41s
deb / build-publish-client-arm64 (push) Successful in 1m36s
docker / builders (ci/android-ci.Dockerfile, punktfunk-android-ci) (push) Successful in 14s
docker / builders (--build-arg FEDORA_VERSION=44, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm, -f44) (push) Successful in 1m50s
docker / builders (ci/arch-ci.Dockerfile, punktfunk-arch-ci) (push) Successful in 11s
docker / builders (ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 18s
docker / builders (ci/flatpak-ci.Dockerfile, punktfunk-flatpak-ci) (push) Successful in 12s
docker / builders (ci/gamescope-trixie.Dockerfile, punktfunk-gamescope-trixie) (push) Successful in 12s
docker / builders (ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 13s
docker / builders (ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 14s
docker / apps (., web/Dockerfile, punktfunk-web) (push) Successful in 47s
deb / build-publish (push) Successful in 5m1s
docker / apps (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 1m49s
arch / build-publish (push) Successful in 8m38s
deb / build-publish-host (push) Successful in 6m58s
docker / builders-arm64cross (push) Successful in 9s
docker / deploy-docs (push) Successful in 37s
deb / smoke-install (push) Successful in 3m7s
windows-host / package (push) Successful in 18m26s
windows-host / winget-source (push) Skipped
windows-host / canary-manifest (push) Successful in 34s
ci / rust (push) Successful in 20m18s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 19m7s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 19m2s
ci / bun-nix (push) Successful in 39s
ci / web (push) Successful in 1m14s
ci / docs-site (push) Successful in 1m38s
ci / docs-drift (push) Successful in 1m4s
ci / rust-arm64 (push) Successful in 2m28s
deb / build-publish-gamescope (push) Successful in 41s
deb / build-publish-client-arm64 (push) Successful in 1m36s
docker / builders (ci/android-ci.Dockerfile, punktfunk-android-ci) (push) Successful in 14s
docker / builders (--build-arg FEDORA_VERSION=44, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm, -f44) (push) Successful in 1m50s
docker / builders (ci/arch-ci.Dockerfile, punktfunk-arch-ci) (push) Successful in 11s
docker / builders (ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 18s
docker / builders (ci/flatpak-ci.Dockerfile, punktfunk-flatpak-ci) (push) Successful in 12s
docker / builders (ci/gamescope-trixie.Dockerfile, punktfunk-gamescope-trixie) (push) Successful in 12s
docker / builders (ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 13s
docker / builders (ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 14s
docker / apps (., web/Dockerfile, punktfunk-web) (push) Successful in 47s
deb / build-publish (push) Successful in 5m1s
docker / apps (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 1m49s
arch / build-publish (push) Successful in 8m38s
deb / build-publish-host (push) Successful in 6m58s
docker / builders-arm64cross (push) Successful in 9s
docker / deploy-docs (push) Successful in 37s
deb / smoke-install (push) Successful in 3m7s
windows-host / package (push) Successful in 18m26s
windows-host / winget-source (push) Skipped
windows-host / canary-manifest (push) Successful in 34s
ci / rust (push) Successful in 20m18s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 19m7s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 19m2s
This commit was merged in pull request #353.
This commit is contained in:
@@ -56,7 +56,10 @@ import { m } from "@/paraglide/messages";
|
||||
* (this is the host's *next-connect* behavior). The live-display list + multi-monitor arrangement
|
||||
* table below act on whatever is currently streaming.
|
||||
*/
|
||||
export const DisplaySection: FC = () => {
|
||||
export const DisplaySection: FC<{
|
||||
/** See [`DisplayTabs`] — the page's other configuration cards, tabbed along with the form. */
|
||||
configurationExtra?: ReactNode;
|
||||
}> = ({ configurationExtra }) => {
|
||||
const qc = useQueryClient();
|
||||
const { confirm } = useDialogs();
|
||||
const q = useGetDisplaySettings();
|
||||
@@ -181,6 +184,7 @@ export const DisplaySection: FC = () => {
|
||||
return (
|
||||
<DisplayTabs
|
||||
dirty={dirty}
|
||||
configurationExtra={configurationExtra}
|
||||
live={<LiveDisplays />}
|
||||
configuration={
|
||||
<>
|
||||
@@ -245,8 +249,13 @@ export const DisplaySection: FC = () => {
|
||||
export const DisplayTabs: FC<{
|
||||
dirty: boolean;
|
||||
configuration: ReactNode;
|
||||
/** Further self-contained cards that belong to the Configuration tab (streamed screen,
|
||||
* session⇄game lifetime). Rendered as siblings of the config card, INSIDE the tab: parked
|
||||
* below the tab shell they showed on both tabs, which read as the live tab's content being
|
||||
* duplicated into Configuration. */
|
||||
configurationExtra?: ReactNode;
|
||||
live: ReactNode;
|
||||
}> = ({ dirty, configuration, live }) => (
|
||||
}> = ({ dirty, configuration, configurationExtra, live }) => (
|
||||
<Tabs defaultValue="configuration" className="gap-card">
|
||||
<TabsList>
|
||||
<TabsTrigger value="configuration">
|
||||
@@ -266,10 +275,11 @@ export const DisplayTabs: FC<{
|
||||
<TabsTrigger value="live">{m.display_live()}</TabsTrigger>
|
||||
</TabsList>
|
||||
|
||||
<TabsContent value="configuration">
|
||||
<TabsContent value="configuration" className="flex flex-col gap-card">
|
||||
<Card>
|
||||
<CardContent className="space-y-4">{configuration}</CardContent>
|
||||
</Card>
|
||||
{configurationExtra}
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="live">
|
||||
|
||||
@@ -14,6 +14,10 @@ import { SessionGameCard } from "./SessionGameCard";
|
||||
* The session⇄game lifetime card sits here rather than on its own page because it is the same
|
||||
* question one step further out: keep-alive decides how long a *display* outlives a disconnect, and
|
||||
* this decides whether the *game* does.
|
||||
*
|
||||
* Both extra cards ride INSIDE the Configuration tab (they are policy surfaces): as plain siblings
|
||||
* below the tab shell they were visible from either tab, which read as the Live tab's content
|
||||
* bleeding into Configuration.
|
||||
*/
|
||||
export const SectionDisplays: FC = () => {
|
||||
useLocale();
|
||||
@@ -21,9 +25,14 @@ export const SectionDisplays: FC = () => {
|
||||
<Section maxWidth={false}>
|
||||
<div className="flex flex-col gap-card">
|
||||
<h1 className="text-2xl font-semibold">{m.nav_displays()}</h1>
|
||||
<DisplaySection />
|
||||
<MonitorCard />
|
||||
<SessionGameCard />
|
||||
<DisplaySection
|
||||
configurationExtra={
|
||||
<>
|
||||
<MonitorCard />
|
||||
<SessionGameCard />
|
||||
</>
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</Section>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user