Skip to content

Add a basic FreeResponse widget #2273

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

Merged
merged 6 commits into from
Mar 5, 2025

Conversation

aag
Copy link
Member

@aag aag commented Mar 3, 2025

Summary:

This commit adds a basic version of the new FreeResponse widget. This
widget allows users to enter free text into an input field. The initial
use case is for "short answer" type questions.

The UX of the widget is not complete in this commit. Instead, the
intention is to get all of the files in place with a basic UI which will
then be iterated on with more widget options and more sophisticated
rendering.

Issue: https://khanacademy.atlassian.net/browse/LIT-1661

Test plan:

  • View the editor and rendered widget stories in Storybook.
  • Run the tests.

This commit adds a basic version of the new FreeResponse widget. This
widget allows users to enter free text into an input field. The initial
use case is for "short answer" type questions.

The UX of the widget is not complete in this commit. Instead, the
intention is to get all of the files in place with a basic UI which will
then be iterated on with more widget options and more sophisticated
rendering.

Issue: https://khanacademy.atlassian.net/browse/LIT-1661

Test plan:
- View the editor and rendered widget stories in Storybook.
- Run the tests.
@aag aag self-assigned this Mar 3, 2025
@aag aag marked this pull request as draft March 3, 2025 19:58
Copy link
Contributor

github-actions bot commented Mar 3, 2025

Size Change: +757 B (+0.09%)

Total Size: 873 kB

Filename Size Change
packages/perseus-core/dist/es/index.js 30 kB +134 B (+0.45%)
packages/perseus-editor/dist/es/index.js 277 kB +218 B (+0.08%)
packages/perseus/dist/es/index.js 368 kB +405 B (+0.11%)
ℹ️ View Unchanged
Filename Size
packages/kas/dist/es/index.js 39.7 kB
packages/keypad-context/dist/es/index.js 760 B
packages/kmath/dist/es/index.js 11.1 kB
packages/math-input/dist/es/index.js 78.2 kB
packages/math-input/dist/es/strings.js 1.79 kB
packages/perseus-linter/dist/es/index.js 22.8 kB
packages/perseus-score/dist/es/index.js 20.6 kB
packages/perseus/dist/es/strings.js 6.74 kB
packages/pure-markdown/dist/es/index.js 4.14 kB
packages/simple-markdown/dist/es/index.js 13.1 kB

compressed-size-action

Copy link
Contributor

github-actions bot commented Mar 3, 2025

npm Snapshot: Published

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

Example:

pnpm add @khanacademy/perseus@PR2273

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

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

@aag aag requested review from jeremywiebe and rgpass March 3, 2025 20:48
@aag aag marked this pull request as ready for review March 3, 2025 20:48
@aag aag requested review from a team and removed request for jeremywiebe March 3, 2025 21:17
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.

Looks very nice! Thank you!

One thing you'll need to do before landing this is create a parser for this widget in packages/perseus-core/src/parse-perseus-json/perseus-parsers, and use it in the PerseusWidgetsMap parser in widgets-map.ts.

That said, I don't think anything will fail (for now) if the parsers aren't updated. The parser currently serves two purposes:

  • it alerts us (via Sentry logs) if it encounters data that doesn't match the schema.
  • it migrates old widget options formats to the latest version.

The parser allows widgets of an unrecognized type (since they might have been registered dynamically), so it won't fail if you feed it a free-response widget as-is. However, we probably don't want to rely on that behavior for first-party widgets. A failing test you could write is "parseWidgetsMap rejects a free-response widget with no question".


const defaultWidgetOptions: PerseusFreeResponseWidgetOptions = {
question: "",
};
Copy link
Member

Choose a reason for hiding this comment

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

What's the purpose of this default? It looks like question is required in the widget options, so when would the default ever be used?

Copy link
Member Author

Choose a reason for hiding this comment

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

I was following the pattern I see in other widgets, e.g. PassageWidget. I think it makes sense to have "" be the default question prop value in FreeResponseEditor, but I'm not sure how else the freeResponseLogic is used. Do you know what else it's used for?

Copy link
Contributor

Choose a reason for hiding this comment

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

Defaults are used both for upgrading widgets (specifically minor widget upgrades) and as the starting state in the widget editor. This part of the code is a little hazy to me, but I think this is fine to have although possibly not necessary.

@aag aag requested review from handeyeco and benchristel March 4, 2025 20:37
Copy link
Contributor

@handeyeco handeyeco left a comment

Choose a reason for hiding this comment

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

