@citolab/qti-components 7.14.2 → 7.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/cdn/index.global.js +1 -1
  2. package/cdn/index.js +86 -78
  3. package/custom-elements.json +417 -1
  4. package/dist/chunks/{chunk-YD7FVKDP.js → chunk-AGV5GOTF.js} +3 -5
  5. package/dist/chunks/chunk-AGV5GOTF.js.map +1 -0
  6. package/dist/chunks/{chunk-2X2C5WI5.js → chunk-C4ELTNV7.js} +92 -33
  7. package/dist/chunks/chunk-C4ELTNV7.js.map +1 -0
  8. package/dist/chunks/{chunk-7567ZPN6.js → chunk-DGBI4IU5.js} +2 -2
  9. package/dist/chunks/{chunk-Z2FFXTKX.js → chunk-E4GR4K26.js} +15 -16
  10. package/dist/chunks/{chunk-Z2FFXTKX.js.map → chunk-E4GR4K26.js.map} +1 -1
  11. package/dist/chunks/{chunk-PT5ASWGQ.js → chunk-TN75CWLX.js} +9 -1
  12. package/dist/chunks/{chunk-PT5ASWGQ.js.map → chunk-TN75CWLX.js.map} +1 -1
  13. package/dist/exports/qti-test.d.ts +2 -2
  14. package/dist/index.d.ts +2 -2
  15. package/dist/index.js +30 -28
  16. package/dist/index.js.map +1 -1
  17. package/dist/item.css +8 -0
  18. package/dist/qti-components/index.d.ts +5 -3
  19. package/dist/qti-components/index.js +11 -9
  20. package/dist/qti-components-jsx.d.ts +65 -64
  21. package/dist/qti-item/index.js +2 -2
  22. package/dist/{qti-modal-feedback-PKbhO-3w.d.ts → qti-modal-feedback-Cp3CHVKw.d.ts} +1 -1
  23. package/dist/qti-test/index.d.ts +3 -3
  24. package/dist/qti-test/index.js +7 -7
  25. package/dist/{qti-test-Db7oNIWY.d.ts → qti-test-mmY8zNIj.d.ts} +1 -1
  26. package/dist/vscode.html-custom-data.json +18 -18
  27. package/package.json +10 -10
  28. package/dist/chunks/chunk-2X2C5WI5.js.map +0 -1
  29. package/dist/chunks/chunk-YD7FVKDP.js.map +0 -1
  30. /package/dist/chunks/{chunk-7567ZPN6.js.map → chunk-DGBI4IU5.js.map} +0 -0
@@ -382,6 +382,14 @@
382
382
  "name": "*",
383
383
  "package": "./qti-variable-declaration/qti-response-declaration/qti-response-declaration"
384
384
  }
385
+ },
386
+ {
387
+ "kind": "js",
388
+ "name": "QtiFeedback",
389
+ "declaration": {
390
+ "name": "QtiFeedback",
391
+ "module": "./qti-feedback/qti-feedback"
392
+ }
385
393
  }
386
394
  ]
387
395
  },
@@ -3441,6 +3449,25 @@
3441
3449
  }
3442
3450
  }
3443
3451
  },
3452
+ {
3453
+ "kind": "method",
3454
+ "name": "determineMaxWidth",
3455
+ "privacy": "private",
3456
+ "parameters": [
3457
+ {
3458
+ "name": "dragContainer",
3459
+ "type": {
3460
+ "text": "HTMLElement"
3461
+ }
3462
+ },
3463
+ {
3464
+ "name": "dropContainer",
3465
+ "type": {
3466
+ "text": "HTMLElement"
3467
+ }
3468
+ }
3469
+ ]
3470
+ },
3444
3471
  {
3445
3472
  "kind": "method",
3446
3473
  "name": "disableDroppable",
@@ -3847,6 +3874,16 @@
3847
3874
  "privacy": "private",
3848
3875
  "default": "null"
3849
3876
  },
3877
+ {
3878
+ "kind": "field",
3879
+ "name": "MAX_DRAGGABLE_WIDTH",
3880
+ "type": {
3881
+ "text": "number"
3882
+ },
3883
+ "privacy": "private",
3884
+ "readonly": true,
3885
+ "default": "600"
3886
+ },
3850
3887
  {
3851
3888
  "kind": "field",
3852
3889
  "name": "maxAssociations",
@@ -3857,6 +3894,24 @@
3857
3894
  "attribute": "max-associations",
3858
3895
  "reflects": true
3859
3896
  },
3897
+ {
3898
+ "kind": "method",
3899
+ "name": "measureIntrinsicSize",
3900
+ "privacy": "private",
3901
+ "return": {
3902
+ "type": {
3903
+ "text": "Promise<{ width: number; height: number }>"
3904
+ }
3905
+ },
3906
+ "parameters": [
3907
+ {
3908
+ "name": "el",
3909
+ "type": {
3910
+ "text": "HTMLElement"
3911
+ }
3912
+ }
3913
+ ]
3914
+ },
3860
3915
  {
3861
3916
  "kind": "field",
3862
3917
  "name": "MIN_DRAG_DISTANCE",
@@ -5042,6 +5097,29 @@
5042
5097
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
5043
5098
  }
5044
5099
  },
