Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
-
D2-1: createDialogs().background edits the last message with no update
-
D2-5: over-long callback_data throws a named error into onError
-
D2-2: concurrent taps on one stack don't lost-update (withLock + reload)
three fixes that previously had no e2e coverage:
test: cover D2-1/D2-2/D2-5 end-to-end via @gramio/testAdds real-bot integration tests through TelegramTestEnvironment for the
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
Strictly more permissive — not a breaking change. Tests: datadict-interface.
-
export
AnyData/RenderDatablocked
Window<interface>⊆Window<DataDict>);isHiddenmade generic -
widen
Dialogwindow storage toWindow<AnyData>(Getter's covariant returninterface, and untyped windows alike
DataDict
collapses toDataDict, sod.dialogData` keeps working for typed,render callback: the engine injects
dialogData/startData, and `AnyData & -
new
RenderData<Data> = Data & DataDicttypesRenderContext.dataand every -
DataDictstays the concrete, indexable bag the engine stores/indexesspelled out for intent); ~30 user-facing
extends DataDict→extends AnyData -
new
AnyData = Record<PropertyKey, unknown> | objectconstraint (≡ object,
failed extends DataDict (interfaces have no implicit index signature).
feat: accept interface-typed window Data (not just type)A typed Window<Data> / getter now accepts a TS interface, which previously
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
messages. No behavior change.
compiler; the bare alias reads better in hovers and constraint-violation
refactor: simplify AnyData to object (same type, cleaner tooltips/errors)Record<PropertyKey, unknown> | object is identical to object for the
chore(release): v0.3.0Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
check` (CI) failed on formatting only. No logic change.
style: biome-format plugin.test.ts (unbreak CI lint)The D2 e2e tests were committed without running bun run lint; `bun run
data-derived, undefined return, and Url combo).
Add test coverage for function-style resolution (static → ✓,
LinkWidget (Url/WebApp), and SwitchInlineWidget render paths.
Add resolveStyle() helper, wire it through ButtonWidget,
WhenCondition and TextSource for render-data-derived values.
in addition to a static value, matching the pattern used by
feat: support dynamic style function on Button (like TextSource)Make ButtonChrome.style accept a function (rc) => ButtonStyle
chore: v0.3.1
fix: allow undefined return in style function, update CLAUDE.md with full check
Full Changelog: v0.2.1...v0.3.1