{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "three-flip-card", "title": "3D Flip Card", "description": "A compound flip card with 3D tilt on hover and click-to-flip front/back. | 3D傾き効果とクリックで裏表が入れ替わる、マウス追従の3D傾き効果付きフリップカードコンポーネント。", "dependencies": [], "registryDependencies": [ "three-card" ], "files": [ { "path": "components/card/3d-flip-card.tsx", "content": "\"use client\";\n\nimport React, {\n createContext,\n useState,\n useCallback,\n use,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport ThreeDCard from \"@/components/card/3d-card\";\n\n/** Inline flip container: two faces, CSS 3D transform. Does not own state; receives isFlipped/flipDirection from Root. */\nfunction CardFlipContainer({\n isFlipped,\n flipDirection,\n containerClassName,\n front,\n back,\n}: {\n isFlipped: boolean;\n flipDirection: \"horizontal\" | \"vertical\";\n containerClassName?: string;\n front: ReactNode;\n back: ReactNode;\n}) {\n const isHorizontal = flipDirection === \"horizontal\";\n const rotate = isFlipped ? \"180deg\" : \"0deg\";\n const transformInner = isHorizontal\n ? { transform: `rotateY(${rotate})` }\n : { transform: `rotateX(${rotate})` };\n const transformBack = isHorizontal\n ? { transform: \"rotateY(180deg)\" }\n : { transform: \"rotateX(180deg)\" };\n\n return (\n