5100
+ {
5101
+ "kind": "method",
5102
+ "name": "determineMaxWidth",
5103
+ "privacy": "private",
5104
+ "parameters": [
5105
+ {
5106
+ "name": "dragContainer",
5107
+ "type": {
5108
+ "text": "HTMLElement"
5109
+ }
5110
+ },
5111
+ {
5112
+ "name": "dropContainer",
5113
+ "type": {
5114
+ "text": "HTMLElement"
5115
+ }
5116
+ }
5117
+ ],
5118
+ "inheritedFrom": {
5119
+ "name": "DragDropInteractionMixin",
5120
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
5121
+ }
5122
+ },
5045
5123
  {
5046
5124
  "kind": "method",
5047
5125
  "name": "disableDroppable",
@@ -5588,6 +5666,20 @@
5588
5666
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
5589
5667
  }
5590
5668
  },
5669
+ {
5670
+ "kind": "field",
5671
+ "name": "MAX_DRAGGABLE_WIDTH",
5672
+ "type": {
5673
+ "text": "number"
5674
+ },
5675
+ "privacy": "private",
5676
+ "readonly": true,
5677
+ "default": "600",
5678
+ "inheritedFrom": {
5679
+ "name": "DragDropInteractionMixin",
5680
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
5681
+ }
5682
+ },
5591
5683
  {
5592
5684
  "kind": "field",
5593
5685
  "name": "maxAssociations",
@@ -5602,6 +5694,28 @@
5602
5694
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
5603
5695
  }
5604
5696
  },
5697
+ {
5698
+ "kind": "method",
5699
+ "name": "measureIntrinsicSize",
5700
+ "privacy": "private",
5701
+ "return": {
5702
+ "type": {
5703
+ "text": "Promise<{ width: number; height: number }>"
5704
+ }
5705
+ },
5706
+ "parameters": [
5707
+ {
5708
+ "name": "el",
5709
+ "type": {
5710
+ "text": "HTMLElement"
5711
+ }
5712
+ }
5713
+ ],
5714
+ "inheritedFrom": {
5715
+ "name": "DragDropInteractionMixin",
5716
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
5717
+ }
5718
+ },
5605
5719
  {
5606
5720
  "kind": "field",
5607
5721
  "name": "MIN_DRAG_DISTANCE",
@@ -7441,6 +7555,29 @@
7441
7555
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
7442
7556
  }
7443
7557
  },
7558
+ {
7559
+ "kind": "method",
7560
+ "name": "determineMaxWidth",
7561
+ "privacy": "private",
7562
+ "parameters": [
7563
+ {
7564
+ "name": "dragContainer",
7565
+ "type": {
7566
+ "text": "HTMLElement"
7567
+ }
7568
+ },
7569
+ {
7570
+ "name": "dropContainer",
7571
+ "type": {
7572
+ "text": "HTMLElement"
7573
+ }
7574
+ }
7575
+ ],
7576
+ "inheritedFrom": {
7577
+ "name": "DragDropInteractionMixin",
7578
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
7579
+ }
7580
+ },
7444
7581
  {
7445
7582
  "kind": "method",
7446
7583
  "name": "disableDroppable",
@@ -7767,6 +7904,24 @@
7767
7904
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
7768
7905
  }
7769
7906
  },
7907
+ {
7908
+ "kind": "method",
7909
+ "name": "getMatches",
7910
+ "privacy": "private",
7911
+ "return": {
7912
+ "type": {
7913
+ "text": "{ source: string; target: string }[]"
7914
+ }
7915
+ },
7916
+ "parameters": [
7917
+ {
7918
+ "name": "responseVariable",
7919
+ "type": {
7920
+ "text": "ResponseVariable"
7921
+ }
7922
+ }
7923
+ ]
7924
+ },
7770
7925
  {
7771
7926
  "kind": "method",
7772
7927
  "name": "getMatchMaxValue",
@@ -7987,6 +8142,20 @@
7987
8142
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
7988
8143
  }
7989
8144
  },
8145
+ {
8146
+ "kind": "field",
8147
+ "name": "MAX_DRAGGABLE_WIDTH",
8148
+ "type": {
8149
+ "text": "number"
8150
+ },
8151
+ "privacy": "private",
8152
+ "readonly": true,
8153
+ "default": "600",
8154
+ "inheritedFrom": {
8155
+ "name": "DragDropInteractionMixin",
8156
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
8157
+ }
8158
+ },
7990
8159
  {
7991
8160
  "kind": "field",
7992
8161
  "name": "maxAssociations",
@@ -8001,6 +8170,28 @@
8001
8170
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
8002
8171
  }
8003
8172
  },
8173
+ {
8174
+ "kind": "method",
8175
+ "name": "measureIntrinsicSize",
8176
+ "privacy": "private",
8177
+ "return": {
8178
+ "type": {
8179
+ "text": "Promise<{ width: number; height: number }>"
8180
+ }
8181
+ },
8182
+ "parameters": [
8183
+ {
8184
+ "name": "el",
8185
+ "type": {
8186
+ "text": "HTMLElement"
8187
+ }
8188
+ }
8189
+ ],
8190
+ "inheritedFrom": {
8191
+ "name": "DragDropInteractionMixin",
8192
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
8193
+ }
8194
+ },
8004
8195
  {
8005
8196
  "kind": "field",
8006
8197
  "name": "MIN_DRAG_DISTANCE",
@@ -8224,6 +8415,22 @@
8224
8415
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
8225
8416
  }
8226
8417
  },
