@webwriter/quiz 1.0.10 → 1.1.2

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 (104) hide show
  1. package/LICENSE +6 -6
  2. package/custom.d.ts +175 -175
  3. package/dist/widgets/webwriter-choice-item.js +10 -7
  4. package/dist/widgets/webwriter-choice.js +36 -6
  5. package/dist/widgets/webwriter-order-item.js +14 -12
  6. package/dist/widgets/webwriter-order.js +28 -4
  7. package/dist/widgets/webwriter-quiz.js +1 -1
  8. package/dist/widgets/webwriter-task.js +0 -1
  9. package/dist/widgets/webwriter-text.js +26 -9
  10. package/lit-localize.json +14 -14
  11. package/localization/bg.xlf +69 -69
  12. package/localization/cs.xlf +69 -69
  13. package/localization/da.xlf +69 -69
  14. package/localization/de.xlf +74 -74
  15. package/localization/el.xlf +69 -69
  16. package/localization/es.xlf +69 -69
  17. package/localization/et.xlf +69 -69
  18. package/localization/fi.xlf +69 -69
  19. package/localization/fr.xlf +69 -69
  20. package/localization/generated/bg.ts +29 -29
  21. package/localization/generated/cs.ts +29 -29
  22. package/localization/generated/da.ts +29 -29
  23. package/localization/generated/de.ts +29 -29
  24. package/localization/generated/el.ts +29 -29
  25. package/localization/generated/es.ts +29 -29
  26. package/localization/generated/et.ts +29 -29
  27. package/localization/generated/fi.ts +29 -29
  28. package/localization/generated/fr.ts +29 -29
  29. package/localization/generated/hu.ts +29 -29
  30. package/localization/generated/id.ts +29 -29
  31. package/localization/generated/index.js +2 -2
  32. package/localization/generated/it.ts +29 -29
  33. package/localization/generated/ja.ts +29 -29
  34. package/localization/generated/ko.ts +29 -29
  35. package/localization/generated/locale-codes.js +79 -79
  36. package/localization/generated/lt.ts +29 -29
  37. package/localization/generated/lv.ts +29 -29
  38. package/localization/generated/nb.ts +29 -29
  39. package/localization/generated/nl.ts +29 -29
  40. package/localization/generated/pl.ts +29 -29
  41. package/localization/generated/pt-BR.ts +29 -29
  42. package/localization/generated/pt-PT.ts +29 -29
  43. package/localization/generated/ro.ts +29 -29
  44. package/localization/generated/ru.ts +29 -29
  45. package/localization/generated/sk.ts +29 -29
  46. package/localization/generated/sl.ts +29 -29
  47. package/localization/generated/sv.ts +29 -29
  48. package/localization/generated/tr.ts +29 -29
  49. package/localization/generated/uk.ts +29 -29
  50. package/localization/generated/zh-hans.ts +29 -29
  51. package/localization/hu.xlf +69 -69
  52. package/localization/id.xlf +69 -69
  53. package/localization/it.xlf +69 -69
  54. package/localization/ja.xlf +69 -69
  55. package/localization/ko.xlf +69 -69
  56. package/localization/lt.xlf +69 -69
  57. package/localization/lv.xlf +69 -69
  58. package/localization/nb.xlf +69 -69
  59. package/localization/nl.xlf +69 -69
  60. package/localization/pl.xlf +69 -69
  61. package/localization/pt-BR.xlf +69 -69
  62. package/localization/pt-PT.xlf +69 -69
  63. package/localization/ro.xlf +69 -69
  64. package/localization/ru.xlf +69 -69
  65. package/localization/sk.xlf +69 -69
  66. package/localization/sl.xlf +69 -69
  67. package/localization/sv.xlf +69 -69
  68. package/localization/tr.xlf +69 -69
  69. package/localization/uk.xlf +69 -69
  70. package/localization/zh-hans.xlf +69 -69
  71. package/package.json +7 -2
  72. package/src/lib/combobox.ts +455 -455
  73. package/src/lib/highlighter-fill.svg +5 -5
  74. package/src/snippets/Beispiel-Choice.html +57 -57
  75. package/src/snippets/Beispiel-Mark.html +13 -13
  76. package/src/snippets/Beispiel-Order.html +52 -52
  77. package/src/snippets/Beispiel-Text.html +20 -20
  78. package/src/snippets/blank.html +1 -0
  79. package/src/snippets/choice.html +7 -7
  80. package/src/snippets/cloze.html +3 -3
  81. package/src/snippets/mark.html +3 -3
  82. package/src/snippets/order.html +7 -7
  83. package/src/snippets/pairing.html +9 -9
  84. package/src/snippets/speech.html +3 -3
  85. package/src/snippets/text.html +3 -3
  86. package/src/snippets/wordsearch.html +3 -3
  87. package/src/widgets/webwriter-choice-item.ts +253 -250
  88. package/src/widgets/webwriter-choice.ts +336 -314
  89. package/src/widgets/webwriter-cloze-gap.ts +215 -215
  90. package/src/widgets/webwriter-cloze.ts +135 -135
  91. package/src/widgets/webwriter-mark.ts +431 -431
  92. package/src/widgets/webwriter-order-item.ts +440 -437
  93. package/src/widgets/webwriter-order.ts +309 -284
  94. package/src/widgets/webwriter-pairing-item.ts +160 -160
  95. package/src/widgets/webwriter-pairing.ts +192 -192
  96. package/src/widgets/webwriter-quiz.ts +281 -281
  97. package/src/widgets/webwriter-speech.ts +272 -272
  98. package/src/widgets/webwriter-task-explainer.ts +42 -42
  99. package/src/widgets/webwriter-task-hint.ts +22 -22
  100. package/src/widgets/webwriter-task-prompt.ts +23 -23
  101. package/src/widgets/webwriter-task.ts +546 -546
  102. package/src/widgets/webwriter-text.ts +155 -135
  103. package/tsconfig.json +6 -6
  104. package/.env +0 -1