This is amazingly comprehensive and well-written. I don't see any blockers, especially since this is landing into a feature branch and not main.

I still have some architectural questions to answer before we land the feature branch, but I think this makes sense as y'all are roughing out an idea of how the widget will work.

…ve commented-out code, refactor

label HTML structure, update changeset file
@aag aag merged commit 15025d4 into feature/free-response-widget Mar 5, 2025
8 checks passed
@aag aag deleted the basic-free-response-widget branch March 5, 2025 19:59
Comment on lines +28 to +30
const apiOptions: APIOptions = {
isMobile: false,
};
Copy link
Collaborator

Choose a reason for hiding this comment

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

I suspect this was done by following other tests. Ideally we rely less and less on the isMobile flag as that causes our code to diverge for mobile vs desktop. I think you could remove the test that checks for snapshotting on mobile and just remove the isMobile flag from APIOptions here. This widget, especially, feels like something that won't vary between desktop and mobile.. I could be wrong though.

widget: FreeResponse,
// Hides widget from content creators until full release
hidden: true,
} as WidgetExports<typeof FreeResponse>;
Copy link
Collaborator

Choose a reason for hiding this comment

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

All other widgets use satisfies WidgetExports<... for these objects. We've found that satisfies is better at ensuring the literal object type checks properly.

