diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 33bac8ab..414748a2 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -23,6 +23,9 @@ kept so existing scripts fail loudly (Refs #56) ==== Added +* PixiUI: rename extern type `List` → `UiList` so `use PixiUI` typechecks +against prelude `List` (kind mismatch). Harness actually imports +`smokeIdaptikReach` / Assets mock. Smokes compile + run (Refs #760) * Pixi/UI/Sound idaptik-reached remainder (#760): Graphics circle/stroke/roundRect/path, per-axis Container x/y, parent Option, interactiveChildren, ObservablePoint.set, Texture.WHITE, Assets diff --git a/stdlib/PixiUI.affine b/stdlib/PixiUI.affine index 1977559f..a672af0c 100644 --- a/stdlib/PixiUI.affine +++ b/stdlib/PixiUI.affine @@ -119,7 +119,7 @@ pub extern fn pixiUiSwitchAsContainer(sw: Switch) -> Container; // ── ProgressBar / List / Input (#56 gap-fill) ────────────────────── pub extern type ProgressBar; -pub extern type List; +pub extern type UiList; pub extern type Input; /// `new PixiUI.ProgressBar(options)`. @@ -129,10 +129,10 @@ pub extern fn pixiUiProgressBarNew(options: Json) -> ProgressBar; pub extern fn pixiUiProgressBarAsContainer(p: ProgressBar) -> Container; /// `new PixiUI.List(options)`. -pub extern fn pixiUiListNew(options: Json) -> List; +pub extern fn pixiUiListNew(options: Json) -> UiList; /// Upcast List → Container. Zero-cost identity lowering. -pub extern fn pixiUiListAsContainer(l: List) -> Container; +pub extern fn pixiUiListAsContainer(l: UiList) -> Container; /// `new PixiUI.Input(options)`. pub extern fn pixiUiInputNew(options: Json) -> Input; @@ -163,7 +163,7 @@ pub extern fn pixiUiSliderSetValue(s: Slider, v: Float) -> Int; pub extern fn pixiUiSliderAddChild(s: Slider, child: Json) -> Int; /// `list.addChild(child)`. -pub extern fn pixiUiListAddChild(l: List, child: Json) -> Int; +pub extern fn pixiUiListAddChild(l: UiList, child: Json) -> Int; /// `input.value` getter/setter + enter/change signals. pub extern fn pixiUiInputValue(i: Input) -> String; diff --git a/tests/codegen-deno/pixi_smoke.harness.mjs b/tests/codegen-deno/pixi_smoke.harness.mjs index a716b038..dbdcdab3 100644 --- a/tests/codegen-deno/pixi_smoke.harness.mjs +++ b/tests/codegen-deno/pixi_smoke.harness.mjs @@ -118,12 +118,21 @@ class MockApplication { constructor() { this.stage = new MockContainer(); this.canvas = { tagName: "CANVAS" }; - this.ticker = { add() {}, start() {}, stop() {} }; + this.ticker = { deltaTime: 1.5, add() {}, start() {}, stop() {}, remove() {} }; + this.renderer = { + width: 800, + height: 600, + resize(w, h) { this.width = w; this.height = h; operationsLog.push("rendererResize"); }, + }; } async init(options) { initCalls.push(options); } destroy() { operationsLog.push("appDestroy"); } } +const assetInits = []; +const bundles = []; +const bgBundles = []; + globalThis.__as_pixi = { Application: MockApplication, Container: MockContainer, @@ -136,11 +145,17 @@ globalThis.__as_pixi = { BlurFilter: MockBlurFilter, NineSliceSprite: MockNineSliceSprite, Texture: { + WHITE: { __mockTexture: true, url: "WHITE" }, from(url) { textureUrls.push(url); return { __mockTexture: true, url }; }, }, + Assets: { + async init(options) { assetInits.push(options); }, + async loadBundle(name) { bundles.push(name); }, + backgroundLoadBundle(names) { bgBundles.push(...names); }, + }, }; -const { smokeInit, smokeSpriteFlow, smokeGraphicsFlow, smokeAccessorsFlow, smokeGapFill } = await import("./pixi_smoke.bun.js"); +const { smokeInit, smokeSpriteFlow, smokeGraphicsFlow, smokeAccessorsFlow, smokeGapFill, smokeIdaptikReach, smokeAssets } = await import("./pixi_smoke.bun.js"); // Async init returns an Application after `await app.init(options)` const app = await smokeInit({ width: 800, height: 600, backgroundColor: 0x1099bb }); diff --git a/tests/codegen-deno/pixiui_smoke.affine b/tests/codegen-deno/pixiui_smoke.affine index fa85948f..dfccf74f 100644 --- a/tests/codegen-deno/pixiui_smoke.affine +++ b/tests/codegen-deno/pixiui_smoke.affine @@ -6,7 +6,7 @@ // registration, and upcast → Container for each MVP component. use Deno::{Json}; -use PixiUI::{Button, FancyButton, Slider, Switch, Container, Input, List, ProgressBar, pixiUiButtonNew, pixiUiButtonOnPress, pixiUiButtonAsContainer, pixiUiFancyButtonNew, pixiUiFancyButtonAsContainer, pixiUiFancyButtonOnPress, pixiUiFancyButtonOnDown, pixiUiFancyButtonOnHover, pixiUiSliderNew, pixiUiSliderOnUpdate, pixiUiSliderAsContainer, pixiUiSliderSetValue, pixiUiSliderValue, pixiUiSliderAddChild, pixiUiSwitchNew, pixiUiSwitchOnChange, pixiUiSwitchAsContainer, pixiUiProgressBarNew, pixiUiProgressBarAsContainer, pixiUiProgressBarSetProgress, pixiUiProgressBarProgress, pixiUiListNew, pixiUiListAsContainer, pixiUiListAddChild, pixiUiInputNew, pixiUiInputAsContainer, pixiUiInputValue, pixiUiInputSetValue, pixiUiInputOnEnter, pixiUiInputOnChange}; +use PixiUI::{Button, FancyButton, Slider, Switch, Container, Input, ProgressBar, pixiUiButtonNew, pixiUiButtonOnPress, pixiUiButtonAsContainer, pixiUiFancyButtonNew, pixiUiFancyButtonAsContainer, pixiUiFancyButtonOnPress, pixiUiFancyButtonOnDown, pixiUiFancyButtonOnHover, pixiUiSliderNew, pixiUiSliderOnUpdate, pixiUiSliderAsContainer, pixiUiSliderSetValue, pixiUiSliderValue, pixiUiSliderAddChild, pixiUiSwitchNew, pixiUiSwitchOnChange, pixiUiSwitchAsContainer, pixiUiProgressBarNew, pixiUiProgressBarAsContainer, pixiUiProgressBarSetProgress, pixiUiProgressBarProgress, pixiUiListNew, pixiUiListAsContainer, pixiUiListAddChild, pixiUiInputNew, pixiUiInputAsContainer, pixiUiInputValue, pixiUiInputSetValue, pixiUiInputOnEnter, pixiUiInputOnChange}; pub fn smokeButton(options: Json, callback: Json) -> Container { let b = pixiUiButtonNew(options);