@@ -1,136 +1,156 @@
1
- import {html, css} from "lit"
2
- import {LitElementWw, option} from "@webwriter/lit"
3
- import {customElement, property, query} from "lit/decorators.js"
4
- import {ifDefined} from "lit/directives/if-defined.js"
5
-
6
- import SlTextarea from "@shoelace-style/shoelace/dist/components/textarea/textarea.component.js"
7
- import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"
8
- import "@shoelace-style/shoelace/dist/themes/light.css"
9
-
10
- import LOCALIZE from "../../localization/generated"
11
- import {msg} from "@lit/localize"
12
-
13
- declare global {interface HTMLElementTagNameMap {
14
- "webwriter-text": WebwriterText;
15
- }}
16
-
17
- @customElement("webwriter-text")
18
- export class WebwriterText extends LitElementWw {
19
-
20
- localize = LOCALIZE
21
-
22
- @property({type: String, attribute: true, reflect: true})
23
- @option({
24
- type: "select",
25
- label: {"en": "Type", "de": "Typ"},
26
- options: [
27
- {value: "long-text", label: {"en": "Long Text", "de": "Langer Text"}},
28
- {value: "text", label: {"en": "Short Text", "de": "Kurzer Text"}},
29
- {value: "number", label: {"en": "Number", "de": "Zahl"}},
30
- {value: "date", label: {"en": "Date", "de": "Datum"}},
31
- {value: "time", label: {"en": "Time", "de": "Uhrzeit"}},
32
- {value: "datetime-local", label: {"en": "Date & Time", "de": "Datum & Uhrzeit"}}
33
- ]
34
- })
35
- accessor type: "date" | "datetime-local" | "number" | "text" | "time" | "long-text" = "long-text"
36
-
37
- @property({type: String, attribute: true, reflect: true})
38
- @option()
39
- accessor placeholder: string
40
-
41
- @property({type: String, attribute: true, reflect: true})
42
- accessor value: string
43
-
44
- /*
45
- @property({type: Number, attribute: true, reflect: true})
46
- @option({type: Number})
47
- min: number
48
-
49
- @property({type: Number, attribute: true, reflect: true})
50
- @option({type: Number})
51
- max: number
52
-
53
- @property({type: Number, attribute: true, reflect: true})
54
- @option({type: Number})
55
- step: number
56
- */
57
-
58
- static scopedElements = {
59
- "sl-textarea": SlTextarea,
60
- "sl-input": SlInput
61
- }
62
-
63
- static styles = css`
64
- :host(:is([contenteditable=true], [contenteditable=""])) sl-textarea::part(textarea) {
65
- color: var(--sl-color-success-700);
66
- }
67
-
68
- sl-textarea {
69
- resize: vertical;
70
- overflow: hidden;
71
- min-height: 40px;
72
-
73
- &::part(form-control), &::part(form-control-input), &::part(base), &::part(textarea) {
74
- height: 100%;
75
- }
76
- }
77
-
78
- :is(sl-textarea, sl-input)[data-correct]::part(base) {
79
- background: var(--sl-color-success-200);
80
- }
81
-
82
- #solution {
83
- padding: 1rem;
84
- }
85
-
86
- #solution[data-correct] {
87
- background: var(--sl-color-success-200);
88
- }
89
-
90
- #solution:not([data-correct]) {
91
- background: var(--sl-color-danger-200);
92
- }
93
- `
94
-
95
- handleChange = (e: CustomEvent) => {
96
- const target = e.target as SlTextarea | SlInput
97
- if(this.isContentEditable) {
98
- this.solution = target.value?.trim()
99
- }
100
- else {
101
- this.value = target.value?.trim()
102
- }
103
- this.dispatchEvent(new CustomEvent("ww-answer-change", {
104
- detail: {value: target.value},
105
- bubbles: true,
106
- composed: true
107
- }))
108
- }
109
-
110
- @query("sl-textarea, sl-input")
111
- accessor input: SlTextarea | SlInput
112
-
113
- focus() {
114
- this.input.focus()
115
- }
116
-
117
- reset() {
118
- this.solution = undefined
119
- this.input.value = ""
120
- }
121
-
122
- reportSolution() {}
123
-
124
- @property({type: String, attribute: false, reflect: false})
125
- accessor solution: string
126
-
127
- render() {
128
- const correct = this.solution && this.value?.trim() === this.solution
129
- const textarea = html`<sl-textarea ?data-correct=${correct} value=${this.isContentEditable? this.solution: this.value} placeholder=${this.placeholder} resize="none" @sl-change=${this.handleChange}></sl-textarea>`
130
- const input = html`<sl-input ?data-correct=${correct} value=${this.isContentEditable? this.solution: this.value} placeholder=${this.placeholder} type=${this.type} @sl-change=${this.handleChange}></sl-input>`
131
- return html`
132
- ${this.type === "long-text"? textarea: input}
133
- ${this.solution && !this.isContentEditable && !correct? html`<div id="solution" ?data-correct=${correct}>${this.solution}</div>`: undefined}
134
- `
135
- }
1
+ import {html, css, PropertyValues} from "lit"
2
+ import {LitElementWw, option} from "@webwriter/lit"
3
+ import {customElement, property, query} from "lit/decorators.js"
4
+ import {ifDefined} from "lit/directives/if-defined.js"
5
+
6
+ import SlTextarea from "@shoelace-style/shoelace/dist/components/textarea/textarea.component.js"
7
+ import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"
8
+ import "@shoelace-style/shoelace/dist/themes/light.css"
9
+
10
+ import LOCALIZE from "../../localization/generated"
11
+ import {msg} from "@lit/localize"
12
+
13
+ declare global {interface HTMLElementTagNameMap {
14
+ "webwriter-text": WebwriterText;
15
+ }}
16
+
17
+ @customElement("webwriter-text")
18
+ export class WebwriterText extends LitElementWw {
19
+
20
+ localize = LOCALIZE
21
+
22
+ @property({type: String, attribute: true, reflect: true})
23
+ @option({
24
+ type: "select",
25
+ label: {"en": "Type", "de": "Typ"},
26
+ options: [
27
+ {value: "long-text", label: {"en": "Long Text", "de": "Langer Text"}},
28
+ {value: "text", label: {"en": "Short Text", "de": "Kurzer Text"}},
29
+ {value: "number", label: {"en": "Number", "de": "Zahl"}},
30
+ {value: "date", label: {"en": "Date", "de": "Datum"}},
31
+ {value: "time", label: {"en": "Time", "de": "Uhrzeit"}},
32
+ {value: "datetime-local", label: {"en": "Date & Time", "de": "Datum & Uhrzeit"}}
33
+ ]
34
+ })
35
+ accessor type: "date" | "datetime-local" | "number" | "text" | "time" | "long-text" = "long-text"
36
+
37
+ @property({type: String, attribute: true, reflect: true})
38
+ @option()
39
+ accessor placeholder: string
40
+
41
+ @property({type: Boolean, attribute: true, reflect: true})
42
+ @option({
43
+ type: Boolean,
44
+ label: {"en": "Ignore capitalization", "de": "Großschreibung ignorieren"},
45
+ })
46
+ accessor ignoreCase = false
47
+
48
+ @property({type: Boolean, attribute: true, reflect: true})
49
+ @option({
50
+ type: Boolean,
51
+ label: {"en": "show Solution", "de": "Lösung anzeigen"},
52
+ })
53
+ accessor showSolution = false
54
+
55
+ @property({type: String, attribute: true, reflect: true})
56
+ @option({
57
+ label: {"en": "Message for wrong solution", "de": "Nachricht bei falscher Lösung"},
58
+ })
59
+ accessor wrongMessage: string
60
+
61
+ @property({type: String, attribute: true, reflect: true})
62
+ accessor value: string
63
+
64
+ /*
65
+ @property({type: Number, attribute: true, reflect: true})
66
+ @option({type: Number})
67
+ min: number
68
+
69
+ @property({type: Number, attribute: true, reflect: true})
70
+ @option({type: Number})
71
+ max: number
72
+
73
+ @property({type: Number, attribute: true, reflect: true})
74
+ @option({type: Number})
75
+ step: number
76
+ */
77
+
78
+ static scopedElements = {
79
+ "sl-textarea": SlTextarea,
80
+ "sl-input": SlInput
81
+ }
82
+
83
+ static styles = css`
84
+ :host(:is([contenteditable=true], [contenteditable=""])) sl-textarea::part(textarea) {
85
+ color: var(--sl-color-success-700);
86
+ }
87
+
88
+ sl-textarea {
89
+ resize: vertical;
90
+ overflow: hidden;
91
+ min-height: 40px;
92
+
93
+ &::part(form-control), &::part(form-control-input), &::part(base), &::part(textarea) {
94
+ height: 100%;
95
+ }
96
+ }
97
+
98
+ :is(sl-textarea, sl-input)[data-correct]::part(base) {
99
+ background: var(--sl-color-success-200);
100
+ }
101
+
102
+ #solution {
103
+ padding: 1rem;
104
+ }
105
+
106
+ #solution[data-correct] {
107
+ background-color: var(--sl-color-success-200);
108
+ }
109
+
110
+ #solution:not([data-correct]) {
111
+ background-color: var(--sl-color-danger-200);
112
+ }
113
+ `
114
+
115
+ handleChange = (e: CustomEvent) => {
116
+ const target = e.target as SlTextarea | SlInput
117
+ if(this.isContentEditable) {
118
+ this.solution = target.value?.trim()
119
+ }
120
+ else {
121
+ this.value = target.value?.trim()
122
+ }
123
+ this.dispatchEvent(new CustomEvent("ww-answer-change", {
124
+ detail: {value: target.value},
125
+ bubbles: true,
126
+ composed: true
127
+ }))
128
+ }
129
+
130
+ @query("sl-textarea, sl-input")
131
+ accessor input: SlTextarea | SlInput
132
+
133
+ focus() {
134
+ this.input.focus()
135
+ }
136
+
137
+ reset() {
138
+ this.solution = undefined
139
+ this.input.value = ""
140
+ }
141
+
142
+ reportSolution() {}
143
+
144
+ @property({type: String, attribute: false, reflect: false})
145
+ accessor solution: string
146
+
147
+ render() {
148
+ const correct = !this.ignoreCase ? this.solution && this.value?.trim() === this.solution : this.solution && this.value?.trim().toLowerCase() === this.solution.toLowerCase()
149
+ const textarea = html`<sl-textarea ?data-correct=${correct} value=${this.isContentEditable? this.solution: this.value} placeholder=${this.placeholder} resize="none" @sl-change=${this.handleChange}></sl-textarea>`
150
+ const input = html`<sl-input ?data-correct=${correct} value=${this.isContentEditable? this.solution: this.value} placeholder=${this.placeholder} type=${this.type} @sl-change=${this.handleChange}></sl-input>`
151
+ return html`
152
+ ${this.type === "long-text"? textarea: input}
153
+ ${this.solution && !this.isContentEditable && !correct? html`<div id="solution" ?data-correct=${correct}>${this.showSolution?this.solution:html`<i>${this.wrongMessage}</i>`}</div>`: undefined}
154
+ `
155
+ }
136
156
  }
package/tsconfig.json CHANGED
@@ -1,7 +1,7 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es2022",
4
- "moduleResolution": "Bundler",
5
- "module": "ES2022"
6
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2022",
4
+ "moduleResolution": "Bundler",
5
+ "module": "ES2022"
6
+ }
7
7
  }
package/.env DELETED
@@ -1 +0,0 @@
1
- DEEPL_API_KEY=1adebc60-e036-474e-b287-290aa10ab20f:fx