@pie-element/mc-populated-blank 0.2.13-next.3 → 0.2.13
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/author/index.d.ts +1 -0
- package/dist/author/index.d.ts.map +1 -0
- package/dist/author/index.js +171 -292
- package/dist/author/index.js.map +1 -1
- package/dist/controller/defaults.d.ts +1 -0
- package/dist/controller/defaults.d.ts.map +1 -0
- package/dist/controller/index.d.ts +1 -0
- package/dist/controller/index.d.ts.map +1 -0
- package/dist/controller/index.js.map +1 -1
- package/dist/delivery/computeAudioMode.d.ts +1 -0
- package/dist/delivery/computeAudioMode.d.ts.map +1 -0
- package/dist/delivery/computeChoiceCorrectness.d.ts +1 -0
- package/dist/delivery/computeChoiceCorrectness.d.ts.map +1 -0
- package/dist/delivery/computeDisplayState.d.ts +1 -0
- package/dist/delivery/computeDisplayState.d.ts.map +1 -0
- package/dist/delivery/computeLayoutProfile.d.ts +1 -0
- package/dist/delivery/computeLayoutProfile.d.ts.map +1 -0
- package/dist/delivery/computeLayoutStyle.d.ts +1 -0
- package/dist/delivery/computeLayoutStyle.d.ts.map +1 -0
- package/dist/delivery/index.d.ts +1 -0
- package/dist/delivery/index.d.ts.map +1 -0
- package/dist/delivery/index.js +299 -418
- package/dist/delivery/index.js.map +1 -1
- package/dist/delivery/variant-css-map.d.ts +1 -0
- package/dist/delivery/variant-css-map.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.iife.d.ts +1 -0
- package/dist/index.iife.d.ts.map +1 -0
- package/dist/index.iife.js +97 -21
- package/dist/index.js +299 -418
- package/dist/index.js.map +1 -1
- package/dist/print/index.d.ts +1 -0
- package/dist/print/index.d.ts.map +1 -0
- package/dist/print/index.js +238 -363
- package/dist/print/index.js.map +1 -1
- package/dist/shared/layoutLimits.d.ts +1 -0
- package/dist/shared/layoutLimits.d.ts.map +1 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/package.json +5 -31
- package/configure.js +0 -2
- package/dist/browser/author/index.js +0 -50
- package/dist/browser/author/index.js.map +0 -1
- package/dist/browser/client-B0miu8E8.js +0 -2414
- package/dist/browser/client-B0miu8E8.js.map +0 -1
- package/dist/browser/controller/index.js +0 -221
- package/dist/browser/controller/index.js.map +0 -1
- package/dist/browser/delivery/index.js +0 -1234
- package/dist/browser/delivery/index.js.map +0 -1
- package/dist/browser/layoutLimits-ATKOwLHb.js +0 -42
- package/dist/browser/layoutLimits-ATKOwLHb.js.map +0 -1
- package/dist/browser/print/index.js +0 -125
- package/dist/browser/print/index.js.map +0 -1
- package/dist/runtime-support.d.ts +0 -12
- package/dist/runtime-support.js +0 -14
- package/dist/runtime-support.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["e","t","n","r","t","e"],"sources":["../../../../../lib-svelte/styling/dist/index2.js","../../../../../lib-svelte/delivery-events/dist/index2.js","../../../../../lib-svelte/delivery-events/dist/index3.js","../../../src/delivery/computeAudioMode.ts","../../../src/delivery/AudioPlayer.svelte","../../../src/delivery/ClozeMarker.svelte","../../../src/delivery/ChoiceRow.svelte","../../../src/delivery/computeChoiceCorrectness.ts","../../../src/delivery/computeLayoutProfile.ts","../../../src/delivery/computeLayoutStyle.ts","../../../src/delivery/computeDisplayState.ts","../../../src/delivery/variant-css-map.ts","../../../src/delivery/McPopulatedBlank.svelte","../../../src/delivery/index.ts"],"sourcesContent":["//#region src/color.ts\nvar e = {\n\t50: \"#e8f5e9\",\n\t500: \"#4caf50\"\n}, t = {\n\t200: \"#9fa8da\",\n\t500: \"#3f51b5\",\n\t800: \"#283593\"\n}, n = { 500: \"#ff9800\" }, r = {\n\t200: \"#f48fb1\",\n\t900: \"#880e4f\",\n\tA400: \"#f50057\"\n}, i = {\n\t50: \"#ffebee\",\n\t700: \"#d32f2f\"\n}, a = {\n\tTEXT: \"black\",\n\tDISABLED: \"grey\",\n\tDISABLED_SECONDARY: \"#ABABAB\",\n\tCORRECT: e[500],\n\tCORRECT_SECONDARY: e[50],\n\tCORRECT_TERTIARY: \"#0EA449\",\n\tCORRECT_WITH_ICON: \"#087D38\",\n\tINCORRECT: n[500],\n\tINCORRECT_SECONDARY: i[50],\n\tINCORRECT_WITH_ICON: \"#BF0D00\",\n\tMISSING: i[700],\n\tMISSING_WITH_ICON: \"#6A78A1\",\n\tPRIMARY: t[500],\n\tPRIMARY_LIGHT: t[200],\n\tPRIMARY_DARK: t[800],\n\tSECONDARY: r.A400,\n\tSECONDARY_LIGHT: r[200],\n\tSECONDARY_DARK: r[900],\n\tTERTIARY: \"#146EB3\",\n\tTERTIARY_LIGHT: \"#D0E2F0\",\n\tBACKGROUND: \"rgba(255,255,255,0)\",\n\tBACKGROUND_DARK: \"#ECEDF1\",\n\tDROPDOWN_BACKGROUND: \"#E0E1E6\",\n\tSECONDARY_BACKGROUND: \"rgba(241,241,241,1)\",\n\tBORDER: \"#9A9A9A\",\n\tBORDER_LIGHT: \"#D1D1D1\",\n\tBORDER_DARK: \"#646464\",\n\tBORDER_GRAY: \"#7E8494\",\n\tBLACK: \"#000000\",\n\tWHITE: \"#ffffff\",\n\tTRANSPARENT: \"transparent\",\n\tFOCUS_CHECKED: \"#BBDEFB\",\n\tFOCUS_CHECKED_BORDER: \"#1565C0\",\n\tFOCUS_UNCHECKED: \"#E0E0E0\",\n\tFOCUS_UNCHECKED_BORDER: \"#757575\",\n\tBLUE_GREY100: \"#F3F5F7\",\n\tBLUE_GREY300: \"#C0C3CF\",\n\tBLUE_GREY600: \"#7E8494\",\n\tBLUE_GREY900: \"#152452\",\n\tFADED_PRIMARY: \"#DCDAFB\"\n};\nObject.freeze(a);\nvar o = (e) => (...t) => {\n\tlet n = t.pop();\n\treturn t.reduceRight((t, n) => `var(--${e}-${n}, ${t})`, n);\n}, s = o(\"pie\"), c = () => s(\"text\", a.TEXT), l = () => s(\"disabled\", a.DISABLED), u = () => s(\"disabled-secondary\", a.DISABLED_SECONDARY), d = () => s(\"correct\", a.CORRECT), f = () => s(\"correct-secondary\", a.CORRECT_SECONDARY), p = () => s(\"correct-tertiary\", a.CORRECT_TERTIARY), m = () => s(\"correct-icon\", a.CORRECT_WITH_ICON), h = () => s(\"incorrect\", a.INCORRECT), g = () => s(\"incorrect-icon\", a.INCORRECT_WITH_ICON), _ = () => s(\"incorrect-secondary\", a.INCORRECT_SECONDARY), v = () => s(\"missing\", a.MISSING), y = () => s(\"missing-icon\", a.MISSING_WITH_ICON), b = () => s(\"primary\", a.PRIMARY), x = () => s(\"primary-light\", a.PRIMARY_LIGHT), S = () => s(\"primary-dark\", a.PRIMARY_DARK), C = () => s(\"primary-text\", \"text\", a.TEXT), w = () => s(\"faded-primary\", a.FADED_PRIMARY), T = () => s(\"secondary\", a.SECONDARY), E = () => s(\"secondary-light\", a.SECONDARY_LIGHT), D = () => s(\"secondary-dark\", a.SECONDARY_DARK), O = () => s(\"secondary-text\", \"text\", a.TEXT), k = () => s(\"background\", a.BACKGROUND), A = () => s(\"background-dark\", a.BACKGROUND_DARK), j = () => s(\"secondary-background\", a.SECONDARY_BACKGROUND), M = () => s(\"dropdown-background\", a.DROPDOWN_BACKGROUND), N = () => s(\"tertiary\", a.TERTIARY), P = () => s(\"tertiary-light\", a.TERTIARY_LIGHT), F = () => s(\"border\", a.BORDER), I = () => s(\"border-light\", a.BORDER_LIGHT), L = () => s(\"border-dark\", a.BORDER_DARK), R = () => s(\"border-gray\", a.BORDER_GRAY), z = () => s(\"black\", a.BLACK), B = () => s(\"white\", a.WHITE), V = () => a.TRANSPARENT, H = () => s(\"focus-checked\", a.FOCUS_CHECKED), U = () => s(\"focus-checked-border\", a.FOCUS_CHECKED_BORDER), W = () => s(\"focus-unchecked\", a.FOCUS_UNCHECKED), G = () => s(\"focus-unchecked-border\", a.FOCUS_UNCHECKED_BORDER), K = () => s(\"blue-grey-100\", a.BLUE_GREY100), q = () => s(\"blue-grey-300\", a.BLUE_GREY300), J = () => s(\"blue-grey-600\", a.BLUE_GREY600), Y = () => s(\"blue-grey-900\", a.BLUE_GREY900), X = {\n\tAXIS_LINE_COLOR: \"#5A53C9\",\n\tROLLOVER_FILL_BAR_COLOR: \"#050F2D\",\n\tGRIDLINES_COLOR: \"#8E88EA\",\n\tPLOT_FILL_COLOR: \"#1463B3\"\n}, Z = {\n\ttext: c,\n\tdisabled: l,\n\tdisabledSecondary: u,\n\tcorrect: d,\n\tcorrectSecondary: f,\n\tcorrectTertiary: p,\n\tcorrectWithIcon: m,\n\tincorrect: h,\n\tincorrectWithIcon: g,\n\tincorrectSecondary: _,\n\tmissing: v,\n\tmissingWithIcon: y,\n\tprimary: b,\n\tprimaryLight: x,\n\tprimaryDark: S,\n\tprimaryText: C,\n\tfadedPrimary: w,\n\tsecondary: T,\n\tsecondaryLight: E,\n\tsecondaryDark: D,\n\tsecondaryText: O,\n\tbackground: k,\n\tbackgroundDark: A,\n\tsecondaryBackground: j,\n\tdropdownBackground: M,\n\ttertiary: N,\n\ttertiaryLight: P,\n\tborder: F,\n\tborderLight: I,\n\tborderDark: L,\n\tborderGray: R,\n\tblack: z,\n\twhite: B,\n\ttransparent: V,\n\tfocusChecked: H,\n\tfocusCheckedBorder: U,\n\tfocusUnchecked: W,\n\tfocusUncheckedBorder: G,\n\tblueGrey100: K,\n\tblueGrey300: q,\n\tblueGrey600: J,\n\tblueGrey900: Y\n};\n//#endregion\nexport { k as background, A as backgroundDark, z as black, K as blueGrey100, q as blueGrey300, J as blueGrey600, Y as blueGrey900, F as border, L as borderDark, R as borderGray, I as borderLight, Z as color, d as correct, f as correctSecondary, p as correctTertiary, m as correctWithIcon, a as defaults, l as disabled, u as disabledSecondary, M as dropdownBackground, w as fadedPrimary, H as focusChecked, U as focusCheckedBorder, W as focusUnchecked, G as focusUncheckedBorder, h as incorrect, _ as incorrectSecondary, g as incorrectWithIcon, v as missing, y as missingWithIcon, b as primary, S as primaryDark, x as primaryLight, C as primaryText, T as secondary, j as secondaryBackground, D as secondaryDark, E as secondaryLight, O as secondaryText, N as tertiary, P as tertiaryLight, c as text, V as transparent, o as v, X as visualElementsColors, B as white };\n","//#region ../../shared/player-events/dist/index.js\nvar e = class e extends CustomEvent {\n\tstatic {\n\t\tthis.TYPE = \"model-set\";\n\t}\n\tconstructor(t, n, r) {\n\t\tsuper(e.TYPE, {\n\t\t\tbubbles: !0,\n\t\t\tcomposed: !0,\n\t\t\tdetail: {\n\t\t\t\tcomplete: n,\n\t\t\t\tcomponent: t,\n\t\t\t\thasModel: r\n\t\t\t}\n\t\t}), this.component = t, this.complete = n;\n\t}\n}, t = class e extends CustomEvent {\n\tstatic {\n\t\tthis.TYPE = \"session-changed\";\n\t}\n\tconstructor(t, n) {\n\t\tsuper(e.TYPE, {\n\t\t\tbubbles: !0,\n\t\t\tcomposed: !0,\n\t\t\tdetail: {\n\t\t\t\tcomplete: n,\n\t\t\t\tcomponent: t\n\t\t\t}\n\t\t}), this.component = t, this.complete = n;\n\t}\n};\n//#endregion\nexport { e, t };\n","import { t as e } from \"./index2.js\";\n//#region src/session-bridge.ts\nvar t = (e) => {\n\tlet t = e;\n\treturn t ? typeof t.onSessionChange == \"function\" || typeof t.onAudioStarted == \"function\" || typeof t.onAudioEnded == \"function\" : !1;\n};\nfunction n(e, n = {}) {\n\tlet r = n.hostPredicate ?? t, i = e;\n\tfor (; i;) {\n\t\tif (r(i)) return i;\n\t\ti = i.parentElement;\n\t}\n\tif (typeof document < \"u\" && n.fallbackSelector) {\n\t\tlet e = document.querySelector(n.fallbackSelector);\n\t\tif (r(e)) return e;\n\t}\n\treturn null;\n}\nfunction r({ sourceEl: t, fallbackSelector: r, component: i, complete: a, session: o }) {\n\tlet s = n(t, { fallbackSelector: r });\n\treturn s ? typeof s.onSessionChange == \"function\" ? (s.onSessionChange(o), s) : (s.dispatchEvent(new e(i, a)), s) : null;\n}\n//#endregion\nexport { r as forwardSessionChange, n as resolveDeliveryHost };\n","export type AudioMode = 'feature-button' | 'controls' | 'error' | 'none';\n\nexport function computeAudioMode(params: {\n hasAudio: boolean;\n audioUrl: string | undefined;\n useFeatureButtonAudio: boolean;\n}): AudioMode {\n if (!params.hasAudio) return 'none';\n if (!params.audioUrl) return 'error';\n return params.useFeatureButtonAudio ? 'feature-button' : 'controls';\n}\n","<script lang=\"ts\">\nimport { computeAudioMode } from './computeAudioMode';\n\ninterface AudioButtonSkin {\n silentUrl: string;\n playingUrl: string;\n}\n\ninterface UiText {\n clickToEnableAutoplay: string;\n transcriptLabel: string;\n audioResourceUnavailable: string;\n listenSilentAlt?: string;\n listenPlayingAlt?: string;\n listenSilentAltEs?: string;\n listenPlayingAltEs?: string;\n}\n\nconst AUDIO_PLAYBACK = {\n IDLE: 'idle',\n PLAYING: 'playing',\n BLOCKED: 'blocked',\n PAUSED: 'paused',\n} as const;\ntype AudioPlaybackState = (typeof AUDIO_PLAYBACK)[keyof typeof AUDIO_PLAYBACK];\n\nlet {\n hasAudio = false,\n audioUrl,\n useFeatureButtonAudio = false,\n autoplayEnabled = false,\n audioTranscript,\n showVisibleTranscript,\n transcriptId,\n featureAudioSkin,\n uiText,\n locale = '',\n onaudiostarted,\n onaudioended,\n}: {\n hasAudio?: boolean;\n audioUrl?: string;\n useFeatureButtonAudio?: boolean;\n autoplayEnabled?: boolean;\n audioTranscript?: string;\n showVisibleTranscript: boolean;\n transcriptId: string;\n featureAudioSkin: AudioButtonSkin;\n uiText: UiText;\n locale?: string;\n onaudiostarted?: () => void;\n onaudioended?: () => void;\n} = $props();\n\nlet audioEl = $state<HTMLAudioElement | null>(null);\nlet featureAudioButtonEl = $state<HTMLButtonElement | null>(null);\nlet autoplayEnableButtonEl = $state<HTMLButtonElement | null>(null);\nlet audioPlaybackState = $state<AudioPlaybackState>(AUDIO_PLAYBACK.IDLE);\n\nconst audioMode = $derived(computeAudioMode({ hasAudio, audioUrl, useFeatureButtonAudio }));\nconst isMediaPlaying = $derived(audioPlaybackState === AUDIO_PLAYBACK.PLAYING);\nconst autoPlayPromptOpen = $derived(audioPlaybackState === AUDIO_PLAYBACK.BLOCKED);\nconst audioErrorMessage = $derived(audioMode === 'error' ? uiText.audioResourceUnavailable : '');\n\n// Reset playback state when audioUrl changes so autoplay re-fires for a new question.\n$effect(() => {\n audioUrl;\n audioPlaybackState = AUDIO_PLAYBACK.IDLE;\n});\n\nfunction playFeatureAudio() {\n if (audioMode !== 'none' && audioMode !== 'error' && audioEl) {\n audioEl.play().catch(() => {});\n }\n}\n\nfunction handleEnableAutoplayClick() {\n if (audioMode !== 'none' && audioMode !== 'error' && audioEl) {\n audioEl.play().finally(() => {\n if (audioPlaybackState === AUDIO_PLAYBACK.BLOCKED) audioPlaybackState = AUDIO_PLAYBACK.PAUSED;\n });\n }\n}\n\nfunction useListener<K extends keyof HTMLElementEventMap>(\n getEl: () => EventTarget | null | undefined,\n event: K,\n handler: (e: HTMLElementEventMap[K]) => void\n) {\n $effect(() => {\n const el = getEl();\n if (!el) return;\n el.addEventListener(event, handler as EventListener);\n return () => el.removeEventListener(event, handler as EventListener);\n });\n}\n\nuseListener(\n () => audioEl,\n 'playing',\n () => {\n audioPlaybackState = AUDIO_PLAYBACK.PLAYING;\n onaudiostarted?.();\n }\n);\n\nuseListener(\n () => audioEl,\n 'ended',\n () => {\n audioPlaybackState = AUDIO_PLAYBACK.PAUSED;\n onaudioended?.();\n }\n);\n\nuseListener(\n () => featureAudioButtonEl,\n 'click',\n () => playFeatureAudio()\n);\nuseListener(\n () => autoplayEnableButtonEl,\n 'click',\n () => handleEnableAutoplayClick()\n);\n\n$effect(() => {\n if (!autoplayEnabled || audioMode === 'none' || audioMode === 'error') return;\n if (audioPlaybackState !== AUDIO_PLAYBACK.IDLE) return;\n if (audioEl && audioUrl) {\n audioPlaybackState = AUDIO_PLAYBACK.PAUSED;\n audioEl.play().catch(() => {\n audioPlaybackState = AUDIO_PLAYBACK.BLOCKED;\n });\n }\n});\n\nfunction speechButtonLabel(loc = '') {\n return loc.toLowerCase().startsWith('es') ? 'Escuchar' : 'Listen';\n}\n\nfunction silentAlt(loc = '') {\n return loc.toLowerCase().startsWith('es')\n ? (uiText.listenSilentAltEs ?? 'Escuchar. Repetir las instrucciones.')\n : (uiText.listenSilentAlt ?? 'Repeat instructions');\n}\n\nfunction playingAlt(loc = '') {\n return loc.toLowerCase().startsWith('es')\n ? (uiText.listenPlayingAltEs ?? 'Escuchar. Estas son las instrucciones.')\n : (uiText.listenPlayingAlt ?? 'Instructions are playing');\n}\n</script>\n\n{#if audioMode !== 'none'}\n <div class=\"mb-4 audio-container pie-audio-container\">\n {#if audioMode === 'feature-button'}\n <audio\n bind:this={audioEl}\n class=\"sr-only pie-audio-player\"\n preload=\"metadata\"\n src={audioUrl}\n aria-hidden=\"true\"\n tabindex=\"-1\"\n ></audio>\n <button\n bind:this={featureAudioButtonEl}\n class=\"listen-button pie-listen-button rli-feature-audio\"\n type=\"button\"\n aria-label={speechButtonLabel(locale)}\n >\n <img\n class={`listen-feature-icon pie-listen-icon rli-feature-listen ${isMediaPlaying ? '' : 'listen-active'}`}\n src={featureAudioSkin.silentUrl}\n alt={silentAlt(locale)}\n />\n <img\n class={`listen-feature-icon pie-listen-icon rli-feature-listen ${isMediaPlaying ? 'listen-active' : ''}`}\n src={featureAudioSkin.playingUrl}\n alt={playingAlt(locale)}\n />\n </button>\n {:else if audioMode === 'controls'}\n <audio\n bind:this={audioEl}\n controls\n class=\"w-full max-w-md pie-audio-player\"\n preload=\"metadata\"\n src={audioUrl}\n aria-describedby={audioTranscript ? transcriptId : undefined}\n >\n <track kind=\"captions\" />\n </audio>\n {#if autoPlayPromptOpen}\n <button\n bind:this={autoplayEnableButtonEl}\n class=\"mt-2 text-sm underline pie-audio-autoplay-enable\"\n type=\"button\"\n >\n {uiText.clickToEnableAutoplay}\n </button>\n {/if}\n {:else if audioMode === 'error'}\n <p class=\"text-sm text-red-700 pie-audio-error\" role=\"alert\">{audioErrorMessage}</p>\n {/if}\n </div>\n{/if}\n\n<style>\n .listen-button {\n width: var(--mpb-listen-button-size, 128px);\n height: var(--mpb-listen-button-size, 128px);\n border: 0;\n padding: 0;\n background-color: transparent;\n cursor: pointer;\n z-index: 1;\n }\n\n .listen-button:hover {\n background-color: #e2f1fe;\n }\n\n .listen-feature-icon {\n width: var(--mpb-listen-button-size, 128px);\n height: var(--mpb-listen-button-size, 128px);\n object-fit: contain;\n display: none;\n }\n\n .listen-feature-icon.listen-active {\n display: block;\n }\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n</style>\n","<script lang=\"ts\">\ninterface DisplayChoice {\n imageUrl?: string;\n imageAlt?: string;\n labelHtml?: string;\n}\n\nlet {\n choiceMode = 'text',\n displayChoice = undefined,\n displayChoiceLabelHtml = '',\n isStandalone = false,\n blankWidth,\n blankBorderWidth,\n ariaLabel,\n}: {\n choiceMode?: 'text' | 'image';\n displayChoice?: DisplayChoice;\n displayChoiceLabelHtml?: string;\n isStandalone?: boolean;\n blankWidth: string;\n blankBorderWidth: string;\n ariaLabel: string;\n} = $props();\n</script>\n\n<span\n class={`inline-flex items-center min-h-[1.5em] px-2 mx-1 border-b-2 border-gray-500 align-baseline cloze-marker pie-blank-slot ${isStandalone ? 'cloze-marker-standalone pie-blank-slot-standalone' : ''}`}\n style={`width:${blankWidth};border-bottom-width:${blankBorderWidth};`}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n aria-label={ariaLabel}\n>\n {#if choiceMode === 'image' && displayChoice?.imageUrl}\n <img\n src={displayChoice.imageUrl}\n alt={displayChoice.imageAlt || 'Selected answer image'}\n class=\"w-auto object-contain pie-blank-image\"\n style=\"max-height:var(--mpb-selected-image-max-height, 4rem);\"\n />\n {:else if displayChoiceLabelHtml}\n <span class=\"cloze-marker-value pie-blank-value\">{@html displayChoiceLabelHtml}</span>\n {:else}\n <span class=\"cloze-marker-empty\" aria-hidden=\"true\"> </span>\n {/if}\n</span>\n\n<style>\n .cloze-marker {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n vertical-align: baseline;\n }\n\n .cloze-marker:focus-within {\n outline: 2px solid var(--pie-focus, #2563eb);\n outline-offset: 2px;\n }\n\n .cloze-marker-standalone {\n width: var(--mpb-blank-standalone-width, 7rem);\n }\n\n .cloze-marker-empty {\n display: inline-block;\n min-width: 4ch;\n }\n\n .cloze-marker-value {\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n .cloze-marker-value :global(p) {\n margin: 0;\n }\n</style>\n","<script lang=\"ts\">\ninterface Choice {\n id: string;\n labelHtml?: string;\n imageUrl?: string;\n imageAlt?: string;\n}\n\nlet {\n choice,\n choiceMode = 'text',\n isHorizontal = false,\n isSelected = false,\n isDisabled = false,\n correctness = undefined,\n isEvaluateMode = false,\n instanceId,\n radioGroupName,\n}: {\n choice: Choice;\n choiceMode?: 'text' | 'image';\n isHorizontal?: boolean;\n isSelected?: boolean;\n isDisabled?: boolean;\n correctness?: 'correct' | 'incorrect' | undefined;\n isEvaluateMode?: boolean;\n instanceId: string;\n radioGroupName: string;\n} = $props();\n</script>\n\n<div\n class={`flex items-start choice-row pie-choice ${isHorizontal ? 'choice-row-horizontal pie-choice-horizontal' : ''} ${isSelected ? 'is-selected pie-choice-selected' : ''} ${correctness ? `choice-${correctness} pie-choice-${correctness}` : ''}`}\n style=\"gap:var(--mpb-choice-row-gap, 0.5rem);\"\n>\n {#if isHorizontal}\n <label\n for={`${instanceId}-opt-${choice.id}`}\n class=\"cursor-pointer choice-tile text-center pie-choice-tile\"\n >\n <span class=\"choice-tile-content pie-choice-tile-content\">\n {#if choiceMode === 'image' && choice.imageUrl}\n <img\n src={choice.imageUrl}\n alt={choice.imageAlt || `Choice ${choice.id}`}\n class=\"object-contain pie-choice-image\"\n style=\"max-height:var(--mpb-choice-image-max-height, 5rem);\"\n />\n {:else}\n <span class=\"choice-html pie-choice-label\">{@html choice.labelHtml || ''}</span>\n {/if}\n </span>\n <input\n type=\"radio\"\n name={radioGroupName}\n id={`${instanceId}-opt-${choice.id}`}\n value={choice.id}\n checked={isSelected}\n disabled={isDisabled}\n class=\"choice-radio-bottom pie-choice-radio pie-choice-radio-bottom\"\n />\n </label>\n {:else}\n <input\n type=\"radio\"\n name={radioGroupName}\n id={`${instanceId}-opt-${choice.id}`}\n value={choice.id}\n checked={isSelected}\n disabled={isDisabled}\n class=\"choice-radio-inline pie-choice-radio pie-choice-radio-inline\"\n />\n <label for={`${instanceId}-opt-${choice.id}`} class=\"cursor-pointer flex-1 pie-choice-label-wrap\">\n {#if choiceMode === 'image' && choice.imageUrl}\n <img\n src={choice.imageUrl}\n alt={choice.imageAlt || `Choice ${choice.id}`}\n class=\"object-contain pie-choice-image\"\n style=\"max-height:var(--mpb-choice-image-max-height, 5rem);\"\n />\n {:else}\n <span class=\"choice-html pie-choice-label\">{@html choice.labelHtml || ''}</span>\n {/if}\n </label>\n {/if}\n {#if isEvaluateMode && correctness}\n <span\n class={`pie-choice-feedback-badge ${correctness === 'correct' ? 'pie-choice-feedback-correct' : 'pie-choice-feedback-incorrect'}`}\n aria-hidden=\"true\"\n >\n {correctness === 'correct' ? '✓' : '✕'}\n </span>\n {/if}\n</div>\n\n<style>\n .choice-row-horizontal {\n flex-direction: column;\n align-items: center;\n width: min(var(--mpb-choice-width-px, 170px), var(--mpb-choice-width-vw, 30vw));\n min-height: var(--mpb-choice-tile-min-height, 11rem);\n gap: 0;\n }\n\n .choice-tile {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n min-height: var(--mpb-choice-tile-min-height, 11rem);\n padding: 0.8rem 0.65rem 0.5rem;\n border-radius: 8px;\n background: transparent;\n transition: background-color 120ms ease-in-out;\n }\n\n .choice-tile-content {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: var(--mpb-choice-content-min-height, 7.5rem);\n }\n\n .choice-row-horizontal:hover .choice-tile {\n background: var(--mpb-choice-hover-bg, var(--pie-correct-answer-choice-hover-bg, #f2f2f2));\n }\n\n .pie-choice-horizontal:not(.is-selected):not(:hover) .pie-choice-tile {\n background: transparent;\n }\n\n .choice-row-horizontal.is-selected .choice-tile {\n background: var(--mpb-choice-selected-bg, var(--pie-correct-answer-choice-selected-bg, #fcfcd3));\n }\n\n .choice-row-horizontal.is-selected:hover .choice-tile {\n background: var(--mpb-choice-selected-bg, var(--pie-correct-answer-choice-selected-bg, #fcfcd3));\n }\n\n .pie-choice:not(.pie-choice-horizontal):hover .pie-choice-label-wrap {\n background: var(--pie-correct-answer-choice-hover-bg, #ececec);\n }\n\n .pie-choice:not(.pie-choice-horizontal):not(.is-selected):not(:hover) .pie-choice-label-wrap {\n background: transparent;\n }\n\n .pie-choice:not(.pie-choice-horizontal).is-selected .pie-choice-label-wrap {\n background: var(--pie-correct-answer-choice-selected-bg, #f1f1f1);\n border-radius: 6px;\n }\n\n .pie-choice:not(.pie-choice-horizontal).is-selected:hover .pie-choice-label-wrap {\n background: var(--pie-correct-answer-choice-selected-bg, #f1f1f1);\n }\n\n .pie-choice.choice-correct {\n border-left: 3px solid var(--pie-correct-answer-choice-correct-border, #0ea449);\n }\n\n .pie-choice.choice-incorrect {\n border-left: 3px solid var(--pie-correct-answer-choice-incorrect-border, #bf0d00);\n }\n\n .pie-choice-horizontal.choice-correct .choice-tile {\n background: var(--pie-correct-answer-choice-correct-bg, #e8f5e9);\n }\n\n .pie-choice-horizontal.choice-incorrect .choice-tile {\n background: var(--pie-correct-answer-choice-incorrect-bg, #ffebee);\n }\n\n .pie-choice-feedback-badge {\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.1rem;\n height: 1.1rem;\n border-radius: 9999px;\n font-size: 0.72rem;\n line-height: 1;\n font-weight: 700;\n color: var(--pie-correct-answer-feedback-glyph-color, #fff);\n }\n\n .pie-choice-feedback-correct {\n background: var(--pie-correct-answer-feedback-correct-bg, #087d38);\n }\n\n .pie-choice-feedback-incorrect {\n background: var(--pie-correct-answer-feedback-incorrect-bg, #bf0d00);\n }\n\n .choice-row-horizontal :global(p) {\n margin: 0;\n text-align: center;\n }\n\n .choice-html :global(p) {\n margin: 0;\n }\n\n .choice-html {\n width: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n .choice-radio-bottom {\n margin-top: var(--mpb-horizontal-choice-radio-top-margin, 0.5rem);\n padding: var(--mpb-choice-radio-padding, 0px);\n }\n\n .choice-radio-inline {\n margin-top: var(--mpb-horizontal-choice-radio-top-margin, 0.5rem);\n }\n</style>\n","export interface ChoiceCorrectnessParams {\n isEvaluateMode: boolean;\n correctChoiceId: string;\n selectedId: string;\n showCorrectAnswer: boolean;\n}\n\n/**\n * Computes which choice ids should display a correctness badge and what kind.\n *\n * Reveal mode (showCorrectAnswer=true) shows only the canonical correct answer —\n * the student's wrong selection is deliberately suppressed so the UI only\n * highlights what to remember, not what to regret.\n *\n * Unanswered-in-evaluate (selectedId='') treats the correct choice as missed\n * (incorrect badge) rather than triggering the two-badge wrong-answer path.\n */\nexport function computeChoiceCorrectness(\n params: ChoiceCorrectnessParams\n): Map<string, 'correct' | 'incorrect'> {\n const map = new Map<string, 'correct' | 'incorrect'>();\n const { isEvaluateMode, correctChoiceId, selectedId, showCorrectAnswer } = params;\n\n if (!isEvaluateMode || !correctChoiceId) {\n return map;\n }\n if (showCorrectAnswer) {\n map.set(correctChoiceId, 'correct');\n return map;\n }\n if (!selectedId) {\n map.set(correctChoiceId, 'incorrect');\n return map;\n }\n if (selectedId === correctChoiceId) {\n map.set(correctChoiceId, 'correct');\n return map;\n }\n map.set(selectedId, 'incorrect');\n map.set(correctChoiceId, 'incorrect');\n return map;\n}\n","const BLANK_TOKEN = '{{blank}}';\n\nexport interface LayoutProfileParams {\n interactionMode?: string;\n template?: string;\n choiceLayout?: string;\n layoutProfile?: string;\n hasAudio?: boolean;\n useFeatureButtonAudio?: boolean | null;\n}\n\nexport interface LayoutProfileResult {\n isAudioOnlyMode: boolean;\n isBlankOnlyTemplate: boolean;\n choiceLayout: 'horizontal' | 'vertical';\n isHorizontalChoices: boolean;\n hasInlineSentenceAudioLayout: boolean;\n useFeatureButtonAudio: boolean;\n}\n\nconst FEATURE_BUTTON_PROFILES = new Set([\n 'audio_blank_only',\n 'stimulus_image_blank',\n 'token_sequence',\n]);\n\nexport function computeLayoutProfile(params: LayoutProfileParams): LayoutProfileResult {\n const {\n interactionMode = '',\n template = '',\n choiceLayout: configuredChoiceLayout,\n layoutProfile = '',\n hasAudio = false,\n useFeatureButtonAudio: configuredFeatureButton,\n } = params;\n\n const isAudioOnlyMode = interactionMode === 'audio_mc_only';\n\n const isBlankOnlyTemplate = (() => {\n if (!template) return false;\n const plain = template\n .replace(/<[^>]+>/g, '')\n .replace(/ /g, ' ')\n .trim();\n return plain === BLANK_TOKEN;\n })();\n\n const choiceLayout: 'horizontal' | 'vertical' =\n configuredChoiceLayout === 'horizontal' || configuredChoiceLayout === 'vertical'\n ? (configuredChoiceLayout as 'horizontal' | 'vertical')\n : isAudioOnlyMode || isBlankOnlyTemplate\n ? 'horizontal'\n : 'vertical';\n\n const isHorizontalChoices = choiceLayout === 'horizontal';\n\n const hasInlineSentenceAudioLayout = layoutProfile === 'inline_sentence' && hasAudio;\n\n const useFeatureButtonAudio =\n typeof configuredFeatureButton === 'boolean'\n ? configuredFeatureButton\n : hasAudio && FEATURE_BUTTON_PROFILES.has(layoutProfile);\n\n return {\n isAudioOnlyMode,\n isBlankOnlyTemplate,\n choiceLayout,\n isHorizontalChoices,\n hasInlineSentenceAudioLayout,\n useFeatureButtonAudio,\n };\n}\n","import { type LayoutLimits, DEFAULT_LAYOUT_LIMITS } from '../shared/layoutLimits';\nexport type { LayoutLimits };\nexport { DEFAULT_LAYOUT_LIMITS };\n\n/**\n * Maps every LayoutLimits key (except legendMaxChars, which is a return value not a CSS var)\n * to its --mpb-* CSS variable name and CSS unit.\n * Add a single entry here when adding a new layout limit.\n */\nexport const CSS_VAR_SPEC: Record<\n Exclude<keyof LayoutLimits, 'legendMaxChars'>,\n { varName: string; unit: string }\n> = {\n blankStandaloneWidthRem: { varName: '--mpb-blank-standalone-width', unit: 'rem' },\n blankWideWidthRem: { varName: '--mpb-blank-wide-width', unit: 'rem' },\n blankUnderlineWidthPx: { varName: '--mpb-blank-underline-width', unit: 'px' },\n blankUnderlineWideWidthPx: { varName: '--mpb-blank-underline-wide-width', unit: 'px' },\n horizontalChoiceWidthPx: { varName: '--mpb-choice-width-px', unit: 'px' },\n horizontalChoiceWidthVw: { varName: '--mpb-choice-width-vw', unit: 'vw' },\n horizontalChoiceTileMinHeightRem: { varName: '--mpb-choice-tile-min-height', unit: 'rem' },\n horizontalChoiceContentMinHeightRem: { varName: '--mpb-choice-content-min-height', unit: 'rem' },\n choiceImageMaxHeightRem: { varName: '--mpb-choice-image-max-height', unit: 'rem' },\n selectedImageMaxHeightRem: { varName: '--mpb-selected-image-max-height', unit: 'rem' },\n choiceGroupGapRem: { varName: '--mpb-choice-group-gap', unit: 'rem' },\n choiceRowGapRem: { varName: '--mpb-choice-row-gap', unit: 'rem' },\n horizontalChoiceRadioTopMarginRem: {\n varName: '--mpb-horizontal-choice-radio-top-margin',\n unit: 'rem',\n },\n narrowHorizontalChoiceMaxWidthPx: { varName: '--mpb-narrow-choice-max-width', unit: 'px' },\n toggleButtonGapRem: { varName: '--mpb-toggle-button-gap', unit: 'rem' },\n listenButtonSizePx: { varName: '--mpb-listen-button-size', unit: 'px' },\n audioBlankTemplateMarginTopRem: { varName: '--mpb-audio-blank-template-margin-top', unit: 'rem' },\n audioBlankTemplateMarginBottomRem: {\n varName: '--mpb-audio-blank-template-margin-bottom',\n unit: 'rem',\n },\n audioInstructionsMaxWidthPx: { varName: '--mpb-audio-instructions-max-width', unit: 'px' },\n stimulusMinColumnPx: { varName: '--mpb-stimulus-min-column', unit: 'px' },\n textMinColumnPx: { varName: '--mpb-text-min-column', unit: 'px' },\n stimulusGridColumnGapRem: { varName: '--mpb-stimulus-grid-column-gap', unit: 'rem' },\n stimulusGridRowGapRem: { varName: '--mpb-stimulus-grid-row-gap', unit: 'rem' },\n stimulusSentenceMarginTopRem: { varName: '--mpb-stimulus-sentence-margin-top', unit: 'rem' },\n stimulusChoicesMarginTopRem: { varName: '--mpb-stimulus-choices-margin-top', unit: 'rem' },\n tokenGridColumnGapRem: { varName: '--mpb-token-grid-column-gap', unit: 'rem' },\n tokenGridRowGapRem: { varName: '--mpb-token-grid-row-gap', unit: 'rem' },\n tokenTemplateMarginTopRem: { varName: '--mpb-token-template-margin-top', unit: 'rem' },\n tokenInlineTokenGapRem: { varName: '--mpb-token-inline-token-gap', unit: 'rem' },\n tokenChoicesMarginTopRem: { varName: '--mpb-token-choices-margin-top', unit: 'rem' },\n inlineGridColumnGapRem: { varName: '--mpb-inline-grid-column-gap', unit: 'rem' },\n inlineGridRowGapRem: { varName: '--mpb-inline-grid-row-gap', unit: 'rem' },\n inlineTemplateMarginTopRem: { varName: '--mpb-inline-template-margin-top', unit: 'rem' },\n inlineChoicesMarginTopRem: { varName: '--mpb-inline-choices-margin-top', unit: 'rem' },\n};\n\nexport const DEFAULT_LAYOUT_PROFILE_PRESETS: Record<string, Partial<LayoutLimits>> = {\n audio_blank_only: {\n blankWideWidthRem: 10,\n blankUnderlineWideWidthPx: 6,\n horizontalChoiceTileMinHeightRem: 11.25,\n horizontalChoiceContentMinHeightRem: 9.375,\n choiceGroupGapRem: 1,\n audioBlankTemplateMarginBottomRem: 1.875,\n },\n stimulus_image_blank: {\n blankWideWidthRem: 10,\n blankUnderlineWideWidthPx: 6,\n },\n token_sequence: {\n blankStandaloneWidthRem: 7,\n blankUnderlineWideWidthPx: 6,\n },\n};\n\nexport interface LayoutStyleResult {\n rootStyle: string;\n blankWidth: string;\n blankBorderWidth: string;\n legendMaxChars: number;\n}\n\nexport function computeLayoutStyle(params: {\n layoutProfile: string;\n isBlankOnlyTemplate: boolean;\n configuredLimits: unknown;\n customProfilePresets: unknown;\n correctAnswerStyleVars: string;\n}): LayoutStyleResult {\n const { layoutProfile, isBlankOnlyTemplate, correctAnswerStyleVars } = params;\n\n const configured =\n params.configuredLimits && typeof params.configuredLimits === 'object'\n ? (params.configuredLimits as Partial<LayoutLimits>)\n : {};\n const customPresets =\n params.customProfilePresets && typeof params.customProfilePresets === 'object'\n ? (params.customProfilePresets as Record<string, unknown>)\n : {};\n const customForProfile =\n customPresets[layoutProfile] && typeof customPresets[layoutProfile] === 'object'\n ? (customPresets[layoutProfile] as Partial<LayoutLimits>)\n : {};\n const profilePreset: Partial<LayoutLimits> = {\n ...(DEFAULT_LAYOUT_PROFILE_PRESETS[layoutProfile] ?? {}),\n ...customForProfile,\n };\n const l: LayoutLimits = { ...DEFAULT_LAYOUT_LIMITS, ...configured, ...profilePreset };\n\n const wideBlankProfiles = ['audio_blank_only', 'stimulus_image_blank'];\n const wideUnderlineProfiles = ['audio_blank_only', 'stimulus_image_blank', 'token_sequence'];\n\n const blankWidth = wideBlankProfiles.includes(layoutProfile)\n ? `${l.blankWideWidthRem}rem`\n : isBlankOnlyTemplate\n ? `${l.blankStandaloneWidthRem}rem`\n : 'auto';\n\n const blankBorderWidth = wideUnderlineProfiles.includes(layoutProfile)\n ? `${l.blankUnderlineWideWidthPx}px`\n : `${l.blankUnderlineWidthPx}px`;\n\n const cssVars = (Object.keys(CSS_VAR_SPEC) as (keyof typeof CSS_VAR_SPEC)[]).map(\n (key) => `${CSS_VAR_SPEC[key].varName}:${l[key]}${CSS_VAR_SPEC[key].unit}`\n );\n const rootStyle = [...cssVars, correctAnswerStyleVars].join(';');\n\n return { rootStyle, blankWidth, blankBorderWidth, legendMaxChars: l.legendMaxChars };\n}\n","export type AudioButtonSkin = { silentUrl: string; playingUrl: string };\n\nexport const DEFAULT_AUDIO_BUTTON_SKINS: Record<string, AudioButtonSkin> = {\n default: {\n silentUrl:\n 'https://assets.learnosity.com/organisations/844/0c9f2aa3-3cd5-4de7-93ef-541c24ca35da.svg',\n playingUrl:\n 'https://assets.learnosity.com/organisations/844/231dfdc2-c113-4be5-91fb-e75a0ca5994b.svg',\n },\n es: {\n silentUrl:\n 'https://assets.learnosity.com/organisations/844/27a9d5b5-d873-4bd5-b9ba-22748782d8ba.svg',\n playingUrl:\n 'https://assets.learnosity.com/organisations/844/120f216d-96b7-4560-94b8-1d90710216b7.svg',\n },\n};\n\n/**\n * Resolves the audio button skin to display.\n * Priority: byLocale[exact] > byLocale[lang] > byLocale.default > customSingle > built-in default\n */\nexport function computeFeatureAudioSkin(params: {\n locale: unknown;\n audioButtonSkin: unknown;\n audioButtonSkinsByLocale: unknown;\n}): AudioButtonSkin {\n const locale = String(params.locale || '').toLowerCase();\n const lang = locale.slice(0, 2);\n const byLocale =\n params.audioButtonSkinsByLocale && typeof params.audioButtonSkinsByLocale === 'object'\n ? (params.audioButtonSkinsByLocale as Record<string, unknown>)\n : {};\n const customSingle =\n params.audioButtonSkin && typeof params.audioButtonSkin === 'object'\n ? (params.audioButtonSkin as AudioButtonSkin)\n : null;\n const defaultSkin = locale.startsWith('es')\n ? DEFAULT_AUDIO_BUTTON_SKINS.es\n : DEFAULT_AUDIO_BUTTON_SKINS.default;\n return (byLocale[locale] ||\n byLocale[lang] ||\n byLocale.default ||\n customSingle ||\n defaultSkin) as AudioButtonSkin;\n}\n\n/**\n * Returns the choice id that the ClozeMarker and selected-state highlight should display.\n * When the correct answer is revealed (alwaysShowCorrect or evaluate+showCorrectAnswer),\n * it shows the correct choice rather than the student's selection.\n */\nexport function computeDisplayChoiceId(params: {\n selectedId: string;\n isEvaluateMode: boolean;\n showCorrectAnswer: boolean;\n alwaysShowCorrect: boolean;\n correctChoiceId: string;\n}): string {\n const { selectedId, isEvaluateMode, showCorrectAnswer, alwaysShowCorrect, correctChoiceId } =\n params;\n if (alwaysShowCorrect && correctChoiceId) return correctChoiceId;\n if (isEvaluateMode && showCorrectAnswer && correctChoiceId) return correctChoiceId;\n return selectedId;\n}\n\n/**\n * Returns the screen-reader-only result announcement text shown after evaluate mode scoring.\n * Empty string means nothing is announced.\n */\nexport function computeResultText(params: {\n isEvaluateMode: boolean;\n showCorrectAnswer: boolean;\n isCorrect: boolean;\n isIncorrect: boolean;\n selectedId: string;\n}): string {\n const { isEvaluateMode, showCorrectAnswer, isCorrect, isIncorrect, selectedId } = params;\n if (!isEvaluateMode || showCorrectAnswer) return '';\n if (isCorrect) return 'Correct answer selected';\n if (isIncorrect && selectedId) return 'Incorrect answer selected';\n return '';\n}\n\n/**\n * Returns the visible legend text for the choices fieldset.\n * Strips HTML, truncates to legendMaxChars with an ellipsis, falls back to answerChoicesLabel.\n */\nexport function computeLegendText(params: {\n prompt: string;\n legendMaxChars: number;\n answerChoicesLabel: string;\n}): string {\n const { prompt, legendMaxChars, answerChoicesLabel } = params;\n const plain = prompt\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n const maxChars = Math.max(8, legendMaxChars);\n if (!plain) return answerChoicesLabel;\n return plain.length > maxChars ? `${plain.slice(0, Math.max(1, maxChars - 1))}…` : plain;\n}\n","import selR1BaseCss from './cqt-css/sel-r1-base.css?raw';\nimport selR1PlusgggCss from './cqt-css/sel-r1-plusggg.css?raw';\nimport srVicCss from './cqt-css/sr-vic.css?raw';\nimport selVicCss from './cqt-css/sel-vic.css?raw';\nimport selR1GplusgggCss from './cqt-css/sel-r1-gplusggg.css?raw';\nimport selR1GStemCss from './cqt-css/sel-r1-g-stem.css?raw';\nimport selR1GgPlusCss from './cqt-css/sel-r1-gg-plus.css?raw';\nimport selR1GgplusCss from './cqt-css/sel-r1-ggplus.css?raw';\nimport selR1S3Css from './cqt-css/sel-r1-s3.css?raw';\n\nexport type VariantCssConfig = {\n variantId: string;\n variantClass: string;\n sourceUrl: string;\n cssText: string;\n};\n\nconst VARIANT_BY_CUSTOM_TYPE: Record<string, VariantCssConfig> = {\n 'sel_r1-_plusggg': {\n variantId: 'sel-r1-plusggg',\n variantClass: 'variant-sel-r1-plusggg',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_r1-_plusggg/0.0.1/question.css',\n cssText: selR1PlusgggCss,\n },\n 'sr-vic': {\n variantId: 'sr-vic',\n variantClass: 'variant-sr-vic',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sr-vic/0.0.1/question.css',\n cssText: srVicCss,\n },\n sel_vic: {\n variantId: 'sel-vic',\n variantClass: 'variant-sel-vic',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_vic/0.0.1/question.css',\n cssText: selVicCss,\n },\n 'sel_r1-_gplusggg': {\n variantId: 'sel-r1-gplusggg',\n variantClass: 'variant-sel-r1-gplusggg',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_r1-_gplusggg/0.0.1/question.css',\n cssText: selR1GplusgggCss,\n },\n 'sel_r1-g_plusggg': {\n variantId: 'sel-r1-g-stem',\n variantClass: 'variant-sel-r1-g-stem',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_r1-g_plusggg/0.0.1/question.css',\n cssText: selR1GStemCss,\n },\n 'sel_r1-gg_plusggg': {\n variantId: 'sel-r1-gg-plus',\n variantClass: 'variant-sel-r1-gg-plus',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_r1-gg_plusggg/0.0.1/question.css',\n cssText: selR1GgPlusCss,\n },\n 'sel_r1-_ggplusggg': {\n variantId: 'sel-r1-ggplus',\n variantClass: 'variant-sel-r1-ggplus',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_r1-_ggplusggg/0.0.1/question.css',\n cssText: selR1GgplusCss,\n },\n 'sel_r1-s3_plusggg': {\n variantId: 'sel-r1-s3',\n variantClass: 'variant-sel-r1-s3',\n sourceUrl:\n 'https://global-pr-ibvcustomfiles.renaissance-go.com/learnosity/sel_r1-s3_plusggg/0.0.1/question.css',\n cssText: selR1S3Css,\n },\n};\n\nconst normalizeCustomType = (value: unknown): string => {\n const normalized = String(value || '')\n .trim()\n .toLowerCase();\n // Accept both base custom types and version-suffixed tags like \"...v0.0.1\".\n return normalized.replace(/v\\d+\\.\\d+\\.\\d+$/i, '');\n};\n\nexport const getVariantCssConfig = (customType: unknown): VariantCssConfig | undefined => {\n const normalized = normalizeCustomType(customType);\n return VARIANT_BY_CUSTOM_TYPE[normalized];\n};\n\nexport const getVariantRootClass = (customType: unknown): string => {\n return getVariantCssConfig(customType)?.variantClass || '';\n};\n\nconst SEL_R1_VARIANT_IDS = new Set([\n 'sel-r1-plusggg',\n 'sel-r1-gplusggg',\n 'sel-r1-g-stem',\n 'sel-r1-gg-plus',\n 'sel-r1-ggplus',\n 'sel-r1-s3',\n]);\n\nconst injectStyleOnce = (id: string, variantName: string, cssText: string): void => {\n const existing = document.getElementById(id) as HTMLStyleElement | null;\n if (existing) {\n if (existing.textContent !== cssText) existing.textContent = cssText;\n return;\n }\n const style = document.createElement('style');\n style.id = id;\n style.setAttribute('data-mpb-variant', variantName);\n style.textContent = cssText;\n document.head.appendChild(style);\n};\n\nexport const ensureVariantCssInjected = (config?: VariantCssConfig): void => {\n if (!config?.cssText || typeof document === 'undefined') {\n return;\n }\n if (SEL_R1_VARIANT_IDS.has(config.variantId)) {\n injectStyleOnce('mc-populated-blank-css-sel-r1-base', 'sel-r1-base', selR1BaseCss);\n }\n injectStyleOnce(`mc-populated-blank-css-${config.variantId}`, config.variantId, config.cssText);\n};\n","<svelte:options\n customElement={{\n shadow: 'none',\n props: {\n model: { type: 'Object' },\n session: { type: 'Object' },\n options: { type: 'Object' },\n },\n }}\n/>\n\n<script lang=\"ts\">\nimport { color } from '@pie-lib/styling-svelte';\nimport { forwardSessionChange, resolveDeliveryHost } from '@pie-lib/delivery-events-svelte';\nimport AudioPlayer from './AudioPlayer.svelte';\nimport ClozeMarker from './ClozeMarker.svelte';\nimport ChoiceRow from './ChoiceRow.svelte';\nimport { computeChoiceCorrectness } from './computeChoiceCorrectness';\nimport { computeLayoutProfile } from './computeLayoutProfile';\nimport { computeLayoutStyle, DEFAULT_LAYOUT_LIMITS } from './computeLayoutStyle';\nimport {\n computeFeatureAudioSkin,\n computeDisplayChoiceId,\n computeResultText,\n computeLegendText,\n} from './computeDisplayState';\nimport {\n ensureVariantCssInjected,\n getVariantCssConfig,\n getVariantRootClass,\n} from './variant-css-map';\n\nconst BLANK_TOKEN = '{{blank}}';\nconst DEFAULT_UI_TEXT = {\n answerChoices: 'Answer choices',\n selectedAnswerInSentence: 'Selected answer in sentence',\n showCorrectAnswer: 'Show correct answer',\n hideCorrectAnswer: 'Hide correct answer',\n clickToEnableAutoplay: 'Click to enable audio autoplay',\n audioResourceUnavailable: 'Audio is enabled but no playable audio URL is configured.',\n transcriptLabel: 'Transcript',\n} as const;\n\nlet { model, session } = $props<{ model?: any; session?: any; options?: any }>();\nlet localChoiceId = $state('');\nlet toggleCorrectAnswerButtonEl = $state<HTMLButtonElement | null>(null);\nlet choicesGroupEl = $state<HTMLDivElement | null>(null);\nlet rootEl = $state<HTMLDivElement | null>(null);\nlet ancestorHasTranscriptClass = $state(false);\nconst instanceId = `mc-populated-blank-${Math.random().toString(36).slice(2, 10)}`;\n\n// ---------------------------------------------------------------------------\n// Cluster: modeFlags — delivery mode, correctness, and answer-reveal state\n// Feeds: shouldShowCorrectAnswerToggle, choiceState, a11y\n// ---------------------------------------------------------------------------\nconst deliveryMode = $derived((model?.mode || model?.env?.mode || '').toString());\nconst isEvaluateMode = $derived(deliveryMode === 'evaluate');\nconst correctness = $derived(model?.correctness);\nconst isResponseCorrect = $derived(\n typeof model?.responseCorrect === 'boolean' ? model.responseCorrect : correctness === 'correct'\n);\nconst isCorrect = $derived(correctness === 'correct');\nconst isIncorrect = $derived(correctness === 'incorrect');\n\nlet showCorrectAnswer = $state(false);\nconst shouldShowCorrectAnswerToggle = $derived(\n isEvaluateMode && !isResponseCorrect && !!model?.correctChoiceId\n);\n\n// ---------------------------------------------------------------------------\n// Cluster: layoutConfig — profile limits, blank sizing, choice layout, audio mode\n// Feeds: layout (rootStyle, blankWidth, blankBorderWidth, legendMaxChars), audioMode, choiceState\n// ---------------------------------------------------------------------------\nconst layoutProfile = $derived(model?.layoutProfile || '');\nconst layoutProfileFlags = $derived(\n computeLayoutProfile({\n interactionMode: model?.interactionMode,\n template: model?.template,\n choiceLayout: model?.choiceLayout,\n layoutProfile,\n hasAudio: model?.hasAudio,\n useFeatureButtonAudio: model?.useFeatureButtonAudio,\n })\n);\nconst isAudioOnlyMode = $derived(layoutProfileFlags.isAudioOnlyMode);\nconst isBlankOnlyTemplate = $derived(layoutProfileFlags.isBlankOnlyTemplate);\nconst isHorizontalChoices = $derived(layoutProfileFlags.isHorizontalChoices);\nconst hasInlineSentenceAudioLayout = $derived(layoutProfileFlags.hasInlineSentenceAudioLayout);\nconst useFeatureButtonAudio = $derived(layoutProfileFlags.useFeatureButtonAudio);\nconst showVisibleTranscript = $derived(ancestorHasTranscriptClass);\nconst correctAnswerStyleVars = $derived.by(() =>\n [\n `--pie-correct-answer-toggle-label-color:${color.text()}`,\n `--pie-correct-answer-toggle-icon-open-bg:${color.tertiaryLight()}`,\n `--pie-correct-answer-toggle-icon-closed-bg:${color.backgroundDark()}`,\n `--pie-correct-answer-toggle-icon-glyph-color:${color.tertiary()}`,\n `--pie-correct-answer-choice-hover-bg:${color.backgroundDark()}`,\n `--pie-correct-answer-choice-selected-bg:${color.secondaryBackground()}`,\n `--pie-correct-answer-choice-correct-bg:${color.correctSecondary()}`,\n `--pie-correct-answer-choice-incorrect-bg:${color.incorrectSecondary()}`,\n `--pie-correct-answer-choice-correct-border:${color.correctTertiary()}`,\n `--pie-correct-answer-choice-incorrect-border:${color.incorrectWithIcon()}`,\n `--pie-correct-answer-feedback-correct-bg:${color.correctWithIcon()}`,\n `--pie-correct-answer-feedback-incorrect-bg:${color.incorrectWithIcon()}`,\n `--pie-correct-answer-feedback-glyph-color:${color.white()}`,\n ].join(';')\n);\nconst layout = $derived(\n computeLayoutStyle({\n layoutProfile,\n isBlankOnlyTemplate,\n configuredLimits: model?.layoutLimits,\n customProfilePresets: model?.layoutProfilePresets,\n correctAnswerStyleVars,\n })\n);\n\n// ---------------------------------------------------------------------------\n// Cluster: choiceState — selection, display choice, per-choice correctness, result text\n// Feeds: template blank display, choice rendering, fieldset, result sr-only text\n// ---------------------------------------------------------------------------\nconst choices = $derived(Array.isArray(model?.choices) ? model.choices : []);\nconst choiceMode = $derived(model?.choiceMode || 'text');\nconst selectedId = $derived(session?.choiceId || localChoiceId || '');\nconst radioGroupName = $derived(`${instanceId}-choice-group-${model?.id || '1'}`);\nconst displayChoiceId = $derived(\n computeDisplayChoiceId({\n selectedId,\n isEvaluateMode,\n showCorrectAnswer,\n alwaysShowCorrect: !!model?.alwaysShowCorrect,\n correctChoiceId: String(model?.correctChoiceId || ''),\n })\n);\nconst displayChoice = $derived.by(() => choices.find((c: any) => c.id === displayChoiceId));\nconst displayChoiceLabelHtml = $derived.by(() => String(displayChoice?.labelHtml || ''));\nconst resultText = $derived(\n computeResultText({ isEvaluateMode, showCorrectAnswer, isCorrect, isIncorrect, selectedId })\n);\nconst choiceCorrectnessById = $derived(\n computeChoiceCorrectness({\n isEvaluateMode,\n correctChoiceId: String(model?.correctChoiceId || ''),\n selectedId: String(selectedId || ''),\n showCorrectAnswer,\n })\n);\n\n// ---------------------------------------------------------------------------\n// Cluster: a11y — stable IDs, aria labelling, described-by relationships\n// Feeds: fieldset legend, radiogroup labelling, template described-by\n// ---------------------------------------------------------------------------\nconst uiText = $derived.by(() => ({\n ...DEFAULT_UI_TEXT,\n ...(model?.uiText || {}),\n}));\nconst promptId = $derived(`${instanceId}-prompt`);\nconst transcriptId = $derived(`${instanceId}-transcript`);\nconst legendId = $derived(`${instanceId}-choices-legend`);\nconst resultId = $derived(`${instanceId}-result`);\nconst legendText = $derived(\n computeLegendText({\n prompt: model?.prompt || '',\n legendMaxChars: layout.legendMaxChars,\n answerChoicesLabel: uiText.answerChoices,\n })\n);\nconst choicesGroupLabelledBy = $derived(model?.prompt ? promptId : undefined);\nconst choicesGroupAriaLabel = $derived.by(() => {\n if (model?.prompt) return undefined;\n const explicit = String(model?.choiceGroupLabel || '').trim();\n if (explicit) return explicit;\n return legendText;\n});\nconst templateDescribedBy = $derived.by(() => {\n const ids: string[] = [];\n if (model?.prompt) ids.push(promptId);\n if (model?.hasAudio && model?.audioTranscript) ids.push(transcriptId);\n return ids.length ? ids.join(' ') : undefined;\n});\n\n// ---------------------------------------------------------------------------\n// Misc — locale, audio error, template parsing, variant CSS, style strings\n// ---------------------------------------------------------------------------\nconst lang = $derived.by(() => {\n const locale = model?.locale || '';\n return locale ? locale.slice(0, 2) : 'en';\n});\nconst variantCssConfig = $derived(getVariantCssConfig(model?.customType));\nconst variantRootClass = $derived(getVariantRootClass(model?.customType));\nconst templateParts = $derived.by(() => {\n const t = model?.template || '';\n const idx = t.indexOf(BLANK_TOKEN);\n if (idx < 0) return { before: t, after: '' };\n return {\n before: t.slice(0, idx),\n after: t.slice(idx + BLANK_TOKEN.length),\n };\n});\n\nfunction emitSession(updatedSession: any, sourceEl?: HTMLElement | null) {\n forwardSessionChange({\n sourceEl,\n fallbackSelector: 'mc-populated-blank',\n component: 'mc-populated-blank',\n session: updatedSession,\n complete: !!updatedSession?.choiceId,\n });\n}\n\nfunction onRadioChange(e: Event) {\n const input = e.target as HTMLInputElement;\n if (!input.checked) return;\n const choiceId = input.value;\n localChoiceId = choiceId;\n const updatedSession = {\n ...session,\n id: session?.id || model?.id || '1',\n element: 'mc-populated-blank',\n choiceId,\n };\n emitSession(updatedSession, input);\n}\n\nfunction toggleCorrectAnswer() {\n if (!shouldShowCorrectAnswerToggle) return;\n showCorrectAnswer = !showCorrectAnswer;\n}\n\n$effect(() => {\n if (!isEvaluateMode || isResponseCorrect) {\n showCorrectAnswer = false;\n }\n});\n\nfunction onRadioGroupKeydown(e: KeyboardEvent) {\n if (model?.disabled) return;\n const key = e.key;\n if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].includes(key)) return;\n e.preventDefault();\n const container = e.currentTarget as HTMLElement;\n const inputs = Array.from(\n container.querySelectorAll('input[type=\"radio\"]:not([disabled])')\n ) as HTMLInputElement[];\n if (inputs.length === 0) return;\n let idx = inputs.findIndex((i) => i.checked);\n if (key === 'ArrowDown' || key === 'ArrowRight') {\n idx = idx < 0 ? 0 : (idx + 1) % inputs.length;\n } else {\n idx = idx < 0 ? inputs.length - 1 : (idx - 1 + inputs.length) % inputs.length;\n }\n const next = inputs[idx];\n next.checked = true;\n next.dispatchEvent(new Event('change', { bubbles: true }));\n next.focus();\n}\n\nconst featureAudioSkin = $derived(\n computeFeatureAudioSkin({\n locale: model?.locale,\n audioButtonSkin: model?.audioButtonSkin,\n audioButtonSkinsByLocale: model?.audioButtonSkinsByLocale,\n })\n);\n\nfunction onAudioStarted() {\n resolveDeliveryHost(rootEl, { fallbackSelector: 'mc-populated-blank' })?.onAudioStarted?.();\n}\n\nfunction onAudioEnded() {\n resolveDeliveryHost(rootEl, { fallbackSelector: 'mc-populated-blank' })?.onAudioEnded?.();\n}\n\n$effect(() => {\n if (session?.choiceId) {\n localChoiceId = session.choiceId;\n }\n});\n\n$effect(() => {\n const btn = toggleCorrectAnswerButtonEl;\n if (!btn) return;\n btn.addEventListener('click', toggleCorrectAnswer);\n return () => btn.removeEventListener('click', toggleCorrectAnswer);\n});\n\n// Delegated listeners on the choices group — two events with a radio-guard on change.\n$effect(() => {\n const group = choicesGroupEl;\n if (!group) return;\n const handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement | null;\n if (!target || target.type !== 'radio') return;\n onRadioChange(e);\n };\n const handleKeydown = (e: KeyboardEvent) => onRadioGroupKeydown(e);\n group.addEventListener('change', handleChange);\n group.addEventListener('keydown', handleKeydown);\n return () => {\n group.removeEventListener('change', handleChange);\n group.removeEventListener('keydown', handleKeydown);\n };\n});\n\n$effect(() => {\n ensureVariantCssInjected(variantCssConfig);\n});\n\n$effect(() => {\n const el = rootEl;\n if (!el) return;\n\n const check = () => {\n ancestorHasTranscriptClass = !!el.closest('.rli-with-audio-transcript');\n };\n check();\n\n const observer = new MutationObserver(check);\n // Walk up and observe each ancestor for class changes\n let node: Element | null = el.parentElement;\n while (node) {\n observer.observe(node, { attributes: true, attributeFilter: ['class'] });\n node = node.parentElement;\n }\n return () => observer.disconnect();\n});\n</script>\n\n<div\n bind:this={rootEl}\n class={`p-4 mc-populated-blank-root pie-element pie-element-mc-populated-blank pie-delivery-root layout-${layoutProfile} ${variantRootClass} ${hasInlineSentenceAudioLayout ? 'has-inline-audio' : ''}`}\n lang={lang}\n style={layout.rootStyle}\n>\n {#if model?.prompt}\n <div class=\"mb-4 prose pie-prompt\" id={promptId}>{@html model.prompt}</div>\n {/if}\n\n {#if model?.audioTranscript}\n <p\n class={`text-sm mb-3 text-gray-700 text-center pie-audio-transcript ${showVisibleTranscript ? '' : 'sr-only'}`}\n id={transcriptId}\n >\n {model.audioTranscript}\n </p>\n {/if}\n\n {#if shouldShowCorrectAnswerToggle}\n <div class=\"pie-correct-answer-toggle-row\">\n <button\n bind:this={toggleCorrectAnswerButtonEl}\n type=\"button\"\n class=\"mb-3 pie-toggle-correct-answer\"\n style=\"gap:var(--mpb-toggle-button-gap, 0.5rem);\"\n aria-pressed={showCorrectAnswer}\n data-testid=\"show-correct-answer\"\n >\n <span class=\"pie-correct-answer-toggle-content\">\n <span class=\"pie-correct-answer-toggle-icon-holder\" aria-hidden=\"true\">\n {#if showCorrectAnswer}\n <svg\n class=\"pie-correct-answer-toggle-svg\"\n preserveAspectRatio=\"xMinYMin meet\"\n version=\"1.1\"\n viewBox=\"-283 359 34 35\"\n >\n <circle cx=\"-266\" cy=\"375.9\" r=\"14\" fill=\"var(--pie-correct-answer-toggle-icon-open-bg, #bce2ff)\" />\n <path\n d=\"M-280.5,375.9c0-8,6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5s-6.5,14.5-14.5,14.5S-280.5,383.9-280.5,375.9z M-279.5,375.9c0,7.4,6.1,13.5,13.5,13.5c7.4,0,13.5-6.1,13.5-13.5s-6.1-13.5-13.5-13.5C-273.4,362.4-279.5,368.5-279.5,375.9z\"\n fill=\"var(--pie-correct-answer-toggle-icon-open-bg, #bce2ff)\"\n />\n <polygon\n points=\"-265.4,383.1 -258.6,377.2 -261.2,374.2 -264.3,376.9 -268.9,368.7 -272.4,370.6\"\n fill=\"var(--pie-correct-answer-toggle-icon-glyph-color, #1a9cff)\"\n />\n </svg>\n {:else}\n <svg\n class=\"pie-correct-answer-toggle-svg\"\n preserveAspectRatio=\"xMinYMin meet\"\n version=\"1.1\"\n viewBox=\"-129.5 127 34 35\"\n >\n <path\n d=\"M-112.9,160.4c-8.5,0-15.5-6.9-15.5-15.5c0-8.5,6.9-15.5,15.5-15.5s15.5,6.9,15.5,15.5 C-97.4,153.5-104.3,160.4-112.9,160.4z\"\n fill=\"#D0CAC5\"\n stroke=\"#E6E3E0\"\n stroke-width=\"0.75\"\n />\n <path\n d=\"M-113.2,159c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-105.2,159-113.2,159z\"\n fill=\"#B3ABA4\"\n stroke=\"#CDC7C2\"\n stroke-width=\"0.5\"\n />\n <circle cx=\"-114.2\" cy=\"143.5\" r=\"14\" fill=\"white\" />\n <path\n d=\"M-114.2,158c-8,0-14.5-6.5-14.5-14.5s6.5-14.5,14.5-14.5s14.5,6.5,14.5,14.5S-106.2,158-114.2,158z M-114.2,130c-7.4,0-13.5,6.1-13.5,13.5s6.1,13.5,13.5,13.5s13.5-6.1,13.5-13.5S-106.8,130-114.2,130z\"\n fill=\"var(--pie-correct-answer-toggle-icon-closed-bg, #bce2ff)\"\n />\n <polygon\n points=\"-114.8,150.7 -121.6,144.8 -119,141.8 -115.9,144.5 -111.3,136.3 -107.8,138.2\"\n fill=\"var(--pie-correct-answer-toggle-icon-glyph-color, #1a9cff)\"\n />\n </svg>\n {/if}\n </span>\n <span class=\"pie-correct-answer-toggle-label\">\n {showCorrectAnswer ? uiText.hideCorrectAnswer : uiText.showCorrectAnswer}\n </span>\n </span>\n </button>\n </div>\n {/if}\n\n <AudioPlayer\n hasAudio={!!model?.hasAudio}\n audioUrl={model?.audioUrl}\n {useFeatureButtonAudio}\n autoplayEnabled={!!model?.autoplayAudioEnabled}\n audioTranscript={model?.audioTranscript}\n {showVisibleTranscript}\n {transcriptId}\n {featureAudioSkin}\n {uiText}\n locale={model?.locale}\n onaudiostarted={onAudioStarted}\n onaudioended={onAudioEnded}\n />\n\n {#if model?.sentenceHtml}\n <div class=\"mb-3 prose prose-p:my-1 sentence-line pie-sentence-line\" aria-describedby={templateDescribedBy}>\n {@html model.sentenceHtml}\n </div>\n {/if}\n\n {#if !isAudioOnlyMode}\n <div class=\"mb-4 template-line pie-template-line\" aria-describedby={templateDescribedBy}>\n {@html templateParts.before}\n <ClozeMarker\n {choiceMode}\n displayChoice={displayChoice}\n {displayChoiceLabelHtml}\n isStandalone={isBlankOnlyTemplate}\n blankWidth={layout.blankWidth}\n blankBorderWidth={layout.blankBorderWidth}\n ariaLabel={uiText.selectedAnswerInSentence}\n />\n {@html templateParts.after}\n </div>\n {/if}\n\n {#if resultText}\n <p id={resultId} class=\"sr-only pie-result-feedback\" role=\"status\" aria-live=\"polite\">{resultText}</p>\n {/if}\n\n <fieldset class=\"border-0 p-0 m-0 pie-choices-fieldset\" disabled={model?.disabled}>\n <legend class=\"sr-only pie-choices-legend\" id={legendId}>{legendText}</legend>\n <div\n bind:this={choicesGroupEl}\n class={`pie-choices ${isHorizontalChoices ? 'flex flex-row flex-wrap items-start justify-center' : 'flex flex-col'}`}\n style=\"gap:var(--mpb-choice-group-gap, 0.5rem);\"\n role=\"radiogroup\"\n tabindex=\"-1\"\n aria-labelledby={choicesGroupLabelledBy}\n aria-label={choicesGroupAriaLabel}\n aria-describedby={resultText ? resultId : undefined}\n >\n {#each choices as c (c.id)}\n <ChoiceRow\n choice={c}\n {choiceMode}\n isHorizontal={isHorizontalChoices}\n isSelected={displayChoiceId === c.id}\n isDisabled={!!model?.disabled}\n correctness={choiceCorrectnessById.get(c.id)}\n {isEvaluateMode}\n {instanceId}\n {radioGroupName}\n />\n {/each}\n </div>\n </fieldset>\n</div>\n\n<style>\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n .mc-populated-blank-root :global(.prose) {\n max-width: none;\n }\n\n .pie-toggle-correct-answer {\n width: 100%;\n cursor: pointer;\n border: 0;\n background: transparent;\n padding: 0;\n display: flex;\n justify-content: center;\n text-align: center;\n color: var(--pie-correct-answer-toggle-label-color, var(--pie-text, black));\n }\n\n .pie-correct-answer-toggle-row {\n width: 100%;\n display: flex;\n justify-content: flex-end;\n }\n\n .pie-correct-answer-toggle-content {\n display: flex;\n margin: 0 auto;\n align-items: center;\n }\n\n .pie-correct-answer-toggle-icon-holder {\n width: 25px;\n margin-right: 5px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .pie-correct-answer-toggle-svg {\n width: 25px;\n height: 25px;\n }\n\n .pie-correct-answer-toggle-label {\n width: fit-content;\n min-width: 140px;\n align-self: center;\n vertical-align: middle;\n font-weight: 400;\n user-select: none;\n }\n\n .pie-toggle-correct-answer:hover .pie-correct-answer-toggle-label,\n .pie-toggle-correct-answer:focus-visible .pie-correct-answer-toggle-label {\n text-decoration: underline;\n }\n\n .template-line {\n white-space: pre-wrap;\n }\n\n .template-line :global(p) {\n margin: 0;\n }\n\n .layout-audio_blank_only :global(.pie-audio-container),\n .layout-stimulus_image_blank :global(.pie-audio-container) {\n display: flex;\n width: min(100%, var(--mpb-audio-instructions-max-width, 875px));\n margin-left: auto;\n margin-right: auto;\n justify-content: flex-end;\n }\n\n .layout-audio_blank_only .template-line,\n .layout-stimulus_image_blank .template-line {\n text-align: center;\n margin: var(--mpb-audio-blank-template-margin-top, 0.8rem) 0\n var(--mpb-audio-blank-template-margin-bottom, 1.8rem);\n }\n\n .layout-audio_blank_only fieldset {\n display: flex;\n justify-content: center;\n }\n\n .layout-audio_blank_only :global(.pie-blank-slot),\n .layout-stimulus_image_blank :global(.pie-blank-slot) {\n width: var(--mpb-blank-wide-width, 10rem);\n border-bottom-width: var(--mpb-blank-underline-wide-width, 6px);\n min-height: 160px;\n padding-bottom: 4px;\n }\n\n .layout-stimulus_image_blank {\n display: grid;\n grid-template-columns: minmax(var(--mpb-stimulus-min-column, 210px), 1fr) auto;\n grid-template-areas:\n 'transcript transcript'\n 'sentence audio'\n '. template'\n 'choices choices';\n column-gap: var(--mpb-stimulus-grid-column-gap, 2rem);\n row-gap: var(--mpb-stimulus-grid-row-gap, 0.7rem);\n align-items: start;\n }\n\n .layout-stimulus_image_blank .pie-audio-transcript {\n grid-area: transcript;\n }\n\n .layout-stimulus_image_blank :global(.pie-audio-container) {\n grid-area: audio;\n margin: 0;\n }\n\n .layout-stimulus_image_blank .sentence-line {\n grid-area: sentence;\n margin: var(--mpb-stimulus-sentence-margin-top, 0.2rem) 0 0;\n }\n\n .layout-stimulus_image_blank .template-line {\n grid-area: template;\n margin: 0;\n text-align: center;\n justify-self: center;\n }\n\n .layout-stimulus_image_blank fieldset {\n grid-area: choices;\n margin-top: var(--mpb-stimulus-choices-margin-top, 0.9rem);\n }\n\n .layout-token_sequence {\n display: grid;\n grid-template-columns: 1fr auto;\n grid-template-areas:\n 'transcript audio'\n 'template template'\n 'choices choices';\n column-gap: var(--mpb-token-grid-column-gap, 1.5rem);\n row-gap: var(--mpb-token-grid-row-gap, 0.8rem);\n align-items: start;\n }\n\n .layout-token_sequence .pie-audio-transcript {\n grid-area: transcript;\n }\n\n .layout-token_sequence :global(.pie-audio-container) {\n grid-area: audio;\n margin: 0;\n justify-self: end;\n }\n\n .layout-token_sequence .template-line {\n grid-area: template;\n margin: var(--mpb-token-template-margin-top, 0.6rem) 0 0;\n justify-self: center;\n text-align: center;\n }\n\n .layout-token_sequence .template-line :global(span + span) {\n margin-left: var(--mpb-token-inline-token-gap, 0.35rem);\n }\n\n .layout-token_sequence :global(.pie-blank-slot) {\n width: var(--mpb-blank-standalone-width, 7rem);\n border-bottom-width: var(--mpb-blank-underline-wide-width, 4px);\n margin-left: var(--mpb-token-inline-token-gap, 0.35rem);\n }\n\n .layout-token_sequence fieldset {\n grid-area: choices;\n margin-top: var(--mpb-token-choices-margin-top, 0.2rem);\n }\n\n .layout-inline_sentence.has-inline-audio {\n display: grid;\n grid-template-columns: minmax(var(--mpb-text-min-column, 260px), 1fr) auto;\n grid-template-areas:\n 'transcript transcript'\n 'template audio'\n 'choices choices';\n column-gap: var(--mpb-inline-grid-column-gap, 1.5rem);\n row-gap: var(--mpb-inline-grid-row-gap, 0.65rem);\n align-items: start;\n }\n\n .layout-inline_sentence.has-inline-audio .pie-audio-transcript {\n grid-area: transcript;\n }\n\n .layout-inline_sentence.has-inline-audio :global(.pie-audio-container) {\n grid-area: audio;\n margin: 0;\n justify-self: end;\n }\n\n .layout-inline_sentence.has-inline-audio .template-line {\n grid-area: template;\n margin: var(--mpb-inline-template-margin-top, 0.45rem) 0 0;\n text-align: center;\n justify-self: center;\n }\n\n .layout-inline_sentence.has-inline-audio fieldset {\n grid-area: choices;\n margin-top: var(--mpb-inline-choices-margin-top, 0.25rem);\n }\n\n /* Match Learnosity responsive behavior for CQT audio-blank layouts:\n at smaller widths, audio control shifts left and answer tiles stack. */\n @media (max-width: 760px) {\n .layout-audio_blank_only :global(.pie-audio-container),\n .layout-stimulus_image_blank :global(.pie-audio-container),\n .layout-token_sequence :global(.pie-audio-container),\n .layout-inline_sentence.has-inline-audio :global(.pie-audio-container) {\n width: 100%;\n margin-left: 0;\n margin-right: 0;\n justify-content: flex-start;\n justify-self: start;\n }\n\n .layout-audio_blank_only .pie-choices,\n .layout-token_sequence .pie-choices,\n .layout-stimulus_image_blank .pie-choices,\n .layout-inline_sentence.has-inline-audio .pie-choices {\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n }\n\n .layout-audio_blank_only .choice-row-horizontal,\n .layout-token_sequence .choice-row-horizontal,\n .layout-stimulus_image_blank .choice-row-horizontal,\n .layout-inline_sentence.has-inline-audio .choice-row-horizontal {\n width: min(100%, var(--mpb-narrow-choice-max-width, 230px));\n align-items: flex-start;\n }\n }\n</style>\n","import McPopulatedBlankComponent from './McPopulatedBlank.svelte';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-lib/delivery-events-svelte';\n\nfunction isComplete(model: any, session: any, audioComplete = false): boolean {\n if (!session?.choiceId) return false;\n const requiresAudioCompletion =\n !!model?.autoplayAudioEnabled && !!model?.completeAudioEnabled && !!model?.hasAudio;\n if (requiresAudioCompletion && !audioComplete) return false;\n return true;\n}\n\nconst SvelteElementClass = (McPopulatedBlankComponent as any).element;\n\nclass McPopulatedBlankElement extends SvelteElementClass {\n _internalSession: any = null;\n _model: any = null;\n _options: any = null;\n audioComplete = false;\n\n _dispatchModelSet = () => {\n this.dispatchEvent(\n new ModelSetEvent(this.tagName.toLowerCase(), this._isComplete(), this._model !== undefined)\n );\n };\n\n _dispatchSessionChanged = () => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), this._isComplete()));\n };\n\n set model(m: any) {\n this._model = m;\n this.audioComplete = false;\n super.model = m;\n this._dispatchModelSet();\n }\n\n get model() {\n return this._model;\n }\n\n set session(s: any) {\n this._internalSession = s;\n super.session = s;\n this._dispatchSessionChanged();\n }\n\n get session() {\n return this._internalSession;\n }\n\n set options(o: any) {\n this._options = o;\n super.options = o;\n }\n\n get options() {\n return this._options;\n }\n\n onSessionChange = (updatedSession: any) => {\n this._internalSession = updatedSession;\n super.session = updatedSession;\n this._dispatchSessionChanged();\n };\n\n onAudioStarted = () => {\n this._internalSession = {\n ...(this._internalSession || {}),\n audioStartTime: Date.now(),\n };\n };\n\n onAudioEnded = () => {\n this.audioComplete = true;\n this._internalSession = {\n ...(this._internalSession || {}),\n audioEndTime: Date.now(),\n };\n this._dispatchSessionChanged();\n };\n\n _isComplete = () => {\n return isComplete(this._model, this._internalSession, this.audioComplete);\n };\n\n connectedCallback() {\n super.connectedCallback();\n (this as any).onSessionChange = this.onSessionChange;\n (this as any).onAudioStarted = this.onAudioStarted;\n (this as any).onAudioEnded = this.onAudioEnded;\n }\n}\n\nexport default McPopulatedBlankElement;\n"],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
//#region src/shared/layoutLimits.ts
|
|
2
|
-
var e = {
|
|
3
|
-
blankStandaloneWidthRem: 7,
|
|
4
|
-
blankWideWidthRem: 10,
|
|
5
|
-
blankUnderlineWidthPx: 2,
|
|
6
|
-
blankUnderlineWideWidthPx: 4,
|
|
7
|
-
horizontalChoiceWidthPx: 170,
|
|
8
|
-
horizontalChoiceWidthVw: 30,
|
|
9
|
-
horizontalChoiceTileMinHeightRem: 11,
|
|
10
|
-
horizontalChoiceContentMinHeightRem: 7.5,
|
|
11
|
-
selectedImageMaxHeightRem: 4,
|
|
12
|
-
choiceImageMaxHeightRem: 5,
|
|
13
|
-
listenButtonSizePx: 128,
|
|
14
|
-
stimulusMinColumnPx: 210,
|
|
15
|
-
textMinColumnPx: 260,
|
|
16
|
-
legendMaxChars: 120,
|
|
17
|
-
choiceGroupGapRem: .5,
|
|
18
|
-
choiceRowGapRem: .5,
|
|
19
|
-
toggleButtonGapRem: .5,
|
|
20
|
-
horizontalChoiceRadioTopMarginRem: .5,
|
|
21
|
-
audioBlankTemplateMarginTopRem: .8,
|
|
22
|
-
audioBlankTemplateMarginBottomRem: 1.8,
|
|
23
|
-
audioInstructionsMaxWidthPx: 875,
|
|
24
|
-
narrowHorizontalChoiceMaxWidthPx: 230,
|
|
25
|
-
stimulusGridColumnGapRem: 2,
|
|
26
|
-
stimulusGridRowGapRem: .7,
|
|
27
|
-
stimulusSentenceMarginTopRem: .2,
|
|
28
|
-
stimulusChoicesMarginTopRem: .9,
|
|
29
|
-
tokenGridColumnGapRem: 1.5,
|
|
30
|
-
tokenGridRowGapRem: .8,
|
|
31
|
-
tokenTemplateMarginTopRem: .6,
|
|
32
|
-
tokenInlineTokenGapRem: .35,
|
|
33
|
-
tokenChoicesMarginTopRem: .2,
|
|
34
|
-
inlineGridColumnGapRem: 1.5,
|
|
35
|
-
inlineGridRowGapRem: .65,
|
|
36
|
-
inlineTemplateMarginTopRem: .45,
|
|
37
|
-
inlineChoicesMarginTopRem: .25
|
|
38
|
-
};
|
|
39
|
-
//#endregion
|
|
40
|
-
export { e as t };
|
|
41
|
-
|
|
42
|
-
//# sourceMappingURL=layoutLimits-ATKOwLHb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layoutLimits-ATKOwLHb.js","names":[],"sources":["../../src/shared/layoutLimits.ts"],"sourcesContent":["export type LayoutLimits = {\n blankStandaloneWidthRem: number;\n blankWideWidthRem: number;\n blankUnderlineWidthPx: number;\n blankUnderlineWideWidthPx: number;\n horizontalChoiceWidthPx: number;\n horizontalChoiceWidthVw: number;\n horizontalChoiceTileMinHeightRem: number;\n horizontalChoiceContentMinHeightRem: number;\n selectedImageMaxHeightRem: number;\n choiceImageMaxHeightRem: number;\n listenButtonSizePx: number;\n stimulusMinColumnPx: number;\n textMinColumnPx: number;\n legendMaxChars: number;\n choiceGroupGapRem: number;\n choiceRowGapRem: number;\n toggleButtonGapRem: number;\n horizontalChoiceRadioTopMarginRem: number;\n audioBlankTemplateMarginTopRem: number;\n audioBlankTemplateMarginBottomRem: number;\n audioInstructionsMaxWidthPx: number;\n narrowHorizontalChoiceMaxWidthPx: number;\n stimulusGridColumnGapRem: number;\n stimulusGridRowGapRem: number;\n stimulusSentenceMarginTopRem: number;\n stimulusChoicesMarginTopRem: number;\n tokenGridColumnGapRem: number;\n tokenGridRowGapRem: number;\n tokenTemplateMarginTopRem: number;\n tokenInlineTokenGapRem: number;\n tokenChoicesMarginTopRem: number;\n inlineGridColumnGapRem: number;\n inlineGridRowGapRem: number;\n inlineTemplateMarginTopRem: number;\n inlineChoicesMarginTopRem: number;\n};\n\n/** Baseline values tuned to match historical CQT visuals; override via model.layoutLimits. */\nexport const DEFAULT_LAYOUT_LIMITS: LayoutLimits = {\n blankStandaloneWidthRem: 7,\n blankWideWidthRem: 10,\n blankUnderlineWidthPx: 2,\n blankUnderlineWideWidthPx: 4,\n horizontalChoiceWidthPx: 170,\n horizontalChoiceWidthVw: 30,\n horizontalChoiceTileMinHeightRem: 11,\n horizontalChoiceContentMinHeightRem: 7.5,\n selectedImageMaxHeightRem: 4,\n choiceImageMaxHeightRem: 5,\n listenButtonSizePx: 128,\n stimulusMinColumnPx: 210,\n textMinColumnPx: 260,\n legendMaxChars: 120,\n choiceGroupGapRem: 0.5,\n choiceRowGapRem: 0.5,\n toggleButtonGapRem: 0.5,\n horizontalChoiceRadioTopMarginRem: 0.5,\n audioBlankTemplateMarginTopRem: 0.8,\n audioBlankTemplateMarginBottomRem: 1.8,\n audioInstructionsMaxWidthPx: 875,\n narrowHorizontalChoiceMaxWidthPx: 230,\n stimulusGridColumnGapRem: 2,\n stimulusGridRowGapRem: 0.7,\n stimulusSentenceMarginTopRem: 0.2,\n stimulusChoicesMarginTopRem: 0.9,\n tokenGridColumnGapRem: 1.5,\n tokenGridRowGapRem: 0.8,\n tokenTemplateMarginTopRem: 0.6,\n tokenInlineTokenGapRem: 0.35,\n tokenChoicesMarginTopRem: 0.2,\n inlineGridColumnGapRem: 1.5,\n inlineGridRowGapRem: 0.65,\n inlineTemplateMarginTopRem: 0.45,\n inlineChoicesMarginTopRem: 0.25,\n};\n"],"mappings":";AAuCA,IAAa,IAAsC;CACjD,yBAAyB;CACzB,mBAAmB;CACnB,uBAAuB;CACvB,2BAA2B;CAC3B,yBAAyB;CACzB,yBAAyB;CACzB,kCAAkC;CAClC,qCAAqC;CACrC,2BAA2B;CAC3B,yBAAyB;CACzB,oBAAoB;CACpB,qBAAqB;CACrB,iBAAiB;CACjB,gBAAgB;CAChB,mBAAmB;CACnB,iBAAiB;CACjB,oBAAoB;CACpB,mCAAmC;CACnC,gCAAgC;CAChC,mCAAmC;CACnC,6BAA6B;CAC7B,kCAAkC;CAClC,0BAA0B;CAC1B,uBAAuB;CACvB,8BAA8B;CAC9B,6BAA6B;CAC7B,uBAAuB;CACvB,oBAAoB;CACpB,2BAA2B;CAC3B,wBAAwB;CACxB,0BAA0B;CAC1B,wBAAwB;CACxB,qBAAqB;CACrB,4BAA4B;CAC5B,2BAA2B;AAC7B"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { A as e, C as t, E as n, M as r, N as i, O as a, P as o, S as s, T as c, _ as l, a as u, b as d, d as f, f as p, g as m, h, j as g, k as _, m as v, n as y, p as b, t as x, u as S, v as C, w, x as T } from "../client-B0miu8E8.js";
|
|
2
|
-
//#region src/print/Print.svelte
|
|
3
|
-
var E = C("<div class=\"mb-4 prose prose-sm svelte-1fx5wwa\"></div>"), D = C("<div class=\"mb-2 prose prose-sm svelte-1fx5wwa\"></div>"), O = C("<img class=\"max-h-14 object-contain\"/>"), k = C("<div class=\"mb-4 prose prose-sm svelte-1fx5wwa\"><!> <span class=\"inline-block min-w-[6rem] border-b-2 border-gray-600 print:border-black px-1\"><!></span> <!></div>"), A = C("<div><strong>Audio:</strong> </div>"), j = C("<div><strong>Transcript:</strong> </div>"), M = C("<div class=\"text-sm mb-4\"><!> <!></div>"), N = C("<span class=\"font-medium\"> </span> <!>", 1), ee = C("<span class=\"font-medium\">(key)</span>"), te = C("<!> <!>", 1), ne = C("<li><!></li>"), P = C("<div class=\"p-4 print:p-0\"><!> <!> <!> <!> <ul class=\"text-sm list-disc pl-5\"></ul></div>"), F = {
|
|
4
|
-
hash: "svelte-1fx5wwa",
|
|
5
|
-
code: ".prose.svelte-1fx5wwa p {margin:0.5em 0;}.prose.svelte-1fx5wwa strong {font-weight:600;}"
|
|
6
|
-
};
|
|
7
|
-
function I(x, C) {
|
|
8
|
-
i(C, !0), S(x, F);
|
|
9
|
-
let I = y(C, "model", 7, null), L = _(""), R = _("");
|
|
10
|
-
t(() => {
|
|
11
|
-
a(L, I()?.prompt || "", !0), a(R, I()?.template || "", !0);
|
|
12
|
-
});
|
|
13
|
-
let z = e(() => {
|
|
14
|
-
let e = T(R).indexOf("{{blank}}");
|
|
15
|
-
return e < 0 ? {
|
|
16
|
-
before: T(R),
|
|
17
|
-
after: ""
|
|
18
|
-
} : {
|
|
19
|
-
before: T(R).slice(0, e),
|
|
20
|
-
after: T(R).slice(e + 9)
|
|
21
|
-
};
|
|
22
|
-
}), B = e(() => Array.isArray(I()?.choices) ? I().choices : []), V = e(() => I()?.choices?.find((e) => e.id === I()?.correctChoiceId)), H = e(() => I()?.choiceMode || "text"), U = e(() => I()?.interactionMode === "audio_mc_only"), W = e(() => I()?.printAnswerKey !== !1);
|
|
23
|
-
var G = {
|
|
24
|
-
get model() {
|
|
25
|
-
return I();
|
|
26
|
-
},
|
|
27
|
-
set model(e = null) {
|
|
28
|
-
I(e), g();
|
|
29
|
-
}
|
|
30
|
-
}, K = P(), q = w(K), J = (e) => {
|
|
31
|
-
var t = E();
|
|
32
|
-
f(t, () => T(L), !0), o(t), m(e, t);
|
|
33
|
-
};
|
|
34
|
-
v(q, (e) => {
|
|
35
|
-
T(L) && I()?.promptEnabled !== !1 && e(J);
|
|
36
|
-
});
|
|
37
|
-
var Y = n(q, 2), X = (e) => {
|
|
38
|
-
var t = D();
|
|
39
|
-
f(t, () => I().sentenceHtml, !0), o(t), m(e, t);
|
|
40
|
-
};
|
|
41
|
-
v(Y, (e) => {
|
|
42
|
-
I()?.sentenceHtml && e(X);
|
|
43
|
-
});
|
|
44
|
-
var Z = n(Y, 2), re = (e) => {
|
|
45
|
-
var t = k(), r = w(t);
|
|
46
|
-
f(r, () => T(z).before);
|
|
47
|
-
var i = n(r, 2), a = w(i), p = (e) => {
|
|
48
|
-
var t = O();
|
|
49
|
-
s(() => {
|
|
50
|
-
u(t, "src", T(V).imageUrl), u(t, "alt", T(V).imageAlt || "");
|
|
51
|
-
}), m(e, t);
|
|
52
|
-
}, h = (e) => {
|
|
53
|
-
var t = l();
|
|
54
|
-
f(c(t), () => T(V).labelHtml), m(e, t);
|
|
55
|
-
}, g = (e) => {
|
|
56
|
-
m(e, d("________"));
|
|
57
|
-
};
|
|
58
|
-
v(a, (e) => {
|
|
59
|
-
T(W) && T(H) === "image" && T(V)?.imageUrl ? e(p) : T(W) && T(V)?.labelHtml ? e(h, 1) : e(g, -1);
|
|
60
|
-
}), o(i), f(n(i, 2), () => T(z).after), o(t), m(e, t);
|
|
61
|
-
};
|
|
62
|
-
v(Z, (e) => {
|
|
63
|
-
T(U) || e(re);
|
|
64
|
-
});
|
|
65
|
-
var Q = n(Z, 2), ie = (e) => {
|
|
66
|
-
var t = M(), r = w(t), i = (e) => {
|
|
67
|
-
var t = A(), r = n(w(t));
|
|
68
|
-
o(t), s(() => h(r, ` ${I().audioUrl ?? ""}`)), m(e, t);
|
|
69
|
-
};
|
|
70
|
-
v(r, (e) => {
|
|
71
|
-
I()?.audioUrl && e(i);
|
|
72
|
-
});
|
|
73
|
-
var a = n(r, 2), c = (e) => {
|
|
74
|
-
var t = j(), r = n(w(t));
|
|
75
|
-
o(t), s(() => h(r, ` ${I().audioTranscript ?? ""}`)), m(e, t);
|
|
76
|
-
};
|
|
77
|
-
v(a, (e) => {
|
|
78
|
-
I()?.audioTranscript && e(c);
|
|
79
|
-
}), o(t), m(e, t);
|
|
80
|
-
};
|
|
81
|
-
v(Q, (e) => {
|
|
82
|
-
I()?.hasAudio && e(ie);
|
|
83
|
-
});
|
|
84
|
-
var $ = n(Q, 2);
|
|
85
|
-
return p($, 21, () => T(B), b, (e, t) => {
|
|
86
|
-
var r = ne(), i = w(r), a = (e) => {
|
|
87
|
-
var r = N(), i = c(r), a = w(i, !0);
|
|
88
|
-
o(i);
|
|
89
|
-
var l = n(i, 2), u = (e) => {
|
|
90
|
-
m(e, d("(key)"));
|
|
91
|
-
};
|
|
92
|
-
v(l, (e) => {
|
|
93
|
-
T(W) && T(t).id === I()?.correctChoiceId && e(u);
|
|
94
|
-
}), s(() => h(a, T(t).id)), m(e, r);
|
|
95
|
-
}, l = (e) => {
|
|
96
|
-
var r = te(), i = c(r);
|
|
97
|
-
f(i, () => T(t).labelHtml || "");
|
|
98
|
-
var a = n(i, 2), o = (e) => {
|
|
99
|
-
m(e, ee());
|
|
100
|
-
};
|
|
101
|
-
v(a, (e) => {
|
|
102
|
-
T(W) && T(t).id === I()?.correctChoiceId && e(o);
|
|
103
|
-
}), m(e, r);
|
|
104
|
-
};
|
|
105
|
-
v(i, (e) => {
|
|
106
|
-
T(H) === "image" ? e(a) : e(l, -1);
|
|
107
|
-
}), o(r), m(e, r);
|
|
108
|
-
}), o($), o(K), m(x, K), r(G);
|
|
109
|
-
}
|
|
110
|
-
x(I, { model: { type: "Object" } }, [], []);
|
|
111
|
-
//#endregion
|
|
112
|
-
//#region src/print/index.ts
|
|
113
|
-
var L = I.element, R = class extends L {
|
|
114
|
-
_model = null;
|
|
115
|
-
set model(e) {
|
|
116
|
-
this._model = e, super.model = e;
|
|
117
|
-
}
|
|
118
|
-
get model() {
|
|
119
|
-
return this._model;
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
//#endregion
|
|
123
|
-
export { R as default };
|
|
124
|
-
|
|
125
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/print/Print.svelte","../../../src/print/index.ts"],"sourcesContent":["<svelte:options\n customElement={{\n shadow: 'none',\n props: {\n model: { type: 'Object' },\n },\n }}\n/>\n\n<script lang=\"ts\">\nconst BLANK_TOKEN = '{{blank}}';\n\nlet { model = null }: { model?: any } = $props();\n\nlet prompt = $state('');\nlet template = $state('');\n$effect(() => {\n prompt = model?.prompt || '';\n template = model?.template || '';\n});\n\nconst parts = $derived.by(() => {\n const idx = template.indexOf(BLANK_TOKEN);\n if (idx < 0) return { before: template, after: '' };\n return { before: template.slice(0, idx), after: template.slice(idx + BLANK_TOKEN.length) };\n});\n\nconst choices = $derived(Array.isArray(model?.choices) ? model.choices : []);\nconst correct = $derived(model?.choices?.find((c: any) => c.id === model?.correctChoiceId));\nconst mode = $derived(model?.choiceMode || 'text');\nconst isAudioOnlyMode = $derived(model?.interactionMode === 'audio_mc_only');\nconst showAnswerKey = $derived(model?.printAnswerKey !== false);\n</script>\n\n<div class=\"p-4 print:p-0\">\n {#if prompt && model?.promptEnabled !== false}\n <div class=\"mb-4 prose prose-sm\">{@html prompt}</div>\n {/if}\n\n {#if model?.sentenceHtml}\n <div class=\"mb-2 prose prose-sm\">{@html model.sentenceHtml}</div>\n {/if}\n\n {#if !isAudioOnlyMode}\n <div class=\"mb-4 prose prose-sm\">\n {@html parts.before}\n <span class=\"inline-block min-w-[6rem] border-b-2 border-gray-600 print:border-black px-1\">\n {#if showAnswerKey && mode === 'image' && correct?.imageUrl}\n <img src={correct.imageUrl} alt={correct.imageAlt || ''} class=\"max-h-14 object-contain\" />\n {:else if showAnswerKey && correct?.labelHtml}\n {@html correct.labelHtml}\n {:else}\n ________\n {/if}\n </span>\n {@html parts.after}\n </div>\n {/if}\n\n {#if model?.hasAudio}\n <div class=\"text-sm mb-4\">\n {#if model?.audioUrl}\n <div><strong>Audio:</strong> {model.audioUrl}</div>\n {/if}\n {#if model?.audioTranscript}\n <div><strong>Transcript:</strong> {model.audioTranscript}</div>\n {/if}\n </div>\n {/if}\n\n <ul class=\"text-sm list-disc pl-5\">\n {#each choices as c}\n <li>\n {#if mode === 'image'}\n <span class=\"font-medium\">{c.id}</span>\n {#if showAnswerKey && c.id === model?.correctChoiceId}(key){/if}\n {:else}\n {@html c.labelHtml || ''}\n {#if showAnswerKey && c.id === model?.correctChoiceId}\n <span class=\"font-medium\"> (key)</span>\n {/if}\n {/if}\n </li>\n {/each}\n </ul>\n</div>\n\n<style>\n .prose :global(p) {\n margin: 0.5em 0;\n }\n .prose :global(strong) {\n font-weight: 600;\n }\n</style>\n","import PrintComponent from './Print.svelte';\n\nconst SvelteElementClass = (PrintComponent as any).element;\n\nclass McPopulatedBlankPrint extends SvelteElementClass {\n private _model: any = null;\n\n set model(m: any) {\n this._model = m;\n super.model = m;\n }\n\n get model() {\n return this._model;\n }\n}\n\nexport default McPopulatedBlankPrint;\n"],"mappings":"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"}
|
package/dist/runtime-support.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
//#region src/runtime-support.ts
|
|
2
|
-
var e = {
|
|
3
|
-
schemaVersion: 1,
|
|
4
|
-
packageName: "@pie-element/mc-populated-blank",
|
|
5
|
-
supports: { esm: {
|
|
6
|
-
delivery: !0,
|
|
7
|
-
author: !0,
|
|
8
|
-
print: !0
|
|
9
|
-
} }
|
|
10
|
-
};
|
|
11
|
-
//#endregion
|
|
12
|
-
export { e as default, e as runtimeSupport };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=runtime-support.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-support.js","names":[],"sources":["../src/runtime-support.ts"],"sourcesContent":["export const runtimeSupport = {\n schemaVersion: 1,\n packageName: '@pie-element/mc-populated-blank',\n supports: {\n esm: {\n delivery: true,\n author: true,\n print: true,\n },\n },\n};\n\nexport default runtimeSupport;\n"],"mappings":";AAAA,IAAa,IAAiB;CAC5B,eAAe;CACf,aAAa;CACb,UAAU,EACR,KAAK;EACH,UAAU;EACV,QAAQ;EACR,OAAO;CACT,EACF;AACF"}
|