@things-factory/learning 0.0.0-stage → 10.1.261

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/dist-client/bootstrap.d.ts +2 -0
  2. package/dist-client/bootstrap.js +4 -0
  3. package/dist-client/bootstrap.js.map +1 -0
  4. package/dist-client/components/learning-assign-form.d.ts +24 -0
  5. package/dist-client/components/learning-assign-form.js +77 -0
  6. package/dist-client/components/learning-assign-form.js.map +1 -0
  7. package/dist-client/components/learning-course-form.d.ts +29 -0
  8. package/dist-client/components/learning-course-form.js +104 -0
  9. package/dist-client/components/learning-course-form.js.map +1 -0
  10. package/dist-client/components/learning-material-form.d.ts +41 -0
  11. package/dist-client/components/learning-material-form.js +202 -0
  12. package/dist-client/components/learning-material-form.js.map +1 -0
  13. package/dist-client/components/learning-question-form.d.ts +33 -0
  14. package/dist-client/components/learning-question-form.js +142 -0
  15. package/dist-client/components/learning-question-form.js.map +1 -0
  16. package/dist-client/components/learning-todo.d.ts +12 -0
  17. package/dist-client/components/learning-todo.js +43 -0
  18. package/dist-client/components/learning-todo.js.map +1 -0
  19. package/dist-client/components/learning-unit-form.d.ts +44 -0
  20. package/dist-client/components/learning-unit-form.js +151 -0
  21. package/dist-client/components/learning-unit-form.js.map +1 -0
  22. package/dist-client/index.d.ts +2 -0
  23. package/dist-client/index.js +3 -0
  24. package/dist-client/index.js.map +1 -0
  25. package/dist-client/pages/learning-course-editor.d.ts +63 -0
  26. package/dist-client/pages/learning-course-editor.js +476 -0
  27. package/dist-client/pages/learning-course-editor.js.map +1 -0
  28. package/dist-client/pages/learning-course-list.d.ts +37 -0
  29. package/dist-client/pages/learning-course-list.js +92 -0
  30. package/dist-client/pages/learning-course-list.js.map +1 -0
  31. package/dist-client/pages/learning-enrollment-status.d.ts +65 -0
  32. package/dist-client/pages/learning-enrollment-status.js +211 -0
  33. package/dist-client/pages/learning-enrollment-status.js.map +1 -0
  34. package/dist-client/pages/learning-view.d.ts +63 -0
  35. package/dist-client/pages/learning-view.js +446 -0
  36. package/dist-client/pages/learning-view.js.map +1 -0
  37. package/dist-client/pages/my-learning.d.ts +22 -0
  38. package/dist-client/pages/my-learning.js +110 -0
  39. package/dist-client/pages/my-learning.js.map +1 -0
  40. package/dist-client/route.d.ts +1 -0
  41. package/dist-client/route.js +21 -0
  42. package/dist-client/route.js.map +1 -0
  43. package/dist-client/tsconfig.tsbuildinfo +1 -0
  44. package/dist-client/utils/learning-api.d.ts +61 -0
  45. package/dist-client/utils/learning-api.js +85 -0
  46. package/dist-client/utils/learning-api.js.map +1 -0
  47. package/dist-client/utils/learning-words.d.ts +20 -0
  48. package/dist-client/utils/learning-words.js +22 -0
  49. package/dist-client/utils/learning-words.js.map +1 -0
  50. package/dist-client/utils/material-source.d.ts +12 -0
  51. package/dist-client/utils/material-source.js +77 -0
  52. package/dist-client/utils/material-source.js.map +1 -0
  53. package/dist-server/activities.d.ts +38 -0
  54. package/dist-server/activities.js +42 -0
  55. package/dist-server/activities.js.map +1 -0
  56. package/dist-server/ai-reads.d.ts +9 -0
  57. package/dist-server/ai-reads.js +70 -0
  58. package/dist-server/ai-reads.js.map +1 -0
  59. package/dist-server/attachment-reader.d.ts +1 -0
  60. package/dist-server/attachment-reader.js +23 -0
  61. package/dist-server/attachment-reader.js.map +1 -0
  62. package/dist-server/index.d.ts +4 -0
  63. package/dist-server/index.js +33 -0
  64. package/dist-server/index.js.map +1 -0
  65. package/dist-server/learning-subjects.d.ts +10 -0
  66. package/dist-server/learning-subjects.js +31 -0
  67. package/dist-server/learning-subjects.js.map +1 -0
  68. package/dist-server/role-tasks.d.ts +2 -0
  69. package/dist-server/role-tasks.js +17 -0
  70. package/dist-server/role-tasks.js.map +1 -0
  71. package/dist-server/service/course/course-mutation.d.ts +19 -0
  72. package/dist-server/service/course/course-mutation.js +177 -0
  73. package/dist-server/service/course/course-mutation.js.map +1 -0
  74. package/dist-server/service/course/course-query.d.ts +27 -0
  75. package/dist-server/service/course/course-query.js +183 -0
  76. package/dist-server/service/course/course-query.js.map +1 -0
  77. package/dist-server/service/course/course-question.d.ts +41 -0
  78. package/dist-server/service/course/course-question.js +116 -0
  79. package/dist-server/service/course/course-question.js.map +1 -0
  80. package/dist-server/service/course/course-rules.d.ts +51 -0
  81. package/dist-server/service/course/course-rules.js +93 -0
  82. package/dist-server/service/course/course-rules.js.map +1 -0
  83. package/dist-server/service/course/course-service.d.ts +72 -0
  84. package/dist-server/service/course/course-service.js +398 -0
  85. package/dist-server/service/course/course-service.js.map +1 -0
  86. package/dist-server/service/course/course-type.d.ts +56 -0
  87. package/dist-server/service/course/course-type.js +202 -0
  88. package/dist-server/service/course/course-type.js.map +1 -0
  89. package/dist-server/service/course/course-unit.d.ts +37 -0
  90. package/dist-server/service/course/course-unit.js +128 -0
  91. package/dist-server/service/course/course-unit.js.map +1 -0
  92. package/dist-server/service/course/course-version.d.ts +45 -0
  93. package/dist-server/service/course/course-version.js +151 -0
  94. package/dist-server/service/course/course-version.js.map +1 -0
  95. package/dist-server/service/course/course.d.ts +23 -0
  96. package/dist-server/service/course/course.js +92 -0
  97. package/dist-server/service/course/course.js.map +1 -0
  98. package/dist-server/service/course/index.d.ts +15 -0
  99. package/dist-server/service/course/index.js +25 -0
  100. package/dist-server/service/course/index.js.map +1 -0
  101. package/dist-server/service/course/material-audio.d.ts +1 -0
  102. package/dist-server/service/course/material-audio.js +43 -0
  103. package/dist-server/service/course/material-audio.js.map +1 -0
  104. package/dist-server/service/course/material-draft-mutation.d.ts +13 -0
  105. package/dist-server/service/course/material-draft-mutation.js +55 -0
  106. package/dist-server/service/course/material-draft-mutation.js.map +1 -0
  107. package/dist-server/service/course/material-draft-rules.d.ts +38 -0
  108. package/dist-server/service/course/material-draft-rules.js +83 -0
  109. package/dist-server/service/course/material-draft-rules.js.map +1 -0
  110. package/dist-server/service/course/material-draft-service.d.ts +15 -0
  111. package/dist-server/service/course/material-draft-service.js +162 -0
  112. package/dist-server/service/course/material-draft-service.js.map +1 -0
  113. package/dist-server/service/enrollment/enrollment-mutation.d.ts +11 -0
  114. package/dist-server/service/enrollment/enrollment-mutation.js +124 -0
  115. package/dist-server/service/enrollment/enrollment-mutation.js.map +1 -0
  116. package/dist-server/service/enrollment/enrollment-query.d.ts +24 -0
  117. package/dist-server/service/enrollment/enrollment-query.js +236 -0
  118. package/dist-server/service/enrollment/enrollment-query.js.map +1 -0
  119. package/dist-server/service/enrollment/enrollment-remind.d.ts +1 -0
  120. package/dist-server/service/enrollment/enrollment-remind.js +45 -0
  121. package/dist-server/service/enrollment/enrollment-remind.js.map +1 -0
  122. package/dist-server/service/enrollment/enrollment-service.d.ts +110 -0
  123. package/dist-server/service/enrollment/enrollment-service.js +427 -0
  124. package/dist-server/service/enrollment/enrollment-service.js.map +1 -0
  125. package/dist-server/service/enrollment/enrollment-status.d.ts +53 -0
  126. package/dist-server/service/enrollment/enrollment-status.js +194 -0
  127. package/dist-server/service/enrollment/enrollment-status.js.map +1 -0
  128. package/dist-server/service/enrollment/enrollment-type.d.ts +82 -0
  129. package/dist-server/service/enrollment/enrollment-type.js +293 -0
  130. package/dist-server/service/enrollment/enrollment-type.js.map +1 -0
  131. package/dist-server/service/enrollment/enrollment.d.ts +53 -0
  132. package/dist-server/service/enrollment/enrollment.js +191 -0
  133. package/dist-server/service/enrollment/enrollment.js.map +1 -0
  134. package/dist-server/service/enrollment/index.d.ts +15 -0
  135. package/dist-server/service/enrollment/index.js +26 -0
  136. package/dist-server/service/enrollment/index.js.map +1 -0
  137. package/dist-server/service/enrollment/learning-ai.d.ts +45 -0
  138. package/dist-server/service/enrollment/learning-ai.js +93 -0
  139. package/dist-server/service/enrollment/learning-ai.js.map +1 -0
  140. package/dist-server/service/enrollment/learning-documents.d.ts +7 -0
  141. package/dist-server/service/enrollment/learning-documents.js +159 -0
  142. package/dist-server/service/enrollment/learning-documents.js.map +1 -0
  143. package/dist-server/service/enrollment/learning-outcome.d.ts +10 -0
  144. package/dist-server/service/enrollment/learning-outcome.js +16 -0
  145. package/dist-server/service/enrollment/learning-outcome.js.map +1 -0
  146. package/dist-server/service/enrollment/progress-rules.d.ts +119 -0
  147. package/dist-server/service/enrollment/progress-rules.js +132 -0
  148. package/dist-server/service/enrollment/progress-rules.js.map +1 -0
  149. package/dist-server/service/enrollment/quiz-attempt.d.ts +34 -0
  150. package/dist-server/service/enrollment/quiz-attempt.js +105 -0
  151. package/dist-server/service/enrollment/quiz-attempt.js.map +1 -0
  152. package/dist-server/service/enrollment/unit-progress.d.ts +34 -0
  153. package/dist-server/service/enrollment/unit-progress.js +134 -0
  154. package/dist-server/service/enrollment/unit-progress.js.map +1 -0
  155. package/dist-server/service/index.d.ts +14 -0
  156. package/dist-server/service/index.js +43 -0
  157. package/dist-server/service/index.js.map +1 -0
  158. package/dist-server/tsconfig.tsbuildinfo +1 -0
  159. package/package.json +57 -4
  160. package/things-factory.config.js +14 -0
  161. package/translations/en.json +278 -0
  162. package/translations/es.json +278 -0
  163. package/translations/ja.json +278 -0
  164. package/translations/ko.json +278 -0
  165. package/translations/ms.json +278 -0
  166. package/translations/zh.json +278 -0
  167. package/README.md +0 -3
