@goodz-core/sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/form-factors.ts","../src/ui/GoodZCardFocus.tsx"],"names":[],"mappings":"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","file":"chunk-K6IFJWLB.js","sourcesContent":["/**\n * Form Factor Standards — self-contained within SDK.\n * Mirrors GoodZ.Core's shared/formFactors.ts but with zero external dependencies.\n */\n\nexport type FormFactorKey =\n | \"trading_card\"\n | \"postcard\"\n | \"postcard_portrait\"\n | \"polaroid\"\n | \"laser_ticket\"\n | \"badge_small\"\n | \"badge_medium\"\n | \"badge_large\"\n | \"acrylic_stand_tall\"\n | \"acrylic_stand_chibi\";\n\nexport interface FormFactorSpec {\n key: FormFactorKey;\n label: string;\n aspectRatio: [number, number];\n isCircle: boolean;\n isTransparent?: boolean;\n}\n\nconst FORM_FACTORS: Record<FormFactorKey, FormFactorSpec> = {\n trading_card: { key: \"trading_card\", label: \"Trading Card\", aspectRatio: [5, 7], isCircle: false },\n postcard: { key: \"postcard\", label: \"Postcard\", aspectRatio: [3, 2], isCircle: false },\n postcard_portrait: { key: \"postcard_portrait\", label: \"Postcard (Portrait)\", aspectRatio: [2, 3], isCircle: false },\n polaroid: { key: \"polaroid\", label: \"Polaroid\", aspectRatio: [3, 4], isCircle: false },\n laser_ticket: { key: \"laser_ticket\", label: \"Laser Ticket\", aspectRatio: [5, 2], isCircle: false },\n badge_small: { key: \"badge_small\", label: \"Badge S\", aspectRatio: [1, 1], isCircle: true },\n badge_medium: { key: \"badge_medium\", label: \"Badge M\", aspectRatio: [1, 1], isCircle: true },\n badge_large: { key: \"badge_large\", label: \"Badge L\", aspectRatio: [1, 1], isCircle: true },\n acrylic_stand_tall: { key: \"acrylic_stand_tall\", label: \"Transparent Card\", aspectRatio: [5, 7], isCircle: false, isTransparent: true },\n acrylic_stand_chibi: { key: \"acrylic_stand_chibi\", label: \"Transparent Card (Chibi)\", aspectRatio: [3, 4], isCircle: false, isTransparent: true },\n};\n\nexport function getFormFactorSpec(key: string): FormFactorSpec | undefined {\n return (FORM_FACTORS as Record<string, FormFactorSpec>)[key];\n}\n\nexport function getAspectRatioCSS(key: string): string {\n const spec = getFormFactorSpec(key);\n if (!spec) return \"5 / 7\";\n return `${spec.aspectRatio[0]} / ${spec.aspectRatio[1]}`;\n}\n\nexport { FORM_FACTORS };\n","/**\n * GoodZCardFocus — \"Tap to Focus, Then Tilt\" interaction pattern.\n *\n * Extracted from GoodZ.Core's CardFocusModal for use in third-party apps.\n * Self-contained: no external dependencies beyond React 18+.\n *\n * Industry best practice (Marvel Snap, Pokemon TCG Pocket):\n * Browse mode: card in page, normal scroll, subtle hover effect\n * Focus mode: tap card → enlarge to center, dark overlay, scroll locked\n * Desktop: mouse position controls tilt\n * Mobile: gyroscope (DeviceOrientation) controls tilt\n * Fallback: touch drag on card controls tilt (delta-based)\n *\n * Exit: click anywhere (overlay or card) / press ESC / close button\n *\n * Material effects by formFactor:\n * - trading_card: holographic gradient + sparkle\n * - postcard: paper texture + subtle shadow\n * - polaroid: white border (thick bottom) + paper texture + slight curl\n * - laser_ticket: intense rainbow holographic + shimmer animation\n * - badge_*: circular clip + metal frame + dome highlight\n * - acrylic_stand_*: bare subject outline (bg-removed PNG), subtle drop shadow only\n *\n * @packageDocumentation\n */\n\nimport {\n useRef,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getAspectRatioCSS, type FormFactorKey } from \"./form-factors\";\n\n// ── Types ──────────────────────────────────────────────────────\n\ntype HoloTier = \"none\" | \"subtle\" | \"holo\" | \"rainbow\";\n\nexport interface GoodZCardFocusProps {\n /** Content to render as the clickable trigger (typically a card thumbnail) */\n children: ReactNode;\n /** URL of the GoodZ image (original artwork or shell image) */\n imageUrl?: string | null;\n /** Display name of the GoodZ */\n cardName?: string;\n /** Rarity tier (e.g., \"R\", \"SR\", \"SSR\", \"UR\") — controls holographic intensity */\n rarity?: string | null;\n /** Form factor key — controls material effect and aspect ratio */\n formFactor?: FormFactorKey | string;\n /** Additional CSS class for the trigger wrapper */\n className?: string;\n /** Disable the focus modal (click-through) */\n disabled?: boolean;\n}\n\n// ── Rarity → Holo Tier ────────────────────────────────────────\n\nfunction getHoloTier(rarity?: string | null): HoloTier {\n if (!rarity) return \"subtle\";\n const r = rarity.toUpperCase();\n if ([\"UR\", \"SECRET\", \"RAINBOW\", \"GOLD\", \"PRISMATIC\"].some((k) => r.includes(k))) return \"rainbow\";\n if ([\"SSR\", \"SR\", \"RARE\", \"HOLO\", \"LEGENDARY\", \"MYTHIC\"].some((k) => r.includes(k))) return \"holo\";\n return \"subtle\";\n}\n\n// ── Holo gradient by tier ─────────────────────────────────────\n\nfunction getHoloGradient(tier: HoloTier, angle: number): string {\n switch (tier) {\n case \"subtle\":\n return `linear-gradient(${angle}deg, transparent 0%, rgba(255,255,255,0.06) 30%, rgba(255,255,255,0.14) 50%, rgba(255,255,255,0.06) 70%, transparent 100%)`;\n case \"holo\":\n return `linear-gradient(${angle}deg, transparent 0%, rgba(120,200,255,0.1) 15%, rgba(255,180,120,0.12) 30%, rgba(180,120,255,0.15) 50%, rgba(120,255,200,0.12) 70%, rgba(255,120,180,0.1) 85%, transparent 100%)`;\n case \"rainbow\":\n return `linear-gradient(${angle}deg, rgba(255,0,0,0.1) 0%, rgba(255,165,0,0.12) 14%, rgba(255,255,0,0.12) 28%, rgba(0,255,0,0.12) 42%, rgba(0,127,255,0.15) 56%, rgba(75,0,130,0.12) 70%, rgba(148,0,211,0.12) 84%, rgba(255,0,0,0.1) 100%)`;\n default:\n return \"none\";\n }\n}\n\n// ── Form factor helpers ───────────────────────────────────────\n\nfunction isBadge(ff?: string): boolean {\n return ff === \"badge_small\" || ff === \"badge_medium\" || ff === \"badge_large\";\n}\nfunction isAcrylic(ff?: string): boolean {\n return ff === \"acrylic_stand_tall\" || ff === \"acrylic_stand_chibi\";\n}\nfunction isPolaroid(ff?: string): boolean { return ff === \"polaroid\"; }\nfunction isLaserTicket(ff?: string): boolean { return ff === \"laser_ticket\"; }\nfunction isPostcard(ff?: string): boolean { return ff === \"postcard\" || ff === \"postcard_portrait\"; }\n\n// ── Mobile detection ─────────────────────────────────────────\n\nfunction isMobileDevice(): boolean {\n return typeof window !== \"undefined\" && (\n \"ontouchstart\" in window ||\n navigator.maxTouchPoints > 0 ||\n /Android|iPhone|iPad|iPod/i.test(navigator.userAgent)\n );\n}\n\n// ── Material-specific style generators ────────────────────────\n\nfunction getBadgeContainerStyle(): CSSProperties {\n return {\n borderRadius: \"50%\",\n overflow: \"hidden\",\n boxShadow: [\n \"0 0 0 4px rgba(180,180,200,0.8)\",\n \"0 0 0 6px rgba(120,120,140,0.6)\",\n \"inset 0 -4px 12px rgba(0,0,0,0.25)\",\n \"inset 0 4px 8px rgba(255,255,255,0.2)\",\n \"0 8px 24px rgba(0,0,0,0.4)\",\n ].join(\", \"),\n };\n}\n\nfunction getBadgeOverlayStyle(tiltX: number, tiltY: number): CSSProperties {\n const px = 50 + tiltY * 2;\n const py = 40 - tiltX * 1.5;\n return {\n background: `radial-gradient(ellipse at ${px}% ${py}%, rgba(255,255,255,0.35) 0%, rgba(255,255,255,0.08) 40%, transparent 70%)`,\n borderRadius: \"50%\",\n mixBlendMode: \"overlay\" as const,\n };\n}\n\nfunction getPolaroidContainerStyle(): CSSProperties {\n return {\n padding: \"10px 10px 40px 10px\",\n backgroundColor: \"#fafaf8\",\n borderRadius: \"2px\",\n boxShadow: [\n \"0 2px 8px rgba(0,0,0,0.15)\",\n \"0 8px 24px rgba(0,0,0,0.1)\",\n \"2px 4px 6px rgba(0,0,0,0.08)\",\n ].join(\", \"),\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E\")`,\n };\n}\n\nfunction getLaserTicketOverlayStyle(angle: number): CSSProperties {\n return {\n background: `linear-gradient(${angle}deg, \n rgba(255,0,0,0.15) 0%, rgba(255,165,0,0.18) 10%, rgba(255,255,0,0.18) 20%, \n rgba(0,255,0,0.18) 30%, rgba(0,200,255,0.2) 40%, rgba(0,100,255,0.2) 50%, \n rgba(75,0,130,0.18) 60%, rgba(148,0,211,0.18) 70%, rgba(255,0,100,0.15) 80%, \n rgba(255,100,0,0.15) 90%, rgba(255,0,0,0.15) 100%)`,\n mixBlendMode: \"color-dodge\" as const,\n animation: \"goodz-laser-shimmer 3s linear infinite\",\n };\n}\n\nfunction getAcrylicContainerStyle(): CSSProperties {\n return {\n borderRadius: \"16px\",\n overflow: \"visible\",\n boxShadow: [\n \"inset 0 0 0 1px rgba(255,255,255,0.12)\",\n \"inset 0 1px 0 0 rgba(255,255,255,0.2)\",\n \"0 4px 8px -2px rgba(0,0,0,0.3)\",\n \"0 12px 24px -4px rgba(0,0,0,0.4)\",\n \"0 25px 50px -12px rgba(0,0,0,0.5)\",\n ].join(\", \"),\n background: \"linear-gradient(180deg, rgba(255,255,255,0.06) 0%, rgba(255,255,255,0.02) 100%)\",\n };\n}\n\nfunction getAcrylicOverlayStyle(tiltX: number, tiltY: number): CSSProperties {\n const px = 50 + tiltY * 1.5;\n const py = 30 - tiltX * 1.5;\n const edgePx = 50 - tiltY * 3;\n const edgePy = 50 + tiltX * 3;\n return {\n background: [\n `radial-gradient(ellipse at ${px}% ${py}%, rgba(255,255,255,0.2) 0%, transparent 50%)`,\n `radial-gradient(ellipse at ${edgePx}% ${edgePy}%, rgba(200,220,255,0.08) 0%, transparent 40%)`,\n `linear-gradient(${(Math.atan2(tiltY, tiltX) * 180 / Math.PI + 360) % 360}deg, transparent 30%, rgba(255,200,200,0.04) 40%, rgba(200,255,200,0.04) 50%, rgba(200,200,255,0.04) 60%, transparent 70%)`,\n ].join(\", \"),\n mixBlendMode: \"screen\" as const,\n borderRadius: \"16px\",\n boxShadow: \"inset 0 0 0 1px rgba(255,255,255,0.08)\",\n };\n}\n\nfunction getPostcardOverlayStyle(): CSSProperties {\n return {\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E\")`,\n mixBlendMode: \"multiply\" as const,\n };\n}\n\n// ── CSS Keyframes (injected once) ─────────────────────────────\n\nconst KEYFRAMES_ID = \"__goodz-card-focus-keyframes__\";\n\nfunction injectKeyframes() {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(KEYFRAMES_ID)) return;\n const style = document.createElement(\"style\");\n style.id = KEYFRAMES_ID;\n style.textContent = `\n @keyframes goodz-focus-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n }\n @keyframes goodz-focus-pulse {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 1; }\n }\n @keyframes goodz-laser-shimmer {\n 0% { filter: hue-rotate(0deg) brightness(1); }\n 50% { filter: hue-rotate(30deg) brightness(1.1); }\n 100% { filter: hue-rotate(0deg) brightness(1); }\n }\n `;\n document.head.appendChild(style);\n}\n\n// ── Main Component ────────────────────────────────────────────\n\n/**\n * GoodZCardFocus — wraps any content as a clickable trigger that opens\n * a full-screen focus modal with holographic tilt effects.\n *\n * @example\n * ```tsx\n * import { GoodZCardFocus } from \"@goodz-core/sdk/ui\";\n *\n * <GoodZCardFocus\n * imageUrl=\"https://goodzcore.manus.space/api/shell/42.png\"\n * cardName=\"Luna\"\n * rarity=\"SSR\"\n * formFactor=\"trading_card\"\n * >\n * <img src={thumbnailUrl} alt=\"Luna\" />\n * </GoodZCardFocus>\n * ```\n */\nexport function GoodZCardFocus({\n children,\n imageUrl,\n cardName = \"GoodZ\",\n rarity,\n formFactor,\n className = \"\",\n disabled = false,\n}: GoodZCardFocusProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n\n const handleOpen = useCallback(() => {\n if (!disabled) {\n setIsClosing(false);\n setIsOpen(true);\n }\n }, [disabled]);\n\n const handleClose = useCallback(() => {\n setIsClosing(true);\n }, []);\n\n const handleExitDone = useCallback(() => {\n setIsOpen(false);\n setIsClosing(false);\n }, []);\n\n return (\n <>\n <div\n className={className || undefined}\n style={{\n cursor: disabled ? \"default\" : \"pointer\",\n transition: \"transform 0.3s\",\n ...(!className ? {} : {}),\n }}\n onClick={handleOpen}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") handleOpen(); }}\n aria-label={`View ${cardName} in detail`}\n >\n {children}\n </div>\n\n {isOpen && createPortal(\n <FocusOverlay\n imageUrl={imageUrl}\n cardName={cardName}\n rarity={rarity}\n formFactor={formFactor}\n onClose={handleClose}\n closing={isClosing}\n onExitDone={handleExitDone}\n />,\n document.body,\n )}\n </>\n );\n}\n\n// ── Focus Overlay (the modal) ─────────────────────────────────\n\ninterface FocusOverlayProps {\n imageUrl?: string | null;\n cardName: string;\n rarity?: string | null;\n formFactor?: FormFactorKey | string;\n onClose: () => void;\n closing?: boolean;\n onExitDone?: () => void;\n}\n\nfunction FocusOverlay({ imageUrl, cardName, rarity, formFactor, onClose, closing, onExitDone }: FocusOverlayProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const cardRef = useRef<HTMLDivElement>(null);\n const holoRef = useRef<HTMLDivElement>(null);\n const sparkleRef = useRef<HTMLDivElement>(null);\n const materialRef = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [imageLoaded, setImageLoaded] = useState(false);\n const [gyroStatus, setGyroStatus] = useState<\"checking\" | \"available\" | \"unavailable\" | \"needs-permission\">(\"checking\");\n const [useGyro, setUseGyro] = useState(true);\n const [showHint, setShowHint] = useState(true);\n const tier = getHoloTier(rarity);\n const isMobile = useRef(isMobileDevice()).current;\n\n const tiltRef = useRef({ x: 0, y: 0 });\n const targetTiltRef = useRef({ x: 0, y: 0 });\n const gyroListenerRef = useRef<((e: DeviceOrientationEvent) => void) | null>(null);\n const touchStartRef = useRef<{ x: number; y: number } | null>(null);\n const lerpRafRef = useRef<number | null>(null);\n const rafRef = useRef<number | null>(null);\n const entryDoneRef = useRef(false);\n const lerpActiveRef = useRef(false);\n\n const ff = formFactor || \"trading_card\";\n const useBadgeMaterial = isBadge(ff);\n const useAcrylicMaterial = isAcrylic(ff);\n const usePolaroidMaterial = isPolaroid(ff);\n const useLaserMaterial = isLaserTicket(ff);\n const usePostcardMaterial = isPostcard(ff);\n const useDefaultHolo = !useBadgeMaterial && !useAcrylicMaterial && !usePolaroidMaterial && !useLaserMaterial && !usePostcardMaterial;\n\n // Inject keyframes on mount\n useEffect(() => { injectKeyframes(); }, []);\n\n // ── Enter animation + scroll lock ──\n useEffect(() => {\n const scrollY = window.scrollY;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n const prevOverflow = document.body.style.overflow;\n const prevPosition = document.body.style.position;\n const prevTop = document.body.style.top;\n const prevWidth = document.body.style.width;\n const prevPaddingRight = document.body.style.paddingRight;\n\n document.body.style.overflow = \"hidden\";\n document.body.style.position = \"fixed\";\n document.body.style.top = `-${scrollY}px`;\n document.body.style.width = \"100%\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n setVisible(true);\n const hintTimer = setTimeout(() => setShowHint(false), 3000);\n\n const entryTimer = setTimeout(() => {\n entryDoneRef.current = true;\n if (cardRef.current) {\n cardRef.current.style.transition = \"none\";\n }\n }, 500);\n\n return () => {\n document.body.style.overflow = prevOverflow;\n document.body.style.position = prevPosition;\n document.body.style.top = prevTop;\n document.body.style.width = prevWidth;\n document.body.style.paddingRight = prevPaddingRight;\n window.scrollTo(0, scrollY);\n clearTimeout(hintTimer);\n clearTimeout(entryTimer);\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n // ── Exit animation ──\n useEffect(() => {\n if (!closing) return;\n\n setVisible(false);\n\n if (holoRef.current) {\n holoRef.current.style.transition = \"opacity 0.08s ease\";\n holoRef.current.style.opacity = \"0\";\n }\n if (sparkleRef.current) {\n sparkleRef.current.style.transition = \"opacity 0.08s ease\";\n sparkleRef.current.style.opacity = \"0\";\n }\n if (materialRef.current) {\n materialRef.current.style.transition = \"opacity 0.08s ease\";\n materialRef.current.style.opacity = \"0\";\n }\n\n const cardTimer = setTimeout(() => {\n if (cardRef.current) {\n cardRef.current.style.transition = \"opacity 0.2s ease, transform 0.25s cubic-bezier(.4,0,.2,1)\";\n cardRef.current.style.opacity = \"0\";\n cardRef.current.style.transform = \"perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.85)\";\n }\n }, 80);\n\n const bgTimer = setTimeout(() => {\n if (overlayRef.current) {\n overlayRef.current.style.transition = \"background-color 0.25s ease, backdrop-filter 0.25s ease, -webkit-backdrop-filter 0.25s ease\";\n overlayRef.current.style.backgroundColor = \"rgba(0,0,0,0)\";\n overlayRef.current.style.backdropFilter = \"blur(0px)\";\n (overlayRef.current.style as any).WebkitBackdropFilter = \"blur(0px)\";\n }\n }, 120);\n\n const exitTimer = setTimeout(() => {\n onExitDone?.();\n }, 400);\n return () => {\n clearTimeout(cardTimer);\n clearTimeout(bgTimer);\n clearTimeout(exitTimer);\n };\n }, [closing, onExitDone]);\n\n // ── Block touch scrolling on overlay ──\n useEffect(() => {\n const overlay = overlayRef.current;\n if (!overlay) return;\n const preventScroll = (e: TouchEvent) => {\n const target = e.target as HTMLElement;\n if (target === overlay || target.closest(\"[data-overlay-bg]\")) {\n e.preventDefault();\n }\n };\n overlay.addEventListener(\"touchmove\", preventScroll, { passive: false });\n return () => {\n overlay.removeEventListener(\"touchmove\", preventScroll);\n };\n }, []);\n\n // ── ESC to close ──\n useEffect(() => {\n const handler = (e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [onClose]);\n\n // ── Update material-specific overlay ──\n const updateMaterialOverlay = useCallback((tiltX: number, tiltY: number) => {\n if (!materialRef.current) return;\n if (useBadgeMaterial) {\n materialRef.current.style.background = getBadgeOverlayStyle(tiltX, tiltY).background as string;\n } else if (useAcrylicMaterial) {\n materialRef.current.style.background = getAcrylicOverlayStyle(tiltX, tiltY).background as string;\n }\n }, [useBadgeMaterial, useAcrylicMaterial]);\n\n // ── Apply tilt — direct style mutation ──\n const applyTilt = useCallback((tiltX: number, tiltY: number) => {\n if (!cardRef.current) return;\n const maxAngle = isMobile ? 14 : 20;\n const rx = Math.max(-maxAngle, Math.min(maxAngle, tiltX));\n const ry = Math.max(-maxAngle, Math.min(maxAngle, tiltY));\n tiltRef.current = { x: rx, y: ry };\n\n cardRef.current.style.transform =\n `perspective(800px) rotateX(${rx}deg) rotateY(${ry}deg)`;\n\n const angle = (Math.atan2(ry, rx) * 180 / Math.PI + 360) % 360;\n if (holoRef.current && (useDefaultHolo || useLaserMaterial)) {\n if (useLaserMaterial) {\n holoRef.current.style.background = getLaserTicketOverlayStyle(angle).background as string;\n } else {\n holoRef.current.style.background = getHoloGradient(tier, angle);\n }\n }\n if (sparkleRef.current && useDefaultHolo) {\n const px = 50 + ry * 2;\n const py = 50 - rx * 2;\n const opacity = tier === \"rainbow\" ? 0.25 : tier === \"holo\" ? 0.18 : 0.1;\n sparkleRef.current.style.background =\n `radial-gradient(circle at ${px}% ${py}%, rgba(255,255,255,${opacity}) 0%, transparent 60%)`;\n }\n updateMaterialOverlay(rx, ry);\n }, [isMobile, tier, useDefaultHolo, useLaserMaterial, updateMaterialOverlay]);\n\n // ── rAF-throttled tilt update ──\n const scheduleTilt = useCallback((tiltX: number, tiltY: number) => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(() => {\n applyTilt(tiltX, tiltY);\n rafRef.current = null;\n });\n }, [applyTilt]);\n\n // ── Lerp animation loop ──\n const LERP_FACTOR = 0.08;\n const LERP_THRESHOLD = 0.01;\n\n const startLerpLoop = useCallback(() => {\n if (lerpActiveRef.current) return;\n lerpActiveRef.current = true;\n const loop = () => {\n const cur = tiltRef.current;\n const tgt = targetTiltRef.current;\n const dx = tgt.x - cur.x;\n const dy = tgt.y - cur.y;\n if (Math.abs(dx) < LERP_THRESHOLD && Math.abs(dy) < LERP_THRESHOLD) {\n if (cur.x !== tgt.x || cur.y !== tgt.y) {\n applyTilt(tgt.x, tgt.y);\n }\n lerpActiveRef.current = false;\n lerpRafRef.current = null;\n return;\n }\n const nx = cur.x + dx * LERP_FACTOR;\n const ny = cur.y + dy * LERP_FACTOR;\n applyTilt(nx, ny);\n lerpRafRef.current = requestAnimationFrame(loop);\n };\n lerpRafRef.current = requestAnimationFrame(loop);\n }, [applyTilt]);\n\n useEffect(() => {\n return () => {\n if (lerpRafRef.current) cancelAnimationFrame(lerpRafRef.current);\n };\n }, []);\n\n // ── Reset tilt ──\n const resetTilt = useCallback((_animate = false) => {\n if (rafRef.current) { cancelAnimationFrame(rafRef.current); rafRef.current = null; }\n targetTiltRef.current = { x: 0, y: 0 };\n startLerpLoop();\n }, [startLerpLoop]);\n\n // ── Gyroscope listener ──\n const startGyro = useCallback(() => {\n let baseBeta: number | null = null;\n let baseGamma: number | null = null;\n const sensitivity = 0.7;\n const handler = (e: DeviceOrientationEvent) => {\n if (e.beta === null || e.gamma === null) return;\n if (baseBeta === null) { baseBeta = e.beta; baseGamma = e.gamma; }\n const tiltX = -((e.beta - baseBeta!) * sensitivity);\n const tiltY = ((e.gamma! - (baseGamma ?? 0)) * sensitivity);\n scheduleTilt(tiltX, tiltY);\n };\n window.addEventListener(\"deviceorientation\", handler);\n gyroListenerRef.current = handler;\n setGyroStatus(\"available\");\n setUseGyro(true);\n }, [scheduleTilt]);\n\n // ── Detect & initialize gyroscope ──\n useEffect(() => {\n if (typeof DeviceOrientationEvent === \"undefined\") {\n setGyroStatus(\"unavailable\");\n return;\n }\n if (typeof (DeviceOrientationEvent as any).requestPermission === \"function\") {\n setGyroStatus(\"needs-permission\");\n return;\n }\n let testHandler: ((e: DeviceOrientationEvent) => void) | null = null;\n const testTimeout = setTimeout(() => {\n if (testHandler) window.removeEventListener(\"deviceorientation\", testHandler);\n setGyroStatus(\"unavailable\");\n }, 1500);\n testHandler = (e: DeviceOrientationEvent) => {\n clearTimeout(testTimeout);\n if (testHandler) window.removeEventListener(\"deviceorientation\", testHandler);\n if (e.beta !== null && e.gamma !== null) {\n startGyro();\n } else {\n setGyroStatus(\"unavailable\");\n }\n };\n window.addEventListener(\"deviceorientation\", testHandler);\n return () => {\n clearTimeout(testTimeout);\n if (testHandler) window.removeEventListener(\"deviceorientation\", testHandler);\n if (gyroListenerRef.current) window.removeEventListener(\"deviceorientation\", gyroListenerRef.current);\n };\n }, [startGyro]);\n\n // ── iOS permission request ──\n const requestGyroPermission = useCallback(async () => {\n try {\n const state = await (DeviceOrientationEvent as any).requestPermission();\n if (state === \"granted\") { startGyro(); } else { setGyroStatus(\"unavailable\"); }\n } catch { setGyroStatus(\"unavailable\"); }\n }, [startGyro]);\n\n // ── Desktop: Mouse tracking ──\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (gyroStatus === \"available\" || isMobile) return;\n const rect = cardRef.current?.getBoundingClientRect();\n if (!rect) return;\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const tiltY = ((e.clientX - cx) / (rect.width / 2)) * 15;\n const tiltX = -((e.clientY - cy) / (rect.height / 2)) * 15;\n targetTiltRef.current = { x: tiltX, y: tiltY };\n startLerpLoop();\n }, [gyroStatus, isMobile, startLerpLoop]);\n\n const handleMouseLeave = useCallback(() => {\n if (gyroStatus === \"available\" || isMobile) return;\n targetTiltRef.current = { x: 0, y: 0 };\n startLerpLoop();\n }, [gyroStatus, isMobile, startLerpLoop]);\n\n // ── Mobile: Delta-based touch drag ──\n useEffect(() => {\n const card = cardRef.current;\n if (!card || !isMobile || (gyroStatus === \"available\" && useGyro)) return;\n\n const SENSITIVITY = 0.4;\n\n const onTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n touchStartRef.current = { x: touch.clientX, y: touch.clientY };\n };\n\n const onTouchMove = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n e.preventDefault();\n const touch = e.touches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = touch.clientY - touchStartRef.current.y;\n const tiltY = dx * SENSITIVITY;\n const tiltX = -(dy * SENSITIVITY);\n scheduleTilt(tiltX, tiltY);\n };\n\n const onTouchEnd = () => {\n touchStartRef.current = null;\n resetTilt(true);\n };\n\n card.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n card.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n card.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n return () => {\n card.removeEventListener(\"touchstart\", onTouchStart);\n card.removeEventListener(\"touchmove\", onTouchMove);\n card.removeEventListener(\"touchend\", onTouchEnd);\n };\n }, [scheduleTilt, gyroStatus, useGyro, isMobile, resetTilt]);\n\n // ── Glare config ──\n const glareOpacity = tier === \"rainbow\" ? 0.4 : tier === \"holo\" ? 0.3 : 0.2;\n\n // ── Toggle gyro/touch mode ──\n const toggleInputMode = useCallback(() => {\n if (gyroStatus !== \"available\") return;\n const next = !useGyro;\n setUseGyro(next);\n if (!next) {\n if (gyroListenerRef.current) {\n window.removeEventListener(\"deviceorientation\", gyroListenerRef.current);\n gyroListenerRef.current = null;\n }\n resetTilt(true);\n } else {\n startGyro();\n }\n }, [gyroStatus, useGyro, resetTilt, startGyro]);\n\n // ── Hint text ──\n const hintText = (gyroStatus === \"available\" && useGyro)\n ? \"\\ud83d\\udcf1 Tilt your phone to rotate the card\"\n : gyroStatus === \"needs-permission\"\n ? \"\\ud83d\\udcf1 Tap the button below to enable gyroscope\"\n : isMobile\n ? \"\\ud83d\\udc46 Touch & drag the card to tilt\"\n : \"\\u2728 Move to tilt the card\";\n\n // ── Card container sizing ──\n const cardWidth = isBadge(ff)\n ? \"min(70vw, 320px)\"\n : isLaserTicket(ff)\n ? \"min(90vw, 500px)\"\n : isPostcard(ff)\n ? \"min(85vw, 460px)\"\n : \"min(80vw, 400px)\";\n\n const imageContainerStyle: CSSProperties = useBadgeMaterial\n ? getBadgeContainerStyle()\n : usePolaroidMaterial\n ? getPolaroidContainerStyle()\n : useAcrylicMaterial\n ? getAcrylicContainerStyle()\n : {\n borderRadius: \"16px\",\n overflow: \"hidden\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.5)\",\n };\n\n const imageBorderRadius = useBadgeMaterial ? \"50%\" : usePolaroidMaterial ? \"0\" : \"16px\";\n const overlayBorderRadius = useBadgeMaterial ? \"50%\" : usePolaroidMaterial ? \"2px\" : \"16px\";\n\n // ── Inline styles (no Tailwind dependency) ──\n const overlayStyle: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.85)\",\n backdropFilter: visible ? \"blur(12px)\" : \"blur(0px)\",\n WebkitBackdropFilter: visible ? \"blur(12px)\" : \"blur(0px)\",\n transition: \"backdrop-filter 0.3s ease, -webkit-backdrop-filter 0.3s ease\",\n touchAction: \"none\",\n overscrollBehavior: \"none\",\n };\n\n const closeButtonStyle: CSSProperties = {\n position: \"absolute\",\n top: \"16px\",\n right: \"16px\",\n width: \"48px\",\n height: \"48px\",\n borderRadius: \"50%\",\n background: \"rgba(255,255,255,0.1)\",\n border: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10000,\n opacity: closing ? 0 : 1,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.3s ease\",\n pointerEvents: closing ? \"none\" : \"auto\",\n touchAction: \"manipulation\",\n };\n\n const toggleButtonStyle: CSSProperties = {\n position: \"absolute\",\n bottom: \"80px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n padding: \"10px 20px\",\n borderRadius: \"9999px\",\n background: \"rgba(255,255,255,0.15)\",\n border: \"none\",\n color: \"white\",\n fontSize: \"14px\",\n fontWeight: 500,\n cursor: \"pointer\",\n zIndex: 10000,\n opacity: closing ? 0 : 1,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.3s ease\",\n pointerEvents: closing ? \"none\" : \"auto\",\n touchAction: \"manipulation\",\n };\n\n return (\n <div\n ref={overlayRef}\n data-overlay-bg\n style={overlayStyle}\n onClick={(e) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.closest(\"a\")) return;\n onClose();\n }}\n onMouseMove={handleMouseMove}\n >\n {/* Card + name */}\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"12px\" }}>\n {/* Loading skeleton */}\n {imageUrl && !imageLoaded && visible && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n zIndex: 10,\n }}\n >\n <div\n style={{\n width: cardWidth,\n aspectRatio: getAspectRatioCSS(ff),\n borderRadius: useBadgeMaterial ? \"50%\" : usePolaroidMaterial ? \"4px\" : \"16px\",\n overflow: \"hidden\",\n position: \"relative\",\n ...(usePolaroidMaterial ? { padding: \"10px 10px 40px 10px\", backgroundColor: \"rgba(250,250,248,0.08)\" } : {}),\n }}\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0.03) 100%)\",\n animation: \"goodz-focus-pulse 2s ease-in-out infinite\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.08) 40%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.08) 60%, transparent 100%)\",\n animation: \"goodz-focus-shimmer 2s ease-in-out infinite\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n }}\n />\n </div>\n </div>\n )}\n\n {/* Card container */}\n <div\n ref={cardRef}\n style={{\n position: \"relative\",\n userSelect: \"none\",\n width: cardWidth,\n transform: visible\n ? \"perspective(800px) rotateX(0deg) rotateY(0deg)\"\n : \"perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.8)\",\n opacity: (visible && (!imageUrl || imageLoaded)) ? 1 : 0,\n transition: \"opacity 0.4s cubic-bezier(.16,1,.3,1), transform 0.15s ease-out\",\n transformOrigin: \"center center\",\n transformStyle: \"preserve-3d\",\n willChange: \"transform\",\n touchAction: \"none\",\n }}\n onMouseLeave={handleMouseLeave}\n >\n {/* Card image with material-specific container */}\n <div style={{ ...imageContainerStyle, position: \"relative\" }}>\n {imageUrl ? (\n <>\n {!imageLoaded && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n overflow: \"hidden\",\n borderRadius: usePolaroidMaterial ? \"0\" : imageBorderRadius,\n background: \"linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #1a1a2e 100%)\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.06) 40%, rgba(255,255,255,0.12) 50%, rgba(255,255,255,0.06) 60%, transparent 100%)\",\n animation: \"goodz-focus-shimmer 1.8s ease-in-out infinite\",\n }}\n />\n </div>\n )}\n <img\n src={imageUrl}\n alt={cardName}\n style={{\n width: \"100%\",\n display: \"block\",\n borderRadius: usePolaroidMaterial ? \"0\" : imageBorderRadius,\n aspectRatio: getAspectRatioCSS(ff),\n objectFit: \"cover\" as const,\n opacity: imageLoaded ? 1 : 0,\n transition: \"opacity 0.3s ease\",\n }}\n draggable={false}\n onLoad={() => setImageLoaded(true)}\n />\n </>\n ) : (\n <div\n style={{\n width: \"100%\",\n background: \"#262626\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#737373\",\n aspectRatio: getAspectRatioCSS(ff),\n borderRadius: imageBorderRadius,\n }}\n >\n <svg style={{ width: \"64px\", height: \"64px\" }} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5}\n d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n </div>\n )}\n </div>\n\n {/* Glare overlay */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: useBadgeMaterial\n ? `radial-gradient(circle at 50% 30%, rgba(255,255,255,${glareOpacity + 0.1}) 0%, transparent 60%)`\n : `radial-gradient(circle at 50% 30%, rgba(255,255,255,${glareOpacity}) 0%, transparent 70%)`,\n mixBlendMode: \"overlay\",\n borderRadius: overlayBorderRadius,\n ...(usePolaroidMaterial ? { top: \"10px\", left: \"10px\", right: \"10px\", bottom: \"40px\" } : {}),\n }}\n />\n\n {/* Holographic gradient overlay */}\n {(useDefaultHolo || useLaserMaterial) && (\n <div\n ref={holoRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: useLaserMaterial\n ? (getLaserTicketOverlayStyle(125).background as string)\n : getHoloGradient(tier, 125),\n mixBlendMode: useLaserMaterial ? \"color-dodge\" : (tier === \"subtle\" ? \"overlay\" : \"color-dodge\"),\n borderRadius: overlayBorderRadius,\n ...(useLaserMaterial ? { animation: \"goodz-laser-shimmer 3s linear infinite\" } : {}),\n }}\n />\n )}\n\n {/* Sparkle overlay */}\n {useDefaultHolo && (tier === \"holo\" || tier === \"rainbow\") && (\n <div\n ref={sparkleRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: \"none\",\n mixBlendMode: \"overlay\",\n borderRadius: overlayBorderRadius,\n }}\n />\n )}\n\n {/* Material-specific overlay */}\n {(useBadgeMaterial || useAcrylicMaterial || usePostcardMaterial) && (\n <div\n ref={materialRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n ...(useBadgeMaterial ? getBadgeOverlayStyle(0, 0) : {}),\n ...(useAcrylicMaterial ? getAcrylicOverlayStyle(0, 0) : {}),\n ...(usePostcardMaterial ? getPostcardOverlayStyle() : {}),\n borderRadius: overlayBorderRadius,\n }}\n />\n )}\n </div>\n\n {/* Card name */}\n <p\n style={{\n fontSize: \"14px\",\n fontWeight: 600,\n textAlign: \"center\",\n color: \"rgba(255,255,255,0.8)\",\n filter: \"drop-shadow(0 1px 2px rgba(0,0,0,0.5))\",\n pointerEvents: \"none\",\n margin: 0,\n opacity: (visible && !closing) ? 1 : 0,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.5s ease 0.3s\",\n fontFamily: usePolaroidMaterial ? \"'Georgia', serif\" : \"inherit\",\n }}\n >\n {cardName}\n </p>\n </div>\n\n {/* Gyro/Touch toggle button */}\n {(gyroStatus === \"needs-permission\" || gyroStatus === \"available\") && (\n <button\n style={toggleButtonStyle}\n onClick={(e) => {\n if (isMobile) return;\n if (gyroStatus === \"needs-permission\") {\n requestGyroPermission();\n } else {\n toggleInputMode();\n }\n }}\n onTouchEnd={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (gyroStatus === \"needs-permission\") {\n requestGyroPermission();\n } else {\n toggleInputMode();\n }\n }}\n >\n {gyroStatus === \"needs-permission\"\n ? \"\\ud83d\\udcf1 Enable Gyroscope\"\n : useGyro\n ? \"\\ud83d\\udc46 Switch to Touch\"\n : \"\\ud83d\\udcf1 Switch to Gyroscope\"\n }\n </button>\n )}\n\n {/* Hint text */}\n {showHint && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"32px\",\n left: 0,\n right: 0,\n textAlign: \"center\",\n pointerEvents: \"none\",\n opacity: (visible && !closing) ? 0.7 : 0,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.5s ease 0.5s\",\n }}\n >\n <p style={{ color: \"rgba(255,255,255,0.7)\", fontSize: \"12px\", margin: 0 }}>{hintText}</p>\n <p style={{ color: \"rgba(255,255,255,0.4)\", fontSize: \"10px\", marginTop: \"4px\" }}>Tap anywhere to close</p>\n </div>\n )}\n\n {/* Close button */}\n <button\n style={closeButtonStyle}\n onClick={(e) => {\n if (isMobile) return;\n onClose();\n }}\n onTouchEnd={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n }}\n aria-label=\"Close\"\n >\n <svg style={{ width: \"24px\", height: \"24px\", color: \"white\" }} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n );\n}\n\nexport default GoodZCardFocus;\n"]}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  export { AuthGetOAuthAppInfoInput, AuthNamespace, AuthOAuthAppInfo, AuthUser, CardGetInput, CardListBySeriesInput, CollectibleGetCardProfileInput, CollectibleGetInstanceByIdInput, CollectibleGetPublicInstanceInput, CollectibleGetPublicInstancesBatchInput, CollectibleGetShellImageUrlInput, CollectibleNamespace, FranchiseGetInput, GoodZApiError, GoodZApiFieldError, GoodZClient, GoodZClientConfig, GoodZErrorV2, InventoryConfirmOwnershipInput, InventoryConfirmOwnershipOutput, InventoryGetUserInventoryInput, InventoryGrantMintAuthInput, InventoryMintInput, InventoryMintOutput, InventoryNamespace, InventoryTransferByCardInput, InventoryTransferByCardOutput, InventoryTransferHistoryInput, InventoryTransferInput, InventoryTransferOutput, IpNamespace, PurchaseChannel, SaleType, SeriesGetInput, SeriesListByFranchiseInput, TransferReason, UserGetPublicProfileByIdInput, UserGetPublicProfileInput, UserNamespace, UserPublicProfile, ZcoinChargeUserInput, ZcoinChargeUserOutput, ZcoinCommercialTransferInput, ZcoinCommercialTransferOutput, ZcoinCreateDepositOrderInput, ZcoinCreateDepositOrderOutput, ZcoinCreateDirectPurchaseOrderInput, ZcoinCreateDirectPurchaseOrderOutput, ZcoinDepositPackage, ZcoinGetDepositPackagesInput, ZcoinGetDepositStatusInput, ZcoinGetDepositStatusOutput, ZcoinGetMyBalanceOutput, ZcoinGetMyHistoryInput, ZcoinMintAndChargeInput, ZcoinMintAndChargeOutput, ZcoinNamespace, ZcoinTxType, createGoodZClient, createUserClient } from './core/index.js';
2
2
  export { OAuthUrlConfig, TokenManager, TokenManagerConfig, TokenPair, buildAuthorizationUrl, exchangeCode } from './auth/index.js';
