From 8e0c4ef95fdf3cc38b63d65c583d0c0a3892f314 Mon Sep 17 00:00:00 2001 From: chenhang Date: Mon, 13 Jul 2026 10:43:18 +0800 Subject: [PATCH] refactor(app): remove scaffold and migrate input styles --- src/app/_components/core/index.ts | 1 - .../_components/core/page-scaffold.module.css | 50 ------------------- src/app/_components/core/page-scaffold.tsx | 49 ------------------ .../__tests__/tailwind-components.test.tsx | 21 ++++++++ .../chat-input-text-field.module.css | 36 ------------- .../chat/components/chat-input-text-field.tsx | 6 +-- 6 files changed, 23 insertions(+), 140 deletions(-) delete mode 100644 src/app/_components/core/page-scaffold.module.css delete mode 100644 src/app/_components/core/page-scaffold.tsx delete mode 100644 src/app/chat/components/chat-input-text-field.module.css diff --git a/src/app/_components/core/index.ts b/src/app/_components/core/index.ts index b4312bfd..c7db7ac9 100644 --- a/src/app/_components/core/index.ts +++ b/src/app/_components/core/index.ts @@ -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"; diff --git a/src/app/_components/core/page-scaffold.module.css b/src/app/_components/core/page-scaffold.module.css deleted file mode 100644 index 5cdad6f4..00000000 --- a/src/app/_components/core/page-scaffold.module.css +++ /dev/null @@ -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); -} diff --git a/src/app/_components/core/page-scaffold.tsx b/src/app/_components/core/page-scaffold.tsx deleted file mode 100644 index b1dc9588..00000000 --- a/src/app/_components/core/page-scaffold.tsx +++ /dev/null @@ -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 ( -
- {header ?
{header}
: null} -
- {children} -
- {footer ?
{footer}
: null} -
- ); -} diff --git a/src/app/chat/components/__tests__/tailwind-components.test.tsx b/src/app/chat/components/__tests__/tailwind-components.test.tsx index 93d937c1..decd1378 100644 --- a/src/app/chat/components/__tests__/tailwind-components.test.tsx +++ b/src/app/chat/components/__tests__/tailwind-components.test.tsx @@ -3,6 +3,7 @@ import { describe, expect, it, vi } from "vitest"; import { ChatHeader } from "../chat-header"; import { ChatInsufficientCreditsBanner } from "../chat-insufficient-credits-banner"; +import { ChatInputTextField } from "../chat-input-text-field"; import { ChatSendButton } from "../chat-send-button"; import { ImageBubble } from "../image-bubble"; import { MessageAvatar } from "../message-avatar"; @@ -160,4 +161,24 @@ describe("chat Tailwind components", () => { expect(memberHtml).toContain("bg-[rgba(13,11,20,0.7)]"); expect(memberHtml).toContain("size-[var(--icon-size-xl,32px)]"); }); + + it("renders ChatInputTextField with textarea utilities", () => { + const html = renderToStaticMarkup( + undefined} + onSubmit={() => undefined} + placeholder="Message Elio" + />, + ); + + expect(html).toContain(" void; @@ -62,10 +60,10 @@ export const ChatInputTextField = forwardRef< }; return ( -
+