Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
1a1f339
feat(connect-pairs): add useAssociateSlots composable for pair state
habibayman Jul 29, 2026
a382988
feat(connect-pairs): add AssociateInteraction static rendering and fi…
habibayman Jul 29, 2026
3228a96
feat(connect-pairs): add click only placement wiring
habibayman Jul 29, 2026
d1baa70
feat(connect-pairs): wire basic dragging functionality
habibayman Aug 5, 2026
ab97c60
fix(connect-pairs): disable & not remove matched items in the pool
habibayman Aug 5, 2026
b478c0d
fix(connect-pairs): chips stretching oversize on drag
habibayman Aug 5, 2026
d76a5fb
feat(connect-pairs): add keyboard navigation support using up/down ar…
habibayman Aug 5, 2026
00be3f3
refactor(qti): extract shared vnode/shuffle utils across interactions
habibayman Aug 5, 2026
a751149
refactor: extract useSlotListbox composable from AssociateInteraction
habibayman Aug 5, 2026
9e172f7
feat(match): add Match Interaction static rendering
habibayman Aug 5, 2026
21530b0
feat(match): add click placement for MatchInteraction
habibayman Aug 5, 2026
d13085e
feat(match): wire drag/drop for MatchInteraction
habibayman Aug 5, 2026
620ad69
fix(qti-slot): add data-focus attribute to listbox for improved acces…
habibayman Aug 10, 2026
ec1a075
feat(qti-slot): add up/down affordance for stepping values in listbox
habibayman Aug 10, 2026
8511c39
feat(match): wire keyboard a11y usage
habibayman Aug 12, 2026
bef6013
feat(match): enhance placement feedback with refusal explanations
habibayman Aug 12, 2026
c04a778
feat(match): update + highlight logic for answer fields
habibayman Aug 12, 2026
a956053
refactor(interactions): rendering of draggable chips and list items
habibayman Aug 14, 2026
2b51b8b
feat(qti-slot): enhance keyboard nav with empty select option
habibayman Aug 14, 2026
2d8b85c
fix: merge conflicts in qti items.js
habibayman Aug 14, 2026
d486e5a
fix: merge conflicts in qti items.js
habibayman Aug 16, 2026
bf69507
refactor(match): make the max-associations warning appear as soon as …
habibayman Aug 17, 2026
616e738
fix(qti-slots): disable text selection for response pool chips
habibayman Aug 17, 2026
bbc866f
fix: merge conflicts in itms.js to add custom interaction data
habibayman Aug 17, 2026
dbc0ccf
feat(gap-match): add pair ordering option to useMatchRows
habibayman Aug 18, 2026
7a7669e
refactor: add findVNodes for QTI elements nested in authored content
habibayman Aug 18, 2026
37637d6
feat(gap-match): static rendering
habibayman Aug 18, 2026
877dc67
feat(gap-match): wire click and place matching
habibayman Aug 18, 2026
b041833
feat(gap-match): wire drag/drop matching
habibayman Aug 18, 2026
18e90d6
feat(gap-match): wire keyboard a11y matching
habibayman Aug 18, 2026
a1c4550
feat(gap-match): support answer specific response pools
habibayman Aug 20, 2026
1d43b6c
fix(gap-match): highlight viable gaps on drag
habibayman Aug 20, 2026
b13226d
feat(gap-match): add support for gap width classes in styling and tests
habibayman Aug 20, 2026
7c53366
style(gap-match): filled gaps style
habibayman Aug 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions kolibri/plugins/qti_viewer/frontend/components/AnswerGuide.vue
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,20 @@
context:
'Tells the learner to complete the passage by choosing an option in each inline dropdown gap',
},
chooseThenTarget: {
message: 'Choose a response, then choose a target.',
context:
'Tells the learner how to build each pair in a connect-pairs or match interaction: pick a response from the pool, then pick the answer slot to put it in',
},
shortAnswer: {
message: 'Short answer only:',
context: 'Tells the learner to type their answer in a text entry interaction',
},
gapMatch: {
message: 'Choose a response, then choose a gap.',
context:
'Tells the learner how to fill each blank in a gap match question: pick a response from the pool, then pick the gap in the passage to put it in',
},
});

export default {
Expand Down
16 changes: 16 additions & 0 deletions kolibri/plugins/qti_viewer/frontend/components/AssessmentItem.vue
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,14 @@
import InlineChoiceInteraction from './interactions/InlineChoiceInteraction.vue';
import InlineChoice from './interactions/InlineChoice.vue';
import CustomInteraction from './interactions/CustomInteraction.vue';
import AssociateInteraction from './interactions/AssociateInteraction.vue';
import SimpleAssociableChoice from './interactions/SimpleAssociableChoice.vue';
import MatchInteraction from './interactions/MatchInteraction.vue';
import SimpleMatchSet from './interactions/SimpleMatchSet.vue';
import GapMatchInteraction from './interactions/GapMatchInteraction.vue';
import Gap from './interactions/Gap.vue';
import GapText from './interactions/GapText.vue';
import GapImg from './interactions/GapImg.vue';

const $themeTokens = themeTokens();

Expand All @@ -50,6 +58,14 @@
[InlineChoiceInteraction.tag]: InlineChoiceInteraction,
[InlineChoice.tag]: InlineChoice,
[CustomInteraction.tag]: CustomInteraction,
[AssociateInteraction.tag]: AssociateInteraction,
[SimpleAssociableChoice.tag]: SimpleAssociableChoice,
[MatchInteraction.tag]: MatchInteraction,
[SimpleMatchSet.tag]: SimpleMatchSet,
[GapMatchInteraction.tag]: GapMatchInteraction,
[Gap.tag]: Gap,
[GapText.tag]: GapText,
[GapImg.tag]: GapImg,
});

/** @typedef {import('../utils/qti/values.js').QTIValue} QTIValue */
Expand Down
Git LFS file not shown
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,23 @@ export default [
},
],
},
{
title: 'Associate',
items: [
{
identifier: 'associate-interaction-1',
title: 'Capital Cities',
},
{
identifier: 'associate-interaction-fixed',
title: 'Associate - Fixed Choice',
},
{
identifier: 'associate-interaction-images',
title: 'Associate - Images',
},
],
},
{
title: 'Match',
items: [
Expand Down Expand Up @@ -387,6 +404,10 @@ export default [
identifier: 'q6-gap-match-interaction-sv-4',
title: 'Gap Match - Gap Widths',
},
{
identifier: 'gap-match-distractor-pools',
title: 'Gap Match - Answer Specific Pools',
},
],
},
{
Expand Down
Loading
Loading