@khanacademy/perseus-core 19.3.0 → 19.5.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.
Files changed (88) hide show
  1. package/dist/data-schema.d.ts +1 -0
  2. package/dist/es/index.item-splitting.js +2 -2
  3. package/dist/es/index.item-splitting.js.map +1 -1
  4. package/dist/es/index.js +4 -4
  5. package/dist/es/index.js.map +1 -1
  6. package/dist/index.item-splitting.js +2 -2
  7. package/dist/index.item-splitting.js.map +1 -1
  8. package/dist/index.js +4 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/parse-perseus-json/perseus-parsers/image-widget.d.ts +1 -0
  11. package/dist/parse-perseus-json/perseus-parsers/radio-widget.mockData.d.ts +50 -0
  12. package/dist/parse-perseus-json/regression-tests/article-data/image-with-id-0.d.ts +201 -0
  13. package/dist/parse-perseus-json/regression-tests/item-data/categorizer-missing-randomizeItems.d.ts +36 -0
  14. package/dist/parse-perseus-json/regression-tests/item-data/categorizer-missing-static.d.ts +37 -0
  15. package/dist/parse-perseus-json/regression-tests/item-data/categorizer-with-null-value.d.ts +44 -0
  16. package/dist/parse-perseus-json/regression-tests/item-data/cs-program-missing-static.d.ts +71 -0
  17. package/dist/parse-perseus-json/regression-tests/item-data/cs-program-with-null-width.d.ts +21 -0
  18. package/dist/parse-perseus-json/regression-tests/item-data/definition-missing-static.d.ts +55 -0
  19. package/dist/parse-perseus-json/regression-tests/item-data/dropdown-missing-placeholder.d.ts +38 -0
  20. package/dist/parse-perseus-json/regression-tests/item-data/dropdown-missing-version.d.ts +34 -0
  21. package/dist/parse-perseus-json/regression-tests/item-data/explanation-missing-widgets-map.d.ts +69 -0
  22. package/dist/parse-perseus-json/regression-tests/item-data/expression-answerForm-missing-form.d.ts +41 -0
  23. package/dist/parse-perseus-json/regression-tests/item-data/expression-missing-buttonSets.d.ts +35 -0
  24. package/dist/parse-perseus-json/regression-tests/item-data/expression-option-missing-value.d.ts +44 -0
  25. package/dist/parse-perseus-json/regression-tests/item-data/expression-with-null-answer-key.d.ts +124 -0
  26. package/dist/parse-perseus-json/regression-tests/item-data/expression-with-scientific-notation.d.ts +115 -0
  27. package/dist/parse-perseus-json/regression-tests/item-data/graded-group-with-false-hint.d.ts +133 -0
  28. package/dist/parse-perseus-json/regression-tests/item-data/grapher-with-empty-coords.d.ts +111 -0
  29. package/dist/parse-perseus-json/regression-tests/item-data/grapher-with-null-coords.d.ts +59 -0
  30. package/dist/parse-perseus-json/regression-tests/item-data/hint-missing-images.d.ts +175 -0
  31. package/dist/parse-perseus-json/regression-tests/item-data/hint-with-null-replace.d.ts +72 -0
  32. package/dist/parse-perseus-json/regression-tests/item-data/iframe-missing-allowFullScreen.d.ts +63 -0
  33. package/dist/parse-perseus-json/regression-tests/item-data/iframe-missing-settings.d.ts +18 -0
  34. package/dist/parse-perseus-json/regression-tests/item-data/iframe-missing-static.d.ts +46 -0
  35. package/dist/parse-perseus-json/regression-tests/item-data/image-with-null-dimensions.d.ts +181 -0
  36. package/dist/parse-perseus-json/regression-tests/item-data/input-number-with-boolean-value.d.ts +84 -0
  37. package/dist/parse-perseus-json/regression-tests/item-data/interaction-element-missing-constraints.d.ts +115 -0
  38. package/dist/parse-perseus-json/regression-tests/item-data/interaction-element-missing-key.d.ts +353 -0
  39. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-backgroundImage-with-empty-string-coordinates.d.ts +77 -0
  40. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-locked-figures-missing-weights.d.ts +213 -0
  41. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-locked-function-with-null-domain-element.d.ts +62 -0
  42. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-locked-line-missing-showPoint1.d.ts +294 -0
  43. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-missing-graph.d.ts +167 -0
  44. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-missing-gridStep.d.ts +121 -0
  45. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-missing-labels.d.ts +49 -0
  46. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-polygon-with-exact-match.d.ts +96 -0
  47. package/dist/parse-perseus-json/regression-tests/item-data/interactive-graph-with-string-backgroundImage-left.d.ts +86 -0
  48. package/dist/parse-perseus-json/regression-tests/item-data/item-with-null-itemDataVersion.d.ts +100 -0
  49. package/dist/parse-perseus-json/regression-tests/item-data/label-image-missing-static.d.ts +110 -0
  50. package/dist/parse-perseus-json/regression-tests/item-data/lights-puzzle.d.ts +27 -0
  51. package/dist/parse-perseus-json/regression-tests/item-data/matcher-with-null-options.d.ts +14 -0
  52. package/dist/parse-perseus-json/regression-tests/item-data/matrix-missing-version.d.ts +24 -0
  53. package/dist/parse-perseus-json/regression-tests/item-data/matrix-with-nulls-in-answer.d.ts +39 -0
  54. package/dist/parse-perseus-json/regression-tests/item-data/matrix-with-string-answer-element.d.ts +69 -0
  55. package/dist/parse-perseus-json/regression-tests/item-data/measurer-missing-image.d.ts +49 -0
  56. package/dist/parse-perseus-json/regression-tests/item-data/measurer-missing-static.d.ts +41 -0
  57. package/dist/parse-perseus-json/regression-tests/item-data/number-line-missing-snapDivisions.d.ts +133 -0
  58. package/dist/parse-perseus-json/regression-tests/item-data/number-line-missing-static.d.ts +46 -0
  59. package/dist/parse-perseus-json/regression-tests/item-data/number-line-with-empty-strings-in-label-range.d.ts +92 -0
  60. package/dist/parse-perseus-json/regression-tests/item-data/number-line-with-null-correctX.d.ts +68 -0
  61. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-answer-with-null-value.d.ts +44 -0
  62. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-answer-with-simplify-true.d.ts +40 -0
  63. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-answer-without-value.d.ts +89 -0
  64. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-missing-coefficient.d.ts +43 -0
  65. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-missing-labelText.d.ts +210 -0
  66. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-with-null-answerForms.d.ts +228 -0
  67. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-with-simplify-accepted.d.ts +108 -0
  68. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-with-simplify-false.d.ts +52 -0
  69. package/dist/parse-perseus-json/regression-tests/item-data/numeric-input-with-simplify-true-string.d.ts +75 -0
  70. package/dist/parse-perseus-json/regression-tests/item-data/orderer-option-missing-images.d.ts +539 -0
  71. package/dist/parse-perseus-json/regression-tests/item-data/orderer-option-missing-widgets.d.ts +80 -0
  72. package/dist/parse-perseus-json/regression-tests/item-data/orderer-with-invalid-height.d.ts +33 -0
  73. package/dist/parse-perseus-json/regression-tests/item-data/orderer-with-undefined-options.d.ts +135 -0
  74. package/dist/parse-perseus-json/regression-tests/item-data/passage-missing-footnotes-and-title.d.ts +47 -0
  75. package/dist/parse-perseus-json/regression-tests/item-data/passage-ref-missing-summaryText.d.ts +147 -0
  76. package/dist/parse-perseus-json/regression-tests/item-data/plotter-missing-scaleY-and-snapsPerLine.d.ts +64 -0
  77. package/dist/parse-perseus-json/regression-tests/item-data/plotter-with-undefined-plotDimensions.d.ts +76 -0
  78. package/dist/parse-perseus-json/regression-tests/item-data/question-missing-content.d.ts +8 -0
  79. package/dist/parse-perseus-json/regression-tests/item-data/radio-choice-ids-set-to-empty-string.d.ts +49 -0
  80. package/dist/parse-perseus-json/regression-tests/item-data/radio-choice-missing-content.d.ts +147 -0
  81. package/dist/parse-perseus-json/regression-tests/item-data/radio-choice-v2-with-rationale.d.ts +167 -0
  82. package/dist/parse-perseus-json/regression-tests/item-data/radio-missing-noneOfTheAbove.d.ts +43 -0
  83. package/dist/parse-perseus-json/regression-tests/item-data/radio-with-extra-fields-from-go-schema.d.ts +169 -0
  84. package/dist/parse-perseus-json/regression-tests/item-data/radio-with-null-options.d.ts +78 -0
  85. package/dist/parse-perseus-json/regression-tests/item-data/radio-with-null-widgets.d.ts +115 -0
  86. package/dist/parse-perseus-json/regression-tests/item-data/simulator-widget.d.ts +51 -0
  87. package/dist/parse-perseus-json/regression-tests/item-data/transformer-widget.d.ts +99 -0
  88. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -150,7 +150,7 @@ const stringToNumber=(rawValue,ctx)=>{if(typeof rawValue==="number"){return ctx.
150
150
 
151
151
  function emptyToZero(x){return x===""?0:x}const imageDimensionToNumber=pipeParsers(union(number).or(string).parser).then(convert(emptyToZero)).then(stringToNumber).parser;const dimensionOrUndefined=defaulted(optional(imageDimensionToNumber),()=>undefined);const parsePerseusImageBackground=object({url:optional(nullable(string)),width:dimensionOrUndefined,height:dimensionOrUndefined,top:dimensionOrUndefined,left:dimensionOrUndefined,bottom:dimensionOrUndefined,scale:dimensionOrUndefined});
152
152
 
153
- const pairOfNumbers$2=pair(number,number);const parseImageWidget=parseWidget(constant("image"),object({title:optional(string),caption:optional(string),alt:optional(string),longDescription:optional(string),backgroundImage:parsePerseusImageBackground,static:optional(boolean),labels:optional(array(object({content:string,alignment:string,coordinates:array(number)}))),range:optional(pair(pairOfNumbers$2,pairOfNumbers$2)),box:optional(pairOfNumbers$2)}));
153
+ const pairOfNumbers$2=pair(number,number);const parseImageWidget=parseWidget(constant("image"),object({title:optional(string),caption:optional(string),alt:optional(string),longDescription:optional(string),decorative:optional(boolean),backgroundImage:parsePerseusImageBackground,static:optional(boolean),labels:optional(array(object({content:string,alignment:string,coordinates:array(number)}))),range:optional(pair(pairOfNumbers$2,pairOfNumbers$2)),box:optional(pairOfNumbers$2)}));
154
154
 
155
155
  const booleanToString=(rawValue,ctx)=>{if(typeof rawValue==="boolean"){return ctx.success(String(rawValue))}return ctx.failure("boolean",rawValue)};const parseInputNumberWidget=parseWidget(constant("input-number"),object({answerType:optional(enumeration("number","decimal","integer","rational","improper","mixed","percent","pi")),inexact:optional(boolean),maxError:optional(union(number).or(string).parser),rightAlign:optional(boolean),simplify:enumeration("required","optional","enforced"),size:enumeration("normal","small"),value:defaulted(union(number).or(string).or(booleanToString).parser,()=>0),customKeypad:optional(boolean)}));
156
156
 
@@ -188,7 +188,7 @@ const parsePythonProgramWidget=parseWidget(constant("python-program"),object({pr
188
188
 
189
189
  function deriveNumCorrect(choices){return choices.filter(c=>c.correct).length}
190
190
 
191
- const parseWidgetsMapOrUndefined=defaulted(optional((rawVal,ctx)=>parseWidgetsMap(rawVal,ctx)),()=>undefined);function getDefaultOptions(){return {choices:[{content:"",id:generateChoiceId(0)},{content:"",id:generateChoiceId(1)},{content:"",id:generateChoiceId(2)},{content:"",id:generateChoiceId(3)}]}}const parseOnePerLine=defaulted(optional(boolean),()=>undefined);const parseNoneOfTheAbove=defaulted(optional(constant(false)),()=>undefined);function generateChoiceId(index){return `radio-choice-${index}`}const version3=optional(object({major:constant(3),minor:number}));const parseRadioWidgetV3=parseWidgetWithVersion(version3,constant("radio"),object({numCorrect:optional(number),choices:arrayWithIndex(index=>object({content:defaulted(string,()=>""),rationale:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),id:defaultedNonEmptyString(()=>generateChoiceId(index))})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean)}));const version2=optional(object({major:constant(2),minor:number}));const parseRadioWidgetV2=parseWidgetWithVersion(version2,constant("radio"),defaulted(object({numCorrect:optional(number),choices:array(object({content:defaulted(string,()=>""),clue:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),widgets:parseWidgetsMapOrUndefined})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean),onePerLine:parseOnePerLine,displayCount:optional(any),noneOfTheAbove:parseNoneOfTheAbove}),getDefaultOptions));const version1=optional(object({major:constant(1),minor:number}));const parseRadioWidgetV1=parseWidgetWithVersion(version1,constant("radio"),defaulted(object({choices:array(object({content:defaulted(string,()=>""),clue:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),widgets:parseWidgetsMapOrUndefined})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean),onePerLine:parseOnePerLine,displayCount:optional(any),noneOfTheAbove:parseNoneOfTheAbove}),getDefaultOptions));const version0=optional(object({major:constant(0),minor:number}));const parseRadioWidgetV0=parseWidgetWithVersion(version0,constant("radio"),defaulted(object({choices:array(object({content:defaulted(string,()=>""),clue:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),widgets:parseWidgetsMapOrUndefined})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean),onePerLine:parseOnePerLine,displayCount:optional(any),noneOfTheAbove:parseNoneOfTheAbove}),getDefaultOptions));function migrateV2toV3(widget){const{options}=widget;return {...widget,version:{major:3,minor:0},options:{numCorrect:options.numCorrect,hasNoneOfTheAbove:options.hasNoneOfTheAbove,countChoices:options.countChoices,randomize:options.randomize,multipleSelect:options.multipleSelect,deselectEnabled:options.deselectEnabled,choices:options.choices.map((choice,index)=>({content:choice.content,rationale:choice.clue,correct:choice.correct,isNoneOfTheAbove:choice.isNoneOfTheAbove,id:generateChoiceId(index)}))}}}function migrateV1ToV2(widget){const{options}=widget;return {...widget,version:{major:2,minor:0},options:{...options,numCorrect:deriveNumCorrect(options.choices)}}}function migrateV0ToV1(widget){const{options}=widget;const{noneOfTheAbove:_,...rest}=options;return {...widget,version:{major:1,minor:0},options:{...rest,hasNoneOfTheAbove:false,noneOfTheAbove:undefined}}}const parseRadioWidget=versionedWidgetOptions(3,parseRadioWidgetV3).withMigrationFrom(2,parseRadioWidgetV2,migrateV2toV3).withMigrationFrom(1,parseRadioWidgetV1,migrateV1ToV2).withMigrationFrom(0,parseRadioWidgetV0,migrateV0ToV1).parser;
191
+ const parseWidgetsMapOrUndefined=defaulted(optional((rawVal,ctx)=>parseWidgetsMap(rawVal,ctx)),()=>undefined);function getDefaultOptions(){return {choices:[{content:"",id:generateChoiceId(0)},{content:"",id:generateChoiceId(1)},{content:"",id:generateChoiceId(2)},{content:"",id:generateChoiceId(3)}]}}const parseOnePerLine=defaulted(optional(boolean),()=>undefined);const parseNoneOfTheAbove=defaulted(optional(constant(false)),()=>undefined);function generateChoiceId(index){return `radio-choice-${index}`}const version3=optional(object({major:constant(3),minor:number}));const parseRadioWidgetV3=parseWidgetWithVersion(version3,constant("radio"),object({numCorrect:optional(number),choices:arrayWithIndex(index=>object({content:defaulted(string,()=>""),rationale:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),id:defaultedNonEmptyString(()=>generateChoiceId(index))})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean)}));const version2=optional(object({major:constant(2),minor:number}));const parseRadioWidgetV2=parseWidgetWithVersion(version2,constant("radio"),defaulted(object({numCorrect:optional(number),choices:array(object({content:defaulted(string,()=>""),clue:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),widgets:parseWidgetsMapOrUndefined})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean),onePerLine:parseOnePerLine,displayCount:optional(any),noneOfTheAbove:parseNoneOfTheAbove}),getDefaultOptions));const version1=optional(object({major:constant(1),minor:number}));const parseRadioWidgetV1=parseWidgetWithVersion(version1,constant("radio"),defaulted(object({choices:array(object({content:defaulted(string,()=>""),clue:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),widgets:parseWidgetsMapOrUndefined})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean),onePerLine:parseOnePerLine,displayCount:optional(any),noneOfTheAbove:parseNoneOfTheAbove}),getDefaultOptions));const version0=optional(object({major:constant(0),minor:number}));const parseRadioWidgetV0=parseWidgetWithVersion(version0,constant("radio"),defaulted(object({choices:array(object({content:defaulted(string,()=>""),clue:optional(string),correct:optional(boolean),isNoneOfTheAbove:optional(boolean),widgets:parseWidgetsMapOrUndefined})),hasNoneOfTheAbove:optional(boolean),countChoices:optional(boolean),randomize:optional(boolean),multipleSelect:optional(boolean),deselectEnabled:optional(boolean),onePerLine:parseOnePerLine,displayCount:optional(any),noneOfTheAbove:parseNoneOfTheAbove}),getDefaultOptions));function migrateV2toV3(widget){const{options}=widget;return {...widget,version:{major:3,minor:0},options:{numCorrect:options.numCorrect,hasNoneOfTheAbove:options.hasNoneOfTheAbove,countChoices:options.countChoices,randomize:options.randomize,multipleSelect:options.multipleSelect,deselectEnabled:options.deselectEnabled,choices:options.choices.map((choice,index)=>({content:choice.content,rationale:choice["rationale"]||choice.clue,correct:choice.correct,isNoneOfTheAbove:choice.isNoneOfTheAbove,id:generateChoiceId(index)}))}}}function migrateV1ToV2(widget){const{options}=widget;return {...widget,version:{major:2,minor:0},options:{...options,numCorrect:deriveNumCorrect(options.choices)}}}function migrateV0ToV1(widget){const{options}=widget;const{noneOfTheAbove:_,...rest}=options;return {...widget,version:{major:1,minor:0},options:{...rest,hasNoneOfTheAbove:false,noneOfTheAbove:undefined}}}const parseRadioWidget=versionedWidgetOptions(3,parseRadioWidgetV3).withMigrationFrom(2,parseRadioWidgetV2,migrateV2toV3).withMigrationFrom(1,parseRadioWidgetV1,migrateV1ToV2).withMigrationFrom(0,parseRadioWidgetV0,migrateV0ToV1).parser;
192
192
 
