Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create helper to build public widget options for orderer #2137

Merged
merged 23 commits into from
Jan 23, 2025

Conversation

Myranae
Copy link
Contributor

@Myranae Myranae commented Jan 22, 2025

Summary:

Adds a function that takes orderer's full widget options and filters out answer data. It also adds this function to the widget's widget export and adds a test confirming the function does as expected.

Issue: LEMS-2763

Test plan:

  • Confirm all checks pass
  • Confirm orderer still works as expected

@Myranae Myranae self-assigned this Jan 22, 2025
Copy link
Contributor

github-actions bot commented Jan 22, 2025

npm Snapshot: Published

Good news!! We've packaged up the latest commit from this PR (26d9e2b) and published it to npm. You
can install it using the tag PR2137.

Example:

yarn add @khanacademy/perseus@PR2137

If you are working in Khan Academy's webapp, you can run:

./dev/tools/bump_perseus_version.sh -t PR2137

Copy link
Contributor

github-actions bot commented Jan 22, 2025

Size Change: +166 B (+0.01%)

Total Size: 1.48 MB

Filename Size Change
packages/perseus-core/dist/es/index.js 28.6 kB +136 B (+0.48%)
packages/perseus/dist/es/index.js 396 kB +30 B (+0.01%)
ℹ️ View Unchanged
Filename Size
packages/kas/dist/es/index.js 39 kB
packages/keypad-context/dist/es/index.js 760 B
packages/kmath/dist/es/index.js 86.8 kB
packages/math-input/dist/es/index.js 77.6 kB
packages/math-input/dist/es/strings.js 1.79 kB
packages/perseus-editor/dist/es/index.js 689 kB
packages/perseus-linter/dist/es/index.js 22.2 kB
packages/perseus-score/dist/es/index.js 113 kB
packages/perseus/dist/es/strings.js 5.37 kB
packages/pure-markdown/dist/es/index.js 3.66 kB
packages/simple-markdown/dist/es/index.js 12.5 kB

compressed-size-action

Comment on lines 6 to 14
/**
* For details on the individual options, see the
* PerseusOrdererWidgetOptions type
*/
type OrdererPublicWidgetOptions = {
options: ReadonlyArray<PerseusRenderer>;
height: "normal" | "auto";
layout: "horizontal" | "vertical";
};
Copy link
Contributor Author

@Myranae Myranae Jan 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed correctOptions (answers) and otherOptions (options with answer excluded).

For contrast, here are the regular widget options:

export type PerseusOrdererWidgetOptions = {
    // All of the options available to the user. Place the cards in the correct order. The same card can be used more than once in the answer but will only be displayed once at the top of a stack of identical cards.
    options: ReadonlyArray<PerseusRenderer>;
    // The correct order of the options
    correctOptions: ReadonlyArray<PerseusRenderer>;
    // Cards that are not part of the answer
    otherOptions: ReadonlyArray<PerseusRenderer>;
    // "normal" for text options.  "auto" for image options.
    height: "normal" | "auto";
    // Use the "horizontal" layout for short text and small images. The "vertical" layout is best for longer text (e.g. proofs).
    layout: "horizontal" | "vertical";
};

@Myranae Myranae marked this pull request as ready for review January 22, 2025 21:07
Copy link
Member

@benchristel benchristel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Copy link
Collaborator

@jeremywiebe jeremywiebe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice. One thing I was thinking as I read through this. We will almost certainly need to call this in a server environment and so I think a better place to build out these helpers is in @khanacademy/perseus-core. Otherwise, shortly after we build these all we'll be moving them anyways. :)

Comment on lines 12 to 13
height: "normal" | "auto";
layout: "horizontal" | "vertical";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if this was discussed elsewhere, but it might be useful to build these types off of the main widget options type. This will help keep it clear that this type is a subset of the full widget options.

Suggested change
height: "normal" | "auto";
layout: "horizontal" | "vertical";
height: PerseusOrdererWidgetOptions["height"];
layout: PerseusOrdererWidgetOptions["layout"];

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated :)