3
3
  export { ZCOIN_PRECISION, formatZcoin, formatZcoinWithSymbol, toDisplay, toHundredths } from './zcoin-utils.js';
4
+ export { FORM_FACTORS, FormFactorKey, FormFactorSpec, GoodZCardFocus, GoodZCardFocusProps, getAspectRatioCSS, getFormFactorSpec } from './ui/index.js';
5
+ import 'react/jsx-runtime';
6
+ import 'react';
4
7
 
5
8
  /**
6
9
  * @goodz-core/sdk — Official SDK for GoodZ.Core
@@ -16,6 +19,6 @@ export { ZCOIN_PRECISION, formatZcoin, formatZcoinWithSymbol, toDisplay, toHundr
16
19
  * @module
17
20
  */
18
21
 
19
- declare const SDK_VERSION = "0.1.0";
22
+ declare const SDK_VERSION = "0.2.0";
20
23
 
21
24
  export { SDK_VERSION };
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  export { GoodZApiError, createGoodZClient, createUserClient } from './chunk-G7NKU6PT.js';
2
2
  export { TokenManager, buildAuthorizationUrl, exchangeCode } from './chunk-EUKUN4JF.js';
3
3
  export { ZCOIN_PRECISION, formatZcoin, formatZcoinWithSymbol, toDisplay, toHundredths } from './chunk-2ZETOE2X.js';