193
193
  const parseSorterWidget=parseWidget(constant("sorter"),object({correct:array(string),padding:boolean,layout:enumeration("horizontal","vertical")}));
194
194
 
@@ -254,7 +254,7 @@ const parseUserInputMap=(rawValue,ctx)=>{if(!isPlainObject(rawValue)){return ctx
254
254
 
255
255
  function parsePerseusItem(json){if(isRealJSONParse(JSON.parse)){return JSON.parse(json)}throw new Error("Something went wrong.")}function parseAndMigratePerseusItem(data){throwErrorIfCheatingDetected();const object=typeof data==="string"?JSON.parse(data):data;const result=parse(object,parsePerseusItem$1);if(isFailure(result)){return failure({message:result.detail,invalidObject:object})}return result}function parseAndMigratePerseusArticle(data){throwErrorIfCheatingDetected();const object=typeof data==="string"?JSON.parse(data):data;const result=parse(object,parsePerseusArticle);if(isFailure(result)){return failure({message:result.detail,invalidObject:object})}return result}function parseAndMigrateUserInputMap(data){const object=typeof data==="string"?JSON.parse(data):data;const result=parse(object,parseUserInputMap);if(isFailure(result)){return failure({message:result.detail,invalidObject:object})}return result}function throwErrorIfCheatingDetected(){if(!isRealJSONParse(JSON.parse)){throw new Error("Something went wrong.")}}
256
256
 
257
- const libName="@khanacademy/perseus-core";const libVersion="19.3.0";perseusUtils.addLibraryVersionToPerseusDebug(libName,libVersion);
257
+ const libName="@khanacademy/perseus-core";const libVersion="19.5.0";perseusUtils.addLibraryVersionToPerseusDebug(libName,libVersion);
258
258
 
259
259
  const Errors=Object.freeze({Unknown:"Unknown",Internal:"Internal",InvalidInput:"InvalidInput",NotAllowed:"NotAllowed",TransientService:"TransientService",Service:"Service"});
260
260
 
@@ -362,7 +362,7 @@ const defaultWidgetOptions$5={programID:"",height:400};const pythonProgramWidget
362
362
 
363
363
  function getRadioChoicePublicData(choice){const{id,content,isNoneOfTheAbove}=choice;return {id,content,isNoneOfTheAbove}}function usesNumCorrect(multipleSelect,countChoices,numCorrect){return multipleSelect&&countChoices&&numCorrect}function getRadioPublicWidgetOptions(options){const{numCorrect,choices,multipleSelect,countChoices}=options;return {...options,numCorrect:usesNumCorrect(multipleSelect,countChoices,numCorrect)?numCorrect:undefined,choices:choices.map(getRadioChoicePublicData)}}
364
364
 
365
- const currentVersion={major:2,minor:0};const defaultWidgetOptions$4={choices:[{content:"",id:"radio-choice-0"},{content:"",id:"radio-choice-1"},{content:"",id:"radio-choice-2"},{content:"",id:"radio-choice-3"}],randomize:false,hasNoneOfTheAbove:false,multipleSelect:false,countChoices:false,deselectEnabled:false};const radioWidgetLogic={name:"radio",version:currentVersion,defaultWidgetOptions:defaultWidgetOptions$4,getPublicWidgetOptions:getRadioPublicWidgetOptions,accessible:true};
365
+ const currentVersion={major:3,minor:0};const defaultWidgetOptions$4={choices:[{content:"",id:"radio-choice-0"},{content:"",id:"radio-choice-1"},{content:"",id:"radio-choice-2"},{content:"",id:"radio-choice-3"}],randomize:false,hasNoneOfTheAbove:false,multipleSelect:false,countChoices:false,deselectEnabled:false};const radioWidgetLogic={name:"radio",version:currentVersion,defaultWidgetOptions:defaultWidgetOptions$4,getPublicWidgetOptions:getRadioPublicWidgetOptions,accessible:true};
366
366
 
367
367
  function getSorterPublicWidgetOptions(options){return {...options,correct:sortAllButFirst(options.correct)}}function shuffleSorter(options,problemNum){const{correct}=options;const rng=seededRNG(problemNum??0);return shuffleDisplacingFirst(correct,rng)}function sortAllButFirst([first,...rest]){return [first,...rest.sort()]}function shuffleDisplacingFirst(array,rng){function isFirstElementDisplaced(shuffled){return shuffled[0]!==array[0]}return constrainedShuffle(array,rng,isFirstElementDisplaced)}
368
368