@vue-skuilder/platform-ui 0.2.36 → 0.2.37
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/assets/{About-74htcNLT.js → About-BkMENQtD.js} +2 -2
- package/dist/assets/{About-74htcNLT.js.map → About-BkMENQtD.js.map} +1 -1
- package/dist/assets/{AdminDashboard-B00qno2M.js → AdminDashboard-5R-xgY-M.js} +2 -2
- package/dist/assets/{AdminDashboard-B00qno2M.js.map → AdminDashboard-5R-xgY-M.js.map} +1 -1
- package/dist/assets/{AdminLearner-SJNtSyJ_.js → AdminLearner-Br10DFSt.js} +2 -2
- package/dist/assets/{AdminLearner-SJNtSyJ_.js.map → AdminLearner-Br10DFSt.js.map} +1 -1
- package/dist/assets/BaseUserDB-BRgNfdWx.js +1 -0
- package/dist/assets/{ClassroomCtrlPanel-BSAG3h8B.js → ClassroomCtrlPanel-DQJQ0B7M.js} +2 -2
- package/dist/assets/{ClassroomCtrlPanel-BSAG3h8B.js.map → ClassroomCtrlPanel-DQJQ0B7M.js.map} +1 -1
- package/dist/assets/{Classrooms-DXNEbtsM.js → Classrooms-B5tQPFEE.js} +2 -2
- package/dist/assets/{Classrooms-DXNEbtsM.js.map → Classrooms-B5tQPFEE.js.map} +1 -1
- package/dist/assets/CouchDBSyncStrategy-0EgX8AAz.js +1 -0
- package/dist/assets/{CourseRouter-CsVa_92r.js → CourseRouter-W6S7DpZN.js} +2 -2
- package/dist/assets/{CourseRouter-CsVa_92r.js.map → CourseRouter-W6S7DpZN.js.map} +1 -1
- package/dist/assets/CourseSyncService-CrHp0wsl.js +1 -0
- package/dist/assets/{CourseWare-BTFRjgBR-DBp_fIwH.js → CourseWare-BTFRjgBR-lpqcYpAW.js} +3 -3
- package/dist/assets/{CourseWare-BTFRjgBR-DBp_fIwH.js.map → CourseWare-BTFRjgBR-lpqcYpAW.js.map} +1 -1
- package/dist/assets/{Courses-CB6GGtdm.js → Courses-TzwgFdwn.js} +2 -2
- package/dist/assets/{Courses-CB6GGtdm.js.map → Courses-TzwgFdwn.js.map} +1 -1
- package/dist/assets/{EloModeration-DUBgs-Vh.js → EloModeration-BCz7VKla.js} +2 -2
- package/dist/assets/{EloModeration-DUBgs-Vh.js.map → EloModeration-BCz7VKla.js.map} +1 -1
- package/dist/assets/{JoinCode-BBvYapCA.js → JoinCode-CEeZkFOp.js} +2 -2
- package/dist/assets/{JoinCode-BBvYapCA.js.map → JoinCode-CEeZkFOp.js.map} +1 -1
- package/dist/assets/{NewCourseDialog-DBgFVnt3.js → NewCourseDialog-DNzvvz_H.js} +2 -2
- package/dist/assets/{NewCourseDialog-DBgFVnt3.js.map → NewCourseDialog-DNzvvz_H.js.map} +1 -1
- package/dist/assets/{PipelineDebugger-BHaqzqZw.js → PipelineDebugger-DhnKlMgD.js} +3 -3
- package/dist/assets/{PipelineDebugger-BHaqzqZw.js.map → PipelineDebugger-DhnKlMgD.js.map} +1 -1
- package/dist/assets/PouchDataLayerProvider-CAuhZYIc.js +2 -0
- package/dist/assets/PouchDataLayerProvider-CAuhZYIc.js.map +1 -0
- package/dist/assets/{ReleaseNotes-Dg6mLL1C.js → ReleaseNotes-Bvw24QDI.js} +2 -2
- package/dist/assets/{ReleaseNotes-Dg6mLL1C.js.map → ReleaseNotes-Bvw24QDI.js.map} +1 -1
- package/dist/assets/{RequestPasswordReset-CcFMTnTc.js → RequestPasswordReset-YOq1JJ_o.js} +2 -2
- package/dist/assets/{RequestPasswordReset-CcFMTnTc.js.map → RequestPasswordReset-YOq1JJ_o.js.map} +1 -1
- package/dist/assets/{ResetPassword-Dw_cBJU2.js → ResetPassword-CQCb3B_Z.js} +2 -2
- package/dist/assets/{ResetPassword-Dw_cBJU2.js.map → ResetPassword-CQCb3B_Z.js.map} +1 -1
- package/dist/assets/{StaticDataLayerProvider-CtgU3VBh.js → StaticDataLayerProvider-DbGLKpb1.js} +2 -2
- package/dist/assets/{StaticDataLayerProvider-CtgU3VBh.js.map → StaticDataLayerProvider-DbGLKpb1.js.map} +1 -1
- package/dist/assets/{Study-DDsGQCTJ.js → Study-D2mXR27s.js} +2 -2
- package/dist/assets/{Study-DDsGQCTJ.js.map → Study-D2mXR27s.js.map} +1 -1
- package/dist/assets/{TagInformation-DBLoXA2a.js → TagInformation-DHw5jRNt.js} +2 -2
- package/dist/assets/{TagInformation-DBLoXA2a.js.map → TagInformation-DHw5jRNt.js.map} +1 -1
- package/dist/assets/{User-DfXUXjFb.js → User-C0xEcKaU.js} +2 -2
- package/dist/assets/{User-DfXUXjFb.js.map → User-C0xEcKaU.js.map} +1 -1
- package/dist/assets/{UserDBDebugger-DPqlc4O_.js → UserDBDebugger-BXLoT28w.js} +2 -2
- package/dist/assets/{UserDBDebugger-DPqlc4O_.js.map → UserDBDebugger-BXLoT28w.js.map} +1 -1
- package/dist/assets/UserDBDebugger-DHONc_-t.js +1 -0
- package/dist/assets/{UserStats-C04YVYv7.js → UserStats-Blm_daoT.js} +2 -2
- package/dist/assets/{UserStats-C04YVYv7.js.map → UserStats-Blm_daoT.js.map} +1 -1
- package/dist/assets/{VerifyEmail-Y05BSR57.js → VerifyEmail-DTwA6sFY.js} +2 -2
- package/dist/assets/{VerifyEmail-Y05BSR57.js.map → VerifyEmail-DTwA6sFY.js.map} +1 -1
- package/dist/assets/{admin-DcFjvYJw.js → admin-hzNSXp0o.js} +2 -2
- package/dist/assets/{admin-DcFjvYJw.js.map → admin-hzNSXp0o.js.map} +1 -1
- package/dist/assets/{chess-E2uOAyQS-BZi0vihz.js → chess-E2uOAyQS-DDTgqZMJ.js} +2 -2
- package/dist/assets/{chess-E2uOAyQS-BZi0vihz.js.map → chess-E2uOAyQS-DDTgqZMJ.js.map} +1 -1
- package/dist/assets/chess-Lfm7Fsvs-RaFhFnIh.js +1 -0
- package/dist/assets/{contentSource-DwznMSMs.js → contentSource-FGhM_ge8.js} +8 -8
- package/dist/assets/contentSource-FGhM_ge8.js.map +1 -0
- package/dist/assets/dist-5Z6GjIpR.js +1 -0
- package/dist/assets/{dist-CAHkbl3M.js → dist-BJLhyG8r.js} +3 -3
- package/dist/assets/{dist-CAHkbl3M.js.map → dist-BJLhyG8r.js.map} +1 -1
- package/dist/assets/dist-C5-_1l75.js +1 -0
- package/dist/assets/{dist-BsRvt0gH.js → dist-C8EQUxWW.js} +3 -3
- package/dist/assets/{dist-BsRvt0gH.js.map → dist-C8EQUxWW.js.map} +1 -1
- package/dist/assets/{dist-Dp6eBE2S.js → dist-DGbpjpKB.js} +2 -2
- package/dist/assets/{dist-Dp6eBE2S.js.map → dist-DGbpjpKB.js.map} +1 -1
- package/dist/assets/dist-M4o-5YLq.js +1 -0
- package/dist/assets/edit-ui.es-BT7ftsox.js +1 -0
- package/dist/assets/{edit-ui.es-UaQFL_My.js → edit-ui.es-DJgikaS7.js} +2 -2
- package/dist/assets/{edit-ui.es-UaQFL_My.js.map → edit-ui.es-DJgikaS7.js.map} +1 -1
- package/dist/assets/elo-5Z2qkwtw.js +1 -0
- package/dist/assets/{elo-COgu6Hu5.js → elo-C4ZdbMIJ.js} +2 -2
- package/dist/assets/{elo-COgu6Hu5.js.map → elo-C4ZdbMIJ.js.map} +1 -1
- package/dist/assets/{eloDistance-BV7vfiK5.js → eloDistance-CRxxdYPJ.js} +2 -2
- package/dist/assets/{eloDistance-BV7vfiK5.js.map → eloDistance-CRxxdYPJ.js.map} +1 -1
- package/dist/assets/eloDistance-DF4pmPOI.js +1 -0
- package/dist/assets/{french-Dk7YG8Td-CD7Hms2j.js → french-Dk7YG8Td-C2awfrzV.js} +2 -2
- package/dist/assets/{french-Dk7YG8Td-CD7Hms2j.js.map → french-Dk7YG8Td-C2awfrzV.js.map} +1 -1
- package/dist/assets/french-evUMlbbq-4izQyIk4.js +1 -0
- package/dist/assets/{hierarchyDefinition-DLC5DjaA.js → hierarchyDefinition-BbqnGEfR.js} +2 -2
- package/dist/assets/{hierarchyDefinition-DLC5DjaA.js.map → hierarchyDefinition-BbqnGEfR.js.map} +1 -1
- package/dist/assets/{index-CK-rfSIx.js → index-BRaeVAZb.js} +4 -4
- package/dist/assets/{index-CK-rfSIx.js.map → index-BRaeVAZb.js.map} +1 -1
- package/dist/assets/{interferenceMitigator-D78KgOxz.js → interferenceMitigator-BtAQm-0d.js} +2 -2
- package/dist/assets/{interferenceMitigator-D78KgOxz.js.map → interferenceMitigator-BtAQm-0d.js.map} +1 -1
- package/dist/assets/math-DR3fXDcX-Bj6dcLDF.js +1 -0
- package/dist/assets/{math-D_8HiEQR-E4QDLrWp.js → math-D_8HiEQR-CQynsoTm.js} +2 -2
- package/dist/assets/{math-D_8HiEQR-E4QDLrWp.js.map → math-D_8HiEQR-CQynsoTm.js.map} +1 -1
- package/dist/assets/piano-BN5Btq91-onBUnVgA.js +1 -0
- package/dist/assets/{piano-DF1g6yaX-Ck3BH5EK.js → piano-DF1g6yaX-vXbP1jX_.js} +2 -2
- package/dist/assets/{piano-DF1g6yaX-Ck3BH5EK.js.map → piano-DF1g6yaX-vXbP1jX_.js.map} +1 -1
- package/dist/assets/{pitch-CgGJFkZ1-Dd0LzmEe.js → pitch-CgGJFkZ1-DVzOpIVa.js} +2 -2
- package/dist/assets/{pitch-CgGJFkZ1-Dd0LzmEe.js.map → pitch-CgGJFkZ1-DVzOpIVa.js.map} +1 -1
- package/dist/assets/pitch-Dn0iNqiS-L2k4d66s.js +1 -0
- package/dist/assets/prescribed-Cjutx2ct.js +2 -0
- package/dist/assets/prescribed-Cjutx2ct.js.map +1 -0
- package/dist/assets/{relativePriority-DwPMECAp.js → relativePriority-fx6BMJm9.js} +2 -2
- package/dist/assets/{relativePriority-DwPMECAp.js.map → relativePriority-fx6BMJm9.js.map} +1 -1
- package/dist/assets/{server-CqR7xtQy.js → server-CUqWbXPL.js} +2 -2
- package/dist/assets/{server-CqR7xtQy.js.map → server-CUqWbXPL.js.map} +1 -1
- package/dist/assets/{sightsing-BFQ7HRig-DV69ELZf.js → sightsing-BFQ7HRig-CYuNcd8z.js} +2 -2
- package/dist/assets/{sightsing-BFQ7HRig-DV69ELZf.js.map → sightsing-BFQ7HRig-CYuNcd8z.js.map} +1 -1
- package/dist/assets/sightsing-CJX3k0Fd-C4-zGBSZ.js +1 -0
- package/dist/assets/{srs-DOsG9Y-i.js → srs-B3R2C3TU.js} +2 -2
- package/dist/assets/{srs-DOsG9Y-i.js.map → srs-B3R2C3TU.js.map} +1 -1
- package/dist/assets/srs-BD4FD2rw.js +1 -0
- package/dist/assets/{typing-BevtfWlp-CvStu5BY.js → typing-BevtfWlp-C0NbuTKI.js} +2 -2
- package/dist/assets/{typing-BevtfWlp-CvStu5BY.js.map → typing-BevtfWlp-C0NbuTKI.js.map} +1 -1
- package/dist/assets/typing-k-ojjO7G-gZjZ4YQx.js +1 -0
- package/dist/assets/{userDBKeys-DYLGKnVC.js → userDBKeys-3SQjNVdK.js} +4 -4
- package/dist/assets/{userDBKeys-DYLGKnVC.js.map → userDBKeys-3SQjNVdK.js.map} +1 -1
- package/dist/assets/{userTagPreference-cZCPqadC.js → userTagPreference-B23ZX5J4.js} +2 -2
- package/dist/assets/{userTagPreference-cZCPqadC.js.map → userTagPreference-B23ZX5J4.js.map} +1 -1
- package/dist/assets/validators-CnxSFY0I.js +2 -0
- package/dist/assets/{validators-lpYAHmRR.js.map → validators-CnxSFY0I.js.map} +1 -1
- package/dist/assets/{word-work-BOnRlZgd-CCGZdwyf.js → word-work-BOnRlZgd-CsMkeNdI.js} +2 -2
- package/dist/assets/{word-work-BOnRlZgd-CCGZdwyf.js.map → word-work-BOnRlZgd-CsMkeNdI.js.map} +1 -1
- package/dist/assets/word-work-Dd6tIKrt-WI45cKxO.js +1 -0
- package/dist/index.html +9 -9
- package/dist/sw.js +1 -1
- package/dist/sw.js.map +1 -1
- package/package.json +7 -7
- package/dist/assets/BaseUserDB-CV2ZPZOR.js +0 -1
- package/dist/assets/CouchDBSyncStrategy-BjM7ROXC.js +0 -1
- package/dist/assets/CourseSyncService-CPU_Ll1h.js +0 -1
- package/dist/assets/PouchDataLayerProvider-DxsnSIKd.js +0 -2
- package/dist/assets/PouchDataLayerProvider-DxsnSIKd.js.map +0 -1
- package/dist/assets/UserDBDebugger-xmycWjck.js +0 -1
- package/dist/assets/chess-Lfm7Fsvs-DgN08Qx9.js +0 -1
- package/dist/assets/contentSource-DwznMSMs.js.map +0 -1
- package/dist/assets/dist-BcwaOf54.js +0 -1
- package/dist/assets/dist-CgW7D_Gh.js +0 -1
- package/dist/assets/dist-Dnehy0sn.js +0 -1
- package/dist/assets/edit-ui.es-BWqvElsJ.js +0 -1
- package/dist/assets/elo-Cwa8a3Yo.js +0 -1
- package/dist/assets/eloDistance-MReQeAuj.js +0 -1
- package/dist/assets/french-evUMlbbq-nGCjilG6.js +0 -1
- package/dist/assets/math-DR3fXDcX-C9KfHLHP.js +0 -1
- package/dist/assets/piano-BN5Btq91-CnKhyLGE.js +0 -1
- package/dist/assets/pitch-Dn0iNqiS-BxAdpDDb.js +0 -1
- package/dist/assets/prescribed-BWO17Gan.js +0 -2
- package/dist/assets/prescribed-BWO17Gan.js.map +0 -1
- package/dist/assets/sightsing-CJX3k0Fd-CG94OiDr.js +0 -1
- package/dist/assets/srs-DGscV6W4.js +0 -1
- package/dist/assets/typing-k-ojjO7G-AF8vU_q7.js +0 -1
- package/dist/assets/validators-lpYAHmRR.js +0 -2
- package/dist/assets/word-work-Dd6tIKrt-BNTSCq5F.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./chunk-D6hFPZc3.js";import{t as e}from"./defineProperty-y9rbOPYz.js";import{s as t}from"./elo-B5qCwvSC.js";import{l as n}from"./PipelineDebugger-
|
|
2
|
-
//# sourceMappingURL=interferenceMitigator-
|
|
1
|
+
import"./chunk-D6hFPZc3.js";import{t as e}from"./defineProperty-y9rbOPYz.js";import{s as t}from"./elo-B5qCwvSC.js";import{l as n}from"./PipelineDebugger-DhnKlMgD.js";var r,i=10,a=3,o=.8,s=(r=class InterferenceMitigatorNavigator extends n{constructor(t,n,r){super(t,n,r),e(this,`config`,void 0),e(this,`name`,void 0),e(this,`kind`,InterferenceMitigatorNavigator.kind),e(this,`interferenceMap`,void 0),this.config=this.parseConfig(r.serializedData),this.interferenceMap=this.buildInterferenceMap(),this.name=r.name||`Interference Mitigator`}parseConfig(e){try{let t=JSON.parse(e),n=t.interferenceSets||[];return n.length>0&&Array.isArray(n[0])&&(n=n.map(e=>({tags:e}))),{interferenceSets:n,maturityThreshold:{minCount:t.maturityThreshold?.minCount??i,minElo:t.maturityThreshold?.minElo,minElapsedDays:t.maturityThreshold?.minElapsedDays??a},defaultDecay:t.defaultDecay??o}}catch{return{interferenceSets:[],maturityThreshold:{minCount:i,minElapsedDays:a},defaultDecay:o}}}buildInterferenceMap(){let e=new Map;for(let t of this.config.interferenceSets){let n=t.decay??this.config.defaultDecay??o;for(let r of t.tags){e.has(r)||e.set(r,[]);let i=e.get(r);for(let e of t.tags)if(e!==r){let t=i.find(t=>t.partner===e);t?t.decay=Math.max(t.decay,n):i.push({partner:e,decay:n})}}}return e}async getImmatureTags(e){let n=new Set;try{let r=t((await e.user.getCourseRegDoc(e.course.getCourseID())).elo),o=this.config.maturityThreshold?.minCount??i,s=this.config.maturityThreshold?.minElo,c=(this.config.maturityThreshold?.minElapsedDays??a)*2;for(let[e,t]of Object.entries(r.tags)){if(t.count===0)continue;let r=t.count<o,i=s!==void 0&&t.score<s,a=t.count<c;(r||i||a)&&n.add(e)}}catch{}return n}getTagsToAvoid(e){let t=new Map;for(let n of e){let r=this.interferenceMap.get(n);if(r){for(let{partner:n,decay:i}of r)if(!e.has(n)){let e=t.get(n)??0;t.set(n,Math.max(e,i))}}}return t}computeInterferenceEffect(e,t,n){if(t.size===0)return{multiplier:1,interferingTags:[],reason:`No interference detected`};let r=1,i=[];for(let n of e){let e=t.get(n);e!==void 0&&(i.push(n),r*=1-e)}if(i.length===0)return{multiplier:1,interferingTags:[],reason:`No interference detected`};let a=new Set;for(let e of i)for(let t of n)this.interferenceMap.get(t)?.some(t=>t.partner===e)&&a.add(t);let o=`Interferes with immature tags ${Array.from(a).join(`, `)} (tags: ${i.join(`, `)}, multiplier: ${r.toFixed(2)})`;return{multiplier:r,interferingTags:i,reason:o}}async transform(e,t){let n=await this.getImmatureTags(t),r=this.getTagsToAvoid(n),i=[];for(let t of e){let e=t.tags??[],{multiplier:a,reason:o}=this.computeInterferenceEffect(e,r,n),s=t.score*a,c=a<1?`penalized`:a>1?`boosted`:`passed`;i.push({...t,score:s,provenance:[...t.provenance,{strategy:`interferenceMitigator`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-interference`,action:c,score:s,reason:o}]})}return i}async getWeightedCards(e){throw Error(`InterferenceMitigatorNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}},e(r,`kind`,`signal`),r);export{s as default};
|
|
2
|
+
//# sourceMappingURL=interferenceMitigator-BtAQm-0d.js.map
|
package/dist/assets/{interferenceMitigator-D78KgOxz.js.map → interferenceMitigator-BtAQm-0d.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interferenceMitigator-D78KgOxz.js","names":[],"sources":["../../../db/dist/core/navigators/filters/interferenceMitigator.mjs"],"sourcesContent":["import \"../../../_virtual/_rolldown/runtime.mjs\";\nimport { ContentNavigator } from \"../index.mjs\";\nimport { toCourseElo } from \"@vue-skuilder/common\";\n//#region src/core/navigators/filters/interferenceMitigator.ts\nconst DEFAULT_MIN_COUNT = 10;\nconst DEFAULT_MIN_ELAPSED_DAYS = 3;\nconst DEFAULT_INTERFERENCE_DECAY = .8;\n/**\n* A filter strategy that avoids introducing confusable concepts simultaneously.\n*\n* When a user is learning a concept (tag is \"immature\"), this strategy reduces\n* scores for cards tagged with interfering concepts. This encourages the system\n* to introduce new content that is maximally distant from current learning focus.\n*\n* Example: While learning 'd', prefer introducing 'x' over 'b' (visual interference)\n* or 't' (phonetic interference).\n*\n* Implements CardFilter for use in Pipeline architecture.\n* Also extends ContentNavigator for backward compatibility.\n*/\nvar InterferenceMitigatorNavigator = class InterferenceMitigatorNavigator extends ContentNavigator {\n\tconfig;\n\t/** Human-readable name for CardFilter interface */\n\tname;\n\t/** See CardFilter.kind. Static, so the pipeline plan can read it without an instance. */\n\tstatic kind = \"signal\";\n\tkind = InterferenceMitigatorNavigator.kind;\n\t/** Precomputed map: tag -> set of { partner, decay } it interferes with */\n\tinterferenceMap;\n\tconstructor(user, course, strategyData) {\n\t\tsuper(user, course, strategyData);\n\t\tthis.config = this.parseConfig(strategyData.serializedData);\n\t\tthis.interferenceMap = this.buildInterferenceMap();\n\t\tthis.name = strategyData.name || \"Interference Mitigator\";\n\t}\n\tparseConfig(serializedData) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(serializedData);\n\t\t\tlet sets = parsed.interferenceSets || [];\n\t\t\tif (sets.length > 0 && Array.isArray(sets[0])) sets = sets.map((tags) => ({ tags }));\n\t\t\treturn {\n\t\t\t\tinterferenceSets: sets,\n\t\t\t\tmaturityThreshold: {\n\t\t\t\t\tminCount: parsed.maturityThreshold?.minCount ?? DEFAULT_MIN_COUNT,\n\t\t\t\t\tminElo: parsed.maturityThreshold?.minElo,\n\t\t\t\t\tminElapsedDays: parsed.maturityThreshold?.minElapsedDays ?? DEFAULT_MIN_ELAPSED_DAYS\n\t\t\t\t},\n\t\t\t\tdefaultDecay: parsed.defaultDecay ?? DEFAULT_INTERFERENCE_DECAY\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tinterferenceSets: [],\n\t\t\t\tmaturityThreshold: {\n\t\t\t\t\tminCount: DEFAULT_MIN_COUNT,\n\t\t\t\t\tminElapsedDays: DEFAULT_MIN_ELAPSED_DAYS\n\t\t\t\t},\n\t\t\t\tdefaultDecay: DEFAULT_INTERFERENCE_DECAY\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t* Build a map from each tag to its interference partners with decay coefficients.\n\t* If tags A, B, C are in an interference group with decay 0.8, then:\n\t* - A interferes with B (decay 0.8) and C (decay 0.8)\n\t* - B interferes with A (decay 0.8) and C (decay 0.8)\n\t* - etc.\n\t*/\n\tbuildInterferenceMap() {\n\t\tconst map = /* @__PURE__ */ new Map();\n\t\tfor (const group of this.config.interferenceSets) {\n\t\t\tconst decay = group.decay ?? this.config.defaultDecay ?? DEFAULT_INTERFERENCE_DECAY;\n\t\t\tfor (const tag of group.tags) {\n\t\t\t\tif (!map.has(tag)) map.set(tag, []);\n\t\t\t\tconst partners = map.get(tag);\n\t\t\t\tfor (const other of group.tags) if (other !== tag) {\n\t\t\t\t\tconst existing = partners.find((p) => p.partner === other);\n\t\t\t\t\tif (existing) existing.decay = Math.max(existing.decay, decay);\n\t\t\t\t\telse partners.push({\n\t\t\t\t\t\tpartner: other,\n\t\t\t\t\t\tdecay\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn map;\n\t}\n\t/**\n\t* Get the set of tags that are currently immature for this user.\n\t* A tag is immature if the user has interacted with it but hasn't\n\t* reached the maturity threshold.\n\t*/\n\tasync getImmatureTags(context) {\n\t\tconst immature = /* @__PURE__ */ new Set();\n\t\ttry {\n\t\t\tconst userElo = toCourseElo((await context.user.getCourseRegDoc(context.course.getCourseID())).elo);\n\t\t\tconst minCount = this.config.maturityThreshold?.minCount ?? DEFAULT_MIN_COUNT;\n\t\t\tconst minElo = this.config.maturityThreshold?.minElo;\n\t\t\tconst minCountForElapsed = (this.config.maturityThreshold?.minElapsedDays ?? DEFAULT_MIN_ELAPSED_DAYS) * 2;\n\t\t\tfor (const [tagId, tagElo] of Object.entries(userElo.tags)) {\n\t\t\t\tif (tagElo.count === 0) continue;\n\t\t\t\tconst belowCount = tagElo.count < minCount;\n\t\t\t\tconst belowElo = minElo !== void 0 && tagElo.score < minElo;\n\t\t\t\tconst belowElapsed = tagElo.count < minCountForElapsed;\n\t\t\t\tif (belowCount || belowElo || belowElapsed) immature.add(tagId);\n\t\t\t}\n\t\t} catch {}\n\t\treturn immature;\n\t}\n\t/**\n\t* Get all tags that interfere with any immature tag, along with their decay coefficients.\n\t* These are the tags we want to avoid introducing.\n\t*/\n\tgetTagsToAvoid(immatureTags) {\n\t\tconst avoid = /* @__PURE__ */ new Map();\n\t\tfor (const immatureTag of immatureTags) {\n\t\t\tconst partners = this.interferenceMap.get(immatureTag);\n\t\t\tif (partners) {\n\t\t\t\tfor (const { partner, decay } of partners) if (!immatureTags.has(partner)) {\n\t\t\t\t\tconst existing = avoid.get(partner) ?? 0;\n\t\t\t\t\tavoid.set(partner, Math.max(existing, decay));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn avoid;\n\t}\n\t/**\n\t* Compute interference score reduction for a card.\n\t* Returns: { multiplier, interfering tags, reason }\n\t*/\n\tcomputeInterferenceEffect(cardTags, tagsToAvoid, immatureTags) {\n\t\tif (tagsToAvoid.size === 0) return {\n\t\t\tmultiplier: 1,\n\t\t\tinterferingTags: [],\n\t\t\treason: \"No interference detected\"\n\t\t};\n\t\tlet multiplier = 1;\n\t\tconst interferingTags = [];\n\t\tfor (const tag of cardTags) {\n\t\t\tconst decay = tagsToAvoid.get(tag);\n\t\t\tif (decay !== void 0) {\n\t\t\t\tinterferingTags.push(tag);\n\t\t\t\tmultiplier *= 1 - decay;\n\t\t\t}\n\t\t}\n\t\tif (interferingTags.length === 0) return {\n\t\t\tmultiplier: 1,\n\t\t\tinterferingTags: [],\n\t\t\treason: \"No interference detected\"\n\t\t};\n\t\tconst causingTags = /* @__PURE__ */ new Set();\n\t\tfor (const tag of interferingTags) for (const immatureTag of immatureTags) if (this.interferenceMap.get(immatureTag)?.some((p) => p.partner === tag)) causingTags.add(immatureTag);\n\t\tconst reason = `Interferes with immature tags ${Array.from(causingTags).join(\", \")} (tags: ${interferingTags.join(\", \")}, multiplier: ${multiplier.toFixed(2)})`;\n\t\treturn {\n\t\t\tmultiplier,\n\t\t\tinterferingTags,\n\t\t\treason\n\t\t};\n\t}\n\t/**\n\t* CardFilter.transform implementation.\n\t*\n\t* Apply interference-aware scoring. Cards with tags that interfere with\n\t* immature learnings get reduced scores.\n\t*/\n\tasync transform(cards, context) {\n\t\tconst immatureTags = await this.getImmatureTags(context);\n\t\tconst tagsToAvoid = this.getTagsToAvoid(immatureTags);\n\t\tconst adjusted = [];\n\t\tfor (const card of cards) {\n\t\t\tconst cardTags = card.tags ?? [];\n\t\t\tconst { multiplier, reason } = this.computeInterferenceEffect(cardTags, tagsToAvoid, immatureTags);\n\t\t\tconst finalScore = card.score * multiplier;\n\t\t\tconst action = multiplier < 1 ? \"penalized\" : multiplier > 1 ? \"boosted\" : \"passed\";\n\t\t\tadjusted.push({\n\t\t\t\t...card,\n\t\t\t\tscore: finalScore,\n\t\t\t\tprovenance: [...card.provenance, {\n\t\t\t\t\tstrategy: \"interferenceMitigator\",\n\t\t\t\t\tstrategyName: this.strategyName || this.name,\n\t\t\t\t\tstrategyId: this.strategyId || \"NAVIGATION_STRATEGY-interference\",\n\t\t\t\t\taction,\n\t\t\t\t\tscore: finalScore,\n\t\t\t\t\treason\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\treturn adjusted;\n\t}\n\t/**\n\t* Legacy getWeightedCards - now throws as filters should not be used as generators.\n\t*\n\t* Use transform() via Pipeline instead.\n\t*/\n\tasync getWeightedCards(_limit) {\n\t\tthrow new Error(\"InterferenceMitigatorNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().\");\n\t}\n};\n//#endregion\nexport { InterferenceMitigatorNavigator as default };\n\n//# sourceMappingURL=interferenceMitigator.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interferenceMitigator-BtAQm-0d.js","names":[],"sources":["../../../db/dist/core/navigators/filters/interferenceMitigator.mjs"],"sourcesContent":["import \"../../../_virtual/_rolldown/runtime.mjs\";\nimport { ContentNavigator } from \"../index.mjs\";\nimport { toCourseElo } from \"@vue-skuilder/common\";\n//#region src/core/navigators/filters/interferenceMitigator.ts\nconst DEFAULT_MIN_COUNT = 10;\nconst DEFAULT_MIN_ELAPSED_DAYS = 3;\nconst DEFAULT_INTERFERENCE_DECAY = .8;\n/**\n* A filter strategy that avoids introducing confusable concepts simultaneously.\n*\n* When a user is learning a concept (tag is \"immature\"), this strategy reduces\n* scores for cards tagged with interfering concepts. This encourages the system\n* to introduce new content that is maximally distant from current learning focus.\n*\n* Example: While learning 'd', prefer introducing 'x' over 'b' (visual interference)\n* or 't' (phonetic interference).\n*\n* Implements CardFilter for use in Pipeline architecture.\n* Also extends ContentNavigator for backward compatibility.\n*/\nvar InterferenceMitigatorNavigator = class InterferenceMitigatorNavigator extends ContentNavigator {\n\tconfig;\n\t/** Human-readable name for CardFilter interface */\n\tname;\n\t/** See CardFilter.kind. Static, so the pipeline plan can read it without an instance. */\n\tstatic kind = \"signal\";\n\tkind = InterferenceMitigatorNavigator.kind;\n\t/** Precomputed map: tag -> set of { partner, decay } it interferes with */\n\tinterferenceMap;\n\tconstructor(user, course, strategyData) {\n\t\tsuper(user, course, strategyData);\n\t\tthis.config = this.parseConfig(strategyData.serializedData);\n\t\tthis.interferenceMap = this.buildInterferenceMap();\n\t\tthis.name = strategyData.name || \"Interference Mitigator\";\n\t}\n\tparseConfig(serializedData) {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(serializedData);\n\t\t\tlet sets = parsed.interferenceSets || [];\n\t\t\tif (sets.length > 0 && Array.isArray(sets[0])) sets = sets.map((tags) => ({ tags }));\n\t\t\treturn {\n\t\t\t\tinterferenceSets: sets,\n\t\t\t\tmaturityThreshold: {\n\t\t\t\t\tminCount: parsed.maturityThreshold?.minCount ?? DEFAULT_MIN_COUNT,\n\t\t\t\t\tminElo: parsed.maturityThreshold?.minElo,\n\t\t\t\t\tminElapsedDays: parsed.maturityThreshold?.minElapsedDays ?? DEFAULT_MIN_ELAPSED_DAYS\n\t\t\t\t},\n\t\t\t\tdefaultDecay: parsed.defaultDecay ?? DEFAULT_INTERFERENCE_DECAY\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tinterferenceSets: [],\n\t\t\t\tmaturityThreshold: {\n\t\t\t\t\tminCount: DEFAULT_MIN_COUNT,\n\t\t\t\t\tminElapsedDays: DEFAULT_MIN_ELAPSED_DAYS\n\t\t\t\t},\n\t\t\t\tdefaultDecay: DEFAULT_INTERFERENCE_DECAY\n\t\t\t};\n\t\t}\n\t}\n\t/**\n\t* Build a map from each tag to its interference partners with decay coefficients.\n\t* If tags A, B, C are in an interference group with decay 0.8, then:\n\t* - A interferes with B (decay 0.8) and C (decay 0.8)\n\t* - B interferes with A (decay 0.8) and C (decay 0.8)\n\t* - etc.\n\t*/\n\tbuildInterferenceMap() {\n\t\tconst map = /* @__PURE__ */ new Map();\n\t\tfor (const group of this.config.interferenceSets) {\n\t\t\tconst decay = group.decay ?? this.config.defaultDecay ?? DEFAULT_INTERFERENCE_DECAY;\n\t\t\tfor (const tag of group.tags) {\n\t\t\t\tif (!map.has(tag)) map.set(tag, []);\n\t\t\t\tconst partners = map.get(tag);\n\t\t\t\tfor (const other of group.tags) if (other !== tag) {\n\t\t\t\t\tconst existing = partners.find((p) => p.partner === other);\n\t\t\t\t\tif (existing) existing.decay = Math.max(existing.decay, decay);\n\t\t\t\t\telse partners.push({\n\t\t\t\t\t\tpartner: other,\n\t\t\t\t\t\tdecay\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn map;\n\t}\n\t/**\n\t* Get the set of tags that are currently immature for this user.\n\t* A tag is immature if the user has interacted with it but hasn't\n\t* reached the maturity threshold.\n\t*/\n\tasync getImmatureTags(context) {\n\t\tconst immature = /* @__PURE__ */ new Set();\n\t\ttry {\n\t\t\tconst userElo = toCourseElo((await context.user.getCourseRegDoc(context.course.getCourseID())).elo);\n\t\t\tconst minCount = this.config.maturityThreshold?.minCount ?? DEFAULT_MIN_COUNT;\n\t\t\tconst minElo = this.config.maturityThreshold?.minElo;\n\t\t\tconst minCountForElapsed = (this.config.maturityThreshold?.minElapsedDays ?? DEFAULT_MIN_ELAPSED_DAYS) * 2;\n\t\t\tfor (const [tagId, tagElo] of Object.entries(userElo.tags)) {\n\t\t\t\tif (tagElo.count === 0) continue;\n\t\t\t\tconst belowCount = tagElo.count < minCount;\n\t\t\t\tconst belowElo = minElo !== void 0 && tagElo.score < minElo;\n\t\t\t\tconst belowElapsed = tagElo.count < minCountForElapsed;\n\t\t\t\tif (belowCount || belowElo || belowElapsed) immature.add(tagId);\n\t\t\t}\n\t\t} catch {}\n\t\treturn immature;\n\t}\n\t/**\n\t* Get all tags that interfere with any immature tag, along with their decay coefficients.\n\t* These are the tags we want to avoid introducing.\n\t*/\n\tgetTagsToAvoid(immatureTags) {\n\t\tconst avoid = /* @__PURE__ */ new Map();\n\t\tfor (const immatureTag of immatureTags) {\n\t\t\tconst partners = this.interferenceMap.get(immatureTag);\n\t\t\tif (partners) {\n\t\t\t\tfor (const { partner, decay } of partners) if (!immatureTags.has(partner)) {\n\t\t\t\t\tconst existing = avoid.get(partner) ?? 0;\n\t\t\t\t\tavoid.set(partner, Math.max(existing, decay));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn avoid;\n\t}\n\t/**\n\t* Compute interference score reduction for a card.\n\t* Returns: { multiplier, interfering tags, reason }\n\t*/\n\tcomputeInterferenceEffect(cardTags, tagsToAvoid, immatureTags) {\n\t\tif (tagsToAvoid.size === 0) return {\n\t\t\tmultiplier: 1,\n\t\t\tinterferingTags: [],\n\t\t\treason: \"No interference detected\"\n\t\t};\n\t\tlet multiplier = 1;\n\t\tconst interferingTags = [];\n\t\tfor (const tag of cardTags) {\n\t\t\tconst decay = tagsToAvoid.get(tag);\n\t\t\tif (decay !== void 0) {\n\t\t\t\tinterferingTags.push(tag);\n\t\t\t\tmultiplier *= 1 - decay;\n\t\t\t}\n\t\t}\n\t\tif (interferingTags.length === 0) return {\n\t\t\tmultiplier: 1,\n\t\t\tinterferingTags: [],\n\t\t\treason: \"No interference detected\"\n\t\t};\n\t\tconst causingTags = /* @__PURE__ */ new Set();\n\t\tfor (const tag of interferingTags) for (const immatureTag of immatureTags) if (this.interferenceMap.get(immatureTag)?.some((p) => p.partner === tag)) causingTags.add(immatureTag);\n\t\tconst reason = `Interferes with immature tags ${Array.from(causingTags).join(\", \")} (tags: ${interferingTags.join(\", \")}, multiplier: ${multiplier.toFixed(2)})`;\n\t\treturn {\n\t\t\tmultiplier,\n\t\t\tinterferingTags,\n\t\t\treason\n\t\t};\n\t}\n\t/**\n\t* CardFilter.transform implementation.\n\t*\n\t* Apply interference-aware scoring. Cards with tags that interfere with\n\t* immature learnings get reduced scores.\n\t*/\n\tasync transform(cards, context) {\n\t\tconst immatureTags = await this.getImmatureTags(context);\n\t\tconst tagsToAvoid = this.getTagsToAvoid(immatureTags);\n\t\tconst adjusted = [];\n\t\tfor (const card of cards) {\n\t\t\tconst cardTags = card.tags ?? [];\n\t\t\tconst { multiplier, reason } = this.computeInterferenceEffect(cardTags, tagsToAvoid, immatureTags);\n\t\t\tconst finalScore = card.score * multiplier;\n\t\t\tconst action = multiplier < 1 ? \"penalized\" : multiplier > 1 ? \"boosted\" : \"passed\";\n\t\t\tadjusted.push({\n\t\t\t\t...card,\n\t\t\t\tscore: finalScore,\n\t\t\t\tprovenance: [...card.provenance, {\n\t\t\t\t\tstrategy: \"interferenceMitigator\",\n\t\t\t\t\tstrategyName: this.strategyName || this.name,\n\t\t\t\t\tstrategyId: this.strategyId || \"NAVIGATION_STRATEGY-interference\",\n\t\t\t\t\taction,\n\t\t\t\t\tscore: finalScore,\n\t\t\t\t\treason\n\t\t\t\t}]\n\t\t\t});\n\t\t}\n\t\treturn adjusted;\n\t}\n\t/**\n\t* Legacy getWeightedCards - now throws as filters should not be used as generators.\n\t*\n\t* Use transform() via Pipeline instead.\n\t*/\n\tasync getWeightedCards(_limit) {\n\t\tthrow new Error(\"InterferenceMitigatorNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().\");\n\t}\n};\n//#endregion\nexport { InterferenceMitigatorNavigator as default };\n\n//# sourceMappingURL=interferenceMitigator.mjs.map"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./vue.runtime.esm-bundler--Fxmd6l9.js";import"./MarkdownRenderer-borh39Lq.js";import"./moment-DbT30ZpG.js";import"./dist-C8EQUxWW.js";import"./contentSource-FGhM_ge8.js";import"./dist-DGbpjpKB.js";import"./CourseWare-BTFRjgBR-lpqcYpAW.js";import"./PipelineDebugger-DhnKlMgD.js";import"./eloDistance-CRxxdYPJ.js";import{t as e}from"./math-D_8HiEQR-CQynsoTm.js";export{e as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./chunk-D6hFPZc3.js";import{C as e,H as t,Ht as n,I as r,K as i,Lt as a,N as o,S as s,T as c,W as l,_ as u,b as d,et as p,f as m,g as h,s as g,ut as _,y as v,z as y}from"./vue.runtime.esm-bundler--Fxmd6l9.js";import{C as b,S as x}from"./MarkdownRenderer-borh39Lq.js";import{P as S,b as C,x as w,y as T}from"./dist-BsRvt0gH.js";import{K as E,U as D}from"./contentSource-DwznMSMs.js";import{t as O}from"./defineProperty-y9rbOPYz.js";import{t as k}from"./logshim-YQI0WloD.js";import{c as A,d as j,f as M,i as N,l as P,m as F,n as I,o as L,s as ee,t as R,u as z}from"./CourseWare-BTFRjgBR-DBp_fIwH.js";var te={name:F.MATH_SingleDigitAddition,fields:[{name:`a`,type:D.INT},{name:`b`,type:D.INT}]},ne={name:F.MATH_EqualityTest,fields:[{name:`a`,type:D.STRING},{name:`b`,type:D.STRING}]},B,re,ie,ae,V,H,U,W,oe,se,G,ce=c({name:`AdditionHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`AdditionHorizontal`),r=x(n),i=_(``);r.question.value=new q(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),le={"data-viewable":`AdditionHorizontal`};function _sfc_render$14(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,le,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` + `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$14,`_sfc_render`);var ue=R(ce,[[`render`,_sfc_render$14]]),de=c({name:`VerbalAddition`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`VerbalAddition`),r=x(n),i=_(``);r.question.value=new q(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),fe={"data-viewable":`VerbalAddition`};function _sfc_render$13(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,fe,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` plus `+n(r.question.b)+` is `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$13,`_sfc_render`);var K=R(de,[[`render`,_sfc_render$13]]),pe=z(function(){let e=[];for(let t=0;t<10;t++)for(let n=0;n<10;n++)e.push({a:t,b:n});return e},`data`),q=(B=class SingleDigitAdditionQuestion extends S{constructor(e){var _super=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return 1*this.a+this.b===e}dataShapes(){return SingleDigitAdditionQuestion.dataShapes}views(){return SingleDigitAdditionQuestion.views}},O(B,`dataShapes`,[te]),O(B,`views`,[ue,K]),O(B,`seedData`,pe()),O(B,`acceptsUserData`,!1),B),J=c({name:`DivisionHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`DivisionHorizontal`),r=x(n),i=_(``);r.question.value=new he(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),Y={"data-viewable":`DivisionHorizontal`};function _sfc_render$12(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,Y,[r.question?(t(),d(m,{key:0},[s(n(r.question.a*r.question.b)+` ÷ `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$12,`_sfc_render`);var X=R(J,[[`render`,_sfc_render$12]]),me=[{name:`a`,type:D.INT},{name:`b`,type:D.INT,validator:{instructions:`An integer between 1 and 10, inclusive.`,test:e=>{let t=parseInt(e,10);return 0<t&&t<11?{status:E.ok,msg:``}:t===0?{status:E.error,msg:`Thou shalt not divide by zero.`}:{status:E.error,msg:`Single digit division problem divisors must be between 1 and 10, inclusive.`}}}}],he=(re=class SingleDigitDivisionQuestion extends S{constructor(e){var _super2=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super2(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return this.a*this.b===e}dataShapes(){return SingleDigitDivisionQuestion.dataShapes}views(){return SingleDigitDivisionQuestion.views}},O(re,`dataShapes`,[{name:F.MATH_SingleDigitDivision,fields:me}]),O(re,`views`,[X]),re),ge=c({name:`MultiplicationHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`MultiplicationHorizontal`),r=x(n),i=_(``);r.question.value=new we(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),_e={"data-viewable":`MultiplicationHorizontal`};function _sfc_render$11(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,_e,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` × `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$11,`_sfc_render`);var ve=R(ge,[[`render`,_sfc_render$11]]),ye=c({name:`VerbalMultiplication`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`VerbalMultiplication`),r=x(n),i=_(``);r.question.value=new we(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),be={"data-viewable":`VerbalMultiplication`};function _sfc_render$10(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,be,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` times `+n(r.question.b)+` is `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$10,`_sfc_render`);var xe=R(ye,[[`render`,_sfc_render$10]]),Se={instructions:`An integer between 0 and 10, inclusive.`,test:e=>{let t=parseInt(e,10);return 0<=t&&t<=10?{status:E.ok,msg:``}:{status:E.error,msg:`Single digit multiplication problem inputs must be between 0 and 10, inclusive.`}}},Ce=[{name:`a`,type:D.INT,validator:Se},{name:`b`,type:D.INT,validator:Se}],we=(ie=class SingleDigitMultiplicationQuestion extends S{constructor(e){var _super3=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super3(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return this.a*this.b===e}dataShapes(){return SingleDigitMultiplicationQuestion.dataShapes}views(){return SingleDigitMultiplicationQuestion.views}},O(ie,`dataShapes`,[{name:F.MATH_SingleDigitMultiplication,fields:Ce}]),O(ie,`views`,[xe,ve]),ie),Te=c({name:`TrueFalse`,components:{TFSelect:C},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=x(b(e,t,`TrueFalse`));n.question.value=new Oe(e.data);let r=h(()=>new Oe(e.data)),submit=e=>{alert(r.value.isCorrect(e===0))};return{question:r,submit}}}),Ee={"data-viewable":`TrueFalse`};function _sfc_render$9(r,a,o,c,l,u){let p=i(`TFSelect`);return t(),d(`div`,Ee,[s(n(r.question.a)+` = `+n(r.question.b)+` `,1),e(p,{submit:r.submit},null,8,[`submit`])])}z(_sfc_render$9,`_sfc_render`);var De=R(Te,[[`render`,_sfc_render$9]]),Oe=(ae=class EqualityTest extends S{constructor(e){var _super4=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super4(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return this.a===this.b===e}dataShapes(){return EqualityTest.dataShapes}views(){return EqualityTest.views}},O(ae,`dataShapes`,[ne]),O(ae,`views`,[De]),ae),ke=c({name:`SolveView`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`Solve`),r=x(n),i=_(``),a=[`a`,`b`,`d`,`A`,`z`,`B`,`d`,`y`],o=_(a[L(0,a.length)]);r.question.value=new Be(e.data);let s=h(()=>r.question.value),submit=()=>{if(s.value){let e=s.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:s,variable:o,submit}}}),Ae={"data-viewable":`Solve`},je={key:0},Me={key:1},Ne={key:2},Pe={key:3},Fe={key:4};function _sfc_render$8(r,a,o,c,l,p){let h=i(`UserInputNumber`);return t(),d(`div`,Ae,[r.question?(t(),d(m,{key:0},[a[1]||(a[1]=u(`h4`,null,`Solve the Equation`,-1)),a[2]||(a[2]=u(`br`,null,null,-1)),a[3]||(a[3]=u(`br`,null,null,-1)),r.question.operation.valueOf()===`ADDITION`?(t(),d(`div`,je,n(r.variable)+` - `+n(r.question.a)+` = `+n(r.question.b),1)):r.question.operation.valueOf()===`SUBTRACTION`?(t(),d(`div`,Me,n(r.variable)+` + `+n(r.question.a)+` = `+n(r.question.b),1)):r.question.operation.valueOf()===`MULTIPLICATION`?(t(),d(`div`,Ne,n(r.variable)+` ÷ `+n(r.question.a)+` = `+n(r.question.b),1)):r.question.operation.valueOf()===`DIVISION`?(t(),d(`div`,Pe,n(r.variable)+` * `+n(r.question.a)+` = `+n(r.question.b*r.question.a),1)):(t(),d(`div`,Fe,`No operation!? (This should never show)`)),a[4]||(a[4]=u(`br`,null,null,-1)),a[5]||(a[5]=u(`br`,null,null,-1)),s(` `+n(r.variable)+` = `,1),e(h,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$8,`_sfc_render`);var Ie=R(ke,[[`render`,_sfc_render$8]]),Le={instructions:`An integer between 0 and 10, inclusive.`,test:e=>{let t=parseInt(e,10);return 0<=t&&t<=100?{status:E.ok,msg:``}:{status:E.error,msg:`Single-step equation problem inputs must be between 0 and 100, inclusive.`}}},Re=[{name:`a`,type:D.INT,validator:Le},{name:`b`,type:D.INT,validator:Le},{name:`operation`,type:D.STRING,validator:{test:e=>e===ze.ADDITION||e===ze.SUBTRACTION||e===ze.MULTIPLICATION||e===ze.DIVISION?{status:E.ok,msg:``}:{status:E.error,msg:`Operation must be ADDITION, SUBTRACTION, MULTIPLICATION, or DIVISION`}}}],ze=function(e){return e.ADDITION=`ADDITION`,e.SUBTRACTION=`SUBTRACTION`,e.MULTIPLICATION=`MULTIPLICATION`,e.DIVISION=`DIVISION`,e}(ze||{}),Be=(V=class OneStepEquation extends S{constructor(e){var _super5=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),O(this,`operation`,void 0),this);_super5(e),this.a=e[0].a,this.b=e[0].b,this.operation=e[0].operation}answer(){let e=0;return this.operation===ze.ADDITION?e=this.a+this.b:this.operation===ze.SUBTRACTION?e=this.b-this.a:this.operation===ze.MULTIPLICATION?e=this.a*this.b:this.operation===ze.DIVISION&&(e=this.b),k(`The answer is ${e}
|
|
1
|
+
import"./chunk-D6hFPZc3.js";import{C as e,H as t,Ht as n,I as r,K as i,Lt as a,N as o,S as s,T as c,W as l,_ as u,b as d,et as p,f as m,g as h,s as g,ut as _,y as v,z as y}from"./vue.runtime.esm-bundler--Fxmd6l9.js";import{C as b,S as x}from"./MarkdownRenderer-borh39Lq.js";import{P as S,b as C,x as w,y as T}from"./dist-C8EQUxWW.js";import{K as E,U as D}from"./contentSource-FGhM_ge8.js";import{t as O}from"./defineProperty-y9rbOPYz.js";import{t as k}from"./logshim-YQI0WloD.js";import{c as A,d as j,f as M,i as N,l as P,m as F,n as I,o as L,s as ee,t as R,u as z}from"./CourseWare-BTFRjgBR-lpqcYpAW.js";var te={name:F.MATH_SingleDigitAddition,fields:[{name:`a`,type:D.INT},{name:`b`,type:D.INT}]},ne={name:F.MATH_EqualityTest,fields:[{name:`a`,type:D.STRING},{name:`b`,type:D.STRING}]},B,re,ie,ae,V,H,U,W,oe,se,G,ce=c({name:`AdditionHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`AdditionHorizontal`),r=x(n),i=_(``);r.question.value=new q(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),le={"data-viewable":`AdditionHorizontal`};function _sfc_render$14(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,le,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` + `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$14,`_sfc_render`);var ue=R(ce,[[`render`,_sfc_render$14]]),de=c({name:`VerbalAddition`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`VerbalAddition`),r=x(n),i=_(``);r.question.value=new q(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),fe={"data-viewable":`VerbalAddition`};function _sfc_render$13(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,fe,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` plus `+n(r.question.b)+` is `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$13,`_sfc_render`);var K=R(de,[[`render`,_sfc_render$13]]),pe=z(function(){let e=[];for(let t=0;t<10;t++)for(let n=0;n<10;n++)e.push({a:t,b:n});return e},`data`),q=(B=class SingleDigitAdditionQuestion extends S{constructor(e){var _super=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return 1*this.a+this.b===e}dataShapes(){return SingleDigitAdditionQuestion.dataShapes}views(){return SingleDigitAdditionQuestion.views}},O(B,`dataShapes`,[te]),O(B,`views`,[ue,K]),O(B,`seedData`,pe()),O(B,`acceptsUserData`,!1),B),J=c({name:`DivisionHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`DivisionHorizontal`),r=x(n),i=_(``);r.question.value=new he(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),Y={"data-viewable":`DivisionHorizontal`};function _sfc_render$12(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,Y,[r.question?(t(),d(m,{key:0},[s(n(r.question.a*r.question.b)+` ÷ `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$12,`_sfc_render`);var X=R(J,[[`render`,_sfc_render$12]]),me=[{name:`a`,type:D.INT},{name:`b`,type:D.INT,validator:{instructions:`An integer between 1 and 10, inclusive.`,test:e=>{let t=parseInt(e,10);return 0<t&&t<11?{status:E.ok,msg:``}:t===0?{status:E.error,msg:`Thou shalt not divide by zero.`}:{status:E.error,msg:`Single digit division problem divisors must be between 1 and 10, inclusive.`}}}}],he=(re=class SingleDigitDivisionQuestion extends S{constructor(e){var _super2=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super2(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return this.a*this.b===e}dataShapes(){return SingleDigitDivisionQuestion.dataShapes}views(){return SingleDigitDivisionQuestion.views}},O(re,`dataShapes`,[{name:F.MATH_SingleDigitDivision,fields:me}]),O(re,`views`,[X]),re),ge=c({name:`MultiplicationHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`MultiplicationHorizontal`),r=x(n),i=_(``);r.question.value=new we(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),_e={"data-viewable":`MultiplicationHorizontal`};function _sfc_render$11(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,_e,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` × `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$11,`_sfc_render`);var ve=R(ge,[[`render`,_sfc_render$11]]),ye=c({name:`VerbalMultiplication`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`VerbalMultiplication`),r=x(n),i=_(``);r.question.value=new we(e.data);let a=h(()=>r.question.value),submit=()=>{if(a.value){let e=a.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:a,submit}}}),be={"data-viewable":`VerbalMultiplication`};function _sfc_render$10(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,be,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` times `+n(r.question.b)+` is `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$10,`_sfc_render`);var xe=R(ye,[[`render`,_sfc_render$10]]),Se={instructions:`An integer between 0 and 10, inclusive.`,test:e=>{let t=parseInt(e,10);return 0<=t&&t<=10?{status:E.ok,msg:``}:{status:E.error,msg:`Single digit multiplication problem inputs must be between 0 and 10, inclusive.`}}},Ce=[{name:`a`,type:D.INT,validator:Se},{name:`b`,type:D.INT,validator:Se}],we=(ie=class SingleDigitMultiplicationQuestion extends S{constructor(e){var _super3=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super3(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return this.a*this.b===e}dataShapes(){return SingleDigitMultiplicationQuestion.dataShapes}views(){return SingleDigitMultiplicationQuestion.views}},O(ie,`dataShapes`,[{name:F.MATH_SingleDigitMultiplication,fields:Ce}]),O(ie,`views`,[xe,ve]),ie),Te=c({name:`TrueFalse`,components:{TFSelect:C},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=x(b(e,t,`TrueFalse`));n.question.value=new Oe(e.data);let r=h(()=>new Oe(e.data)),submit=e=>{alert(r.value.isCorrect(e===0))};return{question:r,submit}}}),Ee={"data-viewable":`TrueFalse`};function _sfc_render$9(r,a,o,c,l,u){let p=i(`TFSelect`);return t(),d(`div`,Ee,[s(n(r.question.a)+` = `+n(r.question.b)+` `,1),e(p,{submit:r.submit},null,8,[`submit`])])}z(_sfc_render$9,`_sfc_render`);var De=R(Te,[[`render`,_sfc_render$9]]),Oe=(ae=class EqualityTest extends S{constructor(e){var _super4=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super4(e),this.a=e[0].a,this.b=e[0].b}isCorrect(e){return this.a===this.b===e}dataShapes(){return EqualityTest.dataShapes}views(){return EqualityTest.views}},O(ae,`dataShapes`,[ne]),O(ae,`views`,[De]),ae),ke=c({name:`SolveView`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`Solve`),r=x(n),i=_(``),a=[`a`,`b`,`d`,`A`,`z`,`B`,`d`,`y`],o=_(a[L(0,a.length)]);r.question.value=new Be(e.data);let s=h(()=>r.question.value),submit=()=>{if(s.value){let e=s.value.isCorrect(parseInt(i.value,10));alert(e)}};return{...n,...r,answer:i,question:s,variable:o,submit}}}),Ae={"data-viewable":`Solve`},je={key:0},Me={key:1},Ne={key:2},Pe={key:3},Fe={key:4};function _sfc_render$8(r,a,o,c,l,p){let h=i(`UserInputNumber`);return t(),d(`div`,Ae,[r.question?(t(),d(m,{key:0},[a[1]||(a[1]=u(`h4`,null,`Solve the Equation`,-1)),a[2]||(a[2]=u(`br`,null,null,-1)),a[3]||(a[3]=u(`br`,null,null,-1)),r.question.operation.valueOf()===`ADDITION`?(t(),d(`div`,je,n(r.variable)+` - `+n(r.question.a)+` = `+n(r.question.b),1)):r.question.operation.valueOf()===`SUBTRACTION`?(t(),d(`div`,Me,n(r.variable)+` + `+n(r.question.a)+` = `+n(r.question.b),1)):r.question.operation.valueOf()===`MULTIPLICATION`?(t(),d(`div`,Ne,n(r.variable)+` ÷ `+n(r.question.a)+` = `+n(r.question.b),1)):r.question.operation.valueOf()===`DIVISION`?(t(),d(`div`,Pe,n(r.variable)+` * `+n(r.question.a)+` = `+n(r.question.b*r.question.a),1)):(t(),d(`div`,Fe,`No operation!? (This should never show)`)),a[4]||(a[4]=u(`br`,null,null,-1)),a[5]||(a[5]=u(`br`,null,null,-1)),s(` `+n(r.variable)+` = `,1),e(h,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$8,`_sfc_render`);var Ie=R(ke,[[`render`,_sfc_render$8]]),Le={instructions:`An integer between 0 and 10, inclusive.`,test:e=>{let t=parseInt(e,10);return 0<=t&&t<=100?{status:E.ok,msg:``}:{status:E.error,msg:`Single-step equation problem inputs must be between 0 and 100, inclusive.`}}},Re=[{name:`a`,type:D.INT,validator:Le},{name:`b`,type:D.INT,validator:Le},{name:`operation`,type:D.STRING,validator:{test:e=>e===ze.ADDITION||e===ze.SUBTRACTION||e===ze.MULTIPLICATION||e===ze.DIVISION?{status:E.ok,msg:``}:{status:E.error,msg:`Operation must be ADDITION, SUBTRACTION, MULTIPLICATION, or DIVISION`}}}],ze=function(e){return e.ADDITION=`ADDITION`,e.SUBTRACTION=`SUBTRACTION`,e.MULTIPLICATION=`MULTIPLICATION`,e.DIVISION=`DIVISION`,e}(ze||{}),Be=(V=class OneStepEquation extends S{constructor(e){var _super5=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),O(this,`operation`,void 0),this);_super5(e),this.a=e[0].a,this.b=e[0].b,this.operation=e[0].operation}answer(){let e=0;return this.operation===ze.ADDITION?e=this.a+this.b:this.operation===ze.SUBTRACTION?e=this.b-this.a:this.operation===ze.MULTIPLICATION?e=this.a*this.b:this.operation===ze.DIVISION&&(e=this.b),k(`The answer is ${e}
|
|
2
2
|
The operation is ${this.operation.valueOf()}
|
|
3
3
|
this.a = ${this.a}
|
|
4
4
|
this.b = ${this.b}
|
|
@@ -31,4 +31,4 @@ return module.exports;`;var h=Y.agent;if(i&&(h.chrome||h.firefox&&h.versionNumbe
|
|
|
31
31
|
`);let i=new Je.default.Color(.1,.5,.8,.35),c=new e.Path.Arc({from:l,through:u,to:m});c.strokeColor=new Je.default.Color(.1,.5,.8,.75),c.strokeWidth=3,c.fillColor=i;let p=new e.Path;p.closed=!0,p.add(l),p.add(new Je.default.Point(t/2,n/2)),p.add(m),p.fillColor=i}else{let i=new Je.default.PointText(u);i.content=o.toString()+`°`;let a=!0,l=20;for(;a;)a=!1,i.bounds.center=getBisectingPoint(e,t,r,c,s,n,l),p.forEach(e=>{e.intersects(i)&&(a=!0)}),l+=7}}}),r(()=>{c.value=void 0}),{answer:a,canvasRef:s,...n,...i}}}),Xe={"data-viewable":`CalculateSupplementaryAngle`},Ze={ref:`canvasRef`,width:`300`,height:`300`};function _sfc_render$6(n,r,a,o,s,c){let l=i(`user-input-number`);return t(),d(`div`,Xe,[r[1]||(r[1]=u(`h2`,null,`What is the measurement of the highlighted angle?`,-1)),u(`canvas`,Ze,null,512),r[2]||(r[2]=u(`br`,null,null,-1)),e(l,{modelValue:n.answer,"onUpdate:modelValue":r[0]||(r[0]=e=>n.answer=e)},null,8,[`modelValue`])])}z(_sfc_render$6,`_sfc_render`);var Qe=R(Ye,[[`render`,_sfc_render$6],[`__scopeId`,`data-v-4f8ac466`]]),$e=[{name:`AngleCount`,type:D.INT,validator:{instructions:`Must be 2 or 3.`,test:e=>e===`2`||e===`3`?{status:E.ok,msg:``}:{status:E.error,msg:`Must be 2 or 3.`}}}],et=(U=class SupplementaryAngles extends S{constructor(e){var _super7=(...e)=>(super(...e),O(this,`angles`,[]),O(this,`targetAngleIndex`,void 0),O(this,`angleCount`,void 0),this);_super7(e),this.angleCount=e[0].AngleCount;let t=0;for(let e=0;e<=this.angleCount-2;e++){let e=L(25,155-t);this.angles.push(e),t+=e}this.angles.push(180-t),this.targetAngleIndex=L(0,this.angleCount-1)}isCorrect(e){return this.angles[this.targetAngleIndex]===e}dataShapes(){return SupplementaryAngles.dataShapes}views(){return SupplementaryAngles.views}},O(U,`dataShapes`,[{name:F.MATH_SupplimentaryAngles,fields:$e}]),O(U,`views`,[Qe]),U),tt=c({name:`VerbalAddition`,props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`VerbalAddition`),r=x(n),i=_([``,``,``,``,``]);r.question.value=new pt(e.data);let a=h(()=>r.question.value?r.question.value:new pt(e.data)),track=e=>{console.log(`change in ${e}!
|
|
32
32
|
userAnswer: ${i.value.toString()}\n
|
|
33
33
|
qAnswer: ${a.value?.answer.toString()}`),a.value&&a.value.answer[e].toString().length===i.value[e].length&&(parseInt(i.value[e])===a.value.answer[e]?(document.getElementById(`input`+e)?.classList.add(`correct`),document.getElementById(`input`+e)?.classList.remove(`incorrect`),document.getElementById(`input`+e)?.setAttribute(`disabled`,`true`),e+1<i.value.length?document.getElementById(`input`+(e+1))?.focus():r.submitAnswer(i.value)):(document.getElementById(`input`+e)?.classList.add(`incorrect`),r.submitAnswer(i.value),console.log(`Wrong! ${i.value[e]} !== ${a.value.answer[e]}`)))};return y(()=>{console.log(`focusing...`),document.getElementById(`input0`)?.focus()}),{...n,...r,answer:i,question:a,track}}}),nt={"data-viewable":`VerbalAddition`,class:`text-h5`},rt={class:`text-h5`},it=[`value`],ot=[`id`,`onUpdate:modelValue`,`autofocus`,`onKeyup`],st={key:0};function _sfc_render$5(e,r,i,o,c,h){return t(),d(`div`,nt,[u(`div`,rt,[r[0]||(r[0]=s(` Count by `)),u(`strong`,null,n(e.question?.n),1),r[1]||(r[1]=s(`s: `))]),u(`input`,{type:`text`,disabled:``,class:`correct`,value:e.question.answer[0]-e.question.n},null,8,it),r[2]||(r[2]=s(`, `)),(t(!0),d(m,null,l(e.question.answer,(n,r)=>(t(),d(`span`,{key:r},[p(u(`input`,{id:`input${r}`,ref_for:!0,ref:`input${r}`,class:a(`input${n}${r}`),"onUpdate:modelValue":t=>e.answer[r]=t,type:`text`,autofocus:r===0,onKeyup:t=>e.track(r)},null,42,ot),[[g,e.answer[r]]]),r===e.question.answer.length-1?v(``,!0):(t(),d(`span`,st,`, `))]))),128))])}z(_sfc_render$5,`_sfc_render`);var ct=R(tt,[[`render`,_sfc_render$5],[`__scopeId`,`data-v-0452c3a5`]]),lt=function(e){return e.LEFT=`LEFT`,e.RIGHT=`RIGHT`,e}(lt||{}),ut=[{name:`n`,type:D.INT},{name:`hand`,type:D.STRING,validator:{test:e=>e===lt.LEFT||e===lt.RIGHT?{status:E.ok,msg:``}:{status:E.error,msg:`Hand must be ${lt.LEFT} or ${lt.RIGHT}`}}}],dt=z(function(){let e=[];for(let t=2;t<=10;t++)e.push({n:t,hand:lt.LEFT}),e.push({n:t,hand:lt.RIGHT});return e},`data`),ft=2e4;function asInt(e){return typeof e==`string`?parseInt(e):e}var pt=(W=class CountBy extends S{constructor(e){var _super8=(...e)=>(super(...e),O(this,`n`,void 0),O(this,`hand`,void 0),this);_super8(e),this.n=e[0].n,this.hand=e[0].hand}get answer(){let e=[],t=this.hand===lt.LEFT?this.n:6*this.n;for(let n=0;n<5;n++)e.push(t+n*this.n);return e}isCorrect(e){console.log(`Solution: ${this.answer.toString()}`);for(let t=0;t<this.answer.length;t++)if(asInt(e[t])!==this.answer[t])return console.log(`answer[${t}] == ${e[t]} !== ${this.answer[t]}`),!1;return!0}evaluate(e,t){let n=this.isCorrect(e);return{isCorrect:n,performance:n?Math.min(1,ft/t):0,fluent:n?t<=ft:void 0}}dataShapes(){return CountBy.dataShapes}views(){return CountBy.views}},O(W,`dataShapes`,[{name:F.MATH_CountBy,fields:ut}]),O(W,`views`,[ct]),O(W,`seedData`,dt()),O(W,`acceptsUserData`,!1),W),mt=c({name:`NumberBondMissingAddend`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`NumberBondMissingAddend`),r=x(n),i=_(``);r.question.value=new Ct(e.data);let a=h(()=>r.question.value);return{...n,...r,answer:i,question:a}}}),ht={"data-viewable":`NumberBondMissingAddend`,class:`text-h5`};function _sfc_render$4(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,ht,[r.question?(t(),d(m,{key:0},[s(n(r.question.part)+` + ? = `+n(r.question.whole)+` `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$4,`_sfc_render`);var gt=R(mt,[[`render`,_sfc_render$4]]),_t=c({name:`NumberBondSplit`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`NumberBondSplit`),r=x(n),i=_(``);r.question.value=new Ct(e.data);let a=h(()=>r.question.value);return{...n,...r,answer:i,question:a}}}),vt={"data-viewable":`NumberBondSplit`,class:`text-h5`};function _sfc_render$3(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,vt,[r.question?(t(),d(m,{key:0},[s(n(r.question.whole)+` = `+n(r.question.part)+` + ? `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$3,`_sfc_render`);var yt=R(_t,[[`render`,_sfc_render$3]]),bt={name:F.MATH_NumberBond,fields:[{name:`whole`,type:D.INT},{name:`part`,type:D.INT}]},xt=z(function(){let e=[];for(let t=2;t<=10;t++)for(let n=1;n<t;n++)e.push({whole:t,part:n});return e},`data`),St=z(e=>{let{whole:t}=e;return{tags:[`number-bond`,`bond-${t}`],elo:950+20*t}},`seedMeta`),Ct=(oe=class NumberBond extends S{constructor(e){var _super9=(...e)=>(super(...e),O(this,`whole`,void 0),O(this,`part`,void 0),this);_super9(e),this.whole=e[0].whole,this.part=e[0].part}isCorrect(e){return this.whole-this.part===e}dataShapes(){return NumberBond.dataShapes}views(){return NumberBond.views}},O(oe,`dataShapes`,[bt]),O(oe,`views`,[gt,yt]),O(oe,`seedData`,xt()),O(oe,`seedMeta`,St),O(oe,`acceptsUserData`,!1),oe),wt=c({name:`BridgeTenScaffold`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`BridgeTenScaffold`),r=x(n),i=_(``);r.question.value=new Nt(e.data);let a=h(()=>r.question.value);return{...n,...r,answer:i,question:a}}}),Tt={"data-viewable":`BridgeTenScaffold`,class:`text-h5`};function _sfc_render$2(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,Tt,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` + `+n(r.question.b)+` = `+n(r.question.a)+` + `+n(r.question.toTen)+` + ? `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$2,`_sfc_render`);var Et=R(wt,[[`render`,_sfc_render$2]]),Dt=c({name:`BridgeTenCompact`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`BridgeTenCompact`),r=x(n),i=_(``);r.question.value=new Nt(e.data);let a=h(()=>r.question.value);return{...n,...r,answer:i,question:a}}}),Ot={"data-viewable":`BridgeTenCompact`,class:`text-h5`};function _sfc_render$1(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,Ot,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` + `+n(r.question.b)+` = 10 + ? `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}z(_sfc_render$1,`_sfc_render`);var kt=R(Dt,[[`render`,_sfc_render$1]]),At={name:F.MATH_BridgeTen,fields:[{name:`a`,type:D.INT},{name:`b`,type:D.INT}]},jt=z(function(){let e=[];for(let t=2;t<=9;t++)for(let n=2;n<=t;n++)t+n>10&&e.push({a:t,b:n});return e},`data`),Mt=z(e=>{let{a:t,b:n}=e;return{tags:[`bridge-10`],elo:1200+10*(t+n-11)}},`seedMeta`),Nt=(se=class BridgeTen extends S{constructor(e){var _super10=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),this);_super10(e),this.a=e[0].a,this.b=e[0].b}get toTen(){return 10-this.a}isCorrect(e){return this.a+this.b-10===e}dataShapes(){return BridgeTen.dataShapes}views(){return BridgeTen.views}},O(se,`dataShapes`,[At]),O(se,`views`,[Et,kt]),O(se,`seedData`,jt()),O(se,`seedMeta`,Mt),O(se,`acceptsUserData`,!1),se),Pt=c({name:`DecadeFactHorizontal`,components:{UserInputNumber:T},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(e,{emit:t}){let n=b(e,t,`DecadeFactHorizontal`),r=x(n),i=_(``);r.question.value=new zt(e.data);let a=h(()=>r.question.value);return{...n,...r,answer:i,question:a}}}),Ft={"data-viewable":`DecadeFactHorizontal`,class:`text-h5`};function _sfc_render(r,a,o,c,l,u){let p=i(`UserInputNumber`);return t(),d(`div`,Ft,[r.question?(t(),d(m,{key:0},[s(n(r.question.a)+` `+n(r.question.symbol)+` `+n(r.question.b)+` = `,1),e(p,{modelValue:r.answer,"onUpdate:modelValue":a[0]||(a[0]=e=>r.answer=e)},null,8,[`modelValue`])],64)):v(``,!0)])}var It=R(Pt,[[`render`,_sfc_render]]),Lt={name:F.MATH_DecadeFact,fields:[{name:`a`,type:D.INT},{name:`b`,type:D.INT},{name:`op`,type:D.STRING}]},Rt=function(e){return e.ADD=`ADD`,e.SUB=`SUB`,e}({}),data=function(){let e=[];for(let t=10;t<=90;t+=10)for(let n=10;n<=90;n+=10)e.push({a:t,b:n,op:Rt.ADD}),e.push({a:t+n,b:t,op:Rt.SUB});return e},seedMeta=e=>{let{a:t,b:n,op:r}=e,i=r===Rt.ADD?t+n>100:t>100,a=[`decade-fact`,r===Rt.ADD?`decade-add`:`decade-sub`];return i&&a.push(`cross-100`),{tags:a,elo:1200+(r===Rt.SUB?50:0)+(i?75:0)}},zt=(G=class DecadeFact extends S{constructor(e){var _super11=(...e)=>(super(...e),O(this,`a`,void 0),O(this,`b`,void 0),O(this,`op`,void 0),this);_super11(e),this.a=e[0].a,this.b=e[0].b,this.op=e[0].op}get symbol(){return this.op===Rt.ADD?`+`:`−`}isCorrect(e){return(this.op===Rt.ADD?this.a+this.b:this.a-this.b)===e}dataShapes(){return DecadeFact.dataShapes}views(){return DecadeFact.views}},O(G,`dataShapes`,[Lt]),O(G,`views`,[It]),O(G,`seedData`,data()),O(G,`seedMeta`,seedMeta),O(G,`acceptsUserData`,!1),G),Bt=new I(`math`,[he,we,q,Oe,Be,Ke,et,pt,Ct,Nt,zt]);export{Bt as t};
|
|
34
|
-
//# sourceMappingURL=math-D_8HiEQR-
|
|
34
|
+
//# sourceMappingURL=math-D_8HiEQR-CQynsoTm.js.map
|