refactor(app): remove scaffold and migrate input styles

This commit is contained in:
2026-07-13 10:43:18 +08:00
parent 181e0aee19
commit 8e0c4ef95f
6 changed files with 23 additions and 140 deletions
-1
View File
@@ -9,5 +9,4 @@ export * from "./dialog";
export * from "./loading-indicator";
export * from "./mobile-shell";
export * from "./page-loading-fallback";
export * from "./page-scaffold";
export * from "./responsive-mobile-shell";
@@ -1,50 +0,0 @@
.root {
position: relative;
display: flex;
flex: 1 1 auto;
min-height: var(--app-viewport-height, 100dvh);
min-width: 0;
flex-direction: column;
box-sizing: border-box;
color: var(--color-text-foreground, #171717);
overflow: hidden;
}
.root[data-scrollable="true"] {
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.padded {
padding:
calc(var(--page-padding-y, 18px) + var(--app-safe-top, 0px))
calc(var(--page-padding-x, 20px) + var(--app-safe-right, 0px))
calc(var(--page-padding-y, 18px) + var(--app-safe-bottom, 0px))
calc(var(--page-padding-x, 20px) + var(--app-safe-left, 0px));
}
.header,
.footer {
position: relative;
z-index: 1;
flex: 0 0 auto;
}
.body {
position: relative;
z-index: 1;
display: flex;
flex: 1 1 auto;
min-height: 0;
min-width: 0;
flex-direction: column;
}
.body[data-scrollable="true"] {
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.footer {
padding-bottom: var(--app-safe-bottom, 0px);
}
@@ -1,49 +0,0 @@
import type { ReactNode } from "react";
import styles from "./page-scaffold.module.css";
export interface PageScaffoldProps {
children: ReactNode;
header?: ReactNode;
footer?: ReactNode;
className?: string;
bodyClassName?: string;
padded?: boolean;
scrollable?: boolean;
bodyScrollable?: boolean;
}
/**
* Shared page layout primitive for mobile-first screens.
*
* Use it when migrating feature pages away from hand-written shell/padding
* styles. It keeps safe-area padding and scroll ownership in one place.
*/
export function PageScaffold({
children,
header,
footer,
className,
bodyClassName,
padded = true,
scrollable = false,
bodyScrollable = false,
}: PageScaffoldProps) {
return (
<main
className={[styles.root, padded ? styles.padded : "", className]
.filter(Boolean)
.join(" ")}
data-scrollable={scrollable}
>
{header ? <div className={styles.header}>{header}</div> : null}
<div
className={[styles.body, bodyClassName].filter(Boolean).join(" ")}
data-scrollable={bodyScrollable}
>
{children}
</div>
{footer ? <div className={styles.footer}>{footer}</div> : null}
</main>
);
}