From 663f102cd117a7b2928d80156a6b5f1f8d9cecaf Mon Sep 17 00:00:00 2001 From: Pabloader Date: Fri, 10 Apr 2026 09:31:22 +0000 Subject: [PATCH] UI refactor --- src/common/assets/global.css | 16 ++++ src/common/assets/modal.module.css | 8 +- src/common/assets/ui.module.css | 16 +++- src/common/components/Modal.tsx | 1 + src/games/horde/assets/favicon.ico | Bin 0 -> 4286 bytes .../horde/assets/leaderboard-modal.module.css | 3 +- .../assets/manage-workers-modal.module.css | 32 ++----- src/games/horde/assets/modal.module.css | 72 -------------- .../horde/assets/options-modal.module.css | 25 +---- src/games/horde/assets/pwa_icon.png | Bin 0 -> 51507 bytes src/games/horde/assets/style.css | 50 ---------- .../components/modals/leaderboard-modal.tsx | 90 ++++++++---------- .../modals/manage-workers-modal.tsx | 89 ++++++++--------- .../horde/components/modals/options-modal.tsx | 40 ++++---- src/games/horde/index.tsx | 2 - src/games/storywriter/components/menu.tsx | 5 +- .../storywriter/components/settings-modal.tsx | 5 +- 17 files changed, 156 insertions(+), 298 deletions(-) create mode 100644 src/games/horde/assets/favicon.ico delete mode 100644 src/games/horde/assets/modal.module.css create mode 100644 src/games/horde/assets/pwa_icon.png delete mode 100644 src/games/horde/assets/style.css diff --git a/src/common/assets/global.css b/src/common/assets/global.css index 3d52b3d..10102b0 100644 --- a/src/common/assets/global.css +++ b/src/common/assets/global.css @@ -26,3 +26,19 @@ scrollbar-width: thin; scrollbar-color: var(--bg-active) transparent; } + +html { + padding: 0; + margin: 0; +} + +body { + background: var(--bg); + color: var(--text); + font-family: 'Georgia', serif; + font-size: 14px; + line-height: 1.5; + width: 100dvw; + height: 100dvh; + overflow: hidden; +} \ No newline at end of file diff --git a/src/common/assets/modal.module.css b/src/common/assets/modal.module.css index 6d9ce73..f36a4fc 100644 --- a/src/common/assets/modal.module.css +++ b/src/common/assets/modal.module.css @@ -7,7 +7,7 @@ max-width: 100%; height: 100%; max-height: 100%; - display: flex; + display: none; align-items: center; justify-content: center; background: transparent; @@ -17,6 +17,11 @@ &::backdrop { background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(8px); + } + + &[open] { + display: flex; } } @@ -59,6 +64,7 @@ border: none; border-radius: var(--radius); cursor: pointer; + padding: 0; &:hover { color: var(--text); diff --git a/src/common/assets/ui.module.css b/src/common/assets/ui.module.css index a94ba44..68517ad 100644 --- a/src/common/assets/ui.module.css +++ b/src/common/assets/ui.module.css @@ -2,7 +2,7 @@ /* ─── Form Fields ─────────────────────────────────────────── */ -.input { +.input, input, textarea { width: 100%; padding: 8px 12px; background: var(--bg); @@ -37,7 +37,7 @@ /* ─── Buttons ─────────────────────────────────────────────── */ -.button { +.button, button { padding: 8px 16px; border-radius: var(--radius); font-size: 14px; @@ -46,6 +46,7 @@ border: none; background: transparent; transition: all var(--transition); + color: var(--text); } .buttonPrimary { @@ -59,6 +60,17 @@ } } +.buttonDanger { + composes: button; + background: var(--danger, #dc2626); + color: var(--bg); + font-weight: 500; + + &:hover { + background: var(--danger-alt, #b91c1c); + } +} + .buttonSecondary { composes: button; border: 1px solid var(--border); diff --git a/src/common/components/Modal.tsx b/src/common/components/Modal.tsx index 9b0927a..25ccb41 100644 --- a/src/common/components/Modal.tsx +++ b/src/common/components/Modal.tsx @@ -23,6 +23,7 @@ export const Modal = ({ children, open, title, onClose, sidebar, footer, ['class if (open) { ref.current?.showModal(); } else { + console.log(ref.current); ref.current?.close(); } }, [open]); diff --git a/src/games/horde/assets/favicon.ico b/src/games/horde/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2ebbe7c322e3c1f478605a2143bc546b2b570519 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/src/games/horde/assets/leaderboard-modal.module.css b/src/games/horde/assets/leaderboard-modal.module.css index 47bbb09..a35c831 100644 --- a/src/games/horde/assets/leaderboard-modal.module.css +++ b/src/games/horde/assets/leaderboard-modal.module.css @@ -1,5 +1,6 @@ .modal { - width: 480px; + max-width: 480px; + height: fit-content; } .loading, diff --git a/src/games/horde/assets/manage-workers-modal.module.css b/src/games/horde/assets/manage-workers-modal.module.css index 9a7e674..4fe5a2c 100644 --- a/src/games/horde/assets/manage-workers-modal.module.css +++ b/src/games/horde/assets/manage-workers-modal.module.css @@ -1,5 +1,6 @@ .modal { - width: 480px; + max-width: 480px; + height: fit-content; } .loading { @@ -57,31 +58,10 @@ gap: 8px; } -.saveBtn { - padding: 8px 16px; - border: none; - border-radius: var(--radius); - background: var(--accent); - color: var(--bg); - transition: opacity var(--transition); - - &:hover { - opacity: 0.85; - } +.saveBtn { + composes: buttonSecondary from '@common/assets/ui.module.css'; } -.deleteBtn { - padding: 8px 16px; - border: 1px solid var(--border); - border-radius: var(--radius); - background: transparent; - color: var(--text-muted); - margin-left: auto; - transition: all var(--transition); - - &:hover { - background: var(--accent); - border-color: var(--accent); - color: var(--bg); - } +.deleteBtn { + composes: buttonDanger from '@common/assets/ui.module.css'; } \ No newline at end of file diff --git a/src/games/horde/assets/modal.module.css b/src/games/horde/assets/modal.module.css deleted file mode 100644 index 42d7c68..0000000 --- a/src/games/horde/assets/modal.module.css +++ /dev/null @@ -1,72 +0,0 @@ -.overlay { - position: fixed; - inset: 0; - background: rgba(0, 0, 0, 0.6); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; -} - -.modal { - background: var(--bg); - border: 1px solid var(--border); - border-radius: 8px; - display: flex; - flex-direction: column; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); - max-height: 80vh; -} - -.header { - display: flex; - align-items: center; - justify-content: space-between; - padding: 14px 16px; - border-bottom: 1px solid var(--border); - flex-shrink: 0; -} - -.title { - font-size: 16px; - font-weight: bold; - color: var(--text); -} - -.closeButton { - display: flex; - align-items: center; - justify-content: center; - width: 28px; - height: 28px; - color: var(--text-muted); - background: transparent; - border: none; - border-radius: var(--radius); - cursor: pointer; - - &:hover { - color: var(--text); - background: var(--bg-hover); - } -} - -.body { - flex: 1; - overflow-y: auto; - padding: 16px; - display: flex; - flex-direction: column; - gap: 14px; - min-height: 0; -} - -.footer { - padding: 12px 16px; - border-top: 1px solid var(--border); - display: flex; - flex-direction: row; - gap: 8px; - flex-shrink: 0; - align-items: center; -} \ No newline at end of file diff --git a/src/games/horde/assets/options-modal.module.css b/src/games/horde/assets/options-modal.module.css index 4e03a4b..d3da80f 100644 --- a/src/games/horde/assets/options-modal.module.css +++ b/src/games/horde/assets/options-modal.module.css @@ -1,5 +1,6 @@ .modal { - width: 380px; + max-width: 380px; + height: fit-content; } .label { @@ -15,27 +16,9 @@ } .saveBtn { - padding: 8px 16px; - border: none; - border-radius: var(--radius); - background: var(--accent); - color: var(--bg); - transition: opacity var(--transition); - - &:hover { - opacity: 0.85; - } + composes: buttonSecondary from '@common/assets/ui.module.css'; } .clearBtn { - padding: 8px 16px; - border: 1px solid var(--border); - border-radius: var(--radius); - background: transparent; - color: var(--text); - transition: background var(--transition); - - &:hover { - background: var(--bg-hover); - } + composes: buttonSecondary from '@common/assets/ui.module.css'; } \ No newline at end of file diff --git a/src/games/horde/assets/pwa_icon.png b/src/games/horde/assets/pwa_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..76aacb0a6f8a4177a9627443eaf54da02a0eef45 GIT binary patch literal 51507 zcmV)8K*qm`P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 AMF0Q* literal 0 HcmV?d00001 diff --git a/src/games/horde/assets/style.css b/src/games/horde/assets/style.css deleted file mode 100644 index c0e598b..0000000 --- a/src/games/horde/assets/style.css +++ /dev/null @@ -1,50 +0,0 @@ -@import "@common/assets/global.css"; - -body { - background: var(--bg); - color: var(--text); - font-family: 'Georgia', serif; - font-size: 14px; - line-height: 1.5; - width: 100dvw; - height: 100dvh; - overflow: hidden; -} - -button { - cursor: pointer; - background: none; - border: none; - color: var(--text-muted); - font-family: inherit; - font-size: inherit; - transition: color var(--transition), background var(--transition); - border-radius: var(--radius); - display: inline-flex; - flex-direction: row; - align-items: center; - gap: 4px; - padding: 4px 8px; - - &:hover { - color: var(--text); - background: var(--bg-hover); - } -} - -input, -textarea { - background: var(--bg-active); - border: 1px solid var(--border); - border-radius: var(--radius); - color: var(--text); - font-family: inherit; - font-size: inherit; - padding: 6px 10px; - outline: none; - transition: border-color var(--transition); - - &:focus { - border-color: var(--accent); - } -} \ No newline at end of file diff --git a/src/games/horde/components/modals/leaderboard-modal.tsx b/src/games/horde/components/modals/leaderboard-modal.tsx index aeac6cd..bd4def3 100644 --- a/src/games/horde/components/modals/leaderboard-modal.tsx +++ b/src/games/horde/components/modals/leaderboard-modal.tsx @@ -1,10 +1,8 @@ -import clsx from "clsx"; import { useEffect, useState } from "preact/hooks"; import { useHordeState } from "../../contexts/state"; import { fetchLeaderboard, type LeaderboardEntry } from "../../utils/api"; import { formatNumber, formatTime } from "@common/utils"; import { Modal } from "@common/components/Modal"; -import modalStyles from "../../assets/modal.module.css"; import styles from "../../assets/leaderboard-modal.module.css"; interface Props { @@ -94,55 +92,49 @@ export const LeaderboardModal = ({ open, onClose }: Props) => { return () => { cancelled = true; }; }, [open, user?.username]); + const nextRow = rows.length >= 2 ? rows[rows.length - 2] : null; + const footer = user && nextRow?.diff && nextRow.diff > 0 && kudosPerHour > 0 + ? (() => { + const secs = Math.ceil((nextRow.diff / kudosPerHour) * 3600); + return ( + + Time to #{nextRow.rank}: {formatTime(secs)} + ({formatNumber(Math.round(kudosPerHour))} kudos/h) + + ); + })() + : undefined; + return ( - -
- Leaderboard -
-
- {loading &&

Loading…

} - {error &&

{error}

} - {!loading && !error && rows.length > 0 && ( - - - - - - - {user && } + + {loading &&

Loading…

} + {error &&

{error}

} + {!loading && !error && rows.length > 0 && ( +
#UsernameKudosDiff
+ + + + + + {user && } + + + + {rows.map(r => ( + + + + + {user && ( + + )} - - - {rows.map(r => ( - - - - - {user && ( - - )} - - ))} - -
#UsernameKudosDiff
{r.rank}{r.username}{formatNumber(r.kudos)} 0 ? styles.above : styles.below) : undefined}> + {r.diff !== undefined ? `+${formatNumber(r.diff)}` : '—'} +
{r.rank}{r.username}{formatNumber(r.kudos)} 0 ? styles.above : styles.below))}> - {r.diff !== undefined ? `+${formatNumber(r.diff)}` : '—'} -
- )} -
- {(() => { - if (!user || rows.length < 2 || kudosPerHour <= 0) return null; - const nextRow = rows[rows.length - 2]; - if (!nextRow.diff || nextRow.diff <= 0) return null; - const secs = Math.ceil((nextRow.diff / kudosPerHour) * 3600); - return ( -
- - Time to #{nextRow.rank}: {formatTime(secs)} - ({formatNumber(Math.round(kudosPerHour))} kudos/h) - -
- ); - })()} + ))} + + + )}
); }; diff --git a/src/games/horde/components/modals/manage-workers-modal.tsx b/src/games/horde/components/modals/manage-workers-modal.tsx index 05cb3e3..5a2dda5 100644 --- a/src/games/horde/components/modals/manage-workers-modal.tsx +++ b/src/games/horde/components/modals/manage-workers-modal.tsx @@ -1,9 +1,7 @@ -import clsx from "clsx"; import { useEffect, useState } from "preact/hooks"; import { useHordeState } from "../../contexts/state"; import { fetchWorker, updateWorker, deleteWorker, type WorkerData } from "../../utils/api"; import { Modal } from "@common/components/Modal"; -import modalStyles from "../../assets/modal.module.css"; import styles from "../../assets/manage-workers-modal.module.css"; interface Props { @@ -80,53 +78,48 @@ export const ManageWorkersModal = ({ open, onClose }: Props) => { }; return ( - -
- Manage Workers -
-
- {loading &&

Loading…

} - {!loading && user && workerDetails.map(w => { - const edit = edits[w.id] ?? { name: w.name, info: w.info ?? '', maintenance_mode: w.maintenance_mode }; - return ( -
-
{w.name}
- -