options: PerseusOrdererWidgetOptions,
): OrdererPublicWidgetOptions {
return {
options: options.options,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a sense that we should "deep copy" these public variants. As this is, the .options array will be the same one between the original widget options and this public one we're returning. Likely never an issue, but making a copy feels safer.

@benchristel do you have thoughts?

Suggested change
options: options.options,
options: [...options.options],

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason to make a copy is to guard against possible bugs if the array gets mutated later, right?

React's philosophy is that data should never be mutated in place. AFAICT, our code generally follows that guideline, whether it interacts with React or not. As it should!

IMO, we should copy data only at the point where we need to make a change to it. Copying elsewhere reduces clarity and harms performance without a concrete benefit. So I'd prefer not copying here.

...unless you know of a place where we're mutating the data produced by this function?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ben, didn't you mention that with Categorizer I think we update the values field based on user input? Would that be an instance of modifying these options? I think the main goal of these public widget options is just to render the clientside widgets, but if the object gets modified to track user input, copying might be needed.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can't see these functions ever being used directly with React. They'll be used in an editing environment and the publish pipeline most so the issue of mutation after copy doesn't matter here.

So let's avoid copying.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good! I'll leave it as it is then :) Thanks!

…il files out of widget folder in perseus package to utils folder in perseus-core
… tb/LEMS-2763/orderer-public-widget-options

# Conflicts:
#	packages/perseus/src/widgets/orderer/orderer.tsx
@Myranae Myranae merged commit b4b3a3d into main Jan 23, 2025
8 checks passed
@Myranae Myranae deleted the tb/LEMS-2763/orderer-public-widget-options branch January 23, 2025 20:33
catandthemachines added a commit that referenced this pull request Jan 27, 2025
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@52.0.0

### Major Changes

- [#1965](#1965)
[`0f2bec314`](0f2bec3)
Thanks [@Myranae](https://github.com/Myranae)! - Refactor the LabelImage
widget to separate out answers from userInput into scoringData


- [#2134](#2134)
[`117e78d03`](117e78d)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move widget ID
utils to perseus-core


- [#2153](#2153)
[`29a1c656e`](29a1c65)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Rename all
instances of the term "ScoringData" back to "Rubric"


- [#2135](#2135)
[`7a984eba6`](7a984eb)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Expression
WidgetOptions logic to core

### Minor Changes

- [#2002](#2002)
[`a1e22a4e3`](a1e22a4)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Add and improve
types for scoring and validation


- [#2155](#2155)
[`0df0b1940`](0df0b19)
Thanks [@benchristel](https://github.com/benchristel)! - Move
`parsePerseusItem`, `parseAndMigratePerseusItem`,
    `parseAndMigratePerseusArticle`, `isSuccess`, and `isFailure` to the
`perseus-core` package, and deprecate the equivalent exports from the
`perseus`
    package.


- [#2032](#2032)
[`22d108fdc`](22d108f)
Thanks [@anakaren-rojas](https://github.com/anakaren-rojas)! - adds aria
labels to line segment


- [#2038](#2038)
[`e6f7cc91e`](e6f7cc9)
Thanks [@Myranae](https://github.com/Myranae)! - Fix some naming
discrepancies related to validation and simplify Matcher ScoringData
type


- [#2083](#2083)
[`4c10af109`](4c10af1)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Use empty
widgets check in scoring function


- [#2000](#2000)
[`0db68d222`](0db68d2)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Change empty
widgets check in Renderer to depend only on data available (and not on
scoring data)


- [#2137](#2137)
[`b4b3a3dbb`](b4b3a3d)
Thanks [@Myranae](https://github.com/Myranae)! - Implement a widget
export function to filter out rubric data from widget options for the
orderer widget


- [#2006](#2006)
[`879d2a501`](879d2a5)
Thanks [@Myranae](https://github.com/Myranae)! - Rename usages of rubric
to scoringData


- [#2139](#2139)
[`32cc4a45b`](32cc4a4)
Thanks [@Myranae](https://github.com/Myranae)! - Implement a widget
export function to filter out rubric data from widget options for the
Expression widget


- [#2016](#2016)
[`55ad836c6`](55ad836)
Thanks [@Myranae](https://github.com/Myranae)! - Introduces a validation
function for the label-image widget (extracted from label-image scoring
function).

### Patch Changes

- [#2142](#2142)
[`d7bcb14c3`](d7bcb14)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Radio upgrade
logic to Perseus Core


- [#2122](#2122)
[`1a75ca628`](1a75ca6)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Type and test
fixes for new MockWidget (isolating to be seen only in tests)


- [#2143](#2143)
[`459c25074`](459c250)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Passage
widgets upgrade logic to Perseus Core


- [#1997](#1997)
[`0464a760f`](0464a76)
Thanks [@Myranae](https://github.com/Myranae)! - Remove unused CS
Program rubric type


- [#2110](#2110)
[`e2f2cee9f`](e2f2cee)
Thanks [@nishasy](https://github.com/nishasy)! - [SR] Linear - Add the
interactive elements linear description to the whole graph container


- [#2136](#2136)
[`ffaa3904a`](ffaa390)
Thanks [@nishasy](https://github.com/nishasy)! - [SR] Quadratic - add
screen reader support for Quadratic interactive graph


- [#1996](#1996)
[`b6623bb56`](b6623bb)
Thanks [@Myranae](https://github.com/Myranae)! - Remove unused iframe
rubric type


- [#2124](#2124)
[`bdbdafe5d`](bdbdafe)
Thanks [@dependabot](https://github.com/apps/dependabot)! - Updating
wonder-blocks dependences.


- [#2152](#2152)
[`f8c9d3574`](f8c9d35)
Thanks [@Myranae](https://github.com/Myranae)! - Move the categorizer,
orderer, and expression public widget options functions from perseus
package to their widget folders in perseus-core


- [#1995](#1995)
[`99cd254de`](99cd254)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - TESTS: swap
input-number out of renderer tests as it is deprecated


- [#2141](#2141)
[`1355d6cfc`](1355d6c)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Measurer
upgrade logic to Perseus Core

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`29a1c656e`](29a1c65),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0
    -   @khanacademy/perseus-score@2.0.0
    -   @khanacademy/kas@0.4.12
    -   @khanacademy/keypad-context@1.0.15
    -   @khanacademy/kmath@0.3.1
    -   @khanacademy/math-input@22.2.2
    -   @khanacademy/perseus-linter@1.2.14
    -   @khanacademy/pure-markdown@0.3.23
    -   @khanacademy/simple-markdown@0.13.16

## @khanacademy/perseus-score@2.0.0

### Major Changes

- [#2153](#2153)
[`29a1c656e`](29a1c65)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Rename all
instances of the term "ScoringData" back to "Rubric"

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0
    -   @khanacademy/kas@0.4.12
    -   @khanacademy/kmath@0.3.1

## @khanacademy/perseus-core@3.3.0

### Minor Changes

- [#2158](#2158)
[`8f8955718`](8f89557)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Re-export
widget id support function: addWidget


- [#2142](#2142)
[`d7bcb14c3`](d7bcb14)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Radio upgrade
logic to Perseus Core


- [#2148](#2148)
[`685774f2e`](685774f)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Matcher
upgrade logic to Perseus Core


- [#2145](#2145)
[`8a489600e`](8a48960)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move simple widget
upgrade logic to Perseus Core (pt 2)


- [#2143](#2143)
[`459c25074`](459c250)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Passage
widgets upgrade logic to Perseus Core


- [#2155](#2155)
[`0df0b1940`](0df0b19)
Thanks [@benchristel](https://github.com/benchristel)! - Move
`parsePerseusItem`, `parseAndMigratePerseusItem`,
    `parseAndMigratePerseusArticle`, `isSuccess`, and `isFailure` to the
`perseus-core` package, and deprecate the equivalent exports from the
`perseus`
    package.


- [#2144](#2144)
[`dc8118aa1`](dc8118a)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move simple widget
upgrade logic to Perseus Core (pt 1)


- [#2150](#2150)
[`82fa90299`](82fa902)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move
InteractiveGraph widget upgrade to Perseus Core


- [#2134](#2134)
[`117e78d03`](117e78d)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move widget ID
utils to perseus-core


- [#2135](#2135)
[`7a984eba6`](7a984eb)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Expression
WidgetOptions logic to core


- [#2141](#2141)
[`1355d6cfc`](1355d6c)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Measurer
upgrade logic to Perseus Core


- [#2149](#2149)
[`75f43a8f4`](75f43a8)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Table upgrade
logic to Perseus Core


- [#2147](#2147)
[`ebf3695b6`](ebf3695)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move upgrade logic
for NumberLine to Perseus Core

### Patch Changes

- [#2122](#2122)
[`1a75ca628`](1a75ca6)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Type and test
fixes for new MockWidget (isolating to be seen only in tests)


- [#2137](#2137)
[`b4b3a3dbb`](b4b3a3d)
Thanks [@Myranae](https://github.com/Myranae)! - Move util files out of
widget folder in perseus package to utils folder in perseus-core


- [#2152](#2152)
[`f8c9d3574`](f8c9d35)
Thanks [@Myranae](https://github.com/Myranae)! - Move the categorizer,
orderer, and expression public widget options functions from perseus
package to their widget folders in perseus-core


- [#2139](#2139)
[`32cc4a45b`](32cc4a4)
Thanks [@Myranae](https://github.com/Myranae)! - Move util files out of
widget folder in perseus package to utils folder in perseus-core

## @khanacademy/perseus-editor@17.4.0

### Minor Changes

- [#2015](#2015)
[`46623c8f1`](46623c8)
Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! -
[Numeric Input] Re-organize editor and improve its UI


- [#2015](#2015)
[`46623c8f1`](46623c8)
Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! -
[Numeric Input] - Adjust editor to organize settings more logically

### Patch Changes

- [#2142](#2142)
[`d7bcb14c3`](d7bcb14)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Radio upgrade
logic to Perseus Core


- [#2148](#2148)
[`685774f2e`](685774f)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Matcher
upgrade logic to Perseus Core


- [#2145](#2145)
[`8a489600e`](8a48960)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move simple widget
upgrade logic to Perseus Core (pt 2)


- [#2122](#2122)
[`1a75ca628`](1a75ca6)
Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Type and test
fixes for new MockWidget (isolating to be seen only in tests)


- [#2143](#2143)
[`459c25074`](459c250)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Passage
widgets upgrade logic to Perseus Core


- [#2144](#2144)
[`dc8118aa1`](dc8118a)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move simple widget
upgrade logic to Perseus Core (pt 1)


- [#2150](#2150)
[`82fa90299`](82fa902)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move
InteractiveGraph widget upgrade to Perseus Core


- [#1965](#1965)
[`0f2bec314`](0f2bec3)
Thanks [@Myranae](https://github.com/Myranae)! - Refactor the LabelImage
widget to separate out answers from userInput into scoringData


- [#2124](#2124)
[`bdbdafe5d`](bdbdafe)
Thanks [@dependabot](https://github.com/apps/dependabot)! - Updating
wonder-blocks dependences.


- [#2135](#2135)
[`7a984eba6`](7a984eb)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Expression
WidgetOptions logic to core


- [#2141](#2141)
[`1355d6cfc`](1355d6c)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Measurer
upgrade logic to Perseus Core


- [#2149](#2149)
[`75f43a8f4`](75f43a8)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move Table upgrade
logic to Perseus Core


- [#2147](#2147)
[`ebf3695b6`](ebf3695)
Thanks [@handeyeco](https://github.com/handeyeco)! - Move upgrade logic
for NumberLine to Perseus Core

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`a1e22a4e3`](a1e22a4),
[`0464a760f`](0464a76),
[`0df0b1940`](0df0b19),
[`22d108fdc`](22d108f),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`e2f2cee9f`](e2f2cee),
[`ffaa3904a`](ffaa390),
[`0f2bec314`](0f2bec3),
[`b4b3a3dbb`](b4b3a3d),
[`e6f7cc91e`](e6f7cc9),
[`4c10af109`](4c10af1),
[`b6623bb56`](b6623bb),
[`0db68d222`](0db68d2),
[`bdbdafe5d`](bdbdafe),
[`117e78d03`](117e78d),
[`b4b3a3dbb`](b4b3a3d),
[`29a1c656e`](29a1c65),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`879d2a501`](879d2a5),
[`32cc4a45b`](32cc4a4),
[`99cd254de`](99cd254),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`55ad836c6`](55ad836),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0
    -   @khanacademy/perseus@52.0.0
    -   @khanacademy/perseus-score@2.0.0
    -   @khanacademy/kas@0.4.12
    -   @khanacademy/keypad-context@1.0.15
    -   @khanacademy/kmath@0.3.1
    -   @khanacademy/math-input@22.2.2
    -   @khanacademy/pure-markdown@0.3.23

## @khanacademy/kas@0.4.12

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0

## @khanacademy/keypad-context@1.0.15

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0

## @khanacademy/kmath@0.3.1

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0

## @khanacademy/math-input@22.2.2

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0
    -   @khanacademy/keypad-context@1.0.15

## @khanacademy/perseus-linter@1.2.14

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0

## @khanacademy/pure-markdown@0.3.23

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0
    -   @khanacademy/simple-markdown@0.13.16

## @khanacademy/simple-markdown@0.13.16

### Patch Changes

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0

## @khanacademy/perseus-dev-ui@5.1.2

### Patch Changes

- [#2124](#2124)
[`bdbdafe5d`](bdbdafe)
Thanks [@dependabot](https://github.com/apps/dependabot)! - Updating
wonder-blocks dependences.

- Updated dependencies
\[[`8f8955718`](8f89557),
[`d7bcb14c3`](d7bcb14),
[`685774f2e`](685774f),
[`8a489600e`](8a48960),
[`1a75ca628`](1a75ca6),
[`459c25074`](459c250),
[`0df0b1940`](0df0b19),
[`dc8118aa1`](dc8118a),
[`82fa90299`](82fa902),
[`b4b3a3dbb`](b4b3a3d),
[`117e78d03`](117e78d),
[`7a984eba6`](7a984eb),
[`f8c9d3574`](f8c9d35),
[`1355d6cfc`](1355d6c),
[`75f43a8f4`](75f43a8),
[`32cc4a45b`](32cc4a4),
[`ebf3695b6`](ebf3695)]:
    -   @khanacademy/perseus-core@3.3.0
    -   @khanacademy/kas@0.4.12
    -   @khanacademy/kmath@0.3.1
    -   @khanacademy/math-input@22.2.2
    -   @khanacademy/perseus-linter@1.2.14
    -   @khanacademy/pure-markdown@0.3.23
    -   @khanacademy/simple-markdown@0.13.16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants