Skip to content
Open
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5487dbf
[benc/input-number-v2-take-3] Align input-number options type with nu…
benchristel Jun 10, 2026
20bbee9
[benc/input-number-v2-take-3] Update getInputNumberPublicWidgetOptions
benchristel Jun 10, 2026
728fa23
[benc/input-number-v2-take-3] Use v1 options in scoring tests
benchristel Jun 10, 2026
7f66ef7
[benc/input-number-v2-take-3] Delete InputNumber component; replace w…
benchristel Jun 10, 2026
258f958
[benc/input-number-v2-take-3] Move IN->NI conversion functions into p…
benchristel Jun 10, 2026
b7b7826
[benc/input-number-v2-take-3] Fix lint
benchristel Jun 10, 2026
07b6d30
[benc/input-number-v2-take-3] Remove input-number editor code
benchristel Jun 10, 2026
064e563
[benc/input-number-v2-take-3] Knip
benchristel Jun 10, 2026
6231ad3
[benc/input-number-v2-take-3] Update pnpm-lock.yaml
benchristel Jun 11, 2026
fa61e4f
[benc/input-number-v2-take-3] docs(changeset): The InputNumber widget…
benchristel Jun 11, 2026
91e4651
[benc/input-number-v2-take-3] docs(changeset): Removes the experiment…
benchristel Jun 11, 2026
3a5c114
[benc/input-number-v2-take-3] Delete v0 types
benchristel Jun 11, 2026
4dc3bb1
[benc/input-number-v2-take-3] Make InputNumber types alias NumericInp…
benchristel Jun 11, 2026
ac40ed3
[benc/input-number-v2-take-3] Remove TODO
benchristel Jun 11, 2026
28f6b75
[benc/input-number-v2-take-3] Use generators to abbreviate tests
benchristel Jun 11, 2026
dc7e98a
[benc/input-number-v2-take-3] Fold input-number case into numeric-input
benchristel Jun 11, 2026
0821496
[benc/input-number-v2-take-3] Use generators again
benchristel Jun 11, 2026
bb1a872
[benc/input-number-v2-take-3] Use numeric-input code for public widge…
benchristel Jun 11, 2026
8634617
[benc/input-number-v2-take-3] Use PerseusNumericInputRubric type
benchristel Jun 11, 2026
22eedbb
[benc/input-number-v2-take-3] Use generators
benchristel Jun 11, 2026
8d1d0a9
[benc/input-number-v2-take-3] Delete scoring code
benchristel Jun 11, 2026
9f4974b
[benc/input-number-v2-take-3] Fix answerless types
benchristel Jun 11, 2026
fe6a95e
[benc/input-number-v2-take-3] Ensure generated input-number widgets h…
benchristel Jun 11, 2026
07d6f6e
[benc/input-number-v2-take-3] Add test coverage for version number in…
benchristel Jun 11, 2026
0f4791e
[benc/input-number-v2-take-3] Remove non-actionable TODO
benchristel Jun 11, 2026
2f62c39
[benc/input-number-v2-take-3] Delete unused test data file
benchristel Jun 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/eight-carrots-flow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@khanacademy/perseus-score": minor
---

Removes the experimental function `scorePerseusItemWithInputNumberAsNumericInput`.
7 changes: 7 additions & 0 deletions .changeset/late-ads-rescue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@khanacademy/perseus": major
"@khanacademy/perseus-core": major
"@khanacademy/perseus-editor": major
---

The InputNumber widget code has been removed; widgets with type "input-number" will now render as NumericInput widgets. This involves a breaking change to the InputNumber widget types in data-schema. Callers should, as always, use the parser to migrate Perseus JSON to the latest schema version before using it, and avoid depending directly on the schema types.
32 changes: 9 additions & 23 deletions packages/perseus-core/src/data-schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1649,10 +1649,10 @@ export type PerseusNumericInputWidgetOptions = {
export type PerseusNumericInputAnswer = {
/**
* Translatable Display; A description for why this answer is correct,
* wrong, or ungraded
* wrong, or ungraded. Always the empty string in answerless data.
*/
message: string;
/** The expected answer */
/** The expected answer. Null in answerless data. */
value?: number | null;
/** Whether this answer is "correct", "wrong", or "ungraded" */
status: string;
Expand All @@ -1666,9 +1666,12 @@ export type PerseusNumericInputAnswer = {
* (strict = false).
*/
strict: boolean;
/** A range of error +/- the value */
/**
* The maximum difference between the answer key and a correct user
* input.
*/
maxError?: number | null;
/** Unsimplified answers are Ungraded, Accepted, or Wrong. */
/** How unsimplified responses should be handled. */
simplify: PerseusNumericInputSimplify;
};

Expand Down Expand Up @@ -2227,26 +2230,9 @@ export type PerseusVideoWidgetOptions = {
static?: boolean;
};

export type PerseusInputNumberAnswerType =
| "number"
| "decimal"
| "integer"
| "rational"
| "improper"
| "mixed"
| "percent"
| "pi";
export type PerseusInputNumberAnswer = PerseusNumericInputAnswer;

/** Options for the input-number widget (deprecated; prefer numeric-input). */
export type PerseusInputNumberWidgetOptions = {
answerType?: PerseusInputNumberAnswerType;
inexact?: boolean;
maxError?: number | string;
rightAlign?: boolean;
simplify: "required" | "optional" | "enforced";
size: "normal" | "small";
value: string | number;
};
export type PerseusInputNumberWidgetOptions = PerseusNumericInputWidgetOptions;

/** Options for the molecule-renderer widget. Renders a molecule via SMILES. */
export type PerseusMoleculeRendererWidgetOptions = {
Expand Down
17 changes: 17 additions & 0 deletions packages/perseus-core/src/data-schema.typetest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import {describe, expect, it} from "tstyche";

import type {
PerseusInputNumberWidgetOptions,
PerseusNumericInputWidgetOptions,
} from "./data-schema";

describe("PerseusInputNumberWidgetOptions", () => {
it("is identical to PerseusNumericInputWidgetOptions", () => {
// This test is needed because the PerseusInputNumberWidgetOptions now
// get passed to the NumericInput component. We are currently (May
// 2026) removing the deprecated InputNumber code in favor of using
// NumericInput everywhere, but we need to keep separate types for
// InputNumber to support legacy content.
expect<PerseusInputNumberWidgetOptions>().type.toBe<PerseusNumericInputWidgetOptions>();
});
});
4 changes: 1 addition & 3 deletions packages/perseus-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,6 @@ export {default as videoLogic} from "./widgets/video";
/** @hidden */
export type {VideoDefaultWidgetOptions} from "./widgets/video";

/** @hidden */
export {convertInputNumberOptionsToNumericInput} from "./widgets/input-number/to-numeric-input";

/** @hidden */
export {
applyDefaultsToWidgets,
Expand Down Expand Up @@ -371,6 +368,7 @@ export {
export {
generateInputNumberOptions,
generateInputNumberWidget,
generateInputNumberAnswer,
} from "./utils/generators/input-number-widget-generator";
/** @hidden */
export {
Expand Down
Loading
Loading