8418
+ {
8419
+ "kind": "method",
8420
+ "name": "toggleCandidateCorrection",
8421
+ "privacy": "public",
8422
+ "parameters": [
8423
+ {
8424
+ "name": "show",
8425
+ "type": {
8426
+ "text": "boolean"
8427
+ }
8428
+ }
8429
+ ],
8430
+ "type": {
8431
+ "text": "toggleCandidateCorrection(show: boolean) => void"
8432
+ }
8433
+ },
8227
8434
  {
8228
8435
  "kind": "method",
8229
8436
  "name": "toggleCorrectResponse",
@@ -9162,6 +9369,29 @@
9162
9369
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
9163
9370
  }
9164
9371
  },
9372
+ {
9373
+ "kind": "method",
9374
+ "name": "determineMaxWidth",
9375
+ "privacy": "private",
9376
+ "parameters": [
9377
+ {
9378
+ "name": "dragContainer",
9379
+ "type": {
9380
+ "text": "HTMLElement"
9381
+ }
9382
+ },
9383
+ {
9384
+ "name": "dropContainer",
9385
+ "type": {
9386
+ "text": "HTMLElement"
9387
+ }
9388
+ }
9389
+ ],
9390
+ "inheritedFrom": {
9391
+ "name": "DragDropInteractionMixin",
9392
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
9393
+ }
9394
+ },
9165
9395
  {
9166
9396
  "kind": "method",
9167
9397
  "name": "disableDroppable",
@@ -9708,6 +9938,20 @@
9708
9938
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
9709
9939
  }
9710
9940
  },
9941
+ {
9942
+ "kind": "field",
9943
+ "name": "MAX_DRAGGABLE_WIDTH",
9944
+ "type": {
9945
+ "text": "number"
9946
+ },
9947
+ "privacy": "private",
9948
+ "readonly": true,
9949
+ "default": "600",
9950
+ "inheritedFrom": {
9951
+ "name": "DragDropInteractionMixin",
9952
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
9953
+ }
9954
+ },
9711
9955
  {
9712
9956
  "kind": "field",
9713
9957
  "name": "maxAssociations",
@@ -9722,6 +9966,28 @@
9722
9966
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
9723
9967
  }
9724
9968
  },
9969
+ {
9970
+ "kind": "method",
9971
+ "name": "measureIntrinsicSize",
9972
+ "privacy": "private",
9973
+ "return": {
9974
+ "type": {
9975
+ "text": "Promise<{ width: number; height: number }>"
9976
+ }
9977
+ },
9978
+ "parameters": [
9979
+ {
9980
+ "name": "el",
9981
+ "type": {
9982
+ "text": "HTMLElement"
9983
+ }
9984
+ }
9985
+ ],
9986
+ "inheritedFrom": {
9987
+ "name": "DragDropInteractionMixin",
9988
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
9989
+ }
9990
+ },
9725
9991
  {
9726
9992
  "kind": "field",
9727
9993
  "name": "MIN_DRAG_DISTANCE",
@@ -12613,6 +12879,29 @@
12613
12879
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
12614
12880
  }
12615
12881
  },
12882
+ {
12883
+ "kind": "method",
12884
+ "name": "determineMaxWidth",
12885
+ "privacy": "private",
12886
+ "parameters": [
12887
+ {
12888
+ "name": "dragContainer",
12889
+ "type": {
12890
+ "text": "HTMLElement"
12891
+ }
12892
+ },
12893
+ {
12894
+ "name": "dropContainer",
12895
+ "type": {
12896
+ "text": "HTMLElement"
12897
+ }
12898
+ }
12899
+ ],
12900
+ "inheritedFrom": {
12901
+ "name": "DragDropInteractionMixin",
12902
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
12903
+ }
12904
+ },
12616
12905
  {
12617
12906
  "kind": "method",
12618
12907
  "name": "disableDroppable",
@@ -13196,6 +13485,20 @@
13196
13485
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
13197
13486
  }
13198
13487
  },
13488
+ {
13489
+ "kind": "field",
13490
+ "name": "MAX_DRAGGABLE_WIDTH",
13491
+ "type": {
13492
+ "text": "number"
13493
+ },
13494
+ "privacy": "private",
13495
+ "readonly": true,
13496
+ "default": "600",
13497
+ "inheritedFrom": {
13498
+ "name": "DragDropInteractionMixin",
13499
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
13500
+ }
13501
+ },
13199
13502
  {
13200
13503
  "kind": "field",
13201
13504
  "name": "maxAssociations",
@@ -13210,6 +13513,28 @@
13210
13513
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
13211
13514
  }
13212
13515
  },
13516
+ {
13517
+ "kind": "method",
13518
+ "name": "measureIntrinsicSize",
13519
+ "privacy": "private",
13520
+ "return": {
13521
+ "type": {
13522
+ "text": "Promise<{ width: number; height: number }>"
13523
+ }
13524
+ },
13525
+ "parameters": [
13526
+ {
13527
+ "name": "el",
13528
+ "type": {
13529
+ "text": "HTMLElement"
13530
+ }
13531
+ }
13532
+ ],
13533
+ "inheritedFrom": {
13534
+ "name": "DragDropInteractionMixin",
13535
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
13536
+ }
13537
+ },
13213
13538
  {
13214
13539
  "kind": "field",
13215
13540
  "name": "MIN_DRAG_DISTANCE",
@@ -14048,6 +14373,29 @@
14048
14373
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
14049
14374
  }
14050
14375
  },
