@webwriter/quiz 1.1.3 → 2.0.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.
Files changed (167) hide show
  1. package/.github/workflows/publish.yml +8 -0
  2. package/LICENSE +6 -6
  3. package/README.md +778 -0
  4. package/assets/icons/grip-horizontal.svg +8 -0
  5. package/assets/icons/grip-vertical.svg +8 -0
  6. package/assets/icons/truefalse.svg +6 -0
  7. package/custom-elements.json +2779 -0
  8. package/custom.d.ts +180 -176
  9. package/dist/api/index.d.ts +27 -0
  10. package/dist/api/index.js +40 -0
  11. package/dist/migrate.js +1434 -0
  12. package/dist/widgets/webwriter-choice-item.js +4036 -3895
  13. package/dist/widgets/webwriter-choice.js +2269 -5821
  14. package/dist/widgets/webwriter-gap-item.js +3987 -0
  15. package/dist/widgets/webwriter-gap.js +2908 -0
  16. package/dist/widgets/webwriter-mark.js +4335 -3489
  17. package/dist/widgets/webwriter-order-item.js +4014 -3306
  18. package/dist/widgets/webwriter-order.js +2944 -4386
  19. package/dist/widgets/webwriter-pairing-item.js +1058 -2421
  20. package/dist/widgets/webwriter-pairing.js +2993 -4383
  21. package/dist/widgets/webwriter-quiz-hint.js +2469 -0
  22. package/dist/widgets/webwriter-quiz.js +4933 -6099
  23. package/dist/widgets/webwriter-speech.js +6077 -5230
  24. package/dist/widgets/webwriter-task-prompt.js +4775 -2165
  25. package/dist/widgets/webwriter-task.js +2364 -8382
  26. package/dist/widgets/webwriter-text.js +4169 -4337
  27. package/dist/widgets/webwriter-true-false.js +4674 -0
  28. package/editing-config.json +106 -0
  29. package/lit-localize.json +21 -15
  30. package/localization/de.xlf +407 -74
  31. package/localization/es.xlf +407 -69
  32. package/localization/fr.xlf +407 -69
  33. package/localization/generated/de.ts +112 -29
  34. package/localization/generated/es.ts +112 -29
  35. package/localization/generated/fr.ts +112 -29
  36. package/localization/generated/index.d.ts +5 -0
  37. package/localization/generated/index.js +2 -2
  38. package/localization/generated/it.ts +112 -29
  39. package/localization/generated/locale-codes.js +31 -79
  40. package/localization/generated/nl.ts +112 -29
  41. package/localization/it.xlf +407 -69
  42. package/localization/nl.xlf +407 -69
  43. package/package.json +119 -252
  44. package/scripts/apply-translations.mjs +97 -0
  45. package/src/api/index.ts +72 -0
  46. package/src/lib/artboard.ts +686 -0
  47. package/src/lib/draggable-grid.ts +432 -0
  48. package/src/lib/encrypted-property.ts +202 -0
  49. package/src/lib/hint-popup.ts +152 -0
  50. package/src/lib/utils.ts +97 -0
  51. package/src/lib/webwriter-quirks.ts +121 -0
  52. package/src/migrate/index.ts +622 -0
  53. package/src/migrate/legacy-solution.ts +362 -0
  54. package/src/snippets/order.html +9 -8
  55. package/src/widgets/choice/webwriter-choice-item.ts +316 -0
  56. package/src/widgets/choice/webwriter-choice.ts +328 -0
  57. package/src/widgets/choice/webwriter-true-false.ts +113 -0
  58. package/src/widgets/dnd/webwriter-dnd-draggable.ts +28 -0
  59. package/src/widgets/dnd/webwriter-dnd-dropzone.ts +9 -0
  60. package/src/widgets/dnd/webwriter-dnd.ts +36 -0
  61. package/src/widgets/gap/webwriter-gap-item.ts +250 -0
  62. package/src/widgets/gap/webwriter-gap.ts +447 -0
  63. package/src/widgets/order/webwriter-order-item.ts +243 -0
  64. package/src/widgets/order/webwriter-order.ts +282 -0
  65. package/src/widgets/pairing/webwriter-pairing-item.ts +46 -0
  66. package/src/widgets/pairing/webwriter-pairing.ts +934 -0
  67. package/src/widgets/speech/audio-player.ts +325 -0
  68. package/src/widgets/speech/audio-recorder.ts +285 -0
  69. package/src/widgets/speech/waveform.ts +113 -0
  70. package/src/widgets/speech/webwriter-speech.ts +87 -0
  71. package/src/widgets/webwriter-mark.ts +374 -432
  72. package/src/widgets/webwriter-quiz-hint.ts +36 -0
  73. package/src/widgets/webwriter-quiz.ts +320 -282
  74. package/src/widgets/webwriter-task-prompt.ts +49 -24
  75. package/src/widgets/webwriter-task.ts +216 -547
  76. package/src/widgets/webwriter-text.ts +291 -156
  77. package/tsconfig.api.json +12 -0
  78. package/tsconfig.json +8 -7
  79. package/dist/widgets/webwriter-choice.css +0 -444
  80. package/dist/widgets/webwriter-cloze-gap.css +0 -444
  81. package/dist/widgets/webwriter-cloze-gap.js +0 -5866
  82. package/dist/widgets/webwriter-cloze.css +0 -444
  83. package/dist/widgets/webwriter-cloze.js +0 -3786
  84. package/dist/widgets/webwriter-mark.css +0 -444
  85. package/dist/widgets/webwriter-order.css +0 -444
  86. package/dist/widgets/webwriter-pairing-item.css +0 -444
  87. package/dist/widgets/webwriter-pairing.css +0 -444
  88. package/dist/widgets/webwriter-quiz.css +0 -444
  89. package/dist/widgets/webwriter-task-explainer.css +0 -444
  90. package/dist/widgets/webwriter-task-explainer.js +0 -2872
  91. package/dist/widgets/webwriter-task-hint.css +0 -444
  92. package/dist/widgets/webwriter-task-hint.js +0 -2811
  93. package/dist/widgets/webwriter-task.css +0 -444
  94. package/dist/widgets/webwriter-text.css +0 -444
  95. package/localization/bg.xlf +0 -69
  96. package/localization/cs.xlf +0 -69
  97. package/localization/da.xlf +0 -69
  98. package/localization/el.xlf +0 -69
  99. package/localization/et.xlf +0 -69
  100. package/localization/fi.xlf +0 -69
  101. package/localization/generated/bg.ts +0 -30
  102. package/localization/generated/cs.ts +0 -30
  103. package/localization/generated/da.ts +0 -30
  104. package/localization/generated/el.ts +0 -30
  105. package/localization/generated/et.ts +0 -30
  106. package/localization/generated/fi.ts +0 -30
  107. package/localization/generated/hu.ts +0 -30
  108. package/localization/generated/id.ts +0 -30
  109. package/localization/generated/ja.ts +0 -30
  110. package/localization/generated/ko.ts +0 -30
  111. package/localization/generated/lt.ts +0 -30
  112. package/localization/generated/lv.ts +0 -30
  113. package/localization/generated/nb.ts +0 -30
  114. package/localization/generated/pl.ts +0 -30
  115. package/localization/generated/pt-BR.ts +0 -30
  116. package/localization/generated/pt-PT.ts +0 -30
  117. package/localization/generated/ro.ts +0 -30
  118. package/localization/generated/ru.ts +0 -30
  119. package/localization/generated/sk.ts +0 -30
  120. package/localization/generated/sl.ts +0 -30
  121. package/localization/generated/sv.ts +0 -30
  122. package/localization/generated/tr.ts +0 -30
  123. package/localization/generated/uk.ts +0 -30
  124. package/localization/generated/zh-hans.ts +0 -30
  125. package/localization/hu.xlf +0 -69
  126. package/localization/id.xlf +0 -69
  127. package/localization/ja.xlf +0 -69
  128. package/localization/ko.xlf +0 -69
  129. package/localization/lt.xlf +0 -69
  130. package/localization/lv.xlf +0 -69
  131. package/localization/nb.xlf +0 -69
  132. package/localization/pl.xlf +0 -69
  133. package/localization/pt-BR.xlf +0 -69
  134. package/localization/pt-PT.xlf +0 -69
  135. package/localization/ro.xlf +0 -69
  136. package/localization/ru.xlf +0 -69
  137. package/localization/sk.xlf +0 -69
  138. package/localization/sl.xlf +0 -69
  139. package/localization/sv.xlf +0 -69
  140. package/localization/tr.xlf +0 -69
  141. package/localization/uk.xlf +0 -69
  142. package/localization/zh-hans.xlf +0 -69
  143. package/src/lib/combobox.ts +0 -456
  144. package/src/lib/highlighter-fill.svg +0 -6
  145. package/src/snippets/Beispiel-Choice.html +0 -57
  146. package/src/snippets/Beispiel-Mark.html +0 -14
  147. package/src/snippets/Beispiel-Order.html +0 -52
  148. package/src/snippets/Beispiel-Text.html +0 -20
  149. package/src/snippets/blank.html +0 -1
  150. package/src/snippets/choice.html +0 -8
  151. package/src/snippets/cloze.html +0 -4
  152. package/src/snippets/mark.html +0 -4
  153. package/src/snippets/pairing.html +0 -10
  154. package/src/snippets/speech.html +0 -4
  155. package/src/snippets/text.html +0 -4
  156. package/src/snippets/wordsearch.html +0 -4
  157. package/src/widgets/webwriter-choice-item.ts +0 -254
  158. package/src/widgets/webwriter-choice.ts +0 -353
  159. package/src/widgets/webwriter-cloze-gap.ts +0 -216
  160. package/src/widgets/webwriter-cloze.ts +0 -136
  161. package/src/widgets/webwriter-order-item.ts +0 -441
  162. package/src/widgets/webwriter-order.ts +0 -327
  163. package/src/widgets/webwriter-pairing-item.ts +0 -161
  164. package/src/widgets/webwriter-pairing.ts +0 -193
  165. package/src/widgets/webwriter-speech.ts +0 -273
  166. package/src/widgets/webwriter-task-explainer.ts +0 -43
  167. package/src/widgets/webwriter-task-hint.ts +0 -23
