@khanacademy/perseus-core 37.0.0 → 38.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data-schema.d.ts +11 -5
- package/dist/es/index.item-splitting.js +7 -3
- package/dist/es/index.item-splitting.js.map +1 -1
- package/dist/es/index.js +15 -11
- package/dist/es/index.js.map +1 -1
- package/dist/feature-flags.d.ts +1 -1
- package/dist/index.d.ts +7 -61
- package/dist/index.item-splitting.js +7 -3
- package/dist/index.item-splitting.js.map +1 -1
- package/dist/index.js +18 -10
- package/dist/index.js.map +1 -1
- package/dist/parse-perseus-json/perseus-parsers/graded-group-set-widget.d.ts +9 -0
- package/dist/parse-perseus-json/perseus-parsers/graded-group-widget.d.ts +18 -0
- package/dist/utils/generators/table-widget-generator.d.ts +10 -0
- package/dist/validation.types.d.ts +8 -228
- package/dist/widgets/categorizer/index.d.ts +0 -1
- package/dist/widgets/cs-program/index.d.ts +0 -1
- package/dist/widgets/definition/index.d.ts +0 -2
- package/dist/widgets/dropdown/index.d.ts +0 -1
- package/dist/widgets/explanation/index.d.ts +0 -2
- package/dist/widgets/expression/index.d.ts +0 -1
- package/dist/widgets/free-response/index.d.ts +0 -1
- package/dist/widgets/graded-group/index.d.ts +0 -2
- package/dist/widgets/graded-group-set/index.d.ts +0 -2
- package/dist/widgets/grapher/index.d.ts +0 -1
- package/dist/widgets/group/index.d.ts +0 -1
- package/dist/widgets/iframe/index.d.ts +0 -1
- package/dist/widgets/image/index.d.ts +0 -1
- package/dist/widgets/input-number/index.d.ts +0 -1
- package/dist/widgets/interaction/index.d.ts +0 -2
- package/dist/widgets/interactive-graph/index.d.ts +0 -1
- package/dist/widgets/label-image/index.d.ts +0 -1
- package/dist/widgets/matcher/index.d.ts +0 -1
- package/dist/widgets/matrix/index.d.ts +0 -1
- package/dist/widgets/measurer/index.d.ts +0 -2
- package/dist/widgets/number-line/index.d.ts +0 -1
- package/dist/widgets/numeric-input/index.d.ts +0 -1
- package/dist/widgets/orderer/index.d.ts +0 -1
- package/dist/widgets/orderer/orderer-util.d.ts +11 -1
- package/dist/widgets/phet-simulation/index.d.ts +0 -2
- package/dist/widgets/plotter/index.d.ts +0 -1
- package/dist/widgets/python-program/index.d.ts +0 -2
- package/dist/widgets/radio/index.d.ts +0 -1
- package/dist/widgets/sorter/index.d.ts +0 -1
- package/dist/widgets/sorter/sorter-util.d.ts +12 -1
- package/dist/widgets/table/index.d.ts +0 -1
- package/dist/widgets/video/index.d.ts +0 -2
- package/package.json +1 -1
package/dist/feature-flags.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* export const PerseusFeatureFlags = [];
|
|
10
10
|
* 4. Also update the testing/feature-flags-util.ts for testing purpose
|
|
11
11
|
*/
|
|
12
|
-
declare const PerseusFeatureFlags: readonly ["perseus-renderer-upgrade", "desmos-calculator"];
|
|
12
|
+
declare const PerseusFeatureFlags: readonly ["perseus-renderer-upgrade", "desmos-calculator", "article-extras"];
|
|
13
13
|
export default PerseusFeatureFlags;
|
|
14
14
|
/**
|
|
15
15
|
* Checks if a feature flag is enabled in the given props.
|
package/dist/index.d.ts
CHANGED
|
@@ -53,128 +53,68 @@ export { default as blankLogic } from "./widgets/blank";
|
|
|
53
53
|
/** @hidden */
|
|
54
54
|
export { default as categorizerLogic } from "./widgets/categorizer";
|
|
55
55
|
/** @hidden */
|
|
56
|
-
export type { CategorizerDefaultWidgetOptions } from "./widgets/categorizer";
|
|
57
|
-
/** @hidden */
|
|
58
56
|
export { default as csProgramLogic } from "./widgets/cs-program";
|
|
59
57
|
/** @hidden */
|
|
60
|
-
export type { CSProgramDefaultWidgetOptions } from "./widgets/cs-program";
|
|
61
|
-
/** @hidden */
|
|
62
58
|
export { default as definitionLogic } from "./widgets/definition";
|
|
63
59
|
/** @hidden */
|
|
64
|
-
export type { DefinitionDefaultWidgetOptions } from "./widgets/definition";
|
|
65
|
-
/** @hidden */
|
|
66
60
|
export { default as dropdownLogic } from "./widgets/dropdown";
|
|
67
61
|
/** @hidden */
|
|
68
|
-
export type { DropdownDefaultWidgetOptions } from "./widgets/dropdown";
|
|
69
|
-
/** @hidden */
|
|
70
62
|
export { default as explanationLogic } from "./widgets/explanation";
|
|
71
63
|
/** @hidden */
|
|
72
|
-
export type { ExplanationDefaultWidgetOptions } from "./widgets/explanation";
|
|
73
|
-
/** @hidden */
|
|
74
64
|
export { default as expressionLogic } from "./widgets/expression";
|
|
75
65
|
/** @hidden */
|
|
76
|
-
export type { ExpressionDefaultWidgetOptions } from "./widgets/expression";
|
|
77
|
-
/** @hidden */
|
|
78
66
|
export { default as deriveExtraKeys } from "./widgets/expression/derive-extra-keys";
|
|
79
67
|
/** @hidden */
|
|
80
68
|
export { default as gradedGroupLogic } from "./widgets/graded-group";
|
|
81
69
|
/** @hidden */
|
|
82
70
|
export { default as freeResponseLogic } from "./widgets/free-response";
|
|
83
71
|
/** @hidden */
|
|
84
|
-
export type { FreeResponseDefaultWidgetOptions } from "./widgets/free-response";
|
|
85
|
-
/** @hidden */
|
|
86
|
-
export type { GradedGroupDefaultWidgetOptions } from "./widgets/graded-group";
|
|
87
|
-
/** @hidden */
|
|
88
72
|
export { default as gradedGroupSetLogic } from "./widgets/graded-group-set";
|
|
89
73
|
/** @hidden */
|
|
90
|
-
export type { GradedGroupSetDefaultWidgetOptions } from "./widgets/graded-group-set";
|
|
91
|
-
/** @hidden */
|
|
92
74
|
export { default as grapherLogic } from "./widgets/grapher";
|
|
93
75
|
/** @hidden */
|
|
94
|
-
export type { GrapherDefaultWidgetOptions } from "./widgets/grapher";
|
|
95
|
-
/** @hidden */
|
|
96
76
|
export { default as groupLogic } from "./widgets/group";
|
|
97
77
|
/** @hidden */
|
|
98
|
-
export type { GroupDefaultWidgetOptions } from "./widgets/group";
|
|
99
|
-
/** @hidden */
|
|
100
78
|
export { default as iframeLogic } from "./widgets/iframe";
|
|
101
79
|
/** @hidden */
|
|
102
|
-
export type { IFrameDefaultWidgetOptions } from "./widgets/iframe";
|
|
103
|
-
/** @hidden */
|
|
104
80
|
export { default as imageLogic } from "./widgets/image";
|
|
105
81
|
/** @hidden */
|
|
106
|
-
export type { ImageDefaultWidgetOptions } from "./widgets/image";
|
|
107
|
-
/** @hidden */
|
|
108
82
|
export { default as inputNumberLogic } from "./widgets/input-number";
|
|
109
83
|
/** @hidden */
|
|
110
|
-
export type { InputNumberDefaultWidgetOptions } from "./widgets/input-number";
|
|
111
|
-
/** @hidden */
|
|
112
84
|
export { default as interactionLogic } from "./widgets/interaction";
|
|
113
85
|
/** @hidden */
|
|
114
|
-
export type { InteractionDefaultWidgetOptions } from "./widgets/interaction";
|
|
115
|
-
/** @hidden */
|
|
116
86
|
export { default as interactiveGraphLogic } from "./widgets/interactive-graph";
|
|
117
87
|
/** @hidden */
|
|
118
|
-
export type { InteractiveGraphDefaultWidgetOptions } from "./widgets/interactive-graph";
|
|
119
|
-
/** @hidden */
|
|
120
88
|
export { default as labelImageLogic } from "./widgets/label-image";
|
|
121
89
|
/** @hidden */
|
|
122
|
-
export type { LabelImageDefaultWidgetOptions } from "./widgets/label-image";
|
|
123
|
-
/** @hidden */
|
|
124
90
|
export { default as matcherLogic } from "./widgets/matcher";
|
|
125
91
|
/** @hidden */
|
|
126
|
-
export type { MatcherDefaultWidgetOptions } from "./widgets/matcher";
|
|
127
|
-
/** @hidden */
|
|
128
92
|
export { default as matrixLogic } from "./widgets/matrix";
|
|
129
93
|
/** @hidden */
|
|
130
|
-
export type { MatrixDefaultWidgetOptions } from "./widgets/matrix";
|
|
131
|
-
/** @hidden */
|
|
132
94
|
export { default as measurerLogic } from "./widgets/measurer";
|
|
133
95
|
/** @hidden */
|
|
134
|
-
export type { MeasurerDefaultWidgetOptions } from "./widgets/measurer";
|
|
135
|
-
/** @hidden */
|
|
136
96
|
export { default as numberLineLogic } from "./widgets/number-line";
|
|
137
97
|
/** @hidden */
|
|
138
|
-
export type { NumberLineDefaultWidgetOptions } from "./widgets/number-line";
|
|
139
|
-
/** @hidden */
|
|
140
98
|
export { default as numericInputLogic } from "./widgets/numeric-input";
|
|
141
99
|
/** @hidden */
|
|
142
|
-
export type { NumericInputDefaultWidgetOptions } from "./widgets/numeric-input";
|
|
143
|
-
/** @hidden */
|
|
144
100
|
export { default as ordererLogic } from "./widgets/orderer";
|
|
145
101
|
/** @hidden */
|
|
146
|
-
export type { OrdererDefaultWidgetOptions } from "./widgets/orderer";
|
|
147
|
-
/** @hidden */
|
|
148
102
|
export { default as phetSimulationLogic } from "./widgets/phet-simulation";
|
|
149
103
|
/** @hidden */
|
|
150
|
-
export type { PhetSimulationDefaultWidgetOptions } from "./widgets/phet-simulation";
|
|
151
|
-
/** @hidden */
|
|
152
104
|
export { default as plotterLogic } from "./widgets/plotter";
|
|
153
105
|
/** @hidden */
|
|
154
|
-
export type { PlotterDefaultWidgetOptions } from "./widgets/plotter";
|
|
155
|
-
/** @hidden */
|
|
156
106
|
export { default as pythonProgramLogic } from "./widgets/python-program";
|
|
157
107
|
/** @hidden */
|
|
158
|
-
export type { PythonProgramDefaultWidgetOptions } from "./widgets/python-program";
|
|
159
|
-
/** @hidden */
|
|
160
108
|
export { default as radioLogic } from "./widgets/radio";
|
|
161
109
|
/** @hidden */
|
|
162
|
-
export type { RadioDefaultWidgetOptions } from "./widgets/radio";
|
|
163
|
-
/** @hidden */
|
|
164
110
|
export { usesNumCorrect } from "./widgets/radio/radio-util";
|
|
165
111
|
/** @hidden */
|
|
166
112
|
export { default as sorterLogic } from "./widgets/sorter";
|
|
167
113
|
/** @hidden */
|
|
168
|
-
export type { SorterDefaultWidgetOptions } from "./widgets/sorter";
|
|
169
|
-
/** @hidden */
|
|
170
114
|
export { default as tableLogic } from "./widgets/table";
|
|
171
115
|
/** @hidden */
|
|
172
|
-
export type { TableDefaultWidgetOptions } from "./widgets/table";
|
|
173
|
-
/** @hidden */
|
|
174
116
|
export { default as videoLogic } from "./widgets/video";
|
|
175
117
|
/** @hidden */
|
|
176
|
-
export type { VideoDefaultWidgetOptions } from "./widgets/video";
|
|
177
|
-
/** @hidden */
|
|
178
118
|
export { convertGrapherOptionsToInteractiveGraph, convertGrapherUserInputToInteractiveGraph, convertInteractiveGraphUserInputToGrapher, } from "./widgets/grapher/to-interactive-graph";
|
|
179
119
|
/** @hidden */
|
|
180
120
|
export { applyDefaultsToWidgets, applyDefaultsToWidget, } from "./widgets/apply-defaults";
|
|
@@ -191,7 +131,7 @@ export type * from "./widgets/logic-export.types";
|
|
|
191
131
|
/** @hidden */
|
|
192
132
|
export * as CoreWidgetRegistry from "./widgets/core-widget-registry";
|
|
193
133
|
/** @hidden */
|
|
194
|
-
export { getOrdererPublicWidgetOptions } from "./widgets/orderer/orderer-util";
|
|
134
|
+
export { getOrdererPublicWidgetOptions, mergeCards, toCard, } from "./widgets/orderer/orderer-util";
|
|
195
135
|
/** @hidden */
|
|
196
136
|
export type { OrdererPublicWidgetOptions } from "./widgets/orderer/orderer-util";
|
|
197
137
|
/** @hidden */
|
|
@@ -213,6 +153,8 @@ export type { GrapherPublicWidgetOptions } from "./widgets/grapher/grapher-util"
|
|
|
213
153
|
/** @hidden */
|
|
214
154
|
export { getGroupPublicWidgetOptions } from "./widgets/group/group-util";
|
|
215
155
|
/** @hidden */
|
|
156
|
+
export type { GroupPublicWidgetOptions } from "./widgets/group/group-util";
|
|
157
|
+
/** @hidden */
|
|
216
158
|
export { getInteractiveGraphPublicWidgetOptions, type InteractiveGraphPublicWidgetOptions, } from "./widgets/interactive-graph/interactive-graph-util";
|
|
217
159
|
/** @hidden */
|
|
218
160
|
export { getLabelImagePublicWidgetOptions } from "./widgets/label-image/label-image-util";
|
|
@@ -318,6 +260,10 @@ export { generateRadioOptions, generateRadioChoice, generateSimpleRadioQuestion,
|
|
|
318
260
|
export { generateVideoWidget } from "./utils/generators/video-widget-generator";
|
|
319
261
|
/** @hidden */
|
|
320
262
|
export { generateSorterWidget, generateSorterOptions, } from "./utils/generators/sorter-widget-generator";
|
|
263
|
+
/** @hidden */
|
|
264
|
+
export { generateTableOptions } from "./utils/generators/table-widget-generator";
|
|
265
|
+
/** @hidden */
|
|
266
|
+
export { generateGrapherWidgetOptions } from "./utils/generators/grapher-widget-generator";
|
|
321
267
|
export { getAnswersFromWidgets, injectWidgets, } from "./utils/extract-perseus-ai-data";
|
|
322
268
|
/** @hidden */
|
|
323
269
|
export { getPerseusAIData } from "./utils/extract-perseus-ai-data";
|
|
@@ -104,7 +104,9 @@ const stringOrNumberOrNullOrUndefined=union(string).or(number).or(constant(null)
|
|
|
104
104
|
|
|
105
105
|
const parseFreeResponseWidget=parseWidget(constant("free-response"),object({allowUnlimitedCharacters:boolean,characterLimit:number,placeholder:string,question:string,scoringCriteria:array(object({text:string}))}));
|
|
106
106
|
|
|
107
|
-
const
|
|
107
|
+
const booleanOrFalse=defaulted(boolean,()=>false);const calculatorVariantOrUndefined=pipeParsers(defaulted(nullable(enumeration("scientific","graphing","four_function")),()=>null)).then(convert(v=>v??undefined)).parser;const baseParser=defaulted(object({calculator:booleanOrFalse,calculatorVariant:calculatorVariantOrUndefined,financialCalculatorMonthlyPayment:booleanOrFalse,financialCalculatorTotalAmount:booleanOrFalse,financialCalculatorTimeToPayOff:booleanOrFalse,periodicTable:booleanOrFalse,periodicTableWithKey:booleanOrFalse}),()=>({calculator:false,calculatorVariant:undefined,financialCalculatorMonthlyPayment:false,financialCalculatorTotalAmount:false,financialCalculatorTimeToPayOff:false,periodicTable:false,periodicTableWithKey:false}));const parsePerseusAnswerArea=pipeParsers(baseParser).then(convert(parsed=>{const{calculatorVariant:parsedCalcVariant,...rest}=parsed;const calculatorVariant=parsed.calculator&&parsedCalcVariant===undefined?"scientific":parsedCalcVariant;return calculatorVariant!==undefined?{...rest,calculatorVariant}:rest})).parser;
|
|
108
|
+
|
|
109
|
+
const falseToNull=pipeParsers(constant(false)).then(convert(()=>null)).parser;const parseGradedGroupWidgetOptions=object({title:defaulted(string,()=>""),hint:union(falseToNull).or(constant(null)).or(constant(undefined)).or((rawVal,ctx)=>parsePerseusRenderer(rawVal,ctx)).parser,content:string,widgets:(rawVal,ctx)=>parseWidgetsMap(rawVal,ctx),images:record(string,object({width:number,height:number})),answerArea:optional(parsePerseusAnswerArea)});const parseGradedGroupWidget=parseWidget(constant("graded-group"),parseGradedGroupWidgetOptions);
|
|
108
110
|
|
|
109
111
|
const parseGradedGroupSetWidget=parseWidget(constant("graded-group-set"),object({gradedGroups:array(parseGradedGroupWidgetOptions)}));
|
|
110
112
|
|
|
@@ -168,8 +170,6 @@ union(parsePerseusRenderer).or(array(parsePerseusRenderer)).parser;
|
|
|
168
170
|
|
|
169
171
|
const parseHint=object({replace:defaulted(optional(boolean),()=>undefined),placeholder:defaulted(optional(boolean),()=>undefined),content:string,widgets:defaulted(parseWidgetsMap,()=>({})),images:parseImages,metadata:any});
|
|
170
172
|
|
|
171
|
-
const booleanOrFalse=defaulted(boolean,()=>false);const calculatorVariantOrUndefined=pipeParsers(defaulted(nullable(enumeration("scientific","graphing","four_function")),()=>null)).then(convert(v=>v??undefined)).parser;const baseParser=defaulted(object({calculator:booleanOrFalse,calculatorVariant:calculatorVariantOrUndefined,financialCalculatorMonthlyPayment:booleanOrFalse,financialCalculatorTotalAmount:booleanOrFalse,financialCalculatorTimeToPayOff:booleanOrFalse,periodicTable:booleanOrFalse,periodicTableWithKey:booleanOrFalse}),()=>({calculator:false,calculatorVariant:undefined,financialCalculatorMonthlyPayment:false,financialCalculatorTotalAmount:false,financialCalculatorTimeToPayOff:false,periodicTable:false,periodicTableWithKey:false}));const parsePerseusAnswerArea=pipeParsers(baseParser).then(convert(parsed=>{const{calculatorVariant:parsedCalcVariant,...rest}=parsed;const calculatorVariant=parsed.calculator&&parsedCalcVariant===undefined?"scientific":parsedCalcVariant;return calculatorVariant!==undefined?{...rest,calculatorVariant}:rest})).parser;
|
|
172
|
-
|
|
173
173
|
const parsePerseusItem=object({question:parsePerseusRenderer,hints:defaulted(array(parseHint),()=>[]),answerArea:parsePerseusAnswerArea});
|
|
174
174
|
|
|
175
175
|
const coord=pair(number,number);const coordPair=pair(coord,coord);const parseAbsoluteValueBranch=object({type:constant("absolute_value"),coords:nullable(coordPair)});const parseExponentialBranch=object({type:constant("exponential"),asymptote:coordPair,coords:nullable(coordPair)});const parseLinearBranch=object({type:constant("linear"),coords:nullable(coordPair)});const parseLogarithmBranch=object({type:constant("logarithm"),asymptote:coordPair,coords:nullable(coordPair)});const parseQuadraticBranch=object({type:constant("quadratic"),coords:nullable(coordPair)});const parseSinusoidBranch=object({type:constant("sinusoid"),coords:nullable(coordPair)});const parseTangentBranch=object({type:constant("tangent"),coords:nullable(coordPair)});discriminatedUnionOn("type").withBranch("absolute_value",parseAbsoluteValueBranch).withBranch("exponential",parseExponentialBranch).withBranch("linear",parseLinearBranch).withBranch("logarithm",parseLogarithmBranch).withBranch("quadratic",parseQuadraticBranch).withBranch("sinusoid",parseSinusoidBranch).withBranch("tangent",parseTangentBranch).parser;
|
|
@@ -188,6 +188,10 @@ class Registry{throwIfUnregistered(){if(!this.anythingRegistered){throw new Erro
|
|
|
188
188
|
|
|
189
189
|
const seededRNG=function(seed){let randomSeed=seed;return function(){let seed=randomSeed;seed=seed+0x7ed55d16+(seed<<12)&0xffffffff;seed=(seed^0xc761c23c^seed>>>19)&0xffffffff;seed=seed+0x165667b1+(seed<<5)&0xffffffff;seed=(seed+0xd3a2646c^seed<<9)&0xffffffff;seed=seed+0xfd7046c5+(seed<<3)&0xffffffff;seed=(seed^0xb55a4f09^seed>>>16)&0xffffffff;return (randomSeed=seed&0xfffffff)/0x10000000}};seededRNG(new Date().getTime()&0xffffffff);
|
|
190
190
|
|
|
191
|
+
function toCard(content){return {content,widgets:{},images:{}}}function getCategoryScore(content){if(/\d/.test(content)){return 0}if(/^\$?[a-zA-Z]+\$?$/.test(content)){return 2}return 1}function mergeCards(correctOptions,otherOptions){const allCards=[...correctOptions,...otherOptions];return [...new Set(allCards.map(card=>card.content))].filter(content=>content!=="").sort().sort((a,b)=>getCategoryScore(a)-getCategoryScore(b)).map(toCard)}
|
|
192
|
+
|
|
193
|
+
const defaultCorrectOptions=[toCard("$x$")];const defaultOtherOptions=[toCard("$y$")];({options:mergeCards(defaultCorrectOptions,defaultOtherOptions)});
|
|
194
|
+
|
|
191
195
|
const defaultRows=4;const defaultColumns=1;new Array(defaultRows).fill(0).map(()=>new Array(defaultColumns).fill(""));
|
|
192
196
|
|
|
193
197
|
const widgets=new Registry("Core widget registry");function getCurrentVersion(type){const widgetLogic=widgets.get(type);return widgetLogic?.version||{major:0,minor:0}}const getPublicWidgetOptionsFunction=type=>{return widgets.get(type)?.getPublicWidgetOptions??(i=>i)};function getDefaultWidgetOptions(type){const widgetLogic=widgets.get(type);return widgetLogic?.defaultWidgetOptions||{}}const getSupportedAlignments=type=>{const widgetLogic=widgets.get(type);if(!widgetLogic?.supportedAlignments?.[0]){return ["default"]}return widgetLogic?.supportedAlignments};
|