package/package.json CHANGED
@@ -1,6 +1,59 @@
1
1
  {
2
2
  "name": "@things-factory/learning",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "10.1.261",
4
+ "main": "dist-server/index.js",
5
+ "browser": "dist-client/index.js",
6
+ "things-factory": true,
7
+ "license": "MIT",
8
+ "author": "heartyoh <heartyoh@hatiolab.com>",
9
+ "description": "Learning management - courses and their versions, units and questions, enrolments with the time the server counts, quizzes scored by the server, completions with their evidence and certificates (ADR-0194)",
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "@things-factory:registry": "https://registry.npmjs.org"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/hatiolab/things-factory.git",
17
+ "directory": "packages/learning"
18
+ },
19
+ "scripts": {
20
+ "build": "npm run build:server && npm run build:client",
21
+ "copy:files": "copyfiles -e \"./client/**/*.{ts,js,json}\" -u 1 \"./client/**/*\" dist-client",
22
+ "build:client": "npm run clean:client && npm run copy:files && npx tsc --p ./client/tsconfig.json",
23
+ "build:server": "npm run clean:server && npx tsc --p ./server/tsconfig.json",
24
+ "clean:server": "rm -rf dist-server",
25
+ "clean:client": "rm -rf dist-client",
26
+ "clean": "npm run clean:server && npm run clean:client",
27
+ "test": "npm run build:server && node --test test/*.test.mjs"
28
+ },
29
+ "dependencies": {
30
+ "@material/web": "^2.0.0",
31
+ "@operato/data-grist": "^10.29.69",
32
+ "@operato/graphql": "^10.29.69",
33
+ "@operato/i18n": "^10.0.0",
34
+ "@operato/input": "^10.29.52",
35
+ "@operato/layout": "^10.29.49",
36
+ "@operato/learning": "^10.29.72",
37
+ "@operato/list-state": "^10.29.39",
38
+ "@operato/popup": "^10.29.39",
39
+ "@operato/shell": "^10.29.69",
40
+ "@operato/styles": "^10.29.1",
41
+ "@operato/utils": "^10.0.0",
42
+ "@things-factory/ai-assistant": "^10.1.261",
43
+ "@things-factory/ai-client-base": "^10.1.261",
44
+ "@things-factory/announcement": "^10.1.261",
45
+ "@things-factory/attachment-base": "^10.1.261",
46
+ "@things-factory/auth-base": "^10.1.261",
47
+ "@things-factory/env": "^10.1.149",
48
+ "@things-factory/i18n-base": "^10.1.261",
49
+ "@things-factory/notification": "^10.1.261",
50
+ "@things-factory/organization": "^10.1.261",
51
+ "@things-factory/pdf": "^10.1.261",
52
+ "@things-factory/shell": "^10.1.261",
53
+ "@things-factory/worklist": "^10.1.261",
54
+ "graphql-tag": "^2.12.6",
55
+ "graphql-upload": "^15.0.2",
56
+ "lit": "^3.1.2"
57
+ },
58
+ "gitHead": "06537757f8708e6a511c6232e8792f18fdd6a986"
59
+ }
@@ -0,0 +1,14 @@
1
+ import bootstrap from './dist-client/bootstrap.js'
2
+ import route from './dist-client/route.js'
3
+
4
+ export default {
5
+ bootstrap,
6
+ route,
7
+ routes: [
8
+ { tagname: 'my-learning', page: 'my-learning' },
9
+ { tagname: 'learning-view', page: 'learning-view' },
10
+ { tagname: 'learning-course-list', page: 'learning-course-list' },
11
+ { tagname: 'learning-course-editor', page: 'learning-course-editor' },
12
+ { tagname: 'learning-enrollment-status', page: 'learning-enrollment-status' }
13
+ ]
14
+ }
@@ -0,0 +1,278 @@
1
+ {
2
+ "activity.learning-course.guide.0": "It is handed out when a course is assigned - a mandatory training session, onboarding or a manager assigning it.",
3
+ "activity.learning-course.guide.1": "It opens the course; completing the course ends it.",
4
+ "activity.learning-course.guide.2": "A to-do past its due date is reminded as every overdue to-do is.",
5
+ "activity.learning-course.label": "Course learning",
6
+ "button.learning-acknowledge": "Confirm",
7
+ "button.learning-assign": "Assign course",
8
+ "button.learning-cancel-enrollment": "Cancel enrolment",
9
+ "button.learning-certificate": "Issue certificate",
10
+ "button.learning-choice-add": "Add choice",
11
+ "button.learning-choice-remove": "Remove choice",
12
+ "button.learning-continue": "Continue",
13
+ "button.learning-course-edit": "Edit course",
14
+ "button.learning-course-new": "Add course",
15
+ "button.learning-delete": "Delete",
16
+ "button.learning-edit": "Edit",
17
+ "button.learning-move-down": "Move down",
18
+ "button.learning-move-up": "Move up",
19
+ "button.learning-open-course": "Open course",
20
+ "button.learning-question-add": "Add question",
21
+ "button.learning-quiz-start": "Start quiz",
22
+ "button.learning-register-pdf": "Issue completion register",
23
+ "button.learning-remind": "Send completion reminder",
24
+ "button.learning-review": "Review",
25
+ "button.learning-start": "Start",
26
+ "button.learning-unit-add": "Add unit",
27
+ "button.learning-version-close": "Close version",
28
+ "button.learning-version-delete": "Delete draft",
29
+ "button.learning-version-new": "New version",
30
+ "button.learning-version-publish": "Publish",
31
+ "error.learning-attempt-limit-invalid": "Enter a whole-number attempt limit of 1 or more.",
32
+ "error.learning-attempt-sent": "Answers have already been submitted for this attempt.",
33
+ "error.learning-attempts-used": "All {limit} attempts are used.",
34
+ "error.learning-audience-invalid": "{target} is not of this domain.",
35
+ "error.learning-audience-required": "Select who takes the course.",
36
+ "error.learning-cancel-reason-required": "Enter the reason for cancelling.",
37
+ "error.learning-content-what": "Specify an enrollment or course version.",
38
+ "error.learning-course-name-required": "Enter the course name.",
39
+ "error.learning-course-name-taken": "A course named “{name}” exists.",
40
+ "error.learning-course-not-published": "A course with no published version cannot be assigned. Publish a version first.",
41
+ "error.learning-draft-exists": "The course has a draft. Edit it instead.",
42
+ "error.learning-due-invalid": "Enter the due date in YYYY-MM-DD format.",
43
+ "error.learning-enrollment-cancelled": "The enrolment is cancelled.",
44
+ "error.learning-enrollment-completed": "The course is already completed.",
45
+ "error.learning-enrollment-moved": "The enrolment changed meanwhile. Reload and try again.",
46
+ "error.learning-learner-unknown": "A learner must be a user of this domain.",
47
+ "error.learning-link-not-counted": "A link is not counted.",
48
+ "error.learning-manager-unknown": "The manager must be a user of this domain.",
49
+ "error.learning-min-time-invalid": "Enter a whole-number minimum learning time of zero or more.",
50
+ "error.learning-no-acknowledgement": "The course asks for no acknowledgement.",
51
+ "error.learning-no-quiz": "The course has no quiz.",
52
+ "error.learning-not-a-department-head": "Only a department head can view where their people stand.",
53
+ "error.learning-not-completed": "A certificate is issued only for a completed course.",
54
+ "error.learning-not-found": "The record was not found. Reload and try again.",
55
+ "error.learning-page-ahead": "You can turn only to the page after the last one read (page {allowed}). Turn the pages in order.",
56
+ "error.learning-pass-score-invalid": "The pass score is a whole number from 1 to 100.",
57
+ "error.learning-position-ahead": "You cannot skip beyond the watched position ({allowed} seconds). Continue playing from that position.",
58
+ "error.learning-question-answer-required": "Mark at least one correct choice.",
59
+ "error.learning-question-choices-required": "Enter at least two choices. True-or-false questions require exactly two.",
60
+ "error.learning-question-count-invalid": "Enter a whole-number question count of 1 or more.",
61
+ "error.learning-question-count-too-many": "The number of questions per attempt exceeds the number of registered questions.",
62
+ "error.learning-question-draft-invalid": "Each draft question must include question text, at least two choices and a correct answer.",
63
+ "error.learning-question-kind-invalid": "Select the question type.",
64
+ "error.learning-question-one-answer": "Select exactly one correct answer for this question type.",
65
+ "error.learning-question-text-required": "Enter the question.",
66
+ "error.learning-questions-drafted": "Some questions are AI drafts not reviewed yet. Review and save them before publishing.",
67
+ "error.learning-questions-required": "A course with a pass score needs at least one question.",
68
+ "error.learning-quiz-in-progress": "AI guidance on course content is unavailable during a quiz attempt. Submit your answers before asking again.",
69
+ "error.learning-source-required": "Specify the work item or assignment that requested this enrollment.",
70
+ "error.learning-unit-body-required": "Enter the text.",
71
+ "error.learning-unit-duration-invalid": "The video length is not valid.",
72
+ "error.learning-unit-duration-required": "A video's length is unknown. Attach its file again.",
73
+ "error.learning-unit-file-not-taken": "Files can only be attached to video or PDF units.",
74
+ "error.learning-unit-file-required": "A video or a PDF unit has no file.",
75
+ "error.learning-unit-kind-invalid": "Select the unit type.",
76
+ "error.learning-unit-min-time-invalid": "Enter a whole-number minimum learning time of at least 1 second.",
77
+ "error.learning-unit-name-required": "Enter the unit name.",
78
+ "error.learning-unit-pages-invalid": "The PDF's page count is not valid.",
79
+ "error.learning-unit-pages-required": "A PDF's page count is unknown. Attach its file again.",
80
+ "error.learning-unit-url-invalid": "Enter a link starting with http:// or https://.",
81
+ "error.learning-units-required": "Add at least one unit before publishing.",
82
+ "error.learning-version-not-draft": "A published or closed version cannot be changed. Start a new version to change it.",
83
+ "error.learning-version-not-found": "The version was not found.",
84
+ "error.learning-version-not-published": "Only the published version can be closed.",
85
+ "field.learning-acknowledgement": "Acknowledgement",
86
+ "field.learning-assign-audience": "Learners",
87
+ "field.learning-attempt-limit": "Attempts allowed",
88
+ "field.learning-cancel-reason": "Reason for cancelling",
89
+ "field.learning-certificate-no": "Certificate no.",
90
+ "field.learning-completed-on": "Completed on",
91
+ "field.learning-course-category": "Category",
92
+ "field.learning-course-description": "Description",
93
+ "field.learning-course-manager": "Manager",
94
+ "field.learning-course-name": "Course",
95
+ "field.learning-days-left": "Days left",
96
+ "field.learning-department": "Department",
97
+ "field.learning-due-on": "Due",
98
+ "field.learning-learner": "Learner",
99
+ "field.learning-min-minutes": "Minimum learning time (min)",
100
+ "field.learning-minutes": "Learning time (min)",
101
+ "field.learning-pass-score": "Pass score",
102
+ "field.learning-published-version": "Published version",
103
+ "field.learning-question-choices": "Choices and answers",
104
+ "field.learning-question-count": "Questions per attempt",
105
+ "field.learning-question-explanation": "Explanation",
106
+ "field.learning-question-kind": "Question type",
107
+ "field.learning-question-text": "Question",
108
+ "field.learning-score": "Score",
109
+ "field.learning-source-kind": "Source of material",
110
+ "field.learning-source-note": "Provider and terms of use",
111
+ "field.learning-state": "Status",
112
+ "field.learning-unit-body": "Text (markdown)",
113
+ "field.learning-unit-kind": "Unit type",
114
+ "field.learning-unit-min-seconds": "Minimum time (s)",
115
+ "field.learning-unit-name": "Unit name",
116
+ "field.learning-unit-pdf": "PDF file",
117
+ "field.learning-unit-url": "Link address",
118
+ "field.learning-unit-video": "Video file",
119
+ "field.learning-units-done": "Completed units",
120
+ "field.learning-updated-at": "Updated",
121
+ "issued-document.learning.certificate": "Certificate",
122
+ "issued-document.learning.completion-register": "Completion register",
123
+ "label.learning-choice-correct": "Mark choice {number} as correct",
124
+ "label.learning-choice-text": "Choice {number}",
125
+ "label.learning-units": "Units",
126
+ "label.learning-units-done": "Completed units",
127
+ "task.learning.managing.description": "Manage courses, versions, units and quiz questions, and assign learners. View enrollment progress and issue completion registers.",
128
+ "task.learning.managing.name": "Managing courses",
129
+ "task.learning.taking.description": "Study assigned courses, take quizzes and obtain certificates for completed courses. Department heads can view the completion status of employees in their departments.",
130
+ "task.learning.taking.name": "Taking courses",
131
+ "text.learning-acknowledge-label": "I confirm that I have read and understood the above.",
132
+ "text.learning-acknowledged-on": "Confirmed on {day}.",
133
+ "text.learning-acknowledgement-hint": "Learners must confirm this text before completing the course. Leave it blank to omit this step.",
134
+ "text.learning-assign-audience-hint": "Assign the course and create tasks for users currently included in the selected audience. Users already taking this course through an assignment made on this screen are not assigned again.",
135
+ "text.learning-assigned": "{count} enrolments are assigned.",
136
+ "text.learning-attempt-limit-hint": "Leave empty for no limit.",
137
+ "text.learning-attempts-left": "{count} attempts left.",
138
+ "text.learning-best-score": "Best score: {score}.",
139
+ "text.learning-cancelled": "The enrolment is cancelled.",
140
+ "text.learning-category-job": "Job training",
141
+ "text.learning-category-mandatory": "Mandatory training",
142
+ "text.learning-category-onboarding": "Onboarding",
143
+ "text.learning-category-other": "Other",
144
+ "text.learning-category-product": "Product training",
145
+ "text.learning-category-rules": "Company rules",
146
+ "text.learning-choice-count": "{count} choices",
147
+ "text.learning-completed-detail": "Completed on {day}. Certificate no. {number}.",
148
+ "text.learning-completed-on": "Completed {day}",
149
+ "text.learning-course-all": "All courses",
150
+ "text.learning-due-on": "Due {day}",
151
+ "text.learning-due-on-hint": "Leave empty to assign without a due date.",
152
+ "text.learning-learned-minutes": "{minutes} min learned / {required} min required",
153
+ "text.learning-learners-take": "Learners take version {number}.",
154
+ "text.learning-link-not-counted": "Time and progress on external sites do not count toward course completion. Use these links as reference material.",
155
+ "text.learning-managed-by": "Manager: {name}",
156
+ "text.learning-min-minutes-hint": "The total learning time across all units must meet this minimum. Time is counted while the screen is visible and, for videos, while playback is active.",
157
+ "text.learning-missing-acknowledgement": "acknowledgement",
158
+ "text.learning-missing-lead": "Complete the following requirements:",
159
+ "text.learning-missing-quiz": "passing the quiz",
160
+ "text.learning-missing-time": "the minimum learning time",
161
+ "text.learning-missing-units": "every unit",
162
+ "text.learning-no-course": "There are no courses.",
163
+ "text.learning-no-course-description": "Select Add course to register a course.",
164
+ "text.learning-no-enrollment": "No enrollments match the selected conditions.",
165
+ "text.learning-no-question": "There are no questions.",
166
+ "text.learning-no-unit": "There are no units.",
167
+ "text.learning-no-version": "There is no version yet. Start one with “New version”.",
168
+ "text.learning-not-published": "Not published",
169
+ "text.learning-nothing-to-take": "No courses are assigned to you.",
170
+ "text.learning-pass-score-hint": "Out of 100. Leave empty for no quiz.",
171
+ "text.learning-pick-one": "Select one enrolment.",
172
+ "text.learning-pick-open": "Select enrollments that have not been completed.",
173
+ "text.learning-question-count-hint": "Each attempt draws this many questions at random. Leave empty to draw them all.",
174
+ "text.learning-question-delete-confirm": "Delete this question?",
175
+ "text.learning-question-drafted": "AI draft · review needed",
176
+ "text.learning-question-multiple": "Multiple-answer multiple choice",
177
+ "text.learning-question-multiple-hint": "Mark every correct choice.",
178
+ "text.learning-question-single": "Single-answer multiple choice",
179
+ "text.learning-question-single-hint": "Mark the one correct choice.",
180
+ "text.learning-question-true-false": "True or false",
181
+ "text.learning-quiz-failed": "You scored {score}, below the pass score.",
182
+ "text.learning-quiz-off": "No pass score is set. A quiz is not required for completion.",
183
+ "text.learning-quiz-on": "A score of {pass} or more passes.",
184
+ "text.learning-quiz-passed": "You passed with {score}.",
185
+ "text.learning-quiz-rule": "The quiz has {count} questions. A score of {pass} or higher is required to pass.",
186
+ "text.learning-register-name": "Completion register - {course}",
187
+ "text.learning-remind-action": "Open the course",
188
+ "text.learning-remind-body": "Please complete the course “{course}” by {dueOn}.",
189
+ "text.learning-remind-body-no-due": "Please complete “{course}”.",
190
+ "text.learning-remind-note": "Sent by the course manager.",
191
+ "text.learning-remind-subject": "[Course] {course}",
192
+ "text.learning-reminded": "{count} learners were reminded.",
193
+ "text.learning-saved-at": "Last saved {time}",
194
+ "text.learning-source-note-hint": "Record the material provider and usage terms, such as attribution or restrictions on modification.",
195
+ "text.learning-source-own": "Produced in-house",
196
+ "text.learning-source-public": "Public body",
197
+ "text.learning-source-purchased": "Purchased",
198
+ "text.learning-state-all": "All statuses",
199
+ "text.learning-state-assigned": "Not started",
200
+ "text.learning-state-cancelled": "Cancelled",
201
+ "text.learning-state-completed": "Completed",
202
+ "text.learning-state-in-progress": "In progress",
203
+ "text.learning-state-overdue": "Overdue",
204
+ "text.learning-todo-headline": "To be completed by {dueOn}.",
205
+ "text.learning-todo-headline-no-due": "Please complete the course.",
206
+ "text.learning-todo-name": "Take {course}",
207
+ "text.learning-unit-delete-confirm": "Delete the unit “{name}”? Its file is deleted with it.",
208
+ "text.learning-unit-done": "done",
209
+ "text.learning-unit-duration": "{minutes} min {seconds} s long",
210
+ "text.learning-unit-file-kept": "Current file: {name}",
211
+ "text.learning-unit-file-none": "No file",
212
+ "text.learning-unit-link": "Link",
213
+ "text.learning-unit-link-hint": "Time and progress on external sites do not count toward course completion.",
214
+ "text.learning-unit-markdown": "Text",
215
+ "text.learning-unit-markdown-hint": "Keep the text open and visible for the minimum learning time to complete this unit.",
216
+ "text.learning-unit-min-seconds": "Minimum reading time: {seconds} s",
217
+ "text.learning-unit-min-seconds-hint": "Leave blank to use a minimum reading time of 60 seconds.",
218
+ "text.learning-unit-pages": "{pages} pages",
219
+ "text.learning-unit-pdf": "Document (PDF)",
220
+ "text.learning-unit-pdf-hint": "The unit is done once every page has been read in order and the minimum time is reached. The page count is read from the file.",
221
+ "text.learning-unit-video": "Video",
222
+ "text.learning-unit-video-hint": "Watch the video to the end and meet its required learning time to complete the unit. You cannot skip to an unwatched section.",
223
+ "text.learning-version-close-confirm": "Closing this version prevents new learners from starting it. Learners who have already started can continue.",
224
+ "text.learning-version-closed": "Closed",
225
+ "text.learning-version-closed-note": "Closed on {day}. It cannot be changed.",
226
+ "text.learning-version-delete-confirm": "Delete the draft with its units, questions and files?",
227
+ "text.learning-version-draft": "Draft",
228
+ "text.learning-version-draft-note": "A draft - learners do not see it until it is published.",
229
+ "text.learning-version-number": "Version {number}",
230
+ "text.learning-version-publish-confirm": "Published versions cannot be edited. The previously published version will be closed, and learners who have already started it can continue with that version.",
231
+ "text.learning-version-publish-done": "The version is published.",
232
+ "text.learning-version-published": "Published",
233
+ "text.learning-version-published-note": "Published on {day}. It cannot be changed - start a new version to change it.",
234
+ "title.learning-acknowledgement": "Acknowledgement",
235
+ "title.learning-assign": "Assign · {course}",
236
+ "title.learning-certificate": "Certificate",
237
+ "title.learning-completed": "Completed",
238
+ "title.learning-course-edit": "Edit course",
239
+ "title.learning-course-editor": "Course",
240
+ "title.learning-course-list": "Courses",
241
+ "title.learning-course-new": "New course",
242
+ "title.learning-enrollment-status": "Enrolments",
243
+ "title.learning-learning": "Course",
244
+ "title.learning-my-learning": "My learning",
245
+ "title.learning-question-edit": "Edit question",
246
+ "title.learning-question-new": "New question",
247
+ "title.learning-questions": "Quiz questions",
248
+ "title.learning-quiz": "Quiz",
249
+ "title.learning-to-take": "To take",
250
+ "title.learning-unit-edit": "Edit unit",
251
+ "title.learning-unit-new": "New unit",
252
+ "title.learning-units": "Units",
253
+ "title.learning-version-settings": "Completion and source",
254
+ "title.learning-versions": "Versions",
255
+ "button.learning-ai-material": "Draft with AI from material",
256
+ "button.learning-ai-generate": "Generate draft",
257
+ "button.learning-ai-apply": "Add reviewed draft",
258
+ "button.learning-ai-revise": "Revise request",
259
+ "field.learning-ai-source": "Source material",
260
+ "field.learning-ai-captions": "Video captions or transcript",
261
+ "field.learning-ai-instruction": "Audience, learning goals and requests",
262
+ "title.learning-ai-material": "Prepare a course draft from material",
263
+ "title.learning-ai-preview": "Review AI draft",
264
+ "title.learning-ai-missing": "Items to verify or complete",
265
+ "text.learning-ai-upload-first": "First add a PDF or video unit and upload its file.",
266
+ "text.learning-ai-material-help": "Prepare an introduction, objectives, supporting units and a quiz from the source. The original stays; generation does not save or publish.",
267
+ "text.learning-ai-captions-help": "Provide captions or a transcript, or leave blank to transcribe speech automatically. Automatic transcription sends audio to an external AI service and may incur charges in addition to draft generation. Video visuals are not analyzed. Review and edit the transcript after generation.",
268
+ "text.learning-ai-working": "Reading the material and preparing a draft.",
269
+ "text.learning-ai-apply-help": "Adding appends the introduction, supporting units and AI question drafts. Review sources, content, study times and questions before publishing.",
270
+ "error.learning-ai-material-invalid": "The complete source could not be read. Check the file, pages, captions and limits.",
271
+ "error.learning-ai-draft-invalid": "The AI draft has incomplete content, answers or references. The course was not changed. Revise the request and retry.",
272
+ "error.learning-ai-draft-stale": "The course or source changed. Review it and generate a fresh draft.",
273
+ "error.learning-ai-source-limit": "Source limit exceeded: PDF 50 MB, 80 pages, 12 scanned pages; text 120,000 characters. Split the material; it is never silently truncated.",
274
+ "error.learning-ai-source-read": "Could not read the source. Check access and the file, then retry.",
275
+ "error.learning-ai-video-limit": "Automatic transcription supports MP4/WebM up to 60 minutes/250 MB and transcripts up to 120,000 characters. Split the material.",
276
+ "error.learning-ai-transcription-unavailable": "The current AI agent cannot transcribe speech. Configure an OpenAI default agent or supply captions/transcript.",
277
+ "error.learning-ai-audio-unreadable": "Could not read speech. Check server ffmpeg, MP4/WebM format and audio track, or supply captions/transcript."
278
+ }