@pie-element/mc-populated-blank 0.2.11 → 0.2.13-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configure.js +2 -0
- package/dist/author/index.d.ts +0 -1
- package/dist/author/index.js +292 -171
- package/dist/author/index.js.map +1 -1
- package/dist/controller/defaults.d.ts +0 -1
- package/dist/controller/index.d.ts +0 -1
- package/dist/controller/index.js.map +1 -1
- package/dist/delivery/computeAudioMode.d.ts +0 -1
- package/dist/delivery/computeChoiceCorrectness.d.ts +0 -1
- package/dist/delivery/computeDisplayState.d.ts +0 -1
- package/dist/delivery/computeLayoutProfile.d.ts +0 -1
- package/dist/delivery/computeLayoutStyle.d.ts +0 -1
- package/dist/delivery/index.d.ts +0 -1
- package/dist/delivery/index.js +409 -284
- package/dist/delivery/index.js.map +1 -1
- package/dist/delivery/variant-css-map.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.iife.d.ts +0 -1
- package/dist/index.iife.js +6 -6
- package/dist/index.js +409 -284
- package/dist/index.js.map +1 -1
- package/dist/print/index.d.ts +0 -1
- package/dist/print/index.js +363 -238
- package/dist/print/index.js.map +1 -1
- package/dist/runtime-support.d.ts +12 -0
- package/dist/runtime-support.js +14 -0
- package/dist/runtime-support.js.map +1 -0
- package/dist/shared/layoutLimits.d.ts +0 -1
- package/dist/shared/types.d.ts +0 -1
- package/package.json +21 -18
- package/dist/author/index.d.ts.map +0 -1
- package/dist/controller/defaults.d.ts.map +0 -1
- package/dist/controller/index.d.ts.map +0 -1
- package/dist/controller/index.test.d.ts +0 -63
- package/dist/controller/index.test.d.ts.map +0 -1
- package/dist/delivery/AudioPlayer.test.d.ts +0 -2
- package/dist/delivery/AudioPlayer.test.d.ts.map +0 -1
- package/dist/delivery/ChoiceRow.test.d.ts +0 -2
- package/dist/delivery/ChoiceRow.test.d.ts.map +0 -1
- package/dist/delivery/ClozeMarker.test.d.ts +0 -2
- package/dist/delivery/ClozeMarker.test.d.ts.map +0 -1
- package/dist/delivery/McPopulatedBlank.transcript.test.d.ts +0 -2
- package/dist/delivery/McPopulatedBlank.transcript.test.d.ts.map +0 -1
- package/dist/delivery/computeAudioMode.d.ts.map +0 -1
- package/dist/delivery/computeAudioMode.test.d.ts +0 -2
- package/dist/delivery/computeAudioMode.test.d.ts.map +0 -1
- package/dist/delivery/computeChoiceCorrectness.d.ts.map +0 -1
- package/dist/delivery/computeChoiceCorrectness.test.d.ts +0 -19
- package/dist/delivery/computeChoiceCorrectness.test.d.ts.map +0 -1
- package/dist/delivery/computeDisplayState.d.ts.map +0 -1
- package/dist/delivery/computeDisplayState.test.d.ts +0 -38
- package/dist/delivery/computeDisplayState.test.d.ts.map +0 -1
- package/dist/delivery/computeLayoutProfile.d.ts.map +0 -1
- package/dist/delivery/computeLayoutProfile.test.d.ts +0 -2
- package/dist/delivery/computeLayoutProfile.test.d.ts.map +0 -1
- package/dist/delivery/computeLayoutStyle.d.ts.map +0 -1
- package/dist/delivery/computeLayoutStyle.test.d.ts +0 -2
- package/dist/delivery/computeLayoutStyle.test.d.ts.map +0 -1
- package/dist/delivery/index.d.ts.map +0 -1
- package/dist/delivery/variant-css-map.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.iife.d.ts.map +0 -1
- package/dist/print/index.d.ts.map +0 -1
- package/dist/shared/layoutLimits.d.ts.map +0 -1
- package/dist/shared/types.d.ts.map +0 -1
- package/src/author/Author.svelte +0 -41
- package/src/author/index.ts +0 -28
- package/src/controller/defaults.ts +0 -61
- package/src/controller/index.test.ts +0 -428
- package/src/controller/index.ts +0 -372
- package/src/delivery/AudioPlayer.svelte +0 -246
- package/src/delivery/AudioPlayer.test.ts +0 -149
- package/src/delivery/ChoiceRow.svelte +0 -222
- package/src/delivery/ChoiceRow.test.ts +0 -179
- package/src/delivery/ClozeMarker.svelte +0 -83
- package/src/delivery/ClozeMarker.test.ts +0 -128
- package/src/delivery/McPopulatedBlank.svelte +0 -739
- package/src/delivery/McPopulatedBlank.transcript.test.ts +0 -154
- package/src/delivery/computeAudioMode.test.ts +0 -40
- package/src/delivery/computeAudioMode.ts +0 -11
- package/src/delivery/computeChoiceCorrectness.test.ts +0 -120
- package/src/delivery/computeChoiceCorrectness.ts +0 -42
- package/src/delivery/computeDisplayState.test.ts +0 -274
- package/src/delivery/computeDisplayState.ts +0 -101
- package/src/delivery/computeLayoutProfile.test.ts +0 -163
- package/src/delivery/computeLayoutProfile.ts +0 -72
- package/src/delivery/computeLayoutStyle.test.ts +0 -168
- package/src/delivery/computeLayoutStyle.ts +0 -128
- package/src/delivery/cqt-css/sel-r1-base.css +0 -59
- package/src/delivery/cqt-css/sel-r1-g-stem.css +0 -14
- package/src/delivery/cqt-css/sel-r1-gg-plus.css +0 -12
- package/src/delivery/cqt-css/sel-r1-ggplus.css +0 -17
- package/src/delivery/cqt-css/sel-r1-gplusggg.css +0 -25
- package/src/delivery/cqt-css/sel-r1-plusggg.css +0 -17
- package/src/delivery/cqt-css/sel-r1-s3.css +0 -85
- package/src/delivery/cqt-css/sel-vic.css +0 -99
- package/src/delivery/cqt-css/sr-vic.css +0 -63
- package/src/delivery/index.ts +0 -94
- package/src/delivery/variant-css-map.ts +0 -124
- package/src/index.iife.ts +0 -13
- package/src/index.ts +0 -1
- package/src/print/Print.svelte +0 -95
- package/src/print/index.ts +0 -18
- package/src/shared/layoutLimits.ts +0 -76
- package/src/shared/types.ts +0 -84
- package/src/types/css-raw.d.ts +0 -4
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, afterEach } from 'vitest';
|
|
2
|
-
import { mount, unmount, flushSync } from 'svelte';
|
|
3
|
-
import ClozeMarker from './ClozeMarker.svelte';
|
|
4
|
-
|
|
5
|
-
const BASE = {
|
|
6
|
-
blankWidth: '8rem',
|
|
7
|
-
blankBorderWidth: '2px',
|
|
8
|
-
ariaLabel: 'Selected answer',
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const mounts: Array<{ target: HTMLElement; component: ReturnType<typeof mount> }> = [];
|
|
12
|
-
|
|
13
|
-
function mountSlot(props: Record<string, unknown>) {
|
|
14
|
-
const target = document.createElement('div');
|
|
15
|
-
document.body.appendChild(target);
|
|
16
|
-
const component = mount(ClozeMarker, { target, props });
|
|
17
|
-
mounts.push({ target, component });
|
|
18
|
-
flushSync();
|
|
19
|
-
return target;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
afterEach(() => {
|
|
23
|
-
for (const { target, component } of mounts.splice(0)) {
|
|
24
|
-
unmount(component);
|
|
25
|
-
target.remove();
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('ClozeMarker — ARIA contract', () => {
|
|
30
|
-
it('renders a span with role=status', () => {
|
|
31
|
-
const target = mountSlot({ ...BASE });
|
|
32
|
-
const span = target.querySelector('.pie-blank-slot') as HTMLElement;
|
|
33
|
-
expect(span.getAttribute('role')).toBe('status');
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('has aria-live=polite and aria-atomic=true', () => {
|
|
37
|
-
const target = mountSlot({ ...BASE });
|
|
38
|
-
const span = target.querySelector('.pie-blank-slot') as HTMLElement;
|
|
39
|
-
expect(span.getAttribute('aria-live')).toBe('polite');
|
|
40
|
-
expect(span.getAttribute('aria-atomic')).toBe('true');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('forwards ariaLabel to aria-label', () => {
|
|
44
|
-
const target = mountSlot({ ...BASE, ariaLabel: 'Your answer' });
|
|
45
|
-
const span = target.querySelector('.pie-blank-slot') as HTMLElement;
|
|
46
|
-
expect(span.getAttribute('aria-label')).toBe('Your answer');
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
describe('ClozeMarker — layout props', () => {
|
|
51
|
-
it('applies blankWidth and blankBorderWidth as inline styles', () => {
|
|
52
|
-
const target = mountSlot({ ...BASE, blankWidth: '10rem', blankBorderWidth: '4px' });
|
|
53
|
-
const span = target.querySelector('.pie-blank-slot') as HTMLElement;
|
|
54
|
-
expect(span.style.width).toBe('10rem');
|
|
55
|
-
expect(span.style.borderBottomWidth).toBe('4px');
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('applies standalone classes when isStandalone=true', () => {
|
|
59
|
-
const target = mountSlot({ ...BASE, isStandalone: true });
|
|
60
|
-
const span = target.querySelector('.pie-blank-slot') as HTMLElement;
|
|
61
|
-
expect(span.classList.contains('cloze-marker-standalone')).toBe(true);
|
|
62
|
-
expect(span.classList.contains('pie-blank-slot-standalone')).toBe(true);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('does not apply standalone classes when isStandalone=false', () => {
|
|
66
|
-
const target = mountSlot({ ...BASE, isStandalone: false });
|
|
67
|
-
const span = target.querySelector('.pie-blank-slot') as HTMLElement;
|
|
68
|
-
expect(span.classList.contains('cloze-marker-standalone')).toBe(false);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
describe('ClozeMarker — content modes', () => {
|
|
73
|
-
it('renders empty placeholder when no choice is set', () => {
|
|
74
|
-
const target = mountSlot({ ...BASE });
|
|
75
|
-
expect(target.querySelector('.cloze-marker-empty')).not.toBeNull();
|
|
76
|
-
expect(target.querySelector('.pie-blank-value')).toBeNull();
|
|
77
|
-
expect(target.querySelector('img')).toBeNull();
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('renders text value when displayChoiceLabelHtml is set', () => {
|
|
81
|
-
const target = mountSlot({ ...BASE, displayChoiceLabelHtml: '<p>Look</p>' });
|
|
82
|
-
expect(target.querySelector('.pie-blank-value')).not.toBeNull();
|
|
83
|
-
expect(target.querySelector('.cloze-marker-empty')).toBeNull();
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('renders image when choiceMode=image and displayChoice has imageUrl', () => {
|
|
87
|
-
const target = mountSlot({
|
|
88
|
-
...BASE,
|
|
89
|
-
choiceMode: 'image',
|
|
90
|
-
displayChoice: { imageUrl: 'https://example.com/cat.png', imageAlt: 'A cat' },
|
|
91
|
-
});
|
|
92
|
-
const img = target.querySelector('img.pie-blank-image') as HTMLImageElement;
|
|
93
|
-
expect(img).not.toBeNull();
|
|
94
|
-
expect(img.alt).toBe('A cat');
|
|
95
|
-
expect(target.querySelector('.cloze-marker-empty')).toBeNull();
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('falls back to empty placeholder when choiceMode=image but imageUrl is missing', () => {
|
|
99
|
-
const target = mountSlot({
|
|
100
|
-
...BASE,
|
|
101
|
-
choiceMode: 'image',
|
|
102
|
-
displayChoice: { imageUrl: undefined },
|
|
103
|
-
});
|
|
104
|
-
expect(target.querySelector('.cloze-marker-empty')).not.toBeNull();
|
|
105
|
-
expect(target.querySelector('img')).toBeNull();
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('uses fallback alt text when imageAlt is not provided', () => {
|
|
109
|
-
const target = mountSlot({
|
|
110
|
-
...BASE,
|
|
111
|
-
choiceMode: 'image',
|
|
112
|
-
displayChoice: { imageUrl: 'https://example.com/img.png' },
|
|
113
|
-
});
|
|
114
|
-
const img = target.querySelector('img') as HTMLImageElement;
|
|
115
|
-
expect(img.alt).toBe('Selected answer image');
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it('prefers image over text when both choiceMode=image and displayChoiceLabelHtml are set', () => {
|
|
119
|
-
const target = mountSlot({
|
|
120
|
-
...BASE,
|
|
121
|
-
choiceMode: 'image',
|
|
122
|
-
displayChoice: { imageUrl: 'https://example.com/img.png', imageAlt: 'Cat' },
|
|
123
|
-
displayChoiceLabelHtml: '<p>Look</p>',
|
|
124
|
-
});
|
|
125
|
-
expect(target.querySelector('img')).not.toBeNull();
|
|
126
|
-
expect(target.querySelector('.pie-blank-value')).toBeNull();
|
|
127
|
-
});
|
|
128
|
-
});
|