@pie-element/multiple-choice 13.1.1-next.0 → 13.2.0-next.1
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/CHANGELOG.json +1972 -0
- package/CHANGELOG.md +2704 -0
- package/LICENSE.md +5 -0
- package/PRINT.md +35 -0
- package/README.md +56 -0
- package/choice.png +0 -0
- package/configure/CHANGELOG.json +1387 -0
- package/configure/CHANGELOG.md +2054 -0
- package/{src/author/defaults.ts → configure/lib/defaults.js} +90 -55
- package/configure/lib/defaults.js.map +1 -0
- package/{src/author/index.ts → configure/lib/index.js} +55 -99
- package/configure/lib/index.js.map +1 -0
- package/configure/lib/main.js +483 -0
- package/configure/lib/main.js.map +1 -0
- package/configure/lib/utils.js +18 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +22 -0
- package/controller/CHANGELOG.json +527 -0
- package/controller/CHANGELOG.md +1394 -0
- package/{src/controller/defaults.ts → controller/lib/defaults.js} +8 -11
- package/controller/lib/defaults.js.map +1 -0
- package/{src/controller/index.ts → controller/lib/index.js} +109 -123
- package/controller/lib/index.js.map +1 -0
- package/controller/lib/utils.js +15 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +15 -0
- package/docs/config-schema.json +2993 -0
- package/docs/config-schema.json.md +2217 -0
- package/docs/demo/config.js +8 -0
- package/docs/demo/generate.js +61 -0
- package/docs/demo/index.html +1 -0
- package/docs/demo/session.js +7 -0
- package/docs/pie-schema.json +1332 -0
- package/docs/pie-schema.json.md +1015 -0
- package/lib/choice-input.js +380 -0
- package/lib/choice-input.js.map +1 -0
- package/lib/choice.js +197 -0
- package/lib/choice.js.map +1 -0
- package/lib/feedback-tick.js +134 -0
- package/lib/feedback-tick.js.map +1 -0
- package/{src/delivery/index.ts → lib/index.js} +129 -211
- package/lib/index.js.map +1 -0
- package/lib/main.js +63 -0
- package/lib/main.js.map +1 -0
- package/lib/multiple-choice.js +412 -0
- package/lib/multiple-choice.js.map +1 -0
- package/lib/print.js +94 -0
- package/lib/print.js.map +1 -0
- package/{src/delivery/session-updater.ts → lib/session-updater.js} +13 -17
- package/lib/session-updater.js.map +1 -0
- package/module/configure.js +1 -0
- package/module/controller.js +3045 -0
- package/module/demo.js +86 -0
- package/module/element.js +1 -0
- package/module/index.html +21 -0
- package/module/manifest.json +14 -0
- package/module/print-demo.js +124 -0
- package/module/print.html +18 -0
- package/module/print.js +1 -0
- package/package.json +26 -58
- package/dist/author/defaults.d.ts +0 -206
- package/dist/author/defaults.d.ts.map +0 -1
- package/dist/author/defaults.js +0 -151
- package/dist/author/index.d.ts +0 -27
- package/dist/author/index.d.ts.map +0 -1
- package/dist/author/index.js +0 -116
- package/dist/author/main.d.ts +0 -35
- package/dist/author/main.d.ts.map +0 -1
- package/dist/author/main.js +0 -290
- package/dist/author/utils.d.ts +0 -10
- package/dist/author/utils.d.ts.map +0 -1
- package/dist/author/utils.js +0 -7
- package/dist/controller/defaults.d.ts +0 -36
- package/dist/controller/defaults.d.ts.map +0 -1
- package/dist/controller/defaults.js +0 -29
- package/dist/controller/index.d.ts +0 -66
- package/dist/controller/index.d.ts.map +0 -1
- package/dist/controller/index.js +0 -124
- package/dist/controller/utils.d.ts +0 -11
- package/dist/controller/utils.d.ts.map +0 -1
- package/dist/controller/utils.js +0 -8
- package/dist/delivery/choice-input.d.ts +0 -45
- package/dist/delivery/choice-input.d.ts.map +0 -1
- package/dist/delivery/choice-input.js +0 -274
- package/dist/delivery/choice.d.ts +0 -21
- package/dist/delivery/choice.d.ts.map +0 -1
- package/dist/delivery/choice.js +0 -109
- package/dist/delivery/feedback-tick.d.ts +0 -21
- package/dist/delivery/feedback-tick.d.ts.map +0 -1
- package/dist/delivery/feedback-tick.js +0 -104
- package/dist/delivery/index.d.ts +0 -38
- package/dist/delivery/index.d.ts.map +0 -1
- package/dist/delivery/index.js +0 -217
- package/dist/delivery/main.d.ts +0 -32
- package/dist/delivery/main.d.ts.map +0 -1
- package/dist/delivery/main.js +0 -51
- package/dist/delivery/multiple-choice.d.ts +0 -63
- package/dist/delivery/multiple-choice.d.ts.map +0 -1
- package/dist/delivery/multiple-choice.js +0 -252
- package/dist/delivery/session-updater.d.ts +0 -11
- package/dist/delivery/session-updater.d.ts.map +0 -1
- package/dist/delivery/session-updater.js +0 -9
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.iife.d.ts +0 -9
- package/dist/index.iife.d.ts.map +0 -1
- package/dist/index.iife.js +0 -148
- package/dist/index.js +0 -2
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_DataView.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Hash.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_ListCache.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Map.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_MapCache.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Promise.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Set.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_SetCache.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Stack.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Symbol.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_Uint8Array.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_WeakMap.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_apply.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_arrayEach.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_arrayFilter.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_arrayLikeKeys.js +0 -15
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_arrayPush.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_arraySome.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_assignMergeValue.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_assignValue.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_assocIndexOf.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseAssign.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseAssignIn.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseAssignValue.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseClone.js +0 -57
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseCreate.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseFor.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseGetAllKeys.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseGetTag.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsArguments.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsEqual.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsEqualDeep.js +0 -30
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsMap.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsNative.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsSet.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseIsTypedArray.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseKeys.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseKeysIn.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseMerge.js +0 -19
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseMergeDeep.js +0 -31
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseRest.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseSetToString.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseTimes.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseTrim.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_baseUnary.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cacheHas.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cloneArrayBuffer.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cloneBuffer.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cloneDataView.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cloneRegExp.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cloneSymbol.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_cloneTypedArray.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_copyArray.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_copyObject.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_copySymbols.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_copySymbolsIn.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_coreJsData.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_createAssigner.js +0 -15
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_createBaseFor.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_defineProperty.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_equalArrays.js +0 -35
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_equalByTag.js +0 -35
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_equalObjects.js +0 -32
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_freeGlobal.js +0 -4
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getAllKeys.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getAllKeysIn.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getMapData.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getNative.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getPrototype.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getRawTag.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getSymbols.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getSymbolsIn.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getTag.js +0 -23
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_getValue.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_hashClear.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_hashDelete.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_hashGet.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_hashHas.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_hashSet.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_initCloneArray.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_initCloneByTag.js +0 -33
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_initCloneObject.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_isIndex.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_isIterateeCall.js +0 -12
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_isKeyable.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_isMasked.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_isPrototype.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_listCacheClear.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_listCacheDelete.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_listCacheGet.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_listCacheHas.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_listCacheSet.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheClear.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheDelete.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheGet.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheHas.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheSet.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_mapToArray.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_nativeCreate.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_nativeKeys.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_nativeKeysIn.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_nodeUtil.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_objectToString.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_overArg.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_overRest.js +0 -13
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_root.js +0 -5
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_safeGet.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_setCacheAdd.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_setCacheHas.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_setToArray.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_setToString.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_shortOut.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_stackClear.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_stackDelete.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_stackGet.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_stackHas.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_stackSet.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_toSource.js +0 -15
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/_trimmedEndIndex.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/cloneDeep.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/constant.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/debounce.js +0 -50
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/defaults.js +0 -16
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/eq.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/identity.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isArguments.js +0 -10
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isArray.js +0 -4
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isArrayLike.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isArrayLikeObject.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isBuffer.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isEmpty.js +0 -21
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isEqual.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isFunction.js +0 -11
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isLength.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isMap.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isObject.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isObjectLike.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isPlainObject.js +0 -14
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isSet.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isSymbol.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/isTypedArray.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/keys.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/keysIn.js +0 -9
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/merge.js +0 -8
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/now.js +0 -7
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/stubArray.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/stubFalse.js +0 -6
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/toNumber.js +0 -19
- package/dist/node_modules/.bun/lodash-es@4.17.23/node_modules/lodash-es/toPlainObject.js +0 -8
- package/dist/print/index.d.ts +0 -16
- package/dist/print/index.d.ts.map +0 -1
- package/dist/print/index.js +0 -44
- package/src/author/main.tsx +0 -509
- package/src/author/utils.ts +0 -25
- package/src/controller/utils.ts +0 -22
- package/src/delivery/choice-input.tsx +0 -413
- package/src/delivery/choice.tsx +0 -203
- package/src/delivery/feedback-tick.tsx +0 -156
- package/src/delivery/main.tsx +0 -85
- package/src/delivery/multiple-choice.tsx +0 -485
- package/src/index.iife.ts +0 -16
- package/src/index.ts +0 -1
- package/src/print/index.tsx +0 -112
|
@@ -1,55 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function unwrapReactInteropSymbol(maybeSymbol: any, namedExport?: string) {
|
|
28
|
-
if (!maybeSymbol) return maybeSymbol;
|
|
29
|
-
if (isRenderableReactInteropType(maybeSymbol)) return maybeSymbol;
|
|
30
|
-
if (isRenderableReactInteropType(maybeSymbol.default)) return maybeSymbol.default;
|
|
31
|
-
if (namedExport && isRenderableReactInteropType(maybeSymbol[namedExport])) {
|
|
32
|
-
return maybeSymbol[namedExport];
|
|
33
|
-
}
|
|
34
|
-
if (namedExport && isRenderableReactInteropType(maybeSymbol[namedExport]?.default)) {
|
|
35
|
-
return maybeSymbol[namedExport].default;
|
|
36
|
-
}
|
|
37
|
-
return maybeSymbol;
|
|
38
|
-
}
|
|
39
|
-
const EnableAudioAutoplayImage = unwrapReactInteropSymbol(EnableAudioAutoplayImageImport, 'EnableAudioAutoplayImage') || unwrapReactInteropSymbol(renderUi.EnableAudioAutoplayImage, 'EnableAudioAutoplayImage');
|
|
40
|
-
import * as RenderUiNamespace from '@pie-lib/render-ui';
|
|
41
|
-
const renderUiNamespaceAny = RenderUiNamespace as any;
|
|
42
|
-
const renderUiDefaultMaybe = renderUiNamespaceAny['default'];
|
|
43
|
-
const renderUi =
|
|
44
|
-
renderUiDefaultMaybe && typeof renderUiDefaultMaybe === 'object'
|
|
45
|
-
? renderUiDefaultMaybe
|
|
46
|
-
: renderUiNamespaceAny;
|
|
47
|
-
import { updateSessionValue, updateSessionMetadata } from './session-updater.js';
|
|
48
|
-
|
|
49
|
-
const log = debug('pie-ui:multiple-choice');
|
|
50
|
-
|
|
51
|
-
export const isComplete = (session, model, audioComplete, elementContext) => {
|
|
52
|
-
const { autoplayAudioEnabled, completeAudioEnabled } = model || {};
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.isComplete = exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _main = _interopRequireDefault(require("./main"));
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _client = require("react-dom/client");
|
|
12
|
+
var _lodashEs = require("lodash-es");
|
|
13
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
15
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
16
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
17
|
+
var _sessionUpdater = require("./session-updater");
|
|
18
|
+
const log = (0, _debug.default)('pie-ui:multiple-choice');
|
|
19
|
+
const isComplete = (session, model, audioComplete, elementContext) => {
|
|
20
|
+
const {
|
|
21
|
+
autoplayAudioEnabled,
|
|
22
|
+
completeAudioEnabled
|
|
23
|
+
} = model || {};
|
|
53
24
|
|
|
54
25
|
// check audio completion if audio settings are enabled and audio actually exists
|
|
55
26
|
if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {
|
|
@@ -63,73 +34,89 @@ export const isComplete = (session, model, audioComplete, elementContext) => {
|
|
|
63
34
|
}
|
|
64
35
|
}
|
|
65
36
|
}
|
|
66
|
-
|
|
67
37
|
if (!session || !session.value) {
|
|
68
38
|
return false;
|
|
69
39
|
}
|
|
70
|
-
|
|
71
|
-
|
|
40
|
+
const {
|
|
41
|
+
choiceMode,
|
|
42
|
+
minSelections = 1,
|
|
43
|
+
maxSelections
|
|
44
|
+
} = model || {};
|
|
72
45
|
const selections = session.value.length || 0;
|
|
73
|
-
|
|
74
46
|
if (choiceMode === 'radio') {
|
|
75
47
|
return !!selections;
|
|
76
48
|
}
|
|
77
|
-
|
|
78
49
|
if (selections < minSelections || selections > maxSelections) {
|
|
79
50
|
return false;
|
|
80
51
|
}
|
|
81
|
-
|
|
82
52
|
return true;
|
|
83
53
|
};
|
|
84
|
-
|
|
54
|
+
exports.isComplete = isComplete;
|
|
85
55
|
function getPlayerAttributes(element) {
|
|
86
|
-
const player =
|
|
87
|
-
element.closest('pie-player') ||
|
|
88
|
-
element.closest('pie-item-player');
|
|
89
|
-
|
|
56
|
+
const player = element.closest('pie-player') || element.closest('pie-item-player');
|
|
90
57
|
if (!player) {
|
|
91
|
-
return {
|
|
58
|
+
return {
|
|
59
|
+
baseHeadingLevel: undefined,
|
|
60
|
+
includeSrHeading: true
|
|
61
|
+
};
|
|
92
62
|
}
|
|
93
|
-
|
|
94
63
|
const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {
|
|
95
64
|
let raw = player[camelCaseName];
|
|
96
65
|
|
|
97
66
|
// fallback in case someone sets via HTML attribute manually
|
|
98
67
|
if (raw == null) {
|
|
99
|
-
raw =
|
|
100
|
-
player.getAttribute(hyphenatedName) ??
|
|
101
|
-
player.getAttribute(allLowerName);
|
|
68
|
+
raw = player.getAttribute(hyphenatedName) ?? player.getAttribute(allLowerName);
|
|
102
69
|
}
|
|
103
|
-
|
|
104
70
|
return raw;
|
|
105
71
|
};
|
|
106
|
-
|
|
107
72
|
const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');
|
|
108
73
|
const level = parseInt(levelRaw, 10);
|
|
109
74
|
const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;
|
|
110
|
-
|
|
111
75
|
const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');
|
|
112
76
|
const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
77
|
+
console.log('getPlayerAttributes', {
|
|
78
|
+
baseHeadingLevel,
|
|
79
|
+
includeSrHeading
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
baseHeadingLevel,
|
|
83
|
+
includeSrHeading
|
|
84
|
+
};
|
|
116
85
|
}
|
|
117
86
|
|
|
118
87
|
// Resolves heading attributes for a custom element, preferring explicit instance
|
|
119
88
|
// properties (set by a parent element such as EBSR) over player-level attributes.
|
|
120
89
|
function resolveHeadingProps(element) {
|
|
121
90
|
const fromPlayer = getPlayerAttributes(element);
|
|
122
|
-
|
|
123
91
|
console.log('element._baseHeadingLevel', element._baseHeadingLevel, 'element._includeSrHeading', element._includeSrHeading);
|
|
124
92
|
return {
|
|
125
93
|
baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,
|
|
126
|
-
includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading
|
|
94
|
+
includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading
|
|
127
95
|
};
|
|
128
96
|
}
|
|
129
|
-
|
|
130
|
-
export default class MultipleChoice extends HTMLElement {
|
|
97
|
+
class MultipleChoice extends HTMLElement {
|
|
131
98
|
constructor() {
|
|
132
99
|
super();
|
|
100
|
+
(0, _defineProperty2.default)(this, "_scheduleMathRender", () => {
|
|
101
|
+
if (this._mathRenderPending) return;
|
|
102
|
+
this._mathRenderPending = true;
|
|
103
|
+
requestAnimationFrame(() => {
|
|
104
|
+
if (this._mathObserver) {
|
|
105
|
+
this._mathObserver.disconnect();
|
|
106
|
+
}
|
|
107
|
+
log('render complete - render math');
|
|
108
|
+
(0, _mathRendering.renderMath)(this);
|
|
109
|
+
this._mathRenderPending = false;
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
if (this._mathObserver) {
|
|
112
|
+
this._mathObserver.observe(this, {
|
|
113
|
+
childList: true,
|
|
114
|
+
subtree: true
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}, 50);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
133
120
|
this._model = null;
|
|
134
121
|
this._session = null;
|
|
135
122
|
this._options = null; // added for ebsr print mode detection
|
|
@@ -140,111 +127,68 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
140
127
|
this._root = null;
|
|
141
128
|
this._mathObserver = null;
|
|
142
129
|
this._mathRenderPending = false;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
);
|
|
161
|
-
this.setAttribute('role', 'region');
|
|
162
|
-
this.setLangAttribute();
|
|
163
|
-
|
|
164
|
-
this._initMathObserver();
|
|
165
|
-
|
|
166
|
-
if (!this._root) {
|
|
167
|
-
this._root = createRoot(this);
|
|
168
|
-
}
|
|
169
|
-
this._root.render(element);
|
|
170
|
-
|
|
171
|
-
if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {
|
|
172
|
-
this.enableKeyboardEvents();
|
|
173
|
-
}
|
|
174
|
-
} else {
|
|
175
|
-
log('skip');
|
|
130
|
+
this._rerender = (0, _lodashEs.debounce)(() => {
|
|
131
|
+
if (this._model && this._session) {
|
|
132
|
+
var element = /*#__PURE__*/_react.default.createElement(_main.default, {
|
|
133
|
+
model: this._model,
|
|
134
|
+
session: this._session,
|
|
135
|
+
options: this._options,
|
|
136
|
+
onChoiceChanged: this._onChange.bind(this),
|
|
137
|
+
onShowCorrectToggle: this.onShowCorrectToggle.bind(this),
|
|
138
|
+
...resolveHeadingProps(this)
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
//TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender
|
|
142
|
+
this.setAttribute('aria-label', this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question');
|
|
143
|
+
this.setAttribute('role', 'region');
|
|
144
|
+
this.setLangAttribute();
|
|
145
|
+
this._initMathObserver();
|
|
146
|
+
if (!this._root) {
|
|
147
|
+
this._root = (0, _client.createRoot)(this);
|
|
176
148
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
);
|
|
181
|
-
|
|
182
|
-
this._dispatchResponseChanged = debounce(() => {
|
|
183
|
-
this.dispatchEvent(
|
|
184
|
-
new SessionChangedEvent(
|
|
185
|
-
this.tagName.toLowerCase(),
|
|
186
|
-
isComplete(this._session, this._model, this.audioComplete, this),
|
|
187
|
-
),
|
|
188
|
-
);
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
this._dispatchModelSet = debounce(
|
|
192
|
-
() => {
|
|
193
|
-
this.dispatchEvent(
|
|
194
|
-
new ModelSetEvent(
|
|
195
|
-
this.tagName.toLowerCase(),
|
|
196
|
-
isComplete(this._session, this._model, this.audioComplete, this),
|
|
197
|
-
this._model !== undefined,
|
|
198
|
-
),
|
|
199
|
-
);
|
|
200
|
-
},
|
|
201
|
-
50,
|
|
202
|
-
{ leading: false, trailing: true },
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
_scheduleMathRender: any = () => {
|
|
207
|
-
if (this._mathRenderPending) return;
|
|
208
|
-
this._mathRenderPending = true;
|
|
209
|
-
|
|
210
|
-
requestAnimationFrame(() => {
|
|
211
|
-
if (this._mathObserver) {
|
|
212
|
-
this._mathObserver.disconnect();
|
|
213
|
-
}
|
|
214
|
-
log('render complete - render math');
|
|
215
|
-
renderMath(this);
|
|
216
|
-
this._mathRenderPending = false;
|
|
217
|
-
setTimeout(() => {
|
|
218
|
-
if (this._mathObserver) {
|
|
219
|
-
this._mathObserver.observe(this, { childList: true, subtree: true });
|
|
149
|
+
this._root.render(element);
|
|
150
|
+
if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {
|
|
151
|
+
this.enableKeyboardEvents();
|
|
220
152
|
}
|
|
221
|
-
}
|
|
153
|
+
} else {
|
|
154
|
+
log('skip');
|
|
155
|
+
}
|
|
156
|
+
}, 50, {
|
|
157
|
+
leading: false,
|
|
158
|
+
trailing: true
|
|
222
159
|
});
|
|
223
|
-
|
|
224
|
-
|
|
160
|
+
this._dispatchResponseChanged = (0, _lodashEs.debounce)(() => {
|
|
161
|
+
this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this)));
|
|
162
|
+
});
|
|
163
|
+
this._dispatchModelSet = (0, _lodashEs.debounce)(() => {
|
|
164
|
+
this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this), this._model !== undefined));
|
|
165
|
+
}, 50, {
|
|
166
|
+
leading: false,
|
|
167
|
+
trailing: true
|
|
168
|
+
});
|
|
169
|
+
}
|
|
225
170
|
_initMathObserver() {
|
|
226
171
|
if (this._mathObserver) return;
|
|
227
172
|
this._mathObserver = new MutationObserver(this._scheduleMathRender);
|
|
228
|
-
this._mathObserver.observe(this, {
|
|
173
|
+
this._mathObserver.observe(this, {
|
|
174
|
+
childList: true,
|
|
175
|
+
subtree: true
|
|
176
|
+
});
|
|
229
177
|
}
|
|
230
|
-
|
|
231
178
|
_disconnectMathObserver() {
|
|
232
179
|
if (this._mathObserver) {
|
|
233
180
|
this._mathObserver.disconnect();
|
|
234
181
|
this._mathObserver = null;
|
|
235
182
|
}
|
|
236
183
|
}
|
|
237
|
-
|
|
238
184
|
onShowCorrectToggle() {
|
|
239
|
-
renderMath(this);
|
|
185
|
+
(0, _mathRendering.renderMath)(this);
|
|
240
186
|
}
|
|
241
|
-
|
|
242
187
|
setLangAttribute() {
|
|
243
188
|
const language = this._model && typeof this._model.language ? this._model.language : '';
|
|
244
189
|
const lang = language ? language.slice(0, 2) : 'en';
|
|
245
190
|
this.setAttribute('lang', lang);
|
|
246
191
|
}
|
|
247
|
-
|
|
248
192
|
set model(s) {
|
|
249
193
|
this._model = s;
|
|
250
194
|
this._rerender();
|
|
@@ -252,47 +196,38 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
252
196
|
this._audioInitialized = false;
|
|
253
197
|
this._dispatchModelSet();
|
|
254
198
|
}
|
|
255
|
-
|
|
256
199
|
get session() {
|
|
257
200
|
return this._session;
|
|
258
201
|
}
|
|
259
|
-
|
|
260
202
|
get options() {
|
|
261
203
|
return this._options;
|
|
262
204
|
}
|
|
263
|
-
|
|
264
205
|
set options(o) {
|
|
265
206
|
this._options = o;
|
|
266
207
|
this._rerender();
|
|
267
208
|
}
|
|
268
|
-
|
|
269
209
|
set baseHeadingLevel(level) {
|
|
270
210
|
this._baseHeadingLevel = level;
|
|
271
211
|
this._rerender();
|
|
272
212
|
}
|
|
273
|
-
|
|
274
213
|
set includeSrHeading(value) {
|
|
275
214
|
this._includeSrHeading = value;
|
|
276
215
|
this._rerender();
|
|
277
216
|
}
|
|
278
|
-
|
|
279
217
|
set session(s) {
|
|
280
218
|
this._session = s;
|
|
281
219
|
this._rerender();
|
|
282
220
|
//TODO: remove this session-changed should only be emit on user change
|
|
283
221
|
this._dispatchResponseChanged();
|
|
284
222
|
}
|
|
285
|
-
|
|
286
223
|
_onChange(data) {
|
|
287
|
-
updateSessionValue(this._session, this._model.choiceMode, data);
|
|
224
|
+
(0, _sessionUpdater.updateSessionValue)(this._session, this._model.choiceMode, data);
|
|
288
225
|
this._dispatchResponseChanged();
|
|
289
226
|
this._rerender();
|
|
290
227
|
}
|
|
291
|
-
|
|
292
228
|
_createAudioInfoToast() {
|
|
293
229
|
const info = document.createElement('div');
|
|
294
230
|
info.id = 'play-audio-info';
|
|
295
|
-
|
|
296
231
|
Object.assign(info.style, {
|
|
297
232
|
position: 'absolute',
|
|
298
233
|
top: 0,
|
|
@@ -303,19 +238,16 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
303
238
|
alignItems: 'center',
|
|
304
239
|
background: 'white',
|
|
305
240
|
zIndex: '1000',
|
|
306
|
-
cursor: 'pointer'
|
|
241
|
+
cursor: 'pointer'
|
|
307
242
|
});
|
|
308
|
-
|
|
309
243
|
const img = document.createElement('img');
|
|
310
|
-
img.src = EnableAudioAutoplayImage;
|
|
244
|
+
img.src = _renderUi.EnableAudioAutoplayImage;
|
|
311
245
|
img.alt = 'Click anywhere to enable audio autoplay';
|
|
312
246
|
img.width = 500;
|
|
313
247
|
img.height = 300;
|
|
314
|
-
|
|
315
248
|
info.appendChild(img);
|
|
316
249
|
return info;
|
|
317
250
|
}
|
|
318
|
-
|
|
319
251
|
connectedCallback() {
|
|
320
252
|
this._initMathObserver();
|
|
321
253
|
this._initPlayerObserver();
|
|
@@ -325,18 +257,15 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
325
257
|
// while other browsers will not have the autoplay attribute and will need a user interaction to play the audio
|
|
326
258
|
// This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox
|
|
327
259
|
const observer = new MutationObserver((mutationsList, observer) => {
|
|
328
|
-
mutationsList.forEach(
|
|
260
|
+
mutationsList.forEach(mutation => {
|
|
329
261
|
if (mutation.type === 'childList') {
|
|
330
262
|
if (this._audioInitialized) return;
|
|
331
|
-
|
|
332
263
|
const audio = this.querySelector('audio');
|
|
333
264
|
const isInsidePrompt = audio && audio.closest('#preview-prompt');
|
|
334
|
-
|
|
335
265
|
if (!this._model) return;
|
|
336
266
|
if (!this._model.autoplayAudioEnabled) return;
|
|
337
267
|
if (audio && !isInsidePrompt) return;
|
|
338
268
|
if (!audio) return;
|
|
339
|
-
|
|
340
269
|
const info = this._createAudioInfoToast();
|
|
341
270
|
const container = this.querySelector('#main-container');
|
|
342
271
|
const enableAudio = () => {
|
|
@@ -344,7 +273,6 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
344
273
|
audio.play();
|
|
345
274
|
container.removeChild(info);
|
|
346
275
|
}
|
|
347
|
-
|
|
348
276
|
document.removeEventListener('click', enableAudio);
|
|
349
277
|
};
|
|
350
278
|
|
|
@@ -362,26 +290,26 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
362
290
|
|
|
363
291
|
// we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering
|
|
364
292
|
const handlePlaying = () => {
|
|
365
|
-
updateSessionMetadata(this._session, {
|
|
366
|
-
|
|
293
|
+
(0, _sessionUpdater.updateSessionMetadata)(this._session, {
|
|
294
|
+
audioStartTime: new Date().getTime()
|
|
295
|
+
});
|
|
367
296
|
const info = this.querySelector('#play-audio-info');
|
|
368
297
|
if (info) {
|
|
369
298
|
container.removeChild(info);
|
|
370
299
|
}
|
|
371
|
-
|
|
372
300
|
audio.removeEventListener('playing', handlePlaying);
|
|
373
301
|
};
|
|
374
|
-
|
|
375
302
|
audio.addEventListener('playing', handlePlaying);
|
|
376
303
|
|
|
377
304
|
// we need to listen for the ended event to update the isComplete state
|
|
378
305
|
const handleEnded = () => {
|
|
379
|
-
updateSessionMetadata(this._session, {
|
|
306
|
+
(0, _sessionUpdater.updateSessionMetadata)(this._session, {
|
|
307
|
+
audioEndTime: new Date().getTime()
|
|
308
|
+
});
|
|
380
309
|
this.audioComplete = true;
|
|
381
310
|
this._dispatchResponseChanged();
|
|
382
311
|
audio.removeEventListener('ended', handleEnded);
|
|
383
312
|
};
|
|
384
|
-
|
|
385
313
|
audio.addEventListener('ended', handleEnded);
|
|
386
314
|
|
|
387
315
|
// store references to remove later
|
|
@@ -391,42 +319,38 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
391
319
|
this._enableAudio = enableAudio;
|
|
392
320
|
// set to true to prevent multiple initializations
|
|
393
321
|
this._audioInitialized = true;
|
|
394
|
-
|
|
395
322
|
observer.disconnect();
|
|
396
323
|
}
|
|
397
324
|
});
|
|
398
325
|
});
|
|
399
|
-
|
|
400
|
-
|
|
326
|
+
observer.observe(this, {
|
|
327
|
+
childList: true,
|
|
328
|
+
subtree: true
|
|
329
|
+
});
|
|
401
330
|
}
|
|
402
|
-
|
|
403
331
|
enableKeyboardEvents() {
|
|
404
332
|
if (!this._keyboardEventsEnabled) {
|
|
405
333
|
window.addEventListener('keydown', this._boundHandleKeyDown);
|
|
406
334
|
this._keyboardEventsEnabled = true;
|
|
407
335
|
}
|
|
408
336
|
}
|
|
409
|
-
|
|
410
337
|
_initPlayerObserver() {
|
|
411
338
|
const player = this.closest('pie-player') || this.closest('pie-item-player');
|
|
412
339
|
if (!player) return;
|
|
413
|
-
|
|
414
340
|
this._playerObserver = new MutationObserver(() => {
|
|
415
341
|
this._rerender();
|
|
416
342
|
});
|
|
417
343
|
this._playerObserver.observe(player, {
|
|
418
344
|
attributes: true,
|
|
419
|
-
attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading']
|
|
345
|
+
attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading']
|
|
420
346
|
});
|
|
421
347
|
}
|
|
422
|
-
|
|
423
348
|
_disconnectPlayerObserver() {
|
|
424
349
|
if (this._playerObserver) {
|
|
425
350
|
this._playerObserver.disconnect();
|
|
426
351
|
this._playerObserver = null;
|
|
427
352
|
}
|
|
428
353
|
}
|
|
429
|
-
|
|
430
354
|
disconnectedCallback() {
|
|
431
355
|
this._disconnectMathObserver();
|
|
432
356
|
this._disconnectPlayerObserver();
|
|
@@ -434,15 +358,12 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
434
358
|
window.removeEventListener('keydown', this._boundHandleKeyDown);
|
|
435
359
|
this._keyboardEventsEnabled = false;
|
|
436
360
|
}
|
|
437
|
-
|
|
438
361
|
document.removeEventListener('click', this._enableAudio);
|
|
439
|
-
|
|
440
362
|
if (this._audio) {
|
|
441
363
|
this._audio.removeEventListener('playing', this._handlePlaying);
|
|
442
364
|
this._audio.removeEventListener('ended', this._handleEnded);
|
|
443
365
|
this._audio = null;
|
|
444
366
|
}
|
|
445
|
-
|
|
446
367
|
if (this._root) {
|
|
447
368
|
this._root.unmount();
|
|
448
369
|
}
|
|
@@ -457,33 +378,30 @@ export default class MultipleChoice extends HTMLElement {
|
|
|
457
378
|
if (!this._model || !this._session) {
|
|
458
379
|
return;
|
|
459
380
|
}
|
|
460
|
-
|
|
461
|
-
|
|
381
|
+
const {
|
|
382
|
+
mode
|
|
383
|
+
} = this._model;
|
|
462
384
|
if (mode !== 'gather') {
|
|
463
385
|
return;
|
|
464
386
|
}
|
|
465
|
-
|
|
466
|
-
const keyToIndex = (key) => {
|
|
387
|
+
const keyToIndex = key => {
|
|
467
388
|
const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;
|
|
468
389
|
const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;
|
|
469
390
|
return numOffset >= 0 ? numOffset : letterOffset;
|
|
470
391
|
};
|
|
471
|
-
|
|
472
392
|
const choiceIndex = keyToIndex(event.key);
|
|
473
|
-
|
|
474
393
|
if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {
|
|
475
394
|
return;
|
|
476
395
|
}
|
|
477
|
-
|
|
478
396
|
const currentValue = this._session.value || [];
|
|
479
397
|
const choiceId = this._model.choices[choiceIndex].value;
|
|
480
|
-
|
|
481
398
|
const newValue = {
|
|
482
399
|
value: choiceId,
|
|
483
400
|
selected: !currentValue.includes(choiceId),
|
|
484
|
-
selector: 'Keyboard'
|
|
401
|
+
selector: 'Keyboard'
|
|
485
402
|
};
|
|
486
|
-
|
|
487
403
|
this._onChange(newValue);
|
|
488
404
|
}
|
|
489
405
|
}
|
|
406
|
+
exports.default = MultipleChoice;
|
|
407
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_main","_interopRequireDefault","require","_react","_client","_lodashEs","_debug","_piePlayerEvents","_mathRendering","_renderUi","_sessionUpdater","log","debug","isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","choiceMode","minSelections","maxSelections","selections","length","exports","getPlayerAttributes","element","player","baseHeadingLevel","undefined","includeSrHeading","getRaw","camelCaseName","hyphenatedName","allLowerName","raw","getAttribute","levelRaw","level","parseInt","Number","isFinite","srRaw","console","resolveHeadingProps","fromPlayer","_baseHeadingLevel","_includeSrHeading","MultipleChoice","HTMLElement","constructor","_defineProperty2","default","_mathRenderPending","requestAnimationFrame","_mathObserver","disconnect","renderMath","setTimeout","observe","childList","subtree","_model","_session","_options","_boundHandleKeyDown","handleKeyDown","bind","_keyboardEventsEnabled","_audioInitialized","_root","_rerender","debounce","React","createElement","Main","options","onChoiceChanged","_onChange","onShowCorrectToggle","setAttribute","setLangAttribute","_initMathObserver","createRoot","render","keyboardEventsEnabled","enableKeyboardEvents","leading","trailing","_dispatchResponseChanged","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_dispatchModelSet","ModelSetEvent","MutationObserver","_scheduleMathRender","_disconnectMathObserver","language","lang","slice","s","o","data","updateSessionValue","_createAudioInfoToast","info","document","id","Object","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","connectedCallback","_initPlayerObserver","observer","mutationsList","forEach","mutation","type","container","enableAudio","play","removeChild","removeEventListener","paused","addEventListener","handlePlaying","updateSessionMetadata","audioStartTime","Date","getTime","handleEnded","audioEndTime","_audio","_handlePlaying","_handleEnded","_enableAudio","window","_playerObserver","attributes","attributeFilter","_disconnectPlayerObserver","disconnectedCallback","unmount","event","mode","keyToIndex","key","numOffset","letterOffset","test","charCodeAt","choiceIndex","choices","currentValue","choiceId","newValue","selected","includes","selector"],"sources":["../src/index.js"],"sourcesContent":["import Main from './main';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { debounce } from 'lodash-es';\nimport debug from 'debug';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { updateSessionValue, updateSessionMetadata } from './session-updater';\n\nconst log = debug('pie-ui:multiple-choice');\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n // check audio completion if audio settings are enabled and audio actually exists\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n const { choiceMode, minSelections = 1, maxSelections } = model || {};\n const selections = session.value.length || 0;\n\n if (choiceMode === 'radio') {\n return !!selections;\n }\n\n if (selections < minSelections || selections > maxSelections) {\n return false;\n }\n\n return true;\n};\n\nfunction getPlayerAttributes(element) {\n const player =\n element.closest('pie-player') ||\n element.closest('pie-item-player');\n\n if (!player) {\n return { baseHeadingLevel: undefined, includeSrHeading: true };\n }\n\n const getRaw = (camelCaseName, hyphenatedName, allLowerName) => {\n let raw = player[camelCaseName];\n\n // fallback in case someone sets via HTML attribute manually\n if (raw == null) {\n raw =\n player.getAttribute(hyphenatedName) ??\n player.getAttribute(allLowerName);\n }\n\n return raw;\n };\n\n const levelRaw = getRaw('baseHeadingLevel', 'base-heading-level', 'baseheadinglevel');\n const level = parseInt(levelRaw, 10);\n const baseHeadingLevel = Number.isFinite(level) && level >= 1 && level <= 6 ? level : undefined;\n\n const srRaw = getRaw('includeSrHeading', 'include-sr-heading', 'includesrheading');\n const includeSrHeading = srRaw == null ? true : srRaw !== false && srRaw !== 'false';\n\n console.log('getPlayerAttributes', { baseHeadingLevel, includeSrHeading });\n return { baseHeadingLevel, includeSrHeading };\n}\n\n// Resolves heading attributes for a custom element, preferring explicit instance\n// properties (set by a parent element such as EBSR) over player-level attributes.\nfunction resolveHeadingProps(element) {\n const fromPlayer = getPlayerAttributes(element);\n\n console.log('element._baseHeadingLevel', element._baseHeadingLevel, 'element._includeSrHeading', element._includeSrHeading);\n return {\n baseHeadingLevel: element._baseHeadingLevel !== undefined ? element._baseHeadingLevel : fromPlayer.baseHeadingLevel,\n includeSrHeading: element._includeSrHeading !== undefined ? element._includeSrHeading : fromPlayer.includeSrHeading,\n };\n}\n\nexport default class MultipleChoice extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._options = null; // added for ebsr print mode detection\n this.audioComplete = false;\n this._boundHandleKeyDown = this.handleKeyDown.bind(this);\n this._keyboardEventsEnabled = false;\n this._audioInitialized = false;\n this._root = null;\n this._mathObserver = null;\n this._mathRenderPending = false;\n\n this._rerender = debounce(\n () => {\n if (this._model && this._session) {\n var element = React.createElement(Main, {\n model: this._model,\n session: this._session,\n options: this._options,\n onChoiceChanged: this._onChange.bind(this),\n onShowCorrectToggle: this.onShowCorrectToggle.bind(this),\n ...resolveHeadingProps(this),\n });\n\n //TODO: aria-label is set in the _rerender because we need to change it when the model.choiceMode is updated. Consider revisiting the placement of the aria-label setting in the _rerender\n this.setAttribute(\n 'aria-label',\n this._model.choiceMode === 'radio' ? 'Multiple Choice Question' : 'Multiple Correct Answer Question',\n );\n this.setAttribute('role', 'region');\n this.setLangAttribute();\n\n this._initMathObserver();\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(element);\n\n if (this._model.keyboardEventsEnabled === true && !this._keyboardEventsEnabled) {\n this.enableKeyboardEvents();\n }\n } else {\n log('skip');\n }\n },\n 50,\n { leading: false, trailing: true },\n );\n\n this._dispatchResponseChanged = debounce(() => {\n this.dispatchEvent(\n new SessionChangedEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n ),\n );\n });\n\n this._dispatchModelSet = debounce(\n () => {\n this.dispatchEvent(\n new ModelSetEvent(\n this.tagName.toLowerCase(),\n isComplete(this._session, this._model, this.audioComplete, this),\n this._model !== undefined,\n ),\n );\n },\n 50,\n { leading: false, trailing: true },\n );\n }\n\n _scheduleMathRender = () => {\n if (this._mathRenderPending) return;\n this._mathRenderPending = true;\n\n requestAnimationFrame(() => {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n }\n log('render complete - render math');\n renderMath(this);\n this._mathRenderPending = false;\n setTimeout(() => {\n if (this._mathObserver) {\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n }, 50);\n });\n };\n\n _initMathObserver() {\n if (this._mathObserver) return;\n this._mathObserver = new MutationObserver(this._scheduleMathRender);\n this._mathObserver.observe(this, { childList: true, subtree: true });\n }\n\n _disconnectMathObserver() {\n if (this._mathObserver) {\n this._mathObserver.disconnect();\n this._mathObserver = null;\n }\n }\n\n onShowCorrectToggle() {\n renderMath(this);\n }\n\n setLangAttribute() {\n const language = this._model && typeof this._model.language ? this._model.language : '';\n const lang = language ? language.slice(0, 2) : 'en';\n this.setAttribute('lang', lang);\n }\n\n set model(s) {\n this._model = s;\n this._rerender();\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._dispatchModelSet();\n }\n\n get session() {\n return this._session;\n }\n\n get options() {\n return this._options;\n }\n\n set options(o) {\n this._options = o;\n this._rerender();\n }\n\n set baseHeadingLevel(level) {\n this._baseHeadingLevel = level;\n this._rerender();\n }\n\n set includeSrHeading(value) {\n this._includeSrHeading = value;\n this._rerender();\n }\n\n set session(s) {\n this._session = s;\n this._rerender();\n //TODO: remove this session-changed should only be emit on user change\n this._dispatchResponseChanged();\n }\n\n _onChange(data) {\n updateSessionValue(this._session, this._model.choiceMode, data);\n this._dispatchResponseChanged();\n this._rerender();\n }\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._initMathObserver();\n this._initPlayerObserver();\n this._rerender();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n updateSessionMetadata(this._session, { audioStartTime: new Date().getTime() });\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n updateSessionMetadata(this._session, { audioEndTime: new Date().getTime() });\n this.audioComplete = true;\n this._dispatchResponseChanged();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n enableKeyboardEvents() {\n if (!this._keyboardEventsEnabled) {\n window.addEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = true;\n }\n }\n\n _initPlayerObserver() {\n const player = this.closest('pie-player') || this.closest('pie-item-player');\n if (!player) return;\n\n this._playerObserver = new MutationObserver(() => {\n this._rerender();\n });\n this._playerObserver.observe(player, {\n attributes: true,\n attributeFilter: ['base-heading-level', 'baseheadinglevel', 'include-sr-heading', 'includesrheading'],\n });\n }\n\n _disconnectPlayerObserver() {\n if (this._playerObserver) {\n this._playerObserver.disconnect();\n this._playerObserver = null;\n }\n }\n\n disconnectedCallback() {\n this._disconnectMathObserver();\n this._disconnectPlayerObserver();\n if (this._keyboardEventsEnabled) {\n window.removeEventListener('keydown', this._boundHandleKeyDown);\n this._keyboardEventsEnabled = false;\n }\n\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n\n if (this._root) {\n this._root.unmount();\n }\n }\n\n /**\n * Handles global keyboard events for selecting or toggling multiple-choice answers.\n * Maps keys (1-9, 0, a-j, A-J) to choices and updates the session state accordingly.\n * Ensures valid key presses toggle or select the appropriate choice based on the model.\n */\n handleKeyDown(event) {\n if (!this._model || !this._session) {\n return;\n }\n\n const { mode } = this._model;\n if (mode !== 'gather') {\n return;\n }\n\n const keyToIndex = (key) => {\n const numOffset = key >= '1' && key <= '9' ? key - '1' : key === '0' ? 9 : -1;\n const letterOffset = /^[a-jA-J]$/.test(key) ? key.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0) : -1;\n return numOffset >= 0 ? numOffset : letterOffset;\n };\n\n const choiceIndex = keyToIndex(event.key);\n\n if (choiceIndex === undefined || choiceIndex <= -1 || choiceIndex >= this._model.choices?.length) {\n return;\n }\n\n const currentValue = this._session.value || [];\n const choiceId = this._model.choices[choiceIndex].value;\n\n const newValue = {\n value: choiceId,\n selected: !currentValue.includes(choiceId),\n selector: 'Keyboard',\n };\n\n this._onChange(newValue);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|