@open-slot-ui/pixi 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/OpenUIPixi-D4Z7emFO.d.cts +202 -0
- package/dist/OpenUIPixi-D4Z7emFO.d.ts +202 -0
- package/dist/art.cjs +269 -0
- package/dist/art.cjs.map +1 -0
- package/dist/art.d.cts +125 -0
- package/dist/art.d.ts +125 -0
- package/dist/art.js +222 -0
- package/dist/art.js.map +1 -0
- package/dist/chunk-PYXZIGXG.js +3733 -0
- package/dist/chunk-PYXZIGXG.js.map +1 -0
- package/dist/index.cjs +147 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -185
- package/dist/index.d.ts +16 -185
- package/dist/index.js +16 -3621
- package/dist/index.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/views/ControlView.ts","../src/tween.ts","../src/skin/defaultSkin.ts","../src/util.ts","../src/views/SpinView.ts","../../pixi-text-counter/src/Strip.ts","../../pixi-text-counter/src/DigitColumn.ts","../../pixi-text-counter/src/layout.ts","../../pixi-text-counter/src/math.ts","../../pixi-text-counter/src/tween/types.ts","../../pixi-text-counter/src/tween/Scheduler.ts","../../pixi-text-counter/src/tween/ease.ts","../../pixi-text-counter/src/types.ts","../../pixi-text-counter/src/Counter.ts","../src/renderers/TextCellRenderer.ts","../src/views/ValueDisplayView.ts","../src/views/ButtonView.ts","../src/views/TurboView.ts","../src/views/AutoplayView.ts","../src/views/AutoplayDrawerView.ts","../src/views/SliderView.ts","../src/views/ToggleView.ts","../src/views/SelectView.ts","../src/views/StepperView.ts","../src/views/blockColumn.ts","../src/views/MenuView.ts","../src/views/ReadoutView.ts","../src/views/DialogView.ts","../src/OpenUIPixi.ts","../src/skin/svgSpinSkin.ts"],"names":["Container","Graphics","norm","toIdx","Text","Sprite","Circle","Rectangle","INSET","LIGHT"],"mappings":"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","file":"chunk-PYXZIGXG.js","sourcesContent":["import { Container } from 'pixi.js';\nimport { resolvePlacement, type Control, type OpenUI, type Rect, type ScreenState } from '@open-slot-ui/core';\n\n/**\n * Base view: a Pixi Container bound to a core Control. Owns layout placement and\n * registers the introspection hook so the core can report bounds/animation state.\n * Subclasses draw and wire input. Dumb on its own (Charter B3).\n */\nexport abstract class ControlView extends Container {\n protected animating = false;\n protected readonly disposers: Array<() => void> = [];\n\n constructor(\n protected readonly control: Control,\n protected readonly ui: OpenUI,\n ) {\n super();\n this.control.viewInspect = () => ({ bounds: this.computeRect(), animating: this.animating });\n }\n\n /** Position + fit-scale from the control's layout spec against the screen. */\n applyLayout(screen: ScreenState): void {\n const p = resolvePlacement(this.control.layout, screen);\n this.position.set(p.x, p.y);\n this.scale.set(p.scale);\n this.rotation = p.rotation;\n }\n\n private computeRect(): Rect | null {\n if (this.destroyed) return null;\n const b = this.getBounds();\n return { x: b.minX, y: b.minY, width: b.maxX - b.minX, height: b.maxY - b.minY };\n }\n\n dispose(): void {\n for (const d of this.disposers) d();\n this.disposers.length = 0;\n this.control.viewInspect = undefined;\n if (!this.destroyed) this.destroy({ children: true });\n }\n}\n","import { type Container, type Ticker } from 'pixi.js';\nimport { type Transition, type Theme } from '@open-slot-ui/core';\n\ntype Frame = (ticker: Ticker) => void;\n\n/**\n * Minimal ticker-driven tween that interprets core `Transition` descriptors.\n * Kill-and-replace: every `run()` resets the target and cancels the prior tween,\n * so re-triggering a state never stacks transforms (Charter B6).\n */\nexport class Tweener {\n private readonly frames = new Set<Frame>();\n private loopResolve: (() => void) | null = null;\n\n constructor(private readonly ticker: Ticker) {}\n\n stop(): void {\n for (const fn of this.frames) this.ticker.remove(fn);\n this.frames.clear();\n if (this.loopResolve) {\n const resolve = this.loopResolve;\n this.loopResolve = null;\n resolve();\n }\n }\n\n run(target: Container, transition: Transition | undefined, _theme: Theme): Promise<void> {\n this.stop();\n target.scale.set(1);\n target.rotation = 0;\n target.alpha = 1;\n if (!transition) return Promise.resolve();\n return this.exec(target, transition);\n }\n\n private add(fn: Frame): void {\n this.frames.add(fn);\n this.ticker.add(fn);\n }\n\n private done(fn: Frame): void {\n this.ticker.remove(fn);\n this.frames.delete(fn);\n }\n\n private exec(target: Container, t: Transition): Promise<void> {\n switch (t.kind) {\n case 'squish':\n case 'pulse':\n return this.scaleYoyo(target, t.scale, t.ms);\n case 'fade':\n return this.fadeTo(target, t.alpha, t.ms);\n case 'turn':\n return this.turn(target, t.rps);\n case 'sequence':\n return this.runSequence(target, t.steps);\n case 'parallel':\n return Promise.all(t.steps.map((s) => this.exec(target, s))).then(() => undefined);\n default:\n return Promise.resolve();\n }\n }\n\n private scaleYoyo(target: Container, peak: number, ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n let elapsed = 0;\n const half = Math.max(ms / 2, 1);\n const fn: Frame = (ticker) => {\n elapsed += ticker.deltaMS;\n const k = elapsed < half ? elapsed / half : 1 - (elapsed - half) / half;\n const s = 1 + (peak - 1) * Math.min(Math.max(k, 0), 1);\n target.scale.set(s);\n if (elapsed >= ms) {\n target.scale.set(1);\n this.done(fn);\n resolve();\n }\n };\n this.add(fn);\n });\n }\n\n private fadeTo(target: Container, alpha: number, ms: number): Promise<void> {\n return new Promise<void>((resolve) => {\n let elapsed = 0;\n const from = target.alpha;\n const dur = Math.max(ms, 1);\n const fn: Frame = (ticker) => {\n elapsed += ticker.deltaMS;\n const k = Math.min(elapsed / dur, 1);\n target.alpha = from + (alpha - from) * k;\n if (k >= 1) {\n this.done(fn);\n resolve();\n }\n };\n this.add(fn);\n });\n }\n\n /** Continuous rotation; the promise resolves when `stop()` is next called. */\n private turn(target: Container, rps: number): Promise<void> {\n return new Promise<void>((resolve) => {\n this.loopResolve = resolve;\n const fn: Frame = (ticker) => {\n target.rotation += rps * Math.PI * 2 * (ticker.deltaMS / 1000);\n };\n this.add(fn);\n });\n }\n\n private async runSequence(target: Container, steps: Transition[]): Promise<void> {\n for (const step of steps) await this.exec(target, step);\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { type Theme } from '@open-slot-ui/core';\nimport { type SpinSkin, type SpinSkinFactory } from './SpinSkin';\n\n/**\n * The default skin: art-free, drawn from theme tokens (Charter B2 default skin).\n * Deliberately generic placeholder geometry — a game swaps this for its own skin.\n */\nexport function drawSpin(g: Graphics, theme: Theme, state: string): void {\n g.clear();\n const r = 64;\n const ring = state === 'disabled' ? theme.color.disabled : theme.color.accent;\n const glyph = state === 'disabled' ? theme.color.textDim : theme.color.text;\n\n g.circle(0, 0, r).fill({ color: theme.color.surface });\n g.circle(0, 0, r).stroke({ width: 6, color: ring, alpha: 1 });\n\n // Always the play glyph — the button squishes on press but never spins/rotates.\n const s = 20;\n g.moveTo(-s * 0.5, -s)\n .lineTo(s, 0)\n .lineTo(-s * 0.5, s)\n .closePath()\n .fill({ color: glyph });\n}\n\n/** Factory wrapping the placeholder Graphics drawing as a SpinSkin. */\nexport const defaultSpinSkin: SpinSkinFactory = (theme): SpinSkin => {\n const g = new Graphics();\n const view = new Container();\n view.addChild(g);\n return {\n view,\n update: (state) => drawSpin(g, theme, state),\n destroy: () => view.destroy({ children: true }),\n };\n};\n","/** Treat touch devices as non-desktop so we don't fire phantom hover states. */\nexport function isDesktop(): boolean {\n if (typeof window === 'undefined') return true;\n const noTouch = !('ontouchstart' in window);\n const noPoints = (navigator.maxTouchPoints ?? 0) === 0;\n return noTouch && noPoints;\n}\n","import { Container, Circle, Graphics, Text, type Ticker } from 'pixi.js';\nimport { type SpinControl, type OpenUI, type Transition } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { Tweener } from '../tween';\nimport { defaultSpinSkin } from '../skin/defaultSkin';\nimport { type SpinSkin, type SpinSkinFactory } from '../skin/SpinSkin';\nimport { isDesktop } from '../util';\n\n/**\n * Pixi view for the spin control. Owns input forwarding + transition playback;\n * delegates ALL drawing to a swappable skin (Charter B3/P8). The layout scale\n * lives on `this`; transitions animate the inner `art` container, so squish/turn\n * never fight the responsive fit-scale — and the skin's art animates with them.\n */\nexport interface SpinViewOptions {\n /** Skin factory for the spin art. */\n skin?: SpinSkinFactory;\n /** How long (ms) a press must be held before hold-to-spin engages. Default 260. */\n holdDelayMs?: number;\n}\n\nexport class SpinView extends ControlView {\n private readonly art = new Container();\n private readonly skin: SpinSkin;\n private readonly tween: Tweener;\n private readonly holdDelayMs: number;\n private holdTimer: ReturnType<typeof setTimeout> | undefined;\n private holding = false;\n /** Free-spins face — a ring + remaining count + \"FS\"; shown when `spin.freeSpins > 0`. */\n private readonly fsFace = new Container();\n private readonly fsCount: Text;\n private readonly fsLabel: Text;\n /** Autoplay STOP face — a \"STOP\" label over the remaining count (or ∞); shown while\n * autoplay is active. Tapping the spin button then STOPS autoplay. */\n private readonly stopFace = new Container();\n private readonly stopCount: Text;\n private readonly stopLabel: Text;\n\n constructor(\n private readonly spin: SpinControl,\n ui: OpenUI,\n ticker: Ticker,\n skinOrOpts: SpinSkinFactory | SpinViewOptions = defaultSpinSkin,\n ) {\n super(spin, ui);\n this.tween = new Tweener(ticker);\n // Back-compat: a bare factory still works; an options object adds hold tuning.\n const opts: SpinViewOptions = typeof skinOrOpts === 'function' ? { skin: skinOrOpts } : skinOrOpts;\n const skinFactory: SpinSkinFactory = opts.skin ?? defaultSpinSkin;\n this.holdDelayMs = opts.holdDelayMs ?? 260;\n\n this.skin = skinFactory(ui.theme);\n this.art.addChild(this.skin.view);\n\n // Free-spins face: the SAME white spin-button coin (white fill, black ring — matching\n // the spin skin + the autoplay STOP face) with the big remaining count over a small\n // \"FS\" label. Built once, hidden until `setFreeSpins(n > 0)`; lives in `art` so it\n // squishes too. Not a separate dark/accent disc — it must read as the spin button.\n const fsRing = new Graphics().circle(0, 0, 98).fill({ color: 0xffffff }).circle(0, 0, 94).stroke({ width: 8, color: 0x0a0a0a });\n this.fsCount = new Text({ text: '0', style: { fontFamily: ui.theme.type.family, fontSize: 60, fill: 0x0a0a0a, fontWeight: '900' } });\n this.fsCount.anchor.set(0.5);\n this.fsCount.y = -14;\n this.fsLabel = new Text({ text: ui.t('openui.freeSpins'), style: { fontFamily: ui.theme.type.family, fontSize: 24, fill: 0x0a0a0a, fontWeight: '900', letterSpacing: 3 } });\n this.fsLabel.anchor.set(0.5);\n this.fsLabel.y = 34;\n this.fsFace.addChild(fsRing, this.fsCount, this.fsLabel);\n this.fsFace.visible = false;\n this.art.addChild(this.fsFace);\n\n // Autoplay STOP face: a white button with a \"STOP\" label over the big remaining\n // count (or ∞). Built once, shown while autoplay is active.\n const stopRing = new Graphics().circle(0, 0, 96).fill({ color: 0xffffff }).stroke({ width: 7, color: 0x0a0a0a });\n this.stopLabel = new Text({ text: ui.t('openui.stop') === 'openui.stop' ? 'STOP' : ui.t('openui.stop'), style: { fontFamily: ui.theme.type.family, fontSize: 26, fill: 0x0a0a0a, fontWeight: '900', letterSpacing: 3 } });\n this.stopLabel.anchor.set(0.5);\n this.stopLabel.y = -38;\n this.stopCount = new Text({ text: '0', style: { fontFamily: ui.theme.type.family, fontSize: 64, fill: 0x0a0a0a, fontWeight: '900' } });\n this.stopCount.anchor.set(0.5);\n this.stopCount.y = 16;\n this.stopFace.addChild(stopRing, this.stopLabel, this.stopCount);\n this.stopFace.visible = false;\n this.art.addChild(this.stopFace);\n\n this.addChild(this.art);\n\n this.hitArea = new Circle(0, 0, 118);\n this.eventMode = 'static';\n this.cursor = 'pointer';\n\n this.on('pointerover', this.onOver);\n this.on('pointerout', this.onOut);\n this.on('pointerdown', this.onDown);\n this.on('pointerup', this.onUp);\n this.on('pointerupoutside', this.onUpOutside);\n\n this.disposers.push(\n this.spin.state.subscribe(() => {\n this.skin.update(this.spin.current);\n this.updateInteractive();\n }),\n // re-dim if slam-stop is toggled at runtime (e.g. applyJurisdiction)\n this.spin.allowSlamStop.subscribe(() => this.updateInteractive()),\n this.spin.onTransition((t) => this.play(t)),\n // free-spins face: switch between the normal skin and the \"N FS\" counter\n this.spin.freeSpins.subscribe(() => this.updateFaces()),\n // autoplay: while active the spin button becomes the STOP-count button\n this.ui.autoplay.state.subscribe(() => {\n this.updateFaces();\n this.updateInteractive();\n }),\n this.ui.autoplay.count.subscribe(() => this.updateFaces()),\n this.ui.locale.subscribe(() => {\n if (!this.destroyed) this.fsLabel.text = this.ui.t('openui.freeSpins');\n }),\n );\n\n this.skin.update(this.spin.current);\n this.updateFaces();\n this.updateInteractive();\n }\n\n /** Pick the spin face: autoplay STOP-count (top priority) → free-spins counter →\n * the normal skin. */\n private updateFaces(): void {\n const auto = this.ui.autoplay.isActive;\n const n = this.spin.freeSpins.get();\n const fs = n > 0 && !auto;\n if (auto) {\n const c = this.ui.autoplay.count.get();\n this.stopCount.text = c === Infinity ? '∞' : String(c);\n }\n if (fs) this.fsCount.text = String(n);\n this.stopFace.visible = auto;\n this.fsFace.visible = fs;\n this.skin.view.visible = !auto && !fs;\n }\n\n private readonly onOver = (): void => {\n if (isDesktop() && this.spin.current === 'idle') this.spin.setState('hover');\n };\n private readonly onOut = (): void => {\n if (this.spin.current === 'hover') this.spin.setState('idle');\n };\n private readonly onDown = (): void => {\n if (!this.spin.interactable) return;\n this.spin.setState('pressed');\n if (this.spin.holdToSpin) {\n this.holdTimer = setTimeout(() => {\n this.holdTimer = undefined;\n if (this.spin.current !== 'pressed') return; // released before the threshold\n if (this.spin.holdBegin()) {\n this.holding = true;\n if (typeof window !== 'undefined') {\n window.addEventListener('pointerup', this.endHoldGlobal);\n window.addEventListener('pointercancel', this.endHoldGlobal);\n }\n }\n }, this.holdDelayMs);\n }\n };\n private readonly onUp = (): void => {\n if (this.holding) return this.endHold();\n this.clearHoldTimer();\n // While autoplay is running the spin button is the STOP button → tap stops it.\n if (this.ui.autoplay.isActive) {\n this.ui.autoplay.stop();\n return;\n }\n if (this.spin.current === 'pressed') {\n this.spin.setState('idle');\n this.spin.activate();\n }\n };\n private readonly onUpOutside = (): void => {\n if (this.holding) return this.endHold();\n this.clearHoldTimer();\n if (this.spin.current === 'pressed') this.spin.setState('idle');\n };\n\n private readonly endHoldGlobal = (): void => this.endHold();\n private clearHoldTimer(): void {\n if (this.holdTimer != null) {\n clearTimeout(this.holdTimer);\n this.holdTimer = undefined;\n }\n }\n private endHold(): void {\n if (!this.holding) return;\n this.holding = false;\n if (typeof window !== 'undefined') {\n window.removeEventListener('pointerup', this.endHoldGlobal);\n window.removeEventListener('pointercancel', this.endHoldGlobal);\n }\n this.spin.holdEnd();\n if (this.spin.current === 'pressed') this.spin.setState('idle');\n }\n\n private updateInteractive(): void {\n // Stay tappable while autoplay is active (the STOP button) even though the spin\n // control itself is locked mid-round.\n const ok = this.spin.interactable || this.ui.autoplay.isActive;\n this.eventMode = ok ? 'static' : 'none';\n this.cursor = ok ? 'pointer' : 'default';\n // When slam-stop is disabled (jurisdiction), dim the button while a spin is in\n // progress so the player sees it's locked. Default behavior is unchanged.\n const inSpin = this.spin.current === 'spinning' || this.spin.current === 'auto' || this.spin.current === 'stop';\n this.art.alpha = !this.spin.allowSlamStop.get() && inSpin ? 0.45 : 1;\n }\n\n private play(t: Transition | undefined): void {\n this.animating = true;\n void this.tween.run(this.art, t, this.ui.theme).then(() => {\n this.animating = false;\n });\n }\n\n override dispose(): void {\n this.clearHoldTimer();\n this.endHold();\n this.tween.stop();\n this.skin.destroy();\n super.dispose();\n }\n}\n","import { Container } from 'pixi.js';\nimport type { CellRenderer } from './types';\n\nexport const CELLS_PER_STRIP = 20;\n\nexport class Strip<C extends Container = Container> {\n readonly container: Container;\n readonly cells: C[];\n private readonly renderer: CellRenderer<C>;\n private readonly digitHeight: number;\n\n dirtyLow = 1;\n dirtyHigh = 0;\n\n constructor(renderer: CellRenderer<C>, digitHeight: number) {\n this.container = new Container();\n this.renderer = renderer;\n this.digitHeight = digitHeight;\n this.cells = new Array<C>(CELLS_PER_STRIP);\n for (let i = 0; i < CELLS_PER_STRIP; i++) {\n const cell = renderer.createCell(i % 10);\n cell.y = i * digitHeight;\n this.cells[i] = cell;\n this.container.addChild(cell);\n }\n }\n\n paintFillers(fromIdx: number, toIdx: number): void {\n const cells = this.cells;\n if (this.dirtyHigh >= this.dirtyLow) {\n for (let i = this.dirtyLow; i <= this.dirtyHigh; i++) {\n this.renderer.setDigit(cells[i], i % 10);\n }\n }\n const lo = fromIdx < toIdx ? fromIdx : toIdx;\n const hi = fromIdx < toIdx ? toIdx : fromIdx;\n const fillStart = lo + 1;\n const fillEnd = hi - 1;\n if (fillEnd < fillStart) {\n this.dirtyLow = 1;\n this.dirtyHigh = 0;\n return;\n }\n for (let i = fillStart; i <= fillEnd; i++) {\n this.renderer.setFiller(cells[i], i % 10);\n }\n this.dirtyLow = fillStart;\n this.dirtyHigh = fillEnd;\n }\n\n clearFillers(): void {\n if (this.dirtyHigh < this.dirtyLow) return;\n const cells = this.cells;\n for (let i = this.dirtyLow; i <= this.dirtyHigh; i++) {\n this.renderer.setDigit(cells[i], i % 10);\n }\n this.dirtyLow = 1;\n this.dirtyHigh = 0;\n }\n\n setY(y: number): void {\n this.container.y = y;\n }\n\n yForIndex(index: number): number {\n return -index * this.digitHeight;\n }\n\n destroy(): void {\n const cells = this.cells;\n if (this.renderer.destroyCell) {\n for (let i = 0; i < CELLS_PER_STRIP; i++) {\n this.renderer.destroyCell(cells[i]);\n }\n }\n this.container.destroy({ children: true });\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport type { CellRenderer } from './types';\nimport { Strip } from './Strip';\n\nexport class DigitColumn<C extends Container = Container> {\n readonly container: Container;\n readonly strip: Strip<C>;\n private readonly mask: Graphics;\n readonly digitWidth: number;\n readonly digitHeight: number;\n currentIndex = 0;\n positionTweenIndex = -1;\n alphaTweenIndex = -1;\n\n constructor(renderer: CellRenderer<C>, digitWidth: number, digitHeight: number) {\n this.digitWidth = digitWidth;\n this.digitHeight = digitHeight;\n this.container = new Container();\n this.strip = new Strip<C>(renderer, digitHeight);\n this.container.addChild(this.strip.container);\n\n this.mask = new Graphics();\n this.mask.rect(0, 0, digitWidth, digitHeight).fill({ color: 0xffffff });\n this.container.addChild(this.mask);\n this.strip.container.mask = this.mask;\n\n this.setDigit(0);\n }\n\n setDigit(digit: number): void {\n const idx = ((digit % 10) + 10) % 10;\n this.currentIndex = idx;\n this.strip.setY(this.strip.yForIndex(idx));\n this.strip.clearFillers();\n }\n\n get currentDigit(): number {\n return this.currentIndex % 10;\n }\n\n paintFillers(fromIdx: number, toIdx: number): void {\n this.strip.paintFillers(fromIdx, toIdx);\n }\n\n getStripY(): number {\n return this.strip.container.y;\n }\n\n setStripY(y: number): void {\n this.strip.setY(y);\n }\n\n commitIndex(index: number): void {\n this.currentIndex = ((index % 10) + 10) % 10;\n this.strip.setY(this.strip.yForIndex(this.currentIndex));\n this.strip.clearFillers();\n }\n\n destroy(): void {\n this.mask.destroy();\n this.strip.destroy();\n this.container.destroy({ children: true });\n }\n}\n","export function getSeparatorAfter(digits: number, every: number, decimals = 0): number[] {\n if (!every || every < 1 || digits < 2) return [];\n const out: number[] = [];\n for (let i = 0; i < digits - 1; i++) {\n const placeFromRight = digits - 1 - i;\n const integerPlace = placeFromRight - decimals;\n if (integerPlace > 0 && integerPlace % every === 0) out.push(i);\n }\n return out;\n}\n\nexport function getDecimalSeparatorAfter(digits: number, decimals: number): number {\n if (decimals <= 0 || decimals >= digits) return -1;\n return digits - decimals - 1;\n}\n\nexport interface LayoutResult {\n columnX: number[];\n separatorX: number[];\n totalWidth: number;\n}\n\nexport function placeColumns(\n digits: number,\n digitWidth: number,\n separatorAfterColumns: number[],\n separatorWidth: number,\n): LayoutResult {\n const columnX = new Array<number>(digits);\n const separatorX: number[] = [];\n let x = 0;\n let sepIdx = 0;\n for (let i = 0; i < digits; i++) {\n columnX[i] = x;\n x += digitWidth;\n if (sepIdx < separatorAfterColumns.length && separatorAfterColumns[sepIdx] === i) {\n separatorX.push(x);\n x += separatorWidth;\n sepIdx++;\n }\n }\n return { columnX, separatorX, totalWidth: x };\n}\n\nexport function digitAtPlace(value: number, place: number): number {\n return Math.floor(Math.abs(value) / Math.pow(10, place)) % 10;\n}\n\nexport function leadingZeroCount(value: number, digits: number, decimals = 0): number {\n const integerDigits = digits - decimals;\n if (integerDigits <= 0) return 0;\n const integerValue = Math.floor(Math.abs(value) / Math.pow(10, decimals));\n if (integerValue <= 0) return integerDigits - 1;\n let count = 0;\n for (let i = integerDigits - 1; i > 0; i--) {\n if (Math.floor(integerValue / Math.pow(10, i)) % 10 === 0) count++;\n else break;\n }\n return count;\n}\n","import type { RollDirection } from './types';\nimport type { EaseFn } from './tween/types';\n\nexport interface MotionResolved {\n msPerStep: number;\n staggerMs: number;\n placeDurationBump: number;\n minMs: number;\n maxMs: number;\n ease: EaseFn;\n}\n\nexport function computeSteps(\n oldDigit: number,\n newDigit: number,\n direction: RollDirection,\n): number {\n return direction === 'down'\n ? ((oldDigit - newDigit + 10) % 10) || 10\n : ((newDigit - oldDigit + 10) % 10) || 10;\n}\n\nexport function computeDuration(\n distance: number,\n placeFromRight: number,\n motion: Pick<MotionResolved, 'msPerStep' | 'placeDurationBump' | 'minMs' | 'maxMs'>,\n): number {\n const raw = motion.msPerStep * distance + motion.placeDurationBump * placeFromRight;\n if (raw < motion.minMs) return motion.minMs;\n if (raw > motion.maxMs) return motion.maxMs;\n return raw;\n}\n\nexport interface TargetResolution {\n normalizedFromIdx: number;\n toIdx: number;\n}\n\nexport function resolveTargetIndex(\n fromIdx: number,\n newDigit: number,\n direction: RollDirection,\n): TargetResolution {\n if (direction === 'up') {\n let norm = fromIdx;\n while (norm >= 10) norm -= 10;\n while (norm < 0) norm += 10;\n const toIdx = newDigit > norm ? newDigit : newDigit + 10;\n return { normalizedFromIdx: norm, toIdx };\n }\n let norm = fromIdx;\n while (norm < 10) norm += 10;\n while (norm >= 20) norm -= 10;\n const toIdx = newDigit + 10 < norm ? newDigit + 10 : newDigit;\n return { normalizedFromIdx: norm, toIdx };\n}\n\nexport function resolveDirection(\n hint: 'up' | 'down' | 'auto' | undefined,\n oldValue: number,\n newValue: number,\n): RollDirection {\n if (hint === 'up') return 'up';\n if (hint === 'down') return 'down';\n return newValue >= oldValue ? 'up' : 'down';\n}\n","export type EaseFn = (t: number) => number;\n\nexport interface TweenState {\n active: boolean;\n startTime: number;\n delay: number;\n duration: number;\n startValue: number;\n targetValue: number;\n currentValue: number;\n ease: EaseFn;\n rollId: number;\n}\n\nexport function createInactiveTween(): TweenState {\n return {\n active: false,\n startTime: 0,\n delay: 0,\n duration: 0,\n startValue: 0,\n targetValue: 0,\n currentValue: 0,\n ease: (t) => t,\n rollId: 0,\n };\n}\n","import type { Ticker } from 'pixi.js';\nimport { createInactiveTween, type TweenState } from './types';\n\nexport type OnApplyFn = (tweenIndex: number, value: number) => void;\nexport type OnCompleteFn = (tweenIndex: number) => void;\n\nconst NOOP_COMPLETE: OnCompleteFn = () => undefined;\n\nexport class Scheduler {\n private readonly ticker: Ticker;\n private readonly tweens: TweenState[];\n private readonly onApply: OnApplyFn;\n private readonly onTweenComplete: OnCompleteFn;\n private activeCount = 0;\n private attached = false;\n\n constructor(\n ticker: Ticker,\n tweenCount: number,\n onApply: OnApplyFn,\n onTweenComplete: OnCompleteFn = NOOP_COMPLETE,\n ) {\n this.ticker = ticker;\n this.onApply = onApply;\n this.onTweenComplete = onTweenComplete;\n this.tweens = new Array<TweenState>(tweenCount);\n for (let i = 0; i < tweenCount; i++) this.tweens[i] = createInactiveTween();\n }\n\n get(index: number): TweenState {\n return this.tweens[index];\n }\n\n get tweenCount(): number {\n return this.tweens.length;\n }\n\n get activeTweenCount(): number {\n return this.activeCount;\n }\n\n get hasActive(): boolean {\n return this.activeCount > 0;\n }\n\n start(index: number, now: number = performance.now()): void {\n const t = this.tweens[index];\n if (!t.active) {\n t.active = true;\n this.activeCount++;\n }\n t.startTime = now;\n if (!this.attached) {\n this.ticker.add(this.tick);\n this.attached = true;\n }\n }\n\n stop(index: number): void {\n const t = this.tweens[index];\n if (!t.active) return;\n t.active = false;\n this.activeCount--;\n if (this.activeCount === 0) this.detach();\n }\n\n finish(index: number): void {\n const t = this.tweens[index];\n if (!t.active) return;\n const final = t.startValue + (t.targetValue - t.startValue) * t.ease(1);\n t.currentValue = final;\n t.active = false;\n this.activeCount--;\n this.onApply(index, final);\n this.onTweenComplete(index);\n if (this.activeCount === 0) this.detach();\n }\n\n finishAll(): void {\n const tweens = this.tweens;\n for (let i = 0, n = tweens.length; i < n; i++) {\n if (tweens[i].active) this.finish(i);\n }\n }\n\n destroy(): void {\n this.detach();\n this.activeCount = 0;\n }\n\n step(now: number = performance.now()): void {\n this.tickImpl(now);\n }\n\n private detach(): void {\n if (this.attached) {\n this.ticker.remove(this.tick);\n this.attached = false;\n }\n }\n\n private tick = (): void => {\n if (this.activeCount === 0) {\n this.detach();\n return;\n }\n this.tickImpl(performance.now());\n };\n\n private tickImpl(now: number): void {\n const tweens = this.tweens;\n for (let i = 0, n = tweens.length; i < n; i++) {\n const t = tweens[i];\n if (!t.active) continue;\n const elapsed = now - t.startTime - t.delay;\n if (elapsed < 0) {\n t.currentValue = t.startValue;\n this.onApply(i, t.currentValue);\n continue;\n }\n if (elapsed >= t.duration) {\n const final = t.startValue + (t.targetValue - t.startValue) * t.ease(1);\n t.currentValue = final;\n t.active = false;\n this.activeCount--;\n this.onApply(i, final);\n this.onTweenComplete(i);\n } else {\n const p = t.ease(elapsed / t.duration);\n t.currentValue = t.startValue + (t.targetValue - t.startValue) * p;\n this.onApply(i, t.currentValue);\n }\n }\n }\n}\n","import type { EaseFn } from './types';\n\nexport const linear: EaseFn = (t) => t;\n\nexport const quadOut: EaseFn = (t) => 1 - (1 - t) * (1 - t);\n\nexport const cubicOut: EaseFn = (t) => 1 - Math.pow(1 - t, 3);\n\nexport const quartOut: EaseFn = (t) => 1 - Math.pow(1 - t, 4);\n\nexport const quintOut: EaseFn = (t) => 1 - Math.pow(1 - t, 5);\n\nexport const expoOut: EaseFn = (t) => (t >= 1 ? 1 : 1 - Math.pow(2, -10 * t));\n\nexport const sineInOut: EaseFn = (t) => -(Math.cos(Math.PI * t) - 1) / 2;\n\nexport const slotRoll: EaseFn = (t) => 1 - Math.pow(1 - t, 4.5);\n\nexport const defaultEase: EaseFn = slotRoll;\n","import type { Container, Ticker } from 'pixi.js';\nimport type { EaseFn } from './tween/types';\n\nexport interface CellRenderer<C extends Container = Container> {\n createCell(digit: number): C;\n setDigit(cell: C, digit: number): void;\n setFiller(cell: C, digit: number): void;\n createSeparator?(char: string): Container;\n destroyCell?(cell: C): void;\n}\n\nexport interface SeparatorOptions {\n char: string;\n every?: number;\n}\n\nexport interface LeadingZeroOptions {\n mode: 'show' | 'dim' | 'hide';\n alpha?: number;\n tweenMs?: number;\n}\n\nexport interface BlurOptions {\n enabled: boolean;\n peak?: number;\n}\n\n/**\n * Minimal GSAP-compatible API the Counter uses for `fit` animation.\n * Passing the default `gsap` import satisfies this shape — no need for type imports.\n */\nexport interface GsapLike {\n to(target: object, vars: Record<string, unknown>): unknown;\n killTweensOf(target: object): void;\n}\n\n/**\n * Auto-downscale the counter when its visible width exceeds `maxWidth`.\n *\n * On every value change the counter's `.scale` is tweened (via GSAP) to\n * `maxWidth / visibleWidth`, clamped at `minScale`. Pair with `anchor: 'right'`\n * so the suffix stays at a fixed point while content shrinks leftward.\n */\nexport interface FitOptions {\n /** Max width the rendered content may occupy, in pixels (unscaled). */\n maxWidth: number;\n /** Floor for scale. Below this the content stops shrinking and may clip. Default `0.4`. */\n minScale?: number;\n /** GSAP tween duration in seconds. Default `0.3`. */\n duration?: number;\n /** GSAP ease string. Default `'power2.out'`. */\n ease?: string;\n /**\n * Which point of the (unscaled) counter stays put when scaling.\n *\n * - `'left'` — pivot at x=0; left edge stays put. Default.\n * - `'right'` — pivot at the right edge of the suffix; right edge stays put.\n * - `'center'` — pivot at the horizontal centre; the readout stays centred at any scale.\n */\n anchor?: 'left' | 'right' | 'center';\n /**\n * The `gsap` module's default export. Passing it yourself keeps GSAP an\n * optional peer dep — no GSAP code reaches your bundle unless `fit` is used.\n */\n gsap: GsapLike;\n}\n\nexport interface MotionOptions {\n msPerStep?: number;\n staggerMs?: number;\n placeDurationBump?: number;\n minMs?: number;\n maxMs?: number;\n ease?: EaseFn;\n}\n\nexport interface CounterOptions {\n digits: number;\n cellRenderer: CellRenderer;\n digitWidth: number;\n digitHeight: number;\n initialValue?: number;\n prefix?: string | Container;\n suffix?: string | Container;\n separator?: SeparatorOptions;\n leadingZeros?: LeadingZeroOptions;\n blur?: BlurOptions;\n motion?: MotionOptions;\n ticker?: Ticker;\n /**\n * Number of fractional digit columns (currency minor units).\n *\n * Values passed to `setValue` are interpreted as **minor units** (e.g. cents):\n * with `decimals: 2`, `setValue(190000)` displays `1,900.00`.\n *\n * Use `0` (default) for integer-only counters, `2` for USD/EUR/GBP-style currency,\n * `3` for Kuwaiti dinar, `8` for BTC, etc.\n */\n decimals?: number;\n /** Character to display between integer and decimal parts. Default `.`. */\n decimalChar?: string;\n /** Auto-downscale when the visible content would exceed `fit.maxWidth`. Requires GSAP. */\n fit?: FitOptions;\n}\n\nexport interface SetValueOptions {\n direction?: 'up' | 'down' | 'auto';\n instant?: boolean;\n duration?: number;\n onComplete?: () => void;\n}\n\nexport type RollDirection = 'up' | 'down';\n\nexport interface RollStartEvent {\n from: number;\n to: number;\n direction: RollDirection;\n}\n\nexport interface RollEndEvent {\n value: number;\n}\n\nexport interface DigitSettleEvent {\n column: number;\n digit: number;\n}\n\nexport const DEFAULTS = {\n motion: {\n msPerStep: 35,\n staggerMs: 28,\n placeDurationBump: 25,\n minMs: 280,\n maxMs: 620,\n },\n leadingZeros: {\n mode: 'show' as const,\n alpha: 0.35,\n tweenMs: 150,\n },\n blur: {\n enabled: false,\n peak: 8,\n },\n separatorEvery: 3,\n} as const;\n","import { BlurFilter, Container, Ticker, type DestroyOptions } from 'pixi.js';\nimport { DigitColumn } from './DigitColumn';\nimport {\n digitAtPlace,\n getDecimalSeparatorAfter,\n getSeparatorAfter,\n leadingZeroCount,\n placeColumns,\n} from './layout';\nimport {\n computeDuration,\n computeSteps,\n resolveDirection,\n resolveTargetIndex,\n type MotionResolved,\n} from './math';\nimport { Scheduler } from './tween/Scheduler';\nimport { defaultEase, linear } from './tween/ease';\nimport type { EaseFn } from './tween/types';\nimport {\n DEFAULTS,\n type CellRenderer,\n type CounterOptions,\n type DigitSettleEvent,\n type FitOptions,\n type RollDirection,\n type RollEndEvent,\n type RollStartEvent,\n type SetValueOptions,\n} from './types';\n\nconst pulseSin: EaseFn = (t) => Math.sin(Math.PI * t);\n\nexport class Counter extends Container {\n readonly digits: number;\n readonly digitWidth: number;\n readonly digitHeight: number;\n\n private readonly cellRenderer: CellRenderer;\n private readonly motion: MotionResolved;\n private readonly leadingZeros: Required<NonNullable<CounterOptions['leadingZeros']>>;\n private readonly blurOpt: Required<NonNullable<CounterOptions['blur']>>;\n private readonly tickerRef: Ticker;\n private readonly columns: DigitColumn[];\n private readonly separators: Container[];\n private readonly sepAfterCol: number[];\n private readonly sepAlwaysVisible: boolean[];\n private readonly digitRow: Container;\n private readonly blurFilter: BlurFilter | null;\n private readonly maxValue: number;\n readonly decimals: number;\n private readonly columnXLocal: number[];\n private readonly fullWidth: number;\n private readonly fitOpt: Required<Omit<FitOptions, 'gsap'>> & { gsap: FitOptions['gsap'] } | null;\n\n private readonly ALPHA_BASE: number;\n private readonly BLUR_INDEX: number;\n\n private value: number;\n private readonly scheduler: Scheduler;\n\n private prefixContainer: Container | null = null;\n private suffixContainer: Container | null = null;\n\n private currentRollId = 0;\n private activeRollCount = 0;\n private pendingResolve: (() => void) | null = null;\n private pendingOnComplete: (() => void) | null = null;\n\n private readonly _rollStartPayload: RollStartEvent = { from: 0, to: 0, direction: 'up' };\n private readonly _rollEndPayload: RollEndEvent = { value: 0 };\n private readonly _digitSettlePayload: DigitSettleEvent = { column: 0, digit: 0 };\n\n constructor(options: CounterOptions) {\n super();\n if (options.digits < 1) throw new Error('Counter: digits must be >= 1');\n this.digits = options.digits;\n this.digitWidth = options.digitWidth;\n this.digitHeight = options.digitHeight;\n this.cellRenderer = options.cellRenderer;\n this.tickerRef = options.ticker ?? Ticker.shared;\n this.decimals = options.decimals ?? 0;\n if (this.decimals < 0) throw new Error('Counter: decimals must be >= 0');\n if (this.decimals >= this.digits) {\n throw new Error('Counter: decimals must be less than digits');\n }\n this.maxValue = Math.pow(10, this.digits) - 1;\n this.value = this.clampValue(options.initialValue ?? 0);\n\n this.motion = {\n msPerStep: options.motion?.msPerStep ?? DEFAULTS.motion.msPerStep,\n staggerMs: options.motion?.staggerMs ?? DEFAULTS.motion.staggerMs,\n placeDurationBump: options.motion?.placeDurationBump ?? DEFAULTS.motion.placeDurationBump,\n minMs: options.motion?.minMs ?? DEFAULTS.motion.minMs,\n maxMs: options.motion?.maxMs ?? DEFAULTS.motion.maxMs,\n ease: options.motion?.ease ?? defaultEase,\n };\n this.leadingZeros = {\n mode: options.leadingZeros?.mode ?? DEFAULTS.leadingZeros.mode,\n alpha: options.leadingZeros?.alpha ?? DEFAULTS.leadingZeros.alpha,\n tweenMs: options.leadingZeros?.tweenMs ?? DEFAULTS.leadingZeros.tweenMs,\n };\n this.blurOpt = {\n enabled: options.blur?.enabled ?? DEFAULTS.blur.enabled,\n peak: options.blur?.peak ?? DEFAULTS.blur.peak,\n };\n\n this.ALPHA_BASE = this.digits;\n this.BLUR_INDEX = 2 * this.digits;\n\n if (options.prefix) {\n this.prefixContainer = this.coerceContainer(options.prefix);\n this.addChild(this.prefixContainer);\n }\n\n this.digitRow = new Container();\n this.addChild(this.digitRow);\n\n this.columns = new Array<DigitColumn>(this.digits);\n for (let i = 0; i < this.digits; i++) {\n const col = new DigitColumn(this.cellRenderer, this.digitWidth, this.digitHeight);\n col.positionTweenIndex = i;\n col.alphaTweenIndex = this.ALPHA_BASE + i;\n this.columns[i] = col;\n this.digitRow.addChild(col.container);\n }\n\n const sepChar = options.separator?.char;\n const sepEvery = options.separator?.every ?? DEFAULTS.separatorEvery;\n const decimalChar = options.decimalChar ?? '.';\n const thousandsCols = sepChar\n ? getSeparatorAfter(this.digits, sepEvery, this.decimals)\n : [];\n const decimalCol = getDecimalSeparatorAfter(this.digits, this.decimals);\n\n const sepCols: number[] = [];\n const sepChars: string[] = [];\n const sepAlwaysVisible: boolean[] = [];\n let ti = 0;\n for (let col = 0; col < this.digits - 1; col++) {\n if (ti < thousandsCols.length && thousandsCols[ti] === col) {\n sepCols.push(col);\n sepChars.push(sepChar!);\n sepAlwaysVisible.push(false);\n ti++;\n }\n if (col === decimalCol) {\n sepCols.push(col);\n sepChars.push(decimalChar);\n sepAlwaysVisible.push(true);\n }\n }\n\n this.separators = new Array(sepCols.length);\n this.sepAfterCol = new Array(this.digits).fill(-1);\n this.sepAlwaysVisible = sepAlwaysVisible;\n let sepWidth = 0;\n if (sepCols.length > 0 && this.cellRenderer.createSeparator) {\n for (let i = 0; i < sepCols.length; i++) {\n const sep = this.cellRenderer.createSeparator(sepChars[i]);\n this.separators[i] = sep;\n this.digitRow.addChild(sep);\n this.sepAfterCol[sepCols[i]] = i;\n if (sep.width > sepWidth) sepWidth = sep.width;\n }\n }\n\n const layout = placeColumns(this.digits, this.digitWidth, sepCols, sepWidth);\n this.columnXLocal = layout.columnX.slice();\n for (let i = 0; i < this.digits; i++) {\n this.columns[i].container.x = layout.columnX[i];\n }\n for (let i = 0; i < this.separators.length; i++) {\n this.separators[i].x = layout.separatorX[i];\n }\n\n if (this.prefixContainer) {\n const prefixWidth = this.prefixContainer.width;\n this.digitRow.x = prefixWidth;\n }\n let suffixWidth = 0;\n if (options.suffix) {\n this.suffixContainer = this.coerceContainer(options.suffix);\n this.suffixContainer.x = this.digitRow.x + layout.totalWidth;\n this.addChild(this.suffixContainer);\n suffixWidth = this.suffixContainer.width;\n }\n this.fullWidth = this.digitRow.x + layout.totalWidth + suffixWidth;\n\n if (options.fit) {\n this.fitOpt = {\n maxWidth: options.fit.maxWidth,\n minScale: options.fit.minScale ?? 0.4,\n duration: options.fit.duration ?? 0.3,\n ease: options.fit.ease ?? 'power2.out',\n anchor: options.fit.anchor ?? 'left',\n gsap: options.fit.gsap,\n };\n this.pivot.x = this.fitOpt.anchor === 'right' ? this.fullWidth : this.fitOpt.anchor === 'center' ? this.fullWidth / 2 : 0;\n const initialScale = this.computeFitScale(this.value);\n this.scale.set(initialScale);\n } else {\n this.fitOpt = null;\n }\n\n if (this.blurOpt.enabled) {\n this.blurFilter = new BlurFilter({ strength: 0, quality: 2 });\n this.blurFilter.strengthX = 0;\n this.digitRow.filters = [this.blurFilter];\n } else {\n this.blurFilter = null;\n }\n\n this.scheduler = new Scheduler(\n this.tickerRef,\n 2 * this.digits + 1,\n this.onApply,\n this.onTweenComplete,\n );\n\n this.applyValueInstant(this.value);\n }\n\n getValue(): number {\n return this.value;\n }\n\n isAnimating(): boolean {\n return this.scheduler.hasActive;\n }\n\n setValue(value: number, opts: SetValueOptions = {}): Promise<void> {\n const target = this.clampValue(value);\n const oldValue = this.value;\n\n if (opts.instant) {\n this.resolvePending();\n this.scheduler.finishAll();\n this.value = target;\n this.applyValueInstant(target);\n this.applyFit(target, false);\n opts.onComplete?.();\n return Promise.resolve();\n }\n\n if (target === oldValue && !this.scheduler.hasActive) {\n opts.onComplete?.();\n return Promise.resolve();\n }\n\n this.applyFit(target, true);\n\n this.resolvePending();\n this.value = target;\n const direction = resolveDirection(opts.direction, oldValue, target);\n const now = performance.now();\n const rollId = ++this.currentRollId;\n\n this.activeRollCount = 0;\n this.finishStaleTweens(target, rollId);\n\n const changingCount = this.startColumnTweens(oldValue, target, direction, opts.duration, now, rollId);\n\n if (changingCount === 0) {\n this.startBlurTween(0, now, rollId);\n this.startLeadingZeroTweens(target, now, rollId);\n opts.onComplete?.();\n return Promise.resolve();\n }\n\n this.activeRollCount = changingCount;\n\n let longestEnd = 0;\n for (let col = 0; col < this.digits; col++) {\n const t = this.scheduler.get(col);\n if (t.active && t.rollId === rollId) {\n const end = t.delay + t.duration;\n if (end > longestEnd) longestEnd = end;\n }\n }\n\n this.startBlurTween(longestEnd, now, rollId);\n this.startLeadingZeroTweens(target, now, rollId);\n\n this._rollStartPayload.from = oldValue;\n this._rollStartPayload.to = target;\n this._rollStartPayload.direction = direction;\n this.emit('rollstart', this._rollStartPayload);\n\n return new Promise<void>((resolve) => {\n this.pendingResolve = resolve;\n this.pendingOnComplete = opts.onComplete ?? null;\n });\n }\n\n /**\n * Skip the in-flight animation straight to its current target value.\n *\n * - Every active position tween jumps to its target Y (the column shows the\n * target digit, sharp).\n * - Leading-zero alpha tweens jump to their target alpha (dim / hidden / full).\n * - The blur tween snaps to 0 (no residual blur).\n * - `digitsettle` fires for each settling column, then `rollend` fires once.\n * - The pending `setValue` Promise resolves.\n *\n * Use it to fast-forward when the player has impatiently queued another input:\n *\n * ```ts\n * function onBetClick() {\n * counter.cancel(); // snap any in-flight roll to its end\n * counter.setValue(balance); // start a fresh roll from there\n * }\n * ```\n *\n * If no roll is in flight, this is a cheap no-op. Safe to call on every input.\n */\n cancel(): void {\n this.scheduler.finishAll();\n this.resolvePending();\n }\n\n override destroy(options?: DestroyOptions): void {\n this.scheduler.destroy();\n this.resolvePending();\n if (this.fitOpt) this.fitOpt.gsap.killTweensOf(this.scale);\n for (let i = 0; i < this.columns.length; i++) this.columns[i].destroy();\n if (this.blurFilter) this.blurFilter.destroy();\n super.destroy(options);\n }\n\n private computeFitScale(value: number): number {\n if (!this.fitOpt) return 1;\n const visibleWidth = this.computeVisibleWidth(value);\n if (visibleWidth <= 0) return 1;\n const raw = this.fitOpt.maxWidth / visibleWidth;\n if (raw >= 1) return 1;\n return Math.max(this.fitOpt.minScale, raw);\n }\n\n private computeVisibleWidth(value: number): number {\n if (this.leadingZeros.mode !== 'hide') return this.fullWidth;\n const dimCount = leadingZeroCount(value, this.digits, this.decimals);\n if (dimCount >= this.digits) return 0;\n const leftEdge = this.columnXLocal[dimCount] + this.digitRow.x;\n return this.fullWidth - leftEdge;\n }\n\n private applyFit(value: number, animated: boolean): void {\n if (!this.fitOpt) return;\n const target = this.computeFitScale(value);\n const gsap = this.fitOpt.gsap;\n gsap.killTweensOf(this.scale);\n if (!animated || (this.scale.x === target && this.scale.y === target)) {\n this.scale.set(target);\n return;\n }\n gsap.to(this.scale, {\n x: target,\n y: target,\n duration: this.fitOpt.duration,\n ease: this.fitOpt.ease,\n });\n }\n\n private clampValue(value: number): number {\n const i = Math.floor(value);\n if (i < 0) return 0;\n if (i > this.maxValue) return this.maxValue;\n return i;\n }\n\n private coerceContainer(value: string | Container): Container {\n if (typeof value !== 'string') return value;\n if (this.cellRenderer.createSeparator) return this.cellRenderer.createSeparator(value);\n return new Container();\n }\n\n private applyValueInstant(value: number): void {\n for (let col = 0; col < this.digits; col++) {\n const placeFromRight = this.digits - 1 - col;\n const digit = digitAtPlace(value, placeFromRight);\n this.columns[col].setDigit(digit);\n }\n this.applyLeadingZerosInstant(value);\n }\n\n private applyLeadingZerosInstant(value: number): void {\n const dimCount =\n this.leadingZeros.mode === 'show'\n ? 0\n : leadingZeroCount(value, this.digits, this.decimals);\n const dimAlpha = this.leadingZeros.mode === 'hide' ? 0 : this.leadingZeros.alpha;\n for (let col = 0; col < this.digits; col++) {\n const wantAlpha = col < dimCount ? dimAlpha : 1;\n this.columns[col].container.alpha = wantAlpha;\n const sepIdx = this.sepAfterCol[col];\n if (sepIdx >= 0 && !this.sepAlwaysVisible[sepIdx]) {\n this.separators[sepIdx].alpha = wantAlpha;\n }\n }\n }\n\n private finishStaleTweens(target: number, _rollId: number): void {\n for (let col = 0; col < this.digits; col++) {\n const t = this.scheduler.get(col);\n if (!t.active) continue;\n const placeFromRight = this.digits - 1 - col;\n const newDigit = digitAtPlace(target, placeFromRight);\n const targetIdx = Math.round(-t.targetValue / this.digitHeight);\n const targetDigit = ((targetIdx % 10) + 10) % 10;\n if (newDigit === targetDigit) {\n this.scheduler.finish(col);\n }\n }\n }\n\n private startColumnTweens(\n oldValue: number,\n target: number,\n direction: RollDirection,\n durationOverride: number | undefined,\n now: number,\n rollId: number,\n ): number {\n let changingCount = 0;\n for (let col = 0; col < this.digits; col++) {\n const placeFromRight = this.digits - 1 - col;\n const oldDigit = digitAtPlace(oldValue, placeFromRight);\n const newDigit = digitAtPlace(target, placeFromRight);\n if (oldDigit === newDigit) continue;\n\n const column = this.columns[col];\n const rawFromIdx = -column.getStripY() / this.digitHeight;\n const { normalizedFromIdx, toIdx } = resolveTargetIndex(rawFromIdx, newDigit, direction);\n const distance = Math.abs(toIdx - normalizedFromIdx);\n\n const integerSteps = computeSteps(oldDigit, newDigit, direction);\n const distanceForDuration = distance > 0 ? distance : integerSteps;\n const duration =\n durationOverride ??\n computeDuration(distanceForDuration, placeFromRight, this.motion);\n const delay = changingCount * this.motion.staggerMs;\n\n const fromY = -normalizedFromIdx * this.digitHeight;\n const targetY = -toIdx * this.digitHeight;\n column.setStripY(fromY);\n column.paintFillers(Math.floor(normalizedFromIdx), toIdx);\n\n const t = this.scheduler.get(col);\n t.startValue = fromY;\n t.targetValue = targetY;\n t.duration = duration;\n t.delay = delay;\n t.ease = this.motion.ease;\n t.rollId = rollId;\n this.scheduler.start(col, now);\n\n changingCount++;\n }\n return changingCount;\n }\n\n private startBlurTween(longestEnd: number, now: number, rollId: number): void {\n if (!this.blurFilter) return;\n const t = this.scheduler.get(this.BLUR_INDEX);\n if (longestEnd <= 0) {\n this.blurFilter.strengthY = 0;\n if (t.active) this.scheduler.finish(this.BLUR_INDEX);\n return;\n }\n t.startValue = 0;\n t.targetValue = 1;\n t.duration = longestEnd;\n t.delay = 0;\n t.ease = pulseSin;\n t.rollId = rollId;\n this.scheduler.start(this.BLUR_INDEX, now);\n }\n\n private startLeadingZeroTweens(target: number, now: number, rollId: number): void {\n if (this.leadingZeros.mode === 'show') return;\n const dimCount = leadingZeroCount(target, this.digits, this.decimals);\n const dimAlpha = this.leadingZeros.mode === 'hide' ? 0 : this.leadingZeros.alpha;\n for (let col = 0; col < this.digits; col++) {\n const wantAlpha = col < dimCount ? dimAlpha : 1;\n const column = this.columns[col];\n const currentAlpha = column.container.alpha;\n if (Math.abs(currentAlpha - wantAlpha) < 0.001) continue;\n const t = this.scheduler.get(this.ALPHA_BASE + col);\n t.startValue = currentAlpha;\n t.targetValue = wantAlpha;\n t.duration = this.leadingZeros.tweenMs;\n t.delay = 0;\n t.ease = linear;\n t.rollId = rollId;\n this.scheduler.start(this.ALPHA_BASE + col, now);\n }\n }\n\n private onApply = (idx: number, value: number): void => {\n if (idx < this.digits) {\n this.columns[idx].setStripY(value);\n return;\n }\n if (idx < this.BLUR_INDEX) {\n const colIdx = idx - this.digits;\n this.columns[colIdx].container.alpha = value;\n const sepIdx = this.sepAfterCol[colIdx];\n if (sepIdx >= 0 && !this.sepAlwaysVisible[sepIdx]) {\n this.separators[sepIdx].alpha = value;\n }\n return;\n }\n if (this.blurFilter) this.blurFilter.strengthY = value * this.blurOpt.peak;\n };\n\n private onTweenComplete = (idx: number): void => {\n if (idx >= this.digits) return;\n\n const t = this.scheduler.get(idx);\n const finalIdx = Math.round(-t.targetValue / this.digitHeight);\n const column = this.columns[idx];\n column.commitIndex(finalIdx);\n\n this._digitSettlePayload.column = idx;\n this._digitSettlePayload.digit = column.currentDigit;\n this.emit('digitsettle', this._digitSettlePayload);\n\n if (t.rollId !== this.currentRollId) return;\n if (this.activeRollCount === 0) return;\n\n this.activeRollCount--;\n if (this.activeRollCount === 0) {\n this._rollEndPayload.value = this.value;\n this.emit('rollend', this._rollEndPayload);\n this.resolvePending();\n }\n };\n\n private resolvePending(): void {\n const resolve = this.pendingResolve;\n const onComplete = this.pendingOnComplete;\n this.pendingResolve = null;\n this.pendingOnComplete = null;\n if (resolve) resolve();\n if (onComplete) onComplete();\n }\n}\n","import { Container, Text, type TextStyleOptions } from 'pixi.js';\nimport { type CellRenderer } from 'pixi-text-counter';\n\nexport interface TextCellRendererOptions {\n style: TextStyleOptions;\n digitWidth: number;\n digitHeight: number;\n /** Glyph shown on intermediate (filler) frames during a roll. '' = blank. */\n fillerChar?: string;\n}\n\n/**\n * A zero-asset CellRenderer for pixi-text-counter using plain Pixi `Text`.\n * Mirrors the shipped BitmapFontCellRenderer's cell convention: each digit is\n * centered within a digitWidth x digitHeight box.\n */\nexport class TextCellRenderer implements CellRenderer<Container> {\n constructor(private readonly o: TextCellRendererOptions) {}\n\n createCell(digit: number): Container {\n const cell = new Container();\n const t = new Text({ text: String(digit), style: this.o.style });\n t.anchor.set(0.5, 0.5);\n t.x = this.o.digitWidth / 2;\n t.y = this.o.digitHeight / 2;\n cell.addChild(t);\n return cell;\n }\n\n setDigit(cell: Container, digit: number): void {\n const t = cell.children[0] as Text;\n const next = String(digit);\n if (t.text !== next) t.text = next;\n }\n\n setFiller(cell: Container, digit: number): void {\n const t = cell.children[0] as Text;\n const next = this.o.fillerChar ?? String(digit);\n if (t.text !== next) t.text = next;\n }\n\n createSeparator(char: string): Container {\n const cell = new Container();\n const t = new Text({ text: char, style: this.o.style });\n t.anchor.set(0.5, 0.5);\n cell.addChild(t);\n t.y = this.o.digitHeight / 2;\n t.x = t.width / 2;\n return cell;\n }\n\n destroyCell(cell: Container): void {\n cell.destroy({ children: true });\n }\n}\n","import { Container, Graphics, Text, type Ticker } from 'pixi.js';\nimport { type ValueDisplay, type OpenUI, displayDigits, valueFitMaxWidth } from '@open-slot-ui/core';\nimport { Counter, type CounterOptions, type GsapLike } from 'pixi-text-counter';\nimport { ControlView } from './ControlView';\nimport { TextCellRenderer } from '../renderers/TextCellRenderer';\n\n// Each digit column is masked to DIGIT_W × DIGIT_H, so these must leave room for the\n// bold outline + drop shadow or the glyphs get clipped.\nconst DIGIT_W = 39;\nconst DIGIT_H = 68;\nconst FONT_SIZE = 48;\n/** Fixed fit budget floor (columns): values up to ~this width render full size; wider\n * ones scale down so the readout never spills toward its neighbours. */\nconst FIT_BUDGET_COLS = 9;\n\ntype Side = 'left' | 'right' | 'center';\n\n/**\n * View for a value display (balance / bet). Wraps pixi-text-counter's `Counter`\n * (mechanical-reel digit roll) for the number with the currency symbol/code as a\n * tight prefix/suffix. The odometer is sized to the VALUE (no hidden leading-zero\n * reserve), so the symbol hugs the number and large balances never clamp; it grows\n * when the value grows. Rebuilds on currency / locale change.\n */\nexport class ValueDisplayView extends ControlView {\n private counter: Counter | undefined;\n private caption: Text | undefined;\n private captionPill: Graphics | undefined;\n\n constructor(\n private readonly vd: ValueDisplay,\n ui: OpenUI,\n private readonly ticker: Ticker,\n /** Host `gsap` — when present, the counter auto-downscales wide values to fit\n * (Charter B5: no hard gsap dep; the host passes it). */\n private readonly fitGsap?: GsapLike,\n ) {\n super(vd, ui);\n this.build();\n this.disposers.push(\n this.vd.value.subscribe(() => {\n if (this.destroyed) return;\n const cur = this.vd.currency.get();\n const needed = displayDigits(this.vd.get(), this.vd.digits, cur.decimals);\n // Re-size the odometer to the new magnitude (grow OR shrink) so it always fits\n // tightly — the symbol keeps hugging the number and a larger value never clamps.\n // Only when the digit count actually changes (a power-of-ten crossing), not every\n // roll. GROW: seed from the current value (it fits the wider odometer → a true\n // roll). SHRINK: seed at the TARGET — the old, larger value wouldn't fit the\n // narrower odometer and would snap to all-nines, so we skip that wrong intermediate.\n if (this.counter && needed !== this.counter.digits) {\n const from = needed > this.counter.digits ? this.counter.getValue() : this.vd.minorUnits;\n this.buildCounter(needed, from);\n }\n void this.counter?.setValue(this.vd.minorUnits);\n }),\n this.vd.currency.subscribe(() => {\n if (!this.destroyed) this.rebuild();\n }),\n // re-translate the caption on language switch (guard a post-dispose emit)\n this.ui.locale.subscribe(() => {\n if (!this.destroyed) this.rebuild();\n }),\n // accent emphasis (e.g. a bet display showing the boosted effective stake):\n // rebuild the odometer with the accent fill at the same width\n this.vd.emphasized.subscribe(() => {\n if (!this.destroyed && this.counter) this.buildCounter(this.counter.digits, this.vd.minorUnits);\n }),\n );\n }\n\n private side(): Side {\n // Mirror the anchor: a left-anchored readout (Balance) has its ORIGIN on the left\n // and grows rightward; a right-anchored one (Bet) has its origin on the right and\n // grows LEFTWARD — so a growing bet value never runs over the bet ± buttons that\n // sit to its right. The `fit` auto-scale pivots at this same edge.\n const a = this.vd.layout.anchor;\n return a.includes('left') ? 'left' : a.includes('right') ? 'right' : 'center';\n }\n\n private build(): void {\n const theme = this.ui.theme;\n\n if (this.vd.label) {\n // Figma \"default\" look: the caption is a bold white word on a solid black pill\n // (Баланс / Ставка), floating just above the outlined value.\n this.caption = new Text({\n // Figma: the label is NOT uppercased — \"Баланс\" / \"Ставка\" as authored.\n text: this.ui.t(this.vd.label),\n style: { fontFamily: theme.type.family, fontSize: 28, fill: 0xffffff, fontWeight: '900', letterSpacing: 0 },\n });\n this.caption.anchor.set(0.5, 0.5);\n this.captionPill = new Graphics();\n this.addChild(this.captionPill, this.caption);\n this.sizeCaptionPill();\n // Re-measure once web fonts settle: on first mount Pixi may size the pill from\n // FALLBACK metrics (before the real font is active), so a non-Latin caption\n // (e.g. \"Общий выигрыш\") would clip and never correct itself. Fits the pill to\n // the true glyph width the moment the font is ready — no counter rebuild.\n if (typeof document !== 'undefined' && document.fonts?.ready) {\n void document.fonts.ready.then(() => {\n if (!this.destroyed && this.caption) this.sizeCaptionPill();\n });\n }\n }\n\n const cur = this.vd.currency.get();\n this.buildCounter(displayDigits(this.vd.get(), this.vd.digits, cur.decimals), this.vd.minorUnits);\n }\n\n /** Size the caption pill to the caption's current measured width + padding and centre\n * the text in it, anchored to the value's side. Re-runnable (fonts-ready / relayout). */\n private sizeCaptionPill(): void {\n if (!this.caption || !this.captionPill) return;\n const side = this.side();\n const padX = 24;\n const padY = 8;\n const pillW = Math.ceil(this.caption.width) + padX * 2;\n const pillH = Math.ceil(this.caption.height) + padY * 2;\n // Anchor the pill to the value's side so it lines up with the number below it.\n const pillX = side === 'left' ? 0 : side === 'right' ? -pillW : -pillW / 2;\n const pillY = -DIGIT_H / 2 - pillH - 14; // ~24px gap above the value (Figma)\n this.captionPill.clear().roundRect(pillX, pillY, pillW, pillH, 12).fill({ color: 0x000000 });\n this.caption.position.set(pillX + pillW / 2, pillY + pillH / 2);\n }\n\n /** (Re)create the rolling counter sized to `total` columns, starting at `fromMinor`. */\n private buildCounter(total: number, fromMinor: number): void {\n this.counter?.destroy();\n const theme = this.ui.theme;\n const cur = this.vd.currency.get();\n const side = this.side();\n\n const renderer = new TextCellRenderer({\n // Figma \"default\" readout: Montserrat Black, white, with a bold BLACK OUTLINE\n // plus a soft drop shadow (0px 4px, 25% black) under it.\n style: {\n fontFamily: theme.type.family,\n fontSize: FONT_SIZE,\n // Emphasis (ValueDisplay.setEmphasis) renders the value in the theme\n // accent — \"this number is modified\" (boosted effective stake, etc.).\n fill: this.vd.emphasized.get() ? theme.color.accent : 0xffffff,\n fontWeight: '900',\n stroke: { color: 0x000000, width: 8, join: 'round' },\n dropShadow: { color: 0x000000, alpha: 0.25, blur: 2, distance: 4, angle: Math.PI / 2 },\n },\n digitWidth: DIGIT_W,\n digitHeight: DIGIT_H,\n // no fillerChar → rolling cells show real digits (crisp, no blur, no blank flicker)\n });\n\n const opts: CounterOptions = {\n digits: total,\n decimals: cur.decimals,\n decimalChar: cur.decimalChar ?? '.',\n separator: { char: cur.separator ?? ',', every: 3 },\n cellRenderer: renderer,\n digitWidth: DIGIT_W,\n digitHeight: DIGIT_H,\n initialValue: fromMinor,\n // Tight sizing means the value fills its columns — leading-zero hide only ever\n // trims a digit or two after a grow, never a permanent reserve gap.\n leadingZeros: { mode: 'hide' },\n blur: { enabled: false },\n ticker: this.ticker,\n };\n // Affix = the symbol (when display:'symbol' and one is set) else the code. Tight\n // sizing keeps it adjacent to the number: \"$1,234.50\" / \"1,234.50€\" / \"100,000 SATS\".\n const symbolMode = cur.display === 'symbol' && !!cur.symbol;\n const affix = symbolMode ? (cur.symbol as string) : cur.code;\n // Stake placement: a PREFIX symbol hugs the number (\"$1,234.50\"); a SUFFIX symbol\n // (zł, kr, …) OR the ISO code is spaced (\"1.234,50 zł\" / \"1,234.50 USD\").\n if ((cur.position ?? 'suffix') === 'prefix') opts.prefix = symbolMode ? affix : `${affix} `;\n else opts.suffix = ` ${affix}`;\n\n // A very large value (whale crypto, big SATS counts) is scaled down to a fixed\n // budget so it never spills into its neighbours; normal magnitudes render full size.\n if (this.fitGsap) {\n opts.fit = {\n gsap: this.fitGsap,\n maxWidth: valueFitMaxWidth(Math.max(this.vd.digits, FIT_BUDGET_COLS), DIGIT_W),\n minScale: 0.5,\n anchor: side, // left→0 · right→fullWidth · center→fullWidth/2\n };\n }\n\n this.counter = new Counter(opts);\n this.counter.y = -DIGIT_H / 2;\n // With `fit`, the counter pivots at its anchored point (left edge / right edge /\n // centre), so x=0 pins THAT point to the control origin and stays put at any fit\n // scale. Without fit there is no pivot, so shift right/centre left by the width.\n if (this.fitGsap) {\n this.counter.x = 0;\n } else {\n // No host gsap → clamp the width STATICALLY so a large value can never overflow\n // its box and drift onto a neighbouring button (the gsap path animates this same\n // clamp; here it just snaps). Scale down to the fit budget, floored at 0.5 (which\n // covers up to 18 columns), and re-anchor to the scaled width.\n const budget = valueFitMaxWidth(Math.max(this.vd.digits, FIT_BUDGET_COLS), DIGIT_W);\n const natural = this.counter.width;\n const k = natural > budget ? Math.max(0.5, budget / natural) : 1;\n this.counter.scale.set(k);\n this.counter.y = -DIGIT_H * k / 2; // keep it vertically centred at the shrunk size\n const w = natural * k;\n this.counter.x = side === 'left' ? 0 : side === 'right' ? -w : -w / 2;\n }\n this.addChild(this.counter);\n }\n\n private rebuild(): void {\n this.counter?.destroy();\n this.caption?.destroy();\n this.captionPill?.destroy();\n this.counter = undefined;\n this.caption = undefined;\n this.captionPill = undefined;\n this.removeChildren();\n this.build();\n }\n\n override dispose(): void {\n this.counter?.destroy();\n super.dispose();\n }\n}\n","import { Container, Graphics, Text, Sprite, Circle, Rectangle, type Texture, type Ticker } from 'pixi.js';\nimport { type ButtonControl, type OpenUI, type Transition } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { Tweener } from '../tween';\n\n/** Built-in placeholder glyphs the button can draw without art. */\nexport type ButtonGlyph = 'menu' | 'close' | 'speaker' | 'speaker-mute' | 'fullscreen' | 'fullscreen-exit' | 'none';\n\nexport interface ButtonViewOptions {\n shape?: 'circle' | 'pill';\n radius?: number;\n height?: number;\n /** Placeholder icon drawn as simple lines (when no texture). */\n glyph?: ButtonGlyph;\n /** Skin with real art: a Sprite shown instead of placeholder geometry. */\n iconTexture?: Texture;\n /** Target sprite height in reference px. */\n iconTarget?: number;\n /** Monochrome look — white circle, black ring, black glyph (matches the turbo\n * button's b&w art). Only affects the drawn (no-texture) circle path. */\n mono?: boolean;\n /** Inverted look — solid black circle with a white glyph, no ring (the Figma ☰\n * menu button). Only affects the drawn (no-texture) circle path. */\n dark?: boolean;\n}\n\n/**\n * Generic button view. With `iconTexture` it renders the provided art as a Sprite\n * (swappable via `setIconTexture`, e.g. ☰ ↔ ✕); otherwise a neutral token placeholder.\n * Pointer input drives the control's state machine; entry transitions play on `art`.\n */\n/** Exact Figma glyph vectors (viewBox 22.5×22.5), rendered via `Graphics.svg()`.\n * Sound = an OUTLINE speaker + a single wave; fullscreen = rounded corner brackets. */\nconst GLYPH_SVG: Partial<Record<ButtonGlyph, string>> = {\n speaker:\n '<svg viewBox=\"0 0 22.5 22.5\" xmlns=\"http://www.w3.org/2000/svg\">' +\n '<path d=\"M13.6745 5.01252C13.9316 4.84399 14.2647 4.8292 14.5397 4.97456C14.8146 5.1199 14.9868 5.40142 14.9872 5.706L15.0007 16.8107C15.0011 17.1153 14.8296 17.3934 14.555 17.5333C14.2804 17.6731 13.9472 17.6517 13.6897 17.4781L10.4454 15.2905L8.61605 15.2722C6.76074 15.2537 5.25495 13.7655 5.25266 11.9484L5.25073 10.3739C5.2486 8.55679 6.75081 7.09863 8.6061 7.11714L10.4355 7.13539L13.6745 5.01252Z\" fill=\"none\" stroke=\"black\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>' +\n '<path d=\"M16.1933 9.375C16.6252 10.4652 16.6015 11.654 16.1257 12.75\" fill=\"none\" stroke=\"black\" stroke-width=\"3\" stroke-linecap=\"round\"/>' +\n '</svg>',\n 'speaker-mute':\n '<svg viewBox=\"0 0 22.5 22.5\" xmlns=\"http://www.w3.org/2000/svg\">' +\n '<path d=\"M13.6745 5.01252C13.9316 4.84399 14.2647 4.8292 14.5397 4.97456C14.8146 5.1199 14.9868 5.40142 14.9872 5.706L15.0007 16.8107C15.0011 17.1153 14.8296 17.3934 14.555 17.5333C14.2804 17.6731 13.9472 17.6517 13.6897 17.4781L10.4454 15.2905L8.61605 15.2722C6.76074 15.2537 5.25495 13.7655 5.25266 11.9484L5.25073 10.3739C5.2486 8.55679 6.75081 7.09863 8.6061 7.11714L10.4355 7.13539L13.6745 5.01252Z\" fill=\"none\" stroke=\"black\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>' +\n '<path d=\"M15.5 8.5L19.5 13.5M19.5 8.5L15.5 13.5\" fill=\"none\" stroke=\"black\" stroke-width=\"1.8\" stroke-linecap=\"round\"/>' +\n '</svg>',\n fullscreen:\n '<svg viewBox=\"0 0 22.5 22.5\" xmlns=\"http://www.w3.org/2000/svg\">' +\n '<path d=\"M7.875 18H7.5C5.84315 18 4.5 16.6569 4.5 15V14.25M7.875 4.5H7.5C5.84315 4.5 4.5 5.84315 4.5 7.5V8.25M14.25 4.5H15C16.6569 4.5 18 5.84315 18 7.5V8.25M14.25 18H15C16.6569 18 18 16.6569 18 15V14.25\" fill=\"none\" stroke=\"black\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\n '</svg>',\n 'fullscreen-exit':\n '<svg viewBox=\"0 0 22.5 22.5\" xmlns=\"http://www.w3.org/2000/svg\">' +\n '<path d=\"M4.5 8.25H5.25C6.9 8.25 8.25 6.9 8.25 5.25V4.5M14.25 4.5V5.25C14.25 6.9 15.6 8.25 17.25 8.25H18M18 14.25H17.25C15.6 14.25 14.25 15.6 14.25 17.25V18M8.25 18V17.25C8.25 15.6 6.9 14.25 5.25 14.25H4.5\" fill=\"none\" stroke=\"black\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>' +\n '</svg>',\n};\n\nexport class ButtonView extends ControlView {\n private readonly art = new Container();\n private readonly bg = new Graphics();\n private readonly glyphG = new Graphics();\n private sprite: Sprite | undefined;\n private labelText: Text | undefined;\n private readonly tween: Tweener;\n private readonly shape: 'circle' | 'pill';\n private readonly radius: number;\n private readonly pillHeight: number;\n private glyph: ButtonGlyph;\n private readonly iconTarget: number;\n private readonly mono: boolean;\n private readonly dark: boolean;\n\n constructor(private readonly btn: ButtonControl, ui: OpenUI, ticker: Ticker, opts: ButtonViewOptions = {}) {\n super(btn, ui);\n this.tween = new Tweener(ticker);\n this.shape = opts.shape ?? 'circle';\n this.radius = opts.radius ?? 40;\n this.pillHeight = opts.height ?? 56;\n this.glyph = opts.glyph ?? 'none';\n this.iconTarget = opts.iconTarget ?? 84;\n this.mono = opts.mono ?? false;\n this.dark = opts.dark ?? false;\n this.addChild(this.art);\n\n if (opts.iconTexture) {\n this.sprite = new Sprite(opts.iconTexture);\n this.sprite.anchor.set(0.5);\n this.fitSprite();\n this.art.addChild(this.sprite);\n } else {\n this.art.addChild(this.bg, this.glyphG);\n if (btn.label) {\n this.labelText = new Text({\n text: ui.t(btn.label),\n style: { fontFamily: ui.theme.type.family, fontSize: 22, fill: ui.theme.color.text, fontWeight: '700' },\n });\n this.labelText.anchor.set(0.5);\n this.art.addChild(this.labelText);\n }\n }\n\n this.eventMode = 'static';\n this.cursor = 'pointer';\n // No hover reaction (pointerover/out): these buttons look the same whether or not\n // a pointer is over them — only press + disabled change their look.\n this.on('pointerdown', this.onDown);\n this.on('pointerup', this.onUp);\n this.on('pointerupoutside', this.onUpOutside);\n\n this.disposers.push(\n this.btn.state.subscribe(() => {\n this.redraw();\n this.updateInteractive();\n }),\n this.btn.onTransition((t) => this.play(t)),\n // The host input lock gates `interactable` without a state change, so react to\n // it directly: a locked/disabled button dims to a semi-transparent state.\n this.ui.locked.subscribe(() => {\n this.redraw();\n this.updateInteractive();\n }),\n this.ui.locale.subscribe(() => {\n if (this.destroyed) return; // a view disposed mid-emit can still be called\n if (this.labelText && this.btn.label) {\n this.labelText.text = this.ui.t(this.btn.label);\n this.updateHit();\n }\n }),\n );\n this.redraw();\n this.updateHit();\n this.updateInteractive();\n }\n\n /** Swap the displayed art (e.g. ☰ → ✕). */\n setIconTexture(tex: Texture): void {\n if (!this.sprite) return;\n this.sprite.texture = tex;\n this.fitSprite();\n this.updateHit();\n }\n\n /** Swap the placeholder glyph (e.g. speaker ↔ speaker-mute, fullscreen ↔ exit). */\n setGlyph(glyph: ButtonGlyph): void {\n if (this.glyph === glyph) return;\n this.glyph = glyph;\n this.redraw();\n this.updateHit();\n }\n\n private fitSprite(): void {\n if (!this.sprite) return;\n this.sprite.scale.set(1);\n this.sprite.scale.set(this.iconTarget / this.sprite.height);\n }\n\n private readonly onDown = (): void => {\n if (this.btn.interactable) this.btn.setState('pressed');\n };\n private readonly onUp = (): void => {\n if (this.btn.current === 'pressed') {\n this.btn.setState('idle');\n this.btn.activate();\n }\n };\n private readonly onUpOutside = (): void => {\n if (this.btn.current === 'pressed') this.btn.setState('idle');\n };\n\n private updateHit(): void {\n if (this.sprite) {\n const w = this.sprite.width;\n const h = this.sprite.height;\n this.hitArea = new Rectangle(-w / 2, -h / 2, w, h);\n } else if (this.shape === 'circle') {\n this.hitArea = new Circle(0, 0, this.radius + 6);\n } else {\n const w = this.labelText ? this.labelText.width + 48 : 120;\n this.hitArea = new Rectangle(-w / 2, -this.pillHeight / 2, w, this.pillHeight);\n }\n }\n\n private updateInteractive(): void {\n const ok = this.btn.interactable;\n this.eventMode = ok ? 'static' : 'none';\n this.cursor = ok ? 'pointer' : 'default';\n // Semi-transparent when not usable (locked during a spin, or a disabled state) —\n // matches the Figma \"default\" disabled treatment for the menu / ± / buy buttons.\n this.alpha = ok ? 1 : 0.4;\n }\n\n private redraw(): void {\n if (this.sprite) {\n this.sprite.alpha = this.btn.current === 'disabled' ? 0.5 : 1;\n return;\n }\n const t = this.ui.theme;\n const g = this.bg;\n g.clear();\n const disabled = this.btn.current === 'disabled';\n // Dark (Figma ☰) buttons: solid black circle, white glyph, no ring.\n // Monochrome (turbo-style) buttons: white circle, black ring, black glyph.\n const fillC = this.dark ? '#0a0a0a' : this.mono ? '#ffffff' : t.color.surface;\n const lineC = this.mono ? '#0a0a0a' : t.color.accent;\n const ink = this.dark ? '#ffffff' : this.mono ? (disabled ? '#9aa0a6' : '#0a0a0a') : disabled ? t.color.textDim : t.color.text;\n this.glyphG.clear();\n this.glyphG.visible = false;\n if (this.shape === 'circle') {\n const r = this.radius;\n if (this.mono) {\n // Figma b&w button: a soft drop shadow, a white fill, and an INSET black ring\n // (ring at ~0.925r, width ~0.15r — matching the exported button art).\n // The white fill stops just short of the ring's outer edge (0.98r vs 1.0r):\n // with both edges coincident, the fill's AA fringe peeks past the ring and\n // reads as white dither against dark game backgrounds.\n g.circle(0, r * 0.16, r).fill({ color: 0x000000, alpha: disabled ? 0.08 : 0.18 });\n g.circle(0, 0, r * 0.98).fill({ color: '#ffffff', alpha: disabled ? 0.6 : 1 });\n g.circle(0, 0, r * 0.925).stroke({ width: r * 0.15, color: '#0a0a0a', alpha: disabled ? 0.5 : 1 });\n } else if (this.dark) {\n g.circle(0, r * 0.16, r).fill({ color: 0x000000, alpha: 0.18 });\n g.circle(0, 0, r).fill({ color: '#0a0a0a' });\n } else {\n g.circle(0, 0, r).fill({ color: fillC }).circle(0, 0, r).stroke({ width: 4, color: lineC });\n }\n\n const svg = GLYPH_SVG[this.glyph];\n if (svg) {\n // Exact Figma glyph vector (sound / fullscreen), scaled to ~75% of the button\n // and centred — viewBox is 22.5, so scale = r/15 puts it at the design size.\n const s = r / 15;\n this.glyphG.svg(svg);\n this.glyphG.scale.set(s);\n this.glyphG.position.set(-11.25 * s, -11.25 * s);\n this.glyphG.alpha = disabled ? 0.5 : 1;\n this.glyphG.visible = true;\n } else if (this.glyph === 'menu') {\n const barW = this.dark ? 6 : 4;\n const spread = this.dark ? 9 : 8;\n for (const dy of [-spread, 0, spread]) g.moveTo(-14, dy).lineTo(14, dy).stroke({ width: barW, color: ink, cap: 'round' });\n } else if (this.glyph === 'close') {\n g.moveTo(-10, -10).lineTo(10, 10).moveTo(10, -10).lineTo(-10, 10).stroke({ width: 4, color: ink });\n }\n } else {\n const w = this.labelText ? this.labelText.width + 48 : 120;\n const h = this.pillHeight;\n g.roundRect(-w / 2, -h / 2, w, h, h / 2).fill({ color: t.color.surfaceAlt }).stroke({ width: 3, color: t.color.accent });\n }\n if (this.labelText) this.labelText.style.fill = ink;\n }\n\n private play(t: Transition | undefined): void {\n this.animating = true;\n void this.tween.run(this.art, t, this.ui.theme).then(() => {\n this.animating = false;\n });\n }\n\n override dispose(): void {\n this.tween.stop();\n super.dispose();\n }\n}\n","import { Container, Graphics, Sprite, Circle, type Texture, type Ticker } from 'pixi.js';\nimport { type TurboControl, type OpenUI, type Transition } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { Tweener } from '../tween';\n\nexport interface TurboViewOptions {\n /** One texture per mode (index-aligned). Wins over off/on when provided. */\n modeTextures?: Texture[];\n /** 2-mode art: off frame + engaged frame (used when modeTextures is absent). */\n offTexture?: Texture;\n onTexture?: Texture;\n target?: number;\n radius?: number;\n}\n\n/**\n * Turbo switcher view. One tap cycles to the next mode (`cycle()`), wrapping back\n * to off. Renders whatever art it has — per-mode textures, a 2-mode off/on pair,\n * or a token-drawn fallback — and, for 3+ modes, overlays a small level indicator\n * (lit pips) so \"turbo\" vs \"super\" reads at a glance even on 2-frame art.\n */\nexport class TurboView extends ControlView {\n private readonly art = new Container();\n private readonly bg = new Graphics();\n private sprite: Sprite | undefined;\n private readonly tween: Tweener;\n private readonly modeTex: Texture[] | undefined;\n private readonly offTex: Texture | undefined;\n private readonly onTex: Texture | undefined;\n private readonly target: number;\n private readonly radius: number;\n\n constructor(private readonly turbo: TurboControl, ui: OpenUI, ticker: Ticker, opts: TurboViewOptions = {}) {\n super(turbo, ui);\n this.tween = new Tweener(ticker);\n this.modeTex = opts.modeTextures?.length ? opts.modeTextures : undefined;\n this.offTex = opts.offTexture;\n this.onTex = opts.onTexture;\n this.target = opts.target ?? 84;\n this.radius = opts.radius ?? 40;\n\n const hasArt = this.modeTex || this.offTex || this.onTex;\n if (hasArt) {\n this.sprite = new Sprite(this.texFor());\n this.sprite.anchor.set(0.5);\n this.art.addChild(this.sprite);\n } else {\n this.art.addChild(this.bg);\n }\n this.addChild(this.art);\n\n this.eventMode = 'static';\n this.cursor = 'pointer';\n this.hitArea = new Circle(0, 0, (this.sprite ? this.target / 2 : this.radius) + 8);\n this.on('pointerup', this.onUp);\n\n this.disposers.push(\n this.turbo.state.subscribe(() => this.redraw()),\n this.turbo.index.subscribe(() => this.redraw()),\n this.turbo.onTransition((t) => this.play(t)),\n );\n this.redraw();\n }\n\n private readonly onUp = (): void => {\n this.turbo.cycle();\n };\n\n private texFor(): Texture | undefined {\n const i = this.turbo.index.get();\n if (this.modeTex) return this.modeTex[Math.min(i, this.modeTex.length - 1)] ?? this.modeTex[0];\n return i > 0 ? (this.onTex ?? this.offTex) : (this.offTex ?? this.onTex);\n }\n\n private fit(): void {\n if (!this.sprite) return;\n this.sprite.scale.set(1);\n this.sprite.scale.set(this.target / this.sprite.height);\n }\n\n private redraw(): void {\n const th = this.ui.theme;\n const i = this.turbo.index.get();\n const disabled = this.turbo.current === 'disabled';\n\n if (this.sprite) {\n const tex = this.texFor();\n if (tex) this.sprite.texture = tex;\n this.fit();\n this.sprite.alpha = disabled ? 0.5 : 1;\n } else {\n // Drawn fallback: brightness climbs with the mode level.\n const lit = i > 0;\n const r = this.radius;\n this.bg.clear();\n this.bg\n .circle(0, 0, r)\n .fill({ color: lit ? th.color.accent : th.color.surface, alpha: lit ? Math.min(1, 0.55 + i * 0.25) : 1 })\n .stroke({ width: 4, color: th.color.accent });\n // a small lightning wedge in the middle\n this.bg\n .poly([-6, -r * 0.42, 8, -4, 0, -4, 7, r * 0.42, -9, 2, 0, 2])\n .fill({ color: lit ? th.color.accentText : th.color.accent, alpha: disabled ? 0.5 : 1 });\n }\n\n }\n\n private play(t: Transition | undefined): void {\n this.animating = true;\n void this.tween.run(this.art, t, this.ui.theme).then(() => {\n this.animating = false;\n });\n }\n\n override dispose(): void {\n this.tween.stop();\n super.dispose();\n }\n}\n","import { Container, Graphics, Sprite, Text, Circle, type Texture, type Ticker, type FederatedPointerEvent } from 'pixi.js';\nimport { type AutoplayControl, type OpenUI } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\n\nconst DEG = Math.PI / 180;\n\nexport interface AutoplayViewOptions {\n idleTexture?: Texture;\n activeTexture?: Texture;\n target?: number;\n radius?: number;\n /**\n * Count-picker presentation. `'drawer'` (default) defers picking to the bottom\n * AutoplayDrawerView and keeps this button still; `'radial'` fans the count\n * chips on an arc around the spin button (the classic in-place picker).\n */\n picker?: 'drawer' | 'radial';\n /** Spin-button center in THIS view's local coords — the chips arc around it. */\n arcCenter?: { x: number; y: number };\n /** Fixed angle between chips (degrees). */\n arcStepDeg?: number;\n /** Arc radius (default = distance to arcCenter). */\n arcRadius?: number;\n /** Sweep direction along the arc (+1 over the top, -1 under). */\n arcDir?: 1 | -1;\n}\n\ninterface Chip {\n node: Container;\n scale: number;\n}\n\n/**\n * Autoplay button with a RADIAL count picker.\n * - tap (idle): button rotates −60°, the count chips pop in one-by-one along an\n * arc around the spin button (fixed angle apart);\n * - pick a chip: the fan collapses and the button becomes a STOP square + count;\n * - tap (picking): button rotates +60° back and the fan hides;\n * - tap (active): stops autoplay.\n * The host runs the loop and feeds the live count.\n */\nexport class AutoplayView extends ControlView {\n private readonly art = new Container(); // the rotating button\n private readonly bg = new Graphics();\n private sprite: Sprite | undefined;\n private readonly countText: Text;\n private readonly chipLayer = new Container(); // chips stay upright (don't rotate)\n private readonly chips: Chip[] = [];\n private readonly idleTex: Texture | undefined;\n private readonly activeTex: Texture | undefined;\n private readonly target: number;\n private readonly radius: number;\n\n private rot = 0;\n private rotTarget = 0;\n private phase = 0; // ms since last state change (drives the stagger)\n private running = false;\n private readonly useRadial: boolean;\n private readonly tick: (t: Ticker) => void;\n\n constructor(private readonly auto: AutoplayControl, ui: OpenUI, private readonly ticker: Ticker, opts: AutoplayViewOptions = {}) {\n super(auto, ui);\n this.idleTex = opts.idleTexture;\n this.activeTex = opts.activeTexture;\n this.target = opts.target ?? 88;\n this.radius = opts.radius ?? 44;\n this.useRadial = opts.picker === 'radial';\n\n this.art.addChild(this.bg);\n if (this.idleTex || this.activeTex) {\n this.sprite = new Sprite(this.idleTex ?? this.activeTex);\n this.sprite.anchor.set(0.5);\n this.fit();\n this.art.addChild(this.sprite);\n }\n this.countText = new Text({ text: '', style: { fontFamily: ui.theme.type.family, fontSize: 26, fill: ui.theme.color.accentText, fontWeight: '800' } });\n this.countText.anchor.set(0.5);\n\n this.addChild(this.chipLayer, this.art, this.countText);\n\n this.eventMode = 'static';\n this.cursor = 'pointer';\n this.hitArea = new Circle(0, 0, (this.sprite ? this.target / 2 : this.radius) + 8);\n this.on('pointerup', () => this.auto.press());\n\n if (this.useRadial) this.buildChips(opts);\n\n this.tick = (t) => this.update(t.deltaMS);\n this.disposers.push(\n this.auto.state.subscribe(() => this.onState()),\n this.auto.count.subscribe(() => this.drawButton()),\n );\n this.drawButton();\n }\n\n private fit(): void {\n if (!this.sprite) return;\n this.sprite.scale.set(1);\n this.sprite.scale.set(this.target / this.sprite.height);\n }\n\n private fmt(n: number): string {\n return n === Infinity ? '∞' : String(n);\n }\n\n private buildChips(opts: AutoplayViewOptions): void {\n const cx = opts.arcCenter?.x ?? 0;\n const cy = opts.arcCenter?.y ?? 0;\n const R = opts.arcRadius ?? (Math.hypot(cx, cy) || 220);\n const start = Math.atan2(-cy, -cx); // angle from arc-center to this button\n const step = (opts.arcStepDeg ?? 24) * DEG * (opts.arcDir ?? 1);\n const th = this.ui.theme;\n const CR = 34; // white circle radius\n\n this.auto.options.forEach((opt, i) => {\n const ang = start + (i + 1) * step; // first chip one step past the button, fanning around spin\n const node = new Container();\n node.addChild(new Graphics().circle(0, 0, CR).fill({ color: 0xffffff }).stroke({ width: 4, color: 0x000000 }));\n const t = new Text({ text: this.fmt(opt), style: { fontFamily: th.type.family, fontSize: 25, fill: 0x15171c, fontWeight: '800' } });\n t.anchor.set(0.5);\n node.addChild(t);\n node.position.set(cx + R * Math.cos(ang), cy + R * Math.sin(ang));\n node.scale.set(0);\n node.visible = false;\n node.eventMode = 'static';\n node.cursor = 'pointer';\n node.hitArea = new Circle(0, 0, CR + 4);\n node.on('pointerup', (e: FederatedPointerEvent) => {\n e.stopPropagation();\n this.auto.pick(opt);\n });\n this.chipLayer.addChild(node);\n this.chips.push({ node, scale: 0 });\n });\n }\n\n private onState(): void {\n // In drawer mode the button stays put; the bottom sheet is the picker.\n this.rotTarget = this.useRadial && this.auto.current === 'picking' ? -60 * DEG : 0;\n this.phase = 0;\n this.drawButton();\n if (!this.running) {\n this.running = true;\n this.ticker.add(this.tick);\n }\n }\n\n private update(dt: number): void {\n this.phase += Math.min(dt, 40); // cap stalls so a stagger step is never skipped\n this.rot += (this.rotTarget - this.rot) * Math.min(1, dt / 110);\n this.art.rotation = this.rot;\n\n const opening = this.auto.current === 'picking';\n const n = this.chips.length;\n let settled = Math.abs(this.rot - this.rotTarget) < 0.003;\n for (let i = 0; i < n; i++) {\n const chip = this.chips[i]!;\n let target: number;\n let ease: number;\n if (opening) {\n target = this.phase > i * 70 ? 1 : 0; // fan OUT in order, gentle\n ease = Math.min(1, dt / 95);\n } else {\n target = this.phase > (n - 1 - i) * 36 ? 0 : 1; // retract LAST→first, tighter stagger\n ease = Math.min(1, dt / 42); // snappier easing on close\n }\n chip.scale += (target - chip.scale) * ease;\n chip.node.scale.set(chip.scale);\n chip.node.visible = chip.scale > 0.01;\n if (Math.abs(chip.scale - (opening ? 1 : 0)) > 0.01) settled = false;\n }\n if (settled) {\n this.running = false;\n this.ticker.remove(this.tick);\n }\n }\n\n private drawButton(): void {\n const st = this.auto.current;\n // The count now lives on the SPIN button (the STOP-N button). This button never\n // shows a number.\n this.countText.visible = false;\n const th = this.ui.theme;\n\n // While autoplay runs, this button is just a YELLOW, DISABLED indicator — the\n // spin button becomes STOP-N and is what stops autoplay. Non-interactive here.\n const active = st === 'active';\n this.eventMode = active ? 'none' : 'static';\n this.cursor = active ? 'default' : 'pointer';\n\n if (active) {\n this.bg.clear();\n if (this.sprite) {\n // Tint the button ART yellow (white disc → accent, dark ring/glyph stay dark)\n // so the highlight is exactly the button's size — no oversized circle behind.\n this.sprite.visible = true;\n this.sprite.tint = th.color.accent;\n this.sprite.alpha = 0.9; // slightly dimmed → reads as disabled\n } else {\n // Drawn fallback (no art): a yellow disc at the real button radius.\n this.bg.circle(0, 0, this.radius).fill({ color: th.color.accent }).stroke({ width: 4, color: th.color.accentText });\n }\n return;\n }\n\n if (this.sprite) {\n this.sprite.visible = true;\n this.sprite.tint = 0xffffff;\n this.bg.clear();\n const tex = this.idleTex ?? this.activeTex;\n if (tex) this.sprite.texture = tex;\n this.fit();\n this.sprite.alpha = st === 'disabled' ? 0.5 : 1;\n } else {\n this.bg.clear();\n this.bg.circle(0, 0, this.radius).fill({ color: th.color.surface }).stroke({ width: 4, color: th.color.accent });\n }\n }\n\n override dispose(): void {\n if (this.running) {\n this.ticker.remove(this.tick);\n this.running = false;\n }\n super.dispose();\n }\n}\n","import { Container, Graphics, Text, Rectangle, type Ticker } from 'pixi.js';\nimport { type AutoplayControl, type OpenUI, type ScreenState } from '@open-slot-ui/core';\n\n// Black-and-white palette — the autoplay picker is monochrome (no theme accent).\nconst WHITE = 0xffffff;\nconst BLACK = 0x0a0a0a;\nconst DARK = 0x0c0d10;\nconst CHIP = 0x23262c;\nconst DIM = 0x9aa0a6;\n\ninterface Chip {\n node: Container;\n bg: Graphics;\n label: Text;\n value: number;\n}\n\ntype GroupKind = 'count' | 'loss' | 'win';\n\ninterface Group {\n kind: GroupKind;\n heading?: Text;\n chips: Chip[];\n selected: number;\n}\n\n/**\n * Autoplay picker as a BOTTOM DRAWER, in black & white. On the autoplay control's\n * `'picking'` state it slides up, dims the HUD, and offers the count choices — plus,\n * when configured, the responsible-gambling limits: \"stop on loss\" and \"stop on\n * single win\" (multiples of bet; ∞ = no limit). Pick → `autoplay.pick(count,\n * {lossLimit, singleWinLimit})`; the host enforces them via `hud.reportRound`. Tap\n * the backdrop → `cancelPicker()`. A full-screen overlay (OpenUIPixi-managed).\n */\nexport class AutoplayDrawerView extends Container {\n private readonly backdrop = new Graphics();\n private readonly sheet = new Container();\n private readonly sheetBg = new Graphics();\n private readonly handle = new Graphics();\n private readonly title: Text;\n private readonly startBtn = new Container();\n private readonly startBg = new Graphics();\n private readonly startLabel: Text;\n private readonly groups: Group[] = [];\n\n private screen: ScreenState | undefined;\n private prog = 0; // 0 hidden → 1 fully shown\n private running = false;\n private sheetH = 300;\n private kk = 1; // active layout scale (base scale shrunk to fit the viewport height)\n private readonly disposers: Array<() => void> = [];\n private readonly tick: (t: Ticker) => void;\n\n constructor(private readonly auto: AutoplayControl, private readonly ui: OpenUI, private readonly ticker: Ticker) {\n super();\n this.zIndex = 200;\n this.visible = false;\n this.eventMode = 'none';\n\n const fam = ui.theme.type.family;\n this.backdrop.eventMode = 'static';\n this.backdrop.cursor = 'pointer';\n this.backdrop.on('pointertap', () => this.auto.cancelPicker());\n\n this.title = new Text({ text: ui.t('Autoplay'), style: { fontFamily: fam, fontSize: 30, fill: WHITE, fontWeight: '800', letterSpacing: 1 } });\n this.title.anchor.set(0.5, 0);\n\n this.startLabel = new Text({ text: ui.t('Start'), style: { fontFamily: fam, fontSize: 26, fill: BLACK, fontWeight: '800', letterSpacing: 1 } });\n this.startLabel.anchor.set(0.5);\n this.startBtn.eventMode = 'static';\n this.startBtn.cursor = 'pointer';\n this.startBtn.on('pointertap', () => this.start());\n this.startBtn.addChild(this.startBg, this.startLabel);\n\n this.sheet.addChild(this.sheetBg, this.handle, this.title);\n\n this.addGroup('count', this.auto.options);\n if (this.auto.lossLimitOptions.length) this.addGroup('loss', this.auto.lossLimitOptions, 'Stop on loss');\n if (this.auto.winLimitOptions.length) this.addGroup('win', this.auto.winLimitOptions, 'Stop on single win');\n\n this.sheet.addChild(this.startBtn);\n this.addChild(this.backdrop, this.sheet);\n\n this.tick = (t) => this.update(t.deltaMS);\n this.disposers.push(this.auto.state.subscribe(() => this.onState()));\n this.disposers.push(\n this.ui.locale.subscribe(() => {\n if (this.destroyed) return;\n this.title.text = this.ui.t('Autoplay');\n this.startLabel.text = this.ui.t('Start');\n for (const g of this.groups) if (g.heading) g.heading.text = this.ui.t(headingKey(g.kind));\n }),\n );\n }\n\n private addGroup(kind: GroupKind, values: number[], headingText?: string): void {\n const fam = this.ui.theme.type.family;\n const group: Group = { kind, chips: [], selected: 0 };\n if (headingText) {\n group.heading = new Text({ text: this.ui.t(headingText), style: { fontFamily: fam, fontSize: 16, fill: DIM, fontWeight: '700', letterSpacing: 0.5 } });\n group.heading.anchor.set(0.5, 0.5);\n this.sheet.addChild(group.heading);\n }\n values.forEach((value) => {\n const node = new Container();\n const bg = new Graphics();\n const label = new Text({ text: chipText(kind, value), style: { fontFamily: fam, fontSize: 24, fill: WHITE, fontWeight: '800' } });\n label.anchor.set(0.5);\n node.eventMode = 'static';\n node.cursor = 'pointer';\n const idx = group.chips.length;\n node.on('pointertap', () => this.select(group, idx));\n node.addChild(bg, label);\n this.sheet.addChild(node);\n group.chips.push({ node, bg, label, value });\n });\n group.selected = defaultSelected(kind, values);\n this.groups.push(group);\n }\n\n applyLayout(screen: ScreenState): void {\n this.screen = screen;\n this.position.set(0, 0);\n this.scale.set(1);\n this.relayout();\n }\n\n /** Base scale from the screen's shorter edge (before fit-to-height). */\n private baseK(): number {\n const s = this.screen;\n if (!s) return 1;\n return Math.max(0.78, Math.min(1.3, Math.min(s.width, s.height) / 1000));\n }\n\n private relayout(): void {\n const s = this.screen;\n if (!s) return;\n let k = this.baseK();\n let h = this.layoutAt(k);\n // Shrink the whole picker to fit the viewport height — with the loss + single-win\n // limit groups it can be taller than a short landscape screen. Height scales with k\n // (and chips wrap MORE as k drops), so a couple of passes converge. Floor 0.35.\n for (let pass = 0; pass < 4 && h > s.height; pass++) {\n k = Math.max(0.35, k * (s.height / h) * 0.97);\n h = this.layoutAt(k);\n }\n this.render2();\n }\n\n /** Lay the sheet out at scale `k`; returns the full slide height (sheetH + 40). */\n private layoutAt(k: number): number {\n const s = this.screen;\n if (!s) return 0;\n this.kk = k;\n const W = s.width;\n const H = s.height;\n\n this.backdrop.clear().rect(0, 0, W, H).fill({ color: 0x000000, alpha: 1 });\n this.backdrop.hitArea = new Rectangle(0, 0, W, H);\n\n this.title.style.fontSize = 30 * k;\n this.title.position.set(W / 2, 22 * k);\n\n const cw = 86 * k;\n const ch = 64 * k;\n const gap = 14 * k;\n const maxRowW = W - 48 * k;\n let y = 22 * k + 30 * k + 20 * k;\n\n for (const g of this.groups) {\n if (g.heading) {\n g.heading.style.fontSize = 16 * k;\n g.heading.position.set(W / 2, y + 10 * k);\n y += 30 * k;\n }\n const n = g.chips.length;\n const perRow = Math.max(1, Math.min(n, Math.floor((maxRowW + gap) / (cw + gap))));\n const rows = Math.ceil(n / perRow);\n g.chips.forEach((chip, i) => {\n const row = Math.floor(i / perRow);\n const inRow = i % perRow;\n const countThisRow = Math.min(perRow, n - row * perRow);\n const rowW = countThisRow * cw + (countThisRow - 1) * gap;\n const x = (W - rowW) / 2 + inRow * (cw + gap) + cw / 2;\n const cy = y + row * (ch + gap) + ch / 2;\n chip.node.position.set(x, cy);\n chip.label.style.fontSize = 24 * k;\n chip.node.hitArea = new Rectangle(-cw / 2, -ch / 2, cw, ch);\n });\n this.drawGroup(g);\n y += rows * (ch + gap) + 12 * k;\n }\n\n const startW = Math.min(W - 48 * k, 320 * k);\n const startH = 58 * k;\n const startY = y + 4 * k + startH / 2;\n this.startBg.clear().rect(-startW / 2, -startH / 2, startW, startH).fill({ color: WHITE });\n this.startLabel.style.fontSize = 24 * k;\n this.startBtn.position.set(W / 2, startY);\n this.startBtn.hitArea = new Rectangle(-startW / 2, -startH / 2, startW, startH);\n\n this.sheetH = startY + startH / 2 + 20 * k;\n // Flat, square, edge-to-edge sheet. Drawn 1px past each side and far past the\n // bottom so no antialiased seam or gap can ever show at the edges.\n this.sheetBg.clear().rect(-1, 0, W + 2, this.sheetH + 40 + 600).fill({ color: DARK });\n this.handle.clear().roundRect(W / 2 - 30 * k, 13 * k, 60 * k, 5 * k, 2.5 * k).fill({ color: DIM });\n\n return this.sheetH + 40;\n }\n\n private drawGroup(g: Group): void {\n const k = this.kk;\n const cw = 86 * k;\n const ch = 64 * k;\n g.chips.forEach((chip, idx) => {\n const on = idx === g.selected;\n chip.bg.clear()\n .rect(-cw / 2, -ch / 2, cw, ch)\n .fill({ color: on ? WHITE : CHIP });\n chip.label.style.fill = on ? BLACK : WHITE;\n });\n }\n\n private select(group: Group, i: number): void {\n group.selected = i;\n this.drawGroup(group);\n }\n\n private valueOf(kind: GroupKind): number | undefined {\n const g = this.groups.find((x) => x.kind === kind);\n return g?.chips[g.selected]?.value;\n }\n\n private start(): void {\n const count = this.valueOf('count') ?? this.auto.options[0] ?? 1;\n this.auto.pick(count, {\n lossLimit: this.valueOf('loss') ?? Infinity,\n singleWinLimit: this.valueOf('win') ?? Infinity,\n });\n }\n\n private onState(): void {\n if (this.auto.current === 'picking') this.visible = true;\n if (!this.running) {\n this.running = true;\n this.ticker.add(this.tick);\n }\n }\n\n private update(dt: number): void {\n const target = this.auto.current === 'picking' ? 1 : 0;\n this.prog += (target - this.prog) * Math.min(1, dt / 140);\n if (Math.abs(this.prog - target) < 0.004) {\n this.prog = target;\n this.running = false;\n this.ticker.remove(this.tick);\n }\n this.render2();\n }\n\n private render2(): void {\n const s = this.screen;\n if (!s) return;\n const SH = this.sheetH + 40;\n this.sheet.position.set(0, s.height - SH * this.prog);\n this.backdrop.alpha = 0.62 * this.prog;\n const shown = this.prog > 0.01;\n this.visible = shown;\n this.eventMode = shown ? 'auto' : 'none';\n this.backdrop.eventMode = shown ? 'static' : 'none';\n }\n\n dispose(): void {\n if (this.running) {\n this.ticker.remove(this.tick);\n this.running = false;\n }\n for (const d of this.disposers) d();\n this.disposers.length = 0;\n if (!this.destroyed) this.destroy({ children: true });\n }\n}\n\nfunction chipText(kind: GroupKind, value: number): string {\n if (value === Infinity) return '∞';\n return kind === 'count' ? String(value) : `${value}×`;\n}\n\nfunction defaultSelected(kind: GroupKind, values: number[]): number {\n if (kind === 'count') {\n const i = values.findIndex((v) => v !== Infinity);\n return i >= 0 ? i : 0;\n }\n const inf = values.indexOf(Infinity);\n return inf >= 0 ? inf : 0;\n}\n\nfunction headingKey(kind: GroupKind): string {\n return kind === 'loss' ? 'Stop on loss' : kind === 'win' ? 'Stop on single win' : 'Autoplay';\n}\n","import { Graphics, Sprite, Rectangle, type Texture, type FederatedPointerEvent } from 'pixi.js';\nimport { type SliderControl, type OpenUI } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\n\n// Geometry from the provided ScrollBar art (290x60 artboard).\nconst VB_W = 290;\nconst VB_H = 60;\nconst GROOVE_X0 = 63;\nconst GROOVE_X1 = 263;\nconst HANDLE_Y = 30;\nconst HANDLE_R = 12;\nconst DISPLAY_W = 260;\nconst S = DISPLAY_W / VB_W;\n\n/**\n * Slider view. With a `trackTexture` (the handle-stripped ScrollBar art) it renders\n * the real gold/white track + draws the moving handle on top. Without one, it draws\n * a clean token-styled slider: a thin track, an accent-filled portion, and a white\n * knob with an accent ring. Origin = track top-left.\n */\nexport class SliderView extends ControlView {\n private readonly handle = new Graphics();\n private readonly hasTexture: boolean;\n private dragging = false;\n\n constructor(private readonly slider: SliderControl, ui: OpenUI, trackTexture?: Texture) {\n super(slider, ui);\n this.hasTexture = !!trackTexture;\n\n const cy = HANDLE_Y * S;\n const x0 = GROOVE_X0 * S;\n const x1 = GROOVE_X1 * S;\n const trackH = 8 * S;\n\n if (trackTexture) {\n const track = new Sprite(trackTexture);\n track.width = VB_W * S;\n track.height = VB_H * S;\n this.addChild(track);\n } else {\n // A clean rail: muted full track with a soft border (no heavy black outline).\n const t = ui.theme;\n const track = new Graphics()\n .roundRect(x0 - trackH / 2, cy - trackH / 2, x1 - x0 + trackH, trackH, trackH / 2)\n .fill({ color: t.color.surfaceAlt })\n .roundRect(x0 - trackH / 2, cy - trackH / 2, x1 - x0 + trackH, trackH, trackH / 2)\n .stroke({ width: 1, color: t.color.textDim, alpha: 0.35 });\n this.addChild(track);\n }\n this.addChild(this.handle);\n\n this.eventMode = 'static';\n this.cursor = 'pointer';\n this.hitArea = new Rectangle(0, 0, VB_W * S, VB_H * S);\n this.on('pointerdown', this.onDown);\n this.on('globalpointermove', this.onMove);\n this.on('pointerup', this.onUp);\n this.on('pointerupoutside', this.onUp);\n\n this.disposers.push(this.slider.value.subscribe(() => this.redraw()));\n this.redraw();\n }\n\n private redraw(): void {\n const cy = HANDLE_Y * S;\n const x0 = GROOVE_X0 * S;\n const x1 = GROOVE_X1 * S;\n const x = x0 + this.slider.value.get() * (x1 - x0);\n\n if (this.hasTexture) {\n this.handle.clear().circle(x, cy, HANDLE_R * S).fill({ color: 0xffffff }).stroke({ width: 4 * S, color: 0x000000 });\n return;\n }\n const t = this.ui.theme;\n const trackH = 8 * S;\n const knobR = 11 * S;\n this.handle.clear()\n // filled portion up to the knob\n .roundRect(x0 - trackH / 2, cy - trackH / 2, x - x0 + trackH, trackH, trackH / 2)\n .fill({ color: t.color.accent })\n // clean white knob with an accent ring\n .circle(x, cy, knobR)\n .fill({ color: 0xffffff })\n .circle(x, cy, knobR)\n .stroke({ width: 3, color: t.color.accent });\n }\n\n private valueFromEvent(e: FederatedPointerEvent): number {\n const svgX = this.toLocal(e.global).x / S;\n return Math.min(1, Math.max(0, (svgX - GROOVE_X0) / (GROOVE_X1 - GROOVE_X0)));\n }\n\n private readonly onDown = (e: FederatedPointerEvent): void => {\n this.dragging = true;\n this.slider.beginDrag();\n this.slider.setNormalized(this.valueFromEvent(e));\n };\n private readonly onMove = (e: FederatedPointerEvent): void => {\n if (this.dragging) this.slider.setNormalized(this.valueFromEvent(e));\n };\n private readonly onUp = (): void => {\n if (this.dragging) {\n this.dragging = false;\n this.slider.endDrag();\n }\n };\n}\n","import { Container, Graphics, Sprite, Circle, Rectangle, type Texture, type Ticker } from 'pixi.js';\nimport { type ToggleControl, type OpenUI, type Transition } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { Tweener } from '../tween';\n\nexport interface ToggleViewOptions {\n offTexture?: Texture;\n onTexture?: Texture;\n target?: number;\n radius?: number;\n}\n\n/**\n * On/off toggle view (e.g. Turbo). Swaps the off/on art on state change; falls\n * back to a token-colored circle when no textures are given. Tap → `toggle()`.\n */\nexport class ToggleView extends ControlView {\n private readonly art = new Container();\n private readonly bg = new Graphics();\n private sprite: Sprite | undefined;\n private readonly tween: Tweener;\n private readonly offTex: Texture | undefined;\n private readonly onTex: Texture | undefined;\n private readonly target: number;\n private readonly radius: number;\n\n constructor(private readonly toggle: ToggleControl, ui: OpenUI, ticker: Ticker, opts: ToggleViewOptions = {}) {\n super(toggle, ui);\n this.tween = new Tweener(ticker);\n this.offTex = opts.offTexture;\n this.onTex = opts.onTexture;\n this.target = opts.target ?? 84;\n this.radius = opts.radius ?? 40;\n\n if (this.offTex || this.onTex) {\n this.sprite = new Sprite(this.texFor());\n this.sprite.anchor.set(0.5);\n this.fit();\n this.art.addChild(this.sprite);\n } else {\n this.art.addChild(this.bg);\n }\n this.addChild(this.art);\n\n this.eventMode = 'static';\n this.cursor = 'pointer';\n // Art → circular hit; drawn fallback → a pill-switch hit area.\n this.hitArea = this.sprite ? new Circle(0, 0, this.target / 2 + 8) : new Rectangle(-35, -23, 70, 46);\n this.on('pointerup', this.onUp);\n\n this.disposers.push(\n this.toggle.state.subscribe(() => this.redraw()),\n this.toggle.onTransition((t) => this.play(t)),\n );\n this.redraw();\n }\n\n private readonly onUp = (): void => {\n this.toggle.toggle();\n };\n\n private texFor(): Texture | undefined {\n return this.toggle.isOn ? (this.onTex ?? this.offTex) : (this.offTex ?? this.onTex);\n }\n\n private fit(): void {\n if (!this.sprite) return;\n this.sprite.scale.set(1);\n this.sprite.scale.set(this.target / this.sprite.height);\n }\n\n private redraw(): void {\n if (this.sprite) {\n const tex = this.texFor();\n if (tex) this.sprite.texture = tex;\n this.fit();\n this.sprite.alpha = this.toggle.current === 'disabled' ? 0.5 : 1;\n return;\n }\n // A clean pill switch: muted track off, accent track on, white knob slides.\n const th = this.ui.theme;\n const on = this.toggle.isOn;\n const w = 54;\n const h = 30;\n const r = h / 2;\n const knobX = on ? w / 2 - r : -(w / 2 - r);\n this.bg.clear()\n .roundRect(-w / 2, -h / 2, w, h, r)\n .fill({ color: on ? th.color.accent : th.color.surfaceAlt })\n .roundRect(-w / 2, -h / 2, w, h, r)\n .stroke({ width: 2, color: on ? th.color.accent : th.color.textDim, alpha: on ? 1 : 0.6 })\n .circle(knobX, 0, r - 4)\n .fill({ color: 0xffffff });\n }\n\n private play(t: Transition | undefined): void {\n this.animating = true;\n void this.tween.run(this.art, t, this.ui.theme).then(() => {\n this.animating = false;\n });\n }\n\n override dispose(): void {\n this.tween.stop();\n super.dispose();\n }\n}\n","import { Container, Graphics, Text, Rectangle, type FederatedPointerEvent, type Ticker } from 'pixi.js';\nimport { type SelectControl, type OpenUI, type Transition } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { Tweener } from '../tween';\n\nexport interface SelectViewOptions {\n width?: number;\n height?: number;\n /**\n * An UNCLIPPED layer (above any scroll mask) to render the open dropdown list\n * into. When given, tapping opens a real list; without it, tapping cycles.\n */\n dropdownLayer?: Container;\n}\n\n/**\n * Select view: a pill showing the caption + current value + a chevron. With a\n * `dropdownLayer`, tapping opens a real dropdown LIST (rendered in that unclipped\n * layer so a scroll mask never clips it); choosing a row selects it. Without one,\n * it falls back to cycle-on-tap. Token-styled; the headless logic is SelectControl.\n */\nexport class SelectView extends ControlView {\n private readonly art = new Container();\n private readonly bg = new Graphics();\n private readonly chevron = new Graphics();\n private readonly captionText: Text;\n private readonly valueText: Text;\n private readonly tween: Tweener;\n private readonly w: number;\n private readonly h: number;\n private readonly dropdownLayer: Container | undefined;\n private dropdown: Container | undefined;\n\n constructor(private readonly select: SelectControl, ui: OpenUI, ticker: Ticker, opts: SelectViewOptions = {}) {\n super(select, ui);\n this.tween = new Tweener(ticker);\n this.w = opts.width ?? 240;\n this.h = opts.height ?? 56;\n this.dropdownLayer = opts.dropdownLayer;\n const t = ui.theme;\n\n this.captionText = new Text({ text: select.caption ?? '', style: { fontFamily: t.type.family, fontSize: 16, fill: t.color.textDim, fontWeight: '600' } });\n this.captionText.anchor.set(0, 0.5);\n this.valueText = new Text({ text: select.optionLabel, style: { fontFamily: t.type.family, fontSize: 20, fill: t.color.text, fontWeight: '700' } });\n this.valueText.anchor.set(1, 0.5);\n\n this.art.addChild(this.bg, this.captionText, this.valueText, this.chevron);\n this.addChild(this.art);\n\n this.eventMode = 'static';\n this.cursor = 'pointer';\n this.hitArea = new Rectangle(-this.w / 2, -this.h / 2, this.w, this.h);\n this.on('pointerup', this.onUp);\n\n this.disposers.push(\n this.select.index.subscribe(() => this.redraw()),\n this.select.state.subscribe(() => { this.redraw(); this.syncDropdown(); }),\n this.select.onTransition((tr) => this.play(tr)),\n this.ui.locale.subscribe(() => {\n if (!this.destroyed) this.redraw();\n }),\n );\n this.redraw();\n }\n\n private readonly onUp = (): void => {\n if (!this.select.interactable) return;\n if (this.dropdownLayer) this.select.isOpen ? this.select.closeList() : this.select.openList();\n else this.select.cycle();\n };\n\n private syncDropdown(): void {\n if (!this.dropdownLayer) return;\n if (this.select.isOpen) this.showDropdown();\n else this.hideDropdown();\n }\n\n private showDropdown(): void {\n this.hideDropdown();\n const layer = this.dropdownLayer;\n if (!layer) return;\n const t = this.ui.theme;\n const w = Math.max(this.w, 220);\n const rowH = 46;\n const opts = this.select.options;\n const listH = opts.length * rowH + 8;\n\n const panel = new Container();\n panel.zIndex = 1;\n const backdrop = new Graphics().rect(-6000, -6000, 12000, 12000).fill({ color: 0x000000, alpha: 0.001 });\n backdrop.eventMode = 'static';\n backdrop.on('pointertap', () => this.select.closeList());\n panel.addChild(backdrop);\n\n const list = new Container();\n list.addChild(new Graphics().roundRect(-w / 2, 0, w, listH, 14).fill({ color: t.color.surface }).stroke({ width: 2, color: t.color.accent }));\n opts.forEach((o, i) => {\n const selected = i === this.select.index.get();\n const cy = 4 + i * rowH + rowH / 2;\n const row = new Container();\n if (selected) row.addChild(new Graphics().roundRect(-w / 2 + 5, 4 + i * rowH, w - 10, rowH, 9).fill({ color: t.color.accent }));\n const label = new Text({ text: this.ui.t(o.label), style: { fontFamily: t.type.family, fontSize: 18, fill: selected ? t.color.accentText : t.color.text, fontWeight: '700' } });\n label.anchor.set(0, 0.5);\n label.position.set(-w / 2 + 20, cy);\n row.addChild(label);\n row.eventMode = 'static';\n row.cursor = 'pointer';\n row.hitArea = new Rectangle(-w / 2, 4 + i * rowH, w, rowH);\n row.on('pointertap', (e: FederatedPointerEvent) => { e.stopPropagation(); this.select.choose(o.value); });\n list.addChild(row);\n });\n panel.addChild(list);\n\n // Position just below the pill, clamped so the list stays on screen.\n const g = this.toGlobal({ x: 0, y: this.h / 2 + 6 });\n const screenH = typeof window !== 'undefined' ? window.innerHeight : 1080;\n const py = listH > screenH - 16 ? 8 : Math.min(g.y, screenH - 8 - listH);\n list.position.set(g.x, Math.max(8, py));\n layer.addChild(panel);\n this.dropdown = panel;\n }\n\n private hideDropdown(): void {\n if (this.dropdown && !this.dropdown.destroyed) this.dropdown.destroy({ children: true });\n this.dropdown = undefined;\n }\n\n private redraw(): void {\n const t = this.ui.theme;\n const disabled = this.select.current === 'disabled';\n const open = this.select.isOpen;\n const w = this.w;\n const h = this.h;\n const edge = disabled ? t.color.disabled : t.color.accent;\n\n this.bg.clear().roundRect(-w / 2, -h / 2, w, h, h / 2).fill({ color: t.color.surfaceAlt }).stroke({ width: 3, color: edge });\n\n this.captionText.text = this.ui.t(this.select.caption ?? '');\n this.captionText.position.set(-w / 2 + 18, 0);\n this.captionText.style.fill = t.color.textDim;\n\n this.valueText.text = this.ui.t(this.select.optionLabel);\n this.valueText.position.set(w / 2 - 32, 0);\n this.valueText.style.fill = disabled ? t.color.textDim : t.color.text;\n\n // chevron points down when closed, up when the list is open\n const cx = w / 2 - 16;\n const dir = open ? -1 : 1;\n this.chevron.clear()\n .moveTo(cx - 5, -4 * dir)\n .lineTo(cx, 4 * dir)\n .lineTo(cx + 5, -4 * dir)\n .stroke({ width: 3, color: edge, cap: 'round', join: 'round' });\n\n this.art.alpha = disabled ? 0.6 : 1;\n }\n\n private play(tr: Transition | undefined): void {\n this.animating = true;\n void this.tween.run(this.art, tr, this.ui.theme).then(() => {\n this.animating = false;\n });\n }\n\n override dispose(): void {\n this.hideDropdown();\n this.tween.stop();\n super.dispose();\n }\n}\n","import { Container, Graphics, Text, Circle, type Ticker } from 'pixi.js';\nimport { type StepperControl, type OpenUI, type Theme } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\n\n/**\n * Stepper view for a panel body: a `[−] value [+]` row (optionally captioned),\n * driving the StepperControl. The ± buttons dim + go non-interactive at the ends\n * (canDec/canInc). Token-styled, locale-reactive.\n */\nexport class StepperView extends ControlView {\n private readonly minus = new Graphics();\n private readonly plus = new Graphics();\n private readonly valueText: Text;\n private readonly captionText?: Text;\n\n constructor(private readonly stepper: StepperControl, ui: OpenUI, _ticker: Ticker) {\n super(stepper, ui);\n const t = ui.theme;\n\n if (stepper.label) {\n this.captionText = new Text({\n text: ui.t(stepper.label),\n style: { fontFamily: t.type.family, fontSize: 14, fill: t.color.textDim, fontWeight: '600' },\n });\n this.captionText.anchor.set(0.5);\n this.captionText.position.set(0, -22);\n this.addChild(this.captionText);\n }\n\n this.valueText = new Text({\n text: '',\n style: { fontFamily: t.type.family, fontSize: 20, fill: t.color.text, fontWeight: '700' },\n });\n this.valueText.anchor.set(0.5);\n this.valueText.position.set(0, this.captionText ? 6 : 0);\n\n this.minus.position.set(-64, this.valueText.y);\n this.plus.position.set(64, this.valueText.y);\n this.minus.hitArea = new Circle(0, 0, 20);\n this.plus.hitArea = new Circle(0, 0, 20);\n this.minus.on('pointerup', () => this.stepper.dec());\n this.plus.on('pointerup', () => this.stepper.inc());\n\n this.addChild(this.minus, this.valueText, this.plus);\n\n this.disposers.push(\n this.stepper.index.subscribe(() => this.redraw()),\n this.ui.locale.subscribe(() => {\n if (!this.destroyed) this.redraw();\n }),\n );\n this.redraw();\n }\n\n private fmt(v: number): string {\n return Number.isInteger(v) ? String(v) : v.toFixed(2);\n }\n\n private redraw(): void {\n const t = this.ui.theme;\n if (this.captionText) this.captionText.text = this.ui.t(this.stepper.label ?? '');\n this.valueText.text = this.fmt(this.stepper.value);\n drawStepButton(this.minus, 'minus', this.stepper.canDec, t);\n drawStepButton(this.plus, 'plus', this.stepper.canInc, t);\n }\n}\n\nfunction drawStepButton(g: Graphics, kind: 'minus' | 'plus', enabled: boolean, t: Theme): void {\n const col = enabled ? t.color.accent : t.color.disabled;\n g.clear();\n g.circle(0, 0, 18).fill({ color: t.color.surfaceAlt }).stroke({ width: 3, color: col });\n g.moveTo(-7, 0).lineTo(7, 0).stroke({ width: 3, color: col, cap: 'round' });\n if (kind === 'plus') g.moveTo(0, -7).lineTo(0, 7).stroke({ width: 3, color: col, cap: 'round' });\n g.alpha = enabled ? 1 : 0.5;\n g.eventMode = enabled ? 'static' : 'none';\n g.cursor = enabled ? 'pointer' : 'default';\n}\n","import { Container, Graphics, Text, Sprite, Texture, type TextStyleOptions, type Ticker } from 'pixi.js';\nimport {\n type OpenUI,\n type Control,\n type BlockSpec,\n type SliderControl,\n type ToggleControl,\n type ButtonControl,\n type SelectControl,\n type StepperControl,\n type ValueDisplay,\n} from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { SliderView } from './SliderView';\nimport { ToggleView } from './ToggleView';\nimport { ButtonView } from './ButtonView';\nimport { SelectView } from './SelectView';\nimport { StepperView } from './StepperView';\nimport { ValueDisplayView } from './ValueDisplayView';\n\n/** Per-id view override — swap a control's renderer without forking (Charter P7). */\nexport type ControlViewFactory = (control: Control, ui: OpenUI, ticker: Ticker) => ControlView;\n\nexport interface BlockColumnOptions {\n controlSkins?: Partial<Record<string, ControlViewFactory>>;\n /** Unclipped layer for select dropdowns (so a scroll mask doesn't clip them). */\n dropdownLayer?: Container;\n}\n\nexport interface BlockColumn {\n /** Rows laid top→down (first row near y=0); the caller positions/scrolls it. */\n content: Container;\n /** Interactive child views, for disposal. */\n views: ControlView[];\n /** Total column height. */\n height: number;\n /** Inner content width (body width minus padding). */\n innerW: number;\n}\n\nconst ROW_H = 72;\nconst PAD = 28;\nconst GAP = 16;\n\n/**\n * Render a declarative `BlockSpec[]` into a column of rows — interactive controls\n * (slider/toggle/button/select/value/stepper) and static content (heading/text/\n * callout/stat-grid/steps/paytable/image). All text flows through `ui.t`. This is\n * the single renderer shared by the small panel body AND the scrollable menu, so\n * blocks look identical wherever they appear (Charter B3/B9).\n */\nexport function buildBlockColumn(\n blocks: BlockSpec[],\n controls: Control[],\n ui: OpenUI,\n ticker: Ticker,\n bodyW: number,\n opts: BlockColumnOptions = {},\n): BlockColumn {\n const t = ui.theme;\n const tr = (s: string): string => ui.t(s);\n const innerW = bodyW - PAD * 2;\n const byId = new Map(controls.map((c) => [c.id, c] as const));\n const content = new Container();\n const views: ControlView[] = [];\n let y = PAD;\n\n const placeFixed = (node: Container, h: number): void => {\n node.position.set(0, y + h / 2);\n content.addChild(node);\n y += h;\n };\n const placeAuto = (node: Container, gap = GAP): void => {\n const h = node.height || 1;\n node.position.set(0, y + h / 2);\n content.addChild(node);\n y += h + gap;\n };\n const leftText = (s: string, style: TextStyleOptions): Container => {\n const wrap = new Container();\n const txt = new Text({ text: s, style });\n txt.anchor.set(0, 0.5);\n txt.position.set(-innerW / 2, 0);\n wrap.addChild(txt);\n return wrap;\n };\n // Section header: a CENTERED uppercase-ish title with a divider line on each\n // side (── TITLE ──), matching the reference design. Theme-colored, so it reads\n // on any surface (light lines on a dark theme, dark lines on a light one).\n const heading = (s: string, size = 18): Container => {\n const wrap = new Container();\n const txt = new Text({\n text: tr(s),\n style: { fontFamily: t.type.family, fontSize: size, fill: t.color.text, fontWeight: '800', letterSpacing: 1 },\n });\n txt.anchor.set(0.5);\n txt.position.set(0, 0);\n const half = Math.min(txt.width / 2, innerW / 2 - 24);\n const gap = 16;\n wrap.addChild(\n new Graphics().moveTo(-innerW / 2, 0).lineTo(-half - gap, 0).stroke({ width: 2, color: t.color.text, alpha: 0.85 }),\n new Graphics().moveTo(half + gap, 0).lineTo(innerW / 2, 0).stroke({ width: 2, color: t.color.text, alpha: 0.85 }),\n txt,\n );\n return wrap;\n };\n const body = (s: string): Container =>\n richParagraphNode(s, ui, innerW, { fontFamily: t.type.family, fontSize: 15, fill: t.color.textDim, lineHeight: 22 });\n // A left-aligned sub-section title (no divider lines — lighter than `heading`).\n const subheading = (s: string): Container => {\n const wrap = new Container();\n const txt = new Text({ text: tr(s), style: { fontFamily: t.type.family, fontSize: 15, fill: t.color.text, fontWeight: '800', letterSpacing: 0.5 } });\n txt.anchor.set(0, 0.5);\n txt.position.set(-innerW / 2, 0);\n wrap.addChild(txt);\n return wrap;\n };\n // Fine-print / legal copy: small and dim.\n const legal = (s: string): Container =>\n richParagraphNode(s, ui, innerW, { fontFamily: t.type.family, fontSize: 12, fill: t.color.textDim, lineHeight: 17 });\n // Centered caption above an interactive control (slider/toggle) — reads cleanly\n // above the centered control even on a wide card.\n const caption = (s: string): Container => {\n const wrap = new Container();\n const txt = new Text({ text: s, style: { fontFamily: t.type.family, fontSize: 15, fill: t.color.text, fontWeight: '700' } });\n txt.anchor.set(0.5);\n wrap.addChild(txt);\n return wrap;\n };\n // A control's HINT: a small dim, centered, wrapped description shown UNDER the\n // control so its function is self-explanatory (e.g. \"Shorter spin animation\").\n const hintNode = (s: string): Container => {\n const wrap = new Container();\n const txt = new Text({\n text: s,\n style: { fontFamily: t.type.family, fontSize: 12.5, fill: t.color.textDim, align: 'center', wordWrap: true, wordWrapWidth: innerW * 0.86, lineHeight: 17 },\n });\n txt.anchor.set(0.5);\n wrap.addChild(txt);\n return wrap;\n };\n\n const makeView = (b: BlockSpec, control: Control): ControlView | null => {\n const skin = opts.controlSkins?.[b.id];\n if (skin) return skin(control, ui, ticker);\n switch (b.kind) {\n case 'slider':\n return new SliderView(control as SliderControl, ui);\n case 'toggle':\n return new ToggleView(control as ToggleControl, ui, ticker, { radius: 22 });\n case 'button':\n return new ButtonView(control as ButtonControl, ui, ticker, { shape: 'pill', height: 48 });\n case 'select':\n return new SelectView(control as SelectControl, ui, ticker, { width: 320, dropdownLayer: opts.dropdownLayer });\n case 'stepper':\n return new StepperView(control as StepperControl, ui, ticker);\n case 'value':\n return new ValueDisplayView(control as ValueDisplay, ui, ticker);\n default:\n console.warn(`[open-ui] block column: no view for kind \"${b.kind}\" (id=\"${b.id}\") — skipped`);\n return null;\n }\n };\n\n const walk = (bs: BlockSpec[]): void => {\n for (const b of bs) {\n switch (b.kind) {\n case 'group':\n if (b.title) placeAuto(heading(b.title, 14), 10);\n walk(b.children);\n break;\n case 'heading':\n placeAuto(heading(b.text), 12);\n break;\n case 'subheading':\n placeAuto(subheading(b.text), 8);\n break;\n case 'text':\n placeAuto(body(tr(b.text)));\n break;\n case 'legal':\n placeAuto(legal(tr(b.text)));\n break;\n case 'divider':\n placeAuto(dividerNode(innerW, ui), 10);\n break;\n case 'callout':\n placeAuto(calloutNode(b, ui, innerW));\n break;\n case 'stat-grid':\n placeAuto(statGridNode(b, ui, innerW));\n break;\n case 'steps':\n placeAuto(body(b.items.map((s, i) => `${b.ordered ? `${i + 1}.` : '•'} ${tr(s)}`).join('\\n')));\n break;\n case 'table':\n placeAuto(tableNode(b, ui, innerW));\n break;\n case 'cards':\n placeAuto(cardsNode(b, ui, innerW));\n break;\n case 'paytable':\n placeAuto(paytableNode(b, ui, innerW));\n break;\n case 'media':\n placeAuto(mediaNode(b, ui, innerW));\n break;\n case 'image': {\n let iw = b.width || 64;\n let ih = b.height || 64;\n if (iw > innerW) { ih = Math.round((ih * innerW) / iw); iw = innerW; } // fit the menu width\n placeAuto(imageBoxNode(b.src, iw, ih, ui));\n break;\n }\n default: {\n const control = byId.get(b.id);\n if (!control) break;\n // Slider/Toggle don't draw their own label — add a caption row above them.\n // (Select/Stepper/Value/Button render their own label, so skip those.)\n if ((b.kind === 'slider' || b.kind === 'toggle') && b.label) placeAuto(caption(tr(b.label)), 6);\n const view = makeView(b, control);\n if (!view) break;\n views.push(view);\n const wrap = new Container();\n if (b.kind === 'slider') view.position.set(-130, -27); // SliderView is left-origin\n wrap.addChild(view);\n placeFixed(wrap, ROW_H);\n // A `hint` explains the control's function, shown dim just below it.\n const hint = (b as { hint?: string }).hint;\n if (hint) placeAuto(hintNode(tr(hint)), 12);\n }\n }\n }\n };\n walk(blocks);\n\n return { content, views, height: y + PAD, innerW };\n}\n\n/**\n * A left-aligned paragraph supporting **bold** inline runs (and `\\n` breaks),\n * word-wrapped to `width`, centred vertically around local 0. Pure Pixi Text, so\n * it's deterministic (no HTMLText). Bold runs use the strong text colour.\n */\nfunction richParagraphNode(s: string, ui: OpenUI, width: number, style: TextStyleOptions): Container {\n const t = ui.theme;\n const c = new Container();\n const lineH = typeof style.lineHeight === 'number' ? style.lineHeight : 22;\n const dim = style.fill;\n const runs: Array<{ text: string; bold: boolean }> = [];\n const re = /\\*\\*(.+?)\\*\\*/g;\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = re.exec(s)) !== null) {\n if (m.index > last) runs.push({ text: s.slice(last, m.index), bold: false });\n runs.push({ text: m[1]!, bold: true });\n last = re.lastIndex;\n }\n if (last < s.length) runs.push({ text: s.slice(last), bold: false });\n\n let x = 0;\n let line = 0;\n const x0 = -width / 2;\n for (const run of runs) {\n for (const w of run.text.split(/(\\n|\\s+)/).filter((p) => p.length)) {\n if (w === '\\n') { x = 0; line += 1; continue; }\n const isSpace = /^\\s+$/.test(w);\n if (isSpace && x === 0) continue;\n const txt = new Text({ text: w, style: { ...style, fontWeight: run.bold ? '800' : style.fontWeight ?? '400', fill: run.bold ? t.color.text : dim } });\n txt.anchor.set(0, 0);\n if (!isSpace && x > 0 && x + txt.width > width) { x = 0; line += 1; }\n txt.position.set(x0 + x, line * lineH);\n c.addChild(txt);\n x += txt.width;\n }\n }\n const totalH = (line + 1) * lineH;\n for (const ch of c.children) ch.y -= totalH / 2;\n return c;\n}\n\nfunction calloutNode(b: Extract<BlockSpec, { kind: 'callout' }>, ui: OpenUI, innerW: number): Container {\n const t = ui.theme;\n const tone = b.tone === 'warning' ? '#ffb020' : t.color.accent;\n const c = new Container();\n const padX = 16;\n const padY = 12;\n const textW = innerW - padX * 2 - 4;\n const title = b.title\n ? new Text({ text: ui.t(b.title), style: { fontFamily: t.type.family, fontSize: 14, fill: tone, fontWeight: '800', letterSpacing: 0.3 } })\n : null;\n title?.anchor.set(0, 0);\n const bodyNode = richParagraphNode(ui.t(b.text), ui, textW, { fontFamily: t.type.family, fontSize: 14, fill: t.color.text, lineHeight: 20 });\n const bodyH = bodyNode.height;\n const titleH = title ? title.height + 6 : 0;\n const h = padY * 2 + titleH + bodyH;\n const x = -innerW / 2;\n const bg = new Graphics()\n .roundRect(x, -h / 2, innerW, h, 10)\n .fill({ color: tone, alpha: 0.08 })\n .roundRect(x, -h / 2, innerW, h, 10)\n .stroke({ width: 1.5, color: tone, alpha: 0.5 })\n .roundRect(x, -h / 2, 4, h, 2)\n .fill({ color: tone });\n c.addChild(bg);\n if (title) {\n title.position.set(x + padX, -h / 2 + padY);\n c.addChild(title);\n }\n bodyNode.position.set(x + padX + textW / 2, -h / 2 + padY + titleH + bodyH / 2);\n c.addChild(bodyNode);\n return c;\n}\n\nfunction statGridNode(b: Extract<BlockSpec, { kind: 'stat-grid' }>, ui: OpenUI, innerW: number): Container {\n const t = ui.theme;\n const c = new Container();\n const rowH = 30;\n const totalH = Math.max(b.items.length * rowH, rowH);\n b.items.forEach((it, i) => {\n const cy = -totalH / 2 + rowH / 2 + i * rowH;\n if (i > 0) {\n c.addChild(new Graphics().moveTo(-innerW / 2, cy - rowH / 2).lineTo(innerW / 2, cy - rowH / 2).stroke({ width: 1, color: t.color.textDim, alpha: 0.18 }));\n }\n const label = new Text({ text: ui.t(it.label), style: { fontFamily: t.type.family, fontSize: 14, fill: t.color.textDim } });\n label.anchor.set(0, 0.5);\n label.position.set(-innerW / 2, cy);\n const value = new Text({ text: ui.t(it.value), style: { fontFamily: t.type.family, fontSize: 14, fill: t.color.text, fontWeight: '700' } });\n value.anchor.set(1, 0.5);\n value.position.set(innerW / 2, cy);\n c.addChild(label, value);\n });\n return c;\n}\n\n/** A thin full-width rule used to separate sections (e.g. before legal copy). */\nfunction dividerNode(innerW: number, ui: OpenUI): Container {\n const c = new Container();\n c.addChild(new Graphics().rect(-innerW / 2, -0.5, innerW, 1).fill({ color: ui.theme.color.textDim, alpha: 0.3 }));\n return c;\n}\n\n/** A generic table: an optional bold header row + body rows of cells. First column\n * left-aligned (labels); every cell flows through `ui.t`. */\nfunction tableNode(b: Extract<BlockSpec, { kind: 'table' }>, ui: OpenUI, innerW: number): Container {\n const t = ui.theme;\n const c = new Container();\n const head = b.columns && b.columns.length ? [b.columns] : [];\n const allRows = [...head, ...b.rows];\n const cols = Math.max(1, b.columns?.length ?? b.rows[0]?.length ?? 1);\n const colW = innerW / cols;\n const rowH = 30;\n const totalH = Math.max(allRows.length * rowH, rowH);\n const left = -innerW / 2;\n allRows.forEach((row, ri) => {\n const cy = -totalH / 2 + rowH / 2 + ri * rowH;\n const isHeader = head.length > 0 && ri === 0;\n if (ri > 0) {\n c.addChild(new Graphics().moveTo(left, cy - rowH / 2).lineTo(innerW / 2, cy - rowH / 2).stroke({ width: 1, color: t.color.textDim, alpha: 0.18 }));\n }\n for (let ci = 0; ci < cols; ci++) {\n const raw = row[ci] ?? '';\n const cx = left + ci * colW + 8;\n const fill = isHeader ? t.color.text : ci === 0 ? t.color.text : t.color.accent;\n const weight = isHeader ? '800' : ci === 0 ? '700' : '700';\n const txt = new Text({ text: ui.t(raw), style: { fontFamily: t.type.family, fontSize: 13, fill, fontWeight: weight } });\n txt.anchor.set(0, 0.5);\n txt.position.set(cx, cy);\n c.addChild(txt);\n }\n });\n return c;\n}\n\n/** A row of feature cards (icon on top + bold title + dim text), wrapping to fit. */\nfunction cardsNode(b: Extract<BlockSpec, { kind: 'cards' }>, ui: OpenUI, innerW: number): Container {\n const t = ui.theme;\n const c = new Container();\n const n = b.items.length || 1;\n const gap = 12;\n const cols = Math.max(1, Math.min(n, Math.floor((innerW + gap) / (150 + gap))));\n const cardW = (innerW - gap * (cols - 1)) / cols;\n const rows = Math.ceil(n / cols);\n const cardH = 132;\n const totalH = rows * cardH + (rows - 1) * gap;\n b.items.forEach((it, i) => {\n const col = i % cols;\n const row = Math.floor(i / cols);\n const cardX = -innerW / 2 + col * (cardW + gap);\n const cardY = -totalH / 2 + row * (cardH + gap);\n const card = new Container();\n card.addChild(\n new Graphics()\n .roundRect(0, 0, cardW, cardH, 12)\n .fill({ color: t.color.surfaceAlt, alpha: 0.6 })\n .roundRect(0, 0, cardW, cardH, 12)\n .stroke({ width: 1, color: t.color.textDim, alpha: 0.15 }),\n );\n if (it.icon) {\n const icon = imageBoxNode(it.icon, 44, 44, ui);\n icon.position.set(cardW / 2, 34);\n card.addChild(icon);\n }\n const title = new Text({ text: ui.t(it.title), style: { fontFamily: t.type.family, fontSize: 14, fill: t.color.text, fontWeight: '800' } });\n title.anchor.set(0.5, 0);\n title.position.set(cardW / 2, it.icon ? 64 : 14);\n card.addChild(title);\n if (it.text) {\n const para = richParagraphNode(ui.t(it.text), ui, cardW - 20, { fontFamily: t.type.family, fontSize: 12, fill: t.color.textDim, lineHeight: 16 });\n para.position.set(cardW / 2, (it.icon ? 96 : 46) + para.height / 2);\n card.addChild(para);\n }\n card.position.set(cardX, cardY);\n c.addChild(card);\n });\n return c;\n}\n\n/** Image + text side-by-side (image left or right), vertically centered. */\nfunction mediaNode(b: Extract<BlockSpec, { kind: 'media' }>, ui: OpenUI, innerW: number): Container {\n const t = ui.theme;\n const c = new Container();\n const imgW = Math.min(b.width ?? 200, Math.round(innerW * 0.4));\n const imgH = b.width && b.height ? Math.round((imgW * b.height) / b.width) : Math.round(imgW * 0.62);\n const gap = 18;\n const textW = innerW - imgW - gap;\n const side = b.side ?? 'left';\n const imgX = side === 'left' ? -innerW / 2 + imgW / 2 : innerW / 2 - imgW / 2;\n const textCx = side === 'left' ? -innerW / 2 + imgW + gap + textW / 2 : -innerW / 2 + textW / 2;\n\n const title = b.title\n ? new Text({ text: ui.t(b.title), style: { fontFamily: t.type.family, fontSize: 15, fill: t.color.text, fontWeight: '800' } })\n : null;\n title?.anchor.set(0, 0);\n const para = richParagraphNode(ui.t(b.text), ui, textW, { fontFamily: t.type.family, fontSize: 14, fill: t.color.textDim, lineHeight: 19 });\n const titleH = title ? title.height + 8 : 0;\n const textH = titleH + para.height;\n const h = Math.max(imgH, textH);\n\n const img = imageBoxNode(b.src, imgW, imgH, ui);\n img.position.set(imgX, 0);\n c.addChild(img);\n if (title) {\n title.position.set(textCx - textW / 2, -textH / 2);\n c.addChild(title);\n }\n para.position.set(textCx, -textH / 2 + titleH + para.height / 2);\n c.addChild(para);\n // reserve the full height so placeAuto spaces the next block correctly\n c.addChild(new Graphics().rect(-innerW / 2, -h / 2, 1, h).fill({ color: 0xffffff, alpha: 0 }));\n return c;\n}\n\n/** A sized box that holds the image's intended footprint while it loads, then\n * renders the image RAW (no imposed border/rounding — designers style their own\n * art). Loads via an `Image` element + `Texture.from` so ANY URL/format works\n * (incl. extensionless/SVG hosts like placehold.co) with CORS. */\nfunction imageBoxNode(src: string, w: number, h: number, ui: OpenUI): Container {\n const t = ui.theme;\n const box = new Container();\n // a faint, un-framed loading placeholder (removed once the image paints)\n const placeholder = new Graphics().rect(-w / 2, -h / 2, w, h).fill({ color: t.color.surfaceAlt, alpha: 0.5 });\n box.addChild(placeholder);\n if (typeof Image !== 'undefined') {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n if (box.destroyed) return;\n try {\n const sp = new Sprite(Texture.from(img));\n sp.anchor.set(0.5);\n sp.width = w;\n sp.height = h;\n box.addChild(sp);\n placeholder.visible = false; // show the raw image, not over a placeholder box\n } catch {\n /* keep the placeholder if the texture can't be created */\n }\n };\n img.onerror = () => {\n /* keep the placeholder box (it shows the intended size) */\n };\n img.src = src;\n }\n return box;\n}\n\ntype PaytableBlock = Extract<BlockSpec, { kind: 'paytable' }>;\n\n/** Paytable: a multi-column symbol grid (icon/name + tiered payouts) when\n * `columns > 1` (the reference design), else a single-column list. */\nfunction paytableNode(b: PaytableBlock, ui: OpenUI, innerW: number): Container {\n const want = Math.max(1, b.columns ?? 1);\n const fit = Math.max(1, Math.floor(innerW / 170)); // auto-reduce to fit narrow menus\n const cols = Math.max(1, Math.min(want, fit, b.rows.length || 1));\n return cols <= 1 ? paytableList(b, ui, innerW) : paytableGrid(b, ui, innerW, cols);\n}\n\nfunction paytableList(b: PaytableBlock, ui: OpenUI, innerW: number): Container {\n const t = ui.theme;\n const c = new Container();\n const rowH = 44;\n const totalH = Math.max(b.rows.length * rowH, rowH);\n const hasIcons = b.rows.some((r) => r.icon);\n const left = -innerW / 2;\n const symbolX = left + (hasIcons ? 48 : 4);\n b.rows.forEach((r, i) => {\n const cy = -totalH / 2 + rowH / 2 + i * rowH;\n if (i > 0) {\n c.addChild(new Graphics().moveTo(left, cy - rowH / 2).lineTo(innerW / 2, cy - rowH / 2).stroke({ width: 1, color: t.color.textDim, alpha: 0.15 }));\n }\n if (r.icon) {\n const icon = imageBoxNode(r.icon, 36, 36, ui);\n icon.position.set(left + 22, cy);\n c.addChild(icon);\n }\n const sym = new Text({ text: ui.t(r.symbol ?? ''), style: { fontFamily: t.type.family, fontSize: 15, fill: t.color.text, fontWeight: '700' } });\n sym.anchor.set(0, 0.5);\n sym.position.set(symbolX, cy);\n const pay = new Text({ text: r.payouts, style: { fontFamily: t.type.family, fontSize: 14, fill: t.color.accent, fontWeight: '700' } });\n pay.anchor.set(1, 0.5);\n pay.position.set(innerW / 2, cy);\n c.addChild(sym, pay);\n });\n return c;\n}\n\nfunction paytableGrid(b: PaytableBlock, ui: OpenUI, innerW: number, cols: number): Container {\n const c = new Container();\n const cellW = innerW / cols;\n const gridRows = Math.ceil(b.rows.length / cols);\n const lineH = 17;\n const maxLines = b.rows.reduce((m, r) => Math.max(m, (r.payouts || '').split('\\n').length), 1);\n const cellH = Math.max(48, 14 + maxLines * lineH);\n const totalH = gridRows * cellH;\n b.rows.forEach((r, i) => {\n const col = i % cols;\n const row = Math.floor(i / cols);\n const cell = paytableCell(r, ui, cellW, lineH);\n cell.position.set(-innerW / 2 + col * cellW + cellW / 2, -totalH / 2 + row * cellH + cellH / 2);\n c.addChild(cell);\n });\n return c;\n}\n\n/** One symbol cell: an icon (or bold name) on the left, the tiered payouts on the\n * right — each line \"label: value\" with the tier label bold (matching the design). */\nfunction paytableCell(r: PaytableBlock['rows'][number], ui: OpenUI, cellW: number, lineH: number): Container {\n const t = ui.theme;\n const cell = new Container();\n const lx = -cellW / 2 + 10;\n let leftW = 0;\n if (r.icon) {\n const icon = imageBoxNode(r.icon, 40, 40, ui);\n icon.position.set(lx + 20, 0);\n cell.addChild(icon);\n leftW = 52;\n } else if (r.symbol) {\n const sym = new Text({ text: ui.t(r.symbol), style: { fontFamily: t.type.family, fontSize: 14, fontWeight: '800', fill: t.color.text } });\n sym.anchor.set(0, 0.5);\n sym.position.set(lx, 0);\n cell.addChild(sym);\n leftW = sym.width + 14;\n }\n const lines = (r.payouts || '').split('\\n');\n const blockH = lines.length * lineH;\n const px = lx + leftW;\n lines.forEach((ln, j) => {\n const ly = -blockH / 2 + lineH / 2 + j * lineH;\n const ci = ln.indexOf(':');\n if (ci >= 0) {\n const label = new Text({ text: ln.slice(0, ci + 1), style: { fontFamily: t.type.family, fontSize: 13, fontWeight: '800', fill: t.color.text } });\n label.anchor.set(0, 0.5);\n label.position.set(px, ly);\n const val = new Text({ text: ln.slice(ci + 1), style: { fontFamily: t.type.family, fontSize: 13, fontWeight: '700', fill: t.color.accent } });\n val.anchor.set(0, 0.5);\n val.position.set(px + label.width + 4, ly);\n cell.addChild(label, val);\n } else {\n const txt = new Text({ text: ln, style: { fontFamily: t.type.family, fontSize: 13, fontWeight: '700', fill: t.color.accent } });\n txt.anchor.set(0, 0.5);\n txt.position.set(px, ly);\n cell.addChild(txt);\n }\n });\n return cell;\n}\n","import { Container, Graphics, Text, Rectangle, type FederatedPointerEvent, type Ticker } from 'pixi.js';\nimport { type PanelControl, type Control, type BlockSpec, type OpenUI, type ScreenState } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { buildBlockColumn, type ControlViewFactory } from './blockColumn';\n\nexport interface MenuViewOptions {\n controlSkins?: Partial<Record<string, ControlViewFactory>>;\n /** Header title (localizable). Default 'Menu'. */\n title?: string;\n /** Max card width in px. Default 560. */\n maxWidth?: number;\n}\n\nconst MARGIN = 16;\nconst HEADER_H = 60;\nconst INSET = 22;\n\n/** The menu ships in ONE look — the light/default card — independent of the game\n * theme, so it can never be switched to a dark variant (matches the notice modal). */\nconst LIGHT = {\n surface: '#ffffff',\n surfaceAlt: '#eef1f6',\n text: '#181b20',\n textDim: '#5b6472',\n border: '#000000',\n accent: '#d99000',\n} as const;\n\n/**\n * The unified MENU: one full-screen, scrollable sheet (Settings → Paytable →\n * Rules) opened by the ☰ button. It renders the composed `BlockSpec[]` through the\n * shared {@link buildBlockColumn} renderer inside a masked, drag/wheel-scrollable\n * viewport — and, crucially, the scroll catcher sits BEHIND the content, so the\n * interactive settings (volume sliders, language select) stay usable while empty\n * space scrolls. Rebuilds on `ui.locale` change so a language switch re-renders it.\n */\nexport class MenuView extends ControlView {\n private readonly backdrop = new Graphics();\n private readonly card = new Graphics();\n private readonly headerBar = new Graphics();\n private readonly title: Text;\n private readonly closeBtn = new Container();\n private readonly viewport = new Container();\n private readonly maskG = new Graphics();\n private readonly catcher = new Graphics();\n private readonly content = new Container();\n /** Unclipped layer above the scroll mask for open select dropdowns. */\n private readonly dropdownLayer = new Container();\n private childViews: ControlView[] = [];\n\n private readonly titleKey: string;\n private readonly maxWidth: number;\n /** `ui` proxy with a light theme — feeds the shared block renderer dark-on-white. */\n private readonly lightUi: OpenUI;\n private vpW = 0;\n private vpH = 0;\n private scrollY = 0;\n private contentH = 0;\n private dragging = false;\n private lastY = 0;\n private wheelHandler: ((e: WheelEvent) => void) | undefined;\n\n constructor(\n private readonly panel: PanelControl,\n private readonly controls: Control[],\n private readonly blocks: BlockSpec[],\n ui: OpenUI,\n private readonly ticker: Ticker,\n private readonly opts: MenuViewOptions = {},\n ) {\n super(panel, ui);\n this.zIndex = 120;\n this.titleKey = opts.title ?? 'Menu';\n this.maxWidth = opts.maxWidth ?? 1600;\n\n // A light-themed view of `ui` (only `theme.color` swapped) so the shared block\n // renderer always paints the menu dark-on-white — the theme can't darken it.\n const lightTheme = { ...ui.theme, color: { ...ui.theme.color, surface: LIGHT.surface, surfaceAlt: LIGHT.surfaceAlt, text: LIGHT.text, textDim: LIGHT.textDim, accent: LIGHT.accent } };\n this.lightUi = new Proxy(ui, { get: (t, p) => (p === 'theme' ? lightTheme : Reflect.get(t, p)) }) as OpenUI;\n\n this.backdrop.eventMode = 'static';\n this.backdrop.on('pointertap', () => this.panel.closePanel());\n\n this.title = new Text({ text: ui.t(this.titleKey), style: { fontFamily: ui.theme.type.family, fontSize: 24, fill: LIGHT.text, fontWeight: '800', letterSpacing: 1 } });\n this.title.anchor.set(0, 0.5);\n\n this.buildClose();\n\n // Scroll catcher sits FIRST (behind the content) so interactive rows win the\n // pointer and only empty space starts a drag-scroll.\n this.viewport.addChild(this.catcher, this.content);\n this.viewport.mask = this.maskG;\n this.catcher.eventMode = 'static';\n this.catcher.on('pointerdown', this.onDown);\n this.catcher.on('globalpointermove', this.onMove);\n this.catcher.on('pointerup', this.onUp);\n this.catcher.on('pointerupoutside', this.onUp);\n\n this.addChild(this.backdrop, this.card, this.viewport, this.maskG, this.headerBar, this.title, this.closeBtn, this.dropdownLayer);\n\n this.rebuildContent();\n this.applyOpen(this.panel.isOpen);\n this.disposers.push(\n this.panel.state.subscribe(() => this.applyOpen(this.panel.isOpen)),\n this.ui.locale.subscribe(() => {\n if (this.destroyed) return;\n this.title.text = this.ui.t(this.titleKey);\n this.rebuildContent();\n }),\n );\n }\n\n private buildClose(): void {\n const r = 22;\n // Solid black circle with a white ✕ (matches the notice modal).\n const bg = new Graphics().circle(0, 0, r).fill({ color: LIGHT.border });\n const x = new Graphics()\n .moveTo(-7, -7).lineTo(7, 7).moveTo(7, -7).lineTo(-7, 7)\n .stroke({ width: 3, color: '#ffffff', cap: 'round' });\n this.closeBtn.addChild(bg, x);\n this.closeBtn.eventMode = 'static';\n this.closeBtn.cursor = 'pointer';\n this.closeBtn.hitArea = new Rectangle(-r, -r, r * 2, r * 2);\n this.closeBtn.on('pointertap', () => this.panel.closePanel());\n }\n\n private rebuildContent(): void {\n for (const v of this.childViews) v.dispose();\n this.childViews.length = 0;\n for (const child of this.content.removeChildren()) child.destroy();\n\n const bodyW = this.vpW > 0 ? this.vpW : Math.min(this.maxWidth - INSET * 2, 520);\n const col = buildBlockColumn(this.blocks, this.controls, this.lightUi, this.ticker, bodyW, { controlSkins: this.opts.controlSkins, dropdownLayer: this.dropdownLayer });\n this.childViews = col.views;\n this.content.addChild(...col.content.removeChildren());\n this.content.x = bodyW / 2; // column rows are centered at x=0\n this.contentH = col.height;\n this.clampScroll();\n }\n\n override applyLayout(screen: ScreenState): void {\n const W = screen.width;\n const H = screen.height;\n this.position.set(0, 0);\n this.scale.set(1);\n\n this.backdrop.clear().rect(0, 0, W, H).fill({ color: 0x000000, alpha: 0.5 });\n this.backdrop.hitArea = new Rectangle(0, 0, W, H);\n\n // The card takes ~90% of the width (like the reference), capped on huge screens.\n const marginX = Math.max(MARGIN, Math.round(W * 0.05));\n const cardW = Math.min(W - marginX * 2, this.maxWidth);\n const cardH = H - MARGIN * 2;\n const cx = (W - cardW) / 2;\n const cy = MARGIN;\n // Always the light card with a black border (never themed dark).\n this.card.clear().roundRect(cx, cy, cardW, cardH, 14).fill({ color: LIGHT.surface }).stroke({ width: 2.5, color: LIGHT.border });\n\n this.headerBar.clear()\n .roundRect(cx, cy, cardW, HEADER_H, 14)\n .fill({ color: LIGHT.surfaceAlt })\n .moveTo(cx + INSET, cy + HEADER_H).lineTo(cx + cardW - INSET, cy + HEADER_H).stroke({ width: 1, color: LIGHT.textDim, alpha: 0.4 });\n this.title.position.set(cx + INSET, cy + HEADER_H / 2);\n this.closeBtn.position.set(cx + cardW - INSET - 8, cy + HEADER_H / 2);\n\n const vpX = cx + INSET;\n const vpY = cy + HEADER_H + INSET;\n const newVpW = cardW - INSET * 2;\n this.vpW = newVpW;\n this.vpH = cardH - HEADER_H - INSET * 2;\n this.viewport.position.set(vpX, vpY);\n this.maskG.clear().rect(vpX, vpY, this.vpW, this.vpH).fill({ color: 0xffffff });\n this.catcher.clear().rect(0, 0, this.vpW, this.vpH).fill({ color: 0xffffff, alpha: 0.0001 });\n this.catcher.hitArea = new Rectangle(0, 0, this.vpW, this.vpH);\n\n // Rebuild the column to the live viewport width (so wrapping is correct).\n this.rebuildContent();\n this.clampScroll();\n }\n\n /** Close any open select dropdown (so scrolling/closing doesn't strand it). */\n private closeSelects(): void {\n for (const c of this.controls) {\n const sc = c as { isOpen?: boolean; closeList?: () => void };\n if (sc.isOpen && typeof sc.closeList === 'function') sc.closeList();\n }\n }\n\n private readonly onDown = (e: FederatedPointerEvent): void => {\n this.dragging = true;\n this.lastY = e.global.y;\n this.closeSelects();\n };\n private readonly onMove = (e: FederatedPointerEvent): void => {\n if (!this.dragging) return;\n this.scrollY += e.global.y - this.lastY;\n this.lastY = e.global.y;\n this.clampScroll();\n };\n private readonly onUp = (): void => {\n this.dragging = false;\n };\n\n private clampScroll(): void {\n const min = Math.min(0, this.vpH - this.contentH);\n this.scrollY = Math.max(min, Math.min(0, this.scrollY));\n this.content.y = this.scrollY;\n }\n\n private applyOpen(open: boolean): void {\n this.visible = open;\n this.eventMode = open ? 'static' : 'none';\n if (open) {\n this.scrollY = 0;\n this.clampScroll();\n if (!this.wheelHandler && typeof window !== 'undefined') {\n this.wheelHandler = (e: WheelEvent) => {\n this.closeSelects();\n this.scrollY -= e.deltaY;\n this.clampScroll();\n };\n window.addEventListener('wheel', this.wheelHandler, { passive: true });\n }\n } else {\n this.closeSelects();\n if (this.wheelHandler && typeof window !== 'undefined') {\n window.removeEventListener('wheel', this.wheelHandler);\n this.wheelHandler = undefined;\n }\n }\n }\n\n override dispose(): void {\n if (this.wheelHandler && typeof window !== 'undefined') window.removeEventListener('wheel', this.wheelHandler);\n for (const v of this.childViews) v.dispose();\n this.childViews.length = 0;\n super.dispose();\n }\n}\n","import { Text, type Ticker } from 'pixi.js';\nimport { type ReadoutControl, type OpenUI, formatAmount } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\n\nconst CAP_DY = -20;\n\nexport interface ReadoutViewOptions {\n /** Compact one-line layout (`CAPTION value`) for the status bar. Default false (stacked). */\n inline?: boolean;\n /** Force black-and-white text (white on a dark bar), ignoring the theme accent/text hue. */\n mono?: boolean;\n /** Single left-aligned `Label: value` line (the Figma top-corner block). */\n prefix?: boolean;\n /** Explicit text colour (else the theme text colour). Lets a light-bg host darken it. */\n fill?: string;\n}\n\n/** Seconds → \"M:SS\" or \"H:MM:SS\". */\nfunction fmtDuration(totalSec: number): string {\n const s = Math.max(0, Math.floor(totalSec));\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n const sec = String(s % 60).padStart(2, '0');\n return h > 0 ? `${h}:${String(m).padStart(2, '0')}:${sec}` : `${m}:${sec}`;\n}\n\n/**\n * A compact, non-interactive readout for the Stake Engine jurisdiction `display*`\n * elements — RTP, net position, session timer. Two layouts: `stacked` (a dim\n * uppercase caption over a bold value — for a screen corner) and `inline`\n * (`CAPTION value` on one line, centered on the seam — for the status bar). `mono`\n * forces white text for the dark b&w status bar. The `'duration'` kind advances\n * itself off the shared ticker while running. Net position shows an explicit +/-.\n */\nexport class ReadoutView extends ControlView {\n private readonly caption?: Text;\n private readonly valueText: Text;\n private readonly tick?: (t: Ticker) => void;\n private readonly prefix: boolean;\n /** Normal + accent value colours for the `emphasized` (modified) tint. */\n private readonly baseFill: string;\n private readonly accentFill: string;\n\n constructor(private readonly ro: ReadoutControl, ui: OpenUI, private readonly ticker: Ticker, opts: ReadoutViewOptions = {}) {\n super(ro, ui);\n const t = ui.theme;\n const inline = opts.inline ?? false;\n this.prefix = opts.prefix ?? false;\n const fill = opts.fill ?? (opts.mono ? '#ffffff' : t.color.text);\n this.baseFill = this.prefix ? (opts.fill ?? '#ffffff') : fill;\n this.accentFill = t.color.accent;\n\n // Figma top-corner block: one left-aligned `Label: value` line per readout. Sized\n // for legibility and given a soft dark shadow so the white text stays readable on\n // ANY background (light or dark) — the readouts draw no backdrop of their own.\n if (this.prefix) {\n this.valueText = new Text({\n text: '',\n style: {\n fontFamily: t.type.family,\n fontSize: 18,\n fill: opts.fill ?? '#ffffff',\n fontWeight: '600',\n dropShadow: { color: 0x000000, alpha: 0.7, blur: 4, distance: 0, angle: 0 },\n },\n });\n this.valueText.alpha = opts.fill ? 1 : 0.92;\n this.valueText.anchor.set(0, 0);\n this.addChild(this.valueText);\n this.disposers.push(\n this.ro.value.subscribe(() => this.render()),\n this.ui.locale.subscribe(() => { if (!this.destroyed) this.render(); }),\n this.ro.emphasized.subscribe(() => this.applyEmphasis()),\n );\n if (this.ro.currency) this.disposers.push(this.ro.currency.subscribe(() => this.render()));\n if (this.ro.kind === 'duration') {\n this.tick = (tk) => this.ro.tick(tk.deltaMS / 1000);\n this.ticker.add(this.tick);\n }\n this.applyEmphasis();\n this.render();\n return;\n }\n\n if (ro.label) {\n this.caption = new Text({\n text: ui.t(ro.label).toUpperCase(),\n style: { fontFamily: t.type.family, fontSize: 12, fill, fontWeight: '700', letterSpacing: inline ? 0.8 : 2 },\n });\n this.caption.alpha = inline ? 0.65 : 0.55;\n if (inline) {\n this.caption.anchor.set(1, 0.5); // ends just left of the seam\n this.caption.position.set(-7, 0);\n } else {\n this.caption.anchor.set(0.5, 1);\n this.caption.y = CAP_DY;\n }\n this.addChild(this.caption);\n }\n\n this.valueText = new Text({ text: '', style: { fontFamily: t.type.family, fontSize: inline ? 20 : 26, fill, fontWeight: '800' } });\n if (inline) {\n this.valueText.anchor.set(0, 0.5); // starts just right of the seam\n this.valueText.position.set(this.caption ? 7 : 0, 0);\n } else {\n this.valueText.anchor.set(0.5, 0.5);\n }\n this.addChild(this.valueText);\n\n this.disposers.push(\n this.ro.value.subscribe(() => this.render()),\n this.ui.locale.subscribe(() => {\n if (this.destroyed) return;\n if (this.caption && this.ro.label) this.caption.text = this.ui.t(this.ro.label).toUpperCase();\n }),\n );\n if (this.ro.currency) this.disposers.push(this.ro.currency.subscribe(() => this.render()));\n this.disposers.push(this.ro.emphasized.subscribe(() => this.applyEmphasis()));\n\n if (this.ro.kind === 'duration') {\n this.tick = (tk) => this.ro.tick(tk.deltaMS / 1000);\n this.ticker.add(this.tick);\n }\n this.applyEmphasis();\n this.render();\n }\n\n /** Tint the value in the theme accent while the readout is emphasized (modified). */\n private applyEmphasis(): void {\n if (this.destroyed) return;\n this.valueText.style.fill = this.ro.emphasized.get() ? this.accentFill : this.baseFill;\n }\n\n private render(): void {\n const v = this.ro.value.get();\n let text: string;\n switch (this.ro.kind) {\n case 'currency':\n text = this.ro.currency ? formatAmount(v, this.ro.currency.get(), { signed: this.ro.signed }) : String(v);\n break;\n case 'percent':\n text = `${v.toFixed(this.ro.decimals)}%`;\n break;\n case 'duration':\n text = fmtDuration(v);\n break;\n default:\n text = String(v);\n }\n this.valueText.text = this.prefix && this.ro.label ? `${this.ui.t(this.ro.label)}: ${text}` : text;\n }\n\n override dispose(): void {\n if (this.tick) this.ticker.remove(this.tick);\n super.dispose();\n }\n}\n","import { Container, Graphics, Text, Rectangle, type Ticker } from 'pixi.js';\nimport { type PanelControl, type OpenUI, type BlockSpec, type Signal, type ScreenState, type NoticeAction } from '@open-slot-ui/core';\nimport { ControlView } from './ControlView';\nimport { buildBlockColumn, type ControlViewFactory } from './blockColumn';\n\nexport interface DialogViewOptions {\n controlSkins?: Partial<Record<string, ControlViewFactory>>;\n /** Max card width in px. Default 520. */\n maxWidth?: number;\n}\n\nconst INSET = 24;\nconst BTN_H = 52;\nconst BTN_GAP = 14;\nconst ROW_GAP = 16;\n\n/** The Figma \"default\" modal is a WHITE card (independent of the dark game theme),\n * matching the menu / buy-feature sheets: dark text on white, a black border, a\n * black primary pill and a white outline secondary. */\nconst LIGHT = {\n surface: '#ffffff',\n surfaceAlt: '#eef1f6',\n text: '#181b20',\n textDim: '#5b6472',\n border: '#000000',\n primary: '#0a0a0a',\n primaryText: '#ffffff',\n} as const;\n\ninterface BuiltButton {\n node: Container;\n bg: Graphics;\n width: number;\n variant: 'primary' | 'secondary';\n}\n\n/**\n * A centered, auto-sized modal rendered in the SAME style as the unified menu — the\n * accent-stroked card on a dimmed backdrop, the same {@link buildBlockColumn}\n * renderer — so notices/errors are themed for free. Content comes from a\n * `Signal<BlockSpec[]>` and the footer buttons from a `Signal<NoticeAction[]>`;\n * every label runs through `ui.t`, so the host's exact text or i18n keys are used.\n * The Stake Engine error/notice surface (`showError` / `showRgsError`).\n */\nexport class DialogView extends ControlView {\n private readonly backdrop = new Graphics();\n private readonly card = new Graphics();\n private readonly closeBtn = new Container();\n private readonly content = new Container();\n private readonly maskG = new Graphics();\n private readonly buttons = new Container();\n private childViews: ControlView[] = [];\n private screen: ScreenState | undefined;\n private readonly maxWidth: number;\n /** `ui` proxy with a light theme — so the shared block renderer draws dark-on-white\n * content inside the white modal card (Figma \"default\" dialog look). */\n private readonly lightUi: OpenUI;\n\n constructor(\n private readonly panel: PanelControl,\n private readonly blocks: Signal<BlockSpec[]>,\n private readonly actions: Signal<NoticeAction[]>,\n ui: OpenUI,\n private readonly ticker: Ticker,\n private readonly opts: DialogViewOptions = {},\n ) {\n super(panel, ui);\n this.zIndex = 130; // above the menu (120)\n this.maxWidth = opts.maxWidth ?? 520;\n\n // A light-themed view of the same `ui` (only `theme.color` swapped) so the shared\n // block renderer paints dark text on the white card; everything else forwards.\n const lightTheme = { ...ui.theme, color: { ...ui.theme.color, surface: LIGHT.surface, surfaceAlt: LIGHT.surfaceAlt, text: LIGHT.text, textDim: LIGHT.textDim } };\n this.lightUi = new Proxy(ui, { get: (t, p) => (p === 'theme' ? lightTheme : Reflect.get(t, p)) }) as OpenUI;\n\n this.backdrop.eventMode = 'static';\n // A blocking/fatal notice can't be tapped away — only `hideNotice` (code) closes it.\n this.backdrop.on('pointertap', () => {\n if (!this.ui.noticeBlocking.get()) this.panel.closePanel();\n });\n this.buildClose();\n\n this.content.mask = this.maskG;\n this.addChild(this.backdrop, this.card, this.content, this.maskG, this.buttons, this.closeBtn);\n\n this.applyOpen(this.panel.isOpen);\n this.disposers.push(\n this.panel.state.subscribe(() => this.applyOpen(this.panel.isOpen)),\n // hide the ✕ when the open notice is blocking (re-renders on toggle)\n this.ui.noticeBlocking.subscribe(() => {\n this.closeBtn.visible = !this.ui.noticeBlocking.get();\n }),\n this.blocks.subscribe(() => {\n if (!this.destroyed) this.relayout();\n }),\n this.actions.subscribe(() => {\n if (!this.destroyed) this.relayout();\n }),\n this.ui.locale.subscribe(() => {\n if (!this.destroyed) this.relayout();\n }),\n );\n }\n\n private buildClose(): void {\n const r = 22;\n // Figma: a solid black circle with a white ✕, sitting at the card's top-right.\n const bg = new Graphics().circle(0, 0, r).fill({ color: LIGHT.primary });\n const x = new Graphics().moveTo(-7, -7).lineTo(7, 7).moveTo(7, -7).lineTo(-7, 7).stroke({ width: 3, color: '#ffffff', cap: 'round' });\n this.closeBtn.addChild(bg, x);\n this.closeBtn.eventMode = 'static';\n this.closeBtn.cursor = 'pointer';\n this.closeBtn.hitArea = new Rectangle(-r, -r, r * 2, r * 2);\n this.closeBtn.on('pointertap', () => this.panel.closePanel());\n }\n\n override applyLayout(screen: ScreenState): void {\n this.screen = screen;\n this.position.set(0, 0);\n this.scale.set(1);\n this.relayout();\n }\n\n private relayout(): void {\n const s = this.screen;\n if (!s) return;\n if (!this.panel.isOpen) return;\n const W = s.width;\n const H = s.height;\n\n for (const v of this.childViews) v.dispose();\n this.childViews.length = 0;\n for (const ch of this.content.removeChildren()) ch.destroy();\n\n const cardW = Math.min(W - 48, this.maxWidth);\n const innerW = cardW - INSET * 2;\n const col = buildBlockColumn(this.blocks.get(), [], this.lightUi, this.ticker, innerW, { controlSkins: this.opts.controlSkins });\n this.childViews = col.views;\n const kids = col.content.removeChildren();\n if (kids.length) this.content.addChild(...kids);\n const contentH = col.height;\n\n const buttonsH = this.buildButtons(innerW);\n\n const wantH = contentH + (buttonsH ? ROW_GAP + buttonsH + INSET : INSET);\n const cardH = Math.min(H - 48, wantH);\n const cx = (W - cardW) / 2;\n const cy = (H - cardH) / 2;\n\n this.backdrop.clear().rect(0, 0, W, H).fill({ color: 0x000000, alpha: 0.5 });\n this.backdrop.hitArea = new Rectangle(0, 0, W, H);\n // White card with a crisp black border (Figma \"default\" modal).\n this.card.clear().roundRect(cx, cy, cardW, cardH, 14).fill({ color: LIGHT.surface }).stroke({ width: 2.5, color: LIGHT.border });\n\n const bodyH = cardH - (buttonsH ? ROW_GAP + buttonsH + INSET : INSET);\n this.content.x = cx + cardW / 2;\n this.content.y = cy;\n this.maskG.clear().rect(cx, cy, cardW, Math.max(0, bodyH)).fill({ color: 0xffffff });\n\n this.buttons.position.set(cx + cardW / 2, cy + cardH - INSET / 2 - buttonsH / 2);\n this.closeBtn.position.set(cx + cardW - 8, cy + 8); // sits on the top-right corner\n }\n\n /** Build the footer buttons from `noticeActions` into a centered row (shrunk to\n * fit if needed). Returns the row height (0 when there are no actions). */\n private buildButtons(innerW: number): number {\n for (const b of this.buttons.removeChildren()) b.destroy();\n const acts = this.ui.noticeActions.get();\n if (!acts.length) return 0;\n\n const made = acts.map((a, i) => this.makeButton(a, a.variant ?? (i === 0 ? 'primary' : 'secondary'), innerW));\n let total = made.reduce((sum, m) => sum + m.width, 0) + BTN_GAP * (made.length - 1);\n if (total > innerW) {\n const scale = innerW / total;\n for (const m of made) {\n m.width *= scale;\n this.drawButton(m.bg, m.variant, m.width);\n m.node.hitArea = new Rectangle(-m.width / 2, -BTN_H / 2, m.width, BTN_H);\n }\n total = made.reduce((sum, m) => sum + m.width, 0) + BTN_GAP * (made.length - 1);\n }\n let x = -total / 2;\n for (const m of made) {\n m.node.position.set(x + m.width / 2, 0);\n x += m.width + BTN_GAP;\n this.buttons.addChild(m.node);\n }\n return BTN_H;\n }\n\n private makeButton(action: NoticeAction, variant: 'primary' | 'secondary', innerW: number): BuiltButton {\n const t = this.ui.theme;\n const node = new Container();\n const bg = new Graphics();\n const label = new Text({\n text: this.ui.t(action.label),\n style: { fontFamily: t.type.family, fontSize: 18, fontWeight: '800', fill: variant === 'primary' ? LIGHT.primaryText : LIGHT.text, letterSpacing: 0.5 },\n });\n label.anchor.set(0.5);\n node.addChild(bg, label);\n const width = Math.min(innerW, Math.max(140, label.width + 56));\n this.drawButton(bg, variant, width);\n node.eventMode = 'static';\n node.cursor = 'pointer';\n node.hitArea = new Rectangle(-width / 2, -BTN_H / 2, width, BTN_H);\n node.on('pointertap', () => {\n action.onSelect?.();\n if (action.emit) this.ui.bus.emit('buttonActivated', { id: action.emit });\n if (!action.keepOpen) this.panel.closePanel();\n });\n return { node, bg, width, variant };\n }\n\n private drawButton(bg: Graphics, variant: 'primary' | 'secondary', width: number): void {\n bg.clear();\n // Figma: primary is a solid black pill; secondary is a white pill with a black border.\n if (variant === 'primary') {\n bg.roundRect(-width / 2, -BTN_H / 2, width, BTN_H, BTN_H / 2).fill({ color: LIGHT.primary });\n } else {\n bg.roundRect(-width / 2, -BTN_H / 2, width, BTN_H, BTN_H / 2).fill({ color: LIGHT.surface }).stroke({ width: 2.5, color: LIGHT.border });\n }\n }\n\n private applyOpen(open: boolean): void {\n this.visible = open;\n this.eventMode = open ? 'static' : 'none';\n this.closeBtn.visible = !this.ui.noticeBlocking.get(); // no ✕ on a blocking notice\n if (open) this.relayout();\n }\n\n override dispose(): void {\n for (const v of this.childViews) v.dispose();\n this.childViews.length = 0;\n super.dispose();\n }\n}\n","import { Container, Graphics, Text, type Application, type Texture, type Ticker } from 'pixi.js';\nimport {\n type OpenUI,\n type BlockSpec,\n type ScreenState,\n EventLog,\n buildBlocks,\n buttonBlocks,\n composeMenu,\n} from '@open-slot-ui/core';\nimport { type ControlView } from './views/ControlView';\nimport { SpinView } from './views/SpinView';\nimport { ValueDisplayView } from './views/ValueDisplayView';\nimport { ButtonView } from './views/ButtonView';\nimport { TurboView } from './views/TurboView';\nimport { AutoplayView } from './views/AutoplayView';\nimport { AutoplayDrawerView } from './views/AutoplayDrawerView';\nimport { MenuView } from './views/MenuView';\nimport { ReadoutView } from './views/ReadoutView';\nimport { DialogView } from './views/DialogView';\nimport { type ControlViewFactory } from './views/blockColumn';\nimport { type SpinSkinFactory } from './skin/SpinSkin';\nimport { type GsapLike } from 'pixi-text-counter';\n\nexport interface OpenUIIcons {\n settingsIdle?: Texture;\n settingsActive?: Texture;\n close?: Texture;\n rules?: Texture;\n sliderMusic?: Texture;\n sliderSound?: Texture;\n turboOff?: Texture;\n turboOn?: Texture;\n /** One texture per turbo mode (index-aligned) — for 3-mode art. Wins over off/on. */\n turboModes?: Texture[];\n autoIdle?: Texture;\n autoActive?: Texture;\n bonus?: Texture;\n betPlus?: Texture;\n betMinus?: Texture;\n}\n\nexport interface OpenUIPixiOptions {\n /** Expose `window.__OPENUI__` for e2e/introspection. Default true. */\n expose?: boolean;\n /** Override the spin control's skin (default = the art-free Graphics placeholder). */\n spinSkin?: SpinSkinFactory;\n /** Real art for the menu/close/slider controls (else neutral placeholders). */\n icons?: OpenUIIcons;\n /**\n * The composed MENU blocks (Settings → Paytable → Rules) the ☰ button opens in a\n * scrollable sheet. Usually built by `mountHud` via `composeMenu(spec.menu, …)`;\n * omitted → a default Settings-only menu (Music/Sound). Pass `false` to skip the\n * built-in Pixi menu entirely (e.g. when supplying your own HTML/DOM menu).\n */\n menu?: BlockSpec[] | false;\n /** Header title for the menu sheet (localizable). Default 'Menu'. */\n menuTitle?: string;\n /** Per-id view override — swap a control's renderer without forking (Charter P7). */\n controlSkins?: Partial<Record<string, ControlViewFactory>>;\n /**\n * Host `gsap` — enables the value counter's auto-downscale so wide currencies\n * (8-decimal BTC, big SATS counts, long codes) shrink to fit instead of spilling.\n * Kept out of the lib's deps (Charter B5); the host passes its own gsap.\n */\n gsap?: GsapLike;\n /**\n * Autoplay count-picker presentation. `'drawer'` (default) is a bottom sheet;\n * `'radial'` fans the count chips around the spin button.\n */\n autoplayPicker?: 'drawer' | 'radial';\n /**\n * Text colour for the top-corner compliance readouts (RTP / net / session). Defaults\n * to the theme text colour; a light-background host can pass a dark colour so the\n * Figma-style `Label: value` block stays legible.\n */\n readoutColor?: string;\n /**\n * How the interactive HUD appears on mount: `'shown'` (default), `'hidden'` (off\n * screen + non-interactive; reveal later with `showControls()`), or `'slide-in'`\n * (start hidden, then slide in from the edges).\n */\n intro?: 'shown' | 'hidden' | 'slide-in';\n}\n\n/** Smooth S-curve for the show/hide slide (translation only — no scaling). */\nfunction easeInOutCubic(p: number): number {\n return p < 0.5 ? 4 * p * p * p : 1 - Math.pow(-2 * p + 2, 3) / 2;\n}\n\n/**\n * The controller: mounts ONE root Container onto the host's existing stage,\n * shares the host ticker/renderer, drives resize, and exposes introspection.\n * `unmount()` removes the layer and every listener it created (Charter P2/P12).\n */\nexport class OpenUIPixi {\n readonly root = new Container();\n private readonly views: ControlView[] = [];\n /** Full-screen overlays (e.g. the autoplay drawer) that own their own layout. */\n private readonly overlays: Array<{ applyLayout(s: ScreenState): void; dispose(): void }> = [];\n private readonly disposers: Array<() => void> = [];\n private _eventLog?: EventLog;\n /** Show/hide slide: each interactive view slides toward its anchored edge (bottom\n * controls down, top up — behind the status-bar plaque). Views stay direct children\n * of `root` (introspection bounds unchanged); only their y moves, and the\n * ref-counted input lock makes them non-interactive while moving/hidden. */\n private slideProg = 0; // 0 = shown · 1 = fully hidden (set per `intro` on mount)\n private slideTarget = 1;\n private slideHeld = false;\n private lastScreenH = 1080;\n private appTicker?: Ticker;\n private slideTickFn?: (t: Ticker) => void;\n private readonly slideBaseY = new Map<ControlView, number>();\n private readonly slideSign = new Map<ControlView, number>();\n /** Buy-feature ⇄ total-win swap: only one shows at a time (see `setupBonusSwap`). */\n private bonusView?: ButtonView;\n private totalWinView?: ValueDisplayView;\n private readonly fadeFns = new Map<Container, (t: Ticker) => void>();\n\n constructor(\n private readonly ui: OpenUI,\n private readonly opts: OpenUIPixiOptions = {},\n ) {}\n\n /** The bus event log backing `window.__OPENUI__.events` (available after mount). */\n get eventLog(): EventLog | undefined {\n return this._eventLog;\n }\n\n mount(app: Application): void {\n const { stage, renderer, ticker } = app;\n this.appTicker = ticker;\n stage.sortableChildren = true;\n this.root.zIndex = 10_000;\n this.root.sortableChildren = true;\n stage.addChild(this.root);\n\n const ic = this.opts.icons ?? {};\n\n // spin + balance/bet value displays\n const spinView = new SpinView(this.ui.spin, this.ui, ticker, this.opts.spinSkin);\n const balanceView = new ValueDisplayView(this.ui.balance, this.ui, ticker, this.opts.gsap);\n const betView = new ValueDisplayView(this.ui.bet, this.ui, ticker, this.opts.gsap);\n\n // settings button (☰) → the unified scrollable MENU (settings/paytable/rules)\n const settingsView = new ButtonView(this.ui.settingsButton, this.ui, ticker, {\n shape: 'circle',\n radius: 40,\n glyph: 'menu',\n iconTexture: ic.settingsIdle,\n iconTarget: 88,\n dark: true, // Figma ☰: solid black circle, white bars, no ring\n });\n settingsView.zIndex = 5;\n\n // `menu: false` skips the built-in Pixi menu (e.g. a host-supplied HTML menu).\n const menuView = this.opts.menu === false ? undefined : this.buildMenu(ticker);\n\n // bottom bar: turbo / autoplay / bonus / bet ± stepper\n const turboView = new TurboView(this.ui.turbo, this.ui, ticker, {\n offTexture: ic.turboOff,\n onTexture: ic.turboOn,\n modeTextures: ic.turboModes,\n target: 79,\n });\n const spinOff = this.ui.spin.layout.offset ?? [0, 0];\n const autoOff = this.ui.autoplay.layout.offset ?? [0, 0];\n const picker = this.opts.autoplayPicker ?? 'drawer';\n const autoplayView = new AutoplayView(this.ui.autoplay, this.ui, ticker, {\n idleTexture: ic.autoIdle,\n activeTexture: ic.autoActive,\n target: 73,\n picker,\n arcCenter: { x: spinOff[0] - autoOff[0], y: spinOff[1] - autoOff[1] },\n arcStepDeg: 22,\n });\n autoplayView.zIndex = 20;\n const bonusView = new ButtonView(this.ui.bonusButton, this.ui, ticker, { shape: 'circle', radius: 60, iconTexture: ic.bonus, iconTarget: 130 });\n const betPlusView = new ButtonView(this.ui.betPlus, this.ui, ticker, { shape: 'circle', radius: 30, iconTexture: ic.betPlus, iconTarget: 64 });\n const betMinusView = new ButtonView(this.ui.betMinus, this.ui, ticker, { shape: 'circle', radius: 30, iconTexture: ic.betMinus, iconTarget: 64 });\n // Bonus total-win readout — the same value renderer as balance/bet (caption pill +\n // rolling counter, same currency/locale money logic). Parked in the buy-feature\n // slot; shown only in a bonus (free-spins) round, swapped for the buy button.\n const totalWinView = new ValueDisplayView(this.ui.totalWin, this.ui, ticker, this.opts.gsap);\n this.bonusView = bonusView;\n this.totalWinView = totalWinView;\n\n // edge controls (master mute + fullscreen) — b&w \"mono\" buttons like turbo.\n const muteView = new ButtonView(this.ui.muteButton, this.ui, ticker, { shape: 'circle', radius: 30, glyph: 'speaker', iconTarget: 60, mono: true });\n const fullscreenView = new ButtonView(this.ui.fullscreenButton, this.ui, ticker, { shape: 'circle', radius: 30, glyph: 'fullscreen', iconTarget: 60, mono: true });\n muteView.zIndex = 65;\n fullscreenView.zIndex = 65;\n // Compliance readouts (RTP / net / session) — a plain `Label: value` block in the\n // top-left corner. Each readout still only shows when its jurisdiction flag is set.\n const roOpts = { prefix: true, fill: this.opts.readoutColor } as const;\n const rtpView = new ReadoutView(this.ui.rtp, this.ui, ticker, roOpts);\n const netView = new ReadoutView(this.ui.netPosition, this.ui, ticker, roOpts);\n const timerView = new ReadoutView(this.ui.sessionTimer, this.ui, ticker, roOpts);\n\n // Every view is mounted; `ui.hidden` only toggles VISIBILITY (so a responsive\n // breakpoint can show/hide a control at runtime — Charter P10). Hidden views\n // stay laid out + introspectable in snapshot, they're just not drawn.\n const entries: Array<[string, ControlView]> = [\n [this.ui.spin.id, spinView],\n [this.ui.balance.id, balanceView],\n [this.ui.bet.id, betView],\n [this.ui.settingsButton.id, settingsView],\n [this.ui.turbo.id, turboView],\n [this.ui.autoplay.id, autoplayView],\n [this.ui.bonusButton.id, bonusView],\n [this.ui.totalWin.id, totalWinView],\n [this.ui.betPlus.id, betPlusView],\n [this.ui.betMinus.id, betMinusView],\n [this.ui.muteButton.id, muteView],\n [this.ui.fullscreenButton.id, fullscreenView],\n ];\n entries.push([this.ui.rtp.id, rtpView]);\n entries.push([this.ui.netPosition.id, netView]);\n entries.push([this.ui.sessionTimer.id, timerView]);\n const viewById = new Map<string, ControlView>();\n const idByView = new Map<ControlView, string>();\n for (const [id, view] of entries) {\n view.visible = !this.ui.hidden.has(id);\n this.root.addChild(view);\n this.views.push(view);\n viewById.set(id, view);\n idByView.set(view, id);\n }\n this.disposers.push(\n this.ui.on('visibilityChanged', ({ id, hidden }) => {\n const v = viewById.get(id);\n if (v) v.visible = !hidden;\n }),\n );\n\n // master mute icon reflects the mute state (speaker ↔ speaker-mute)\n this.disposers.push(this.ui.muted.subscribe((m) => muteView.setGlyph(m ? 'speaker-mute' : 'speaker')));\n\n // fullscreen: the view stays DOM-agnostic, so the controller owns the toggle and\n // keeps the glyph in sync with the actual document fullscreen state.\n if (typeof document !== 'undefined') {\n this.disposers.push(\n this.ui.bus.on('buttonActivated', ({ id }) => {\n if (id !== 'fullscreen') return;\n const el = (app.canvas.parentElement ?? document.documentElement) as HTMLElement;\n if (document.fullscreenElement) void document.exitFullscreen?.();\n else void el.requestFullscreen?.();\n }),\n );\n const onFsChange = (): void => fullscreenView.setGlyph(document.fullscreenElement ? 'fullscreen-exit' : 'fullscreen');\n document.addEventListener('fullscreenchange', onFsChange);\n this.disposers.push(() => document.removeEventListener('fullscreenchange', onFsChange));\n }\n\n // Keyboard spin (Space / Enter), gated by jurisdiction (`disabledSpacebar`) + the\n // lock. RTS 14D: one spin per press — no auto-repeat by holding the key.\n if (typeof window !== 'undefined') {\n let keyHeld = false;\n const onKeyDown = (e: KeyboardEvent): void => {\n if (e.code !== 'Space' && e.key !== 'Enter') return;\n if (!this.ui.spin.allowKeyboard.get() || e.repeat || keyHeld) return;\n keyHeld = true;\n e.preventDefault();\n if (this.ui.spin.interactable) this.ui.spin.activate();\n };\n const onKeyUp = (e: KeyboardEvent): void => {\n if (e.code === 'Space' || e.key === 'Enter') keyHeld = false;\n };\n window.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n this.disposers.push(() => {\n window.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('keyup', onKeyUp);\n });\n }\n\n // The menu is a full-screen overlay that manages its OWN open/closed visibility\n // (driven by the panel state) — so it's an overlay, not a force-visible view.\n if (menuView) {\n this.root.addChild(menuView);\n this.overlays.push(menuView);\n }\n\n // The autoplay bottom drawer (the options-mode picker) is a full-screen overlay.\n if (picker === 'drawer') {\n const drawer = new AutoplayDrawerView(this.ui.autoplay, this.ui, ticker);\n this.root.addChild(drawer);\n this.overlays.push(drawer);\n }\n\n // The menu-style notice / error modal (owns its open/closed visibility → overlay).\n const dialog = new DialogView(this.ui.noticePanel, this.ui.noticeBlocks, this.ui.noticeActions, this.ui, ticker, { controlSkins: this.opts.controlSkins });\n this.root.addChild(dialog);\n this.overlays.push(dialog);\n\n // REPLAY badge (Stake replay mode) — a pill shown while `ui.replay` is true.\n const replayBadge = new Container();\n const replayBg = new Graphics();\n const replayText = new Text({ text: this.ui.t('openui.replay').toUpperCase(), style: { fontFamily: this.ui.theme.type.family, fontSize: 16, fontWeight: '800', fill: 0xffffff, letterSpacing: 2 } });\n replayText.anchor.set(0.5);\n replayBadge.addChild(replayBg, replayText);\n replayBadge.zIndex = 310;\n replayBadge.visible = this.ui.replay.get();\n this.root.addChild(replayBadge);\n this.overlays.push({\n applyLayout: (s) => {\n const w = replayText.width + 36;\n const h = 32;\n replayBg.clear().roundRect(-w / 2, -h / 2, w, h, h / 2).fill({ color: 0x0c0d10 }).stroke({ width: 2, color: 0xffffff });\n replayBadge.position.set(s.width / 2, 40);\n },\n dispose: () => {\n if (!replayBadge.destroyed) replayBadge.destroy({ children: true });\n },\n });\n this.disposers.push(\n this.ui.replay.subscribe((v) => {\n replayBadge.visible = v;\n }),\n this.ui.locale.subscribe(() => {\n if (!replayBadge.destroyed) replayText.text = this.ui.t('openui.replay').toUpperCase();\n }),\n );\n\n // The ☰ menu button keeps the SAME look whether the menu is open or closed —\n // it only ever opens the menu, so it never morphs into a ✕.\n\n const applyLayout = (): void => {\n const screen = this.ui.screen.get();\n this.slideBaseY.clear();\n this.slideSign.clear();\n for (const v of this.views) {\n v.applyLayout(screen);\n const anchor = this.ui.control(idByView.get(v) ?? '')?.layout.anchor ?? 'bottom-center';\n // record the resting y + slide direction (top controls up, the rest down)\n this.slideBaseY.set(v, v.y);\n this.slideSign.set(v, anchor.startsWith('top') ? -1 : 1);\n }\n this.lastScreenH = screen.height;\n this.applySlide();\n for (const o of this.overlays) o.applyLayout(screen);\n };\n const onResize = (): void => {\n this.ui.setScreen(app.screen.width, app.screen.height);\n };\n\n renderer.on('resize', onResize);\n const unsubScreen = this.ui.screen.subscribe(applyLayout);\n onResize();\n applyLayout();\n\n // Initial HUD visibility (configurable via `intro`): shown / hidden / slide-in.\n const intro = this.opts.intro ?? 'shown';\n if (intro === 'shown') {\n this.slideProg = 0;\n this.applySlide();\n } else {\n this.slideProg = 1; // start off-screen\n this.applySlide();\n this.ui.lock(); // non-interactive while hidden\n this.slideHeld = true;\n if (intro === 'slide-in') this.setControlsVisible(true); // animate in (unlocks when shown)\n }\n\n this.disposers.push(() => renderer.off('resize', onResize), unsubScreen);\n\n // Buy-feature ⇄ total-win: the buy button and the total-win readout share the\n // same slot; the renderer shows exactly one, keyed off free-spins mode.\n this.setupBonusSwap();\n\n this._eventLog = new EventLog(this.ui.bus);\n\n if (this.opts.expose ?? true) this.expose();\n }\n\n /**\n * Wire the buy-feature ⇄ total-win swap. In base play the buy button shows (unless\n * hidden by config/jurisdiction); once the spin button enters free-spins mode\n * (`setFreeSpins(n > 0)` — you \"can't buy\" mid-bonus) the buy button fades out and\n * the localized total-win counter fades in over the same slot, then back on exit.\n */\n private setupBonusSwap(): void {\n const bonus = this.bonusView;\n const tw = this.totalWinView;\n if (!bonus || !tw) return;\n const apply = (inBonus: boolean, animate: boolean): void => {\n // Base-play visibility of the buy button still honours config / jurisdiction.\n const bonusShouldShow = !inBonus && !this.ui.hidden.has(this.ui.bonusButton.id);\n if (animate) {\n if (inBonus) {\n tw.visible = true;\n tw.alpha = 0;\n this.fadeTo(tw, 1, 220);\n this.fadeTo(bonus, 0, 160, () => (bonus.visible = false));\n } else {\n if (bonusShouldShow) {\n bonus.visible = true;\n bonus.alpha = 0;\n // settle on the button's own interactable alpha (1, or 0.4 when locked)\n this.fadeTo(bonus, this.ui.bonusButton.interactable ? 1 : 0.4, 220);\n }\n this.fadeTo(tw, 0, 160, () => (tw.visible = false));\n }\n } else {\n this.stopFade(bonus);\n this.stopFade(tw);\n bonus.visible = bonusShouldShow;\n bonus.alpha = this.ui.bonusButton.interactable ? 1 : 0.4;\n tw.visible = inBonus;\n tw.alpha = inBonus ? 1 : 0;\n }\n };\n apply(this.ui.spin.freeSpins.get() > 0, false);\n this.disposers.push(this.ui.spin.freeSpins.subscribe((n) => apply(n > 0, true)));\n }\n\n /** Fade a view's alpha to `to` over `ms` (wall-clock paced); cancels any prior fade\n * on the same view. `onDone` runs once when it settles. */\n private fadeTo(view: Container, to: number, ms: number, onDone?: () => void): void {\n this.stopFade(view);\n const t = this.appTicker;\n const from = view.alpha;\n if (!t || from === to) {\n view.alpha = to;\n onDone?.();\n return;\n }\n const startMs = typeof performance !== 'undefined' ? performance.now() : 0;\n const fn = (): void => {\n const nowMs = typeof performance !== 'undefined' ? performance.now() : startMs + ms;\n const k = Math.min(1, (nowMs - startMs) / Math.max(ms, 1));\n view.alpha = from + (to - from) * k;\n if (k >= 1) {\n view.alpha = to;\n this.stopFade(view);\n onDone?.();\n }\n };\n this.fadeFns.set(view, fn);\n t.add(fn);\n }\n\n /** Cancel an in-flight fade on `view` (if any). */\n private stopFade(view: Container): void {\n const fn = this.fadeFns.get(view);\n if (fn) {\n this.appTicker?.remove(fn);\n this.fadeFns.delete(view);\n }\n }\n\n /**\n * Build the unified scrollable MENU bound to the ☰ panel. Composed `menu` blocks\n * are given by `mountHud`; absent → a default Settings-only menu. Built-in ids\n * ('music'/'sfx') are reused, not shadowed (P10); button blocks wire `closePanel`.\n */\n private buildMenu(ticker: Application['ticker']): ControlView {\n const menu = this.opts.menu && this.opts.menu.length ? this.opts.menu : composeMenu(undefined, {});\n const controls = buildBlocks(menu, this.ui.bus, undefined, (id) => this.ui.control(id));\n for (const c of controls) if (!this.ui.control(c.id)) this.ui.register(c);\n const buttons = buttonBlocks(menu);\n this.disposers.push(\n this.ui.bus.on('buttonActivated', ({ id }) => {\n const b = buttons.find((x) => x.id === id);\n if (b?.action === 'closePanel') this.ui.settingsPanel.closePanel();\n }),\n );\n return new MenuView(this.ui.settingsPanel, controls, menu, this.ui, ticker, {\n controlSkins: this.opts.controlSkins,\n title: this.opts.menuTitle,\n });\n }\n\n /**\n * Slide the whole interactive HUD in (`true`) or out (`false`): bottom-anchored\n * controls travel down, top-anchored travel up (behind the status-bar plaque).\n * Pure translation (no scaling); controls are non-interactive while moving/hidden.\n */\n setControlsVisible(visible: boolean): void {\n const target = visible ? 0 : 1;\n this.slideTarget = target;\n // non-interactive while moving/hidden — hold the ref-counted input lock\n if (!this.slideHeld) {\n this.ui.lock();\n this.slideHeld = true;\n }\n const settle = (): void => {\n // fully shown → release the lock; fully hidden → stay locked\n if (this.slideProg === 0 && this.slideHeld) {\n this.ui.unlock();\n this.slideHeld = false;\n }\n };\n if (!this.appTicker) {\n this.slideProg = target;\n this.applySlide();\n settle();\n return;\n }\n // Drive the slide from a wall-clock timestamp (not accumulated ticker deltas), so\n // it completes in a fixed real-time duration regardless of frame pacing.\n const from = this.slideProg;\n const startMs = typeof performance !== 'undefined' ? performance.now() : 0;\n if (this.slideTickFn) this.appTicker.remove(this.slideTickFn);\n const tick = (): void => {\n const nowMs = typeof performance !== 'undefined' ? performance.now() : startMs + 360;\n const k = Math.min(1, (nowMs - startMs) / 360);\n this.slideProg = from + (target - from) * k;\n if (k >= 1) {\n this.slideProg = target;\n this.appTicker?.remove(tick);\n this.slideTickFn = undefined;\n settle();\n }\n this.applySlide();\n };\n this.slideTickFn = tick;\n this.appTicker.add(tick);\n }\n\n /** Apply the current slide progress: translate each interactive view toward its\n * anchored edge (pure translation — no scaling). */\n private applySlide(): void {\n const off = easeInOutCubic(this.slideProg) * this.lastScreenH;\n for (const [view, baseY] of this.slideBaseY) {\n view.y = baseY + (this.slideSign.get(view) ?? 1) * off;\n }\n }\n\n unmount(): void {\n if (this.slideTickFn && this.appTicker) this.appTicker.remove(this.slideTickFn);\n this.slideTickFn = undefined;\n for (const fn of this.fadeFns.values()) this.appTicker?.remove(fn);\n this.fadeFns.clear();\n for (const v of this.views) v.dispose();\n this.views.length = 0;\n for (const o of this.overlays) o.dispose();\n this.overlays.length = 0;\n this._eventLog?.dispose();\n this._eventLog = undefined;\n for (const d of this.disposers) d();\n this.disposers.length = 0;\n if (!this.root.destroyed) this.root.destroy({ children: true });\n if (typeof window !== 'undefined') {\n delete (window as unknown as Record<string, unknown>).__OPENUI__;\n }\n }\n\n private expose(): void {\n if (typeof window === 'undefined') return;\n (window as unknown as Record<string, unknown>).__OPENUI__ = {\n snapshot: () => this.ui.snapshot(),\n getState: (id: string) => this.ui.control(id)?.current ?? null,\n isInteractable: (id: string) => this.ui.control(id)?.interactable ?? false,\n isAnimating: (id: string) => this.ui.control(id)?.inspect().animating ?? false,\n bounds: (id: string) => this.ui.snapshot().find((s) => s.id === id)?.bounds ?? null,\n events: (since: number) => this._eventLog?.since(since) ?? [],\n controlsReady: () => this.slideProg < 0.001,\n };\n }\n}\n","import { Container, Sprite, type Texture } from 'pixi.js';\nimport { type SpinSkin } from './SpinSkin';\n\nexport interface SvgSpinTextures {\n /** Default look (the spin / rotating-arrows icon). */\n default: Texture;\n /** Autoplay look (the STOP-over-count variant). */\n auto: Texture;\n}\n\n// The artboard is 203x213 with the button circle centered at (100,100), r=100.\n// Anchor each sprite at the circle's center so it sits at the control's origin,\n// regardless of the shadow padding baked into the SVG.\nconst ANCHOR_X = 100 / 203;\nconst ANCHOR_Y = 100 / 213;\n/** Reference-px diameter — spin ≈ 20% of frame width / ~2.4× secondaries (Figma ratio). */\nconst TARGET_DIAMETER = 220;\n\nfunction makeSprite(texture: Texture): Sprite {\n const s = new Sprite(texture);\n s.anchor.set(ANCHOR_X, ANCHOR_Y);\n s.scale.set(TARGET_DIAMETER / 200); // circle diameter is 200 in the artboard\n return s;\n}\n\n/**\n * A skin that renders the provided spin-button SVGs (as textures) faithfully,\n * swapping between the default and autoplay art by state. The control logic is\n * untouched — this is purely the look.\n */\nexport function svgSpinSkin(textures: SvgSpinTextures): SpinSkin {\n const view = new Container();\n const def = makeSprite(textures.default);\n const auto = makeSprite(textures.auto);\n auto.visible = false;\n view.addChild(def, auto);\n\n return {\n view,\n update(state) {\n const isAuto = state === 'auto';\n def.visible = !isAuto;\n auto.visible = isAuto;\n },\n destroy() {\n view.destroy({ children: true });\n },\n };\n}\n"]}
|