jaml-ui 3.0.1 → 3.0.2
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.
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/render/useJamlCardRenderer.ts","../src/render/CanvasRenderer.tsx","../src/components/GameCard.tsx","../src/components/JamlyzerView.tsx","../src/components/DeckSprite.tsx","../src/components/cardEnums.ts","../src/components/StandardCard.tsx","../src/json-render/engine.tsx","../src/json-render/catalog.ts","../src/json-render/components/layout.tsx","../src/json-render/components/domain.tsx","../src/json-render/components/game.tsx","../src/json-render/components/mascot.tsx","../src/json-render/knowledge/jokers.ts","../src/json-render/knowledge/synergies.ts","../src/json-render/knowledge/decks.ts","../src/json-render/knowledge/bosses.ts","../src/json-render/components/reference.tsx","../src/json-render/registry.tsx","../src/json-render/builders/search.ts","../src/json-render/builders/encyclopedia.ts","../src/json-render/builders/analyzer.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Layer } from \"./Layer.js\";\nimport { SPRITE_SHEETS } from \"../sprites/spriteData.js\";\n\nfunction loadImage(url: string): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const image = new window.Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", () => resolve(null));\n image.src = url;\n });\n}\n\nfunction renderImage(\n canvas: HTMLCanvasElement,\n context: CanvasRenderingContext2D,\n image: HTMLImageElement,\n layer: Layer,\n timestamp?: number\n) {\n if (!image || !layer || !layer?.pos) return 0;\n const cardWidth = image.width / layer.columns;\n const cardHeight = image.height / layer.rows;\n const canvasStyle = canvas.style;\n\n if (layer.order === 0) {\n canvas.width = cardWidth;\n canvas.height = cardHeight;\n canvasStyle.width = `${cardWidth}px`;\n canvasStyle.height = `${cardHeight}px`;\n }\n\n canvasStyle.imageRendering = \"pixelated\";\n context.imageSmoothingEnabled = true;\n\n context.save();\n\n if (layer.animated && timestamp) {\n const elapsed = timestamp;\n const yOffset = Math.sin(elapsed / 1000) * 3;\n const xOffset = Math.sin(elapsed / 1500) * 1.5;\n context.globalAlpha = 0.65 + (Math.sin(elapsed / 2000) + 1) * 0.075;\n context.translate(xOffset, yOffset);\n }\n\n context.drawImage(\n image,\n layer.pos.x * cardWidth,\n layer.pos.y * cardHeight,\n cardWidth,\n cardHeight,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n context.restore();\n\n return cardWidth / cardHeight;\n}\n\nexport function useJamlCardRenderer({\n layers,\n invert = false,\n hoverTilt = false,\n}: {\n layers: Layer[];\n invert?: boolean;\n hoverTilt?: boolean;\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const imageCacheRef = useRef<Map<string, HTMLImageElement>>(new Map());\n const [ratio, setRatio] = useState(3 / 4);\n const [, forceUpdate] = useState(0);\n const frameRef = useRef<number | null>(null);\n const targetRef = useRef({ rx: 0, ry: 0, rz: 0 });\n const currentRef = useRef({ rx: 0, ry: 0, rz: 0 });\n\n const hasAnimatedLayer = layers?.some((layer) => layer.animated);\n\n // Preload all known sheets once\n useEffect(() => {\n let cancelled = false;\n const imageCache = imageCacheRef.current;\n const preload = async () => {\n const urls = Array.from(new Set(Object.values(SPRITE_SHEETS).map((sheet) => sheet.src)));\n const images = await Promise.all(urls.map((url) => loadImage(url)));\n if (cancelled) return;\n images.forEach((image, index) => {\n if (image) imageCache.set(urls[index], image);\n });\n forceUpdate((prev) => prev + 1);\n };\n\n preload().catch((err) => console.error(\"[JamlCardRenderer]\", err));\n\n return () => {\n cancelled = true;\n imageCache.clear();\n };\n }, []);\n\n // Drawing: RAF loop for animated layers, single paint otherwise.\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || !layers || layers.length === 0) return;\n const context = canvas.getContext(\"2d\");\n if (!context) return;\n\n let cancelled = false;\n let frame: number | null = null;\n let startTime: number | undefined;\n\n const drawOnce = (animTime?: number) => {\n context.clearRect(0, 0, canvas.width, canvas.height);\n ;[...layers]\n .sort((a, b) => a.order - b.order)\n .forEach((layer) => {\n const cached = imageCacheRef.current.get(layer.source);\n if (cached) {\n const imageRatio = renderImage(canvas, context, cached, layer, hasAnimatedLayer ? animTime : undefined);\n if (layer.order === 0) setRatio(imageRatio);\n return;\n }\n loadImage(layer.source).then((img) => {\n if (cancelled || !img) return;\n imageCacheRef.current.set(layer.source, img);\n if (!hasAnimatedLayer) {\n const imageRatio = renderImage(canvas, context, img, layer);\n if (layer.order === 0) setRatio(imageRatio);\n }\n forceUpdate((prev) => prev + 1);\n });\n });\n canvas.style.filter = invert ? \"invert(0.94)\" : \"none\";\n };\n\n if (hasAnimatedLayer) {\n const tick = (timestamp: number) => {\n if (cancelled) return;\n if (startTime === undefined) startTime = timestamp;\n drawOnce(timestamp - startTime);\n frame = requestAnimationFrame(tick);\n };\n frame = requestAnimationFrame(tick);\n } else {\n drawOnce();\n }\n\n return () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n };\n }, [layers, invert, hasAnimatedLayer]);\n\n const stopTiltLoop = useCallback(() => {\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n }, []);\n\n const writeCardTransform = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const c = currentRef.current;\n canvas.style.transform = `rotateX(${c.rx}deg) rotateY(${c.ry}deg) rotateZ(${c.rz}deg)`;\n }, []);\n\n const runTiltLoop = useCallback(\n (rate: number, onSettled?: () => void) => {\n stopTiltLoop();\n let previous = performance.now();\n const tick = (now: number) => {\n const dt = Math.min(0.05, (now - previous) / 1000);\n previous = now;\n const target = targetRef.current;\n const current = currentRef.current;\n const alpha = 1 - Math.exp(-rate * dt);\n current.rx += (target.rx - current.rx) * alpha;\n current.ry += (target.ry - current.ry) * alpha;\n current.rz += (target.rz - current.rz) * alpha;\n writeCardTransform();\n const settled =\n Math.abs(target.rx - current.rx) < 0.02 &&\n Math.abs(target.ry - current.ry) < 0.02 &&\n Math.abs(target.rz - current.rz) < 0.02;\n if (settled) {\n current.rx = target.rx;\n current.ry = target.ry;\n current.rz = target.rz;\n writeCardTransform();\n frameRef.current = null;\n onSettled?.();\n return;\n }\n frameRef.current = requestAnimationFrame(tick);\n };\n frameRef.current = requestAnimationFrame(tick);\n },\n [stopTiltLoop, writeCardTransform]\n );\n\n useEffect(() => () => stopTiltLoop(), [stopTiltLoop]);\n\n const onPointerEnter = (event: React.PointerEvent) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n containerRef.current?.setAttribute(\"data-hovered\", \"true\");\n runTiltLoop(22);\n };\n\n const onPointerLeave = () => {\n if (!hoverTilt) return;\n containerRef.current?.setAttribute(\"data-hovered\", \"false\");\n targetRef.current = { rx: 0, ry: 0, rz: 0 };\n runTiltLoop(14, () => {\n const canvas = canvasRef.current;\n if (canvas) canvas.style.transform = \"\";\n });\n };\n\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n const rect = event.currentTarget.getBoundingClientRect();\n const nx = Math.max(-1, Math.min(1, ((event.clientX - rect.left) / rect.width - 0.5) * 2));\n const ny = Math.max(-1, Math.min(1, ((event.clientY - rect.top) / rect.height - 0.5) * 2));\n targetRef.current = {\n rx: ny * -10,\n ry: nx * 12,\n rz: nx * ny * -1.2,\n };\n containerRef.current?.style.setProperty(\"--j-card-glare-x\", `${(nx + 1) * 50}%`);\n containerRef.current?.style.setProperty(\"--j-card-glare-y\", `${(1 - ny) * 50}%`);\n runTiltLoop(22);\n };\n\n return {\n canvasRef,\n containerRef,\n ratio,\n handlers: {\n onPointerEnter: hoverTilt ? onPointerEnter : undefined,\n onPointerLeave: hoverTilt ? onPointerLeave : undefined,\n onPointerMove: hoverTilt ? onPointerMove : undefined,\n },\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"./Layer.js\";\nimport { useJamlCardRenderer } from \"./useJamlCardRenderer.js\";\n\nexport interface JamlCardRendererProps {\n layers: Layer[];\n invert?: boolean;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlCardRenderer({ layers, invert = false, className = \"\", hoverTilt = false }: JamlCardRendererProps) {\n const { canvasRef, containerRef, ratio, handlers } = useJamlCardRenderer({\n layers,\n invert,\n hoverTilt\n });\n\n return (\n <div\n ref={containerRef}\n className={`j-card-renderer ${className}`.trim()}\n data-hover-tilt={hoverTilt}\n data-hovered=\"false\"\n style={{ \"--j-card-aspect\": String(ratio) } as React.CSSProperties}\n >\n <canvas ref={canvasRef} className=\"j-card-renderer__canvas\" />\n <div className=\"j-card-renderer__hit\" {...handlers} />\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"../render/Layer.js\";\nimport { JamlCardRenderer } from \"../render/CanvasRenderer.js\";\nimport {\n JOKERS,\n JOKER_FACES,\n TAROTS_AND_PLANETS,\n CONSUMABLE_FACES,\n TAGS,\n VOUCHERS,\n BOSSES,\n EDITION_MAP,\n SPRITE_SHEETS,\n STICKER_MAP,\n RANK_MAP,\n SUIT_MAP,\n ENHANCER_MAP,\n SEAL_MAP,\n} from \"../sprites/spriteData.js\";\nimport { decodeMotelyItem } from \"../decode/motelyItemDecoder.js\";\n\nexport interface JamlGameCardProps {\n card: {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n rank?: string;\n suit?: string;\n enhancements?: string[];\n seal?: string;\n scale?: number;\n };\n type: \"joker\" | \"consumable\" | \"playing\";\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport type AnalyzerShopItem = {\n id: string;\n name: string;\n value?: number;\n};\n\nexport type AnalyzerResolvedItem =\n | { kind: \"voucher\"; voucherName: string }\n | {\n kind: \"joker\" | \"consumable\" | \"playing\";\n card: JamlGameCardProps[\"card\"];\n type: JamlGameCardProps[\"type\"];\n }\n | { kind: \"unknown\"; label: string };\n\nfunction normalizeCardRank(raw: string): string {\n const value = raw.trim().toUpperCase();\n if (value === \"A\" || value === \"ACE\") return \"Ace\";\n if (value === \"K\" || value === \"KING\") return \"King\";\n if (value === \"Q\" || value === \"QUEEN\") return \"Queen\";\n if (value === \"J\" || value === \"JACK\") return \"Jack\";\n return raw.trim();\n}\n\nfunction normalizeCardSuit(raw: string): string {\n const value = raw.trim().toLowerCase();\n if (value === \"heart\" || value === \"hearts\") return \"Hearts\";\n if (value === \"club\" || value === \"clubs\") return \"Clubs\";\n if (value === \"diamond\" || value === \"diamonds\") return \"Diamonds\";\n if (value === \"spade\" || value === \"spades\") return \"Spades\";\n return raw.trim();\n}\n\nfunction parseStandardcardName(name: string): { rank: string; suit: string } | null {\n const trimmed = name.trim();\n const ofMatch = /^(A|K|Q|J|10|[2-9]|Ace|King|Queen|Jack)\\s+of\\s+(Hearts|Clubs|Diamonds|Spades)$/i.exec(trimmed);\n if (ofMatch) {\n return {\n rank: normalizeCardRank(ofMatch[1]),\n suit: normalizeCardSuit(ofMatch[2]),\n };\n }\n\n const shortMatch = /^(A|K|Q|J|10|[2-9])\\s*([HCDS])$/i.exec(trimmed);\n if (shortMatch) {\n const suitMap: Record<string, string> = {\n H: \"Hearts\",\n C: \"Clubs\",\n D: \"Diamonds\",\n S: \"Spades\",\n };\n return {\n rank: normalizeCardRank(shortMatch[1]),\n suit: suitMap[shortMatch[2].toUpperCase()],\n };\n }\n\n return null;\n}\n\nconst MODIFIER_PREFIXES = [\n \"Eternal\",\n \"Perishable\",\n \"Rental\",\n \"Foil\",\n \"Holographic\",\n \"Polychrome\",\n \"Negative\",\n \"Bonus\",\n \"Mult\",\n \"Wild\",\n \"Glass\",\n \"Steel\",\n \"Stone\",\n \"Gold\",\n \"Lucky\",\n \"Gold Seal\",\n \"Red Seal\",\n \"Blue Seal\",\n \"Purple Seal\",\n];\n\nfunction stripModifiers(name: string): {\n baseName: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n} {\n let remaining = name;\n let edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\" | undefined;\n let isEternal = false;\n let isPerishable = false;\n let isRental = false;\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const prefix of MODIFIER_PREFIXES) {\n if (remaining.startsWith(prefix + \" \")) {\n const stripped = remaining.slice(prefix.length + 1);\n if (prefix === \"Foil\" || prefix === \"Holographic\" || prefix === \"Polychrome\" || prefix === \"Negative\") {\n edition = prefix as typeof edition;\n } else if (prefix === \"Eternal\") {\n isEternal = true;\n } else if (prefix === \"Perishable\") {\n isPerishable = true;\n } else if (prefix === \"Rental\") {\n isRental = true;\n }\n remaining = stripped;\n changed = true;\n break;\n }\n }\n }\n\n return { baseName: remaining, edition, isEternal, isPerishable, isRental };\n}\n\nfunction resolvePackedAnalyzerItem(item: AnalyzerShopItem, scale: number): AnalyzerResolvedItem | null {\n if (typeof item.value !== \"number\" || !Number.isFinite(item.value)) {\n return null;\n }\n\n // Decode the packed int through the typed Motely decoder — the single source\n // of truth for the bit layout. The previous version hand-rolled nibble\n // constants (catNibble === 5 /* Joker */ etc.) that did NOT match the real\n // Motely enum, so categories decoded as bogus 1..5 values. decodeMotelyItem\n // reads MOTELY_ITEM_FORMATS_BY_VALUE + Motely.decode*, so the category,\n // edition, seal, enhancement, rank, suit, and stickers are all correct.\n const decoded = decodeMotelyItem(item.value);\n if (!decoded) return null;\n\n const edition = decoded.edition ?? undefined;\n const { isEternal, isPerishable, isRental } = decoded;\n\n switch (decoded.category) {\n case \"joker\":\n return {\n kind: \"joker\",\n type: \"joker\",\n card: { name: decoded.displayName, edition, isEternal, isPerishable, isRental, scale },\n };\n case \"tarot\":\n case \"planet\":\n case \"spectral\":\n return {\n kind: \"consumable\",\n type: \"consumable\",\n card: {\n name: decoded.displayName,\n edition,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n scale,\n },\n };\n case \"playing\":\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: decoded.displayName,\n rank: decoded.rank ?? undefined,\n suit: decoded.suit ?? undefined,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n edition,\n isEternal,\n isPerishable,\n isRental,\n scale,\n },\n };\n default:\n // Unknown category (incl. vouchers): fall back to the name-based\n // matching in resolveAnalyzerShopItem (vouchers resolve by name).\n return null;\n }\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function resolveAnalyzerShopItem(item: AnalyzerShopItem, scale = 1): AnalyzerResolvedItem {\n const displayName = String(item.name || \"\").trim();\n\n if (!displayName) {\n return { kind: \"unknown\", label: String(item.id || \"\").trim() || \"Unknown Item\" };\n }\n\n const packedResolved = resolvePackedAnalyzerItem(item, scale);\n if (packedResolved && packedResolved.kind !== \"unknown\") {\n return packedResolved;\n }\n\n if (VOUCHERS.some((voucher) => voucher.name === displayName)) {\n return { kind: \"voucher\", voucherName: displayName };\n }\n\n if (JOKERS.some((joker) => joker.name === displayName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: displayName, scale } };\n }\n\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === displayName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: displayName, scale } };\n }\n\n const { baseName, edition, isEternal, isPerishable, isRental } = stripModifiers(displayName);\n\n if (baseName !== displayName) {\n if (JOKERS.some((joker) => joker.name === baseName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: baseName, edition, isEternal, isPerishable, isRental, scale } };\n }\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === baseName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: baseName, edition, scale } };\n }\n if (VOUCHERS.some((voucher) => voucher.name === baseName)) {\n return { kind: \"voucher\", voucherName: baseName };\n }\n }\n\n const standardcard = parseStandardcardName(displayName) ?? parseStandardcardName(baseName);\n if (standardcard) {\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: displayName,\n rank: standardcard.rank,\n suit: standardcard.suit,\n scale,\n },\n };\n }\n\n return packedResolved ?? { kind: \"unknown\", label: displayName };\n}\n\nexport function JamlGameCard({ card, type, className = \"\", hoverTilt = false }: JamlGameCardProps) {\n const { name, edition, isEternal, isPerishable, isRental, rank, suit, enhancements, seal, scale = 1 } = card;\n const layers: Layer[] = [];\n\n if (type === \"joker\") {\n const jokerData = JOKERS.find((j) => j.name === name);\n if (jokerData) layers.push(new Layer({ ...jokerData, source: SPRITE_SHEETS.jokers.src, order: 0, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n const face = JOKER_FACES.find((j) => j.name === name);\n if (face) layers.push(new Layer({ ...face, source: SPRITE_SHEETS.jokers.src, order: 1, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n } else if (type === \"consumable\") {\n const consumable = TAROTS_AND_PLANETS.find((t) => t.name === name);\n if (consumable) layers.push(new Layer({ ...consumable, order: 0, source: SPRITE_SHEETS.tarots.src, rows: SPRITE_SHEETS.tarots.rows, columns: SPRITE_SHEETS.tarots.columns }));\n const face = CONSUMABLE_FACES.find((t) => t.name === name);\n if (face)\n layers.push(\n new Layer({\n ...face,\n order: 1,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n animated: face.animated,\n }),\n );\n } else {\n const standardcard = rank && suit ? { rank, suit } : parseStandardcardName(name);\n if (standardcard) {\n const enhancerPos = (enhancements ?? [])\n .map((m) => ENHANCER_MAP[m])\n .find((pos): pos is { x: number; y: number } => Boolean(pos)) ?? { x: 1, y: 0 };\n layers.push(\n new Layer({\n pos: enhancerPos,\n name: \"background\",\n order: 0,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n layers.push(\n new Layer({\n pos: { x: RANK_MAP[standardcard.rank] ?? 0, y: SUIT_MAP[standardcard.suit] ?? 0 },\n name,\n order: 1,\n source: SPRITE_SHEETS.deck.src,\n rows: SPRITE_SHEETS.deck.rows,\n columns: SPRITE_SHEETS.deck.columns,\n }),\n );\n }\n }\n\n if (edition) {\n const index = EDITION_MAP[edition];\n if (index !== undefined) {\n layers.push(\n new Layer({\n pos: { x: index, y: 0 },\n name: edition,\n order: 2,\n source: SPRITE_SHEETS.editions.src,\n rows: SPRITE_SHEETS.editions.rows,\n columns: SPRITE_SHEETS.editions.columns,\n }),\n );\n }\n }\n\n if (isEternal) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Eternal\"],\n name: \"Eternal\",\n order: 3,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isPerishable) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Perishable\"],\n name: \"Perishable\",\n order: 4,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isRental) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Rental\"],\n name: \"Rental\",\n order: 5,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n\n if (seal) {\n const sealPos = SEAL_MAP[seal];\n if (sealPos) {\n layers.push(\n new Layer({\n pos: sealPos,\n name: seal,\n order: 6,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n }\n }\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer invert={edition === \"Negative\"} layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface VoucherProps {\n voucherName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlVoucher({ voucherName, scale = 1, className = \"\", hoverTilt = false }: VoucherProps) {\n const voucherData = VOUCHERS.find((v) => v.name === voucherName);\n if (!voucherData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...voucherData,\n order: 0,\n source: SPRITE_SHEETS.vouchers.src,\n rows: SPRITE_SHEETS.vouchers.rows,\n columns: SPRITE_SHEETS.vouchers.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface TagProps {\n tagName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlTag({ tagName, scale = 1, className = \"\", hoverTilt = false }: TagProps) {\n const tagData = TAGS.find((t) => t.name === tagName);\n if (!tagData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...tagData,\n order: 0,\n source: SPRITE_SHEETS.tags.src,\n rows: SPRITE_SHEETS.tags.rows,\n columns: SPRITE_SHEETS.tags.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface BossProps {\n bossName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlBoss({ bossName, scale = 1, className = \"\", hoverTilt = false }: BossProps) {\n const bossData = BOSSES.find((b) => b.name === bossName);\n if (!bossData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...bossData,\n order: 0,\n source: SPRITE_SHEETS.blinds.src,\n rows: SPRITE_SHEETS.blinds.rows,\n columns: SPRITE_SHEETS.blinds.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport {\n MotelyJamlyzerSeedResult,\n MotelyJamlyzerAnteResult,\n MotelyBoosterPack,\n MotelyBossBlind,\n MotelyTag,\n MotelyVoucher,\n MotelyDeck,\n MotelyStake,\n} from \"motely-wasm\";\nimport {\n JamlGameCard,\n JamlVoucher,\n JamlTag,\n JamlBoss,\n} from \"./GameCard.js\";\nimport { decodeMotelyItemToJamlCard } from \"../decode/motelyItemDecoder.js\";\n\nexport interface JamlyzerViewProps {\n result: MotelyJamlyzerSeedResult;\n deck?: MotelyDeck;\n stake?: MotelyStake;\n maxAnte?: number;\n}\n\nfunction splitCamelCase(key: string): string {\n return key.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nfunction packDisplayName(pack: MotelyBoosterPack): string {\n return splitCamelCase(MotelyBoosterPack[pack]);\n}\n\nfunction bossDisplayName(boss: MotelyBossBlind): string {\n return splitCamelCase(MotelyBossBlind[boss]);\n}\n\nfunction tagDisplayName(tag: MotelyTag): string {\n return splitCamelCase(MotelyTag[tag]);\n}\n\nfunction voucherDisplayName(voucher: MotelyVoucher): string {\n return splitCamelCase(MotelyVoucher[voucher]);\n}\n\nfunction deckDisplayName(deck: MotelyDeck): string {\n return splitCamelCase(MotelyDeck[deck]);\n}\n\nfunction stakeDisplayName(stake: MotelyStake): string {\n return splitCamelCase(MotelyStake[stake]);\n}\n\nfunction ItemCard({ value }: { value: number }) {\n const resolved = useMemo(\n () => decodeMotelyItemToJamlCard(value, 0.85),\n [value]\n );\n if (!resolved) return <div className=\"j-analyzer-unknown\">?</div>;\n return (\n <JamlGameCard\n type={resolved.type}\n card={resolved.card}\n hoverTilt\n />\n );\n}\n\nfunction PackSection({ pack }: { pack: MotelyJamlyzerAnteResult[\"packs\"][number] }) {\n return (\n <div className=\"j-analyzer-pack\">\n <div className=\"j-analyzer-pack-header\">\n <span className=\"j-analyzer-pack-name\">{packDisplayName(pack.pack)}</span>\n <span className=\"j-analyzer-pack-count\">{pack.items.length} cards</span>\n </div>\n <div className=\"j-analyzer-card-row\">\n {pack.items.map((item, i) => (\n <ItemCard key={i} value={item.value} />\n ))}\n </div>\n </div>\n );\n}\n\nexport function JamlyzerView({ result, deck, stake, maxAnte = 8 }: JamlyzerViewProps) {\n const [selectedAnte, setSelectedAnte] = useState(1);\n\n const ante = useMemo(\n () => result.antes.find((a) => a.ante === selectedAnte) ?? result.antes[0],\n [result.antes, selectedAnte]\n );\n\n const anteNumbers = useMemo(\n () => Array.from({ length: maxAnte }, (_, i) => i + 1),\n [maxAnte]\n );\n\n if (!ante) return <div className=\"j-analyzer-empty\">No ante data available.</div>;\n\n return (\n <div className=\"j-analyzer\">\n <style>{`\n .j-analyzer {\n --j-analyzer-bg: #1a1b26;\n --j-analyzer-panel: #24283b;\n --j-analyzer-border: #414868;\n --j-analyzer-text: #c0caf5;\n --j-analyzer-muted: #565f89;\n --j-analyzer-accent: #7aa2f7;\n --j-analyzer-radius: 8px;\n display: grid;\n grid-template-columns: 80px 1fr;\n gap: 12px;\n background: var(--j-analyzer-bg);\n color: var(--j-analyzer-text);\n font-family: system-ui, sans-serif;\n padding: 12px;\n border-radius: var(--j-analyzer-radius);\n min-height: 0;\n }\n @media (max-width: 640px) {\n .j-analyzer {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr;\n }\n .j-analyzer-antes {\n flex-direction: row !important;\n overflow-x: auto;\n padding-bottom: 4px;\n }\n }\n .j-analyzer-antes {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .j-analyzer-ante-btn {\n background: var(--j-analyzer-panel);\n border: 1px solid var(--j-analyzer-border);\n color: var(--j-analyzer-text);\n border-radius: var(--j-analyzer-radius);\n padding: 8px 4px;\n cursor: pointer;\n font-size: 13px;\n text-align: center;\n }\n .j-analyzer-ante-btn:hover {\n border-color: var(--j-analyzer-accent);\n }\n .j-analyzer-ante-btn.active {\n background: var(--j-analyzer-accent);\n color: #1a1b26;\n border-color: var(--j-analyzer-accent);\n font-weight: 600;\n }\n .j-analyzer-main {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n }\n .j-analyzer-header {\n background: var(--j-analyzer-panel);\n border: 1px solid var(--j-analyzer-border);\n border-radius: var(--j-analyzer-radius);\n padding: 12px;\n }\n .j-analyzer-header h2 {\n margin: 0 0 6px;\n font-size: 16px;\n }\n .j-analyzer-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 13px;\n color: var(--j-analyzer-muted);\n }\n .j-analyzer-meta span strong {\n color: var(--j-analyzer-text);\n }\n .j-analyzer-section {\n background: var(--j-analyzer-panel);\n border: 1px solid var(--j-analyzer-border);\n border-radius: var(--j-analyzer-radius);\n padding: 12px;\n }\n .j-analyzer-section-title {\n margin: 0 0 10px;\n font-size: 13px;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--j-analyzer-accent);\n }\n .j-analyzer-blinds {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n }\n @media (max-width: 640px) {\n .j-analyzer-blinds {\n grid-template-columns: 1fr;\n }\n }\n .j-analyzer-blind {\n display: flex;\n align-items: center;\n gap: 10px;\n background: rgba(26, 27, 38, 0.5);\n border-radius: var(--j-analyzer-radius);\n padding: 8px;\n }\n .j-analyzer-blind-label {\n font-size: 12px;\n color: var(--j-analyzer-muted);\n min-width: 70px;\n }\n .j-analyzer-card-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n .j-analyzer-pack {\n margin-bottom: 12px;\n }\n .j-analyzer-pack:last-child {\n margin-bottom: 0;\n }\n .j-analyzer-pack-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 8px;\n }\n .j-analyzer-pack-name {\n font-size: 13px;\n font-weight: 600;\n }\n .j-analyzer-pack-count {\n font-size: 11px;\n background: var(--j-analyzer-accent);\n color: #1a1b26;\n padding: 2px 6px;\n border-radius: 999px;\n }\n .j-analyzer-unknown {\n width: 60px;\n height: 80px;\n display: grid;\n place-items: center;\n background: var(--j-analyzer-bg);\n border: 1px solid var(--j-analyzer-border);\n border-radius: var(--j-analyzer-radius);\n color: var(--j-analyzer-muted);\n font-size: 12px;\n }\n .j-analyzer-empty {\n padding: 24px;\n color: var(--j-analyzer-muted);\n }\n `}</style>\n\n <div className=\"j-analyzer-antes\">\n {anteNumbers.map((n) => (\n <button\n key={n}\n className={`j-analyzer-ante-btn ${n === selectedAnte ? \"active\" : \"\"}`}\n onClick={() => setSelectedAnte(n)}\n >\n Ante {n}\n </button>\n ))}\n </div>\n\n <div className=\"j-analyzer-main\">\n <div className=\"j-analyzer-header\">\n <h2>Seed: {result.seed}</h2>\n <div className=\"j-analyzer-meta\">\n <span>\n Score: <strong>{result.score}</strong>\n </span>\n {deck !== undefined && (\n <span>\n Deck: <strong>{deckDisplayName(deck)}</strong>\n </span>\n )}\n {stake !== undefined && (\n <span>\n Stake: <strong>{stakeDisplayName(stake)}</strong>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Blinds</h3>\n <div className=\"j-analyzer-blinds\">\n <div className=\"j-analyzer-blind\">\n <span className=\"j-analyzer-blind-label\">Small Blind</span>\n <JamlTag tagName={tagDisplayName(ante.smallBlindTag)} scale={0.75} />\n </div>\n <div className=\"j-analyzer-blind\">\n <span className=\"j-analyzer-blind-label\">Big Blind</span>\n <JamlTag tagName={tagDisplayName(ante.bigBlindTag)} scale={0.75} />\n </div>\n <div className=\"j-analyzer-blind\">\n <span className=\"j-analyzer-blind-label\">Boss Blind</span>\n <JamlBoss bossName={bossDisplayName(ante.boss)} scale={0.75} />\n </div>\n </div>\n </div>\n\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Voucher</h3>\n <div className=\"j-analyzer-card-row\">\n <JamlVoucher voucherName={voucherDisplayName(ante.voucher)} scale={0.9} />\n </div>\n </div>\n\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Shop</h3>\n <div className=\"j-analyzer-card-row\">\n {ante.shopItems.map((item, i) => (\n <ItemCard key={i} value={item.value} />\n ))}\n </div>\n </div>\n\n {ante.packs.length > 0 && (\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Packs</h3>\n {ante.packs.map((pack, i) => (\n <PackSection key={i} pack={pack} />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const DECK_SPRITE_POS: Record<string, { x: number; y: number }> = {\n red: { x: 0, y: 0 },\n nebula: { x: 3, y: 0 },\n locked: { x: 4, y: 0 },\n blue: { x: 0, y: 2 },\n yellow: { x: 1, y: 2 },\n green: { x: 2, y: 2 },\n black: { x: 3, y: 2 },\n plasma: { x: 4, y: 2 },\n ghost: { x: 6, y: 2 },\n magic: { x: 0, y: 3 },\n checkered: { x: 1, y: 3 },\n erratic: { x: 2, y: 3 },\n abandoned: { x: 3, y: 3 },\n painted: { x: 4, y: 3 },\n challenge: { x: 0, y: 4 },\n anaglyph: { x: 2, y: 4 },\n zodiac: { x: 3, y: 4 },\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const STAKE_SPRITE_POS: Record<string, { x: number; y: number }> = {\n white: { x: 1, y: 0 },\n red: { x: 2, y: 0 },\n green: { x: 3, y: 0 },\n blue: { x: 4, y: 0 },\n black: { x: 0, y: 1 },\n purple: { x: 1, y: 1 },\n orange: { x: 2, y: 1 },\n gold: { x: 3, y: 1 },\n}\n\nconst SPRITE_WIDTH = 142\nconst SPRITE_HEIGHT = 190\nconst DECK_COLS = 7\nconst DECK_ROWS = 5\nconst STICKER_COLS = 5\nconst STICKER_ROWS = 3\n\nexport interface DeckSpriteProps {\n /** Deck name — case-insensitive, \"Deck\" suffix tolerated (e.g. \"Erratic Deck\" → \"erratic\"). */\n deck: string\n /** Optional stake name to overlay its sticker on the deck. */\n stake?: string\n /** Rendered width in pixels. Height is scaled proportionally from the 142x190 sprite. */\n size?: number\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Balatro deck box sprite — optionally overlaid with a stake sticker.\n * Draws from the Enhancers.png atlas (deck thumbnails live in the bottom\n * two rows) and stickers.png for the stake band. Uses jaml-ui's\n * `resolveJamlAssetUrl` so consumers can override the asset base URL.\n */\nexport function DeckSprite({ deck, stake, size = 50, className = '', style }: DeckSpriteProps) {\n const deckKey = (deck || 'erratic').toLowerCase().replace(/\\s*deck$/, '').trim()\n const deckPos = DECK_SPRITE_POS[deckKey] ?? DECK_SPRITE_POS.erratic\n const stakePos = stake ? STAKE_SPRITE_POS[stake.toLowerCase().replace(/\\s*stake$/, '').trim()] : null\n\n const scale = size / SPRITE_WIDTH\n const displayHeight = SPRITE_HEIGHT * scale\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n width: size,\n height: displayHeight,\n ...style,\n }}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('enhancers')})`,\n backgroundSize: `${DECK_COLS * 100}% ${DECK_ROWS * 100}%`,\n backgroundPosition: `${(deckPos.x / (DECK_COLS - 1)) * 100}% ${(deckPos.y / (DECK_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n {stakePos ? (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('stickers')})`,\n backgroundSize: `${STICKER_COLS * 100}% ${STICKER_ROWS * 100}%`,\n backgroundPosition: `${(stakePos.x / (STICKER_COLS - 1)) * 100}% ${(stakePos.y / (STICKER_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n ) : null}\n </div>\n )\n}\n","// Single canonical form per value. No case tolerance, no abbreviations.\n// Value strings match the keys used by RANK_MAP / SUIT_MAP / ENHANCER_MAP /\n// SEAL_MAP / EDITION_MAP so no aliasing/normalization is needed at render time.\n\nexport const CardSuit = {\n Hearts: 'Hearts',\n Diamonds: 'Diamonds',\n Clubs: 'Clubs',\n Spades: 'Spades',\n} as const\nexport type CardSuit = typeof CardSuit[keyof typeof CardSuit]\n\nexport const CardRank = {\n Two: '2',\n Three: '3',\n Four: '4',\n Five: '5',\n Six: '6',\n Seven: '7',\n Eight: '8',\n Nine: '9',\n Ten: '10',\n Jack: 'Jack',\n Queen: 'Queen',\n King: 'King',\n Ace: 'Ace',\n} as const\nexport type CardRank = typeof CardRank[keyof typeof CardRank]\n\nexport const CardEnhancement = {\n Bonus: 'Bonus',\n Mult: 'Mult',\n Wild: 'Wild',\n Glass: 'Glass',\n Steel: 'Steel',\n Stone: 'Stone',\n Gold: 'Gold',\n Lucky: 'Lucky',\n} as const\nexport type CardEnhancement = typeof CardEnhancement[keyof typeof CardEnhancement]\n\nexport const CardSeal = {\n Gold: 'Gold',\n Red: 'Red',\n Blue: 'Blue',\n Purple: 'Purple',\n} as const\nexport type CardSeal = typeof CardSeal[keyof typeof CardSeal]\n\nexport const CardEdition = {\n Foil: 'Foil',\n Holographic: 'Holographic',\n Polychrome: 'Polychrome',\n Negative: 'Negative',\n} as const\nexport type CardEdition = typeof CardEdition[keyof typeof CardEdition]\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\nimport { RANK_MAP, SUIT_MAP, ENHANCER_MAP, SEAL_MAP, EDITION_MAP, type SpritePos } from '../sprites/spriteData.js'\nimport { CardEdition, type CardSuit, type CardRank, type CardEnhancement, type CardSeal } from './cardEnums.js'\n\n// ── Sprite geometry ────────────────────────────────────────────────────────\n\nconst CARD_WIDTH = 71\nconst CARD_HEIGHT = 95\n\ninterface StandardCardProps {\n suit?: CardSuit\n rank?: CardRank\n name?: string\n enhancement?: CardEnhancement\n seal?: CardSeal\n edition?: CardEdition\n className?: string\n size?: number\n style?: React.CSSProperties\n}\n\nfunction parseStandardcardName(name: string): { rank: CardRank; suit: CardSuit } | null {\n const match = /^(.*?)(?:\\s+of\\s+|\\s+)(.*?)$/i.exec(name.trim())\n if (!match) return null\n const rawRank = match[1].trim()\n const rawSuit = match[2].trim()\n const rank = (rawRank === 'A' ? 'Ace' : rawRank === 'K' ? 'King' : rawRank === 'Q' ? 'Queen' : rawRank === 'J' ? 'Jack' : rawRank) as CardRank\n const suit = rawSuit.charAt(0).toUpperCase() + rawSuit.slice(1).toLowerCase() as CardSuit\n return RANK_MAP[rank] !== undefined && SUIT_MAP[suit] !== undefined ? { rank, suit } : null\n}\n\nexport function StandardCard({\n suit,\n rank,\n name,\n enhancement,\n seal,\n edition,\n className,\n size = 71,\n style,\n}: StandardCardProps) {\n const parsed = !rank || !suit ? (name ? parseStandardcardName(name) : null) : null\n const finalRank = rank ?? parsed?.rank\n const finalSuit = suit ?? parsed?.suit\n const col = finalRank ? RANK_MAP[finalRank] : undefined\n const row = finalSuit ? SUIT_MAP[finalSuit] : undefined\n\n if (col === undefined || row === undefined) {\n console.warn(`Invalid card: ${finalRank} of ${finalSuit}`)\n return null\n }\n\n const scale = size / CARD_WIDTH\n const finalH = size * (CARD_HEIGHT / CARD_WIDTH)\n\n const bgX = -col * CARD_WIDTH\n const bgY = -row * CARD_HEIGHT\n\n // Cell (1,0) of the enhancer sheet is the plain blank card body — used as\n // the base layer behind every card so transparent regions of the deck face\n // sprite don't reveal whatever is behind. Cell (0,0) is a red-card sprite,\n // NOT a blank base — do not fall back to it.\n const PLAIN_BASE: SpritePos = { x: 1, y: 0 }\n const enhPos: SpritePos = enhancement ? ENHANCER_MAP[enhancement] ?? PLAIN_BASE : PLAIN_BASE\n const sealPos = seal ? SEAL_MAP[seal] ?? null : null\n const editionCol = edition ? EDITION_MAP[edition] : undefined\n\n const isNegative = edition === CardEdition.Negative\n const baseFilter = isNegative ? 'invert(0.94)' : 'none'\n\n const enhancersUrl = resolveJamlAssetUrl('enhancers')\n const deckUrl = resolveJamlAssetUrl('deck')\n const editionsUrl = resolveJamlAssetUrl('editions')\n\n const layerBase: React.CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: CARD_WIDTH,\n height: CARD_HEIGHT,\n transform: `scale(${scale})`,\n transformOrigin: 'top left',\n backgroundRepeat: 'no-repeat',\n }\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n display: 'inline-block',\n overflow: 'hidden',\n userSelect: 'none',\n width: size,\n height: finalH,\n imageRendering: 'pixelated',\n ...style,\n }}\n title={`${rank} of ${suit}${enhancement ? ` (${enhancement})` : ''}${seal ? ` [${seal} seal]` : ''}${edition ? ` {${edition}}` : ''}`}\n >\n {/* Card base — plain blank card body from cell (1,0) of the enhancer\n sheet, replaced by the mapped sprite when an enhancement is set. */}\n <div\n style={{\n ...layerBase,\n zIndex: 0,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-enhPos.x * CARD_WIDTH}px ${-enhPos.y * CARD_HEIGHT}px`,\n }}\n />\n\n {/* Card face */}\n <div\n style={{\n ...layerBase,\n zIndex: 1,\n backgroundImage: `url(${deckUrl})`,\n backgroundPosition: `${bgX}px ${bgY}px`,\n filter: baseFilter,\n }}\n />\n\n {/* Edition overlay */}\n {edition && edition !== CardEdition.Negative && editionCol !== undefined && (\n <div\n style={{\n ...layerBase,\n zIndex: 2,\n mixBlendMode: 'screen',\n opacity: 0.6,\n backgroundImage: `url(${editionsUrl})`,\n backgroundPosition: `${-editionCol * CARD_WIDTH}px 0px`,\n }}\n />\n )}\n\n {/* Seal overlay */}\n {sealPos && (\n <div\n style={{\n ...layerBase,\n zIndex: 3,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-sealPos.x * CARD_WIDTH}px ${-sealPos.y * CARD_HEIGHT}px`,\n }}\n />\n )}\n\n {/* Negative tint */}\n {isNegative && (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 4,\n background: 'rgba(239, 68, 68, 0.1)',\n mixBlendMode: 'overlay',\n pointerEvents: 'none',\n }}\n />\n )}\n </div>\n )\n}\n","import type React from \"react\";\nimport { type ReactNode, Fragment } from \"react\";\n\n/**\n * json-render — Zero-dependency JSON-to-React engine.\n *\n * A JsonNode is a plain JSON object describing a UI tree.\n * A Registry maps type names to React components.\n * render() walks the tree and returns React nodes.\n */\n\nexport interface JsonNode {\n type: string;\n props?: Record<string, unknown>;\n children?: JsonNode[];\n}\n\nexport type ComponentProps<P = Record<string, unknown>> = P & {\n children?: ReactNode;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Registry = Record<string, React.ComponentType<any>>;\n\n/**\n * Render a JsonNode tree using the provided Registry.\n *\n * Unknown types log a warning and render null (graceful degradation).\n * Each child gets a stable key from its index in the children array.\n */\nexport function render(node: JsonNode, registry: Registry): ReactNode {\n const Component = registry[node.type];\n\n if (!Component) {\n console.warn(`[json-render] Unknown type: \"${node.type}\"`);\n return null;\n }\n\n const children = node.children?.map((child, i) => (\n <Fragment key={i}>{render(child, registry)}</Fragment>\n ));\n\n return <Component {...(node.props ?? {})}>{children}</Component>;\n}\n\n/**\n * Render a list of JsonNode trees.\n */\nexport function renderList(\n nodes: JsonNode[],\n registry: Registry\n): ReactNode[] {\n return nodes.map((node, i) => (\n <Fragment key={i}>{render(node, registry)}</Fragment>\n ));\n}\n\n/**\n * Type-safe catalog builder.\n *\n * Just returns the catalog object as-is, but enforces types at compile time.\n * No runtime overhead. No zod. Just TypeScript.\n */\nexport function defineCatalog<C extends Record<string, { props?: object; description?: string }>>(\n catalog: C\n): C {\n return catalog;\n}\n","import { defineCatalog } from \"./engine\";\nimport type { BadgeTone } from \"./components/layout.js\";\n\n/**\n * Balatro Catalog — Component vocabulary for AI-generated UI.\n *\n * Type-safe at compile time. Zero runtime overhead.\n * The AI sees these names + descriptions + prop shapes.\n */\nexport const balatroCatalog = defineCatalog({\n // ── Layout ──\n Panel: {\n props: {} as {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n },\n description:\n \"A framed panel with optional title. Use for grouping related content.\",\n },\n Stack: {\n props: {} as {\n gap?: number; // default 12\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"; // default stretch\n className?: string;\n },\n description: \"Vertical stack with configurable gap. The default layout primitive.\",\n },\n Grid: {\n props: {} as {\n columns?: number; // 1-4, default 3\n gap?: number; // default 16\n className?: string;\n },\n description:\n \"Grid layout for cards and results. Responsive: 1 col mobile, 2 tablet, 3+ desktop.\",\n },\n Text: {\n props: {} as {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n },\n description: \"Styled text. Use variant for semantic color, not manual color.\",\n },\n Spacer: {\n props: {} as { size?: number },\n description: \"Vertical spacer. Use instead of empty divs with margin.\",\n },\n Divider: {\n props: {} as { className?: string },\n description: \"Horizontal divider line.\",\n },\n Badge: {\n props: {} as {\n label: string;\n tone?: \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n className?: string;\n },\n description: \"Small colored badge / pill.\",\n },\n\n // ── Status & Feedback ──\n SearchStats: {\n props: {} as {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n },\n description: \"Live search metrics panel. Shows seeds/sec, matches, status.\",\n },\n ErrorBanner: {\n props: {} as {\n message: string;\n onDismiss?: boolean; // if true, show X button\n },\n description: \"Error state banner. Dismissible if onDismiss is true.\",\n },\n LoadingPulse: {\n props: {} as { text?: string },\n description: \"Loading skeleton with optional text.\",\n },\n\n // ── Results ──\n SeedCard: {\n props: {} as {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // if true, seed is clickable\n },\n description:\n \"A seed result card. Shows seed code, score, jokers, highlights. Tap to expand.\",\n },\n SeedList: {\n props: {} as {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n },\n description: \"Paginated list of seed results. Use when results > 20.\",\n },\n JokerBadge: {\n props: {} as {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n },\n description: \"Small joker name pill with rarity color.\",\n },\n EditionBadge: {\n props: {} as {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n },\n description: \"Edition badge with appropriate color (blue, green, purple, red).\",\n },\n\n // ── Game Cards (via jaml-ui) ──\n JamlGameCard: {\n props: {} as {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n },\n description: \"Renders a real Balatro card using jaml-ui's sprite system.\",\n },\n\n // ── Mascot ──\n JammyMascot: {\n props: {} as {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: { label: string; action: string; tone?: BadgeTone }[];\n onMenuAction?: boolean; // if true, the mascot emits actions\n },\n description:\n \"Jammy — the whimsical seed-mascot. Tap to open an orbital menu of actions.\",\n },\n JammyOrbitalMenu: {\n props: {} as {\n items: { label: string; action: string; tone?: BadgeTone }[];\n radius?: number;\n },\n description: \"Radial menu orbiting a center point. Used by JammyMascot.\",\n },\n\n // ── Encyclopedia / Reference ──\n JokerCard: {\n props: {} as {\n name: string;\n showSynergies?: boolean;\n },\n description:\n \"Full joker info card: name, rarity, cost, effect, strategy, synergies. Queries the knowledge base.\",\n },\n SynergyCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Synergy guide card: jokers involved, setup steps, math breakdown, boss counters, difficulty rating.\",\n },\n BossBlindCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Boss blind info card: effect, category, threat level, counters, JAML filter string.\",\n },\n DeckCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Deck info card: effect, strategy, synergies, difficulty rating.\",\n },\n StakeCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Stake difficulty card: effect, strategy, difficulty rating.\",\n },\n StrategyAdvisor: {\n props: {} as {\n jokers: string[];\n },\n description:\n \"Takes a list of joker names and recommends strategies, warns about boss blinds, and suggests synergies.\",\n },\n});\n\nexport type BalatroCatalog = typeof balatroCatalog;\nexport type BalatroComponentName = keyof BalatroCatalog;\n\n/**\n * Extract the props type for a given catalog component.\n */\nexport type CatalogProps<K extends BalatroComponentName> =\n BalatroCatalog[K] extends { props: infer P } ? P : never;\n","import React from \"react\";\n\n/**\n * Layout primitives — Panel, Stack, Grid, Text, Spacer, Divider, Badge.\n *\n * All use CSS custom properties from jimbo-tokens.css.\n * No external classes. No BEM. Just inline styles + tokens.\n */\n\n/* ─── Panel ─── */\nexport interface PanelProps {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Panel: React.FC<PanelProps> = ({\n title,\n subtitle,\n variant = \"default\",\n className = \"\",\n children,\n}) => {\n const bg =\n variant === \"accent\"\n ? \"var(--j-dark-blue)\"\n : variant === \"muted\"\n ? \"var(--j-surface-inset)\"\n : \"var(--j-surface)\";\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: bg,\n padding: \"var(--j-space-4)\",\n boxShadow: \"var(--j-shadow)\",\n }}\n >\n {title && (\n <h3\n style={{\n color: \"var(--j-blue)\",\n fontSize: \"var(--j-text-lg)\",\n margin: \"0 0 var(--j-space-2) 0\",\n fontFamily: \"var(--j-font)\",\n }}\n >\n {title}\n </h3>\n )}\n {subtitle && (\n <p\n style={{\n color: \"var(--j-grey)\",\n fontSize: \"var(--j-text-sm)\",\n margin: \"0 0 var(--j-space-3) 0\",\n opacity: 0.8,\n }}\n >\n {subtitle}\n </p>\n )}\n {children}\n </div>\n );\n};\n\n/* ─── Stack ─── */\nexport interface StackProps {\n gap?: number;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Stack: React.FC<StackProps> = ({\n gap = 12,\n align = \"stretch\",\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap,\n alignItems: align,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Grid ─── */\nexport interface GridProps {\n columns?: number;\n gap?: number;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Grid: React.FC<GridProps> = ({\n columns = 3,\n gap = 16,\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Text ─── */\nexport interface TextProps {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n children?: React.ReactNode; // allows wrapping text in spans\n}\n\nexport const Text: React.FC<TextProps> = ({\n body,\n variant = \"body\",\n className = \"\",\n children,\n}) => {\n const colors: Record<string, string> = {\n title: \"var(--j-gold)\",\n body: \"var(--j-grey)\",\n muted: \"var(--j-dark-grey)\",\n accent: \"var(--j-blue)\",\n error: \"var(--j-red)\",\n };\n\n const sizes: Record<string, string> = {\n title: \"var(--j-text-xl)\",\n body: \"var(--j-text-md)\",\n muted: \"var(--j-text-sm)\",\n accent: \"var(--j-text-md)\",\n error: \"var(--j-text-sm)\",\n };\n\n return (\n <span\n className={className}\n style={{\n color: colors[variant] || colors.body,\n fontSize: sizes[variant] || sizes.body,\n fontFamily: \"var(--j-font)\",\n lineHeight: 1.4,\n }}\n >\n {body}\n {children}\n </span>\n );\n};\n\n/* ─── Spacer ─── */\nexport interface SpacerProps {\n size?: number;\n}\n\nexport const Spacer: React.FC<SpacerProps> = ({ size = 16 }) => {\n return <div style={{ height: size, width: \"100%\" }} />;\n};\n\n/* ─── Divider ─── */\nexport interface DividerProps {\n className?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({ className = \"\" }) => {\n return (\n <div\n className={className}\n style={{\n height: 2,\n background: \"var(--j-panel-edge)\",\n width: \"100%\",\n margin: \"var(--j-space-3) 0\",\n }}\n />\n );\n};\n\n/* ─── Badge ─── */\nexport type BadgeTone = \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n\nexport interface BadgeProps {\n label: string;\n tone?: BadgeTone;\n className?: string;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n tone = \"grey\",\n className = \"\",\n}) => {\n const toneMap: Record<string, { bg: string; color: string }> = {\n red: { bg: \"var(--j-dark-red)\", color: \"var(--j-red)\" },\n blue: { bg: \"var(--j-dark-blue)\", color: \"var(--j-blue)\" },\n green: { bg: \"var(--j-dark-green)\", color: \"var(--j-green)\" },\n orange: { bg: \"var(--j-dark-orange)\", color: \"var(--j-orange)\" },\n gold: { bg: \"var(--j-dark-orange)\", color: \"var(--j-gold)\" },\n purple: { bg: \"var(--j-dark-purple)\", color: \"var(--j-purple)\" },\n grey: { bg: \"var(--j-surface-inset)\", color: \"var(--j-grey)\" },\n };\n\n const t = toneMap[tone] || toneMap.grey;\n\n return (\n <span\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 10px\",\n borderRadius: 999,\n background: t.bg,\n color: t.color,\n fontSize: \"var(--j-text-xs)\",\n fontFamily: \"var(--j-font)\",\n fontWeight: 700,\n letterSpacing: \"0.5px\",\n textTransform: \"uppercase\" as const,\n }}\n >\n {label}\n </span>\n );\n};\n","import { type FC, useState } from \"react\";\nimport { Panel, Stack, Text, Badge, type BadgeTone } from \"./layout.js\";\n\n/**\n * Domain components — SearchStats, ErrorBanner, LoadingPulse, SeedCard, etc.\n *\n * These are Balatro-specific UI components used by the json-render system.\n * All use CSS tokens and the layout primitives above.\n */\n\n/* ─── SearchStats ─── */\nexport interface SearchStatsProps {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n className?: string;\n}\n\nexport const SearchStats: FC<SearchStatsProps> = ({\n status,\n seedsSearched,\n matchesFound,\n seedsPerSecond,\n elapsed,\n className = \"\",\n}) => {\n const statusColor =\n status === \"running\"\n ? \"var(--j-blue)\"\n : status === \"completed\"\n ? \"var(--j-green)\"\n : status === \"error\"\n ? \"var(--j-red)\"\n : \"var(--j-grey)\";\n\n const statusLabel =\n status === \"idle\"\n ? \"Ready\"\n : status === \"running\"\n ? \"Searching...\"\n : status === \"completed\"\n ? \"Done\"\n : \"Error\";\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}\n >\n <div\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: statusColor,\n boxShadow: `0 0 8px ${statusColor}`,\n }}\n />\n <Text body={statusLabel} variant=\"accent\" />\n {status === \"running\" && (\n <span\n style={{\n animation: \"pulse 1.5s infinite\",\n color: \"var(--j-blue)\",\n }}\n >\n ...\n </span>\n )}\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(120px, 1fr))\",\n gap: 12,\n }}\n >\n {seedsSearched !== undefined && (\n <div>\n <Text body=\"Searched\" variant=\"muted\" />\n <Text body={seedsSearched} variant=\"title\" />\n </div>\n )}\n {matchesFound !== undefined && (\n <div>\n <Text body=\"Matches\" variant=\"muted\" />\n <Text body={String(matchesFound)} variant=\"title\" />\n </div>\n )}\n {seedsPerSecond !== undefined && (\n <div>\n <Text body=\"Speed\" variant=\"muted\" />\n <Text body={`${seedsPerSecond.toLocaleString()}/s`} variant=\"title\" />\n </div>\n )}\n {elapsed && (\n <div>\n <Text body=\"Time\" variant=\"muted\" />\n <Text body={elapsed} variant=\"title\" />\n </div>\n )}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── ErrorBanner ─── */\nexport interface ErrorBannerProps {\n message: string;\n onDismiss?: boolean;\n className?: string;\n}\n\nexport const ErrorBanner: FC<ErrorBannerProps> = ({\n message,\n onDismiss,\n className = \"\",\n}) => {\n const [dismissed, setDismissed] = useState(false);\n if (dismissed) return null;\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-red)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-dark-red)\",\n padding: \"var(--j-space-3) var(--j-space-4)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span style={{ color: \"var(--j-red)\", fontSize: \"var(--j-text-lg)\" }}>⚠</span>\n <Text body={message} variant=\"error\" />\n </div>\n {onDismiss && (\n <button\n onClick={() => setDismissed(true)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"var(--j-red)\",\n cursor: \"pointer\",\n fontSize: \"var(--j-text-lg)\",\n padding: 0,\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\n/* ─── LoadingPulse ─── */\nexport interface LoadingPulseProps {\n text?: string;\n className?: string;\n}\n\nexport const LoadingPulse: FC<LoadingPulseProps> = ({\n text = \"Loading...\",\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n padding: \"var(--j-space-5)\",\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n background: \"var(--j-blue)\",\n animation: \"pulse 1.5s infinite\",\n boxShadow: \"0 0 12px var(--j-blue)\",\n }}\n />\n <Text body={text} variant=\"muted\" />\n </div>\n );\n};\n\n/* ─── SeedCard ─── */\nexport interface SeedCardProps {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // semantic: card is interactive\n className?: string;\n}\n\nexport const SeedCard: FC<SeedCardProps> = ({\n seed,\n score,\n rank,\n highlights,\n jokers,\n edition,\n onClick,\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n onClick={onClick ? () => navigator.clipboard?.writeText(seed) : undefined}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-surface-inset)\",\n padding: \"var(--j-space-3)\",\n cursor: onClick ? \"pointer\" : \"default\",\n transition: \"var(--j-transition)\",\n position: \"relative\",\n }}\n onMouseEnter={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-blue)\";\n e.currentTarget.style.transform = \"translateY(-2px)\";\n e.currentTarget.style.boxShadow = \"var(--j-shadow)\";\n }\n }}\n onMouseLeave={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-panel-edge)\";\n e.currentTarget.style.transform = \"translateY(0)\";\n e.currentTarget.style.boxShadow = \"none\";\n }\n }}\n >\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {rank !== undefined && (\n <span\n style={{\n color: \"var(--j-gold)\",\n fontSize: \"var(--j-text-sm)\",\n fontWeight: 700,\n minWidth: 24,\n }}\n >\n #{rank}\n </span>\n )}\n <Text body={seed} variant=\"accent\" />\n </div>\n {score !== undefined && (\n <Badge label={String(score)} tone=\"gold\" />\n )}\n </div>\n\n {edition && <Badge label={edition} tone=\"purple\" />}\n\n {highlights && highlights.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {highlights.map((h, i) => (\n <Badge key={i} label={h} tone=\"green\" />\n ))}\n </div>\n )}\n\n {jokers && jokers.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {jokers.map((j, i) => (\n <Badge key={i} label={j} tone=\"blue\" />\n ))}\n </div>\n )}\n </Stack>\n </div>\n );\n};\n\n/* ─── SeedList ─── */\nexport interface SeedListProps {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n className?: string;\n}\n\nexport const SeedList: FC<SeedListProps> = ({\n seeds,\n scores,\n total,\n pageSize = 20,\n className = \"\",\n}) => {\n const [page, setPage] = useState(0);\n const maxPage = Math.ceil((total ?? seeds.length) / pageSize) - 1;\n const start = page * pageSize;\n const visible = seeds.slice(start, start + pageSize);\n\n return (\n <Stack gap={12} className={className}>\n {visible.map((seed, i) => (\n <SeedCard\n key={seed}\n seed={seed}\n score={scores?.[start + i]}\n rank={start + i + 1}\n onClick={true}\n />\n ))}\n\n {maxPage > 0 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 12,\n alignItems: \"center\",\n padding: \"var(--j-space-3) 0\",\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage((p) => p - 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: page <= 0 ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n ← Prev\n </button>\n <Text\n body={`${page + 1} / ${maxPage + 1}`}\n variant=\"muted\"\n />\n <button\n disabled={page >= maxPage}\n onClick={() => setPage((p) => p + 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page >= maxPage ? \"not-allowed\" : \"pointer\",\n opacity: page >= maxPage ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n Next →\n </button>\n </div>\n )}\n </Stack>\n );\n};\n\n/* ─── JokerBadge ─── */\nexport interface JokerBadgeProps {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n className?: string;\n}\n\nexport const JokerBadge: FC<JokerBadgeProps> = ({\n name,\n edition,\n rarity,\n className = \"\",\n}) => {\n const rarityTone: Record<string, string> = {\n Common: \"grey\",\n Uncommon: \"green\",\n Rare: \"red\",\n Legendary: \"gold\",\n };\n\n const editionTone: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return (\n <div className={className} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <Badge label={name} tone={(rarityTone[rarity ?? \"\"] as BadgeTone) || \"grey\"} />\n {edition && (\n <Badge label={edition} tone={(editionTone[edition] as BadgeTone) || \"grey\"} />\n )}\n </div>\n );\n};\n\n/* ─── EditionBadge ─── */\nexport interface EditionBadgeProps {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n className?: string;\n}\n\nexport const EditionBadge: FC<EditionBadgeProps> = ({\n edition,\n className = \"\",\n}) => {\n const map: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return <Badge className={className} label={edition} tone={(map[edition] as BadgeTone) || \"grey\"} />;\n};\n","import type { FC } from \"react\";\nimport {\n JamlGameCard as JamlGameCardImpl,\n type JamlGameCardProps as ImplJamlGameCardProps,\n} from \"../../components/GameCard.js\";\n\n/**\n * Game Card wrapper — bridges json-render to jaml-ui's sprite system.\n */\n\nexport interface JamlGameCardProps {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n className?: string;\n}\n\nexport const JamlGameCard: FC<JamlGameCardProps> = ({\n type,\n card,\n className = \"\",\n}) => {\n return (\n <JamlGameCardImpl\n type={type}\n card={card as ImplJamlGameCardProps[\"card\"]}\n className={className}\n />\n );\n};\n","import { type FC, useState } from \"react\";\nimport { JamlGameCard } from \"./game.js\";\nimport { Badge, type BadgeTone } from \"./layout.js\";\n\nexport interface JammyOrbitalMenuItem {\n label: string;\n action: string;\n tone?: BadgeTone;\n}\n\nexport interface JammyOrbitalMenuProps {\n items: JammyOrbitalMenuItem[];\n onAction?: (action: string) => void;\n radius?: number;\n className?: string;\n}\n\nexport const JammyOrbitalMenu: FC<JammyOrbitalMenuProps> = ({\n items,\n onAction,\n radius = 90,\n className = \"\",\n}) => {\n if (items.length === 0) return null;\n\n const step = (2 * Math.PI) / items.length;\n const start = -Math.PI / 2; // top\n\n return (\n <div\n className={className}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n }}\n >\n {items.map((item, i) => {\n const angle = start + i * step;\n const x = Math.cos(angle) * radius;\n const y = Math.sin(angle) * radius;\n return (\n <button\n key={item.action + i}\n onClick={() => onAction?.(item.action)}\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n transform: `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`,\n pointerEvents: \"auto\",\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n }}\n >\n <Badge label={item.label} tone={item.tone ?? \"blue\"} />\n </button>\n );\n })}\n </div>\n );\n};\n\nexport interface JammyMascotProps {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: JammyOrbitalMenuItem[];\n onMenuAction?: (action: string) => void;\n className?: string;\n}\n\nexport const JammyMascot: FC<JammyMascotProps> = ({\n mood = \"idle\",\n size = 96,\n menuItems,\n onMenuAction,\n className = \"\",\n}) => {\n const [open, setOpen] = useState(false);\n\n const handleClick = () => {\n if (menuItems && menuItems.length > 0) {\n setOpen((v) => !v);\n }\n };\n\n const animation =\n mood === \"happy\"\n ? \"jammy-bounce\"\n : mood === \"surprised\"\n ? \"jammy-shake\"\n : \"jammy-idle\";\n\n return (\n <div\n className={`${className} ${animation}`.trim()}\n style={{\n position: \"relative\",\n width: size,\n height: size,\n display: \"inline-block\",\n }}\n >\n <button\n onClick={handleClick}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: menuItems && menuItems.length > 0 ? \"pointer\" : \"default\",\n width: size,\n height: size,\n }}\n aria-label=\"Jammy mascot\"\n >\n <JamlGameCard\n type=\"joker\"\n card={{ name: \"Blueprint\", scale: size / 71 }}\n />\n </button>\n {open && menuItems && (\n <JammyOrbitalMenu\n items={menuItems}\n onAction={(action) => {\n onMenuAction?.(action);\n setOpen(false);\n }}\n radius={size * 0.9}\n />\n )}\n </div>\n );\n};\n","/**\n * Balatro Joker Knowledge Base\n * Extracted from the Master Encyclopedia for json-render reference components.\n */\n\nexport type JokerRarity = \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\nexport type JokerCategory = \"Copy\" | \"X-Mult\" | \"Flat\" | \"Economy\" | \"Retrigger\" | \"Utility\";\n\nexport interface JokerInfo {\n name: string;\n rarity: JokerRarity;\n cost: number;\n effect: string;\n category: JokerCategory;\n synergies: string[];\n strategy: string;\n jamlKey: string;\n}\n\nexport const JOKERS: Record<string, JokerInfo> = {\n // ── S-Tier: Copy & Retrigger ──\n Blueprint: {\n name: \"Blueprint\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the Joker card directly to its right.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Brainstorm\"],\n strategy: \"Place to the right of your highest-value joker. Works with any joker ability.\",\n jamlKey: \"joker: Blueprint\",\n },\n Brainstorm: {\n name: \"Brainstorm\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the leftmost Joker currently held.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Blueprint\"],\n strategy: \"Place your highest-value joker in the leftmost slot for maximum value.\",\n jamlKey: \"joker: Brainstorm\",\n },\n \"Sock & Buskin\": {\n name: \"Sock & Buskin\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played Face Cards exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Hanging Chad\", \"Triboulet\", \"Baron\"],\n strategy: \"Essential for face-card builds. Doubles all face card triggers.\",\n jamlKey: \"joker: Sock & Buskin\",\n },\n \"Hanging Chad\": {\n name: \"Hanging Chad\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Retriggers the first played card scored in a hand exactly 2 additional times.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Glass Card\", \"Red Seal\", \"Bloodstone\"],\n strategy: \"Place your highest-value card in the leftmost scoring position.\",\n jamlKey: \"joker: Hanging Chad\",\n },\n Hack: {\n name: \"Hack\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played 2s, 3s, 4s, and 5s exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Wee Joker\", \"Ride the Bus\", \"Steel Card\"],\n strategy: \"Build a low-card deck. Each 2-5 retriggers for extra scoring.\",\n jamlKey: \"joker: Hack\",\n },\n Mime: {\n name: \"Mime\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all card held-in-hand abilities (Steel, Gold, Baron, Baron).\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Steel Card\", \"Gold Card\", \"Blueprint\"],\n strategy: \"The cornerstone of exponential scaling. Hold Steel Kings for (1.5)^4 per card.\",\n jamlKey: \"joker: Mime\",\n },\n Dusk: {\n name: \"Dusk\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played cards scored in the final hand of any round.\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Triboulet\", \"Bloodstone\", \"The Idol\"],\n strategy: \"Save your best hand for last. All cards in final hand retrigger.\",\n jamlKey: \"joker: Dusk\",\n },\n\n // ── X-Mult Jokers ──\n Baron: {\n name: \"Baron\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Each King held in hand grants X1.5 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Mime\", \"Steel Card\", \"Blueprint\", \"Brainstorm\", \"Sock & Buskin\"],\n strategy: \"Hold as many Steel Kings as possible. With Mime: (1.5)^4 per King. 8 Kings = 431,439x.\",\n jamlKey: \"joker: Baron\",\n },\n Triboulet: {\n name: \"Triboulet\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Each King and Queen played and scored grants X2 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Sock & Buskin\", \"Dusk\", \"Red Seal\", \"Blueprint\"],\n strategy: \"Play face-card heavy hands. Each King/Queen is a 2x multiplier.\",\n jamlKey: \"joker: Triboulet\",\n },\n \"The Idol\": {\n name: \"The Idol\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X2 Mult for each card scored matching a random Rank+Suit (changes every round).\",\n category: \"X-Mult\",\n synergies: [\"Ouija\", \"Sigil\", \"Death\"],\n strategy: \"Homogenize your deck to match the Idol's target. Use Ouija/Sigil to force match.\",\n jamlKey: \"joker: The Idol\",\n },\n Bloodstone: {\n name: \"Bloodstone\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"1 in 2 chance for played Heart cards to grant X1.5 Mult when scored.\",\n category: \"X-Mult\",\n synergies: [\"Oops! All 6s\", \"The Sun\", \"Hearts suit builds\"],\n strategy: \"Convert deck to Hearts. With Oops! All 6s: 100% proc rate.\",\n jamlKey: \"joker: Bloodstone\",\n },\n Vampire: {\n name: \"Vampire\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Permanently gains X0.2 Mult for each enhanced card scored, stripping the enhancement.\",\n category: \"X-Mult\",\n synergies: [\"Midas Mask\", \"Gold Card\", \"Aura\"],\n strategy: \"Score Gold cards every round. Midas Mask paints them, Vampire consumes them for +X0.2 each.\",\n jamlKey: \"joker: Vampire\",\n },\n Hologram: {\n name: \"Hologram\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.25 Mult every time a playing card is permanently added to the deck.\",\n category: \"X-Mult\",\n synergies: [\"Cryptid\", \"Holographic\", \"DNA\"],\n strategy: \"Add cards to deck via Cryptid or packs. Each addition is a permanent 0.25x multiplier.\",\n jamlKey: \"joker: Hologram\",\n },\n Constellation: {\n name: \"Constellation\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.1 Mult every time a Planet card is used.\",\n category: \"X-Mult\",\n synergies: [\"Observatory\", \"Perkeo\", \"Planet Merchant\"],\n strategy: \"Use planets every round. Stack with Observatory for planet duplication.\",\n jamlKey: \"joker: Constellation\",\n },\n Cavendish: {\n name: \"Cavendish\",\n rarity: \"Common\",\n cost: 4,\n effect: \"X3 Mult. 1 in 1000 chance to self-destruct.\",\n category: \"X-Mult\",\n synergies: [\"Eternal\", \"Blueprint\"],\n strategy: \"High-risk, high-reward. Get Eternal edition to prevent destruction. Copy with Blueprint.\",\n jamlKey: \"joker: Cavendish\",\n },\n\n // ── Flat Mult / Chip Scaling ──\n Stuntman: {\n name: \"Stuntman\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"+250 Chips, but permanently reduces hand size by 2.\",\n category: \"Flat\",\n synergies: [\"Plasma Deck\", \"Paint Brush\", \"Palette\"],\n strategy: \"On Plasma Deck: (Chips+Mult)/2 scoring makes flat chips incredibly valuable.\",\n jamlKey: \"joker: Stuntman\",\n },\n Bull: {\n name: \"Bull\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+2 Chips for every $1 currently held.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bootstraps\"],\n strategy: \"Hoard cash. With $1000, Bull gives +2000 Chips. Stack with interest vouchers.\",\n jamlKey: \"joker: Bull\",\n },\n Bootstraps: {\n name: \"Bootstraps\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+4 Mult for every $5 held in capital.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bull\"],\n strategy: \"Economic scaling. With $1000, Bootstraps gives +800 Mult.\",\n jamlKey: \"joker: Bootstraps\",\n },\n \"Wee Joker\": {\n name: \"Wee Joker\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Starts at +10 Chips. Gains +8 Chips every time a 2 is scored.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Cryptid\"],\n strategy: \"Score 2s every round. With Hack, each 2 triggers twice for +16 Chips.\",\n jamlKey: \"joker: Wee Joker\",\n },\n \"Joker Stencil\": {\n name: \"Joker Stencil\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X1 Mult for each empty Joker slot (counts itself as empty).\",\n category: \"Flat\",\n synergies: [\"Blank\", \"Antimatter\", \"Ectoplasm\"],\n strategy: \"Deliberately leave joker slots empty. With Antimatter voucher: +1 slot, +1x multiplier.\",\n jamlKey: \"joker: Joker Stencil\",\n },\n \"Green Joker\": {\n name: \"Green Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per hand played, +12 Chips per discard remaining. Loses 1 Mult per discard used.\",\n category: \"Flat\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Save discards. With Recyclomancy (+2 discards), start each round with +24 Chips.\",\n jamlKey: \"joker: Green Joker\",\n },\n \"Ride the Bus\": {\n name: \"Ride the Bus\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per consecutive hand played without scoring a Face Card. Resets to 0 on Face Card.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Steel Card\"],\n strategy: \"Avoid face cards. Build a low-card deck with Hack for retriggered 2s-5s.\",\n jamlKey: \"joker: Ride the Bus\",\n },\n\n // ── Economy ──\n \"Golden Joker\": {\n name: \"Golden Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Earn $4 at end of round.\",\n category: \"Economy\",\n synergies: [\"Bull\", \"Bootstraps\", \"Money Tree\", \"Seed Money\"],\n strategy: \"Stack multiple copies for massive per-round income. $4 per copy, per round.\",\n jamlKey: \"joker: Golden Joker\",\n },\n \"Matador\": {\n name: \"Matador\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $8 if played hand triggers the Boss Blind's ability.\",\n category: \"Economy\",\n synergies: [\"The Ox\", \"The Tooth\", \"The Arm\"],\n strategy: \"Intentionally trigger boss abilities for $8 payouts. High-risk, high-reward economy.\",\n jamlKey: \"joker: Matador\",\n },\n \"To the Moon\": {\n name: \"To the Moon\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $1 extra interest for every $5 held at end of round.\",\n category: \"Economy\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\"],\n strategy: \"Maximize interest cap. With Money Tree ($20 cap), hold $100+ for maximum returns.\",\n jamlKey: \"joker: To the Moon\",\n },\n\n // ── Legendary Jokers (Soul-exclusive) ──\n Canio: {\n name: \"Canio\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"When a played Face Card is destroyed, gains X1 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Glass Card\", \"Justice\", \"Hologram\"],\n strategy: \"Play and destroy Glass face cards. Each destruction is a permanent 1x multiplier.\",\n jamlKey: \"joker: Canio\",\n },\n Perkeo: {\n name: \"Perkeo\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"At end of shop, duplicates 1 random held consumable with Negative edition.\",\n category: \"Utility\",\n synergies: [\"Observatory\", \"Pluto\", \"Crystal Ball\", \"Omen Globe\"],\n strategy: \"The infinite engine. Hold 1 Pluto, get 2 Plutos next round. Stack to 100+ Negative Plutos.\",\n jamlKey: \"joker: Perkeo\",\n },\n Chicot: {\n name: \"Chicot\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Disables the effect of the current Boss Blind.\",\n category: \"Utility\",\n synergies: [\"The Manacle\", \"Blueprint\", \"Brainstorm\"],\n strategy: \"Essential for survival against counter bosses. Copy with Blueprint for permanent boss nullification.\",\n jamlKey: \"joker: Chicot\",\n },\n Yorick: {\n name: \"Yorick\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Gains X1 Mult every 5 discards used.\",\n category: \"X-Mult\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Use discards aggressively. With Recyclomancy (+2 discards), scale faster.\",\n jamlKey: \"joker: Yorick\",\n },\n};\n\n/** Get joker info by name. Returns undefined if not found. */\nexport function getJoker(name: string): JokerInfo | undefined {\n return JOKERS[name] ?? Object.values(JOKERS).find((j) => j.name === name);\n}\n\n/** Get all jokers in a category. */\nexport function getJokersByCategory(category: JokerCategory): JokerInfo[] {\n return Object.values(JOKERS).filter((j) => j.category === category);\n}\n\n/** Get jokers that synergize with a given joker. */\nexport function getSynergies(jokerName: string): JokerInfo[] {\n const joker = getJoker(jokerName);\n if (!joker) return [];\n return joker.synergies\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n}\n","/**\n * Balatro Synergy Knowledge Base\n * Meta combinations and their mathematical breakdowns.\n */\n\nexport interface SynergyInfo {\n name: string;\n jokers: string[];\n description: string;\n math: string;\n setup: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Legendary\";\n bossCounters: string[];\n tags: string[];\n}\n\nexport const SYNERGIES: SynergyInfo[] = [\n {\n name: \"Baron + Mime Exponential Loop\",\n jokers: [\"Baron\", \"Mime\"],\n description:\n \"The ultimate mathematical engine. Hold Steel Kings in hand. Each King grants X1.5 from Steel and X1.5 from Baron. Mime retriggers both.\",\n math: \"1 Steel King = (1.5)^4 = X5.06. 8 Kings = (1.5)^32 = X431,439. With Blueprint/Brainstorm: exponents in thousands.\",\n setup: [\n \"Find Baron and Mime\",\n \"Get The Chariot (Steel) or find Steel-enhanced Kings\",\n \"Hold as many Steel Kings as possible in hand\",\n \"Copy with Blueprint or Brainstorm for additional multipliers\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Manacle\", \"The Psychic\"],\n tags: [\"endless\", \"steel\", \"x-mult\", \"s-tier\"],\n },\n {\n name: \"Photochad Retrigger\",\n jokers: [\"Photograph\", \"Hanging Chad\"],\n description:\n \"Cheap, efficient early-game burst. Photograph gives X2 on first face card. Hanging Chad retriggers that card 2 more times.\",\n math: \"X2 × X2 × X2 = X8 Mult on first face card. With Glass: 8 × 2 = X16. With Red Seal: X32.\",\n setup: [\n \"Get Photograph (Common) and Hanging Chad (Common)\",\n \"Place face card in leftmost scoring position\",\n \"Enhance face card to Glass for additional X2\",\n \"Add Red Seal for another retrigger\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"early-game\", \"burst\", \"cheap\", \"face-cards\"],\n },\n {\n name: \"Observatory Infinite (Perkeo Stack)\",\n jokers: [\"Perkeo\"],\n description:\n \"Perkeo duplicates 1 held consumable at end of shop with Negative edition. Stack Negative Plutos for infinite X1.5 multipliers.\",\n math: \"10 Negative Plutos = (1.5)^10 = X57.66. 100 Plutos = (1.5)^100 ≈ X400 billion. Requires Observatory voucher.\",\n setup: [\n \"Get Perkeo (Legendary)\",\n \"Buy Observatory voucher (Telescope → Observatory)\",\n \"Hold exactly 1 Pluto planet card\",\n \"Perkeo duplicates it every round\",\n \"Play High Card as your dominant hand type\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Ox\", \"The Flint\"],\n tags: [\"endless\", \"consumable\", \"x-mult\", \"legendary\"],\n },\n {\n name: \"Vampire + Midas Mask Economy\",\n jokers: [\"Vampire\", \"Midas Mask\"],\n description:\n \"Midas Mask paints played Face Cards Gold. Vampire consumes the Gold enhancement for +X0.2 Mult permanently. Cards remain for repainting.\",\n math: \"5 Face Cards per round = +X1.0 Mult per round. Sustainable infinite scaling.\",\n setup: [\n \"Get Vampire (Uncommon) and Midas Mask (Uncommon)\",\n \"Play hands with Face Cards every round\",\n \"Midas paints them Gold, Vampire consumes for scaling\",\n \"Cards stay in deck for next round's painting\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Plant\", \"The Ox\"],\n tags: [\"economy\", \"sustainable\", \"x-mult\", \"mid-game\"],\n },\n {\n name: \"Bull + Bootstraps Economic Scaling\",\n jokers: [\"Bull\", \"Bootstraps\"],\n description:\n \"Bull gives +2 Chips per $1 held. Bootstraps gives +4 Mult per $5 held. Both scale with cash hoarding.\",\n math: \"$1000: Bull = +2000 Chips, Bootstraps = +800 Mult. Stack with interest vouchers for $20+ per round.\",\n setup: [\n \"Get Bull and Bootstraps (both Uncommon)\",\n \"Buy Seed Money → Money Tree vouchers ($20 interest cap)\",\n \"Hoard cash, never spend unless necessary\",\n \"Add Golden Joker for +$4 per round per copy\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Ox\", \"The Tooth\"],\n tags: [\"economy\", \"flat\", \"chips\", \"mult\", \"easy\"],\n },\n {\n name: \"Plasma Deck + Stuntman\",\n jokers: [\"Stuntman\"],\n description:\n \"Plasma Deck scores by ((Chips + Mult) / 2)^2. Flat chip additions become exponentially powerful. Stuntman gives +250 Chips.\",\n math: \"Stuntman alone: base 250 chips. With 50 mult: ((250+50)/2)^2 = 22,500. With 100 mult: ((250+100)/2)^2 = 30,625.\",\n setup: [\n \"Select Plasma Deck\",\n \"Get Stuntman (Rare) as early as possible\",\n \"Add any flat mult (Bootstraps, Green Joker)\",\n \"Avoid X-Mult jokers (wasted on Plasma's formula)\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Flint\", \"The Wall\"],\n tags: [\"plasma\", \"chips\", \"exponential\", \"deck-specific\"],\n },\n {\n name: \"Chicot + Manacle Hand Size Exploit\",\n jokers: [\"Chicot\"],\n description:\n \"Multiple Chicots (cloned via Ankh/Blueprint) vs The Manacle Boss. Each Chicot applies +1 Hand Size instead of just nullifying.\",\n math: \"5 Chicots vs Manacle: +5 permanent hand size. 10 Chicots: +10 hand size.\",\n setup: [\n \"Get Chicot (Legendary)\",\n \"Clone with Ankh or Blueprint\",\n \"Fight The Manacle Boss Blind\",\n \"Each Chicot triggers +1 Hand Size independently\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Manacle\"], // this is the boss you WANT to fight\n tags: [\"exploit\", \"hand-size\", \"legendary\", \"niche\"],\n },\n {\n name: \"Canio Glass Destruction Loop\",\n jokers: [\"Canio\"],\n description:\n \"Canio gains X1 Mult when a played Face Card is destroyed. Glass cards destroy themselves 1 in 4 times when scored.\",\n math: \"Each Glass face card destruction: +X1 Mult. With 20 destroyed face cards: X20 Mult. With Oops! All 6s: destruction rate increases.\",\n setup: [\n \"Get Canio (Legendary)\",\n \"Enhance face cards to Glass (Justice tarot)\",\n \"Play and destroy Glass face cards repeatedly\",\n \"Add Oops! All 6s for higher destruction rate\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"destruction\", \"x-mult\", \"legendary\", \"face-cards\"],\n },\n];\n\n/** Find synergies that involve a specific joker. */\nexport function findSynergies(jokerName: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => j.toLowerCase() === jokerName.toLowerCase())\n );\n}\n\n/** Find synergies by tag. */\nexport function findSynergiesByTag(tag: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.tags.some((t) => t.toLowerCase() === tag.toLowerCase())\n );\n}\n\n/** Get recommended synergies for a set of jokers. */\nexport function getRecommendedSynergies(\n jokerNames: string[]\n): SynergyInfo[] {\n const normalized = jokerNames.map((n) => n.toLowerCase());\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => normalized.includes(j.toLowerCase()))\n ).sort((a, b) => {\n const aMatches = a.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n const bMatches = b.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n return bMatches - aMatches; // most matches first\n });\n}\n","/**\n * Balatro Deck & Stake Knowledge Base\n */\n\nexport interface DeckInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n synergies: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\";\n}\n\nexport const DECKS: Record<string, DeckInfo> = {\n Red: {\n name: \"Red Deck\",\n jamlKey: \"Red\",\n effect: \"Grants +1 Discard per round.\",\n strategy:\n \"Excellent baseline for high-consistency discard strategies. Amplifies Hit the Road, Yorick, and Castle.\",\n synergies: [\"Yorick\", \"Hit the Road\", \"Castle\", \"Green Joker\"],\n difficulty: \"Easy\",\n },\n Blue: {\n name: \"Blue Deck\",\n jamlKey: \"Blue\",\n effect: \"Grants +1 Hand per round.\",\n strategy:\n \"Provides stable scoring buffer. Ideal for hands that require deep cycling but need a final play.\",\n synergies: [\"Grabber\", \"Nacho Tong\", \"Dusk\"],\n difficulty: \"Easy\",\n },\n Yellow: {\n name: \"Yellow Deck\",\n jamlKey: \"Yellow\",\n effect: \"Starts with +$10 (total $14 instead of $4).\",\n strategy:\n \"Drastically reduces time to hit $25 interest cap. Highly synergistic with early economic scaling jokers.\",\n synergies: [\"Golden Joker\", \"Bootstraps\", \"Bull\", \"To the Moon\"],\n difficulty: \"Easy\",\n },\n Green: {\n name: \"Green Deck\",\n jamlKey: \"Green\",\n effect:\n \"Interest disabled. Earns $2 per played hand remaining and $1 per discard remaining at end of round.\",\n strategy:\n \"Inverts economic model. Minimize played hands and save discards for maximum payout. Prioritize flat-scoring jokers.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Black: {\n name: \"Black Deck\",\n jamlKey: \"Black\",\n effect: \"Grants +1 Joker slot, but reduces played hands by 1.\",\n strategy:\n \"High-ceiling, high-risk. Early game is extremely punishing. Look for immediate flat chip/mult support to survive Ante 1-2.\",\n synergies: [\"Stuntman\", \"Joker Stencil\", \"Wee Joker\"],\n difficulty: \"Hard\",\n },\n Magic: {\n name: \"Magic Deck\",\n jamlKey: \"Magic\",\n effect:\n \"Starts with Crystal Ball voucher (+1 consumable slot) and two copies of The Fool tarot.\",\n strategy:\n \"Ideal for duplicating early spectral transformations or high-value tarots (Death, The Hermit).\",\n synergies: [\"The Fool\", \"Death\", \"The Hermit\", \"Crystal Ball\"],\n difficulty: \"Medium\",\n },\n Nebula: {\n name: \"Nebula Deck\",\n jamlKey: \"Nebula\",\n effect:\n \"Starts with Telescope voucher (Celestial packs always contain planet for most played hand), but -1 consumable slot.\",\n strategy:\n \"Restricts holding space for Tarots/Spectrals. Forces immediate commits. Synergizes with rapid planetary scaling.\",\n synergies: [\"Constellation\", \"Observatory\", \"Perkeo\", \"Pluto\"],\n difficulty: \"Medium\",\n },\n Zodiac: {\n name: \"Zodiac Deck\",\n jamlKey: \"Zodiac\",\n effect:\n \"Starts with Tarot Merchant, Planet Merchant, and Overstock vouchers pre-equipped.\",\n strategy:\n \"Vastly increases shop variety and consumable spawn rate. Synergizes with economy-heavy seeds for reroll abuse.\",\n synergies: [\"Reroll Surplus\", \"Reroll Glut\", \"Clearance Sale\", \"Liquidation\"],\n difficulty: \"Easy\",\n },\n Ghost: {\n name: \"Ghost Deck\",\n jamlKey: \"Ghost\",\n effect:\n \"Spectral cards can appear in standard shops. Starts with Hex card (applies Polychrome to random Joker, destroys others).\",\n strategy:\n \"Ultimate environment for early Polychrome S-tier jokers. Look for Cryptid, Ectoplasm, Ankh in shops.\",\n synergies: [\"Hex\", \"Ankh\", \"Ectoplasm\", \"Cryptid\", \"The Soul\"],\n difficulty: \"Medium\",\n },\n Checkered: {\n name: \"Checkered Deck\",\n jamlKey: \"Checkered\",\n effect:\n \"Starting deck contains exactly 26 Spades and 26 Hearts (no Diamonds or Clubs).\",\n strategy:\n \"Simplifies flush and flush-five building to near-certainty. Synergizes with Bloodstone, The Idol, and Wrathful/Lusty Joker.\",\n synergies: [\"Bloodstone\", \"The Idol\", \"The Sun\", \"The Star\"],\n difficulty: \"Medium\",\n },\n Painted: {\n name: \"Painted Deck\",\n jamlKey: \"Painted\",\n effect: \"Grants +2 Hand Size, but permanently reduces Joker slots by 1.\",\n strategy:\n \"Maximizes held-in-hand scaling triggers (Baron, Mime, Steel cards). Must account for 4-joker slot limit.\",\n synergies: [\"Baron\", \"Mime\", \"Steel Card\", \"Joker Stencil\"],\n difficulty: \"Hard\",\n },\n Anaglyph: {\n name: \"Anaglyph Deck\",\n jamlKey: \"Anaglyph\",\n effect: \"Grants a Double Tag every time a Boss Blind is defeated.\",\n strategy:\n \"Stack dozens of Double Tags, redeem them simultaneously on a high-value blind skip Tag for massive value.\",\n synergies: [\"Double Tag\", \"Negative Joker\", \"Mega Arcana Pack\"],\n difficulty: \"Medium\",\n },\n Plasma: {\n name: \"Plasma Deck\",\n jamlKey: \"Plasma\",\n effect:\n \"Score = ((Chips + Mult) / 2)^2. Base blind requirements permanently doubled.\",\n strategy:\n \"Fundamentally alters scoring. Flat additions (+Chips or +Mult) are mathematically balanced. Stuntman and Bull are insanely powerful.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Abandoned: {\n name: \"Abandoned Deck\",\n jamlKey: \"Abandoned\",\n effect:\n \"Starting deck contains exactly 40 cards (all 12 face cards removed).\",\n strategy:\n \"Increases probability of low-card straights and pairs. Baron, Triboulet, Photograph are completely inert.\",\n synergies: [\"Hack\", \"Ride the Bus\", \"Wee Joker\", \"DNA\"],\n difficulty: \"Hard\",\n },\n Erratic: {\n name: \"Erratic Deck\",\n jamlKey: \"Erratic\",\n effect:\n \"Starting deck: 52 cards, but all suits and ranks are completely randomized at seed initialization.\",\n strategy:\n \"The only deck where ErraticSuit and ErraticRank JAML rules are valid. Find seeds with high-density ranks (e.g., 18 Aces).\",\n synergies: [\"The Idol\", \"Bloodstone\", \"DNA\", \"Death\"],\n difficulty: \"Medium\",\n },\n};\n\nexport interface StakeInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Expert\";\n}\n\nexport const STAKES: StakeInfo[] = [\n {\n name: \"White Stake\",\n jamlKey: \"White\",\n effect: \"Base configuration. No modifications.\",\n strategy: \"Standard play. Use for learning or testing new strategies.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Red Stake\",\n jamlKey: \"Red\",\n effect: \"Small Blinds provide no monetary reward on victory.\",\n strategy: \"Skips are encouraged to secure early-game Tags.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Green Stake\",\n jamlKey: \"Green\",\n effect: \"Required score scaling accelerates for each successive Ante.\",\n strategy: \"Requires geometric scaling engines by Ante 3.\",\n difficulty: \"Medium\",\n },\n {\n name: \"Black Stake\",\n jamlKey: \"Black\",\n effect: \"Eternal Jokers introduced (30% spawn chance). Cannot be sold or destroyed.\",\n strategy: \"Blocks self-destruct synergies (Madness, Ceremonial Dagger). Avoid these jokers.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Blue Stake\",\n jamlKey: \"Blue\",\n effect: \"Player's baseline discard pool reduced by 1.\",\n strategy: \"Severely impacts discard economies (Merry Andy, Hit the Road, Yorick).\",\n difficulty: \"Medium\",\n },\n {\n name: \"Purple Stake\",\n jamlKey: \"Purple\",\n effect: \"Required scoring accelerates exponentially.\",\n strategy: \"Flat additions become unviable past Ante 4. Need X-Mult or exponential engines.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Orange Stake\",\n jamlKey: \"Orange\",\n effect: \"Perishable Jokers introduced (30% chance). Debuffed after 5 rounds.\",\n strategy: \"Blocks long-term scaling engines (Wee Joker, Constellation). Look for immediate impact.\",\n difficulty: \"Expert\",\n },\n {\n name: \"Gold Stake\",\n jamlKey: \"Gold\",\n effect: \"Rental Jokers introduced (30% chance). Cost $3 per round to maintain.\",\n strategy: \"Massive economic stress. Prioritize interest-generating engines and cheap builds.\",\n difficulty: \"Expert\",\n },\n];\n\nexport function getDeck(name: string): DeckInfo | undefined {\n return DECKS[name] ?? Object.values(DECKS).find((d) => d.name === name);\n}\n\nexport function getStake(name: string): StakeInfo | undefined {\n return STAKES.find(\n (s) => s.name === name || s.jamlKey === name\n );\n}\n","/**\n * Balatro Boss Blind Knowledge Base\n */\n\nexport type BossCategory = \"Debuffer\" | \"Restrictor\" | \"Obfuscator\" | \"Scaler\" | \"Economic\";\n\nexport interface BossInfo {\n name: string;\n jamlKey: string;\n category: BossCategory;\n effect: string;\n counters: string[];\n jamlAvoid: string;\n threatLevel: \"Low\" | \"Medium\" | \"High\" | \"Lethal\";\n}\n\nexport const BOSSES: Record<string, BossInfo> = {\n // ── Debuffers ──\n \"The Club\": {\n name: \"The Club\",\n jamlKey: \"boss: The Club\",\n category: \"Debuffer\",\n effect: \"Debuffs all Club cards.\",\n counters: [\"Non-Club decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Club\",\n threatLevel: \"High\",\n },\n \"The Goad\": {\n name: \"The Goad\",\n jamlKey: \"boss: The Goad\",\n category: \"Debuffer\",\n effect: \"Debuffs all Spade cards.\",\n counters: [\"Non-Spade decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Goad\",\n threatLevel: \"High\",\n },\n \"The Window\": {\n name: \"The Window\",\n jamlKey: \"boss: The Window\",\n category: \"Debuffer\",\n effect: \"Debuffs all Diamond cards.\",\n counters: [\"Non-Diamond decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Window\",\n threatLevel: \"High\",\n },\n \"The Head\": {\n name: \"The Head\",\n jamlKey: \"boss: The Head\",\n category: \"Debuffer\",\n effect: \"Debuffs all Heart cards.\",\n counters: [\"Non-Heart decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Head\",\n threatLevel: \"High\",\n },\n \"The Plant\": {\n name: \"The Plant\",\n jamlKey: \"boss: The Plant\",\n category: \"Debuffer\",\n effect: \"Debuffs all Face Cards (Jacks, Queens, Kings).\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Director's Cut\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Plant\",\n threatLevel: \"Lethal\",\n },\n \"The Pillar\": {\n name: \"The Pillar\",\n jamlKey: \"boss: The Pillar\",\n category: \"Debuffer\",\n effect: \"Debuffs any playing card played previously in the current Ante.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Pillar\",\n threatLevel: \"Medium\",\n },\n\n // ── Restrictors ──\n \"The Psychic\": {\n name: \"The Psychic\",\n jamlKey: \"boss: The Psychic\",\n category: \"Restrictor\",\n effect: \"Every played hand must contain exactly 5 cards.\",\n counters: [\"5-card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Psychic\",\n threatLevel: \"High\",\n },\n \"The Eye\": {\n name: \"The Eye\",\n jamlKey: \"boss: The Eye\",\n category: \"Restrictor\",\n effect: \"Disallows playing repeat hand types in the current round.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Eye\",\n threatLevel: \"Medium\",\n },\n \"The Mouth\": {\n name: \"The Mouth\",\n jamlKey: \"boss: The Mouth\",\n category: \"Restrictor\",\n effect: \"Restricts player to one specific hand type for the entire round.\",\n counters: [\"Versatile builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mouth\",\n threatLevel: \"High\",\n },\n \"The Needle\": {\n name: \"The Needle\",\n jamlKey: \"boss: The Needle\",\n category: \"Restrictor\",\n effect: \"Restricts player to exactly 1 hand for the entire round.\",\n counters: [\"High-scoring single hand\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Needle\",\n threatLevel: \"High\",\n },\n\n // ── Obfuscators ──\n \"The House\": {\n name: \"The House\",\n jamlKey: \"boss: The House\",\n category: \"Obfuscator\",\n effect: \"First drawn hand is drawn face down.\",\n counters: [\"Memory\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The House\",\n threatLevel: \"Low\",\n },\n \"The Wheel\": {\n name: \"The Wheel\",\n jamlKey: \"boss: The Wheel\",\n category: \"Obfuscator\",\n effect: \"1 in 7 cards drawn face down. (2 in 7 with Oops! All 6s).\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wheel\",\n threatLevel: \"Low\",\n },\n \"The Fish\": {\n name: \"The Fish\",\n jamlKey: \"boss: The Fish\",\n category: \"Obfuscator\",\n effect: \"All cards drawn face down after a hand is played.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Fish\",\n threatLevel: \"Medium\",\n },\n \"The Mark\": {\n name: \"The Mark\",\n jamlKey: \"boss: The Mark\",\n category: \"Obfuscator\",\n effect: \"All Face Cards drawn face down.\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mark\",\n threatLevel: \"Medium\",\n },\n\n // ── Scalers ──\n \"The Wall\": {\n name: \"The Wall\",\n jamlKey: \"boss: The Wall\",\n category: \"Scaler\",\n effect: \"Extends required blind score to 4X the base Ante requirement.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wall\",\n threatLevel: \"High\",\n },\n \"The Flint\": {\n name: \"The Flint\",\n jamlKey: \"boss: The Flint\",\n category: \"Scaler\",\n effect: \"Halves all base Chips and Mult for the played hand's base level.\",\n counters: [\"High flat mult/chip\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Flint\",\n threatLevel: \"High\",\n },\n\n // ── Economic / Meta ──\n \"The Ox\": {\n name: \"The Ox\",\n jamlKey: \"boss: The Ox\",\n category: \"Economic\",\n effect: \"Sets player's capital to $0 if they play their most frequently played hand.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Ox\",\n threatLevel: \"Medium\",\n },\n \"The Tooth\": {\n name: \"The Tooth\",\n jamlKey: \"boss: The Tooth\",\n category: \"Economic\",\n effect: \"Subtracts $1 from capital for every card played.\",\n counters: [\"High-card spam builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Tooth\",\n threatLevel: \"Medium\",\n },\n \"The Arm\": {\n name: \"The Arm\",\n jamlKey: \"boss: The Arm\",\n category: \"Economic\",\n effect: \"Permanently decreases level of played hand type by 1.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Arm\",\n threatLevel: \"High\",\n },\n \"The Hook\": {\n name: \"The Hook\",\n jamlKey: \"boss: The Hook\",\n category: \"Economic\",\n effect: \"Involuntarily discards 2 random cards after every play.\",\n counters: [\"Large hand size\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Hook\",\n threatLevel: \"Medium\",\n },\n \"The Manacle\": {\n name: \"The Manacle\",\n jamlKey: \"boss: The Manacle\",\n category: \"Restrictor\",\n effect: \"Temporarily reduces hand size by 1.\",\n counters: [\"Chicot exploit\", \"Paint Brush\", \"Palette\"],\n jamlAvoid: \"mustNot: boss: The Manacle\",\n threatLevel: \"Medium\",\n },\n \"The Water\": {\n name: \"The Water\",\n jamlKey: \"boss: The Water\",\n category: \"Restrictor\",\n effect: \"Removes all discards for the round.\",\n counters: [\"Chicot\", \"Retcon\", \"High-scoring hands\"],\n jamlAvoid: \"mustNot: boss: The Water\",\n threatLevel: \"High\",\n },\n};\n\n// ── Finisher Blinds (Ante 8) ──\nexport const FINISHERS: BossInfo[] = [\n {\n name: \"Cerulean Bell\",\n jamlKey: \"boss: Cerulean Bell\",\n category: \"Restrictor\",\n effect: \"Forces a random card to be permanently selected. Selling or discarding it triggers debuffs.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Cerulean Bell\",\n threatLevel: \"High\",\n },\n {\n name: \"Violet Vessel\",\n jamlKey: \"boss: Violet Vessel\",\n category: \"Scaler\",\n effect: \"Triples the baseline required score benchmark.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Violet Vessel\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Crimson Heart\",\n jamlKey: \"boss: Crimson Heart\",\n category: \"Debuffer\",\n effect: \"Disables 1 random Joker after every hand played.\",\n counters: [\"Multiple jokers\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Crimson Heart\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Verdant Leaf\",\n jamlKey: \"boss: Verdant Leaf\",\n category: \"Debuffer\",\n effect: \"Debuffs every card unless you sell at least 1 Joker.\",\n counters: [\"Cheap jokers to sell\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Verdant Leaf\",\n threatLevel: \"High\",\n },\n {\n name: \"Amber Acorn\",\n jamlKey: \"boss: Amber Acorn\",\n category: \"Obfuscator\",\n effect: \"Shuffles all Jokers and flips them face down.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Amber Acorn\",\n threatLevel: \"High\",\n },\n];\n\nexport function getBoss(name: string): BossInfo | undefined {\n return BOSSES[name] ?? FINISHERS.find((b) => b.name === name);\n}\n\nexport function getBossesByCategory(category: BossCategory): BossInfo[] {\n return [\n ...Object.values(BOSSES),\n ...FINISHERS,\n ].filter((b) => b.category === category);\n}\n\nexport function getAllBosses(): BossInfo[] {\n return [...Object.values(BOSSES), ...FINISHERS];\n}\n","import { type FC } from \"react\";\nimport { Badge, Panel, Stack, Text, Divider, type BadgeTone } from \"./layout.js\";\nimport {\n getJoker,\n getSynergies,\n type JokerInfo,\n type JokerCategory,\n} from \"../knowledge/jokers.js\";\nimport {\n findSynergies,\n type SynergyInfo,\n} from \"../knowledge/synergies.js\";\nimport {\n getDeck,\n getStake,\n type DeckInfo,\n type StakeInfo,\n} from \"../knowledge/decks.js\";\nimport {\n getBoss,\n type BossInfo,\n type BossCategory,\n} from \"../knowledge/bosses.js\";\n\n/**\n * Reference Components — Encyclopedia UI for Balatro entities.\n *\n * All components query the knowledge base and render rich info cards.\n * Zero external dependencies. Pure React + CSS tokens.\n */\n\n/* ─── JokerCard ─── */\nexport interface JokerCardProps {\n name: string;\n showSynergies?: boolean;\n className?: string;\n}\n\nexport const JokerCard: FC<JokerCardProps> = ({\n name,\n showSynergies = true,\n className = \"\",\n}) => {\n const joker = getJoker(name);\n if (!joker) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Joker not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const categoryTone: Record<JokerCategory, BadgeTone> = {\n Copy: \"blue\",\n \"X-Mult\": \"purple\",\n Flat: \"green\",\n Economy: \"gold\",\n Retrigger: \"orange\",\n Utility: \"grey\",\n };\n\n const synergies = showSynergies ? getSynergies(name) : [];\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={joker.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6, alignItems: \"center\" }}>\n <Badge\n label={joker.rarity}\n tone={joker.rarity === \"Legendary\" ? \"gold\" : joker.rarity === \"Rare\" ? \"blue\" : joker.rarity === \"Uncommon\" ? \"green\" : \"grey\"}\n />\n <Badge label={`$${joker.cost}`} tone=\"gold\" />\n </div>\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n <Badge label={joker.category} tone={categoryTone[joker.category]} />\n <Badge label={joker.jamlKey} tone=\"grey\" />\n </div>\n\n <Text body={joker.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={joker.strategy} variant=\"muted\" />\n\n {synergies.length > 0 && (\n <>\n <Divider />\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {synergies.map((s) => (\n <Badge key={s.name} label={s.name} tone=\"purple\" />\n ))}\n </div>\n </>\n )}\n </Stack>\n </Panel>\n );\n};\n\n/* ─── SynergyCard ─── */\nexport interface SynergyCardProps {\n name: string;\n className?: string;\n}\n\nexport const SynergyCard: FC<SynergyCardProps> = ({\n name,\n className = \"\",\n}) => {\n const synergy = findSynergies(name).find((s) => s.name === name);\n if (!synergy) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Synergy not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<SynergyInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Legendary: \"gold\",\n };\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={10}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={synergy.name} variant=\"title\" />\n <Badge label={synergy.difficulty} tone={difficultyTone[synergy.difficulty]} />\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"blue\" />\n ))}\n </div>\n\n <Text body={synergy.description} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"The Math\" variant=\"accent\" />\n <Text body={synergy.math} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Setup Steps\" variant=\"accent\" />\n <Stack gap={6}>\n {synergy.setup.map((step, i) => (\n <div key={i} style={{ display: \"flex\", gap: 8, alignItems: \"flex-start\" }}>\n <span style={{ color: \"var(--j-gold)\", fontWeight: 700, minWidth: 20 }}>\n {i + 1}.\n </span>\n <Text body={step} variant=\"muted\" />\n </div>\n ))}\n </Stack>\n\n <Divider />\n\n <Text body=\"Boss Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.bossCounters.map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── BossBlindCard ─── */\nexport interface BossBlindCardProps {\n name: string;\n className?: string;\n}\n\nexport const BossBlindCard: FC<BossBlindCardProps> = ({\n name,\n className = \"\",\n}) => {\n const boss = getBoss(name);\n if (!boss) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Boss not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const threatTone: Record<BossInfo[\"threatLevel\"], BadgeTone> = {\n Low: \"green\",\n Medium: \"orange\",\n High: \"red\",\n Lethal: \"purple\",\n };\n\n const categoryTone: Record<BossCategory, BadgeTone> = {\n Debuffer: \"red\",\n Restrictor: \"orange\",\n Obfuscator: \"blue\",\n Scaler: \"purple\",\n Economic: \"gold\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={boss.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6 }}>\n <Badge label={boss.category} tone={categoryTone[boss.category]} />\n <Badge label={boss.threatLevel} tone={threatTone[boss.threatLevel]} />\n </div>\n </div>\n\n <Badge label={boss.jamlKey} tone=\"grey\" />\n\n <Text body={boss.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {boss.counters.map((c) => (\n <Badge key={c} label={c} tone=\"green\" />\n ))}\n </div>\n\n <Divider />\n\n <Text body=\"JAML Filter\" variant=\"accent\" />\n <div\n style={{\n background: \"var(--j-surface-inset)\",\n padding: \"8px 12px\",\n borderRadius: \"var(--j-radius)\",\n fontFamily: \"var(--j-font-code)\",\n fontSize: \"var(--j-text-sm)\",\n color: \"var(--j-grey)\",\n }}\n >\n {boss.jamlAvoid}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── DeckCard ─── */\nexport interface DeckCardProps {\n name: string;\n className?: string;\n}\n\nexport const DeckCard: FC<DeckCardProps> = ({\n name,\n className = \"\",\n}) => {\n const deck = getDeck(name);\n if (!deck) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Deck not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<DeckInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={deck.name} variant=\"title\" />\n <Badge label={deck.difficulty} tone={difficultyTone[deck.difficulty]} />\n </div>\n\n <Badge label={deck.jamlKey} tone=\"grey\" />\n\n <Text body={deck.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={deck.strategy} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {deck.synergies.map((s) => (\n <Badge key={s} label={s} tone=\"blue\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StakeCard ─── */\nexport interface StakeCardProps {\n name: string;\n className?: string;\n}\n\nexport const StakeCard: FC<StakeCardProps> = ({\n name,\n className = \"\",\n}) => {\n const stake = getStake(name);\n if (!stake) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Stake not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<StakeInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Expert: \"purple\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={stake.name} variant=\"title\" />\n <Badge label={stake.difficulty} tone={difficultyTone[stake.difficulty]} />\n </div>\n\n <Badge label={stake.jamlKey} tone=\"grey\" />\n\n <Text body={stake.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={stake.strategy} variant=\"muted\" />\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StrategyAdvisor ─── */\nexport interface StrategyAdvisorProps {\n jokers: string[];\n className?: string;\n}\n\nexport const StrategyAdvisor: FC<StrategyAdvisorProps> = ({\n jokers,\n className = \"\",\n}) => {\n const foundJokers = jokers\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n\n const foundSynergies = findSynergies(jokers.join(\" \"));\n\n const recommended = foundSynergies.filter((s) =>\n s.jokers.some((j) => jokers.map((n) => n.toLowerCase()).includes(j.toLowerCase()))\n );\n\n const bossWarnings = new Set<string>();\n recommended.forEach((s) => s.bossCounters.forEach((b) => bossWarnings.add(b)));\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={12}>\n <Text body={`Strategy Advisor (${foundJokers.length} jokers)`} variant=\"title\" />\n\n {foundJokers.length > 0 && (\n <>\n <Text body=\"Detected Jokers\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {foundJokers.map((j) => (\n <Badge key={j.name} label={j.name} tone=\"blue\" />\n ))}\n </div>\n </>\n )}\n\n {recommended.length > 0 && (\n <>\n <Divider />\n <Text body=\"Recommended Strategies\" variant=\"accent\" />\n <Stack gap={8}>\n {recommended.slice(0, 3).map((s) => (\n <div key={s.name}>\n <Text body={s.name} variant=\"body\" />\n <Text body={s.description} variant=\"muted\" />\n <div style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\", marginTop: 4 }}>\n {s.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"purple\" />\n ))}\n </div>\n </div>\n ))}\n </Stack>\n </>\n )}\n\n {bossWarnings.size > 0 && (\n <>\n <Divider />\n <Text body=\"Boss Blind Warnings\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {Array.from(bossWarnings).map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </>\n )}\n\n {foundJokers.length === 0 && recommended.length === 0 && (\n <Text body=\"No recognized jokers or synergies found. Add jokers to get strategy advice.\" variant=\"muted\" />\n )}\n </Stack>\n </Panel>\n );\n};\n","import type { Registry } from \"./engine.js\";\nimport {\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n} from \"./components/layout.js\";\nimport {\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n} from \"./components/domain.js\";\nimport { JamlGameCard } from \"./components/game.js\";\nimport { JammyMascot, JammyOrbitalMenu } from \"./components/mascot.js\";\nimport {\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n} from \"./components/reference.js\";\n\n/**\n * Balatro Component Registry\n *\n * Maps catalog component names to real React implementations.\n * This is the ONLY place where catalog names are bound to code.\n * Add new components here → they instantly work in json-render specs.\n */\nexport const balatroRegistry: Registry = {\n // ── Layout ──\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n\n // ── Status ──\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n\n // ── Results ──\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n\n // ── Game Cards ──\n JamlGameCard,\n\n // ── Mascot ──\n JammyMascot,\n JammyOrbitalMenu,\n\n // ── Encyclopedia ──\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n};\n\n/**\n * Type-safe registry helper.\n * Ensures all catalog names have a matching component at compile time.\n */\nexport type BalatroRegistry = typeof balatroRegistry;\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for search results.\n *\n * Pure function. Converts raw Motely search data into a JsonNode tree.\n * The tree renders into a full search UI via `render(spec, registry)`.\n */\n\nexport interface SearchResult {\n seed: string;\n score: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n}\n\nexport interface SearchParams {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n error?: string | null;\n results: SearchResult[];\n}\n\nexport function buildSearchSpec(params: SearchParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Search Stats ──\n children.push({\n type: \"SearchStats\",\n props: {\n status: params.status,\n seedsSearched: params.seedsSearched,\n matchesFound: params.matchesFound,\n seedsPerSecond: params.seedsPerSecond,\n elapsed: params.elapsed,\n },\n });\n\n // ── Error Banner ──\n if (params.error) {\n children.push({\n type: \"ErrorBanner\",\n props: {\n message: params.error,\n onDismiss: true,\n },\n });\n }\n\n // ── Spacer ──\n children.push({ type: \"Spacer\", props: { size: 16 } });\n\n // ── Results ──\n if (params.results.length > 0) {\n const resultCards: JsonNode[] = params.results.map((r, i) => ({\n type: \"SeedCard\",\n props: {\n seed: r.seed,\n score: r.score,\n rank: i + 1,\n highlights: r.highlights,\n jokers: r.jokers,\n edition: r.edition,\n onClick: true,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: {\n title: `Results (${params.matchesFound ?? params.results.length})`,\n subtitle: params.status === \"running\" ? \"More matches arriving…\" : undefined,\n },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: resultCards,\n },\n ],\n });\n } else if (params.status === \"completed\") {\n children.push({\n type: \"Panel\",\n props: { title: \"No matches found\", variant: \"muted\" },\n children: [\n {\n type: \"Text\",\n props: {\n body: \"Try relaxing your filter or checking for typos.\",\n variant: \"muted\",\n },\n },\n ],\n });\n } else if (params.status === \"running\") {\n children.push({\n type: \"LoadingPulse\",\n props: { text: \"Searching seeds…\" },\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\nimport { getRecommendedSynergies } from \"../knowledge/synergies.js\";\n\n/**\n * Build a json-render spec for the encyclopedia view.\n *\n * Shows joker info, synergies, and strategy advice for a set of jokers.\n */\n\nexport interface EncyclopediaParams {\n jokers: string[];\n decks?: string[];\n stakes?: string[];\n bosses?: string[];\n showStrategies?: boolean;\n}\n\nexport function buildEncyclopediaSpec(params: EncyclopediaParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Joker Cards ──\n if (params.jokers.length > 0) {\n const jokerCards: JsonNode[] = params.jokers.map((name) => ({\n type: \"JokerCard\",\n props: { name, showSynergies: true },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n // ── Strategy Advisor ──\n if (params.showStrategies && params.jokers.length > 0) {\n children.push({\n type: \"StrategyAdvisor\",\n props: { jokers: params.jokers },\n });\n }\n\n // ── Synergy Cards ──\n const synergies = getRecommendedSynergies(params.jokers);\n if (synergies.length > 0) {\n const synergyCards: JsonNode[] = synergies.map((s) => ({\n type: \"SynergyCard\",\n props: { name: s.name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Synergies\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: synergyCards,\n },\n ],\n });\n }\n\n // ── Deck Cards ──\n if (params.decks && params.decks.length > 0) {\n const deckCards: JsonNode[] = params.decks.map((name) => ({\n type: \"DeckCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Decks\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: deckCards,\n },\n ],\n });\n }\n\n // ── Stake Cards ──\n if (params.stakes && params.stakes.length > 0) {\n const stakeCards: JsonNode[] = params.stakes.map((name) => ({\n type: \"StakeCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Stakes\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: stakeCards,\n },\n ],\n });\n }\n\n // ── Boss Blind Cards ──\n if (params.bosses && params.bosses.length > 0) {\n const bossCards: JsonNode[] = params.bosses.map((name) => ({\n type: \"BossBlindCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Boss Blinds\", variant: \"muted\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: bossCards,\n },\n ],\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for seed analysis results.\n *\n * Shows the full breakdown of a single seed: jokers, shop, blinds, etc.\n */\n\nexport interface AnalyzerResult {\n seed: string;\n jokers: Array<{\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n }>;\n shopItems?: Array<{\n name: string;\n type: string;\n edition?: string;\n }>;\n score?: number;\n notes?: string[];\n}\n\nexport function buildAnalyzerSpec(result: AnalyzerResult): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Header ──\n children.push({\n type: \"Panel\",\n props: { title: `Seed: ${result.seed}`, variant: \"accent\" },\n children: [\n {\n type: \"Text\",\n props: { body: `Score: ${result.score ?? \"N/A\"}`, variant: \"title\" },\n },\n ],\n });\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Jokers ──\n if (result.jokers.length > 0) {\n const jokerCards: JsonNode[] = result.jokers.map((j) => ({\n type: \"JamlGameCard\",\n props: {\n type: \"joker\",\n card: {\n name: j.name,\n edition: j.edition,\n seal: j.seal,\n isEternal: j.isEternal,\n },\n scale: 0.8,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 3, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Shop ──\n if (result.shopItems && result.shopItems.length > 0) {\n const shopBadges: JsonNode[] = result.shopItems.map((s) => ({\n type: \"Badge\",\n props: { label: s.name, tone: \"blue\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Shop\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 4, gap: 8 },\n children: shopBadges,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Notes ──\n if (result.notes && result.notes.length > 0) {\n const noteTexts: JsonNode[] = result.notes.map((n) => ({\n type: \"Text\",\n props: { body: `• ${n}`, variant: \"muted\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Notes\", variant: \"muted\" },\n children: noteTexts,\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n"],"names":["loadImage","url","resolve","image","renderImage","canvas","context","layer","timestamp","cardWidth","cardHeight","canvasStyle","elapsed","yOffset","xOffset","useJamlCardRenderer","layers","invert","hoverTilt","canvasRef","useRef","containerRef","imageCacheRef","ratio","setRatio","useState","forceUpdate","frameRef","targetRef","currentRef","hasAnimatedLayer","useEffect","cancelled","imageCache","urls","SPRITE_SHEETS","sheet","images","index","prev","err","frame","startTime","drawOnce","animTime","a","b","cached","imageRatio","img","tick","stopTiltLoop","useCallback","writeCardTransform","c","runTiltLoop","rate","onSettled","previous","now","dt","target","current","alpha","event","_a","rect","nx","ny","_b","JamlCardRenderer","className","handlers","jsxs","jsx","normalizeCardRank","raw","value","normalizeCardSuit","parseStandardcardName","name","trimmed","ofMatch","shortMatch","suitMap","MODIFIER_PREFIXES","stripModifiers","remaining","edition","isEternal","isPerishable","isRental","changed","prefix","stripped","resolvePackedAnalyzerItem","item","scale","decoded","decodeMotelyItem","resolveAnalyzerShopItem","displayName","packedResolved","VOUCHERS","voucher","JOKERS","joker","TAROTS_AND_PLANETS","consumable","baseName","standardcard","JamlGameCard","card","type","rank","suit","enhancements","seal","jokerData","j","Layer","face","JOKER_FACES","t","CONSUMABLE_FACES","enhancerPos","m","ENHANCER_MAP","pos","RANK_MAP","SUIT_MAP","EDITION_MAP","STICKER_MAP","sealPos","SEAL_MAP","JamlVoucher","voucherName","voucherData","v","JamlTag","tagName","tagData","TAGS","JamlBoss","bossName","bossData","BOSSES","splitCamelCase","key","packDisplayName","pack","MotelyBoosterPack","bossDisplayName","boss","MotelyBossBlind","tagDisplayName","tag","MotelyTag","voucherDisplayName","MotelyVoucher","deckDisplayName","deck","MotelyDeck","stakeDisplayName","stake","MotelyStake","ItemCard","resolved","useMemo","decodeMotelyItemToJamlCard","PackSection","i","JamlyzerView","result","maxAnte","selectedAnte","setSelectedAnte","ante","anteNumbers","_","n","DECK_SPRITE_POS","STAKE_SPRITE_POS","SPRITE_WIDTH","SPRITE_HEIGHT","DECK_COLS","DECK_ROWS","STICKER_COLS","STICKER_ROWS","DeckSprite","size","style","deckKey","deckPos","stakePos","displayHeight","resolveJamlAssetUrl","CardSuit","CardRank","CardEnhancement","CardSeal","CardEdition","CARD_WIDTH","CARD_HEIGHT","match","rawRank","rawSuit","StandardCard","enhancement","parsed","finalRank","finalSuit","col","row","finalH","bgX","bgY","PLAIN_BASE","enhPos","editionCol","isNegative","baseFilter","enhancersUrl","deckUrl","editionsUrl","layerBase","render","node","registry","Component","children","child","Fragment","renderList","nodes","defineCatalog","catalog","balatroCatalog","Panel","title","subtitle","variant","Stack","gap","align","Grid","columns","Text","body","colors","sizes","Spacer","Divider","Badge","label","tone","toneMap","SearchStats","status","seedsSearched","matchesFound","seedsPerSecond","statusColor","statusLabel","ErrorBanner","message","onDismiss","dismissed","setDismissed","LoadingPulse","text","SeedCard","seed","score","highlights","jokers","onClick","e","h","SeedList","seeds","scores","total","pageSize","page","setPage","maxPage","start","visible","p","JokerBadge","rarity","rarityTone","editionTone","EditionBadge","JamlGameCardImpl","JammyOrbitalMenu","items","onAction","radius","step","angle","x","y","JammyMascot","mood","menuItems","onMenuAction","open","setOpen","handleClick","action","getJoker","getJokersByCategory","category","getSynergies","jokerName","SYNERGIES","findSynergies","s","findSynergiesByTag","getRecommendedSynergies","jokerNames","normalized","aMatches","DECKS","STAKES","getDeck","d","getStake","FINISHERS","getBoss","getBossesByCategory","getAllBosses","JokerCard","showSynergies","categoryTone","synergies","SynergyCard","synergy","difficultyTone","BossBlindCard","threatTone","DeckCard","StakeCard","StrategyAdvisor","foundJokers","recommended","bossWarnings","balatroRegistry","buildSearchSpec","params","resultCards","r","buildEncyclopediaSpec","jokerCards","synergyCards","deckCards","stakeCards","bossCards","buildAnalyzerSpec","shopBadges","noteTexts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/render/useJamlCardRenderer.ts","../src/render/CanvasRenderer.tsx","../src/components/GameCard.tsx","../src/components/JamlyzerView.tsx","../src/components/DeckSprite.tsx","../src/components/cardEnums.ts","../src/components/StandardCard.tsx","../src/json-render/engine.tsx","../src/json-render/catalog.ts","../src/json-render/components/layout.tsx","../src/json-render/components/domain.tsx","../src/json-render/components/game.tsx","../src/json-render/components/jammySeedMascotImage.ts","../src/json-render/components/mascot.tsx","../src/json-render/knowledge/jokers.ts","../src/json-render/knowledge/synergies.ts","../src/json-render/knowledge/decks.ts","../src/json-render/knowledge/bosses.ts","../src/json-render/components/reference.tsx","../src/json-render/registry.tsx","../src/json-render/builders/search.ts","../src/json-render/builders/encyclopedia.ts","../src/json-render/builders/analyzer.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Layer } from \"./Layer.js\";\nimport { SPRITE_SHEETS } from \"../sprites/spriteData.js\";\n\nfunction loadImage(url: string): Promise<HTMLImageElement | null> {\n return new Promise((resolve) => {\n const image = new window.Image();\n image.addEventListener(\"load\", () => resolve(image));\n image.addEventListener(\"error\", () => resolve(null));\n image.src = url;\n });\n}\n\nfunction renderImage(\n canvas: HTMLCanvasElement,\n context: CanvasRenderingContext2D,\n image: HTMLImageElement,\n layer: Layer,\n timestamp?: number\n) {\n if (!image || !layer || !layer?.pos) return 0;\n const cardWidth = image.width / layer.columns;\n const cardHeight = image.height / layer.rows;\n const canvasStyle = canvas.style;\n\n if (layer.order === 0) {\n canvas.width = cardWidth;\n canvas.height = cardHeight;\n canvasStyle.width = `${cardWidth}px`;\n canvasStyle.height = `${cardHeight}px`;\n }\n\n canvasStyle.imageRendering = \"pixelated\";\n context.imageSmoothingEnabled = true;\n\n context.save();\n\n if (layer.animated && timestamp) {\n const elapsed = timestamp;\n const yOffset = Math.sin(elapsed / 1000) * 3;\n const xOffset = Math.sin(elapsed / 1500) * 1.5;\n context.globalAlpha = 0.65 + (Math.sin(elapsed / 2000) + 1) * 0.075;\n context.translate(xOffset, yOffset);\n }\n\n context.drawImage(\n image,\n layer.pos.x * cardWidth,\n layer.pos.y * cardHeight,\n cardWidth,\n cardHeight,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n context.restore();\n\n return cardWidth / cardHeight;\n}\n\nexport function useJamlCardRenderer({\n layers,\n invert = false,\n hoverTilt = false,\n}: {\n layers: Layer[];\n invert?: boolean;\n hoverTilt?: boolean;\n}) {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const imageCacheRef = useRef<Map<string, HTMLImageElement>>(new Map());\n const [ratio, setRatio] = useState(3 / 4);\n const [, forceUpdate] = useState(0);\n const frameRef = useRef<number | null>(null);\n const targetRef = useRef({ rx: 0, ry: 0, rz: 0 });\n const currentRef = useRef({ rx: 0, ry: 0, rz: 0 });\n\n const hasAnimatedLayer = layers?.some((layer) => layer.animated);\n\n // Preload all known sheets once\n useEffect(() => {\n let cancelled = false;\n const imageCache = imageCacheRef.current;\n const preload = async () => {\n const urls = Array.from(new Set(Object.values(SPRITE_SHEETS).map((sheet) => sheet.src)));\n const images = await Promise.all(urls.map((url) => loadImage(url)));\n if (cancelled) return;\n images.forEach((image, index) => {\n if (image) imageCache.set(urls[index], image);\n });\n forceUpdate((prev) => prev + 1);\n };\n\n preload().catch((err) => console.error(\"[JamlCardRenderer]\", err));\n\n return () => {\n cancelled = true;\n imageCache.clear();\n };\n }, []);\n\n // Drawing: RAF loop for animated layers, single paint otherwise.\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas || !layers || layers.length === 0) return;\n const context = canvas.getContext(\"2d\");\n if (!context) return;\n\n let cancelled = false;\n let frame: number | null = null;\n let startTime: number | undefined;\n\n const drawOnce = (animTime?: number) => {\n context.clearRect(0, 0, canvas.width, canvas.height);\n ;[...layers]\n .sort((a, b) => a.order - b.order)\n .forEach((layer) => {\n const cached = imageCacheRef.current.get(layer.source);\n if (cached) {\n const imageRatio = renderImage(canvas, context, cached, layer, hasAnimatedLayer ? animTime : undefined);\n if (layer.order === 0) setRatio(imageRatio);\n return;\n }\n loadImage(layer.source).then((img) => {\n if (cancelled || !img) return;\n imageCacheRef.current.set(layer.source, img);\n if (!hasAnimatedLayer) {\n const imageRatio = renderImage(canvas, context, img, layer);\n if (layer.order === 0) setRatio(imageRatio);\n }\n forceUpdate((prev) => prev + 1);\n });\n });\n canvas.style.filter = invert ? \"invert(0.94)\" : \"none\";\n };\n\n if (hasAnimatedLayer) {\n const tick = (timestamp: number) => {\n if (cancelled) return;\n if (startTime === undefined) startTime = timestamp;\n drawOnce(timestamp - startTime);\n frame = requestAnimationFrame(tick);\n };\n frame = requestAnimationFrame(tick);\n } else {\n drawOnce();\n }\n\n return () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n };\n }, [layers, invert, hasAnimatedLayer]);\n\n const stopTiltLoop = useCallback(() => {\n if (frameRef.current !== null) {\n cancelAnimationFrame(frameRef.current);\n frameRef.current = null;\n }\n }, []);\n\n const writeCardTransform = useCallback(() => {\n const canvas = canvasRef.current;\n if (!canvas) return;\n const c = currentRef.current;\n canvas.style.transform = `rotateX(${c.rx}deg) rotateY(${c.ry}deg) rotateZ(${c.rz}deg)`;\n }, []);\n\n const runTiltLoop = useCallback(\n (rate: number, onSettled?: () => void) => {\n stopTiltLoop();\n let previous = performance.now();\n const tick = (now: number) => {\n const dt = Math.min(0.05, (now - previous) / 1000);\n previous = now;\n const target = targetRef.current;\n const current = currentRef.current;\n const alpha = 1 - Math.exp(-rate * dt);\n current.rx += (target.rx - current.rx) * alpha;\n current.ry += (target.ry - current.ry) * alpha;\n current.rz += (target.rz - current.rz) * alpha;\n writeCardTransform();\n const settled =\n Math.abs(target.rx - current.rx) < 0.02 &&\n Math.abs(target.ry - current.ry) < 0.02 &&\n Math.abs(target.rz - current.rz) < 0.02;\n if (settled) {\n current.rx = target.rx;\n current.ry = target.ry;\n current.rz = target.rz;\n writeCardTransform();\n frameRef.current = null;\n onSettled?.();\n return;\n }\n frameRef.current = requestAnimationFrame(tick);\n };\n frameRef.current = requestAnimationFrame(tick);\n },\n [stopTiltLoop, writeCardTransform]\n );\n\n useEffect(() => () => stopTiltLoop(), [stopTiltLoop]);\n\n const onPointerEnter = (event: React.PointerEvent) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n containerRef.current?.setAttribute(\"data-hovered\", \"true\");\n runTiltLoop(22);\n };\n\n const onPointerLeave = () => {\n if (!hoverTilt) return;\n containerRef.current?.setAttribute(\"data-hovered\", \"false\");\n targetRef.current = { rx: 0, ry: 0, rz: 0 };\n runTiltLoop(14, () => {\n const canvas = canvasRef.current;\n if (canvas) canvas.style.transform = \"\";\n });\n };\n\n const onPointerMove = (event: React.PointerEvent<HTMLDivElement>) => {\n if (!hoverTilt || event.pointerType === \"touch\") return;\n const rect = event.currentTarget.getBoundingClientRect();\n const nx = Math.max(-1, Math.min(1, ((event.clientX - rect.left) / rect.width - 0.5) * 2));\n const ny = Math.max(-1, Math.min(1, ((event.clientY - rect.top) / rect.height - 0.5) * 2));\n targetRef.current = {\n rx: ny * -10,\n ry: nx * 12,\n rz: nx * ny * -1.2,\n };\n containerRef.current?.style.setProperty(\"--j-card-glare-x\", `${(nx + 1) * 50}%`);\n containerRef.current?.style.setProperty(\"--j-card-glare-y\", `${(1 - ny) * 50}%`);\n runTiltLoop(22);\n };\n\n return {\n canvasRef,\n containerRef,\n ratio,\n handlers: {\n onPointerEnter: hoverTilt ? onPointerEnter : undefined,\n onPointerLeave: hoverTilt ? onPointerLeave : undefined,\n onPointerMove: hoverTilt ? onPointerMove : undefined,\n },\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"./Layer.js\";\nimport { useJamlCardRenderer } from \"./useJamlCardRenderer.js\";\n\nexport interface JamlCardRendererProps {\n layers: Layer[];\n invert?: boolean;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlCardRenderer({ layers, invert = false, className = \"\", hoverTilt = false }: JamlCardRendererProps) {\n const { canvasRef, containerRef, ratio, handlers } = useJamlCardRenderer({\n layers,\n invert,\n hoverTilt\n });\n\n return (\n <div\n ref={containerRef}\n className={`j-card-renderer ${className}`.trim()}\n data-hover-tilt={hoverTilt}\n data-hovered=\"false\"\n style={{ \"--j-card-aspect\": String(ratio) } as React.CSSProperties}\n >\n <canvas ref={canvasRef} className=\"j-card-renderer__canvas\" />\n <div className=\"j-card-renderer__hit\" {...handlers} />\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { Layer } from \"../render/Layer.js\";\nimport { JamlCardRenderer } from \"../render/CanvasRenderer.js\";\nimport {\n JOKERS,\n JOKER_FACES,\n TAROTS_AND_PLANETS,\n CONSUMABLE_FACES,\n TAGS,\n VOUCHERS,\n BOSSES,\n EDITION_MAP,\n SPRITE_SHEETS,\n STICKER_MAP,\n RANK_MAP,\n SUIT_MAP,\n ENHANCER_MAP,\n SEAL_MAP,\n} from \"../sprites/spriteData.js\";\nimport { decodeMotelyItem } from \"../decode/motelyItemDecoder.js\";\n\nexport interface JamlGameCardProps {\n card: {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n rank?: string;\n suit?: string;\n enhancements?: string[];\n seal?: string;\n scale?: number;\n };\n type: \"joker\" | \"consumable\" | \"playing\";\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport type AnalyzerShopItem = {\n id: string;\n name: string;\n value?: number;\n};\n\nexport type AnalyzerResolvedItem =\n | { kind: \"voucher\"; voucherName: string }\n | {\n kind: \"joker\" | \"consumable\" | \"playing\";\n card: JamlGameCardProps[\"card\"];\n type: JamlGameCardProps[\"type\"];\n }\n | { kind: \"unknown\"; label: string };\n\nfunction normalizeCardRank(raw: string): string {\n const value = raw.trim().toUpperCase();\n if (value === \"A\" || value === \"ACE\") return \"Ace\";\n if (value === \"K\" || value === \"KING\") return \"King\";\n if (value === \"Q\" || value === \"QUEEN\") return \"Queen\";\n if (value === \"J\" || value === \"JACK\") return \"Jack\";\n return raw.trim();\n}\n\nfunction normalizeCardSuit(raw: string): string {\n const value = raw.trim().toLowerCase();\n if (value === \"heart\" || value === \"hearts\") return \"Hearts\";\n if (value === \"club\" || value === \"clubs\") return \"Clubs\";\n if (value === \"diamond\" || value === \"diamonds\") return \"Diamonds\";\n if (value === \"spade\" || value === \"spades\") return \"Spades\";\n return raw.trim();\n}\n\nfunction parseStandardcardName(name: string): { rank: string; suit: string } | null {\n const trimmed = name.trim();\n const ofMatch = /^(A|K|Q|J|10|[2-9]|Ace|King|Queen|Jack)\\s+of\\s+(Hearts|Clubs|Diamonds|Spades)$/i.exec(trimmed);\n if (ofMatch) {\n return {\n rank: normalizeCardRank(ofMatch[1]),\n suit: normalizeCardSuit(ofMatch[2]),\n };\n }\n\n const shortMatch = /^(A|K|Q|J|10|[2-9])\\s*([HCDS])$/i.exec(trimmed);\n if (shortMatch) {\n const suitMap: Record<string, string> = {\n H: \"Hearts\",\n C: \"Clubs\",\n D: \"Diamonds\",\n S: \"Spades\",\n };\n return {\n rank: normalizeCardRank(shortMatch[1]),\n suit: suitMap[shortMatch[2].toUpperCase()],\n };\n }\n\n return null;\n}\n\nconst MODIFIER_PREFIXES = [\n \"Eternal\",\n \"Perishable\",\n \"Rental\",\n \"Foil\",\n \"Holographic\",\n \"Polychrome\",\n \"Negative\",\n \"Bonus\",\n \"Mult\",\n \"Wild\",\n \"Glass\",\n \"Steel\",\n \"Stone\",\n \"Gold\",\n \"Lucky\",\n \"Gold Seal\",\n \"Red Seal\",\n \"Blue Seal\",\n \"Purple Seal\",\n];\n\nfunction stripModifiers(name: string): {\n baseName: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n} {\n let remaining = name;\n let edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\" | undefined;\n let isEternal = false;\n let isPerishable = false;\n let isRental = false;\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const prefix of MODIFIER_PREFIXES) {\n if (remaining.startsWith(prefix + \" \")) {\n const stripped = remaining.slice(prefix.length + 1);\n if (prefix === \"Foil\" || prefix === \"Holographic\" || prefix === \"Polychrome\" || prefix === \"Negative\") {\n edition = prefix as typeof edition;\n } else if (prefix === \"Eternal\") {\n isEternal = true;\n } else if (prefix === \"Perishable\") {\n isPerishable = true;\n } else if (prefix === \"Rental\") {\n isRental = true;\n }\n remaining = stripped;\n changed = true;\n break;\n }\n }\n }\n\n return { baseName: remaining, edition, isEternal, isPerishable, isRental };\n}\n\nfunction resolvePackedAnalyzerItem(item: AnalyzerShopItem, scale: number): AnalyzerResolvedItem | null {\n if (typeof item.value !== \"number\" || !Number.isFinite(item.value)) {\n return null;\n }\n\n // Decode the packed int through the typed Motely decoder — the single source\n // of truth for the bit layout. The previous version hand-rolled nibble\n // constants (catNibble === 5 /* Joker */ etc.) that did NOT match the real\n // Motely enum, so categories decoded as bogus 1..5 values. decodeMotelyItem\n // reads MOTELY_ITEM_FORMATS_BY_VALUE + Motely.decode*, so the category,\n // edition, seal, enhancement, rank, suit, and stickers are all correct.\n const decoded = decodeMotelyItem(item.value);\n if (!decoded) return null;\n\n const edition = decoded.edition ?? undefined;\n const { isEternal, isPerishable, isRental } = decoded;\n\n switch (decoded.category) {\n case \"joker\":\n return {\n kind: \"joker\",\n type: \"joker\",\n card: { name: decoded.displayName, edition, isEternal, isPerishable, isRental, scale },\n };\n case \"tarot\":\n case \"planet\":\n case \"spectral\":\n return {\n kind: \"consumable\",\n type: \"consumable\",\n card: {\n name: decoded.displayName,\n edition,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n scale,\n },\n };\n case \"playing\":\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: decoded.displayName,\n rank: decoded.rank ?? undefined,\n suit: decoded.suit ?? undefined,\n enhancements: decoded.enhancement ? [decoded.enhancement] : undefined,\n seal: decoded.seal ?? undefined,\n edition,\n isEternal,\n isPerishable,\n isRental,\n scale,\n },\n };\n default:\n // Unknown category (incl. vouchers): fall back to the name-based\n // matching in resolveAnalyzerShopItem (vouchers resolve by name).\n return null;\n }\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function resolveAnalyzerShopItem(item: AnalyzerShopItem, scale = 1): AnalyzerResolvedItem {\n const displayName = String(item.name || \"\").trim();\n\n if (!displayName) {\n return { kind: \"unknown\", label: String(item.id || \"\").trim() || \"Unknown Item\" };\n }\n\n const packedResolved = resolvePackedAnalyzerItem(item, scale);\n if (packedResolved && packedResolved.kind !== \"unknown\") {\n return packedResolved;\n }\n\n if (VOUCHERS.some((voucher) => voucher.name === displayName)) {\n return { kind: \"voucher\", voucherName: displayName };\n }\n\n if (JOKERS.some((joker) => joker.name === displayName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: displayName, scale } };\n }\n\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === displayName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: displayName, scale } };\n }\n\n const { baseName, edition, isEternal, isPerishable, isRental } = stripModifiers(displayName);\n\n if (baseName !== displayName) {\n if (JOKERS.some((joker) => joker.name === baseName)) {\n return { kind: \"joker\", type: \"joker\", card: { name: baseName, edition, isEternal, isPerishable, isRental, scale } };\n }\n if (TAROTS_AND_PLANETS.some((consumable) => consumable.name === baseName)) {\n return { kind: \"consumable\", type: \"consumable\", card: { name: baseName, edition, scale } };\n }\n if (VOUCHERS.some((voucher) => voucher.name === baseName)) {\n return { kind: \"voucher\", voucherName: baseName };\n }\n }\n\n const standardcard = parseStandardcardName(displayName) ?? parseStandardcardName(baseName);\n if (standardcard) {\n return {\n kind: \"playing\",\n type: \"playing\",\n card: {\n name: displayName,\n rank: standardcard.rank,\n suit: standardcard.suit,\n scale,\n },\n };\n }\n\n return packedResolved ?? { kind: \"unknown\", label: displayName };\n}\n\nexport function JamlGameCard({ card, type, className = \"\", hoverTilt = false }: JamlGameCardProps) {\n const { name, edition, isEternal, isPerishable, isRental, rank, suit, enhancements, seal, scale = 1 } = card;\n const layers: Layer[] = [];\n\n if (type === \"joker\") {\n const jokerData = JOKERS.find((j) => j.name === name);\n if (jokerData) layers.push(new Layer({ ...jokerData, source: SPRITE_SHEETS.jokers.src, order: 0, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n const face = JOKER_FACES.find((j) => j.name === name);\n if (face) layers.push(new Layer({ ...face, source: SPRITE_SHEETS.jokers.src, order: 1, columns: SPRITE_SHEETS.jokers.columns, rows: SPRITE_SHEETS.jokers.rows }));\n } else if (type === \"consumable\") {\n const consumable = TAROTS_AND_PLANETS.find((t) => t.name === name);\n if (consumable) layers.push(new Layer({ ...consumable, order: 0, source: SPRITE_SHEETS.tarots.src, rows: SPRITE_SHEETS.tarots.rows, columns: SPRITE_SHEETS.tarots.columns }));\n const face = CONSUMABLE_FACES.find((t) => t.name === name);\n if (face)\n layers.push(\n new Layer({\n ...face,\n order: 1,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n animated: face.animated,\n }),\n );\n } else {\n const standardcard = rank && suit ? { rank, suit } : parseStandardcardName(name);\n if (standardcard) {\n const enhancerPos = (enhancements ?? [])\n .map((m) => ENHANCER_MAP[m])\n .find((pos): pos is { x: number; y: number } => Boolean(pos)) ?? { x: 1, y: 0 };\n layers.push(\n new Layer({\n pos: enhancerPos,\n name: \"background\",\n order: 0,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n layers.push(\n new Layer({\n pos: { x: RANK_MAP[standardcard.rank] ?? 0, y: SUIT_MAP[standardcard.suit] ?? 0 },\n name,\n order: 1,\n source: SPRITE_SHEETS.deck.src,\n rows: SPRITE_SHEETS.deck.rows,\n columns: SPRITE_SHEETS.deck.columns,\n }),\n );\n }\n }\n\n if (edition) {\n const index = EDITION_MAP[edition];\n if (index !== undefined) {\n layers.push(\n new Layer({\n pos: { x: index, y: 0 },\n name: edition,\n order: 2,\n source: SPRITE_SHEETS.editions.src,\n rows: SPRITE_SHEETS.editions.rows,\n columns: SPRITE_SHEETS.editions.columns,\n }),\n );\n }\n }\n\n if (isEternal) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Eternal\"],\n name: \"Eternal\",\n order: 3,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isPerishable) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Perishable\"],\n name: \"Perishable\",\n order: 4,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n if (isRental) {\n layers.push(\n new Layer({\n pos: STICKER_MAP[\"Rental\"],\n name: \"Rental\",\n order: 5,\n source: SPRITE_SHEETS.stickers.src,\n rows: SPRITE_SHEETS.stickers.rows,\n columns: SPRITE_SHEETS.stickers.columns,\n }),\n );\n }\n\n if (seal) {\n const sealPos = SEAL_MAP[seal];\n if (sealPos) {\n layers.push(\n new Layer({\n pos: sealPos,\n name: seal,\n order: 6,\n source: SPRITE_SHEETS.enhancers.src,\n rows: SPRITE_SHEETS.enhancers.rows,\n columns: SPRITE_SHEETS.enhancers.columns,\n }),\n );\n }\n }\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer invert={edition === \"Negative\"} layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface VoucherProps {\n voucherName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlVoucher({ voucherName, scale = 1, className = \"\", hoverTilt = false }: VoucherProps) {\n const voucherData = VOUCHERS.find((v) => v.name === voucherName);\n if (!voucherData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...voucherData,\n order: 0,\n source: SPRITE_SHEETS.vouchers.src,\n rows: SPRITE_SHEETS.vouchers.rows,\n columns: SPRITE_SHEETS.vouchers.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface TagProps {\n tagName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlTag({ tagName, scale = 1, className = \"\", hoverTilt = false }: TagProps) {\n const tagData = TAGS.find((t) => t.name === tagName);\n if (!tagData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...tagData,\n order: 0,\n source: SPRITE_SHEETS.tags.src,\n rows: SPRITE_SHEETS.tags.rows,\n columns: SPRITE_SHEETS.tags.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n\nexport interface BossProps {\n bossName: string;\n scale?: number;\n className?: string;\n hoverTilt?: boolean;\n}\n\nexport function JamlBoss({ bossName, scale = 1, className = \"\", hoverTilt = false }: BossProps) {\n const bossData = BOSSES.find((b) => b.name === bossName);\n if (!bossData) return null;\n\n const layers: Layer[] = [\n new Layer({\n ...bossData,\n order: 0,\n source: SPRITE_SHEETS.blinds.src,\n rows: SPRITE_SHEETS.blinds.rows,\n columns: SPRITE_SHEETS.blinds.columns,\n }),\n ];\n\n return (\n <div className={`j-game-card ${className}`.trim()} style={{ \"--j-card-width\": `${71 * scale}px` } as React.CSSProperties}>\n <JamlCardRenderer layers={layers} hoverTilt={hoverTilt} />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport {\n MotelyJamlyzerSeedResult,\n MotelyJamlyzerAnteResult,\n MotelyBoosterPack,\n MotelyBossBlind,\n MotelyTag,\n MotelyVoucher,\n MotelyDeck,\n MotelyStake,\n} from \"motely-wasm\";\nimport {\n JamlGameCard,\n JamlVoucher,\n JamlTag,\n JamlBoss,\n} from \"./GameCard.js\";\nimport { decodeMotelyItemToJamlCard } from \"../decode/motelyItemDecoder.js\";\n\nexport interface JamlyzerViewProps {\n result: MotelyJamlyzerSeedResult;\n deck?: MotelyDeck;\n stake?: MotelyStake;\n maxAnte?: number;\n}\n\nfunction splitCamelCase(key: string): string {\n return key.replace(/([A-Z])/g, \" $1\").trim();\n}\n\nfunction packDisplayName(pack: MotelyBoosterPack): string {\n return splitCamelCase(MotelyBoosterPack[pack]);\n}\n\nfunction bossDisplayName(boss: MotelyBossBlind): string {\n return splitCamelCase(MotelyBossBlind[boss]);\n}\n\nfunction tagDisplayName(tag: MotelyTag): string {\n return splitCamelCase(MotelyTag[tag]);\n}\n\nfunction voucherDisplayName(voucher: MotelyVoucher): string {\n return splitCamelCase(MotelyVoucher[voucher]);\n}\n\nfunction deckDisplayName(deck: MotelyDeck): string {\n return splitCamelCase(MotelyDeck[deck]);\n}\n\nfunction stakeDisplayName(stake: MotelyStake): string {\n return splitCamelCase(MotelyStake[stake]);\n}\n\nfunction ItemCard({ value }: { value: number }) {\n const resolved = useMemo(\n () => decodeMotelyItemToJamlCard(value, 0.85),\n [value]\n );\n if (!resolved) return <div className=\"j-analyzer-unknown\">?</div>;\n return (\n <JamlGameCard\n type={resolved.type}\n card={resolved.card}\n hoverTilt\n />\n );\n}\n\nfunction PackSection({ pack }: { pack: MotelyJamlyzerAnteResult[\"packs\"][number] }) {\n return (\n <div className=\"j-analyzer-pack\">\n <div className=\"j-analyzer-pack-header\">\n <span className=\"j-analyzer-pack-name\">{packDisplayName(pack.pack)}</span>\n <span className=\"j-analyzer-pack-count\">{pack.items.length} cards</span>\n </div>\n <div className=\"j-analyzer-card-row\">\n {pack.items.map((item, i) => (\n <ItemCard key={i} value={item.value} />\n ))}\n </div>\n </div>\n );\n}\n\nexport function JamlyzerView({ result, deck, stake, maxAnte = 8 }: JamlyzerViewProps) {\n const [selectedAnte, setSelectedAnte] = useState(1);\n\n const ante = useMemo(\n () => result.antes.find((a) => a.ante === selectedAnte) ?? result.antes[0],\n [result.antes, selectedAnte]\n );\n\n const anteNumbers = useMemo(\n () => Array.from({ length: maxAnte }, (_, i) => i + 1),\n [maxAnte]\n );\n\n if (!ante) return <div className=\"j-analyzer-empty\">No ante data available.</div>;\n\n return (\n <div className=\"j-analyzer\">\n <style>{`\n .j-analyzer {\n --j-analyzer-bg: #1a1b26;\n --j-analyzer-panel: #24283b;\n --j-analyzer-border: #414868;\n --j-analyzer-text: #c0caf5;\n --j-analyzer-muted: #565f89;\n --j-analyzer-accent: #7aa2f7;\n --j-analyzer-radius: 8px;\n display: grid;\n grid-template-columns: 80px 1fr;\n gap: 12px;\n background: var(--j-analyzer-bg);\n color: var(--j-analyzer-text);\n font-family: system-ui, sans-serif;\n padding: 12px;\n border-radius: var(--j-analyzer-radius);\n min-height: 0;\n }\n @media (max-width: 640px) {\n .j-analyzer {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr;\n }\n .j-analyzer-antes {\n flex-direction: row !important;\n overflow-x: auto;\n padding-bottom: 4px;\n }\n }\n .j-analyzer-antes {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .j-analyzer-ante-btn {\n background: var(--j-analyzer-panel);\n border: 1px solid var(--j-analyzer-border);\n color: var(--j-analyzer-text);\n border-radius: var(--j-analyzer-radius);\n padding: 8px 4px;\n cursor: pointer;\n font-size: 13px;\n text-align: center;\n }\n .j-analyzer-ante-btn:hover {\n border-color: var(--j-analyzer-accent);\n }\n .j-analyzer-ante-btn.active {\n background: var(--j-analyzer-accent);\n color: #1a1b26;\n border-color: var(--j-analyzer-accent);\n font-weight: 600;\n }\n .j-analyzer-main {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n }\n .j-analyzer-header {\n background: var(--j-analyzer-panel);\n border: 1px solid var(--j-analyzer-border);\n border-radius: var(--j-analyzer-radius);\n padding: 12px;\n }\n .j-analyzer-header h2 {\n margin: 0 0 6px;\n font-size: 16px;\n }\n .j-analyzer-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 13px;\n color: var(--j-analyzer-muted);\n }\n .j-analyzer-meta span strong {\n color: var(--j-analyzer-text);\n }\n .j-analyzer-section {\n background: var(--j-analyzer-panel);\n border: 1px solid var(--j-analyzer-border);\n border-radius: var(--j-analyzer-radius);\n padding: 12px;\n }\n .j-analyzer-section-title {\n margin: 0 0 10px;\n font-size: 13px;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--j-analyzer-accent);\n }\n .j-analyzer-blinds {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n }\n @media (max-width: 640px) {\n .j-analyzer-blinds {\n grid-template-columns: 1fr;\n }\n }\n .j-analyzer-blind {\n display: flex;\n align-items: center;\n gap: 10px;\n background: rgba(26, 27, 38, 0.5);\n border-radius: var(--j-analyzer-radius);\n padding: 8px;\n }\n .j-analyzer-blind-label {\n font-size: 12px;\n color: var(--j-analyzer-muted);\n min-width: 70px;\n }\n .j-analyzer-card-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n .j-analyzer-pack {\n margin-bottom: 12px;\n }\n .j-analyzer-pack:last-child {\n margin-bottom: 0;\n }\n .j-analyzer-pack-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 8px;\n }\n .j-analyzer-pack-name {\n font-size: 13px;\n font-weight: 600;\n }\n .j-analyzer-pack-count {\n font-size: 11px;\n background: var(--j-analyzer-accent);\n color: #1a1b26;\n padding: 2px 6px;\n border-radius: 999px;\n }\n .j-analyzer-unknown {\n width: 60px;\n height: 80px;\n display: grid;\n place-items: center;\n background: var(--j-analyzer-bg);\n border: 1px solid var(--j-analyzer-border);\n border-radius: var(--j-analyzer-radius);\n color: var(--j-analyzer-muted);\n font-size: 12px;\n }\n .j-analyzer-empty {\n padding: 24px;\n color: var(--j-analyzer-muted);\n }\n `}</style>\n\n <div className=\"j-analyzer-antes\">\n {anteNumbers.map((n) => (\n <button\n key={n}\n className={`j-analyzer-ante-btn ${n === selectedAnte ? \"active\" : \"\"}`}\n onClick={() => setSelectedAnte(n)}\n >\n Ante {n}\n </button>\n ))}\n </div>\n\n <div className=\"j-analyzer-main\">\n <div className=\"j-analyzer-header\">\n <h2>Seed: {result.seed}</h2>\n <div className=\"j-analyzer-meta\">\n <span>\n Score: <strong>{result.score}</strong>\n </span>\n {deck !== undefined && (\n <span>\n Deck: <strong>{deckDisplayName(deck)}</strong>\n </span>\n )}\n {stake !== undefined && (\n <span>\n Stake: <strong>{stakeDisplayName(stake)}</strong>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Blinds</h3>\n <div className=\"j-analyzer-blinds\">\n <div className=\"j-analyzer-blind\">\n <span className=\"j-analyzer-blind-label\">Small Blind</span>\n <JamlTag tagName={tagDisplayName(ante.smallBlindTag)} scale={0.75} />\n </div>\n <div className=\"j-analyzer-blind\">\n <span className=\"j-analyzer-blind-label\">Big Blind</span>\n <JamlTag tagName={tagDisplayName(ante.bigBlindTag)} scale={0.75} />\n </div>\n <div className=\"j-analyzer-blind\">\n <span className=\"j-analyzer-blind-label\">Boss Blind</span>\n <JamlBoss bossName={bossDisplayName(ante.boss)} scale={0.75} />\n </div>\n </div>\n </div>\n\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Voucher</h3>\n <div className=\"j-analyzer-card-row\">\n <JamlVoucher voucherName={voucherDisplayName(ante.voucher)} scale={0.9} />\n </div>\n </div>\n\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Shop</h3>\n <div className=\"j-analyzer-card-row\">\n {ante.shopItems.map((item, i) => (\n <ItemCard key={i} value={item.value} />\n ))}\n </div>\n </div>\n\n {ante.packs.length > 0 && (\n <div className=\"j-analyzer-section\">\n <h3 className=\"j-analyzer-section-title\">Packs</h3>\n {ante.packs.map((pack, i) => (\n <PackSection key={i} pack={pack} />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const DECK_SPRITE_POS: Record<string, { x: number; y: number }> = {\n red: { x: 0, y: 0 },\n nebula: { x: 3, y: 0 },\n locked: { x: 4, y: 0 },\n blue: { x: 0, y: 2 },\n yellow: { x: 1, y: 2 },\n green: { x: 2, y: 2 },\n black: { x: 3, y: 2 },\n plasma: { x: 4, y: 2 },\n ghost: { x: 6, y: 2 },\n magic: { x: 0, y: 3 },\n checkered: { x: 1, y: 3 },\n erratic: { x: 2, y: 3 },\n abandoned: { x: 3, y: 3 },\n painted: { x: 4, y: 3 },\n challenge: { x: 0, y: 4 },\n anaglyph: { x: 2, y: 4 },\n zodiac: { x: 3, y: 4 },\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const STAKE_SPRITE_POS: Record<string, { x: number; y: number }> = {\n white: { x: 1, y: 0 },\n red: { x: 2, y: 0 },\n green: { x: 3, y: 0 },\n blue: { x: 4, y: 0 },\n black: { x: 0, y: 1 },\n purple: { x: 1, y: 1 },\n orange: { x: 2, y: 1 },\n gold: { x: 3, y: 1 },\n}\n\nconst SPRITE_WIDTH = 142\nconst SPRITE_HEIGHT = 190\nconst DECK_COLS = 7\nconst DECK_ROWS = 5\nconst STICKER_COLS = 5\nconst STICKER_ROWS = 3\n\nexport interface DeckSpriteProps {\n /** Deck name — case-insensitive, \"Deck\" suffix tolerated (e.g. \"Erratic Deck\" → \"erratic\"). */\n deck: string\n /** Optional stake name to overlay its sticker on the deck. */\n stake?: string\n /** Rendered width in pixels. Height is scaled proportionally from the 142x190 sprite. */\n size?: number\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * Balatro deck box sprite — optionally overlaid with a stake sticker.\n * Draws from the Enhancers.png atlas (deck thumbnails live in the bottom\n * two rows) and stickers.png for the stake band. Uses jaml-ui's\n * `resolveJamlAssetUrl` so consumers can override the asset base URL.\n */\nexport function DeckSprite({ deck, stake, size = 50, className = '', style }: DeckSpriteProps) {\n const deckKey = (deck || 'erratic').toLowerCase().replace(/\\s*deck$/, '').trim()\n const deckPos = DECK_SPRITE_POS[deckKey] ?? DECK_SPRITE_POS.erratic\n const stakePos = stake ? STAKE_SPRITE_POS[stake.toLowerCase().replace(/\\s*stake$/, '').trim()] : null\n\n const scale = size / SPRITE_WIDTH\n const displayHeight = SPRITE_HEIGHT * scale\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n width: size,\n height: displayHeight,\n ...style,\n }}\n >\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('enhancers')})`,\n backgroundSize: `${DECK_COLS * 100}% ${DECK_ROWS * 100}%`,\n backgroundPosition: `${(deckPos.x / (DECK_COLS - 1)) * 100}% ${(deckPos.y / (DECK_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n {stakePos ? (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n backgroundImage: `url(${resolveJamlAssetUrl('stickers')})`,\n backgroundSize: `${STICKER_COLS * 100}% ${STICKER_ROWS * 100}%`,\n backgroundPosition: `${(stakePos.x / (STICKER_COLS - 1)) * 100}% ${(stakePos.y / (STICKER_ROWS - 1)) * 100}%`,\n backgroundRepeat: 'no-repeat',\n imageRendering: 'pixelated',\n }}\n />\n ) : null}\n </div>\n )\n}\n","// Single canonical form per value. No case tolerance, no abbreviations.\n// Value strings match the keys used by RANK_MAP / SUIT_MAP / ENHANCER_MAP /\n// SEAL_MAP / EDITION_MAP so no aliasing/normalization is needed at render time.\n\nexport const CardSuit = {\n Hearts: 'Hearts',\n Diamonds: 'Diamonds',\n Clubs: 'Clubs',\n Spades: 'Spades',\n} as const\nexport type CardSuit = typeof CardSuit[keyof typeof CardSuit]\n\nexport const CardRank = {\n Two: '2',\n Three: '3',\n Four: '4',\n Five: '5',\n Six: '6',\n Seven: '7',\n Eight: '8',\n Nine: '9',\n Ten: '10',\n Jack: 'Jack',\n Queen: 'Queen',\n King: 'King',\n Ace: 'Ace',\n} as const\nexport type CardRank = typeof CardRank[keyof typeof CardRank]\n\nexport const CardEnhancement = {\n Bonus: 'Bonus',\n Mult: 'Mult',\n Wild: 'Wild',\n Glass: 'Glass',\n Steel: 'Steel',\n Stone: 'Stone',\n Gold: 'Gold',\n Lucky: 'Lucky',\n} as const\nexport type CardEnhancement = typeof CardEnhancement[keyof typeof CardEnhancement]\n\nexport const CardSeal = {\n Gold: 'Gold',\n Red: 'Red',\n Blue: 'Blue',\n Purple: 'Purple',\n} as const\nexport type CardSeal = typeof CardSeal[keyof typeof CardSeal]\n\nexport const CardEdition = {\n Foil: 'Foil',\n Holographic: 'Holographic',\n Polychrome: 'Polychrome',\n Negative: 'Negative',\n} as const\nexport type CardEdition = typeof CardEdition[keyof typeof CardEdition]\n","'use client'\n\nimport React from 'react'\nimport { resolveJamlAssetUrl } from '../assets.js'\nimport { RANK_MAP, SUIT_MAP, ENHANCER_MAP, SEAL_MAP, EDITION_MAP, type SpritePos } from '../sprites/spriteData.js'\nimport { CardEdition, type CardSuit, type CardRank, type CardEnhancement, type CardSeal } from './cardEnums.js'\n\n// ── Sprite geometry ────────────────────────────────────────────────────────\n\nconst CARD_WIDTH = 71\nconst CARD_HEIGHT = 95\n\ninterface StandardCardProps {\n suit?: CardSuit\n rank?: CardRank\n name?: string\n enhancement?: CardEnhancement\n seal?: CardSeal\n edition?: CardEdition\n className?: string\n size?: number\n style?: React.CSSProperties\n}\n\nfunction parseStandardcardName(name: string): { rank: CardRank; suit: CardSuit } | null {\n const match = /^(.*?)(?:\\s+of\\s+|\\s+)(.*?)$/i.exec(name.trim())\n if (!match) return null\n const rawRank = match[1].trim()\n const rawSuit = match[2].trim()\n const rank = (rawRank === 'A' ? 'Ace' : rawRank === 'K' ? 'King' : rawRank === 'Q' ? 'Queen' : rawRank === 'J' ? 'Jack' : rawRank) as CardRank\n const suit = rawSuit.charAt(0).toUpperCase() + rawSuit.slice(1).toLowerCase() as CardSuit\n return RANK_MAP[rank] !== undefined && SUIT_MAP[suit] !== undefined ? { rank, suit } : null\n}\n\nexport function StandardCard({\n suit,\n rank,\n name,\n enhancement,\n seal,\n edition,\n className,\n size = 71,\n style,\n}: StandardCardProps) {\n const parsed = !rank || !suit ? (name ? parseStandardcardName(name) : null) : null\n const finalRank = rank ?? parsed?.rank\n const finalSuit = suit ?? parsed?.suit\n const col = finalRank ? RANK_MAP[finalRank] : undefined\n const row = finalSuit ? SUIT_MAP[finalSuit] : undefined\n\n if (col === undefined || row === undefined) {\n console.warn(`Invalid card: ${finalRank} of ${finalSuit}`)\n return null\n }\n\n const scale = size / CARD_WIDTH\n const finalH = size * (CARD_HEIGHT / CARD_WIDTH)\n\n const bgX = -col * CARD_WIDTH\n const bgY = -row * CARD_HEIGHT\n\n // Cell (1,0) of the enhancer sheet is the plain blank card body — used as\n // the base layer behind every card so transparent regions of the deck face\n // sprite don't reveal whatever is behind. Cell (0,0) is a red-card sprite,\n // NOT a blank base — do not fall back to it.\n const PLAIN_BASE: SpritePos = { x: 1, y: 0 }\n const enhPos: SpritePos = enhancement ? ENHANCER_MAP[enhancement] ?? PLAIN_BASE : PLAIN_BASE\n const sealPos = seal ? SEAL_MAP[seal] ?? null : null\n const editionCol = edition ? EDITION_MAP[edition] : undefined\n\n const isNegative = edition === CardEdition.Negative\n const baseFilter = isNegative ? 'invert(0.94)' : 'none'\n\n const enhancersUrl = resolveJamlAssetUrl('enhancers')\n const deckUrl = resolveJamlAssetUrl('deck')\n const editionsUrl = resolveJamlAssetUrl('editions')\n\n const layerBase: React.CSSProperties = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: CARD_WIDTH,\n height: CARD_HEIGHT,\n transform: `scale(${scale})`,\n transformOrigin: 'top left',\n backgroundRepeat: 'no-repeat',\n }\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n display: 'inline-block',\n overflow: 'hidden',\n userSelect: 'none',\n width: size,\n height: finalH,\n imageRendering: 'pixelated',\n ...style,\n }}\n title={`${rank} of ${suit}${enhancement ? ` (${enhancement})` : ''}${seal ? ` [${seal} seal]` : ''}${edition ? ` {${edition}}` : ''}`}\n >\n {/* Card base — plain blank card body from cell (1,0) of the enhancer\n sheet, replaced by the mapped sprite when an enhancement is set. */}\n <div\n style={{\n ...layerBase,\n zIndex: 0,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-enhPos.x * CARD_WIDTH}px ${-enhPos.y * CARD_HEIGHT}px`,\n }}\n />\n\n {/* Card face */}\n <div\n style={{\n ...layerBase,\n zIndex: 1,\n backgroundImage: `url(${deckUrl})`,\n backgroundPosition: `${bgX}px ${bgY}px`,\n filter: baseFilter,\n }}\n />\n\n {/* Edition overlay */}\n {edition && edition !== CardEdition.Negative && editionCol !== undefined && (\n <div\n style={{\n ...layerBase,\n zIndex: 2,\n mixBlendMode: 'screen',\n opacity: 0.6,\n backgroundImage: `url(${editionsUrl})`,\n backgroundPosition: `${-editionCol * CARD_WIDTH}px 0px`,\n }}\n />\n )}\n\n {/* Seal overlay */}\n {sealPos && (\n <div\n style={{\n ...layerBase,\n zIndex: 3,\n backgroundImage: `url(${enhancersUrl})`,\n backgroundPosition: `${-sealPos.x * CARD_WIDTH}px ${-sealPos.y * CARD_HEIGHT}px`,\n }}\n />\n )}\n\n {/* Negative tint */}\n {isNegative && (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n zIndex: 4,\n background: 'rgba(239, 68, 68, 0.1)',\n mixBlendMode: 'overlay',\n pointerEvents: 'none',\n }}\n />\n )}\n </div>\n )\n}\n","import type React from \"react\";\nimport { type ReactNode, Fragment } from \"react\";\n\n/**\n * json-render — Zero-dependency JSON-to-React engine.\n *\n * A JsonNode is a plain JSON object describing a UI tree.\n * A Registry maps type names to React components.\n * render() walks the tree and returns React nodes.\n */\n\nexport interface JsonNode {\n type: string;\n props?: Record<string, unknown>;\n children?: JsonNode[];\n}\n\nexport type ComponentProps<P = Record<string, unknown>> = P & {\n children?: ReactNode;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Registry = Record<string, React.ComponentType<any>>;\n\n/**\n * Render a JsonNode tree using the provided Registry.\n *\n * Unknown types log a warning and render null (graceful degradation).\n * Each child gets a stable key from its index in the children array.\n */\nexport function render(node: JsonNode, registry: Registry): ReactNode {\n const Component = registry[node.type];\n\n if (!Component) {\n console.warn(`[json-render] Unknown type: \"${node.type}\"`);\n return null;\n }\n\n const children = node.children?.map((child, i) => (\n <Fragment key={i}>{render(child, registry)}</Fragment>\n ));\n\n return <Component {...(node.props ?? {})}>{children}</Component>;\n}\n\n/**\n * Render a list of JsonNode trees.\n */\nexport function renderList(\n nodes: JsonNode[],\n registry: Registry\n): ReactNode[] {\n return nodes.map((node, i) => (\n <Fragment key={i}>{render(node, registry)}</Fragment>\n ));\n}\n\n/**\n * Type-safe catalog builder.\n *\n * Just returns the catalog object as-is, but enforces types at compile time.\n * No runtime overhead. No zod. Just TypeScript.\n */\nexport function defineCatalog<C extends Record<string, { props?: object; description?: string }>>(\n catalog: C\n): C {\n return catalog;\n}\n","import { defineCatalog } from \"./engine\";\nimport type { BadgeTone } from \"./components/layout.js\";\n\n/**\n * Balatro Catalog — Component vocabulary for AI-generated UI.\n *\n * Type-safe at compile time. Zero runtime overhead.\n * The AI sees these names + descriptions + prop shapes.\n */\nexport const balatroCatalog = defineCatalog({\n // ── Layout ──\n Panel: {\n props: {} as {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n },\n description:\n \"A framed panel with optional title. Use for grouping related content.\",\n },\n Stack: {\n props: {} as {\n gap?: number; // default 12\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"; // default stretch\n className?: string;\n },\n description: \"Vertical stack with configurable gap. The default layout primitive.\",\n },\n Grid: {\n props: {} as {\n columns?: number; // 1-4, default 3\n gap?: number; // default 16\n className?: string;\n },\n description:\n \"Grid layout for cards and results. Responsive: 1 col mobile, 2 tablet, 3+ desktop.\",\n },\n Text: {\n props: {} as {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n },\n description: \"Styled text. Use variant for semantic color, not manual color.\",\n },\n Spacer: {\n props: {} as { size?: number },\n description: \"Vertical spacer. Use instead of empty divs with margin.\",\n },\n Divider: {\n props: {} as { className?: string },\n description: \"Horizontal divider line.\",\n },\n Badge: {\n props: {} as {\n label: string;\n tone?: \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n className?: string;\n },\n description: \"Small colored badge / pill.\",\n },\n\n // ── Status & Feedback ──\n SearchStats: {\n props: {} as {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n },\n description: \"Live search metrics panel. Shows seeds/sec, matches, status.\",\n },\n ErrorBanner: {\n props: {} as {\n message: string;\n onDismiss?: boolean; // if true, show X button\n },\n description: \"Error state banner. Dismissible if onDismiss is true.\",\n },\n LoadingPulse: {\n props: {} as { text?: string },\n description: \"Loading skeleton with optional text.\",\n },\n\n // ── Results ──\n SeedCard: {\n props: {} as {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // if true, seed is clickable\n },\n description:\n \"A seed result card. Shows seed code, score, jokers, highlights. Tap to expand.\",\n },\n SeedList: {\n props: {} as {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n },\n description: \"Paginated list of seed results. Use when results > 20.\",\n },\n JokerBadge: {\n props: {} as {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n },\n description: \"Small joker name pill with rarity color.\",\n },\n EditionBadge: {\n props: {} as {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n },\n description: \"Edition badge with appropriate color (blue, green, purple, red).\",\n },\n\n // ── Game Cards (via jaml-ui) ──\n JamlGameCard: {\n props: {} as {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n },\n description: \"Renders a real Balatro card using jaml-ui's sprite system.\",\n },\n\n // ── Mascot ──\n JammyMascot: {\n props: {} as {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: { label: string; action: string; tone?: BadgeTone }[];\n onMenuAction?: boolean; // if true, the mascot emits actions\n },\n description:\n \"Jammy — the whimsical seed-mascot. Tap to open an orbital menu of actions.\",\n },\n JammyOrbitalMenu: {\n props: {} as {\n items: { label: string; action: string; tone?: BadgeTone }[];\n radius?: number;\n },\n description: \"Radial menu orbiting a center point. Used by JammyMascot.\",\n },\n\n // ── Encyclopedia / Reference ──\n JokerCard: {\n props: {} as {\n name: string;\n showSynergies?: boolean;\n },\n description:\n \"Full joker info card: name, rarity, cost, effect, strategy, synergies. Queries the knowledge base.\",\n },\n SynergyCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Synergy guide card: jokers involved, setup steps, math breakdown, boss counters, difficulty rating.\",\n },\n BossBlindCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Boss blind info card: effect, category, threat level, counters, JAML filter string.\",\n },\n DeckCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Deck info card: effect, strategy, synergies, difficulty rating.\",\n },\n StakeCard: {\n props: {} as {\n name: string;\n },\n description:\n \"Stake difficulty card: effect, strategy, difficulty rating.\",\n },\n StrategyAdvisor: {\n props: {} as {\n jokers: string[];\n },\n description:\n \"Takes a list of joker names and recommends strategies, warns about boss blinds, and suggests synergies.\",\n },\n});\n\nexport type BalatroCatalog = typeof balatroCatalog;\nexport type BalatroComponentName = keyof BalatroCatalog;\n\n/**\n * Extract the props type for a given catalog component.\n */\nexport type CatalogProps<K extends BalatroComponentName> =\n BalatroCatalog[K] extends { props: infer P } ? P : never;\n","import React from \"react\";\n\n/**\n * Layout primitives — Panel, Stack, Grid, Text, Spacer, Divider, Badge.\n *\n * All use CSS custom properties from jimbo-tokens.css.\n * No external classes. No BEM. Just inline styles + tokens.\n */\n\n/* ─── Panel ─── */\nexport interface PanelProps {\n title?: string;\n subtitle?: string;\n variant?: \"default\" | \"accent\" | \"muted\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Panel: React.FC<PanelProps> = ({\n title,\n subtitle,\n variant = \"default\",\n className = \"\",\n children,\n}) => {\n const bg =\n variant === \"accent\"\n ? \"var(--j-dark-blue)\"\n : variant === \"muted\"\n ? \"var(--j-surface-inset)\"\n : \"var(--j-surface)\";\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: bg,\n padding: \"var(--j-space-4)\",\n boxShadow: \"var(--j-shadow)\",\n }}\n >\n {title && (\n <h3\n style={{\n color: \"var(--j-blue)\",\n fontSize: \"var(--j-text-lg)\",\n margin: \"0 0 var(--j-space-2) 0\",\n fontFamily: \"var(--j-font)\",\n }}\n >\n {title}\n </h3>\n )}\n {subtitle && (\n <p\n style={{\n color: \"var(--j-grey)\",\n fontSize: \"var(--j-text-sm)\",\n margin: \"0 0 var(--j-space-3) 0\",\n opacity: 0.8,\n }}\n >\n {subtitle}\n </p>\n )}\n {children}\n </div>\n );\n};\n\n/* ─── Stack ─── */\nexport interface StackProps {\n gap?: number;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\";\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Stack: React.FC<StackProps> = ({\n gap = 12,\n align = \"stretch\",\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap,\n alignItems: align,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Grid ─── */\nexport interface GridProps {\n columns?: number;\n gap?: number;\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const Grid: React.FC<GridProps> = ({\n columns = 3,\n gap = 16,\n className = \"\",\n children,\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap,\n width: \"100%\",\n }}\n >\n {children}\n </div>\n );\n};\n\n/* ─── Text ─── */\nexport interface TextProps {\n body: string;\n variant?: \"title\" | \"body\" | \"muted\" | \"accent\" | \"error\";\n className?: string;\n children?: React.ReactNode; // allows wrapping text in spans\n}\n\nexport const Text: React.FC<TextProps> = ({\n body,\n variant = \"body\",\n className = \"\",\n children,\n}) => {\n const colors: Record<string, string> = {\n title: \"var(--j-gold)\",\n body: \"var(--j-grey)\",\n muted: \"var(--j-dark-grey)\",\n accent: \"var(--j-blue)\",\n error: \"var(--j-red)\",\n };\n\n const sizes: Record<string, string> = {\n title: \"var(--j-text-xl)\",\n body: \"var(--j-text-md)\",\n muted: \"var(--j-text-sm)\",\n accent: \"var(--j-text-md)\",\n error: \"var(--j-text-sm)\",\n };\n\n return (\n <span\n className={className}\n style={{\n color: colors[variant] || colors.body,\n fontSize: sizes[variant] || sizes.body,\n fontFamily: \"var(--j-font)\",\n lineHeight: 1.4,\n }}\n >\n {body}\n {children}\n </span>\n );\n};\n\n/* ─── Spacer ─── */\nexport interface SpacerProps {\n size?: number;\n}\n\nexport const Spacer: React.FC<SpacerProps> = ({ size = 16 }) => {\n return <div style={{ height: size, width: \"100%\" }} />;\n};\n\n/* ─── Divider ─── */\nexport interface DividerProps {\n className?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({ className = \"\" }) => {\n return (\n <div\n className={className}\n style={{\n height: 2,\n background: \"var(--j-panel-edge)\",\n width: \"100%\",\n margin: \"var(--j-space-3) 0\",\n }}\n />\n );\n};\n\n/* ─── Badge ─── */\nexport type BadgeTone = \"red\" | \"blue\" | \"green\" | \"orange\" | \"gold\" | \"purple\" | \"grey\";\n\nexport interface BadgeProps {\n label: string;\n tone?: BadgeTone;\n className?: string;\n}\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n tone = \"grey\",\n className = \"\",\n}) => {\n const toneMap: Record<string, { bg: string; color: string }> = {\n red: { bg: \"var(--j-dark-red)\", color: \"var(--j-red)\" },\n blue: { bg: \"var(--j-dark-blue)\", color: \"var(--j-blue)\" },\n green: { bg: \"var(--j-dark-green)\", color: \"var(--j-green)\" },\n orange: { bg: \"var(--j-dark-orange)\", color: \"var(--j-orange)\" },\n gold: { bg: \"var(--j-dark-orange)\", color: \"var(--j-gold)\" },\n purple: { bg: \"var(--j-dark-purple)\", color: \"var(--j-purple)\" },\n grey: { bg: \"var(--j-surface-inset)\", color: \"var(--j-grey)\" },\n };\n\n const t = toneMap[tone] || toneMap.grey;\n\n return (\n <span\n className={className}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 10px\",\n borderRadius: 999,\n background: t.bg,\n color: t.color,\n fontSize: \"var(--j-text-xs)\",\n fontFamily: \"var(--j-font)\",\n fontWeight: 700,\n letterSpacing: \"0.5px\",\n textTransform: \"uppercase\" as const,\n }}\n >\n {label}\n </span>\n );\n};\n","import { type FC, useState } from \"react\";\nimport { Panel, Stack, Text, Badge, type BadgeTone } from \"./layout.js\";\n\n/**\n * Domain components — SearchStats, ErrorBanner, LoadingPulse, SeedCard, etc.\n *\n * These are Balatro-specific UI components used by the json-render system.\n * All use CSS tokens and the layout primitives above.\n */\n\n/* ─── SearchStats ─── */\nexport interface SearchStatsProps {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n className?: string;\n}\n\nexport const SearchStats: FC<SearchStatsProps> = ({\n status,\n seedsSearched,\n matchesFound,\n seedsPerSecond,\n elapsed,\n className = \"\",\n}) => {\n const statusColor =\n status === \"running\"\n ? \"var(--j-blue)\"\n : status === \"completed\"\n ? \"var(--j-green)\"\n : status === \"error\"\n ? \"var(--j-red)\"\n : \"var(--j-grey)\";\n\n const statusLabel =\n status === \"idle\"\n ? \"Ready\"\n : status === \"running\"\n ? \"Searching...\"\n : status === \"completed\"\n ? \"Done\"\n : \"Error\";\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n }}\n >\n <div\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: statusColor,\n boxShadow: `0 0 8px ${statusColor}`,\n }}\n />\n <Text body={statusLabel} variant=\"accent\" />\n {status === \"running\" && (\n <span\n style={{\n animation: \"pulse 1.5s infinite\",\n color: \"var(--j-blue)\",\n }}\n >\n ...\n </span>\n )}\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(120px, 1fr))\",\n gap: 12,\n }}\n >\n {seedsSearched !== undefined && (\n <div>\n <Text body=\"Searched\" variant=\"muted\" />\n <Text body={seedsSearched} variant=\"title\" />\n </div>\n )}\n {matchesFound !== undefined && (\n <div>\n <Text body=\"Matches\" variant=\"muted\" />\n <Text body={String(matchesFound)} variant=\"title\" />\n </div>\n )}\n {seedsPerSecond !== undefined && (\n <div>\n <Text body=\"Speed\" variant=\"muted\" />\n <Text body={`${seedsPerSecond.toLocaleString()}/s`} variant=\"title\" />\n </div>\n )}\n {elapsed && (\n <div>\n <Text body=\"Time\" variant=\"muted\" />\n <Text body={elapsed} variant=\"title\" />\n </div>\n )}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── ErrorBanner ─── */\nexport interface ErrorBannerProps {\n message: string;\n onDismiss?: boolean;\n className?: string;\n}\n\nexport const ErrorBanner: FC<ErrorBannerProps> = ({\n message,\n onDismiss,\n className = \"\",\n}) => {\n const [dismissed, setDismissed] = useState(false);\n if (dismissed) return null;\n\n return (\n <div\n className={className}\n style={{\n border: \"2px solid var(--j-red)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-dark-red)\",\n padding: \"var(--j-space-3) var(--j-space-4)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <span style={{ color: \"var(--j-red)\", fontSize: \"var(--j-text-lg)\" }}>⚠</span>\n <Text body={message} variant=\"error\" />\n </div>\n {onDismiss && (\n <button\n onClick={() => setDismissed(true)}\n style={{\n background: \"none\",\n border: \"none\",\n color: \"var(--j-red)\",\n cursor: \"pointer\",\n fontSize: \"var(--j-text-lg)\",\n padding: 0,\n lineHeight: 1,\n }}\n aria-label=\"Dismiss error\"\n >\n ×\n </button>\n )}\n </div>\n );\n};\n\n/* ─── LoadingPulse ─── */\nexport interface LoadingPulseProps {\n text?: string;\n className?: string;\n}\n\nexport const LoadingPulse: FC<LoadingPulseProps> = ({\n text = \"Loading...\",\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n padding: \"var(--j-space-5)\",\n }}\n >\n <div\n style={{\n width: 16,\n height: 16,\n borderRadius: \"50%\",\n background: \"var(--j-blue)\",\n animation: \"pulse 1.5s infinite\",\n boxShadow: \"0 0 12px var(--j-blue)\",\n }}\n />\n <Text body={text} variant=\"muted\" />\n </div>\n );\n};\n\n/* ─── SeedCard ─── */\nexport interface SeedCardProps {\n seed: string;\n score?: number;\n rank?: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n onClick?: boolean; // semantic: card is interactive\n className?: string;\n}\n\nexport const SeedCard: FC<SeedCardProps> = ({\n seed,\n score,\n rank,\n highlights,\n jokers,\n edition,\n onClick,\n className = \"\",\n}) => {\n return (\n <div\n className={className}\n onClick={onClick ? () => navigator.clipboard?.writeText(seed) : undefined}\n role={onClick ? \"button\" : undefined}\n tabIndex={onClick ? 0 : undefined}\n style={{\n border: \"2px solid var(--j-panel-edge)\",\n borderRadius: \"var(--j-radius)\",\n background: \"var(--j-surface-inset)\",\n padding: \"var(--j-space-3)\",\n cursor: onClick ? \"pointer\" : \"default\",\n transition: \"var(--j-transition)\",\n position: \"relative\",\n }}\n onMouseEnter={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-blue)\";\n e.currentTarget.style.transform = \"translateY(-2px)\";\n e.currentTarget.style.boxShadow = \"var(--j-shadow)\";\n }\n }}\n onMouseLeave={(e) => {\n if (onClick) {\n e.currentTarget.style.borderColor = \"var(--j-panel-edge)\";\n e.currentTarget.style.transform = \"translateY(0)\";\n e.currentTarget.style.boxShadow = \"none\";\n }\n }}\n >\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n {rank !== undefined && (\n <span\n style={{\n color: \"var(--j-gold)\",\n fontSize: \"var(--j-text-sm)\",\n fontWeight: 700,\n minWidth: 24,\n }}\n >\n #{rank}\n </span>\n )}\n <Text body={seed} variant=\"accent\" />\n </div>\n {score !== undefined && (\n <Badge label={String(score)} tone=\"gold\" />\n )}\n </div>\n\n {edition && <Badge label={edition} tone=\"purple\" />}\n\n {highlights && highlights.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {highlights.map((h, i) => (\n <Badge key={i} label={h} tone=\"green\" />\n ))}\n </div>\n )}\n\n {jokers && jokers.length > 0 && (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {jokers.map((j, i) => (\n <Badge key={i} label={j} tone=\"blue\" />\n ))}\n </div>\n )}\n </Stack>\n </div>\n );\n};\n\n/* ─── SeedList ─── */\nexport interface SeedListProps {\n seeds: string[];\n scores?: number[];\n total?: number;\n pageSize?: number;\n className?: string;\n}\n\nexport const SeedList: FC<SeedListProps> = ({\n seeds,\n scores,\n total,\n pageSize = 20,\n className = \"\",\n}) => {\n const [page, setPage] = useState(0);\n const maxPage = Math.ceil((total ?? seeds.length) / pageSize) - 1;\n const start = page * pageSize;\n const visible = seeds.slice(start, start + pageSize);\n\n return (\n <Stack gap={12} className={className}>\n {visible.map((seed, i) => (\n <SeedCard\n key={seed}\n seed={seed}\n score={scores?.[start + i]}\n rank={start + i + 1}\n onClick={true}\n />\n ))}\n\n {maxPage > 0 && (\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 12,\n alignItems: \"center\",\n padding: \"var(--j-space-3) 0\",\n }}\n >\n <button\n disabled={page <= 0}\n onClick={() => setPage((p) => p - 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page <= 0 ? \"not-allowed\" : \"pointer\",\n opacity: page <= 0 ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n ← Prev\n </button>\n <Text\n body={`${page + 1} / ${maxPage + 1}`}\n variant=\"muted\"\n />\n <button\n disabled={page >= maxPage}\n onClick={() => setPage((p) => p + 1)}\n style={{\n background: \"var(--j-surface-inset)\",\n border: \"2px solid var(--j-panel-edge)\",\n color: \"var(--j-grey)\",\n padding: \"4px 12px\",\n borderRadius: \"var(--j-radius)\",\n cursor: page >= maxPage ? \"not-allowed\" : \"pointer\",\n opacity: page >= maxPage ? 0.5 : 1,\n fontFamily: \"var(--j-font)\",\n }}\n >\n Next →\n </button>\n </div>\n )}\n </Stack>\n );\n};\n\n/* ─── JokerBadge ─── */\nexport interface JokerBadgeProps {\n name: string;\n edition?: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n rarity?: \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\n className?: string;\n}\n\nexport const JokerBadge: FC<JokerBadgeProps> = ({\n name,\n edition,\n rarity,\n className = \"\",\n}) => {\n const rarityTone: Record<string, string> = {\n Common: \"grey\",\n Uncommon: \"green\",\n Rare: \"red\",\n Legendary: \"gold\",\n };\n\n const editionTone: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return (\n <div className={className} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <Badge label={name} tone={(rarityTone[rarity ?? \"\"] as BadgeTone) || \"grey\"} />\n {edition && (\n <Badge label={edition} tone={(editionTone[edition] as BadgeTone) || \"grey\"} />\n )}\n </div>\n );\n};\n\n/* ─── EditionBadge ─── */\nexport interface EditionBadgeProps {\n edition: \"Foil\" | \"Holographic\" | \"Polychrome\" | \"Negative\";\n className?: string;\n}\n\nexport const EditionBadge: FC<EditionBadgeProps> = ({\n edition,\n className = \"\",\n}) => {\n const map: Record<string, string> = {\n Foil: \"blue\",\n Holographic: \"green\",\n Polychrome: \"purple\",\n Negative: \"red\",\n };\n\n return <Badge className={className} label={edition} tone={(map[edition] as BadgeTone) || \"grey\"} />;\n};\n","import type { FC } from \"react\";\nimport {\n JamlGameCard as JamlGameCardImpl,\n type JamlGameCardProps as ImplJamlGameCardProps,\n} from \"../../components/GameCard.js\";\n\n/**\n * Game Card wrapper — bridges json-render to jaml-ui's sprite system.\n */\n\nexport interface JamlGameCardProps {\n type: \"joker\" | \"consumable\" | \"playing\";\n card: {\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n isPerishable?: boolean;\n isRental?: boolean;\n scale?: number;\n };\n className?: string;\n}\n\nexport const JamlGameCard: FC<JamlGameCardProps> = ({\n type,\n card,\n className = \"\",\n}) => {\n return (\n <JamlGameCardImpl\n type={type}\n card={card as ImplJamlGameCardProps[\"card\"]}\n className={className}\n />\n );\n};\n","// The real Jammy mascot artwork (hand-drawn) — a big brown seed with a\n// green sprout and a jester/joker character peeking out from behind it.\n// Embedded as base64 (like fonts.css does for m6x11) so the published npm\n// package is self-contained and needs no consumer-provided /public asset.\nexport const JAMMY_SEED_MASCOT_DATA_URI =\n \"data:image/png;base64,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EIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCECg8AV8zc1mn49JhV9SlBACEIAABCAAASMEZCMyRZ4Q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AAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQwP/fDh0IAAAAAAjytx7kQsiAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDD5bskMAAAKtSURBVBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYGA1EHxh5x0+SvOHAAAAAElFTkSuQmCC\";\n","import { type FC, useState } from \"react\";\nimport { Badge, type BadgeTone } from \"./layout.js\";\nimport { JAMMY_SEED_MASCOT_DATA_URI } from \"./jammySeedMascotImage.js\";\n\nexport interface JammyOrbitalMenuItem {\n label: string;\n action: string;\n tone?: BadgeTone;\n}\n\nexport interface JammyOrbitalMenuProps {\n items: JammyOrbitalMenuItem[];\n onAction?: (action: string) => void;\n radius?: number;\n className?: string;\n}\n\nexport const JammyOrbitalMenu: FC<JammyOrbitalMenuProps> = ({\n items,\n onAction,\n radius = 90,\n className = \"\",\n}) => {\n if (items.length === 0) return null;\n\n const step = (2 * Math.PI) / items.length;\n const start = -Math.PI / 2; // top\n\n return (\n <div\n className={className}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n }}\n >\n {items.map((item, i) => {\n const angle = start + i * step;\n const x = Math.cos(angle) * radius;\n const y = Math.sin(angle) * radius;\n return (\n <button\n key={item.action + i}\n onClick={() => onAction?.(item.action)}\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n transform: `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`,\n pointerEvents: \"auto\",\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: \"pointer\",\n }}\n >\n <Badge label={item.label} tone={item.tone ?? \"blue\"} />\n </button>\n );\n })}\n </div>\n );\n};\n\nexport interface JammyMascotProps {\n mood?: \"idle\" | \"happy\" | \"surprised\";\n size?: number;\n menuItems?: JammyOrbitalMenuItem[];\n onMenuAction?: (action: string) => void;\n className?: string;\n}\n\nexport const JammyMascot: FC<JammyMascotProps> = ({\n mood = \"idle\",\n size = 96,\n menuItems,\n onMenuAction,\n className = \"\",\n}) => {\n const [open, setOpen] = useState(false);\n\n const handleClick = () => {\n if (menuItems && menuItems.length > 0) {\n setOpen((v) => !v);\n }\n };\n\n const animation =\n mood === \"happy\"\n ? \"jammy-bounce\"\n : mood === \"surprised\"\n ? \"jammy-shake\"\n : \"jammy-idle\";\n\n return (\n <div\n className={`${className} ${animation}`.trim()}\n style={{\n position: \"relative\",\n width: size,\n height: size,\n display: \"inline-block\",\n }}\n >\n <button\n onClick={handleClick}\n style={{\n background: \"none\",\n border: \"none\",\n padding: 0,\n cursor: menuItems && menuItems.length > 0 ? \"pointer\" : \"default\",\n width: size,\n height: size,\n }}\n aria-label=\"Jammy mascot\"\n >\n <img\n src={JAMMY_SEED_MASCOT_DATA_URI}\n alt=\"Jammy\"\n draggable={false}\n style={{ width: \"100%\", height: \"100%\", objectFit: \"contain\", display: \"block\" }}\n />\n </button>\n {open && menuItems && (\n <JammyOrbitalMenu\n items={menuItems}\n onAction={(action) => {\n onMenuAction?.(action);\n setOpen(false);\n }}\n radius={size * 0.9}\n />\n )}\n </div>\n );\n};\n","/**\n * Balatro Joker Knowledge Base\n * Extracted from the Master Encyclopedia for json-render reference components.\n */\n\nexport type JokerRarity = \"Common\" | \"Uncommon\" | \"Rare\" | \"Legendary\";\nexport type JokerCategory = \"Copy\" | \"X-Mult\" | \"Flat\" | \"Economy\" | \"Retrigger\" | \"Utility\";\n\nexport interface JokerInfo {\n name: string;\n rarity: JokerRarity;\n cost: number;\n effect: string;\n category: JokerCategory;\n synergies: string[];\n strategy: string;\n jamlKey: string;\n}\n\nexport const JOKERS: Record<string, JokerInfo> = {\n // ── S-Tier: Copy & Retrigger ──\n Blueprint: {\n name: \"Blueprint\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the Joker card directly to its right.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Brainstorm\"],\n strategy: \"Place to the right of your highest-value joker. Works with any joker ability.\",\n jamlKey: \"joker: Blueprint\",\n },\n Brainstorm: {\n name: \"Brainstorm\",\n rarity: \"Rare\",\n cost: 10,\n effect: \"Copies the ability of the leftmost Joker currently held.\",\n category: \"Copy\",\n synergies: [\"Baron\", \"Mime\", \"Triboulet\", \"Blueprint\"],\n strategy: \"Place your highest-value joker in the leftmost slot for maximum value.\",\n jamlKey: \"joker: Brainstorm\",\n },\n \"Sock & Buskin\": {\n name: \"Sock & Buskin\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played Face Cards exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Hanging Chad\", \"Triboulet\", \"Baron\"],\n strategy: \"Essential for face-card builds. Doubles all face card triggers.\",\n jamlKey: \"joker: Sock & Buskin\",\n },\n \"Hanging Chad\": {\n name: \"Hanging Chad\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Retriggers the first played card scored in a hand exactly 2 additional times.\",\n category: \"Retrigger\",\n synergies: [\"Photograph\", \"Glass Card\", \"Red Seal\", \"Bloodstone\"],\n strategy: \"Place your highest-value card in the leftmost scoring position.\",\n jamlKey: \"joker: Hanging Chad\",\n },\n Hack: {\n name: \"Hack\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played 2s, 3s, 4s, and 5s exactly once.\",\n category: \"Retrigger\",\n synergies: [\"Wee Joker\", \"Ride the Bus\", \"Steel Card\"],\n strategy: \"Build a low-card deck. Each 2-5 retriggers for extra scoring.\",\n jamlKey: \"joker: Hack\",\n },\n Mime: {\n name: \"Mime\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all card held-in-hand abilities (Steel, Gold, Baron, Baron).\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Steel Card\", \"Gold Card\", \"Blueprint\"],\n strategy: \"The cornerstone of exponential scaling. Hold Steel Kings for (1.5)^4 per card.\",\n jamlKey: \"joker: Mime\",\n },\n Dusk: {\n name: \"Dusk\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Retriggers all played cards scored in the final hand of any round.\",\n category: \"Retrigger\",\n synergies: [\"Baron\", \"Triboulet\", \"Bloodstone\", \"The Idol\"],\n strategy: \"Save your best hand for last. All cards in final hand retrigger.\",\n jamlKey: \"joker: Dusk\",\n },\n\n // ── X-Mult Jokers ──\n Baron: {\n name: \"Baron\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Each King held in hand grants X1.5 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Mime\", \"Steel Card\", \"Blueprint\", \"Brainstorm\", \"Sock & Buskin\"],\n strategy: \"Hold as many Steel Kings as possible. With Mime: (1.5)^4 per King. 8 Kings = 431,439x.\",\n jamlKey: \"joker: Baron\",\n },\n Triboulet: {\n name: \"Triboulet\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Each King and Queen played and scored grants X2 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Sock & Buskin\", \"Dusk\", \"Red Seal\", \"Blueprint\"],\n strategy: \"Play face-card heavy hands. Each King/Queen is a 2x multiplier.\",\n jamlKey: \"joker: Triboulet\",\n },\n \"The Idol\": {\n name: \"The Idol\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X2 Mult for each card scored matching a random Rank+Suit (changes every round).\",\n category: \"X-Mult\",\n synergies: [\"Ouija\", \"Sigil\", \"Death\"],\n strategy: \"Homogenize your deck to match the Idol's target. Use Ouija/Sigil to force match.\",\n jamlKey: \"joker: The Idol\",\n },\n Bloodstone: {\n name: \"Bloodstone\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"1 in 2 chance for played Heart cards to grant X1.5 Mult when scored.\",\n category: \"X-Mult\",\n synergies: [\"Oops! All 6s\", \"The Sun\", \"Hearts suit builds\"],\n strategy: \"Convert deck to Hearts. With Oops! All 6s: 100% proc rate.\",\n jamlKey: \"joker: Bloodstone\",\n },\n Vampire: {\n name: \"Vampire\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Permanently gains X0.2 Mult for each enhanced card scored, stripping the enhancement.\",\n category: \"X-Mult\",\n synergies: [\"Midas Mask\", \"Gold Card\", \"Aura\"],\n strategy: \"Score Gold cards every round. Midas Mask paints them, Vampire consumes them for +X0.2 each.\",\n jamlKey: \"joker: Vampire\",\n },\n Hologram: {\n name: \"Hologram\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.25 Mult every time a playing card is permanently added to the deck.\",\n category: \"X-Mult\",\n synergies: [\"Cryptid\", \"Holographic\", \"DNA\"],\n strategy: \"Add cards to deck via Cryptid or packs. Each addition is a permanent 0.25x multiplier.\",\n jamlKey: \"joker: Hologram\",\n },\n Constellation: {\n name: \"Constellation\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Gains X0.1 Mult every time a Planet card is used.\",\n category: \"X-Mult\",\n synergies: [\"Observatory\", \"Perkeo\", \"Planet Merchant\"],\n strategy: \"Use planets every round. Stack with Observatory for planet duplication.\",\n jamlKey: \"joker: Constellation\",\n },\n Cavendish: {\n name: \"Cavendish\",\n rarity: \"Common\",\n cost: 4,\n effect: \"X3 Mult. 1 in 1000 chance to self-destruct.\",\n category: \"X-Mult\",\n synergies: [\"Eternal\", \"Blueprint\"],\n strategy: \"High-risk, high-reward. Get Eternal edition to prevent destruction. Copy with Blueprint.\",\n jamlKey: \"joker: Cavendish\",\n },\n\n // ── Flat Mult / Chip Scaling ──\n Stuntman: {\n name: \"Stuntman\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"+250 Chips, but permanently reduces hand size by 2.\",\n category: \"Flat\",\n synergies: [\"Plasma Deck\", \"Paint Brush\", \"Palette\"],\n strategy: \"On Plasma Deck: (Chips+Mult)/2 scoring makes flat chips incredibly valuable.\",\n jamlKey: \"joker: Stuntman\",\n },\n Bull: {\n name: \"Bull\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+2 Chips for every $1 currently held.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bootstraps\"],\n strategy: \"Hoard cash. With $1000, Bull gives +2000 Chips. Stack with interest vouchers.\",\n jamlKey: \"joker: Bull\",\n },\n Bootstraps: {\n name: \"Bootstraps\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"+4 Mult for every $5 held in capital.\",\n category: \"Flat\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\", \"Bull\"],\n strategy: \"Economic scaling. With $1000, Bootstraps gives +800 Mult.\",\n jamlKey: \"joker: Bootstraps\",\n },\n \"Wee Joker\": {\n name: \"Wee Joker\",\n rarity: \"Rare\",\n cost: 8,\n effect: \"Starts at +10 Chips. Gains +8 Chips every time a 2 is scored.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Cryptid\"],\n strategy: \"Score 2s every round. With Hack, each 2 triggers twice for +16 Chips.\",\n jamlKey: \"joker: Wee Joker\",\n },\n \"Joker Stencil\": {\n name: \"Joker Stencil\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"X1 Mult for each empty Joker slot (counts itself as empty).\",\n category: \"Flat\",\n synergies: [\"Blank\", \"Antimatter\", \"Ectoplasm\"],\n strategy: \"Deliberately leave joker slots empty. With Antimatter voucher: +1 slot, +1x multiplier.\",\n jamlKey: \"joker: Joker Stencil\",\n },\n \"Green Joker\": {\n name: \"Green Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per hand played, +12 Chips per discard remaining. Loses 1 Mult per discard used.\",\n category: \"Flat\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Save discards. With Recyclomancy (+2 discards), start each round with +24 Chips.\",\n jamlKey: \"joker: Green Joker\",\n },\n \"Ride the Bus\": {\n name: \"Ride the Bus\",\n rarity: \"Common\",\n cost: 4,\n effect: \"+1 Mult per consecutive hand played without scoring a Face Card. Resets to 0 on Face Card.\",\n category: \"Flat\",\n synergies: [\"Hack\", \"DNA\", \"Steel Card\"],\n strategy: \"Avoid face cards. Build a low-card deck with Hack for retriggered 2s-5s.\",\n jamlKey: \"joker: Ride the Bus\",\n },\n\n // ── Economy ──\n \"Golden Joker\": {\n name: \"Golden Joker\",\n rarity: \"Common\",\n cost: 4,\n effect: \"Earn $4 at end of round.\",\n category: \"Economy\",\n synergies: [\"Bull\", \"Bootstraps\", \"Money Tree\", \"Seed Money\"],\n strategy: \"Stack multiple copies for massive per-round income. $4 per copy, per round.\",\n jamlKey: \"joker: Golden Joker\",\n },\n \"Matador\": {\n name: \"Matador\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $8 if played hand triggers the Boss Blind's ability.\",\n category: \"Economy\",\n synergies: [\"The Ox\", \"The Tooth\", \"The Arm\"],\n strategy: \"Intentionally trigger boss abilities for $8 payouts. High-risk, high-reward economy.\",\n jamlKey: \"joker: Matador\",\n },\n \"To the Moon\": {\n name: \"To the Moon\",\n rarity: \"Uncommon\",\n cost: 6,\n effect: \"Earn $1 extra interest for every $5 held at end of round.\",\n category: \"Economy\",\n synergies: [\"Money Tree\", \"Seed Money\", \"Golden Joker\"],\n strategy: \"Maximize interest cap. With Money Tree ($20 cap), hold $100+ for maximum returns.\",\n jamlKey: \"joker: To the Moon\",\n },\n\n // ── Legendary Jokers (Soul-exclusive) ──\n Canio: {\n name: \"Canio\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"When a played Face Card is destroyed, gains X1 Mult.\",\n category: \"X-Mult\",\n synergies: [\"Glass Card\", \"Justice\", \"Hologram\"],\n strategy: \"Play and destroy Glass face cards. Each destruction is a permanent 1x multiplier.\",\n jamlKey: \"joker: Canio\",\n },\n Perkeo: {\n name: \"Perkeo\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"At end of shop, duplicates 1 random held consumable with Negative edition.\",\n category: \"Utility\",\n synergies: [\"Observatory\", \"Pluto\", \"Crystal Ball\", \"Omen Globe\"],\n strategy: \"The infinite engine. Hold 1 Pluto, get 2 Plutos next round. Stack to 100+ Negative Plutos.\",\n jamlKey: \"joker: Perkeo\",\n },\n Chicot: {\n name: \"Chicot\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Disables the effect of the current Boss Blind.\",\n category: \"Utility\",\n synergies: [\"The Manacle\", \"Blueprint\", \"Brainstorm\"],\n strategy: \"Essential for survival against counter bosses. Copy with Blueprint for permanent boss nullification.\",\n jamlKey: \"joker: Chicot\",\n },\n Yorick: {\n name: \"Yorick\",\n rarity: \"Legendary\",\n cost: 20,\n effect: \"Gains X1 Mult every 5 discards used.\",\n category: \"X-Mult\",\n synergies: [\"Wasteful\", \"Recyclomancy\", \"Hit the Road\"],\n strategy: \"Use discards aggressively. With Recyclomancy (+2 discards), scale faster.\",\n jamlKey: \"joker: Yorick\",\n },\n};\n\n/** Get joker info by name. Returns undefined if not found. */\nexport function getJoker(name: string): JokerInfo | undefined {\n return JOKERS[name] ?? Object.values(JOKERS).find((j) => j.name === name);\n}\n\n/** Get all jokers in a category. */\nexport function getJokersByCategory(category: JokerCategory): JokerInfo[] {\n return Object.values(JOKERS).filter((j) => j.category === category);\n}\n\n/** Get jokers that synergize with a given joker. */\nexport function getSynergies(jokerName: string): JokerInfo[] {\n const joker = getJoker(jokerName);\n if (!joker) return [];\n return joker.synergies\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n}\n","/**\n * Balatro Synergy Knowledge Base\n * Meta combinations and their mathematical breakdowns.\n */\n\nexport interface SynergyInfo {\n name: string;\n jokers: string[];\n description: string;\n math: string;\n setup: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Legendary\";\n bossCounters: string[];\n tags: string[];\n}\n\nexport const SYNERGIES: SynergyInfo[] = [\n {\n name: \"Baron + Mime Exponential Loop\",\n jokers: [\"Baron\", \"Mime\"],\n description:\n \"The ultimate mathematical engine. Hold Steel Kings in hand. Each King grants X1.5 from Steel and X1.5 from Baron. Mime retriggers both.\",\n math: \"1 Steel King = (1.5)^4 = X5.06. 8 Kings = (1.5)^32 = X431,439. With Blueprint/Brainstorm: exponents in thousands.\",\n setup: [\n \"Find Baron and Mime\",\n \"Get The Chariot (Steel) or find Steel-enhanced Kings\",\n \"Hold as many Steel Kings as possible in hand\",\n \"Copy with Blueprint or Brainstorm for additional multipliers\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Manacle\", \"The Psychic\"],\n tags: [\"endless\", \"steel\", \"x-mult\", \"s-tier\"],\n },\n {\n name: \"Photochad Retrigger\",\n jokers: [\"Photograph\", \"Hanging Chad\"],\n description:\n \"Cheap, efficient early-game burst. Photograph gives X2 on first face card. Hanging Chad retriggers that card 2 more times.\",\n math: \"X2 × X2 × X2 = X8 Mult on first face card. With Glass: 8 × 2 = X16. With Red Seal: X32.\",\n setup: [\n \"Get Photograph (Common) and Hanging Chad (Common)\",\n \"Place face card in leftmost scoring position\",\n \"Enhance face card to Glass for additional X2\",\n \"Add Red Seal for another retrigger\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"early-game\", \"burst\", \"cheap\", \"face-cards\"],\n },\n {\n name: \"Observatory Infinite (Perkeo Stack)\",\n jokers: [\"Perkeo\"],\n description:\n \"Perkeo duplicates 1 held consumable at end of shop with Negative edition. Stack Negative Plutos for infinite X1.5 multipliers.\",\n math: \"10 Negative Plutos = (1.5)^10 = X57.66. 100 Plutos = (1.5)^100 ≈ X400 billion. Requires Observatory voucher.\",\n setup: [\n \"Get Perkeo (Legendary)\",\n \"Buy Observatory voucher (Telescope → Observatory)\",\n \"Hold exactly 1 Pluto planet card\",\n \"Perkeo duplicates it every round\",\n \"Play High Card as your dominant hand type\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Ox\", \"The Flint\"],\n tags: [\"endless\", \"consumable\", \"x-mult\", \"legendary\"],\n },\n {\n name: \"Vampire + Midas Mask Economy\",\n jokers: [\"Vampire\", \"Midas Mask\"],\n description:\n \"Midas Mask paints played Face Cards Gold. Vampire consumes the Gold enhancement for +X0.2 Mult permanently. Cards remain for repainting.\",\n math: \"5 Face Cards per round = +X1.0 Mult per round. Sustainable infinite scaling.\",\n setup: [\n \"Get Vampire (Uncommon) and Midas Mask (Uncommon)\",\n \"Play hands with Face Cards every round\",\n \"Midas paints them Gold, Vampire consumes for scaling\",\n \"Cards stay in deck for next round's painting\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Plant\", \"The Ox\"],\n tags: [\"economy\", \"sustainable\", \"x-mult\", \"mid-game\"],\n },\n {\n name: \"Bull + Bootstraps Economic Scaling\",\n jokers: [\"Bull\", \"Bootstraps\"],\n description:\n \"Bull gives +2 Chips per $1 held. Bootstraps gives +4 Mult per $5 held. Both scale with cash hoarding.\",\n math: \"$1000: Bull = +2000 Chips, Bootstraps = +800 Mult. Stack with interest vouchers for $20+ per round.\",\n setup: [\n \"Get Bull and Bootstraps (both Uncommon)\",\n \"Buy Seed Money → Money Tree vouchers ($20 interest cap)\",\n \"Hoard cash, never spend unless necessary\",\n \"Add Golden Joker for +$4 per round per copy\",\n ],\n difficulty: \"Easy\",\n bossCounters: [\"The Ox\", \"The Tooth\"],\n tags: [\"economy\", \"flat\", \"chips\", \"mult\", \"easy\"],\n },\n {\n name: \"Plasma Deck + Stuntman\",\n jokers: [\"Stuntman\"],\n description:\n \"Plasma Deck scores by ((Chips + Mult) / 2)^2. Flat chip additions become exponentially powerful. Stuntman gives +250 Chips.\",\n math: \"Stuntman alone: base 250 chips. With 50 mult: ((250+50)/2)^2 = 22,500. With 100 mult: ((250+100)/2)^2 = 30,625.\",\n setup: [\n \"Select Plasma Deck\",\n \"Get Stuntman (Rare) as early as possible\",\n \"Add any flat mult (Bootstraps, Green Joker)\",\n \"Avoid X-Mult jokers (wasted on Plasma's formula)\",\n ],\n difficulty: \"Medium\",\n bossCounters: [\"The Flint\", \"The Wall\"],\n tags: [\"plasma\", \"chips\", \"exponential\", \"deck-specific\"],\n },\n {\n name: \"Chicot + Manacle Hand Size Exploit\",\n jokers: [\"Chicot\"],\n description:\n \"Multiple Chicots (cloned via Ankh/Blueprint) vs The Manacle Boss. Each Chicot applies +1 Hand Size instead of just nullifying.\",\n math: \"5 Chicots vs Manacle: +5 permanent hand size. 10 Chicots: +10 hand size.\",\n setup: [\n \"Get Chicot (Legendary)\",\n \"Clone with Ankh or Blueprint\",\n \"Fight The Manacle Boss Blind\",\n \"Each Chicot triggers +1 Hand Size independently\",\n ],\n difficulty: \"Legendary\",\n bossCounters: [\"The Manacle\"], // this is the boss you WANT to fight\n tags: [\"exploit\", \"hand-size\", \"legendary\", \"niche\"],\n },\n {\n name: \"Canio Glass Destruction Loop\",\n jokers: [\"Canio\"],\n description:\n \"Canio gains X1 Mult when a played Face Card is destroyed. Glass cards destroy themselves 1 in 4 times when scored.\",\n math: \"Each Glass face card destruction: +X1 Mult. With 20 destroyed face cards: X20 Mult. With Oops! All 6s: destruction rate increases.\",\n setup: [\n \"Get Canio (Legendary)\",\n \"Enhance face cards to Glass (Justice tarot)\",\n \"Play and destroy Glass face cards repeatedly\",\n \"Add Oops! All 6s for higher destruction rate\",\n ],\n difficulty: \"Hard\",\n bossCounters: [\"The Plant\", \"The Flint\"],\n tags: [\"destruction\", \"x-mult\", \"legendary\", \"face-cards\"],\n },\n];\n\n/** Find synergies that involve a specific joker. */\nexport function findSynergies(jokerName: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => j.toLowerCase() === jokerName.toLowerCase())\n );\n}\n\n/** Find synergies by tag. */\nexport function findSynergiesByTag(tag: string): SynergyInfo[] {\n return SYNERGIES.filter((s) =>\n s.tags.some((t) => t.toLowerCase() === tag.toLowerCase())\n );\n}\n\n/** Get recommended synergies for a set of jokers. */\nexport function getRecommendedSynergies(\n jokerNames: string[]\n): SynergyInfo[] {\n const normalized = jokerNames.map((n) => n.toLowerCase());\n return SYNERGIES.filter((s) =>\n s.jokers.some((j) => normalized.includes(j.toLowerCase()))\n ).sort((a, b) => {\n const aMatches = a.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n const bMatches = b.jokers.filter((j) => normalized.includes(j.toLowerCase())).length;\n return bMatches - aMatches; // most matches first\n });\n}\n","/**\n * Balatro Deck & Stake Knowledge Base\n */\n\nexport interface DeckInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n synergies: string[];\n difficulty: \"Easy\" | \"Medium\" | \"Hard\";\n}\n\nexport const DECKS: Record<string, DeckInfo> = {\n Red: {\n name: \"Red Deck\",\n jamlKey: \"Red\",\n effect: \"Grants +1 Discard per round.\",\n strategy:\n \"Excellent baseline for high-consistency discard strategies. Amplifies Hit the Road, Yorick, and Castle.\",\n synergies: [\"Yorick\", \"Hit the Road\", \"Castle\", \"Green Joker\"],\n difficulty: \"Easy\",\n },\n Blue: {\n name: \"Blue Deck\",\n jamlKey: \"Blue\",\n effect: \"Grants +1 Hand per round.\",\n strategy:\n \"Provides stable scoring buffer. Ideal for hands that require deep cycling but need a final play.\",\n synergies: [\"Grabber\", \"Nacho Tong\", \"Dusk\"],\n difficulty: \"Easy\",\n },\n Yellow: {\n name: \"Yellow Deck\",\n jamlKey: \"Yellow\",\n effect: \"Starts with +$10 (total $14 instead of $4).\",\n strategy:\n \"Drastically reduces time to hit $25 interest cap. Highly synergistic with early economic scaling jokers.\",\n synergies: [\"Golden Joker\", \"Bootstraps\", \"Bull\", \"To the Moon\"],\n difficulty: \"Easy\",\n },\n Green: {\n name: \"Green Deck\",\n jamlKey: \"Green\",\n effect:\n \"Interest disabled. Earns $2 per played hand remaining and $1 per discard remaining at end of round.\",\n strategy:\n \"Inverts economic model. Minimize played hands and save discards for maximum payout. Prioritize flat-scoring jokers.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Black: {\n name: \"Black Deck\",\n jamlKey: \"Black\",\n effect: \"Grants +1 Joker slot, but reduces played hands by 1.\",\n strategy:\n \"High-ceiling, high-risk. Early game is extremely punishing. Look for immediate flat chip/mult support to survive Ante 1-2.\",\n synergies: [\"Stuntman\", \"Joker Stencil\", \"Wee Joker\"],\n difficulty: \"Hard\",\n },\n Magic: {\n name: \"Magic Deck\",\n jamlKey: \"Magic\",\n effect:\n \"Starts with Crystal Ball voucher (+1 consumable slot) and two copies of The Fool tarot.\",\n strategy:\n \"Ideal for duplicating early spectral transformations or high-value tarots (Death, The Hermit).\",\n synergies: [\"The Fool\", \"Death\", \"The Hermit\", \"Crystal Ball\"],\n difficulty: \"Medium\",\n },\n Nebula: {\n name: \"Nebula Deck\",\n jamlKey: \"Nebula\",\n effect:\n \"Starts with Telescope voucher (Celestial packs always contain planet for most played hand), but -1 consumable slot.\",\n strategy:\n \"Restricts holding space for Tarots/Spectrals. Forces immediate commits. Synergizes with rapid planetary scaling.\",\n synergies: [\"Constellation\", \"Observatory\", \"Perkeo\", \"Pluto\"],\n difficulty: \"Medium\",\n },\n Zodiac: {\n name: \"Zodiac Deck\",\n jamlKey: \"Zodiac\",\n effect:\n \"Starts with Tarot Merchant, Planet Merchant, and Overstock vouchers pre-equipped.\",\n strategy:\n \"Vastly increases shop variety and consumable spawn rate. Synergizes with economy-heavy seeds for reroll abuse.\",\n synergies: [\"Reroll Surplus\", \"Reroll Glut\", \"Clearance Sale\", \"Liquidation\"],\n difficulty: \"Easy\",\n },\n Ghost: {\n name: \"Ghost Deck\",\n jamlKey: \"Ghost\",\n effect:\n \"Spectral cards can appear in standard shops. Starts with Hex card (applies Polychrome to random Joker, destroys others).\",\n strategy:\n \"Ultimate environment for early Polychrome S-tier jokers. Look for Cryptid, Ectoplasm, Ankh in shops.\",\n synergies: [\"Hex\", \"Ankh\", \"Ectoplasm\", \"Cryptid\", \"The Soul\"],\n difficulty: \"Medium\",\n },\n Checkered: {\n name: \"Checkered Deck\",\n jamlKey: \"Checkered\",\n effect:\n \"Starting deck contains exactly 26 Spades and 26 Hearts (no Diamonds or Clubs).\",\n strategy:\n \"Simplifies flush and flush-five building to near-certainty. Synergizes with Bloodstone, The Idol, and Wrathful/Lusty Joker.\",\n synergies: [\"Bloodstone\", \"The Idol\", \"The Sun\", \"The Star\"],\n difficulty: \"Medium\",\n },\n Painted: {\n name: \"Painted Deck\",\n jamlKey: \"Painted\",\n effect: \"Grants +2 Hand Size, but permanently reduces Joker slots by 1.\",\n strategy:\n \"Maximizes held-in-hand scaling triggers (Baron, Mime, Steel cards). Must account for 4-joker slot limit.\",\n synergies: [\"Baron\", \"Mime\", \"Steel Card\", \"Joker Stencil\"],\n difficulty: \"Hard\",\n },\n Anaglyph: {\n name: \"Anaglyph Deck\",\n jamlKey: \"Anaglyph\",\n effect: \"Grants a Double Tag every time a Boss Blind is defeated.\",\n strategy:\n \"Stack dozens of Double Tags, redeem them simultaneously on a high-value blind skip Tag for massive value.\",\n synergies: [\"Double Tag\", \"Negative Joker\", \"Mega Arcana Pack\"],\n difficulty: \"Medium\",\n },\n Plasma: {\n name: \"Plasma Deck\",\n jamlKey: \"Plasma\",\n effect:\n \"Score = ((Chips + Mult) / 2)^2. Base blind requirements permanently doubled.\",\n strategy:\n \"Fundamentally alters scoring. Flat additions (+Chips or +Mult) are mathematically balanced. Stuntman and Bull are insanely powerful.\",\n synergies: [\"Stuntman\", \"Bull\", \"Bootstraps\", \"Green Joker\"],\n difficulty: \"Hard\",\n },\n Abandoned: {\n name: \"Abandoned Deck\",\n jamlKey: \"Abandoned\",\n effect:\n \"Starting deck contains exactly 40 cards (all 12 face cards removed).\",\n strategy:\n \"Increases probability of low-card straights and pairs. Baron, Triboulet, Photograph are completely inert.\",\n synergies: [\"Hack\", \"Ride the Bus\", \"Wee Joker\", \"DNA\"],\n difficulty: \"Hard\",\n },\n Erratic: {\n name: \"Erratic Deck\",\n jamlKey: \"Erratic\",\n effect:\n \"Starting deck: 52 cards, but all suits and ranks are completely randomized at seed initialization.\",\n strategy:\n \"The only deck where ErraticSuit and ErraticRank JAML rules are valid. Find seeds with high-density ranks (e.g., 18 Aces).\",\n synergies: [\"The Idol\", \"Bloodstone\", \"DNA\", \"Death\"],\n difficulty: \"Medium\",\n },\n};\n\nexport interface StakeInfo {\n name: string;\n jamlKey: string;\n effect: string;\n strategy: string;\n difficulty: \"Easy\" | \"Medium\" | \"Hard\" | \"Expert\";\n}\n\nexport const STAKES: StakeInfo[] = [\n {\n name: \"White Stake\",\n jamlKey: \"White\",\n effect: \"Base configuration. No modifications.\",\n strategy: \"Standard play. Use for learning or testing new strategies.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Red Stake\",\n jamlKey: \"Red\",\n effect: \"Small Blinds provide no monetary reward on victory.\",\n strategy: \"Skips are encouraged to secure early-game Tags.\",\n difficulty: \"Easy\",\n },\n {\n name: \"Green Stake\",\n jamlKey: \"Green\",\n effect: \"Required score scaling accelerates for each successive Ante.\",\n strategy: \"Requires geometric scaling engines by Ante 3.\",\n difficulty: \"Medium\",\n },\n {\n name: \"Black Stake\",\n jamlKey: \"Black\",\n effect: \"Eternal Jokers introduced (30% spawn chance). Cannot be sold or destroyed.\",\n strategy: \"Blocks self-destruct synergies (Madness, Ceremonial Dagger). Avoid these jokers.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Blue Stake\",\n jamlKey: \"Blue\",\n effect: \"Player's baseline discard pool reduced by 1.\",\n strategy: \"Severely impacts discard economies (Merry Andy, Hit the Road, Yorick).\",\n difficulty: \"Medium\",\n },\n {\n name: \"Purple Stake\",\n jamlKey: \"Purple\",\n effect: \"Required scoring accelerates exponentially.\",\n strategy: \"Flat additions become unviable past Ante 4. Need X-Mult or exponential engines.\",\n difficulty: \"Hard\",\n },\n {\n name: \"Orange Stake\",\n jamlKey: \"Orange\",\n effect: \"Perishable Jokers introduced (30% chance). Debuffed after 5 rounds.\",\n strategy: \"Blocks long-term scaling engines (Wee Joker, Constellation). Look for immediate impact.\",\n difficulty: \"Expert\",\n },\n {\n name: \"Gold Stake\",\n jamlKey: \"Gold\",\n effect: \"Rental Jokers introduced (30% chance). Cost $3 per round to maintain.\",\n strategy: \"Massive economic stress. Prioritize interest-generating engines and cheap builds.\",\n difficulty: \"Expert\",\n },\n];\n\nexport function getDeck(name: string): DeckInfo | undefined {\n return DECKS[name] ?? Object.values(DECKS).find((d) => d.name === name);\n}\n\nexport function getStake(name: string): StakeInfo | undefined {\n return STAKES.find(\n (s) => s.name === name || s.jamlKey === name\n );\n}\n","/**\n * Balatro Boss Blind Knowledge Base\n */\n\nexport type BossCategory = \"Debuffer\" | \"Restrictor\" | \"Obfuscator\" | \"Scaler\" | \"Economic\";\n\nexport interface BossInfo {\n name: string;\n jamlKey: string;\n category: BossCategory;\n effect: string;\n counters: string[];\n jamlAvoid: string;\n threatLevel: \"Low\" | \"Medium\" | \"High\" | \"Lethal\";\n}\n\nexport const BOSSES: Record<string, BossInfo> = {\n // ── Debuffers ──\n \"The Club\": {\n name: \"The Club\",\n jamlKey: \"boss: The Club\",\n category: \"Debuffer\",\n effect: \"Debuffs all Club cards.\",\n counters: [\"Non-Club decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Club\",\n threatLevel: \"High\",\n },\n \"The Goad\": {\n name: \"The Goad\",\n jamlKey: \"boss: The Goad\",\n category: \"Debuffer\",\n effect: \"Debuffs all Spade cards.\",\n counters: [\"Non-Spade decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Goad\",\n threatLevel: \"High\",\n },\n \"The Window\": {\n name: \"The Window\",\n jamlKey: \"boss: The Window\",\n category: \"Debuffer\",\n effect: \"Debuffs all Diamond cards.\",\n counters: [\"Non-Diamond decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Window\",\n threatLevel: \"High\",\n },\n \"The Head\": {\n name: \"The Head\",\n jamlKey: \"boss: The Head\",\n category: \"Debuffer\",\n effect: \"Debuffs all Heart cards.\",\n counters: [\"Non-Heart decks\", \"Checkered Deck\", \"Chicot\"],\n jamlAvoid: \"mustNot: boss: The Head\",\n threatLevel: \"High\",\n },\n \"The Plant\": {\n name: \"The Plant\",\n jamlKey: \"boss: The Plant\",\n category: \"Debuffer\",\n effect: \"Debuffs all Face Cards (Jacks, Queens, Kings).\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Director's Cut\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Plant\",\n threatLevel: \"Lethal\",\n },\n \"The Pillar\": {\n name: \"The Pillar\",\n jamlKey: \"boss: The Pillar\",\n category: \"Debuffer\",\n effect: \"Debuffs any playing card played previously in the current Ante.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Pillar\",\n threatLevel: \"Medium\",\n },\n\n // ── Restrictors ──\n \"The Psychic\": {\n name: \"The Psychic\",\n jamlKey: \"boss: The Psychic\",\n category: \"Restrictor\",\n effect: \"Every played hand must contain exactly 5 cards.\",\n counters: [\"5-card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Psychic\",\n threatLevel: \"High\",\n },\n \"The Eye\": {\n name: \"The Eye\",\n jamlKey: \"boss: The Eye\",\n category: \"Restrictor\",\n effect: \"Disallows playing repeat hand types in the current round.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Eye\",\n threatLevel: \"Medium\",\n },\n \"The Mouth\": {\n name: \"The Mouth\",\n jamlKey: \"boss: The Mouth\",\n category: \"Restrictor\",\n effect: \"Restricts player to one specific hand type for the entire round.\",\n counters: [\"Versatile builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mouth\",\n threatLevel: \"High\",\n },\n \"The Needle\": {\n name: \"The Needle\",\n jamlKey: \"boss: The Needle\",\n category: \"Restrictor\",\n effect: \"Restricts player to exactly 1 hand for the entire round.\",\n counters: [\"High-scoring single hand\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Needle\",\n threatLevel: \"High\",\n },\n\n // ── Obfuscators ──\n \"The House\": {\n name: \"The House\",\n jamlKey: \"boss: The House\",\n category: \"Obfuscator\",\n effect: \"First drawn hand is drawn face down.\",\n counters: [\"Memory\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The House\",\n threatLevel: \"Low\",\n },\n \"The Wheel\": {\n name: \"The Wheel\",\n jamlKey: \"boss: The Wheel\",\n category: \"Obfuscator\",\n effect: \"1 in 7 cards drawn face down. (2 in 7 with Oops! All 6s).\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wheel\",\n threatLevel: \"Low\",\n },\n \"The Fish\": {\n name: \"The Fish\",\n jamlKey: \"boss: The Fish\",\n category: \"Obfuscator\",\n effect: \"All cards drawn face down after a hand is played.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Fish\",\n threatLevel: \"Medium\",\n },\n \"The Mark\": {\n name: \"The Mark\",\n jamlKey: \"boss: The Mark\",\n category: \"Obfuscator\",\n effect: \"All Face Cards drawn face down.\",\n counters: [\"Non-face card builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Mark\",\n threatLevel: \"Medium\",\n },\n\n // ── Scalers ──\n \"The Wall\": {\n name: \"The Wall\",\n jamlKey: \"boss: The Wall\",\n category: \"Scaler\",\n effect: \"Extends required blind score to 4X the base Ante requirement.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Wall\",\n threatLevel: \"High\",\n },\n \"The Flint\": {\n name: \"The Flint\",\n jamlKey: \"boss: The Flint\",\n category: \"Scaler\",\n effect: \"Halves all base Chips and Mult for the played hand's base level.\",\n counters: [\"High flat mult/chip\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Flint\",\n threatLevel: \"High\",\n },\n\n // ── Economic / Meta ──\n \"The Ox\": {\n name: \"The Ox\",\n jamlKey: \"boss: The Ox\",\n category: \"Economic\",\n effect: \"Sets player's capital to $0 if they play their most frequently played hand.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Ox\",\n threatLevel: \"Medium\",\n },\n \"The Tooth\": {\n name: \"The Tooth\",\n jamlKey: \"boss: The Tooth\",\n category: \"Economic\",\n effect: \"Subtracts $1 from capital for every card played.\",\n counters: [\"High-card spam builds\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Tooth\",\n threatLevel: \"Medium\",\n },\n \"The Arm\": {\n name: \"The Arm\",\n jamlKey: \"boss: The Arm\",\n category: \"Economic\",\n effect: \"Permanently decreases level of played hand type by 1.\",\n counters: [\"Diverse hand types\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Arm\",\n threatLevel: \"High\",\n },\n \"The Hook\": {\n name: \"The Hook\",\n jamlKey: \"boss: The Hook\",\n category: \"Economic\",\n effect: \"Involuntarily discards 2 random cards after every play.\",\n counters: [\"Large hand size\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: The Hook\",\n threatLevel: \"Medium\",\n },\n \"The Manacle\": {\n name: \"The Manacle\",\n jamlKey: \"boss: The Manacle\",\n category: \"Restrictor\",\n effect: \"Temporarily reduces hand size by 1.\",\n counters: [\"Chicot exploit\", \"Paint Brush\", \"Palette\"],\n jamlAvoid: \"mustNot: boss: The Manacle\",\n threatLevel: \"Medium\",\n },\n \"The Water\": {\n name: \"The Water\",\n jamlKey: \"boss: The Water\",\n category: \"Restrictor\",\n effect: \"Removes all discards for the round.\",\n counters: [\"Chicot\", \"Retcon\", \"High-scoring hands\"],\n jamlAvoid: \"mustNot: boss: The Water\",\n threatLevel: \"High\",\n },\n};\n\n// ── Finisher Blinds (Ante 8) ──\nexport const FINISHERS: BossInfo[] = [\n {\n name: \"Cerulean Bell\",\n jamlKey: \"boss: Cerulean Bell\",\n category: \"Restrictor\",\n effect: \"Forces a random card to be permanently selected. Selling or discarding it triggers debuffs.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Cerulean Bell\",\n threatLevel: \"High\",\n },\n {\n name: \"Violet Vessel\",\n jamlKey: \"boss: Violet Vessel\",\n category: \"Scaler\",\n effect: \"Triples the baseline required score benchmark.\",\n counters: [\"Exponential scaling\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Violet Vessel\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Crimson Heart\",\n jamlKey: \"boss: Crimson Heart\",\n category: \"Debuffer\",\n effect: \"Disables 1 random Joker after every hand played.\",\n counters: [\"Multiple jokers\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Crimson Heart\",\n threatLevel: \"Lethal\",\n },\n {\n name: \"Verdant Leaf\",\n jamlKey: \"boss: Verdant Leaf\",\n category: \"Debuffer\",\n effect: \"Debuffs every card unless you sell at least 1 Joker.\",\n counters: [\"Cheap jokers to sell\", \"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Verdant Leaf\",\n threatLevel: \"High\",\n },\n {\n name: \"Amber Acorn\",\n jamlKey: \"boss: Amber Acorn\",\n category: \"Obfuscator\",\n effect: \"Shuffles all Jokers and flips them face down.\",\n counters: [\"Chicot\", \"Retcon\"],\n jamlAvoid: \"mustNot: boss: Amber Acorn\",\n threatLevel: \"High\",\n },\n];\n\nexport function getBoss(name: string): BossInfo | undefined {\n return BOSSES[name] ?? FINISHERS.find((b) => b.name === name);\n}\n\nexport function getBossesByCategory(category: BossCategory): BossInfo[] {\n return [\n ...Object.values(BOSSES),\n ...FINISHERS,\n ].filter((b) => b.category === category);\n}\n\nexport function getAllBosses(): BossInfo[] {\n return [...Object.values(BOSSES), ...FINISHERS];\n}\n","import { type FC } from \"react\";\nimport { Badge, Panel, Stack, Text, Divider, type BadgeTone } from \"./layout.js\";\nimport {\n getJoker,\n getSynergies,\n type JokerInfo,\n type JokerCategory,\n} from \"../knowledge/jokers.js\";\nimport {\n findSynergies,\n type SynergyInfo,\n} from \"../knowledge/synergies.js\";\nimport {\n getDeck,\n getStake,\n type DeckInfo,\n type StakeInfo,\n} from \"../knowledge/decks.js\";\nimport {\n getBoss,\n type BossInfo,\n type BossCategory,\n} from \"../knowledge/bosses.js\";\n\n/**\n * Reference Components — Encyclopedia UI for Balatro entities.\n *\n * All components query the knowledge base and render rich info cards.\n * Zero external dependencies. Pure React + CSS tokens.\n */\n\n/* ─── JokerCard ─── */\nexport interface JokerCardProps {\n name: string;\n showSynergies?: boolean;\n className?: string;\n}\n\nexport const JokerCard: FC<JokerCardProps> = ({\n name,\n showSynergies = true,\n className = \"\",\n}) => {\n const joker = getJoker(name);\n if (!joker) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Joker not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const categoryTone: Record<JokerCategory, BadgeTone> = {\n Copy: \"blue\",\n \"X-Mult\": \"purple\",\n Flat: \"green\",\n Economy: \"gold\",\n Retrigger: \"orange\",\n Utility: \"grey\",\n };\n\n const synergies = showSynergies ? getSynergies(name) : [];\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={joker.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6, alignItems: \"center\" }}>\n <Badge\n label={joker.rarity}\n tone={joker.rarity === \"Legendary\" ? \"gold\" : joker.rarity === \"Rare\" ? \"blue\" : joker.rarity === \"Uncommon\" ? \"green\" : \"grey\"}\n />\n <Badge label={`$${joker.cost}`} tone=\"gold\" />\n </div>\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n <Badge label={joker.category} tone={categoryTone[joker.category]} />\n <Badge label={joker.jamlKey} tone=\"grey\" />\n </div>\n\n <Text body={joker.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={joker.strategy} variant=\"muted\" />\n\n {synergies.length > 0 && (\n <>\n <Divider />\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6 }}>\n {synergies.map((s) => (\n <Badge key={s.name} label={s.name} tone=\"purple\" />\n ))}\n </div>\n </>\n )}\n </Stack>\n </Panel>\n );\n};\n\n/* ─── SynergyCard ─── */\nexport interface SynergyCardProps {\n name: string;\n className?: string;\n}\n\nexport const SynergyCard: FC<SynergyCardProps> = ({\n name,\n className = \"\",\n}) => {\n const synergy = findSynergies(name).find((s) => s.name === name);\n if (!synergy) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Synergy not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<SynergyInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Legendary: \"gold\",\n };\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={10}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={synergy.name} variant=\"title\" />\n <Badge label={synergy.difficulty} tone={difficultyTone[synergy.difficulty]} />\n </div>\n\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"blue\" />\n ))}\n </div>\n\n <Text body={synergy.description} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"The Math\" variant=\"accent\" />\n <Text body={synergy.math} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Setup Steps\" variant=\"accent\" />\n <Stack gap={6}>\n {synergy.setup.map((step, i) => (\n <div key={i} style={{ display: \"flex\", gap: 8, alignItems: \"flex-start\" }}>\n <span style={{ color: \"var(--j-gold)\", fontWeight: 700, minWidth: 20 }}>\n {i + 1}.\n </span>\n <Text body={step} variant=\"muted\" />\n </div>\n ))}\n </Stack>\n\n <Divider />\n\n <Text body=\"Boss Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {synergy.bossCounters.map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── BossBlindCard ─── */\nexport interface BossBlindCardProps {\n name: string;\n className?: string;\n}\n\nexport const BossBlindCard: FC<BossBlindCardProps> = ({\n name,\n className = \"\",\n}) => {\n const boss = getBoss(name);\n if (!boss) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Boss not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const threatTone: Record<BossInfo[\"threatLevel\"], BadgeTone> = {\n Low: \"green\",\n Medium: \"orange\",\n High: \"red\",\n Lethal: \"purple\",\n };\n\n const categoryTone: Record<BossCategory, BadgeTone> = {\n Debuffer: \"red\",\n Restrictor: \"orange\",\n Obfuscator: \"blue\",\n Scaler: \"purple\",\n Economic: \"gold\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={boss.name} variant=\"title\" />\n <div style={{ display: \"flex\", gap: 6 }}>\n <Badge label={boss.category} tone={categoryTone[boss.category]} />\n <Badge label={boss.threatLevel} tone={threatTone[boss.threatLevel]} />\n </div>\n </div>\n\n <Badge label={boss.jamlKey} tone=\"grey\" />\n\n <Text body={boss.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Counters\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {boss.counters.map((c) => (\n <Badge key={c} label={c} tone=\"green\" />\n ))}\n </div>\n\n <Divider />\n\n <Text body=\"JAML Filter\" variant=\"accent\" />\n <div\n style={{\n background: \"var(--j-surface-inset)\",\n padding: \"8px 12px\",\n borderRadius: \"var(--j-radius)\",\n fontFamily: \"var(--j-font-code)\",\n fontSize: \"var(--j-text-sm)\",\n color: \"var(--j-grey)\",\n }}\n >\n {boss.jamlAvoid}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── DeckCard ─── */\nexport interface DeckCardProps {\n name: string;\n className?: string;\n}\n\nexport const DeckCard: FC<DeckCardProps> = ({\n name,\n className = \"\",\n}) => {\n const deck = getDeck(name);\n if (!deck) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Deck not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<DeckInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={deck.name} variant=\"title\" />\n <Badge label={deck.difficulty} tone={difficultyTone[deck.difficulty]} />\n </div>\n\n <Badge label={deck.jamlKey} tone=\"grey\" />\n\n <Text body={deck.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={deck.strategy} variant=\"muted\" />\n\n <Divider />\n\n <Text body=\"Synergies\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {deck.synergies.map((s) => (\n <Badge key={s} label={s} tone=\"blue\" />\n ))}\n </div>\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StakeCard ─── */\nexport interface StakeCardProps {\n name: string;\n className?: string;\n}\n\nexport const StakeCard: FC<StakeCardProps> = ({\n name,\n className = \"\",\n}) => {\n const stake = getStake(name);\n if (!stake) {\n return (\n <Panel className={className} variant=\"muted\">\n <Text body={`Stake not found: \"${name}\"`} variant=\"error\" />\n </Panel>\n );\n }\n\n const difficultyTone: Record<StakeInfo[\"difficulty\"], BadgeTone> = {\n Easy: \"green\",\n Medium: \"orange\",\n Hard: \"red\",\n Expert: \"purple\",\n };\n\n return (\n <Panel className={className}>\n <Stack gap={8}>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n gap: 8,\n }}\n >\n <Text body={stake.name} variant=\"title\" />\n <Badge label={stake.difficulty} tone={difficultyTone[stake.difficulty]} />\n </div>\n\n <Badge label={stake.jamlKey} tone=\"grey\" />\n\n <Text body={stake.effect} variant=\"body\" />\n\n <Divider />\n\n <Text body=\"Strategy\" variant=\"accent\" />\n <Text body={stake.strategy} variant=\"muted\" />\n </Stack>\n </Panel>\n );\n};\n\n/* ─── StrategyAdvisor ─── */\nexport interface StrategyAdvisorProps {\n jokers: string[];\n className?: string;\n}\n\nexport const StrategyAdvisor: FC<StrategyAdvisorProps> = ({\n jokers,\n className = \"\",\n}) => {\n const foundJokers = jokers\n .map((name) => getJoker(name))\n .filter((j): j is JokerInfo => j !== undefined);\n\n const foundSynergies = findSynergies(jokers.join(\" \"));\n\n const recommended = foundSynergies.filter((s) =>\n s.jokers.some((j) => jokers.map((n) => n.toLowerCase()).includes(j.toLowerCase()))\n );\n\n const bossWarnings = new Set<string>();\n recommended.forEach((s) => s.bossCounters.forEach((b) => bossWarnings.add(b)));\n\n return (\n <Panel className={className} variant=\"accent\">\n <Stack gap={12}>\n <Text body={`Strategy Advisor (${foundJokers.length} jokers)`} variant=\"title\" />\n\n {foundJokers.length > 0 && (\n <>\n <Text body=\"Detected Jokers\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {foundJokers.map((j) => (\n <Badge key={j.name} label={j.name} tone=\"blue\" />\n ))}\n </div>\n </>\n )}\n\n {recommended.length > 0 && (\n <>\n <Divider />\n <Text body=\"Recommended Strategies\" variant=\"accent\" />\n <Stack gap={8}>\n {recommended.slice(0, 3).map((s) => (\n <div key={s.name}>\n <Text body={s.name} variant=\"body\" />\n <Text body={s.description} variant=\"muted\" />\n <div style={{ display: \"flex\", gap: 4, flexWrap: \"wrap\", marginTop: 4 }}>\n {s.jokers.map((j) => (\n <Badge key={j} label={j} tone=\"purple\" />\n ))}\n </div>\n </div>\n ))}\n </Stack>\n </>\n )}\n\n {bossWarnings.size > 0 && (\n <>\n <Divider />\n <Text body=\"Boss Blind Warnings\" variant=\"accent\" />\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {Array.from(bossWarnings).map((b) => (\n <Badge key={b} label={b} tone=\"red\" />\n ))}\n </div>\n </>\n )}\n\n {foundJokers.length === 0 && recommended.length === 0 && (\n <Text body=\"No recognized jokers or synergies found. Add jokers to get strategy advice.\" variant=\"muted\" />\n )}\n </Stack>\n </Panel>\n );\n};\n","import type { Registry } from \"./engine.js\";\nimport {\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n} from \"./components/layout.js\";\nimport {\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n} from \"./components/domain.js\";\nimport { JamlGameCard } from \"./components/game.js\";\nimport { JammyMascot, JammyOrbitalMenu } from \"./components/mascot.js\";\nimport {\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n} from \"./components/reference.js\";\n\n/**\n * Balatro Component Registry\n *\n * Maps catalog component names to real React implementations.\n * This is the ONLY place where catalog names are bound to code.\n * Add new components here → they instantly work in json-render specs.\n */\nexport const balatroRegistry: Registry = {\n // ── Layout ──\n Panel,\n Stack,\n Grid,\n Text,\n Spacer,\n Divider,\n Badge,\n\n // ── Status ──\n SearchStats,\n ErrorBanner,\n LoadingPulse,\n\n // ── Results ──\n SeedCard,\n SeedList,\n JokerBadge,\n EditionBadge,\n\n // ── Game Cards ──\n JamlGameCard,\n\n // ── Mascot ──\n JammyMascot,\n JammyOrbitalMenu,\n\n // ── Encyclopedia ──\n JokerCard,\n SynergyCard,\n BossBlindCard,\n DeckCard,\n StakeCard,\n StrategyAdvisor,\n};\n\n/**\n * Type-safe registry helper.\n * Ensures all catalog names have a matching component at compile time.\n */\nexport type BalatroRegistry = typeof balatroRegistry;\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for search results.\n *\n * Pure function. Converts raw Motely search data into a JsonNode tree.\n * The tree renders into a full search UI via `render(spec, registry)`.\n */\n\nexport interface SearchResult {\n seed: string;\n score: number;\n highlights?: string[];\n jokers?: string[];\n edition?: string;\n}\n\nexport interface SearchParams {\n status: \"idle\" | \"running\" | \"completed\" | \"error\";\n seedsSearched?: string;\n matchesFound?: number;\n seedsPerSecond?: number;\n elapsed?: string;\n error?: string | null;\n results: SearchResult[];\n}\n\nexport function buildSearchSpec(params: SearchParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Search Stats ──\n children.push({\n type: \"SearchStats\",\n props: {\n status: params.status,\n seedsSearched: params.seedsSearched,\n matchesFound: params.matchesFound,\n seedsPerSecond: params.seedsPerSecond,\n elapsed: params.elapsed,\n },\n });\n\n // ── Error Banner ──\n if (params.error) {\n children.push({\n type: \"ErrorBanner\",\n props: {\n message: params.error,\n onDismiss: true,\n },\n });\n }\n\n // ── Spacer ──\n children.push({ type: \"Spacer\", props: { size: 16 } });\n\n // ── Results ──\n if (params.results.length > 0) {\n const resultCards: JsonNode[] = params.results.map((r, i) => ({\n type: \"SeedCard\",\n props: {\n seed: r.seed,\n score: r.score,\n rank: i + 1,\n highlights: r.highlights,\n jokers: r.jokers,\n edition: r.edition,\n onClick: true,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: {\n title: `Results (${params.matchesFound ?? params.results.length})`,\n subtitle: params.status === \"running\" ? \"More matches arriving…\" : undefined,\n },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: resultCards,\n },\n ],\n });\n } else if (params.status === \"completed\") {\n children.push({\n type: \"Panel\",\n props: { title: \"No matches found\", variant: \"muted\" },\n children: [\n {\n type: \"Text\",\n props: {\n body: \"Try relaxing your filter or checking for typos.\",\n variant: \"muted\",\n },\n },\n ],\n });\n } else if (params.status === \"running\") {\n children.push({\n type: \"LoadingPulse\",\n props: { text: \"Searching seeds…\" },\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\nimport { getRecommendedSynergies } from \"../knowledge/synergies.js\";\n\n/**\n * Build a json-render spec for the encyclopedia view.\n *\n * Shows joker info, synergies, and strategy advice for a set of jokers.\n */\n\nexport interface EncyclopediaParams {\n jokers: string[];\n decks?: string[];\n stakes?: string[];\n bosses?: string[];\n showStrategies?: boolean;\n}\n\nexport function buildEncyclopediaSpec(params: EncyclopediaParams): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Joker Cards ──\n if (params.jokers.length > 0) {\n const jokerCards: JsonNode[] = params.jokers.map((name) => ({\n type: \"JokerCard\",\n props: { name, showSynergies: true },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n // ── Strategy Advisor ──\n if (params.showStrategies && params.jokers.length > 0) {\n children.push({\n type: \"StrategyAdvisor\",\n props: { jokers: params.jokers },\n });\n }\n\n // ── Synergy Cards ──\n const synergies = getRecommendedSynergies(params.jokers);\n if (synergies.length > 0) {\n const synergyCards: JsonNode[] = synergies.map((s) => ({\n type: \"SynergyCard\",\n props: { name: s.name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Synergies\", variant: \"accent\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: synergyCards,\n },\n ],\n });\n }\n\n // ── Deck Cards ──\n if (params.decks && params.decks.length > 0) {\n const deckCards: JsonNode[] = params.decks.map((name) => ({\n type: \"DeckCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Decks\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: deckCards,\n },\n ],\n });\n }\n\n // ── Stake Cards ──\n if (params.stakes && params.stakes.length > 0) {\n const stakeCards: JsonNode[] = params.stakes.map((name) => ({\n type: \"StakeCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Stakes\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: stakeCards,\n },\n ],\n });\n }\n\n // ── Boss Blind Cards ──\n if (params.bosses && params.bosses.length > 0) {\n const bossCards: JsonNode[] = params.bosses.map((name) => ({\n type: \"BossBlindCard\",\n props: { name },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Boss Blinds\", variant: \"muted\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 1, gap: 12 },\n children: bossCards,\n },\n ],\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n","import { JsonNode } from \"../engine.js\";\n\n/**\n * Build a json-render spec for seed analysis results.\n *\n * Shows the full breakdown of a single seed: jokers, shop, blinds, etc.\n */\n\nexport interface AnalyzerResult {\n seed: string;\n jokers: Array<{\n name: string;\n edition?: string;\n seal?: string;\n isEternal?: boolean;\n }>;\n shopItems?: Array<{\n name: string;\n type: string;\n edition?: string;\n }>;\n score?: number;\n notes?: string[];\n}\n\nexport function buildAnalyzerSpec(result: AnalyzerResult): JsonNode {\n const children: JsonNode[] = [];\n\n // ── Header ──\n children.push({\n type: \"Panel\",\n props: { title: `Seed: ${result.seed}`, variant: \"accent\" },\n children: [\n {\n type: \"Text\",\n props: { body: `Score: ${result.score ?? \"N/A\"}`, variant: \"title\" },\n },\n ],\n });\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Jokers ──\n if (result.jokers.length > 0) {\n const jokerCards: JsonNode[] = result.jokers.map((j) => ({\n type: \"JamlGameCard\",\n props: {\n type: \"joker\",\n card: {\n name: j.name,\n edition: j.edition,\n seal: j.seal,\n isEternal: j.isEternal,\n },\n scale: 0.8,\n },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Jokers\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 3, gap: 12 },\n children: jokerCards,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Shop ──\n if (result.shopItems && result.shopItems.length > 0) {\n const shopBadges: JsonNode[] = result.shopItems.map((s) => ({\n type: \"Badge\",\n props: { label: s.name, tone: \"blue\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Shop\" },\n children: [\n {\n type: \"Grid\",\n props: { columns: 4, gap: 8 },\n children: shopBadges,\n },\n ],\n });\n }\n\n children.push({ type: \"Spacer\", props: { size: 12 } });\n\n // ── Notes ──\n if (result.notes && result.notes.length > 0) {\n const noteTexts: JsonNode[] = result.notes.map((n) => ({\n type: \"Text\",\n props: { body: `• ${n}`, variant: \"muted\" },\n }));\n\n children.push({\n type: \"Panel\",\n props: { title: \"Notes\", variant: \"muted\" },\n children: noteTexts,\n });\n }\n\n return {\n type: \"Stack\",\n props: { gap: 16 },\n children,\n };\n}\n"],"names":["loadImage","url","resolve","image","renderImage","canvas","context","layer","timestamp","cardWidth","cardHeight","canvasStyle","elapsed","yOffset","xOffset","useJamlCardRenderer","layers","invert","hoverTilt","canvasRef","useRef","containerRef","imageCacheRef","ratio","setRatio","useState","forceUpdate","frameRef","targetRef","currentRef","hasAnimatedLayer","useEffect","cancelled","imageCache","urls","SPRITE_SHEETS","sheet","images","index","prev","err","frame","startTime","drawOnce","animTime","a","b","cached","imageRatio","img","tick","stopTiltLoop","useCallback","writeCardTransform","c","runTiltLoop","rate","onSettled","previous","now","dt","target","current","alpha","event","_a","rect","nx","ny","_b","JamlCardRenderer","className","handlers","jsxs","jsx","normalizeCardRank","raw","value","normalizeCardSuit","parseStandardcardName","name","trimmed","ofMatch","shortMatch","suitMap","MODIFIER_PREFIXES","stripModifiers","remaining","edition","isEternal","isPerishable","isRental","changed","prefix","stripped","resolvePackedAnalyzerItem","item","scale","decoded","decodeMotelyItem","resolveAnalyzerShopItem","displayName","packedResolved","VOUCHERS","voucher","JOKERS","joker","TAROTS_AND_PLANETS","consumable","baseName","standardcard","JamlGameCard","card","type","rank","suit","enhancements","seal","jokerData","j","Layer","face","JOKER_FACES","t","CONSUMABLE_FACES","enhancerPos","m","ENHANCER_MAP","pos","RANK_MAP","SUIT_MAP","EDITION_MAP","STICKER_MAP","sealPos","SEAL_MAP","JamlVoucher","voucherName","voucherData","v","JamlTag","tagName","tagData","TAGS","JamlBoss","bossName","bossData","BOSSES","splitCamelCase","key","packDisplayName","pack","MotelyBoosterPack","bossDisplayName","boss","MotelyBossBlind","tagDisplayName","tag","MotelyTag","voucherDisplayName","MotelyVoucher","deckDisplayName","deck","MotelyDeck","stakeDisplayName","stake","MotelyStake","ItemCard","resolved","useMemo","decodeMotelyItemToJamlCard","PackSection","i","JamlyzerView","result","maxAnte","selectedAnte","setSelectedAnte","ante","anteNumbers","_","n","DECK_SPRITE_POS","STAKE_SPRITE_POS","SPRITE_WIDTH","SPRITE_HEIGHT","DECK_COLS","DECK_ROWS","STICKER_COLS","STICKER_ROWS","DeckSprite","size","style","deckKey","deckPos","stakePos","displayHeight","resolveJamlAssetUrl","CardSuit","CardRank","CardEnhancement","CardSeal","CardEdition","CARD_WIDTH","CARD_HEIGHT","match","rawRank","rawSuit","StandardCard","enhancement","parsed","finalRank","finalSuit","col","row","finalH","bgX","bgY","PLAIN_BASE","enhPos","editionCol","isNegative","baseFilter","enhancersUrl","deckUrl","editionsUrl","layerBase","render","node","registry","Component","children","child","Fragment","renderList","nodes","defineCatalog","catalog","balatroCatalog","Panel","title","subtitle","variant","Stack","gap","align","Grid","columns","Text","body","colors","sizes","Spacer","Divider","Badge","label","tone","toneMap","SearchStats","status","seedsSearched","matchesFound","seedsPerSecond","statusColor","statusLabel","ErrorBanner","message","onDismiss","dismissed","setDismissed","LoadingPulse","text","SeedCard","seed","score","highlights","jokers","onClick","e","h","SeedList","seeds","scores","total","pageSize","page","setPage","maxPage","start","visible","p","JokerBadge","rarity","rarityTone","editionTone","EditionBadge","JamlGameCardImpl","JAMMY_SEED_MASCOT_DATA_URI","JammyOrbitalMenu","items","onAction","radius","step","angle","x","y","JammyMascot","mood","menuItems","onMenuAction","open","setOpen","handleClick","action","getJoker","getJokersByCategory","category","getSynergies","jokerName","SYNERGIES","findSynergies","s","findSynergiesByTag","getRecommendedSynergies","jokerNames","normalized","aMatches","DECKS","STAKES","getDeck","d","getStake","FINISHERS","getBoss","getBossesByCategory","getAllBosses","JokerCard","showSynergies","categoryTone","synergies","SynergyCard","synergy","difficultyTone","BossBlindCard","threatTone","DeckCard","StakeCard","StrategyAdvisor","foundJokers","recommended","bossWarnings","balatroRegistry","buildSearchSpec","params","resultCards","r","buildEncyclopediaSpec","jokerCards","synergyCards","deckCards","stakeCards","bossCards","buildAnalyzerSpec","shopBadges","noteTexts"],"mappings":"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"}
|