@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
package/src/print/Print.svelte
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
<svelte:options
|
|
2
|
-
customElement={{
|
|
3
|
-
shadow: 'none',
|
|
4
|
-
props: {
|
|
5
|
-
model: { type: 'Object' },
|
|
6
|
-
},
|
|
7
|
-
}}
|
|
8
|
-
/>
|
|
9
|
-
|
|
10
|
-
<script lang="ts">
|
|
11
|
-
const BLANK_TOKEN = '{{blank}}';
|
|
12
|
-
|
|
13
|
-
let { model = null }: { model?: any } = $props();
|
|
14
|
-
|
|
15
|
-
let prompt = $state('');
|
|
16
|
-
let template = $state('');
|
|
17
|
-
$effect(() => {
|
|
18
|
-
prompt = model?.prompt || '';
|
|
19
|
-
template = model?.template || '';
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const parts = $derived.by(() => {
|
|
23
|
-
const idx = template.indexOf(BLANK_TOKEN);
|
|
24
|
-
if (idx < 0) return { before: template, after: '' };
|
|
25
|
-
return { before: template.slice(0, idx), after: template.slice(idx + BLANK_TOKEN.length) };
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
const choices = $derived(Array.isArray(model?.choices) ? model.choices : []);
|
|
29
|
-
const correct = $derived(model?.choices?.find((c: any) => c.id === model?.correctChoiceId));
|
|
30
|
-
const mode = $derived(model?.choiceMode || 'text');
|
|
31
|
-
const isAudioOnlyMode = $derived(model?.interactionMode === 'audio_mc_only');
|
|
32
|
-
const showAnswerKey = $derived(model?.printAnswerKey !== false);
|
|
33
|
-
</script>
|
|
34
|
-
|
|
35
|
-
<div class="p-4 print:p-0">
|
|
36
|
-
{#if prompt && model?.promptEnabled !== false}
|
|
37
|
-
<div class="mb-4 prose prose-sm">{@html prompt}</div>
|
|
38
|
-
{/if}
|
|
39
|
-
|
|
40
|
-
{#if model?.sentenceHtml}
|
|
41
|
-
<div class="mb-2 prose prose-sm">{@html model.sentenceHtml}</div>
|
|
42
|
-
{/if}
|
|
43
|
-
|
|
44
|
-
{#if !isAudioOnlyMode}
|
|
45
|
-
<div class="mb-4 prose prose-sm">
|
|
46
|
-
{@html parts.before}
|
|
47
|
-
<span class="inline-block min-w-[6rem] border-b-2 border-gray-600 print:border-black px-1">
|
|
48
|
-
{#if showAnswerKey && mode === 'image' && correct?.imageUrl}
|
|
49
|
-
<img src={correct.imageUrl} alt={correct.imageAlt || ''} class="max-h-14 object-contain" />
|
|
50
|
-
{:else if showAnswerKey && correct?.labelHtml}
|
|
51
|
-
{@html correct.labelHtml}
|
|
52
|
-
{:else}
|
|
53
|
-
________
|
|
54
|
-
{/if}
|
|
55
|
-
</span>
|
|
56
|
-
{@html parts.after}
|
|
57
|
-
</div>
|
|
58
|
-
{/if}
|
|
59
|
-
|
|
60
|
-
{#if model?.hasAudio}
|
|
61
|
-
<div class="text-sm mb-4">
|
|
62
|
-
{#if model?.audioUrl}
|
|
63
|
-
<div><strong>Audio:</strong> {model.audioUrl}</div>
|
|
64
|
-
{/if}
|
|
65
|
-
{#if model?.audioTranscript}
|
|
66
|
-
<div><strong>Transcript:</strong> {model.audioTranscript}</div>
|
|
67
|
-
{/if}
|
|
68
|
-
</div>
|
|
69
|
-
{/if}
|
|
70
|
-
|
|
71
|
-
<ul class="text-sm list-disc pl-5">
|
|
72
|
-
{#each choices as c}
|
|
73
|
-
<li>
|
|
74
|
-
{#if mode === 'image'}
|
|
75
|
-
<span class="font-medium">{c.id}</span>
|
|
76
|
-
{#if showAnswerKey && c.id === model?.correctChoiceId}(key){/if}
|
|
77
|
-
{:else}
|
|
78
|
-
{@html c.labelHtml || ''}
|
|
79
|
-
{#if showAnswerKey && c.id === model?.correctChoiceId}
|
|
80
|
-
<span class="font-medium"> (key)</span>
|
|
81
|
-
{/if}
|
|
82
|
-
{/if}
|
|
83
|
-
</li>
|
|
84
|
-
{/each}
|
|
85
|
-
</ul>
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
<style>
|
|
89
|
-
.prose :global(p) {
|
|
90
|
-
margin: 0.5em 0;
|
|
91
|
-
}
|
|
92
|
-
.prose :global(strong) {
|
|
93
|
-
font-weight: 600;
|
|
94
|
-
}
|
|
95
|
-
</style>
|
package/src/print/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import PrintComponent from './Print.svelte';
|
|
2
|
-
|
|
3
|
-
const SvelteElementClass = (PrintComponent as any).element;
|
|
4
|
-
|
|
5
|
-
class McPopulatedBlankPrint extends SvelteElementClass {
|
|
6
|
-
private _model: any = null;
|
|
7
|
-
|
|
8
|
-
set model(m: any) {
|
|
9
|
-
this._model = m;
|
|
10
|
-
super.model = m;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
get model() {
|
|
14
|
-
return this._model;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default McPopulatedBlankPrint;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export type LayoutLimits = {
|
|
2
|
-
blankStandaloneWidthRem: number;
|
|
3
|
-
blankWideWidthRem: number;
|
|
4
|
-
blankUnderlineWidthPx: number;
|
|
5
|
-
blankUnderlineWideWidthPx: number;
|
|
6
|
-
horizontalChoiceWidthPx: number;
|
|
7
|
-
horizontalChoiceWidthVw: number;
|
|
8
|
-
horizontalChoiceTileMinHeightRem: number;
|
|
9
|
-
horizontalChoiceContentMinHeightRem: number;
|
|
10
|
-
selectedImageMaxHeightRem: number;
|
|
11
|
-
choiceImageMaxHeightRem: number;
|
|
12
|
-
listenButtonSizePx: number;
|
|
13
|
-
stimulusMinColumnPx: number;
|
|
14
|
-
textMinColumnPx: number;
|
|
15
|
-
legendMaxChars: number;
|
|
16
|
-
choiceGroupGapRem: number;
|
|
17
|
-
choiceRowGapRem: number;
|
|
18
|
-
toggleButtonGapRem: number;
|
|
19
|
-
horizontalChoiceRadioTopMarginRem: number;
|
|
20
|
-
audioBlankTemplateMarginTopRem: number;
|
|
21
|
-
audioBlankTemplateMarginBottomRem: number;
|
|
22
|
-
audioInstructionsMaxWidthPx: number;
|
|
23
|
-
narrowHorizontalChoiceMaxWidthPx: number;
|
|
24
|
-
stimulusGridColumnGapRem: number;
|
|
25
|
-
stimulusGridRowGapRem: number;
|
|
26
|
-
stimulusSentenceMarginTopRem: number;
|
|
27
|
-
stimulusChoicesMarginTopRem: number;
|
|
28
|
-
tokenGridColumnGapRem: number;
|
|
29
|
-
tokenGridRowGapRem: number;
|
|
30
|
-
tokenTemplateMarginTopRem: number;
|
|
31
|
-
tokenInlineTokenGapRem: number;
|
|
32
|
-
tokenChoicesMarginTopRem: number;
|
|
33
|
-
inlineGridColumnGapRem: number;
|
|
34
|
-
inlineGridRowGapRem: number;
|
|
35
|
-
inlineTemplateMarginTopRem: number;
|
|
36
|
-
inlineChoicesMarginTopRem: number;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
/** Baseline values tuned to match historical CQT visuals; override via model.layoutLimits. */
|
|
40
|
-
export const DEFAULT_LAYOUT_LIMITS: LayoutLimits = {
|
|
41
|
-
blankStandaloneWidthRem: 7,
|
|
42
|
-
blankWideWidthRem: 10,
|
|
43
|
-
blankUnderlineWidthPx: 2,
|
|
44
|
-
blankUnderlineWideWidthPx: 4,
|
|
45
|
-
horizontalChoiceWidthPx: 170,
|
|
46
|
-
horizontalChoiceWidthVw: 30,
|
|
47
|
-
horizontalChoiceTileMinHeightRem: 11,
|
|
48
|
-
horizontalChoiceContentMinHeightRem: 7.5,
|
|
49
|
-
selectedImageMaxHeightRem: 4,
|
|
50
|
-
choiceImageMaxHeightRem: 5,
|
|
51
|
-
listenButtonSizePx: 128,
|
|
52
|
-
stimulusMinColumnPx: 210,
|
|
53
|
-
textMinColumnPx: 260,
|
|
54
|
-
legendMaxChars: 120,
|
|
55
|
-
choiceGroupGapRem: 0.5,
|
|
56
|
-
choiceRowGapRem: 0.5,
|
|
57
|
-
toggleButtonGapRem: 0.5,
|
|
58
|
-
horizontalChoiceRadioTopMarginRem: 0.5,
|
|
59
|
-
audioBlankTemplateMarginTopRem: 0.8,
|
|
60
|
-
audioBlankTemplateMarginBottomRem: 1.8,
|
|
61
|
-
audioInstructionsMaxWidthPx: 875,
|
|
62
|
-
narrowHorizontalChoiceMaxWidthPx: 230,
|
|
63
|
-
stimulusGridColumnGapRem: 2,
|
|
64
|
-
stimulusGridRowGapRem: 0.7,
|
|
65
|
-
stimulusSentenceMarginTopRem: 0.2,
|
|
66
|
-
stimulusChoicesMarginTopRem: 0.9,
|
|
67
|
-
tokenGridColumnGapRem: 1.5,
|
|
68
|
-
tokenGridRowGapRem: 0.8,
|
|
69
|
-
tokenTemplateMarginTopRem: 0.6,
|
|
70
|
-
tokenInlineTokenGapRem: 0.35,
|
|
71
|
-
tokenChoicesMarginTopRem: 0.2,
|
|
72
|
-
inlineGridColumnGapRem: 1.5,
|
|
73
|
-
inlineGridRowGapRem: 0.65,
|
|
74
|
-
inlineTemplateMarginTopRem: 0.45,
|
|
75
|
-
inlineChoicesMarginTopRem: 0.25,
|
|
76
|
-
};
|
package/src/shared/types.ts
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import type { LayoutLimits } from './layoutLimits';
|
|
2
|
-
|
|
3
|
-
export type McpbChoiceMode = 'text' | 'image';
|
|
4
|
-
export type McpbInteractionMode = 'populate_blank' | 'audio_mc_only';
|
|
5
|
-
export type McpbDeliveryMode = 'gather' | 'view' | 'evaluate' | 'authoring' | 'print';
|
|
6
|
-
export type McpbRole = 'student' | 'instructor';
|
|
7
|
-
export type McpbCorrectness = 'correct' | 'incorrect' | 'unanswered';
|
|
8
|
-
|
|
9
|
-
export interface McpbChoice {
|
|
10
|
-
id: string;
|
|
11
|
-
labelHtml?: string;
|
|
12
|
-
imageUrl?: string;
|
|
13
|
-
imageAlt?: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface McpbAudioButtonSkin {
|
|
17
|
-
silentUrl: string;
|
|
18
|
-
playingUrl: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface McpbUiText {
|
|
22
|
-
answerChoices?: string;
|
|
23
|
-
selectedAnswerInSentence?: string;
|
|
24
|
-
showCorrectAnswer?: string;
|
|
25
|
-
hideCorrectAnswer?: string;
|
|
26
|
-
clickToEnableAutoplay?: string;
|
|
27
|
-
audioResourceUnavailable?: string;
|
|
28
|
-
transcriptLabel?: string;
|
|
29
|
-
listenLabelEn?: string;
|
|
30
|
-
listenLabelEs?: string;
|
|
31
|
-
listenSilentAlt?: string;
|
|
32
|
-
listenPlayingAlt?: string;
|
|
33
|
-
listenSilentAltEs?: string;
|
|
34
|
-
listenPlayingAltEs?: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface McpbQuestion {
|
|
38
|
-
id?: string;
|
|
39
|
-
element?: string;
|
|
40
|
-
prompt?: string;
|
|
41
|
-
promptEnabled?: boolean;
|
|
42
|
-
interactionMode?: McpbInteractionMode;
|
|
43
|
-
layoutProfile?: string;
|
|
44
|
-
choiceLayout?: string;
|
|
45
|
-
layoutProfilePresets?: Record<string, Partial<LayoutLimits>>;
|
|
46
|
-
layoutLimits?: Partial<LayoutLimits>;
|
|
47
|
-
audioButtonSkin?: McpbAudioButtonSkin | null;
|
|
48
|
-
audioButtonSkinsByLocale?: Record<string, McpbAudioButtonSkin>;
|
|
49
|
-
uiText?: McpbUiText;
|
|
50
|
-
sentenceHtml?: string;
|
|
51
|
-
template?: string;
|
|
52
|
-
choiceMode?: McpbChoiceMode;
|
|
53
|
-
choices?: McpbChoice[];
|
|
54
|
-
correctChoiceId?: string;
|
|
55
|
-
hasAudio?: boolean;
|
|
56
|
-
autoplayAudioEnabled?: boolean;
|
|
57
|
-
completeAudioEnabled?: boolean;
|
|
58
|
-
audioUrl?: string;
|
|
59
|
-
audioTranscript?: string;
|
|
60
|
-
showVisibleTranscript?: boolean;
|
|
61
|
-
useFeatureButtonAudio?: boolean;
|
|
62
|
-
locale?: string;
|
|
63
|
-
shuffle?: boolean;
|
|
64
|
-
lockChoiceOrder?: boolean;
|
|
65
|
-
teacherInstructions?: string;
|
|
66
|
-
teacherInstructionsEnabled?: boolean;
|
|
67
|
-
customType?: string;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface McpbSession {
|
|
71
|
-
id?: string;
|
|
72
|
-
element?: string;
|
|
73
|
-
choiceId?: string;
|
|
74
|
-
audioStartTime?: number;
|
|
75
|
-
audioEndTime?: number;
|
|
76
|
-
shuffledValues?: string[];
|
|
77
|
-
data?: { shuffledValues?: string[] };
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export interface McpbEnv {
|
|
81
|
-
mode?: McpbDeliveryMode;
|
|
82
|
-
role?: McpbRole;
|
|
83
|
-
'@pie-element'?: { lockChoiceOrder?: boolean };
|
|
84
|
-
}
|
package/src/types/css-raw.d.ts
DELETED