14376
+ {
14377
+ "kind": "method",
14378
+ "name": "determineMaxWidth",
14379
+ "privacy": "private",
14380
+ "parameters": [
14381
+ {
14382
+ "name": "dragContainer",
14383
+ "type": {
14384
+ "text": "HTMLElement"
14385
+ }
14386
+ },
14387
+ {
14388
+ "name": "dropContainer",
14389
+ "type": {
14390
+ "text": "HTMLElement"
14391
+ }
14392
+ }
14393
+ ],
14394
+ "inheritedFrom": {
14395
+ "name": "DragDropInteractionMixin",
14396
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
14397
+ }
14398
+ },
14051
14399
  {
14052
14400
  "kind": "method",
14053
14401
  "name": "disableDroppable",
@@ -14619,6 +14967,20 @@
14619
14967
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
14620
14968
  }
14621
14969
  },
14970
+ {
14971
+ "kind": "field",
14972
+ "name": "MAX_DRAGGABLE_WIDTH",
14973
+ "type": {
14974
+ "text": "number"
14975
+ },
14976
+ "privacy": "private",
14977
+ "readonly": true,
14978
+ "default": "600",
14979
+ "inheritedFrom": {
14980
+ "name": "DragDropInteractionMixin",
14981
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
14982
+ }
14983
+ },
14622
14984
  {
14623
14985
  "kind": "field",
14624
14986
  "name": "maxAssociations",
@@ -14633,6 +14995,28 @@
14633
14995
  "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
14634
14996
  }
14635
14997
  },
14998
+ {
14999
+ "kind": "method",
15000
+ "name": "measureIntrinsicSize",
15001
+ "privacy": "private",
15002
+ "return": {
15003
+ "type": {
15004
+ "text": "Promise<{ width: number; height: number }>"
15005
+ }
15006
+ },
15007
+ "parameters": [
15008
+ {
15009
+ "name": "el",
15010
+ "type": {
15011
+ "text": "HTMLElement"
15012
+ }
15013
+ }
15014
+ ],
15015
+ "inheritedFrom": {
15016
+ "name": "DragDropInteractionMixin",
15017
+ "module": "src/lib/qti-components/qti-interaction/internal/drag-drop/drag-drop-interaction-mixin.ts"
15018
+ }
15019
+ },
14636
15020
  {
14637
15021
  "kind": "field",
14638
15022
  "name": "MIN_DRAG_DISTANCE",
@@ -23564,6 +23948,14 @@
23564
23948
  },
23565
23949
  "default": "{ render: args => { return html`<qti-item> <!-- <div style=\"display: flex; flex-direction: column; gap: 1rem;\"> --> <item-container style=\"width: 400px; height: 350px; display: block;\" item-url=${args['item-url'] as string}> <template> <style> qti-assessment-item { padding: 1rem; display: block; aspect-ratio: 4 / 3; width: 800px; border: 2px solid blue; transform: scale(0.5); transform-origin: top left; } </style> </template> </item-container> <item-show-candidate-correction ${spread(args)}></item-show-candidate-correction> <!-- </div> --> </qti-item>`; }, play: async ({ canvasElement, step }) => { // wait for qti-simple-choice to be rendered const canvas = within(canvasElement); // const choices = await canvas.findAllByShadowRole('radio'); const choiceA: QtiSimpleChoice = await canvas.findByShadowText('You must stay with your luggage at all times.'); const choiceB: QtiSimpleChoice = await canvas.findByShadowText('Do not let someone else look after your luggage.'); const choiceC: QtiSimpleChoice = await canvas.findByShadowText('Remember your luggage when you leave.'); const showCorrectButton = canvas.getAllByShadowText(/Show candidate correction/i)[0]; await step('Click on the Show candidate correction button', async () => { await choiceA.click(); await showCorrectButton.click(); await step('Verify candidate correction is applied', async () => { expect(choiceA.internals.states.has('candidate-correct')).toBe(true); expect(choiceB.internals.states.has('candidate-correct')).toBe(false); expect(choiceC.internals.states.has('candidate-correct')).toBe(false); expect(choiceA.internals.states.has('candidate-incorrect')).toBe(false); expect(choiceB.internals.states.has('candidate-incorrect')).toBe(false); expect(choiceC.internals.states.has('candidate-incorrect')).toBe(false); }); await step('Click on the Show Candidate Correction again', async () => { expect(canvas.queryByShadowText(/Show candidate correction/i)).toBeNull(); expect(canvas.getAllByShadowText(/Hide candidate correction/i).length).toBe(1); await showCorrectButton.click(); await choiceA.click(); // Deselect option expect(choiceA.internals.states.has('candidate-correct')).toBe(false); expect(choiceB.internals.states.has('candidate-correct')).toBe(false); expect(choiceC.internals.states.has('candidate-correct')).toBe(false); expect(choiceA.internals.states.has('candidate-incorrect')).toBe(false); expect(choiceB.internals.states.has('candidate-incorrect')).toBe(false); expect(choiceC.internals.states.has('candidate-incorrect')).toBe(false); }); await step('Change answer after showing Candidate Correction', async () => { expect(canvas.getAllByShadowText(/Show candidate correction/i).length).toBe(1); await choiceA.click(); await showCorrectButton.click(); await choiceB.click(); expect(choiceA.internals.states.has('candidate-correct')).toBe(false); expect(choiceB.internals.states.has('candidate-correct')).toBe(false); expect(choiceC.internals.states.has('candidate-correct')).toBe(false); expect(choiceA.internals.states.has('candidate-incorrect')).toBe(false); expect(choiceB.internals.states.has('candidate-incorrect')).toBe(false); expect(choiceC.internals.states.has('candidate-incorrect')).toBe(false); expect(canvas.queryByShadowText(/Hide candidate correction/i)).toBeNull(); await choiceB.click(); // Deselect option }); }); } }"
