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

[Client Validation] Fixes after merging main #2122

Merged

Conversation

jeremywiebe
Copy link
Collaborator

Summary:

I recently merged main and the introduction of MockWidget caused some tests to break. I've fixed them in this PR and adjusted the MockWidget to be simpler (ie. not use KhanAnswerTypes) as I don't think that's needed.

I also fixed up some related types so that the MockWidget does not exist in our production Widget types, only in tests. The new MockWidget illustrates this "test-only" expansion of the widget types.

Issue: LEMS-2561

Test plan:

yarn test
yarn typecheck

@jeremywiebe jeremywiebe self-assigned this Jan 16, 2025
Copy link
Contributor

github-actions bot commented Jan 16, 2025

npm Snapshot: Published

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

Example:

yarn add @khanacademy/perseus@PR2122

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

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

Copy link
Contributor

github-actions bot commented Jan 16, 2025

Size Change: +120 B (+0.01%)

Total Size: 1.47 MB

Filename Size Change
packages/perseus-core/dist/es/index.js 23.6 kB +120 B (+0.51%)
ℹ️ 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 83.1 kB
packages/math-input/dist/es/index.js 78 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 103 kB
packages/perseus/dist/es/index.js 412 kB
packages/perseus/dist/es/strings.js 4.82 kB
packages/pure-markdown/dist/es/index.js 3.66 kB
packages/simple-markdown/dist/es/index.js 12.5 kB

compressed-size-action

@@ -144,7 +144,6 @@ export interface PerseusWidgetTypes {
matcher: MatcherWidget;
matrix: MatrixWidget;
measurer: MeasurerWidget;
"mock-widget": MockWidget;
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Removing here as we don't want the MockWidget to be part of the public set of widget types. It is an internal, test-only widget.

@@ -346,8 +345,6 @@ export type MatrixWidget = WidgetOptions<'matrix', PerseusMatrixWidgetOptions>;
// prettier-ignore
export type MeasurerWidget = WidgetOptions<'measurer', PerseusMeasurerWidgetOptions>;
// prettier-ignore
export type MockWidget = WidgetOptions<'mock-widget', MockWidgetOptions>;
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I moved all types related to the MockWidget into its directory so that we don't have test pieces intermingled/shipped with our production code.

| TableWidget
| VideoWidget
| DeprecatedStandinWidget;
export type PerseusWidget = PerseusWidgetTypes[keyof PerseusWidgetTypes];
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Now that we have the PerseusWidgetTypes interface (which can be properly extended in test code and/or externally), we can derive this union from that (meaning we don't have to maintain two official set of widget types.

@@ -40,7 +41,7 @@ export const itemWithNumericInput: PerseusItem = {
labelText: "What's the answer?",
size: "normal",
},
} as NumericInputWidget,
} satisfies NumericInputWidget,
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

satisfies

The new satisfies operator lets us validate that the type of an expression matches some type, without changing the resulting type of that expression.

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-9.html#the-satisfies-operator

Compare to as which does some type checking but is not as robust and can end up hiding test data that doesn't actually fully match the as type.

Comment on lines +19 to +23
declare module "@khanacademy/perseus-core" {
export interface PerseusWidgetTypes {
"mock-widget": MockWidget;
}
}
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is the magic sauce that extends the set of PerseusWidgetTypes to include the mock widget. Anything that ends up importing this file will "see" the mock-widget... meaning tests, but not production code!

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't really understand the code and after looking it up I still don't understand the code. I wonder if would be worth adding a link to something that explains the goal here.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I'll expand the comment. Honestly, I wasn't able to find a really clear description for the case we're using this for. The bottom line is that when this file is imported (should be from tests only), the PerseusWidgetTypes type from @khanacademy/perseus-core is extended to include the MockWidget. Our other types that define the unions of widget options types, etc. are all based on PerseusWidgetTypes. So once we extend PerseusWidgetTypes with this mock widget type, all the other widget option unions know about the mock widget also. This means that our tests and test data understand that mock-widget 1 refers to a mock widget, but if you were to try it in webapp, it wouldn't know about mock widgets (rightfully).

@@ -380,43 +389,6 @@ export type VideoWidget = WidgetOptions<'video', PerseusVideoWidgetOptions>;
//prettier-ignore
export type DeprecatedStandinWidget = WidgetOptions<'deprecated-standin', object>;

export type PerseusWidget =
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Moved up to Line 183.

@jeremywiebe jeremywiebe marked this pull request as ready for review January 16, 2025 22:43
@@ -6,18 +6,15 @@ import * as React from "react";
import {getPromptJSON as _getPromptJSON} from "../../widget-ai-utils/mock-widget/prompt-utils";

import scoreMockWidget from "./score-mock-widget";
import validateMockWidget from "./validate-mock-widget";
Copy link
Contributor

Choose a reason for hiding this comment

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

Not related to your PR, but I wonder if all this mock widget stuff should even be in /packages when it could possibly live in /testing.

Comment on lines +19 to +23
declare module "@khanacademy/perseus-core" {
export interface PerseusWidgetTypes {
"mock-widget": MockWidget;
}
}
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't really understand the code and after looking it up I still don't understand the code. I wonder if would be worth adding a link to something that explains the goal here.

import type mockWidget from "../../widgets/mock-widgets/mock-widget";
import type {PerseusMockWidgetUserInput} from "../../widgets/mock-widgets/mock-widget-types";
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do we need AI prompt utils for a mock widget?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I think just to "round out" the implementation of the mock widget. I don't think we actually use it. Perhaps it'd be better if we deleted this to avoid confusion and have folks think it serves some purpose.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Changed my mind. There's tests that exercise the Renderer calling the widget's getPromptJSON() using the mock widget. I'll leave it in place as that feels like a valid use of the mock widget. I'd also like to avoid doing this sort of refactoring in this PR as I'm trying to stick to just dealing with after effects from merging main. :)

*
* @see MockWidget for an example
*/
export type PerseusWidget = PerseusWidgetTypes[keyof PerseusWidgetTypes];
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice

@jeremywiebe jeremywiebe merged commit 1a75ca6 into feature/client-validation Jan 21, 2025
8 checks passed
@jeremywiebe jeremywiebe deleted the jer/client-validation-merge-fixes branch January 21, 2025 18:43
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/[email protected]

### 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/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]

### 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/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]

## @khanacademy/[email protected]

### 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/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]
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.

2 participants