@@ -1,456 +0,0 @@
1
- import { LitElement, html, css, CSSResultArray, CSSResult, PropertyValueMap, PropertyValues } from "lit"
2
- import { customElement, property, query, queryAssignedElements } from "lit/decorators.js"
3
- import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"
4
- import SlOption from "@shoelace-style/shoelace/dist/components/option/option.component.js"
5
- import IconChevronDown from "bootstrap-icons/icons/chevron-down.svg"
6
-
7
- import { ifDefined } from "lit/directives/if-defined.js"
8
- import { styleMap } from "lit/directives/style-map.js"
9
-
10
- @customElement("ww-combobox")
11
- export class Combobox extends LitElement {
12
-
13
- static shadowRootOptions = {...LitElement.shadowRootOptions, delegatesFocus: true}
14
-
15
- constructor() {
16
- super()
17
- this.addEventListener("focus", e => {this.active = true; this.open = true})
18
- this.addEventListener("focusout", e => {
19
- this.active = this.open = false
20
- })
21
- this.addEventListener("blur", e => {
22
- this.active = this.open = false
23
- })
24
- this.value = this.defaultValue = this.multiple? []: ""
25
- }
26
-
27
- tabIndex = 0
28
-
29
- @property({attribute: false}) //@ts-ignore
30
- accessor value: string[] | string
31
-
32
- @property({attribute: false}) //@ts-ignore
33
- accessor defaultValue: string[] | string
34
-
35
- @query("input") //@ts-ignore
36
- accessor input: HTMLInputElement
37
-
38
- @query("#toggle")
39
- accessor toggleButton: HTMLInputElement
40
-
41
- @query("slot:not([name])")
42
- accessor slotElement: HTMLSlotElement
43
-
44
- @queryAssignedElements()
45
- accessor optionElements: HTMLElement[]
46
-
47
- @property({type: String, attribute: true}) //@ts-ignore
48
- accessor autocomplete: SlInput["autocomplete"] = "off"
49
-
50
- @property({type: Boolean, attribute: true, reflect: true})
51
- accessor active: boolean
52
-
53
- @property({type: Boolean, attribute: true, reflect: true})
54
- accessor inputDisabled: boolean = false
55
-
56
- @property({type: Boolean, attribute: true, reflect: true})
57
- accessor multiple: boolean = false
58
-
59
- @property({type: String}) //@ts-ignore
60
- accessor placeholder: string
61
-
62
- @property({type: String, attribute: true, reflect: true})
63
- accessor emptyValue: string
64
-
65
- @property({type: Boolean, attribute: true, reflect: true})
66
- accessor open: boolean = false
67
-
68
- @property({type: Boolean, attribute: true, reflect: true})
69
- accessor suggestions: boolean = false
70
-
71
- @property({type: String, attribute: "help-text"}) //@ts-ignore
72
- accessor helpText: string
73
-
74
- @property({type: Number, attribute: true})
75
- accessor fixLength: number
76
-
77
- @property({type: String, attribute: true})
78
- accessor separator: string = " "
79
-
80
- @property({type: String, attribute: true})
81
- accessor placement = "bottom" as const
82
-
83
- @property({type: Boolean, attribute: true, reflect: true})
84
- accessor autosize = false
85
-
86
- @property({type: Boolean, attribute: true, reflect: true})
87
- accessor disabled = false
88
-
89
- @property({type: Boolean, attribute: true, reflect: true})
90
- accessor required = false
91
-
92
- @property({type: String, attribute: true, reflect: true})
93
- accessor type: "button" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "file" | "hidden" | "image" | "month" | "number" | "password" | "radio" | "range" | "reset" | "search" | "submit" | "tel" | "text" | "time" | "url" | "week"
94
-
95
- @property({type: String, attribute: true, reflect: true})
96
- accessor label: string
97
-
98
- get validity() {
99
- return this.input.validity
100
- }
101
-
102
- get validationMessage() {
103
- return this.input.validationMessage
104
- }
105
-
106
- setValidity(isValid: boolean) {
107
- const host = this
108
- const required = Boolean(this.required)
109
- host.toggleAttribute('data-required', required)
110
- host.toggleAttribute('data-optional', !required)
111
- host.toggleAttribute('data-invalid', !isValid)
112
- host.toggleAttribute('data-valid', isValid)
113
- }
114
-
115
- focus() {
116
- if(this.inputDisabled && this.suggestions) {
117
- this.open = !this.open
118
- super.focus()
119
- }
120
- else {
121
- this.input?.focus()
122
- }
123
- }
124
-
125
- blur() {
126
- this.open = false
127
- }
128
-
129
- getForm() {
130
- return this.input.form
131
- }
132
-
133
- static styles: CSSResult | CSSResultArray = [SlInput.styles, css`
134
- * {
135
- font-family: var(--sl-font-sans);
136
- }
137
-
138
- :host {
139
- display: flex;
140
- flex-direction: column;
141
- }
142
-
143
- [part=base] {
144
- display: flex;
145
- flex-direction: row;
146
- justify-content: space-between;
147
- align-items: center;
148
- position: relative;
149
- border: solid var(--sl-input-border-width) var(--sl-input-border-color);
150
- border-radius: var(--sl-input-border-radius-medium);
151
- max-width: 100%;
152
- min-height: var(--sl-input-height-medium);
153
- padding: 0 var(--sl-input-spacing-medium);
154
- padding-right: 0;
155
- background: white;
156
- }
157
-
158
- :host(:not([inputDisabled]):not([disabled])) {
159
- cursor: text;
160
- }
161
-
162
- :host([inputDisabled]:not([disabled])), :host([inputDisabled]:not([disabled])) input {
163
- cursor: pointer;
164
- }
165
-
166
- :host([multiple]) [part=base] {
167
- flex-wrap: wrap;
168
- }
169
-
170
- :host([filled]) [part=base] {
171
- background: var(--sl-input-filled-background-color);
172
- }
173
-
174
- :host([active]) [part=base] {
175
- border-color: var(--sl-input-border-color-focus);
176
- box-shadow: 0 0 0 var(--sl-focus-ring-width) var(--sl-input-focus-ring-color);
177
- }
178
-
179
- :host([disabled]) [part=base] {
180
- background: none;
181
- }
182
-
183
- :host(:hover) [part=base] {
184
- border-color: var(--sl-color-gray-400);
185
- }
186
-
187
- #values {
188
- display: flex;
189
- flex-direction: row;
190
- align-items: center;
191
- gap: 0.25rem;
192
- padding-top: 0.25rem;
193
- padding-bottom: 0.25rem;
194
- flex-wrap: wrap;
195
- }
196
-
197
- #values > * {
198
- margin-top: 0.125rem;
199
- margin-bottom: 0.125rem;
200
- }
201
-
202
- #options {
203
- display: block;
204
- font-family: var(--sl-font-sans);
205
- font-size: var(--sl-font-size-medium);
206
- font-weight: var(--sl-font-weight-normal);
207
- box-shadow: var(--sl-shadow-large);
208
- background: var(--sl-panel-background-color);
209
- border: solid var(--sl-panel-border-width) var(--sl-panel-border-color);
210
- border-radius: var(--sl-border-radius-medium);
211
- padding-block: var(--sl-spacing-x-small);
212
- padding-inline: 0;
213
- overflow: auto;
214
- overscroll-behavior: none;
215
- width: 100%;
216
- max-height: var(--auto-size-available-height);
217
- }
218
-
219
- :host(:is(:not([open]), :not([suggestions]))) #options {
220
- display: none;
221
- }
222
-
223
- #options::part(base) {
224
- width: 100%;
225
- border-top: none;
226
- }
227
-
228
- input {
229
- flex-grow: 1;
230
- display: inline-flex;
231
- border: none;
232
- outline: none;
233
- background: transparent;
234
- font-size: var(--sl-input-font-size-small);
235
- }
236
-
237
- :host(:not([suggestions])) sl-menu, :host(:not([suggestions])) #toggle {
238
- display: none;
239
- }
240
-
241
- #toggle {
242
- padding-right: var(--sl-input-spacing-medium);
243
- }
244
-
245
- :host([size=small]) #toggle {
246
- padding-right: var(--sl-spacing-2x-small);
247
- font-size: var(--sl-input-font-size-small);
248
- }
249
-
250
- #toggle::part(base) {
251
- padding: 0;
252
- }
253
-
254
- #toggle::part(base) {
255
- transition: transform 0.25s ease;
256
- }
257
-
258
- :host([open]) #toggle::part(base) {
259
- transform: rotate(180deg);
260
- }
261
-
262
- :host([open]) {
263
- z-index: 100;
264
- }
265
-
266
- sl-dropdown::part(panel) {
267
- width: 100%;
268
- }
269
-
270
- [part=suffix] {
271
- display: flex;
272
- flex-direction: row;
273
- align-items: center;
274
- justify-content: flex-end;
275
- max-width: 50%;
276
- flex-grow: 0;
277
- }
278
-
279
- [part=label]::slotted(*), label {
280
- align-self: flex-start;
281
- margin-bottom: var(--sl-spacing-3x-small);
282
- }
283
-
284
- :host([required]) [part=label]::after {
285
- content: "*";
286
- margin-left: 0.25ch;
287
- }
288
-
289
- :host(:not([help-text])) #help-text {
290
- display: none;
291
- }
292
-
293
- #help-text {
294
- font-size: var(--sl-input-help-text-font-size-medium);
295
- color: var(--sl-input-help-text-color);
296
- margin-top: var(--sl-spacing-3x-small);
297
- }
298
-
299
- slot[name=prefix]::slotted(:last-child) {
300
- margin-right: 1ch;
301
- }
302
-
303
- :host([size=small]) [part=base] {
304
- min-height: var(--sl-input-height-small);
305
- padding: 0 var(--sl-input-spacing-small);
306
- }
307
-
308
- #hide {
309
- height: 0;
310
- position: absolute;
311
- right: 0;
312
- bottom: 0;
313
- white-space: pre;
314
- overflow: hidden;
315
- font-size: var(--sl-input-font-size-small);
316
- }
317
- `]
318
-
319
- handleTextInput(e: Event) {
320
- const input = e.target as HTMLInputElement
321
- e.preventDefault()
322
- if(!this.multiple && this.fixLength && input.value.length < this.fixLength) {
323
- input.value = this.value as string
324
- }
325
- else if(!this.multiple) {
326
- this.value = input.value
327
- }
328
- else if(input.value === this.separator) {
329
- input.value = ""
330
- }
331
- else {
332
- this.value = [...this.valueList.slice(0, -1), ...input.value.split(this.separator)]
333
- input.value = this.valueList.at(-1)!
334
- }
335
- this.dispatchInput()
336
- this.setValidity(this.validity.valid)
337
- }
338
-
339
- handleInputKeydown(e: KeyboardEvent) {
340
- const input = e.target as HTMLInputElement
341
- if(this.multiple && e.key === "Backspace" && input.selectionStart === 0 && input.selectionEnd === 0) {
342
- e.preventDefault()
343
- this.value = this.valueList.slice(0, -1)
344
- }
345
- this.requestUpdate()
346
- }
347
-
348
- handleOptionClick = (e: PointerEvent) => {
349
- const option = (e.target as HTMLElement).closest("sl-option") as SlOption | null
350
- if(option) {
351
- this.value = option.value
352
- this.focus()
353
- this.open = false
354
- this.dispatchChange()
355
- this.requestUpdate()
356
- }
357
- }
358
-
359
- dispatchChange() {
360
- this.dispatchEvent(new CustomEvent("sl-change", {composed: true, bubbles: true}))
361
- }
362
-
363
- dispatchInput() {
364
- this.dispatchEvent(new CustomEvent("sl-input", {composed: true, bubbles: true}))
365
- }
366
-
367
- get valueList() {
368
- return (this.multiple? this.value || []: [this.value]) as string[]
369
- }
370
-
371
- get inputSize() {
372
- return !this.multiple? undefined: Math.min(
373
- Math.max(this.placeholder?.length ?? 1, this.valueList.at(-1)!?.length ?? 1 - 1),
374
- 40
375
- )
376
- }
377
-
378
- protected firstUpdated(_changedProperties: PropertyValues): void {
379
- super.firstUpdated(_changedProperties)
380
- this.requestUpdate()
381
- }
382
-
383
- connectedCallback(): void {
384
- super.connectedCallback()
385
- this.requestUpdate()
386
- }
387
-
388
- @query("#hide")
389
- accessor hideEl: HTMLElement
390
-
391
- @query("input")
392
- accessor inputEl: HTMLInputElement
393
-
394
- get inputWidth() {
395
- return this.hideEl? this.hideEl.offsetWidth: 0
396
- }
397
-
398
- get inputValue() {
399
- const value = this.multiple? this.valueList.at(-1) ?? "": String(this.value ?? "")
400
- return value !== this.emptyValue? value: ""
401
- }
402
-
403
- render() {
404
- const input = html`
405
- <input
406
- part="input"
407
- type=${this.type}
408
- size=${ifDefined(this.inputSize)}
409
- .value=${this.inputValue}
410
- placeholder=${this.multiple && this.valueList.length > 1? "": this.placeholder}
411
- ?disabled=${this.disabled || this.inputDisabled}
412
- @input=${this.handleTextInput}
413
- @change=${this.dispatchChange}
414
- @keydown=${this.handleInputKeydown}
415
- autocomplete=${this.autocomplete as any}
416
- style=${this.autosize? styleMap({width: `calc(${this.inputWidth}px + 2ch)`}): undefined}
417
- >
418
- `
419
- return html`
420
- <slot name="label" part="label" @click=${this.focus}>
421
- <label>${this.label}</label>
422
- </slot>
423
- <div part="base" id="anchor" tabindex=${0}>
424
- <slot name="prefix"></slot>
425
- ${this.multiple? html`
426
- <span id="values">
427
- <slot name="values"></slot>
428
- ${this.valueList.slice(0, -1).map(v => html`
429
- <sl-tag size="small" variant="primary">${v}</sl-tag>
430
- `)}
431
- ${input}
432
- </span>
433
- `: input}
434
- <div part="suffix">
435
- <slot name="suffix"></slot>
436
- <sl-icon-button
437
- slot="trigger"
438
- part="trigger"
439
- id="toggle"
440
- src=${IconChevronDown}
441
- @focus=${(e: Event) => e.stopPropagation()}
442
- @click=${(e: Event) => {this.open = !this.open; e.stopPropagation()}}
443
- @mousedown=${(e: Event) => {e.stopPropagation(); e.preventDefault()}}
444
- ></sl-icon-button>
445
- </div>
446
- </div>
447
- <sl-popup anchor="anchor" placement=${this.placement} strategy="fixed" ?active=${this.open} auto-size="vertical" auto-size-padding="10" flip shift>
448
- <sl-menu id="options" @click=${this.handleOptionClick}>
449
- <slot></slot>
450
- </sl-menu>
451
- </sl-popup>
452
- <div id="help-text">${this.helpText}</div>
453
- <span id="hide">${this.inputEl?.value}</span>
454
- `
455
- }
456
- }
@@ -1,6 +0,0 @@
1
- <svg width="20" height="20" fill="currentColor" class="bi bi-highlighter" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
2
- <path style="fill:#ffffff;stroke-width:0.0388979" d="M 12.979378,2.8366808 11.180665,1.1061689 11.312696,0.99938614 c 0.224798,-0.18180931 0.45821,-0.26011138 0.787279,-0.26410617 0.520565,-0.006315 0.605828,0.0505579 1.812273,1.20892583 1.20551,1.1574723 1.264697,1.239359 1.259768,1.7428933 -0.003,0.3118719 -0.08504,0.5291149 -0.285756,0.7571853 l -0.108172,0.1229081 z" id="path310" />
3
- <path style="fill:#ffffff;stroke-width:0.0327363" d="M 4.3293683,11.575933 C 2.3884046,9.6659098 2.3670623,9.6434959 2.4318197,9.5830841 2.4678415,9.5494798 4.3833896,7.8593211 6.6885933,5.827176 8.993797,3.795031 10.924803,2.0910543 10.97972,2.0405615 l 0.09985,-0.091804 1.524504,1.5011639 1.524504,1.501164 -3.894388,4.2701545 C 8.0922741,11.569823 6.329137,13.495058 6.316105,13.499537 6.3030731,13.504037 5.4090417,12.638394 4.3293683,11.575933 Z" id="path306" />
4
- <path style="fill:#ffffff;stroke-width:0.0401442" d="m 3.0376721,12.881037 -0.8289193,-0.721793 0.011549,-0.90713 0.011549,-0.907129 1.8721139,1.628923 1.8721139,1.628923 H 4.9213333 3.8665914 Z" id="path308" />
5
- <path fill-rule="evenodd" d="m 11.096,0.644 a 2,2 0 0 1 2.791,0.036 l 1.433,1.433 a 2,2 0 0 1 0.035,2.791 l -0.413,0.435 -8.07,8.995 A 0.5,0.5 0 0 1 6.5,14.5 h -3 A 0.5,0.5 0 0 1 3.266,14.442 L 2.854,14.854 A 0.5,0.5 0 0 1 2.5,15 h -2 A 0.5,0.5 0 0 1 0.146,14.146 L 1.558,12.734 A 0.5,0.5 0 0 1 1.5,12.5 v -3 A 0.5,0.5 0 0 1 1.666,9.128 l 8.995,-8.07 z M 10.981,2.114 2.727,9.52 6.48,13.273 13.886,5.019 Z m 3.585,2.17 0.064,-0.068 A 1,1 0 0 0 14.613,2.82 L 13.18,1.387 A 1,1 0 0 0 11.784,1.369 L 11.716,1.434 Z M 5.293,13.5 2.5,10.707 v 1.586 L 3.707,13.5 Z" id="path2" />
6
- </svg>
@@ -1,57 +0,0 @@
1
- <webwriter-task
2
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
3
- id="ww-e782e8fc-527e-4179-8e2e-d5d515a72e01"
4
- solution="data:application/octet-stream;base64,wEvYCTVh6LB1Tj7Rysh5Bf176dwhmpRmS4tgi/GfLvZQW0vHiSJf7NyLxEG2Rxmi2D3wy75QQESJDnA="
5
- iv="data:application/octet-stream;base64,/KZr600zHqfeRMwQ"
6
- salt="data:application/octet-stream;base64,5c4v616VGpv+r1qsw1yong=="
7
- hint=""
8
- >
9
- <webwriter-task-prompt
10
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
11
- id="ww-0cabba93-6581-4511-b7c9-a163fe842c93"
12
- slot="prompt"
13
- >
14
- <p>Welchen Vorgang betreiben Pflanzen?</p>
15
- </webwriter-task-prompt>
16
- <webwriter-task-hint
17
- class="ww-widget ww-v1.0.6-local"
18
- id="ww-fe237123-7753-4a01-b8d6-4a194dc66300"
19
- slot="hint"
20
- >
21
- <p>Das ist eine Hilfestellung</p>
22
- </webwriter-task-hint>
23
- <webwriter-choice
24
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
25
- id="ww-d45a21c9-0df0-4b4c-83ee-0ecf9c792652"
26
- mode="single"
27
- >
28
- <webwriter-choice-item
29
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
30
- id="ww-83b9ba07-a808-4b79-8585-3585343f3544"
31
- layout="list"
32
- >
33
- <p>Autoklavierung</p>
34
- </webwriter-choice-item>
35
- <webwriter-choice-item
36
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
37
- id="ww-e1082cc3-0f67-4716-9512-cb70287c87a5"
38
- layout="list"
39
- >
40
- <p>Stickstoffkreislauf</p>
41
- </webwriter-choice-item>
42
- <webwriter-choice-item
43
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
44
- id="ww-d3474662-343b-4beb-b032-b3903bba8c47"
45
- layout="list"
46
- >
47
- <p>Photosynthese</p>
48
- </webwriter-choice-item>
49
- <webwriter-choice-item
50
- class="ww-v1.0.5 ww-widget ww-v1.0.6-local"
51
- id="ww-311b80e8-d513-4685-a33d-c9effc81c356"
52
- layout="list"
53
- >
54
- <p>Konduktometrie</p>
55
- </webwriter-choice-item>
56
- </webwriter-choice>
57
- </webwriter-task>
@@ -1,14 +0,0 @@
1
- <webwriter-task class="ww-widget ww-v1.0.6-local"
2
- id="ww-246aa4b7-788c-436e-a377-21cd42bd2189"
3
- solution="data:application/octet-stream;base64,nWbpKpMC0ngEO5xQpIsatmqJjQXK2tjOhDmkA2CWZ/5a73gt5/kfJTpgM219qY5HkTUdVE0EIRFFK0y9mtF8nJOp7+3WkD68KIQtM4untbrs68adjKGSXAhlWxaMr/6lZV9o7PUWKox9M1zUmCtbiEnYwuDNzEyR7nqczZ6ScNKsJljzlhxUVzxNuD1u1dLGRWx4hAme7Giv4sYFgZEGoOa/1AiqeJfSX0suY0yJ0qF5LolnTlSDEeQMr9wxgKqS/NEuya9rKvSdDh3q4NM9VeQtj7mnVOTeoIwwkD4W5Txv0i3GWnKSddtseZrADrmwjtIaC5WF/QdEZJM8rVZG6RLrqJ2Sdh3P+UYaXnUs5e0CLSAt3PSIhh1MjY3Oe+7PaHGhKSoIVHJB9tXBfacTpxw6+HVTadJ1XmXESGbsTJKxg4f052onjfiqT3zLrLPgiG+Kny2jm7o6BUBjJoL6qbrTzOe69nQr+fYu2J6mPyrMVwJOH/cAPb32gxbgWyMPI+vh3nM20S0z21qqiB2N/QCyugjR7Nnq4tqPeKtOF3UbeR2G92HvBjOHZllBqLmNzqJDOs4ojccRXZ9p4v3xjuZSYQczCF/p7QZKGDCMiQJW0wI7iKFOPOuhBT7LRFlD5SixRj2RyIC4VtvMSa9hlukegQrRb+ajKfH4ZrLv69ml6VClbdonNeov1ds1y5JCozaKUZw7nksg+pFSCQ4g5Ao94B+OQUg8wn/aWW7FLhxIwaSdwBWo+k1tJ2Tyvv9RWajbEG1+O+IDQhOx/TxAZ6aOL96aivu+fL7fhPjeMT0UjrgSEOUd175189GiqSTFP4xfxQxxeBPPVnTFy58vUxBeoSGlcP/n+8bUsM46cysIMNe6D1ZkWwdU8aryKGf6+caB8k8MMDhhwzQkYOdi2I8LAHO2BRiuqftcDJA1CMkvybCJticXafG1noCXyQGxdSeDTX74WT6S2Nk9LhQGwkNBCg43w7ZH0E9+MdvoUMXORJtBjEENIJjVZpuu02DPj7oUniZ11rPQMNdl20ItBD21Oei5Y1QYxuxXBEXHLUJowRIkunJidllZU+rugeW+7ZhHqqxTnTTQoZkvH5NKxIWVjptMcPBRNt6D98jZIHn2kqCIM0TwdPEHMwsFUfCEr7gMGwqk5GLMyiBzRKZuCoeyU0KF8xygHi5MQN8Gz+AqPJAuJMsd4fRj8nYrVccqbcDFd9PkHDoSpXO1IC4aJuFxxoqjqvehnhLvTv4X+0XxEvnevtphGrg/Z+k7h9A1SD2KVnWT0wCJIRfLInvzLsRZjduaTlZCEDfyIffKx0Y5RottxetnEVFv8oc4EdgeqdrD9szdYawa1yhvu/lFm7FFWhqMrWjau3nWeWYq8HjWyOqQ9R7urdAsm78QHP0G4sKLCcPV9oZ561JRbuaoZ5uNa5Qxfr0rbovbns3P0abw5ucXU/z6c8okK28NWs+A99/YqvR6pYOp3CjXaf8sSn2rhIEk+A2uQUAKbACuonB6SxjN6ANOXbHDxMtXSsGMtfDJh304xHx/hqSbjgzwLXtMGp+GDW2A2FYa+KLW6y1oLV9vYFqaY1Cxqo6PFoz1ezNEYPbOIbqkXq7B5+jzp1jvH8wl1JaaZtw8eapLt7UVzLZKsouhye2IEtFDdGOYdFEMpuG/+dXxq7EWIIxQ8iRrzNFndObui5xbJGVkorL7okUGzE0qs0+voZdprTehG41y+Ftw5HeqoaPWJc7FLIP6zxHDQNdAY5LhDku92qoV0UBNDfKmvC9fy8SqNxc="
4
- iv="data:application/octet-stream;base64,RglzKK4RP/kcz5R9"
5
- salt="data:application/octet-stream;base64,boaqfSsVoyze0QaIUcV61w==">
6
- <webwriter-task-prompt class="ww-widget ww-v1.0.6-local"
7
- id="ww-11e51927-d8a2-4b8b-ad45-442e4ca9dfb7"
8
- slot="prompt">
9
- <p>Markiere alle Verben im nachfolgenden Satz.</p>
10
- </webwriter-task-prompt>
11
- <webwriter-mark class="ww-widget ww-v1.0.6-local"
12
- id="ww-cacc7fb5-7d16-4fba-a569-273b6d756fa1"
13
- value="[]">Jemand musste Josef K. verleumdet haben, denn ohne dass er etwas Böses getan hätte, wurde er eines Morgens verhaftet. »Wie ein Hund!« sagte er, es war, als sollte die Scham ihn überleben. Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, fand er sich in seinem Bett zu einem ungeheueren</webwriter-mark>
14
- </webwriter-task>
@@ -1,52 +0,0 @@
1
- <webwriter-task
2
- class="ww-widget ww-v1.0.6-local"
3
- id="ww-9e8dbb09-f884-44f1-9c5c-fb7fb9afaba5"
4
- solution="data:application/octet-stream;base64,b9v1gruH6y/u/D67OBtN/NDF2C9eMsUQ3djIKA9iXMTHa7BwrEBqKOhxXmnr4NRQIaFJvT2SUBCUtrUtUxNYwrvb8dKYPz2NY3upQNzV0t3hhiYR5bQ6dxoOAQfQiXhVtBLUQMKx51Tib6f2NXDy+OTgF17OxlJeJilZuAT7jAf9xHfSFP1iww15dzoexo/h8pfV5UsIRUxBFjgSZneTVt4+tVJK7Fw3gXha/KrA94VxlibXIhY1FjQ="
5
- iv="data:application/octet-stream;base64,9LFdWn/mCmdKKnSe"
6
- salt="data:application/octet-stream;base64,uhJ+FIhdsapUlt0TG7zdNQ=="
7
- >
8
- <webwriter-task-prompt
9
- class="ww-widget ww-v1.0.6-local"
10
- id="ww-93746971-3523-4ffa-a00c-154ab29805d4"
11
- slot="prompt"
12
- >
13
- <p>Ordne die Tiere absteigend nach ihrer Größe!</p>
14
- </webwriter-task-prompt>
15
- <webwriter-order
16
- class="ww-widget ww-v1.0.6-local"
17
- id="ww-e90b3acd-887f-4278-9a96-da59338033cd"
18
- >
19
- <webwriter-order-item
20
- class="ww-widget ww-v1.0.6-local"
21
- draggable="true"
22
- id="ww-88b734b1-4bde-4ffd-9f16-40a1dd5dc0a5"
23
- layout="list"
24
- >
25
- <p>Mensch</p>
26
- </webwriter-order-item>
27
- <webwriter-order-item
28
- class="ww-widget ww-v1.0.6-local"
29
- draggable="true"
30
- id="ww-08b84571-cb72-4ca2-9fe1-72bf7c8c6394"
31
- layout="list"
32
- >
33
- <p>Hamster</p>
34
- </webwriter-order-item>
35
- <webwriter-order-item
36
- class="ww-widget ww-v1.0.6-local"
37
- draggable="true"
38
- id="ww-d5bd5831-9d73-453a-a377-63861e73953e"
39
- layout="list"
40
- >
41
- <p>Ameise</p>
42
- </webwriter-order-item>
43
- <webwriter-order-item
44
- class="ww-widget ww-v1.0.6-local"
45
- draggable="true"
46
- id="ww-5d76bec6-35f1-4f30-bfff-56136fed3fab"
47
- layout="list"
48
- >
49
- <p>Bärtierchen</p>
50
- </webwriter-order-item>
51
- </webwriter-order>
52
- </webwriter-task>
@@ -1,20 +0,0 @@
1
- <webwriter-task
2
- class="ww-widget ww-v1.0.6-local"
3
- id="ww-53692699-0dc3-46b5-90b6-b2a24eaf372d"
4
- solution="data:application/octet-stream;base64,UIJ61afPKfdX4WsmgNwlZAoD1H0+FdhqQkKY37d+im4h"
5
- iv="data:application/octet-stream;base64,1Nid4IukVZEjN8If"
6
- salt="data:application/octet-stream;base64,+eEKmHuNtNcgomgGbgNWew=="
7
- >
8
- <webwriter-task-prompt
9
- class="ww-widget ww-v1.0.6-local"
10
- id="ww-79d0713b-f910-4557-8f80-621bfd03a3ca"
11
- slot="prompt"
12
- >
13
- <p>Wie hieß der erste Bundeskanzler der Bundesrepublik Deutschland?</p>
14
- </webwriter-task-prompt>
15
- <webwriter-text
16
- class="ww-widget ww-v1.0.6-local"
17
- id="ww-0fcb1fa8-0f98-40d9-96db-b23f633e4c53"
18
- type="long-text"
19
- ></webwriter-text>
20
- </webwriter-task>
@@ -1 +0,0 @@
1
- <p>EASTEREGG</p>
@@ -1,8 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-choice>
4
- <webwriter-choice-item>
5
- <p></p>
6
- </webwriter-choice-item>
7
- </webwriter-choice>
8
- </webwriter-task>
@@ -1,4 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-cloze><p></p></webwriter-cloze>
4
- </webwriter-task>
@@ -1,4 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-mark><p></p></webwriter-mark>
4
- </webwriter-task>
@@ -1,10 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-pairing>
4
- <webwriter-pairing-item>
5
- <picture>
6
- <img>
7
- </picture>
8
- </webwriter-pairing-item>
9
- </webwriter-pairing>
10
- </webwriter-task>
@@ -1,4 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-speech></webwriter-speech>
4
- </webwriter-task>
@@ -1,4 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-text></webwriter-text>
4
- </webwriter-task>
@@ -1,4 +0,0 @@
1
- <webwriter-task>
2
- <webwriter-task-prompt slot="prompt"><p></p></webwriter-task-prompt>
3
- <webwriter-wordsearch></webwriter-wordsearch>
4
- </webwriter-task>