import * as React from "react"; import { Inbox, Package, ScanLine, Truck } from "lucide-react"; import { Badge, Card, CardContent } from "@godxjp/ui/data-display"; import { Button, Heading, Text } from "@godxjp/ui/general"; import { Flex, MobileShell } from "@godxjp/ui/layout"; /** * MobileShell — the handheld app shell: a status band, an app bar, ONE scroll region, a sticky * action bar and a bottom tab bar. The two things a composed `Card` stack cannot do are exactly * what the shell owns: the root is one screen tall so the DOCUMENT never scrolls (the tab bar can * never slide away under a collapsing URL bar), and every band pads itself out of the device * safe areas. Zero custom CSS — no `min-h-dvh`, no `position: sticky`, no page gutter by hand. */ const ITEMS = [ { rc: "RC-204881", name: "洗顔フォーム", status: "未仕分け", tone: "warning" as const }, { rc: "RC-204882", name: "日焼け止め", status: "棚上", tone: "info" as const }, { rc: "RC-204879", name: "ビタミン B", status: "棚上", tone: "info" as const }, { rc: "RC-204875", name: "歯ブラシ", status: "梱包済み", tone: "muted" as const }, { rc: "RC-204871", name: "入浴剤", status: "棚上", tone: "info" as const }, { rc: "RC-204864", name: "解熱鎮痛薬", status: "梱包済み", tone: "muted" as const }, ]; const TABS = [ { id: "inbound", label: "入庫", icon: Inbox }, { id: "packing", label: "梱包", icon: Package }, { id: "outbound", label: "出庫", icon: Truck }, ]; export default function Demo() { const [tab, setTab] = React.useState("inbound"); return ( 9:41 Acme Handy } header={ 入庫 } actions={ <> } tabBar={TABS.map((t) => { const Icon = t.icon; return ( ); })} > {ITEMS.map((item) => ( {item.name} {item.rc} {item.status} ))} ); }