import {
BookOpen,
Boxes,
Calendar,
Clock3,
Database,
FileText,
LayoutGrid,
Mail,
PlugZap,
ReceiptText,
Server,
ShieldCheck,
} from "lucide-react";
import {
ServiceCatalogCta,
ServiceLauncherCard,
ServiceLauncherCardSkeleton,
} from "@godxjp/ui/data-display";
import { Button, Text } from "@godxjp/ui/general";
import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout";
/**
* ServiceLauncherCard — one tile for one application in an organization's launcher.
*
* WHY THIS PAGE IS GENERIC. It used to render this product's own service catalogue —
* `attendance.godx.jp`, plans `Standard/Enterprise/Free`, a 「カタログを見る」 link — which made a
* reader ask whether the component belonged in a UI framework at all. A fair question: a page that
* demonstrates a product cannot demonstrate a component. The data here is therefore ANY
* organization's internal tools, on RFC 2606 reserved domains, with no plan names of ours.
*
* WHAT IS NOT NEGOTIABLE is the state set — available / restricted / suspended / archived /
* loading / catalog entry. Those ARE the component's API surface, because the component infers
* nothing: `statusLabel`, `statusTone`, `disabledReason` and `action` all come from the consumer's
* own entitlement contract. There is no `href`, no `available`, no `entitlement` prop to find.
*
* ResponsiveGrid owns the 3 → 2 → 1 ladder. The page writes no grid tracks and no page-local CSS.
*/
/** A section heading. Headings are headings, not Cards — a Card here would nest borders. */
function Section({
title,
why,
children,
}: {
title: string;
why: string;
children: React.ReactNode;
}) {
return (
{title}
{why}
{children}
);
}
export default function Demo() {
return (
サービスを開く}
/>
サービスを開く}
/>
サービスを開く}
/>
サービスを開く}
/>
状況を見る}
/>
履歴を見る}
/>
権限を確認}
/>
設定を開く}
/>
アーカイブを見る}
/>
サービスを開く}
/>
サービスを開く}
/>
サービスを開く}
/>
サービスを開く}
/>
サービスを開く}
/>
Open service}
/>
);
}