4
+ export { FORM_FACTORS, GoodZCardFocus, getAspectRatioCSS, getFormFactorSpec } from './chunk-K6IFJWLB.js';
4
5
 
5
6
  // src/index.ts
6
- var SDK_VERSION = "0.1.0";
7
+ var SDK_VERSION = "0.2.0";
7
8
 
8
9
  export { SDK_VERSION };
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAoDO,IAAM,WAAA,GAAc","file":"index.js","sourcesContent":["/**\n * @goodz-core/sdk — Official SDK for GoodZ.Core\n *\n * This is the main entry point that re-exports all submodules.\n * For tree-shaking, prefer importing from specific subpaths:\n *\n * ```ts\n * import { createGoodZClient } from \"@goodz-core/sdk/core\";\n * import { TokenManager } from \"@goodz-core/sdk/auth\";\n * ```\n *\n * @module\n */\n\n// Core client\nexport {\n createGoodZClient,\n createUserClient,\n GoodZApiError,\n type GoodZClient,\n type GoodZClientConfig,\n type ZcoinNamespace,\n type InventoryNamespace,\n type CollectibleNamespace,\n type UserNamespace,\n type AuthNamespace,\n type IpNamespace,\n} from \"./core/index\";\n\n// All API types\nexport type * from \"./types\";\n\n// Auth helpers\nexport {\n TokenManager,\n buildAuthorizationUrl,\n exchangeCode,\n type TokenManagerConfig,\n type TokenPair,\n type OAuthUrlConfig,\n} from \"./auth/index\";\n\n// Z-coin utilities\nexport {\n ZCOIN_PRECISION,\n toHundredths,\n toDisplay,\n formatZcoin,\n formatZcoinWithSymbol,\n} from \"./zcoin-utils\";\n\n// SDK version\nexport const SDK_VERSION = \"0.1.0\";\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAgEO,IAAM,WAAA,GAAc","file":"index.js","sourcesContent":["/**\n * @goodz-core/sdk — Official SDK for GoodZ.Core\n *\n * This is the main entry point that re-exports all submodules.\n * For tree-shaking, prefer importing from specific subpaths:\n *\n * ```ts\n * import { createGoodZClient } from \"@goodz-core/sdk/core\";\n * import { TokenManager } from \"@goodz-core/sdk/auth\";\n * ```\n *\n * @module\n */\n\n// Core client\nexport {\n createGoodZClient,\n createUserClient,\n GoodZApiError,\n type GoodZClient,\n type GoodZClientConfig,\n type ZcoinNamespace,\n type InventoryNamespace,\n type CollectibleNamespace,\n type UserNamespace,\n type AuthNamespace,\n type IpNamespace,\n} from \"./core/index\";\n\n// All API types\nexport type * from \"./types\";\n\n// Auth helpers\nexport {\n TokenManager,\n buildAuthorizationUrl,\n exchangeCode,\n type TokenManagerConfig,\n type TokenPair,\n type OAuthUrlConfig,\n} from \"./auth/index\";\n\n// Z-coin utilities\nexport {\n ZCOIN_PRECISION,\n toHundredths,\n toDisplay,\n formatZcoin,\n formatZcoinWithSymbol,\n} from \"./zcoin-utils\";\n\n// UI components (React 18+)\n// Note: Import from \"@goodz-core/sdk/ui\" for tree-shaking\nexport {\n GoodZCardFocus,\n type GoodZCardFocusProps,\n type FormFactorKey,\n type FormFactorSpec,\n FORM_FACTORS,\n getFormFactorSpec,\n getAspectRatioCSS,\n} from \"./ui/index\";\n\n// SDK version\nexport const SDK_VERSION = \"0.2.0\";\n"]}
@@ -0,0 +1,56 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ /**
5
+ * Form Factor Standards — self-contained within SDK.
6
+ * Mirrors GoodZ.Core's shared/formFactors.ts but with zero external dependencies.
7
+ */
8
+ type FormFactorKey = "trading_card" | "postcard" | "postcard_portrait" | "polaroid" | "laser_ticket" | "badge_small" | "badge_medium" | "badge_large" | "acrylic_stand_tall" | "acrylic_stand_chibi";
9
+ interface FormFactorSpec {
10
+ key: FormFactorKey;
11
+ label: string;
12
+ aspectRatio: [number, number];
13
+ isCircle: boolean;
14
+ isTransparent?: boolean;
15
+ }
16
+ declare const FORM_FACTORS: Record<FormFactorKey, FormFactorSpec>;
17
+ declare function getFormFactorSpec(key: string): FormFactorSpec | undefined;
18
+ declare function getAspectRatioCSS(key: string): string;
19
+
20
+ interface GoodZCardFocusProps {
21
+ /** Content to render as the clickable trigger (typically a card thumbnail) */
22
+ children: ReactNode;
23
+ /** URL of the GoodZ image (original artwork or shell image) */
24
+ imageUrl?: string | null;
25
+ /** Display name of the GoodZ */
26
+ cardName?: string;
27
+ /** Rarity tier (e.g., "R", "SR", "SSR", "UR") — controls holographic intensity */
28
+ rarity?: string | null;
29
+ /** Form factor key — controls material effect and aspect ratio */
30
+ formFactor?: FormFactorKey | string;
31
+ /** Additional CSS class for the trigger wrapper */
32
+ className?: string;
33
+ /** Disable the focus modal (click-through) */
34
+ disabled?: boolean;
35
+ }
36
+ /**
37
+ * GoodZCardFocus — wraps any content as a clickable trigger that opens
38
+ * a full-screen focus modal with holographic tilt effects.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * import { GoodZCardFocus } from "@goodz-core/sdk/ui";
43
+ *
44
+ * <GoodZCardFocus
45
+ * imageUrl="https://goodzcore.manus.space/api/shell/42.png"
46
+ * cardName="Luna"
47
+ * rarity="SSR"
48
+ * formFactor="trading_card"
49
+ * >
50
+ * <img src={thumbnailUrl} alt="Luna" />
51
+ * </GoodZCardFocus>
52
+ * ```
53
+ */
54
+ declare function GoodZCardFocus({ children, imageUrl, cardName, rarity, formFactor, className, disabled, }: GoodZCardFocusProps): react_jsx_runtime.JSX.Element;
55
+
56
+ export { FORM_FACTORS, type FormFactorKey, type FormFactorSpec, GoodZCardFocus, type GoodZCardFocusProps, getAspectRatioCSS, getFormFactorSpec };
@@ -0,0 +1,3 @@
1
+ export { FORM_FACTORS, GoodZCardFocus, getAspectRatioCSS, getFormFactorSpec } from '../chunk-K6IFJWLB.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@goodz-core/sdk",
3
- "version": "0.1.0",
4
- "description": "Official SDK for GoodZ.Core — type-safe API client, OAuth helpers, and Z-coin utilities for building GoodZ-powered applications.",
3
+ "version": "0.2.0",
4
+ "description": "Official SDK for GoodZ.Core — type-safe API client, OAuth helpers, Z-coin utilities, and React UI components for building GoodZ-powered applications.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -21,6 +21,10 @@
21
21
  "./zcoin": {
22
22
  "types": "./dist/zcoin-utils.d.ts",
23
23
  "import": "./dist/zcoin-utils.js"
24
+ },
25
+ "./ui": {
26
+ "types": "./dist/ui/index.d.ts",
27
+ "import": "./dist/ui/index.js"
24
28
  }