aag added a commit that referenced this pull request May 19, 2025
…get` to `main` (#2502)

## Summary:
This PR includes the following commits:
- Add a basic FreeResponse widget (#2273)
- Add scoring criteria to Free Response Widget (#2286)
- [Free Response Widget] Add ability to customize placeholder (#2297)
- [Free Response Widget] Add optional character limit support (#2332)
- Render TeX in Free Response Widget questions (#2453)
- Update Free Response styles and accessibility (#2486)
- Use LabeledField in FreeResponseEditor (#2493)
- Add Free Response scoring and validation functions (#2498)
- Changeset: Release the new Free Response Widget (#2501)

Issue: https://khanacademy.atlassian.net/browse/AX-951

## Test plan:

Author: aag

Reviewers: handeyeco

Required Reviewers:

Approved By: handeyeco

Checks: ✅ 9 checks were successful

Pull Request URL: #2502
sthagen pushed a commit to sthagen/Khan-perseus that referenced this pull request May 20, 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@63.0.0

### Major Changes

-   [Khan#2501](Khan#2501) [`8f3a7c5b4`](Khan@8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [Khan#2332](Khan#2332) [`2f6d2d042`](Khan@2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [Khan#2297](Khan#2297) [`fc4e00e75`](Khan@fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget


-   [Khan#2273](Khan#2273) [`15025d441`](Khan@15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget

### Patch Changes

-   [Khan#2498](Khan#2498) [`25b24e04c`](Khan@25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [Khan#2492](Khan#2492) [`dd6916b31`](Khan@dd6916b) Thanks [@SonicScrewdriver](https://github.com/SonicScrewdriver)! - Standardization of New Radio Widget functional component declarations and utility functions.


-   [Khan#2286](Khan#2286) [`6b3bc5c51`](Khan@6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget


-   [Khan#2453](Khan#2453) [`89d7c5a2f`](Khan@89d7c5a) Thanks [@aag](https://github.com/aag)! - Add LaTeX rendering to Free Response Widget questions


-   [Khan#2481](Khan#2481) [`4d6debc84`](Khan@4d6debc) Thanks [@ivyolamit](https://github.com/ivyolamit)! - Add Horizontal Scrollbar for New Radio Widget to allow users to visually scroll a long radio option content


-   [Khan#2486](Khan#2486) [`68de23d36`](Khan@68de23d) Thanks [@aag](https://github.com/aag)! - Update visual styling and a11y features


-   [Khan#2493](Khan#2493) [`3cb963b9f`](Khan@3cb963b) Thanks [@aag](https://github.com/aag)! - Refactor rendering of FreeResponseEditor

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/perseus-score@7.0.0
    -   @khanacademy/keypad-context@3.0.10
    -   @khanacademy/kmath@2.0.10
    -   @khanacademy/math-input@25.1.5
    -   @khanacademy/perseus-linter@3.0.10

## @khanacademy/perseus-core@12.0.0

### Major Changes

-   [Khan#2501](Khan#2501) [`8f3a7c5b4`](Khan@8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [Khan#2332](Khan#2332) [`2f6d2d042`](Khan@2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [Khan#2297](Khan#2297) [`fc4e00e75`](Khan@fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget


-   [Khan#2273](Khan#2273) [`15025d441`](Khan@15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget

### Patch Changes

-   [Khan#2498](Khan#2498) [`25b24e04c`](Khan@25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [Khan#2286](Khan#2286) [`6b3bc5c51`](Khan@6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget


-   [Khan#2453](Khan#2453) [`89d7c5a2f`](Khan@89d7c5a) Thanks [@aag](https://github.com/aag)! - Add LaTeX rendering to Free Response Widget questions


-   [Khan#2486](Khan#2486) [`68de23d36`](Khan@68de23d) Thanks [@aag](https://github.com/aag)! - Update visual styling and a11y features


-   [Khan#2493](Khan#2493) [`3cb963b9f`](Khan@3cb963b) Thanks [@aag](https://github.com/aag)! - Refactor rendering of FreeResponseEditor

## @khanacademy/perseus-editor@22.0.0

### Major Changes

-   [Khan#2501](Khan#2501) [`8f3a7c5b4`](Khan@8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [Khan#2332](Khan#2332) [`2f6d2d042`](Khan@2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [Khan#2297](Khan#2297) [`fc4e00e75`](Khan@fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget


-   [Khan#2273](Khan#2273) [`15025d441`](Khan@15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget

### Patch Changes

-   [Khan#2498](Khan#2498) [`25b24e04c`](Khan@25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [Khan#2286](Khan#2286) [`6b3bc5c51`](Khan@6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget


-   [Khan#2453](Khan#2453) [`89d7c5a2f`](Khan@89d7c5a) Thanks [@aag](https://github.com/aag)! - Add LaTeX rendering to Free Response Widget questions


-   [Khan#2486](Khan#2486) [`68de23d36`](Khan@68de23d) Thanks [@aag](https://github.com/aag)! - Update visual styling and a11y features


-   [Khan#2493](Khan#2493) [`3cb963b9f`](Khan@3cb963b) Thanks [@aag](https://github.com/aag)! - Refactor rendering of FreeResponseEditor

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`dd6916b31`](Khan@dd6916b), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`4d6debc84`](Khan@4d6debc), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus@63.0.0
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/perseus-score@7.0.0
    -   @khanacademy/keypad-context@3.0.10
    -   @khanacademy/kmath@2.0.10
    -   @khanacademy/math-input@25.1.5
    -   @khanacademy/perseus-linter@3.0.10

## @khanacademy/perseus-score@7.0.0

### Major Changes

-   [Khan#2501](Khan#2501) [`8f3a7c5b4`](Khan@8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [Khan#2332](Khan#2332) [`2f6d2d042`](Khan@2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [Khan#2297](Khan#2297) [`fc4e00e75`](Khan@fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget

### Patch Changes

-   [Khan#2498](Khan#2498) [`25b24e04c`](Khan@25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [Khan#2273](Khan#2273) [`15025d441`](Khan@15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget


-   [Khan#2286](Khan#2286) [`6b3bc5c51`](Khan@6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/kmath@2.0.10

## @khanacademy/keypad-context@3.0.10

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0

## @khanacademy/kmath@2.0.10

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0

## @khanacademy/math-input@25.1.5

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/keypad-context@3.0.10

## @khanacademy/perseus-linter@3.0.10

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0

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

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](Khan@25b24e0), [`2f6d2d042`](Khan@2f6d2d0), [`fc4e00e75`](Khan@fc4e00e), [`15025d441`](Khan@15025d4), [`8f3a7c5b4`](Khan@8f3a7c5), [`6b3bc5c51`](Khan@6b3bc5c), [`89d7c5a2f`](Khan@89d7c5a), [`68de23d36`](Khan@68de23d), [`3cb963b9f`](Khan@3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/kmath@2.0.10
    -   @khanacademy/math-input@25.1.5
    -   @khanacademy/perseus-linter@3.0.10

Author: khan-actions-bot

Reviewers: mark-fitzgerald

Required Reviewers:

Approved By: mark-fitzgerald

Checks: ⏭️  1 check has been skipped, ✅ 4 checks were successful

Pull Request URL: Khan#2500
catandthemachines pushed a commit that referenced this pull request May 22, 2025
## Summary:
This commit adds a basic version of the new FreeResponse widget. This
widget allows users to enter free text into an input field. The initial
use case is for "short answer" type questions.

The UX of the widget is not complete in this commit. Instead, the
intention is to get all of the files in place with a basic UI which will
then be iterated on with more widget options and more sophisticated
rendering.

Issue: https://khanacademy.atlassian.net/browse/LIT-1661

## Test plan:
- View the editor and rendered widget stories in Storybook.
- Run the tests.

Author: aag

Reviewers: benchristel, aag, handeyeco, rgpass

Required Reviewers:

Approved By: handeyeco

Checks: ✅ 8 checks were successful

Pull Request URL: #2273
catandthemachines pushed a commit that referenced this pull request May 22, 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@63.0.0

### Major Changes

-   [#2501](#2501) [`8f3a7c5b4`](8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [#2332](#2332) [`2f6d2d042`](2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [#2297](#2297) [`fc4e00e75`](fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget


-   [#2273](#2273) [`15025d441`](15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget

### Patch Changes

-   [#2498](#2498) [`25b24e04c`](25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [#2492](#2492) [`dd6916b31`](dd6916b) Thanks [@SonicScrewdriver](https://github.com/SonicScrewdriver)! - Standardization of New Radio Widget functional component declarations and utility functions.


-   [#2286](#2286) [`6b3bc5c51`](6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget


-   [#2453](#2453) [`89d7c5a2f`](89d7c5a) Thanks [@aag](https://github.com/aag)! - Add LaTeX rendering to Free Response Widget questions


-   [#2481](#2481) [`4d6debc84`](4d6debc) Thanks [@ivyolamit](https://github.com/ivyolamit)! - Add Horizontal Scrollbar for New Radio Widget to allow users to visually scroll a long radio option content


-   [#2486](#2486) [`68de23d36`](68de23d) Thanks [@aag](https://github.com/aag)! - Update visual styling and a11y features


-   [#2493](#2493) [`3cb963b9f`](3cb963b) Thanks [@aag](https://github.com/aag)! - Refactor rendering of FreeResponseEditor

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/perseus-score@7.0.0
    -   @khanacademy/keypad-context@3.0.10
    -   @khanacademy/kmath@2.0.10
    -   @khanacademy/math-input@25.1.5
    -   @khanacademy/perseus-linter@3.0.10

## @khanacademy/perseus-core@12.0.0

### Major Changes

-   [#2501](#2501) [`8f3a7c5b4`](8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [#2332](#2332) [`2f6d2d042`](2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [#2297](#2297) [`fc4e00e75`](fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget


-   [#2273](#2273) [`15025d441`](15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget

### Patch Changes

-   [#2498](#2498) [`25b24e04c`](25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [#2286](#2286) [`6b3bc5c51`](6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget


-   [#2453](#2453) [`89d7c5a2f`](89d7c5a) Thanks [@aag](https://github.com/aag)! - Add LaTeX rendering to Free Response Widget questions


-   [#2486](#2486) [`68de23d36`](68de23d) Thanks [@aag](https://github.com/aag)! - Update visual styling and a11y features


-   [#2493](#2493) [`3cb963b9f`](3cb963b) Thanks [@aag](https://github.com/aag)! - Refactor rendering of FreeResponseEditor

## @khanacademy/perseus-editor@22.0.0

### Major Changes

-   [#2501](#2501) [`8f3a7c5b4`](8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [#2332](#2332) [`2f6d2d042`](2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [#2297](#2297) [`fc4e00e75`](fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget


-   [#2273](#2273) [`15025d441`](15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget

### Patch Changes

-   [#2498](#2498) [`25b24e04c`](25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [#2286](#2286) [`6b3bc5c51`](6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget


-   [#2453](#2453) [`89d7c5a2f`](89d7c5a) Thanks [@aag](https://github.com/aag)! - Add LaTeX rendering to Free Response Widget questions


-   [#2486](#2486) [`68de23d36`](68de23d) Thanks [@aag](https://github.com/aag)! - Update visual styling and a11y features


-   [#2493](#2493) [`3cb963b9f`](3cb963b) Thanks [@aag](https://github.com/aag)! - Refactor rendering of FreeResponseEditor

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`dd6916b31`](dd6916b), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`4d6debc84`](4d6debc), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus@63.0.0
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/perseus-score@7.0.0
    -   @khanacademy/keypad-context@3.0.10
    -   @khanacademy/kmath@2.0.10
    -   @khanacademy/math-input@25.1.5
    -   @khanacademy/perseus-linter@3.0.10

## @khanacademy/perseus-score@7.0.0

### Major Changes

-   [#2501](#2501) [`8f3a7c5b4`](8f3a7c5) Thanks [@aag](https://github.com/aag)! - Release the new Free Response Widget

### Minor Changes

-   [#2332](#2332) [`2f6d2d042`](2f6d2d0) Thanks [@rgpass](https://github.com/rgpass)! - Add optional character limit support


-   [#2297](#2297) [`fc4e00e75`](fc4e00e) Thanks [@rgpass](https://github.com/rgpass)! - Add ability to customize the placeholder text in a Free Response widget

### Patch Changes

-   [#2498](#2498) [`25b24e04c`](25b24e0) Thanks [@aag](https://github.com/aag)! - Add scoring and validation functions for the Free Response Widget


-   [#2273](#2273) [`15025d441`](15025d4) Thanks [@aag](https://github.com/aag)! - Add a basic version of the new FreeResponse widget


-   [#2286](#2286) [`6b3bc5c51`](6b3bc5c) Thanks [@aag](https://github.com/aag)! - Add scoring criteria to the Free Response Widget

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/kmath@2.0.10

## @khanacademy/keypad-context@3.0.10

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0

## @khanacademy/kmath@2.0.10

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0

## @khanacademy/math-input@25.1.5

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/keypad-context@3.0.10

## @khanacademy/perseus-linter@3.0.10

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0

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

### Patch Changes

-   Updated dependencies \[[`25b24e04c`](25b24e0), [`2f6d2d042`](2f6d2d0), [`fc4e00e75`](fc4e00e), [`15025d441`](15025d4), [`8f3a7c5b4`](8f3a7c5), [`6b3bc5c51`](6b3bc5c), [`89d7c5a2f`](89d7c5a), [`68de23d36`](68de23d), [`3cb963b9f`](3cb963b)]:
    -   @khanacademy/perseus-core@12.0.0
    -   @khanacademy/kmath@2.0.10
    -   @khanacademy/math-input@25.1.5
    -   @khanacademy/perseus-linter@3.0.10

Author: khan-actions-bot

Reviewers: mark-fitzgerald

Required Reviewers:

Approved By: mark-fitzgerald

Checks: ⏭️  1 check has been skipped, ✅ 4 checks were successful

Pull Request URL: #2500
catandthemachines added a commit that referenced this pull request Jun 5, 2025
PR to merge several changes from PEICH project thus far and expose new editor functionality for our content creators.

All of the changes included have been approved through the PR process. This is simply a formal commit to add to Perseus main now that we're ready to release to content.
- Issues Panel (#2377)
- Adds a warning message in the Issues Panel when a content creator uses a widget marked as inaccessible (#2474)
- Migrate accessibility logic from perseus to perseus-core (#2485)
- Add a basic FreeResponse widget (#2273)
- Add scoring criteria to Free Response Widget (#2286)
- [Free Response Widget] Add ability to customize placeholder (#2297)
- [Free Response Widget] Add optional character limit support (#2332)
- Render TeX in Free Response Widget questions (#2453)
- Update Free Response styles and accessibility (#2486)
- Use LabeledField in FreeResponseEditor (#2493)
- Add Free Response scoring and validation functions (#2498)
- Changeset: Release the new Free Response Widget (#2501)
- Version Packages (#2500)
- Add story for radio widget single select with images and scroll (#2494)
- Update to latest WB packages (#2455)
- Wonder Blocks: Updates WB Button instances to match new API (color -> actionType) (#2491)
- Version Packages (#2506)
- Ensure that our parser can handle empty strings for labelLocation for Interactive Graphs (#2509)
- Add tab navigation to new radio widget (#2510)
- Add typesafe parser for Categorizer's user input type (#2516)
- Update label image widget to handle answerless data and do some cleanup (#2495)
- Remove preferred popover direction from Label Image editor (#2512)
- [feature/peich] Revert bad commits. :(
- Removing manual traversal. (#2517)
- [feature/peich] Exporting violatingWidgets.
- Pass data between EditorPage and ItemEditor via new props (#2526)
- Add isItemAccessible function and enhance types (#2532)
- docs(changeset): Move traversal tests from perseus-editor and perseus into perseus-core (#2544)
- [feature/peich] A few fixes from the merge with main.
- Adding partially inaccessible functions to InteractiveGraph and LabelImage. (#2553)
- [feature/peich] Reverting pnpm lock file changes.

Author: catandthemachines

Reviewers: mark-fitzgerald, ivyolamit, SonicScrewdriver, anakaren-rojas

Required Reviewers:

Approved By: mark-fitzgerald

Checks: ✅ 14 checks were successful

Pull Request URL: #2514
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.

4 participants