23566
23950
  },
23951
+ {
23952
+ "kind": "variable",
23953
+ "name": "GapMatch",
23954
+ "type": {
23955
+ "text": "Story"
23956
+ },
23957
+ "default": "{ args: { 'item-url': 'assets/qti-test-package/items/gap_match.xml' }, render: args => html` <qti-item> <div> <item-container style=\"display: block;width: 400px; height: 350px;\" item-url=${args['item-url'] as string}> <template> <style> qti-assessment-item { padding: 1rem; display: block; aspect-ratio: 4 / 3; width: 800px; border: 2px solid blue; transform: scale(0.5); transform-origin: top left; } </style> </template> </item-container> <item-show-candidate-correction></item-show-candidate-correction> </div> </qti-item>`, play: async ({ canvasElement, step }) => { const canvas = within(canvasElement); const interaction = await getAssessmentItemFromItemContainer(canvasElement); const showCorrectButton = await canvas.findByShadowText(/Show candidate correction/i); const matchItem1 = (await canvas.findByShadowText('winter')) as QtiGapMatchInteraction; const matchItem2 = (await canvas.findByShadowText('spring')) as QtiGapMatchInteraction; const dropZones = interaction.querySelectorAll(`qti-gap`); const dropZone1 = dropZones[0] const dropZone2 = dropZones[1] await step('Drag and drop match interaction items', async () => { await drag(matchItem1, { to: dropZone1 }); await drag(matchItem2, { to: dropZone2 }); await showCorrectButton.click(); await step('Verify candidate correction state is applied', async () => { const matchItem1List = Array.from(await canvas.findAllByShadowText('winter')); const matchItem1CandidateResponse = matchItem1List[1] as QtiGapMatchInteraction; const matchItem2List = Array.from(await canvas.findAllByShadowText('spring')); const matchItem2CandidateResponse = matchItem2List[1] as QtiGapMatchInteraction; expect(matchItem1CandidateResponse.internals.states.has('candidate-correct')).toBe(true); expect(matchItem2CandidateResponse.internals.states.has('candidate-correct')).toBe(false); expect(matchItem1CandidateResponse.internals.states.has('candidate-incorrect')).toBe(false); expect(matchItem2CandidateResponse.internals.states.has('candidate-incorrect')).toBe(true); }); }); } }"
23958
+ },
23567
23959
  {
23568
23960
  "kind": "variable",
23569
23961
  "name": "InlineChoice",
@@ -23646,6 +24038,14 @@
23646
24038
  "module": "src/lib/qti-item/components/item-show-candidate-correction.stories.ts"
23647
24039
  }
23648
24040
  },
24041
+ {
24042
+ "kind": "js",
24043
+ "name": "GapMatch",
24044
+ "declaration": {
24045
+ "name": "GapMatch",
24046
+ "module": "src/lib/qti-item/components/item-show-candidate-correction.stories.ts"
24047
+ }
24048
+ },
23649
24049
  {
23650
24050
  "kind": "js",
23651
24051
  "name": "InlineChoice",
@@ -23928,6 +24328,14 @@
23928
24328
  },
23929
24329
  "default": "{ args: { 'item-url': 'assets/qti-test-package/items/gap_match.xml' // Set the new item URL here }, render: args => html` <qti-item> <div> <item-container style=\"display: block;width: 400px; height: 350px;\" item-url=${args['item-url'] as string}> <template> <style> qti-assessment-item { padding: 1rem; display: block; aspect-ratio: 4 / 3; width: 800px; border: 2px solid blue; transform: scale(0.5); transform-origin: top left; } </style> </template> </item-container> <item-show-correct-response ${spread(args)}></item-show-correct-response> </div> </qti-item>`, play: async ({ canvasElement, step }) => { const canvas = within(canvasElement); const interaction = await getAssessmentItemFromItemContainer(canvasElement); const showCorrectButton = canvas.getAllByShadowText(/Show correct/i)[0]; await step('Click on the Show Correct button', async () => { await showCorrectButton.click(); const correctOptions = interaction.querySelectorAll(`[class=\"correct-option\"]`); expect(correctOptions.length).toBe(2); expect(correctOptions[0].textContent).toBe('winter'); expect(correctOptions[1].textContent).toBe('summer'); }); } }"
23930
24330
  },