25
29
  },
26
30
  "files": [
@@ -40,7 +44,10 @@
40
44
  "digital-collectibles",
41
45
  "oauth",
42
46
  "api-client",
43
- "zcoin"
47
+ "zcoin",
48
+ "react",
49
+ "card-display",
50
+ "holographic"
44
51
  ],
45
52
  "author": "GoodZ Team",
46
53
  "license": "MIT",
@@ -52,8 +59,24 @@
52
59
  "dependencies": {
53
60
  "superjson": "^1.13.0"
54
61
  },
62
+ "peerDependencies": {
63
+ "react": ">=18.0.0",
64
+ "react-dom": ">=18.0.0"
65
+ },
66
+ "peerDependenciesMeta": {
67
+ "react": {
68
+ "optional": true
69
+ },
70
+ "react-dom": {
71
+ "optional": true
72
+ }
73
+ },
55
74
  "devDependencies": {
56
75
  "@types/node": "^22.0.0",
76
+ "@types/react": "^19.0.0",
77
+ "@types/react-dom": "^19.0.0",
78
+ "react": "^19.0.0",
79
+ "react-dom": "^19.0.0",
57
80
  "tsup": "^8.0.0",
58
81
  "typescript": "^5.5.0",
59
82
  "vitest": "^1.0.0"