[Interactive Graph] Add WB Announcer to Exponential graph#3736
Merged
Conversation
Contributor
npm Snapshot: PublishedGood news!! We've packaged up the latest commit from this PR (6afe1f8) and published it to npm. You Example: pnpm add @khanacademy/perseus@PR3736If you are working in Khan Academy's frontend, you can run the below command. ./dev/tools/bump_perseus_version.ts -t PR3736If you are working in Khan Academy's webapp, you can run the below command. ./dev/tools/bump_perseus_version.js -t PR3736 |
Contributor
|
Size Change: +74 B (+0.01%) Total Size: 509 kB 📦 View Changed
ℹ️ View Unchanged
|
ivyolamit
approved these changes
Jun 8, 2026
…nson/wb-announcer-exponential
Merged
Evelas78
added a commit
that referenced
this pull request
Jun 8, 2026
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @khanacademy/perseus@77.11.0 ### Minor Changes - [#3742](#3742) [`d15912407c`](d159124) Thanks [@nishasy](https://github.com/nishasy)! - [Image] Remove gif flag, make gif controls permanent - [#3725](#3725) [`9c601da23f`](9c601da) Thanks [@EmiliaPalaghita](https://github.com/EmiliaPalaghita)! - Add new JSON field "showPointLabels" for interactive graphs. When set, every movable point gets a visible on-canvas label driven by the matching `pointLabels[i]` entry. `pointLabels` is required whenever `showPointLabels` is true (enforced by the interactive-graph-widget-error lint rule). ### Patch Changes - [#3678](#3678) [`5d4625eb73`](5d4625e) Thanks [@catandthemachines](https://github.com/catandthemachines)! - [Interactive Graph] Add WB Announcer to Quadratic Graph - [#3718](#3718) [`7ba77bb3e5`](7ba77bb) Thanks [@ivyolamit](https://github.com/ivyolamit)! - [Interactive Graph] Refactor movable-line - [#3732](#3732) [`40491377ee`](4049137) Thanks [@Evelas78](https://github.com/Evelas78)! - Added role="figure" to the mafs-graph - [#3729](#3729) [`fcd76e42c0`](fcd76e4) Thanks [@ivyolamit](https://github.com/ivyolamit)! - Add test to catch typo in translation e.g. %(word) -> \\$(word)s - [#3701](#3701) [`7ccf7fbc8f`](7ccf7fb) Thanks [@Myranae](https://github.com/Myranae)! - Migrate sortable fonts and colors to semantic tokens and add regression stories - [#3703](#3703) [`5d00f57022`](5d00f57) Thanks [@Myranae](https://github.com/Myranae)! - Convert expression widget related files to use semantic tokens - [#3733](#3733) [`6f711cfcf9`](6f711cf) Thanks [@catandthemachines](https://github.com/catandthemachines)! - [Interactive Graph] Use WB Announcer in Absolute Value graph. - [#3736](#3736) [`1cd01a4550`](1cd01a4) Thanks [@catandthemachines](https://github.com/catandthemachines)! - [Interactive Graph] Use WB Announcer in Exponential graph. - [#3735](#3735) [`dcc83bdbf8`](dcc83bd) Thanks [@catandthemachines](https://github.com/catandthemachines)! - [Interactive Graph] Use WB Announcer in Logarithm graph. - [#3734](#3734) [`b4d94b3c09`](b4d94b3) Thanks [@catandthemachines](https://github.com/catandthemachines)! - [Interactive Graph] Use WB Announcer in Tangent graph. - Updated dependencies \[[`d15912407c`](d159124), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d), [`5d00f57022`](5d00f57)]: - @khanacademy/perseus-core@27.4.0 - @khanacademy/perseus-linter@5.1.0 - @khanacademy/math-input@26.4.33 - @khanacademy/keypad-context@3.2.61 - @khanacademy/kmath@2.4.19 - @khanacademy/perseus-score@8.11.3 ## @khanacademy/perseus-core@27.4.0 ### Minor Changes - [#3725](#3725) [`9c601da23f`](9c601da) Thanks [@EmiliaPalaghita](https://github.com/EmiliaPalaghita)! - Add new JSON field "showPointLabels" for interactive graphs. When set, every movable point gets a visible on-canvas label driven by the matching `pointLabels[i]` entry. `pointLabels` is required whenever `showPointLabels` is true (enforced by the interactive-graph-widget-error lint rule). ### Patch Changes - [#3742](#3742) [`d15912407c`](d159124) Thanks [@nishasy](https://github.com/nishasy)! - [Image] Remove gif flag, make gif controls permanent - [#3726](#3726) [`ec0ce8d61a`](ec0ce8d) Thanks [@handeyeco](https://github.com/handeyeco)! - Copy data that was once shared into perseus-parser ## @khanacademy/perseus-linter@5.1.0 ### Minor Changes - [#3725](#3725) [`9c601da23f`](9c601da) Thanks [@EmiliaPalaghita](https://github.com/EmiliaPalaghita)! - Add new JSON field "showPointLabels" for interactive graphs. When set, every movable point gets a visible on-canvas label driven by the matching `pointLabels[i]` entry. `pointLabels` is required whenever `showPointLabels` is true (enforced by the interactive-graph-widget-error lint rule). ### Patch Changes - Updated dependencies \[[`d15912407c`](d159124), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d)]: - @khanacademy/perseus-core@27.4.0 - @khanacademy/kmath@2.4.19 ## @khanacademy/keypad-context@3.2.61 ### Patch Changes - Updated dependencies \[[`d15912407c`](d159124), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d)]: - @khanacademy/perseus-core@27.4.0 ## @khanacademy/kmath@2.4.19 ### Patch Changes - Updated dependencies \[[`d15912407c`](d159124), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d)]: - @khanacademy/perseus-core@27.4.0 ## @khanacademy/math-input@26.4.33 ### Patch Changes - [#3703](#3703) [`5d00f57022`](5d00f57) Thanks [@Myranae](https://github.com/Myranae)! - Convert expression widget related files to use semantic tokens - Updated dependencies \[[`d15912407c`](d159124), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d)]: - @khanacademy/perseus-core@27.4.0 - @khanacademy/keypad-context@3.2.61 ## @khanacademy/perseus-editor@32.3.2 ### Patch Changes - [#3722](#3722) [`e751a37c67`](e751a37) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - BUGFIX: Fix cursor positioning after pasting widget content, or after inserting a widget via the "Add a widget…" dropdown, in the markdown editor (was jumping to the end of the content always). - [#3742](#3742) [`d15912407c`](d159124) Thanks [@nishasy](https://github.com/nishasy)! - [Image] Remove gif flag, make gif controls permanent - Updated dependencies \[[`5d4625eb73`](5d4625e), [`7ba77bb3e5`](7ba77bb), [`d15912407c`](d159124), [`40491377ee`](4049137), [`fcd76e42c0`](fcd76e4), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d), [`7ccf7fbc8f`](7ccf7fb), [`5d00f57022`](5d00f57), [`6f711cfcf9`](6f711cf), [`1cd01a4550`](1cd01a4), [`dcc83bdbf8`](dcc83bd), [`b4d94b3c09`](b4d94b3)]: - @khanacademy/perseus@77.11.0 - @khanacademy/perseus-core@27.4.0 - @khanacademy/perseus-linter@5.1.0 - @khanacademy/math-input@26.4.33 - @khanacademy/keypad-context@3.2.61 - @khanacademy/kmath@2.4.19 - @khanacademy/perseus-score@8.11.3 ## @khanacademy/perseus-score@8.11.3 ### Patch Changes - Updated dependencies \[[`d15912407c`](d159124), [`9c601da23f`](9c601da), [`ec0ce8d61a`](ec0ce8d)]: - @khanacademy/perseus-core@27.4.0 - @khanacademy/kmath@2.4.19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The Exponential graph has two distinct keyboard moves, and this wires both into the WB Announcer:
movePointindices 0/1,MovablePoint) — the reducer'sdoMovePointInFigurecase "exponential"now emits amove-exponential-pointstateAnnouncement.getAnnouncementTextreads index 0 as "Point 1 at X comma Y." and index 1 as "Point 2 at X comma Y." (via a newsrExponentialPointLabelhelper), with an author-supplied custom label ("Point A at X comma Y.") overriding when one is set — mirroring sinusoid'spointLabelshandling.moveCenter,MovableAsymptote) —doMoveCenter'scase "exponential"now emits amove-exponential-asymptotestateAnnouncementcarrying the new y, read via the existingsrExponentialAsymptotestring.exponential.tsxpassesariaLive="off"to both theMovablePoints and theMovableAsymptoteso moves aren't double-announced.MovableAsymptotegains an optionalariaLiveprop that defaults to"polite", leaving any not-yet-migrated asymptote graph that shares the component unchanged.stateAnnouncement.aria-livefromuseControlPoint/MovableAsymptoteonce every graph is wired to the announcer.Note
The asymptote announcement reuses
srExponentialAsymptote("Horizontal asymptote at y equals Y. Use up and down arrow keys to move."), preserving today's behavior exactly. The keyboard hint now repeats on every keypress through the announcer — a position-only string could be a nice follow-up.The
MovableAsymptoteariaLiveprop is also introduced by the Logarithm PR (LEMS-4194). If both merge, whichever lands second needs a trivial rebase on that shared component change.Issue: LEMS-4193
Test plan
Automated
pnpm tsc— passespnpm lint(changed files) — passespnpm jest packages/perseus/src/widgets/interactive-graphs— passes (reducer, screenreader-text, exponential, and movable-asymptote suites)Manual (reviewer)