24331
+ {
24332
+ "kind": "variable",
24333
+ "name": "GapMatchCorrectResponse",
24334
+ "type": {
24335
+ "text": "Story"
24336
+ },
24337
+ "default": "{ args: { 'item-url': 'assets/qti-test-package/items/gap_match.xml' }, render: args => html`<qti-item> <div> <item-container style=\"display: block; width: 400px; height: 350px;\" item-url=${args['item-url'] as string}> <template> <style> qti-assessment-item { padding: 1rem; display: block; aspect-ratio: 4 / 3; width: 800px; border: 2px solid blue; transform: scale(0.5); transform-origin: top left; } </style> </template> </item-container> <item-show-correct-response></item-show-correct-response> </div> </qti-item>`, play: async ({ canvasElement, step }) => { const canvas = within(canvasElement); const showCorrectButton = await canvas.findByShadowText(/Show correct/i); const interaction = await getAssessmentItemFromItemContainer(canvasElement); const matchItem1 = (await canvas.findByShadowText('winter')) as QtiGapMatchInteraction; const matchItem2 = (await canvas.findByShadowText('spring')) as QtiGapMatchInteraction; const dropZones = interaction.querySelectorAll(`qti-gap`); const dropZone1 = dropZones[0] const dropZone2 = dropZones[1] await step('Drag and drop match interaction items', async () => { await drag(matchItem1, { to: dropZone1 }); await drag(matchItem2, { to: dropZone2 }); await showCorrectButton.click(); await step('Verify correct response is shown', async () => { const correctResponses = interaction.querySelectorAll('[class=\"correct-option\"]'); expect(correctResponses.length).toBe(2); expect(correctResponses[0].textContent).toBe('winter'); expect(correctResponses[1].textContent).toBe('summer'); }); }); } }"
24338
+ },
23931
24339
  {
23932
24340
  "kind": "variable",
23933
24341
  "name": "GraphicAssociate",
@@ -24006,7 +24414,7 @@
24006
24414
  "type": {
24007
24415
  "text": "Story"
24008
24416
  },
24009
- "default": "{ args: { 'item-url': 'assets/qti-item/example-choice-multiple-item.xml' // Set the new item URL here }, render: args => html` <qti-item> <div> <item-container style=\"display: block;width: 400px; height: 350px;\" item-url=${args['item-url'] as string}> <template> <style> qti-assessment-item { padding: 1rem; display: block; aspect-ratio: 4 / 3; width: 800px; border: 2px solid blue; transform: scale(0.5); transform-origin: top left; } </style> </template> </item-container> <item-show-correct-response ${spread(args)}></item-show-correct-response> </div> </qti-item>`, play: async ({ canvasElement, step }) => { const item = document.querySelector('qti-item'); item.configContext = { correctResponseMode: 'full' }; const canvas = within(canvasElement); const showCorrectButton = await canvas.findByShadowText(/Show correct/i); await step('Select the correct response mode full', async () => { await fireEvent.click(showCorrectButton); await step('Verify correct response full state is applied', async () => { const fullCorrectResponse = await canvas.findByShadowRole('full-correct-response'); expect(fullCorrectResponse).toBeVisible(); const interaction = fullCorrectResponse.querySelector('qti-choice-interaction'); const choices = Array.from(interaction.querySelectorAll('qti-simple-choice')); await interaction.updateComplete; expect(choices[0].internals.states.has('--checked')).toBe(true); expect(choices[1].internals.states.has('--checked')).toBe(true); expect(choices[2].internals.states.has('--checked')).toBe(false); }); }); } }"
24417
+ "default": "{ args: { 'item-url': 'assets/qti-item/example-choice-multiple-item.xml' // Set the new item URL here }, render: args => html` <qti-item> <div> <item-container style=\"display: block;width: 400px; height: 350px;\" item-url=${args['item-url'] as string}> <template> <style> qti-assessment-item { padding: 1rem; display: block; aspect-ratio: 4 / 3; width: 800px; border: 2px solid blue; transform: scale(0.5); transform-origin: top left; } </style> </template> </item-container> <item-show-correct-response ${spread(args)}></item-show-correct-response> </div> </qti-item>`, play: async ({ canvasElement, step }) => { const item = document.querySelector('qti-item'); item.configContext = { correctResponseMode: 'full', }; const canvas = within(canvasElement); const showCorrectButton = await canvas.findByShadowText(/Show correct/i); await step('Select the correct response mode full', async () => { await fireEvent.click(showCorrectButton); await step('Verify correct response full state is applied', async () => { const fullCorrectResponse = await canvas.findByShadowRole('full-correct-response'); expect(fullCorrectResponse).toBeVisible(); const interaction = fullCorrectResponse.querySelector('qti-choice-interaction'); const choices = Array.from(interaction.querySelectorAll('qti-simple-choice')); await interaction.updateComplete; expect(choices[0].internals.states.has('--checked')).toBe(true); expect(choices[1].internals.states.has('--checked')).toBe(true); expect(choices[2].internals.states.has('--checked')).toBe(false); }); }); } }"
24010
24418
  },
24011
24419
  {
24012
24420
  "kind": "variable",
@@ -24114,6 +24522,14 @@
24114
24522
  "module": "src/lib/qti-item/components/item-show-correct-response.stories.ts"
24115
24523
  }
24116
24524
  },
24525
+ {
24526
+ "kind": "js",
24527
+ "name": "GapMatchCorrectResponse",
24528
+ "declaration": {
24529
+ "name": "GapMatchCorrectResponse",
24530
+ "module": "src/lib/qti-item/components/item-show-correct-response.stories.ts"
24531
+ }
24532
+ },
24117
24533
  {
24118
24534
  "kind": "js",
24119
24535
  "name": "GraphicAssociate",
@@ -5,10 +5,6 @@ import {
5
5
  __decorateClass
6
6
  } from "./chunk-H2JE6IVU.js";
7
7
 
8
- // src/lib/qti-components/qti-feedback/qti-modal-feedback/qti-modal-feedback.ts
9
- import { css, html } from "lit";
10
- import { customElement } from "lit/decorators.js";
11
-
12
8
  // src/lib/qti-components/qti-feedback/qti-feedback.ts
13
9
  import { consume } from "@lit/context";
14
10
  import { LitElement } from "lit";
@@ -82,6 +78,8 @@ __decorateClass([
82
78
  ], QtiFeedback.prototype, "_context", 2);
83
79
 
84
80
  // src/lib/qti-components/qti-feedback/qti-modal-feedback/qti-modal-feedback.ts
81
+ import { css, html } from "lit";
82
+ import { customElement } from "lit/decorators.js";
85
83
  var QtiModalFeedback = class extends QtiFeedback {
86
84
  render() {
87
85
  return html`
@@ -233,4 +231,4 @@ export {
233
231
  QtiFeedback,
234
232
  QtiModalFeedback
235
233
  };
236
- //# sourceMappingURL=chunk-YD7FVKDP.js.map
234
+ //# sourceMappingURL=chunk-AGV5GOTF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/qti-components/qti-feedback/qti-feedback.ts","../../src/lib/qti-components/internal/utils.ts","../../src/lib/qti-components/qti-feedback/qti-modal-feedback/qti-modal-feedback.ts","../../src/lib/decorators/live-query.ts","../../src/lib/decorators/prop-internal-state.ts"],"sourcesContent":["import { consume } from '@lit/context';\nimport { LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\n\nimport { IsNullOrUndefined } from '../internal/utils';\nimport { itemContext } from '../../exports/qti-assessment-item.context';\n\nimport type { ItemContext } from '../../exports/item.context';\n\nexport abstract class QtiFeedback extends LitElement {\n @property({ type: String, attribute: 'show-hide' })\n protected showHide: string;\n\n @property({ type: String, attribute: 'outcome-identifier' })\n public outcomeIdentifier: string;\n\n @property({ type: String })\n protected identifier: string;\n\n @property({ type: String, attribute: false })\n public showStatus: string;\n\n @consume({ context: itemContext, subscribe: true })\n @state()\n private _context?: ItemContext;\n\n public override connectedCallback() {\n super.connectedCallback();\n this.dispatchEvent(\n new CustomEvent<QtiFeedback>('qti-register-feedback', {\n bubbles: true,\n composed: true,\n detail: this\n })\n );\n }\n\n public checkShowFeedback(outcomeIdentifier: string) {\n const outcomeVariable = this._context.variables.find(v => v.identifier === outcomeIdentifier) || null;\n if (this.outcomeIdentifier !== outcomeIdentifier || !outcomeVariable) return;\n let isFound = false;\n if (Array.isArray(outcomeVariable.value)) {\n isFound = outcomeVariable.value.includes(this.identifier);\n } else {\n isFound =\n (!IsNullOrUndefined(this.identifier) &&\n !IsNullOrUndefined(outcomeVariable?.value) &&\n this.identifier === outcomeVariable.value) ||\n false;\n }\n\n this.showFeedback(isFound);\n }\n\n private showFeedback(value: boolean) {\n this.showStatus = (value && this.showHide === 'show') || (!value && this.showHide === 'hide') ? 'on' : 'off';\n }\n}\n","export const decimalSeparator = () => {\n return new Intl.NumberFormat().format(0.1).replace(/\\d/g, '');\n};\n\nexport const convertNumberToUniversalFormat = (number: number | string) => {\n // check if type is string\n if (typeof number === 'string') {\n return number;\n }\n const dSep = decimalSeparator();\n if (dSep === '.') {\n return number.toLocaleString();\n } else {\n return number.toString().replace('.', '').replace(dSep, '.');\n }\n};\n\nexport function IsNullOrUndefined(value: unknown) {\n return value === null || value === undefined;\n}\n\nexport function removeDoubleSlashes(str: string) {\n const singleForwardSlashes = str\n .replace(/([^:]\\/)\\/+/g, '$1')\n .replace(/\\/\\//g, '/')\n .replace('http:/', 'http://')\n .replace('https:/', 'https://');\n return singleForwardSlashes;\n}\n","import { css, html } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport { QtiFeedback } from '../qti-feedback';\n\n@customElement('qti-modal-feedback')\nexport class QtiModalFeedback extends QtiFeedback {\n static override styles = css`\n .qti-dialog {\n background: var(--qti-bg);\n border: var(--qti-border-thickness) var(--qti-border-style) var(--qti-border-color);\n border-radius: var(--qti-border-radius);\n padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1000;\n width: auto;\n max-width: 90%;\n }\n\n .button {\n border-radius: var(--qti-border-radius);\n padding: var(--qti-padding-vertical) var(--qti-padding-horizontal);\n background-color: var(--qti-bg-active);\n border: var(--qti-border-active);\n cursor: pointer;\n position: relative;\n display: inline-block;\n }\n\n .button:hover {\n background-color: var(--qti-hover-bg);\n }\n\n .button:disabled {\n background-color: var(--qti-disabled-bg);\n color: var(--qti-disabled-color);\n cursor: not-allowed;\n }\n\n .button:focus {\n outline: var(--qti-focus-border-width) solid var(--qti-focus-color);\n }\n `;\n\n override render() {\n return html`\n <dialog class=\"qti-dialog\" part=\"feedback\" ?open=\"${this.showStatus === 'on'}\">\n <slot></slot>\n <div style=\"margin-top: var(--qti-gap-size); text-align: center;\">\n <button class=\"button close-button\" @click=\"${this.closeFeedback}\">Close</button>\n </div>\n </dialog>\n `;\n }\n\n openFeedback() {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null;\n if (dialog && !dialog.open) {\n dialog.showModal();\n }\n }\n\n closeFeedback() {\n const dialog = this.shadowRoot?.querySelector('dialog') as HTMLDialogElement | null;\n if (dialog && dialog.open) {\n dialog.close();\n this.showStatus = 'off';\n }\n }\n\n public connectedCallback(): void {\n super.connectedCallback();\n if (this.showStatus === 'on') {\n this.openFeedback();\n }\n }\n\n protected updated(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('showStatus')) {\n if (this.showStatus === 'on') {\n this.openFeedback();\n } else {\n this.closeFeedback();\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qti-modal-feedback': QtiModalFeedback;\n }\n}\n","import type { LitElement } from 'lit';\n\ntype LiveQueryHandler = (added: Element[], removed: Element[]) => void;\ntype LiveQueryHandlerKeys<T extends object> = {\n [K in keyof T]-?: T[K] extends LiveQueryHandler ? K : never;\n}[keyof T];\n\ninterface LiveQueryOptions {\n /**\n * If true, will only start watching after the initial update/render\n */\n waitUntilFirstUpdate?: boolean;\n}\n\nexport function liveQuery(querySelector: string, options?: LiveQueryOptions) {\n return <ElemClass extends LitElement>(proto: ElemClass, decoratedFnName: LiveQueryHandlerKeys<ElemClass>): void => {\n const { connectedCallback, disconnectedCallback } = proto;\n\n proto.connectedCallback = function (this: ElemClass) {\n connectedCallback.call(this);\n\n const handler = this[decoratedFnName] as unknown as LiveQueryHandler;\n\n const callback = (mutationList: MutationRecord[]) => {\n const added: Element[] = [];\n const removed: Element[] = [];\n\n for (const m of mutationList) {\n if (m.type !== 'childList') continue;\n\n m.addedNodes.forEach(n => {\n if (n.nodeType !== 1) return;\n const el = n as Element;\n if (el.matches?.(querySelector)) added.push(el);\n added.push(...(el.querySelectorAll?.(querySelector) ?? []));\n });\n\n m.removedNodes.forEach(n => {\n if (n.nodeType !== 1) return;\n const el = n as Element;\n if (el.matches?.(querySelector)) removed.push(el);\n removed.push(...(el.querySelectorAll?.(querySelector) ?? []));\n });\n }\n\n // deduplicate added and removed (might be multiples since we observe both light and shadow DOM)\n const dedupe = (arr: Element[]) => Array.from(new Set(arr));\n const A = dedupe(added);\n const R = dedupe(removed);\n\n if (A.length || R.length) {\n handler.call(this, A, R);\n }\n };\n\n // observe both light and shadow DOM\n const obsLight = new MutationObserver(callback);\n obsLight.observe(this, { childList: true, subtree: true });\n\n const obsShadow = this.shadowRoot ? new MutationObserver(callback) : null;\n obsShadow?.observe(this.shadowRoot, { childList: true, subtree: true });\n\n (this as any).__lqObservers = [obsLight, obsShadow].filter((o): o is MutationObserver => !!o);\n\n const fireInitial = async () => {\n if (options?.waitUntilFirstUpdate && 'updateComplete' in this) {\n await (this as any).updateComplete;\n }\n const initial = [\n ...this.querySelectorAll(querySelector),\n ...(this.shadowRoot?.querySelectorAll(querySelector) ?? [])\n ] as Element[];\n if (initial.length) handler.call(this, initial, []);\n };\n\n void fireInitial();\n };\n\n proto.disconnectedCallback = function (this: ElemClass) {\n disconnectedCallback.call(this);\n (this as any).__lqObservers?.forEach((o: MutationObserver) => o.disconnect());\n (this as any).__lqObservers = undefined;\n };\n };\n}\n","import { property } from 'lit/decorators.js';\n\nimport type { ReactiveElement } from 'lit';\nimport type { PropertyDeclaration } from 'lit';\n\n// Extended decorator options\ninterface InternalStateOptions extends PropertyDeclaration {\n aria?: string; // Corresponding ARIA attribute, e.g., 'aria-disabled'\n}\n\nexport function propInternalState(options: InternalStateOptions) {\n return (protoOrDescriptor: any, name: string) => {\n // Apply the default Lit `@property` decorator\n property(options)(protoOrDescriptor, name);\n\n // Intercept the property descriptor to enhance functionality\n const key = `__${name}`; // Internal backing field\n\n Object.defineProperty(protoOrDescriptor, name, {\n get() {\n return this[key];\n },\n set(value: any) {\n const oldValue = this[key];\n this[key] = value;\n\n // Trigger updates if value changes\n if (oldValue !== value) {\n // Update internals state\n if (this._internals?.states) {\n const stateName = name.toLowerCase();\n if (value) {\n this._internals.states.add(`--${stateName}`);\n } else {\n this._internals.states.delete(`--${stateName}`);\n }\n }\n\n // Update ARIA attributes if specified\n if (options.aria && this._internals) {\n const ariaAttribute = options.aria;\n if (value) {\n this._internals[ariaAttribute] = 'true';\n } else {\n this._internals[ariaAttribute] = null;\n }\n }\n\n // Request an update\n (this as ReactiveElement).requestUpdate(name, oldValue);\n }\n },\n configurable: true,\n enumerable: true\n });\n };\n}\n"],"mappings":"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","names":["property"]}