@vue-skuilder/common-ui 0.2.27 → 0.2.28
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/admin/admin.css +2 -0
- package/dist/admin/common-ui-admin.es.js +1394 -0
- package/dist/admin/common-ui-admin.es.js.map +1 -0
- package/dist/admin/components/CardDossierDetail.vue.d.ts +9 -0
- package/dist/admin/components/CardDossierDetail.vue.d.ts.map +1 -0
- package/dist/admin/components/LearnerCardHistory.vue.d.ts +13 -0
- package/dist/admin/components/LearnerCardHistory.vue.d.ts.map +1 -0
- package/dist/admin/components/LearnerDatasetSource.vue.d.ts +24 -0
- package/dist/admin/components/LearnerDatasetSource.vue.d.ts.map +1 -0
- package/dist/admin/components/LearnerDiagnostics.vue.d.ts +13 -0
- package/dist/admin/components/LearnerDiagnostics.vue.d.ts.map +1 -0
- package/dist/admin/components/LearnerSessionDetail.vue.d.ts +14 -0
- package/dist/admin/components/LearnerSessionDetail.vue.d.ts.map +1 -0
- package/dist/admin/components/LearnerSessionList.vue.d.ts +13 -0
- package/dist/admin/components/LearnerSessionList.vue.d.ts.map +1 -0
- package/dist/admin/components/RunDetail.vue.d.ts +12 -0
- package/dist/admin/components/RunDetail.vue.d.ts.map +1 -0
- package/dist/admin/composables/useLearnerDataset.d.ts +26 -0
- package/dist/admin/composables/useLearnerDataset.d.ts.map +1 -0
- package/dist/admin/display.d.ts +20 -0
- package/dist/admin/display.d.ts.map +1 -0
- package/dist/admin/index.d.ts +22 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/components/CardBrowser.vue.d.ts +5 -5
- package/dist/components/CardHistoryViewer.vue.d.ts +1 -1
- package/dist/components/CardSearchResults.vue.d.ts +1 -1
- package/dist/components/CourseCardBrowser.vue.d.ts +9 -9
- package/dist/components/CourseInformation.vue.d.ts +18 -18
- package/dist/components/CourseTagFilterWidget.vue.d.ts +1 -1
- package/dist/components/SessionControllerDebug.vue.d.ts +1 -1
- package/dist/components/SnackbarService.d.ts +1 -1
- package/dist/components/StudySession.types.d.ts +1 -1
- package/dist/components/StudySession.vue.d.ts +2 -2
- package/dist/components/TagsInput.vue.d.ts +1 -1
- package/dist/components/UserTagPreferences.vue.d.ts +1 -1
- package/dist/components/auth/UserRegistration.vue.d.ts +74 -74
- package/dist/components/auth/UserRegistration.vue.d.ts.map +1 -1
- package/dist/components/cardRendering/CardLoader.vue.d.ts +6 -6
- package/dist/components/cardRendering/CardViewer.vue.d.ts +2 -2
- package/dist/components/cardRendering/MarkdownRenderer.vue.d.ts +6 -6
- package/dist/components/cardRendering/MdTokenRenderer.vue.d.ts +6 -6
- package/dist/components/studentInputs/BaseUserInput.d.ts +2 -2
- package/dist/components/studentInputs/MultipleChoiceOption.vue.d.ts +6 -6
- package/dist/components/studentInputs/RadioMultipleChoice.types.d.ts +1 -1
- package/dist/components/studentInputs/RadioMultipleChoice.vue.d.ts +9 -9
- package/dist/components/studentInputs/TrueFalse.vue.d.ts +9 -9
- package/dist/components/studentInputs/UserInputNumber.vue.d.ts +2 -2
- package/dist/components/studentInputs/UserInputString.vue.d.ts +3 -3
- package/dist/components/studentInputs/fillInInput.vue.d.ts +3 -3
- package/dist/composables/CompositionViewable.d.ts +2 -2
- package/dist/composables/Displayable.d.ts +1 -1
- package/dist/stores/useAuthStore.d.ts +82 -82
- package/dist/stores/useAuthStore.d.ts.map +1 -1
- package/dist/stores/useConfigStore.d.ts +1 -1
- package/package.json +18 -5
- package/src/admin/components/CardDossierDetail.vue +99 -0
- package/src/admin/components/LearnerCardHistory.vue +196 -0
- package/src/admin/components/LearnerDatasetSource.vue +97 -0
- package/src/admin/components/LearnerDiagnostics.vue +68 -0
- package/src/admin/components/LearnerSessionDetail.vue +439 -0
- package/src/admin/components/LearnerSessionList.vue +175 -0
- package/src/admin/components/RunDetail.vue +166 -0
- package/src/admin/composables/useLearnerDataset.ts +66 -0
- package/src/admin/display.ts +73 -0
- package/src/admin/index.ts +27 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UserDBInterface } from '
|
|
1
|
+
import { UserDBInterface } from '@vue-skuilder/db';
|
|
2
2
|
export interface AuthState {
|
|
3
3
|
_user: UserDBInterface | undefined;
|
|
4
4
|
loginAndRegistration: {
|
|
@@ -17,24 +17,24 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
17
17
|
get: <T>(id: string) => Promise<T & PouchDB.Core.RevisionIdMeta>;
|
|
18
18
|
getUsername: () => string;
|
|
19
19
|
isLoggedIn: () => boolean;
|
|
20
|
-
hydrationStatus: () => import('
|
|
21
|
-
awaitHydration: () => Promise<import('
|
|
22
|
-
getConfig: () => Promise<import('
|
|
20
|
+
hydrationStatus: () => import('@vue-skuilder/db').UserHydrationStatus;
|
|
21
|
+
awaitHydration: () => Promise<import('@vue-skuilder/db').UserHydrationStatus>;
|
|
22
|
+
getConfig: () => Promise<import('@vue-skuilder/db').UserConfig>;
|
|
23
23
|
getSeenCards: (courseId?: string) => Promise<string[]>;
|
|
24
|
-
getActiveCards: () => Promise<import('
|
|
25
|
-
getCourseRegistrationsDoc: () => Promise<import('
|
|
26
|
-
getCourseRegDoc: (courseId: string) => Promise<import('
|
|
27
|
-
getActiveCourses: () => Promise<import('
|
|
28
|
-
getPendingReviews: (courseId?: string) => Promise<import('
|
|
29
|
-
getStudySessions: (courseId?: string) => Promise<import('
|
|
30
|
-
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('
|
|
31
|
-
getActivityRecords: () => Promise<import('
|
|
24
|
+
getActiveCards: () => Promise<import('@vue-skuilder/db').QualifiedCardID[]>;
|
|
25
|
+
getCourseRegistrationsDoc: () => Promise<import('@vue-skuilder/db').CourseRegistrationDoc>;
|
|
26
|
+
getCourseRegDoc: (courseId: string) => Promise<import('@vue-skuilder/db').CourseRegistration>;
|
|
27
|
+
getActiveCourses: () => Promise<import('@vue-skuilder/db').CourseRegistration[]>;
|
|
28
|
+
getPendingReviews: (courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
29
|
+
getStudySessions: (courseId?: string) => Promise<import('@vue-skuilder/db').StudySessionDoc[]>;
|
|
30
|
+
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
31
|
+
getActivityRecords: () => Promise<import('@vue-skuilder/db').ActivityRecord[]>;
|
|
32
32
|
getStrategyState: <T>(courseId: string, strategyKey: string) => Promise<T | null>;
|
|
33
|
-
getUserClassrooms: () => Promise<import('
|
|
33
|
+
getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
|
|
34
34
|
getActiveClasses: () => Promise<string[]>;
|
|
35
|
-
getCourseInterface: (courseId: string) => Promise<import('
|
|
36
|
-
setConfig: (config: Partial<import('
|
|
37
|
-
putCardRecord: <T extends import('
|
|
35
|
+
getCourseInterface: (courseId: string) => Promise<import('@vue-skuilder/db').UsrCrsDataInterface>;
|
|
36
|
+
setConfig: (config: Partial<import('@vue-skuilder/db').UserConfig>) => Promise<void>;
|
|
37
|
+
putCardRecord: <T extends import('@vue-skuilder/db').CardRecord>(record: T) => Promise<import('@vue-skuilder/db').CardHistory<import('@vue-skuilder/db').CardRecord>>;
|
|
38
38
|
registerForCourse: (courseId: string, previewMode?: boolean) => Promise<PouchDB.Core.Response>;
|
|
39
39
|
dropCourse: (courseId: string, dropStatus?: string) => Promise<PouchDB.Core.Response>;
|
|
40
40
|
scheduleCardReview: (review: {
|
|
@@ -48,18 +48,18 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
48
48
|
removeScheduledCardReview: (reviewId: string) => Promise<void>;
|
|
49
49
|
registerForClassroom: (classId: string, registerAs: "student" | "teacher" | "aide" | "admin") => Promise<PouchDB.Core.Response>;
|
|
50
50
|
dropFromClassroom: (classId: string) => Promise<PouchDB.Core.Response>;
|
|
51
|
-
updateUserElo: (courseId: string, elo: import('
|
|
51
|
+
updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
|
|
52
52
|
resetUserData: () => Promise<{
|
|
53
|
-
status: import('
|
|
53
|
+
status: import('@vue-skuilder/common').Status;
|
|
54
54
|
error?: string;
|
|
55
55
|
}>;
|
|
56
56
|
putStrategyState: <T>(courseId: string, strategyKey: string, data: T) => Promise<void>;
|
|
57
57
|
deleteStrategyState: (courseId: string, strategyKey: string) => Promise<void>;
|
|
58
|
-
putUserOutcome: (record: import('
|
|
59
|
-
putStudySession: (doc: import('
|
|
58
|
+
putUserOutcome: (record: import('@vue-skuilder/db').UserOutcomeRecord) => Promise<void>;
|
|
59
|
+
putStudySession: (doc: import('@vue-skuilder/db').StudySessionDoc) => Promise<void>;
|
|
60
60
|
update: <T extends PouchDB.Core.Document<object>>(id: string, update: Partial<T> | ((x: T) => T)) => Promise<T>;
|
|
61
61
|
createAccount: (username: string, password: string) => Promise<{
|
|
62
|
-
status: import('
|
|
62
|
+
status: import('@vue-skuilder/common').Status;
|
|
63
63
|
error: string;
|
|
64
64
|
}>;
|
|
65
65
|
login: (username: string, password: string) => Promise<{
|
|
@@ -91,24 +91,24 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
91
91
|
get: <T>(id: string) => Promise<T & PouchDB.Core.RevisionIdMeta>;
|
|
92
92
|
getUsername: () => string;
|
|
93
93
|
isLoggedIn: () => boolean;
|
|
94
|
-
hydrationStatus: () => import('
|
|
95
|
-
awaitHydration: () => Promise<import('
|
|
96
|
-
getConfig: () => Promise<import('
|
|
94
|
+
hydrationStatus: () => import('@vue-skuilder/db').UserHydrationStatus;
|
|
95
|
+
awaitHydration: () => Promise<import('@vue-skuilder/db').UserHydrationStatus>;
|
|
96
|
+
getConfig: () => Promise<import('@vue-skuilder/db').UserConfig>;
|
|
97
97
|
getSeenCards: (courseId?: string) => Promise<string[]>;
|
|
98
|
-
getActiveCards: () => Promise<import('
|
|
99
|
-
getCourseRegistrationsDoc: () => Promise<import('
|
|
100
|
-
getCourseRegDoc: (courseId: string) => Promise<import('
|
|
101
|
-
getActiveCourses: () => Promise<import('
|
|
102
|
-
getPendingReviews: (courseId?: string) => Promise<import('
|
|
103
|
-
getStudySessions: (courseId?: string) => Promise<import('
|
|
104
|
-
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('
|
|
105
|
-
getActivityRecords: () => Promise<import('
|
|
98
|
+
getActiveCards: () => Promise<import('@vue-skuilder/db').QualifiedCardID[]>;
|
|
99
|
+
getCourseRegistrationsDoc: () => Promise<import('@vue-skuilder/db').CourseRegistrationDoc>;
|
|
100
|
+
getCourseRegDoc: (courseId: string) => Promise<import('@vue-skuilder/db').CourseRegistration>;
|
|
101
|
+
getActiveCourses: () => Promise<import('@vue-skuilder/db').CourseRegistration[]>;
|
|
102
|
+
getPendingReviews: (courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
103
|
+
getStudySessions: (courseId?: string) => Promise<import('@vue-skuilder/db').StudySessionDoc[]>;
|
|
104
|
+
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
105
|
+
getActivityRecords: () => Promise<import('@vue-skuilder/db').ActivityRecord[]>;
|
|
106
106
|
getStrategyState: <T>(courseId: string, strategyKey: string) => Promise<T | null>;
|
|
107
|
-
getUserClassrooms: () => Promise<import('
|
|
107
|
+
getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
|
|
108
108
|
getActiveClasses: () => Promise<string[]>;
|
|
109
|
-
getCourseInterface: (courseId: string) => Promise<import('
|
|
110
|
-
setConfig: (config: Partial<import('
|
|
111
|
-
putCardRecord: <T extends import('
|
|
109
|
+
getCourseInterface: (courseId: string) => Promise<import('@vue-skuilder/db').UsrCrsDataInterface>;
|
|
110
|
+
setConfig: (config: Partial<import('@vue-skuilder/db').UserConfig>) => Promise<void>;
|
|
111
|
+
putCardRecord: <T extends import('@vue-skuilder/db').CardRecord>(record: T) => Promise<import('@vue-skuilder/db').CardHistory<import('@vue-skuilder/db').CardRecord>>;
|
|
112
112
|
registerForCourse: (courseId: string, previewMode?: boolean) => Promise<PouchDB.Core.Response>;
|
|
113
113
|
dropCourse: (courseId: string, dropStatus?: string) => Promise<PouchDB.Core.Response>;
|
|
114
114
|
scheduleCardReview: (review: {
|
|
@@ -122,18 +122,18 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
122
122
|
removeScheduledCardReview: (reviewId: string) => Promise<void>;
|
|
123
123
|
registerForClassroom: (classId: string, registerAs: "student" | "teacher" | "aide" | "admin") => Promise<PouchDB.Core.Response>;
|
|
124
124
|
dropFromClassroom: (classId: string) => Promise<PouchDB.Core.Response>;
|
|
125
|
-
updateUserElo: (courseId: string, elo: import('
|
|
125
|
+
updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
|
|
126
126
|
resetUserData: () => Promise<{
|
|
127
|
-
status: import('
|
|
127
|
+
status: import('@vue-skuilder/common').Status;
|
|
128
128
|
error?: string;
|
|
129
129
|
}>;
|
|
130
130
|
putStrategyState: <T>(courseId: string, strategyKey: string, data: T) => Promise<void>;
|
|
131
131
|
deleteStrategyState: (courseId: string, strategyKey: string) => Promise<void>;
|
|
132
|
-
putUserOutcome: (record: import('
|
|
133
|
-
putStudySession: (doc: import('
|
|
132
|
+
putUserOutcome: (record: import('@vue-skuilder/db').UserOutcomeRecord) => Promise<void>;
|
|
133
|
+
putStudySession: (doc: import('@vue-skuilder/db').StudySessionDoc) => Promise<void>;
|
|
134
134
|
update: <T extends PouchDB.Core.Document<object>>(id: string, update: Partial<T> | ((x: T) => T)) => Promise<T>;
|
|
135
135
|
createAccount: (username: string, password: string) => Promise<{
|
|
136
|
-
status: import('
|
|
136
|
+
status: import('@vue-skuilder/common').Status;
|
|
137
137
|
error: string;
|
|
138
138
|
}>;
|
|
139
139
|
login: (username: string, password: string) => Promise<{
|
|
@@ -165,24 +165,24 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
165
165
|
get: <T>(id: string) => Promise<T & PouchDB.Core.RevisionIdMeta>;
|
|
166
166
|
getUsername: () => string;
|
|
167
167
|
isLoggedIn: () => boolean;
|
|
168
|
-
hydrationStatus: () => import('
|
|
169
|
-
awaitHydration: () => Promise<import('
|
|
170
|
-
getConfig: () => Promise<import('
|
|
168
|
+
hydrationStatus: () => import('@vue-skuilder/db').UserHydrationStatus;
|
|
169
|
+
awaitHydration: () => Promise<import('@vue-skuilder/db').UserHydrationStatus>;
|
|
170
|
+
getConfig: () => Promise<import('@vue-skuilder/db').UserConfig>;
|
|
171
171
|
getSeenCards: (courseId?: string) => Promise<string[]>;
|
|
172
|
-
getActiveCards: () => Promise<import('
|
|
173
|
-
getCourseRegistrationsDoc: () => Promise<import('
|
|
174
|
-
getCourseRegDoc: (courseId: string) => Promise<import('
|
|
175
|
-
getActiveCourses: () => Promise<import('
|
|
176
|
-
getPendingReviews: (courseId?: string) => Promise<import('
|
|
177
|
-
getStudySessions: (courseId?: string) => Promise<import('
|
|
178
|
-
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('
|
|
179
|
-
getActivityRecords: () => Promise<import('
|
|
172
|
+
getActiveCards: () => Promise<import('@vue-skuilder/db').QualifiedCardID[]>;
|
|
173
|
+
getCourseRegistrationsDoc: () => Promise<import('@vue-skuilder/db').CourseRegistrationDoc>;
|
|
174
|
+
getCourseRegDoc: (courseId: string) => Promise<import('@vue-skuilder/db').CourseRegistration>;
|
|
175
|
+
getActiveCourses: () => Promise<import('@vue-skuilder/db').CourseRegistration[]>;
|
|
176
|
+
getPendingReviews: (courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
177
|
+
getStudySessions: (courseId?: string) => Promise<import('@vue-skuilder/db').StudySessionDoc[]>;
|
|
178
|
+
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
179
|
+
getActivityRecords: () => Promise<import('@vue-skuilder/db').ActivityRecord[]>;
|
|
180
180
|
getStrategyState: <T>(courseId: string, strategyKey: string) => Promise<T | null>;
|
|
181
|
-
getUserClassrooms: () => Promise<import('
|
|
181
|
+
getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
|
|
182
182
|
getActiveClasses: () => Promise<string[]>;
|
|
183
|
-
getCourseInterface: (courseId: string) => Promise<import('
|
|
184
|
-
setConfig: (config: Partial<import('
|
|
185
|
-
putCardRecord: <T extends import('
|
|
183
|
+
getCourseInterface: (courseId: string) => Promise<import('@vue-skuilder/db').UsrCrsDataInterface>;
|
|
184
|
+
setConfig: (config: Partial<import('@vue-skuilder/db').UserConfig>) => Promise<void>;
|
|
185
|
+
putCardRecord: <T extends import('@vue-skuilder/db').CardRecord>(record: T) => Promise<import('@vue-skuilder/db').CardHistory<import('@vue-skuilder/db').CardRecord>>;
|
|
186
186
|
registerForCourse: (courseId: string, previewMode?: boolean) => Promise<PouchDB.Core.Response>;
|
|
187
187
|
dropCourse: (courseId: string, dropStatus?: string) => Promise<PouchDB.Core.Response>;
|
|
188
188
|
scheduleCardReview: (review: {
|
|
@@ -196,18 +196,18 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
196
196
|
removeScheduledCardReview: (reviewId: string) => Promise<void>;
|
|
197
197
|
registerForClassroom: (classId: string, registerAs: "student" | "teacher" | "aide" | "admin") => Promise<PouchDB.Core.Response>;
|
|
198
198
|
dropFromClassroom: (classId: string) => Promise<PouchDB.Core.Response>;
|
|
199
|
-
updateUserElo: (courseId: string, elo: import('
|
|
199
|
+
updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
|
|
200
200
|
resetUserData: () => Promise<{
|
|
201
|
-
status: import('
|
|
201
|
+
status: import('@vue-skuilder/common').Status;
|
|
202
202
|
error?: string;
|
|
203
203
|
}>;
|
|
204
204
|
putStrategyState: <T>(courseId: string, strategyKey: string, data: T) => Promise<void>;
|
|
205
205
|
deleteStrategyState: (courseId: string, strategyKey: string) => Promise<void>;
|
|
206
|
-
putUserOutcome: (record: import('
|
|
207
|
-
putStudySession: (doc: import('
|
|
206
|
+
putUserOutcome: (record: import('@vue-skuilder/db').UserOutcomeRecord) => Promise<void>;
|
|
207
|
+
putStudySession: (doc: import('@vue-skuilder/db').StudySessionDoc) => Promise<void>;
|
|
208
208
|
update: <T extends PouchDB.Core.Document<object>>(id: string, update: Partial<T> | ((x: T) => T)) => Promise<T>;
|
|
209
209
|
createAccount: (username: string, password: string) => Promise<{
|
|
210
|
-
status: import('
|
|
210
|
+
status: import('@vue-skuilder/common').Status;
|
|
211
211
|
error: string;
|
|
212
212
|
}>;
|
|
213
213
|
login: (username: string, password: string) => Promise<{
|
|
@@ -240,24 +240,24 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
240
240
|
get: <T>(id: string) => Promise<T & PouchDB.Core.RevisionIdMeta>;
|
|
241
241
|
getUsername: () => string;
|
|
242
242
|
isLoggedIn: () => boolean;
|
|
243
|
-
hydrationStatus: () => import('
|
|
244
|
-
awaitHydration: () => Promise<import('
|
|
245
|
-
getConfig: () => Promise<import('
|
|
243
|
+
hydrationStatus: () => import('@vue-skuilder/db').UserHydrationStatus;
|
|
244
|
+
awaitHydration: () => Promise<import('@vue-skuilder/db').UserHydrationStatus>;
|
|
245
|
+
getConfig: () => Promise<import('@vue-skuilder/db').UserConfig>;
|
|
246
246
|
getSeenCards: (courseId?: string) => Promise<string[]>;
|
|
247
|
-
getActiveCards: () => Promise<import('
|
|
248
|
-
getCourseRegistrationsDoc: () => Promise<import('
|
|
249
|
-
getCourseRegDoc: (courseId: string) => Promise<import('
|
|
250
|
-
getActiveCourses: () => Promise<import('
|
|
251
|
-
getPendingReviews: (courseId?: string) => Promise<import('
|
|
252
|
-
getStudySessions: (courseId?: string) => Promise<import('
|
|
253
|
-
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('
|
|
254
|
-
getActivityRecords: () => Promise<import('
|
|
247
|
+
getActiveCards: () => Promise<import('@vue-skuilder/db').QualifiedCardID[]>;
|
|
248
|
+
getCourseRegistrationsDoc: () => Promise<import('@vue-skuilder/db').CourseRegistrationDoc>;
|
|
249
|
+
getCourseRegDoc: (courseId: string) => Promise<import('@vue-skuilder/db').CourseRegistration>;
|
|
250
|
+
getActiveCourses: () => Promise<import('@vue-skuilder/db').CourseRegistration[]>;
|
|
251
|
+
getPendingReviews: (courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
252
|
+
getStudySessions: (courseId?: string) => Promise<import('@vue-skuilder/db').StudySessionDoc[]>;
|
|
253
|
+
getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('@vue-skuilder/db').ScheduledCard[]>;
|
|
254
|
+
getActivityRecords: () => Promise<import('@vue-skuilder/db').ActivityRecord[]>;
|
|
255
255
|
getStrategyState: <T>(courseId: string, strategyKey: string) => Promise<T | null>;
|
|
256
|
-
getUserClassrooms: () => Promise<import('
|
|
256
|
+
getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
|
|
257
257
|
getActiveClasses: () => Promise<string[]>;
|
|
258
|
-
getCourseInterface: (courseId: string) => Promise<import('
|
|
259
|
-
setConfig: (config: Partial<import('
|
|
260
|
-
putCardRecord: <T extends import('
|
|
258
|
+
getCourseInterface: (courseId: string) => Promise<import('@vue-skuilder/db').UsrCrsDataInterface>;
|
|
259
|
+
setConfig: (config: Partial<import('@vue-skuilder/db').UserConfig>) => Promise<void>;
|
|
260
|
+
putCardRecord: <T extends import('@vue-skuilder/db').CardRecord>(record: T) => Promise<import('@vue-skuilder/db').CardHistory<import('@vue-skuilder/db').CardRecord>>;
|
|
261
261
|
registerForCourse: (courseId: string, previewMode?: boolean) => Promise<PouchDB.Core.Response>;
|
|
262
262
|
dropCourse: (courseId: string, dropStatus?: string) => Promise<PouchDB.Core.Response>;
|
|
263
263
|
scheduleCardReview: (review: {
|
|
@@ -271,18 +271,18 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
271
271
|
removeScheduledCardReview: (reviewId: string) => Promise<void>;
|
|
272
272
|
registerForClassroom: (classId: string, registerAs: "student" | "teacher" | "aide" | "admin") => Promise<PouchDB.Core.Response>;
|
|
273
273
|
dropFromClassroom: (classId: string) => Promise<PouchDB.Core.Response>;
|
|
274
|
-
updateUserElo: (courseId: string, elo: import('
|
|
274
|
+
updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
|
|
275
275
|
resetUserData: () => Promise<{
|
|
276
|
-
status: import('
|
|
276
|
+
status: import('@vue-skuilder/common').Status;
|
|
277
277
|
error?: string;
|
|
278
278
|
}>;
|
|
279
279
|
putStrategyState: <T>(courseId: string, strategyKey: string, data: T) => Promise<void>;
|
|
280
280
|
deleteStrategyState: (courseId: string, strategyKey: string) => Promise<void>;
|
|
281
|
-
putUserOutcome: (record: import('
|
|
282
|
-
putStudySession: (doc: import('
|
|
281
|
+
putUserOutcome: (record: import('@vue-skuilder/db').UserOutcomeRecord) => Promise<void>;
|
|
282
|
+
putStudySession: (doc: import('@vue-skuilder/db').StudySessionDoc) => Promise<void>;
|
|
283
283
|
update: <T extends PouchDB.Core.Document<object>>(id: string, update: Partial<T> | ((x: T) => T)) => Promise<T>;
|
|
284
284
|
createAccount: (username: string, password: string) => Promise<{
|
|
285
|
-
status: import('
|
|
285
|
+
status: import('@vue-skuilder/common').Status;
|
|
286
286
|
error: string;
|
|
287
287
|
}>;
|
|
288
288
|
login: (username: string, password: string) => Promise<{
|
|
@@ -307,7 +307,7 @@ export declare const useAuthStore: () => import('pinia').Store<"auth", AuthState
|
|
|
307
307
|
setLoginDialog(open: boolean): void;
|
|
308
308
|
setRegDialog(open: boolean): void;
|
|
309
309
|
resetUserData(): Promise<{
|
|
310
|
-
status: import('
|
|
310
|
+
status: import('@vue-skuilder/common').Status;
|
|
311
311
|
error?: string;
|
|
312
312
|
}>;
|
|
313
313
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthStore.d.ts","sourceRoot":"","sources":["../../src/stores/useAuthStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,oBAAoB,EAAE;QACpB,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAiB3E;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useAuthStore.d.ts","sourceRoot":"","sources":["../../src/stores/useAuthStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,oBAAoB,EAAE;QACpB,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAiB3E;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAgFs1lC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;kBA3GxtqC,OAAO;sBACH,OAAO;2BACF,OAAO;6BACL,OAAO;;wBAEV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsGs1lC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;kBA3GxtqC,OAAO;sBACH,OAAO;2BACF,OAAO;6BACL,OAAO;;wBAEV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsGs1lC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;kBA3GxtqC,OAAO;sBACH,OAAO;2BACF,OAAO;6BACL,OAAO;;wBAEV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsGs1lC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;;;yBA1CvsqC,OAAO;uBAIT,OAAO;;;;;EAqC/B,CAAC"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.2.
|
|
6
|
+
"version": "0.2.28",
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"main": "./dist/common-ui.umd.js",
|
|
9
9
|
"module": "./dist/common-ui.es.js",
|
|
@@ -14,16 +14,29 @@
|
|
|
14
14
|
"import": "./dist/common-ui.es.js",
|
|
15
15
|
"require": "./dist/common-ui.umd.js"
|
|
16
16
|
},
|
|
17
|
+
"./admin": {
|
|
18
|
+
"types": "./dist/admin/index.d.ts",
|
|
19
|
+
"import": "./dist/admin/common-ui-admin.es.js"
|
|
20
|
+
},
|
|
21
|
+
"./admin/style": "./dist/admin/admin.css",
|
|
17
22
|
"./style": "./dist/assets/index.css",
|
|
18
23
|
"./styles": "./dist/assets/index.css"
|
|
19
24
|
},
|
|
25
|
+
"typesVersions": {
|
|
26
|
+
"*": {
|
|
27
|
+
"admin": [
|
|
28
|
+
"./dist/admin/index.d.ts"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
},
|
|
20
32
|
"files": [
|
|
21
33
|
"dist",
|
|
22
34
|
"src"
|
|
23
35
|
],
|
|
24
36
|
"scripts": {
|
|
25
37
|
"dev": "vite build --watch",
|
|
26
|
-
"
|
|
38
|
+
"dev:admin": "vite build --watch -c vite.config.admin.js",
|
|
39
|
+
"build": "vite build && vite build -c vite.config.admin.js",
|
|
27
40
|
"lint": "eslint . --fix",
|
|
28
41
|
"lint:check": "eslint .",
|
|
29
42
|
"test:unit": "vitest run",
|
|
@@ -34,8 +47,8 @@
|
|
|
34
47
|
"@highlightjs/vue-plugin": "^2.1.2",
|
|
35
48
|
"@mdi/font": "^7.3.67",
|
|
36
49
|
"@vojtechlanka/vue-tags-input": "^3",
|
|
37
|
-
"@vue-skuilder/common": "0.2.
|
|
38
|
-
"@vue-skuilder/db": "0.2.
|
|
50
|
+
"@vue-skuilder/common": "0.2.28",
|
|
51
|
+
"@vue-skuilder/db": "0.2.28",
|
|
39
52
|
"highlight.js": "^11.0.1",
|
|
40
53
|
"marked": "^15.0.6",
|
|
41
54
|
"moment": "^2.29.4",
|
|
@@ -71,5 +84,5 @@
|
|
|
71
84
|
"vite-plugin-dts": "^4.5.3",
|
|
72
85
|
"vitest": "^4.1.0"
|
|
73
86
|
},
|
|
74
|
-
"stableVersion": "0.2.
|
|
87
|
+
"stableVersion": "0.2.28"
|
|
75
88
|
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<div v-if="dossier.card && Object.keys(dossier.card.data).length" class="text-caption mb-2">
|
|
4
|
+
<span v-for="(v, k) in dossier.card.data" :key="k" class="mr-3">
|
|
5
|
+
<span class="text-medium-emphasis">{{ k }}:</span> {{ fmtAnswer(v, 60) }}
|
|
6
|
+
</span>
|
|
7
|
+
</div>
|
|
8
|
+
<div class="d-flex flex-wrap mb-2 ga-1">
|
|
9
|
+
<v-chip
|
|
10
|
+
v-for="t in dossier.card?.tags ?? []"
|
|
11
|
+
:key="t"
|
|
12
|
+
size="x-small"
|
|
13
|
+
variant="outlined"
|
|
14
|
+
:color="isSkillTag(interpreters, t) ? 'primary' : undefined"
|
|
15
|
+
>
|
|
16
|
+
{{ t }}
|
|
17
|
+
</v-chip>
|
|
18
|
+
<span v-if="!dossier.card" class="text-caption text-disabled">no course data in this dataset</span>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="text-caption text-medium-emphasis mb-2">
|
|
21
|
+
lapses {{ dossier.lapses }} · streak {{ dossier.streak }} · best interval
|
|
22
|
+
{{ fmtInterval(dossier.bestIntervalSeconds) }} ·
|
|
23
|
+
<template v-if="dossier.pendingReview">
|
|
24
|
+
next review {{ fmtTime(dossier.pendingReview.reviewTime) }}
|
|
25
|
+
<span v-if="dossier.pendingReview.overdue" class="text-error">(overdue)</span>
|
|
26
|
+
</template>
|
|
27
|
+
<template v-else>no review scheduled</template>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<v-table density="compact" class="sk-record-table">
|
|
31
|
+
<thead>
|
|
32
|
+
<tr>
|
|
33
|
+
<th>#</th>
|
|
34
|
+
<th>When</th>
|
|
35
|
+
<th>Result</th>
|
|
36
|
+
<th>Perf</th>
|
|
37
|
+
<th>Prior att.</th>
|
|
38
|
+
<th>Time</th>
|
|
39
|
+
<th>Answer</th>
|
|
40
|
+
</tr>
|
|
41
|
+
</thead>
|
|
42
|
+
<tbody>
|
|
43
|
+
<tr v-for="(r, i) in dossier.records" :key="i" :class="r.isCorrect === false ? 'sk-fail-row' : ''">
|
|
44
|
+
<td>{{ i + 1 }}</td>
|
|
45
|
+
<td class="text-no-wrap">{{ fmtTime(r.timeStamp) }}</td>
|
|
46
|
+
<td>
|
|
47
|
+
<v-icon v-if="r.isCorrect === true" size="small" color="success">mdi-check</v-icon>
|
|
48
|
+
<v-icon v-else-if="r.isCorrect === false" size="small" color="error">mdi-close</v-icon>
|
|
49
|
+
<span v-else class="text-disabled">—</span>
|
|
50
|
+
</td>
|
|
51
|
+
<td>{{ perf(r) }}</td>
|
|
52
|
+
<td>{{ r.priorAttemps ?? '—' }}</td>
|
|
53
|
+
<td>{{ ((r.timeSpent ?? 0) / 1000).toFixed(1) }}s</td>
|
|
54
|
+
<td class="text-truncate" style="max-width: 200px">{{ fmtAnswer(r.userAnswer) }}</td>
|
|
55
|
+
</tr>
|
|
56
|
+
</tbody>
|
|
57
|
+
</v-table>
|
|
58
|
+
</div>
|
|
59
|
+
</template>
|
|
60
|
+
|
|
61
|
+
<script setup lang="ts">
|
|
62
|
+
import {
|
|
63
|
+
fmtAnswer,
|
|
64
|
+
isSkillTag,
|
|
65
|
+
recordPerformance,
|
|
66
|
+
type CardDossier,
|
|
67
|
+
type DatasetRecord,
|
|
68
|
+
type DiagnosticsInterpreters,
|
|
69
|
+
} from '@vue-skuilder/db/diagnostics';
|
|
70
|
+
import { fmtTime } from '../display';
|
|
71
|
+
|
|
72
|
+
/** One card's record for one learner: content, tags, scheduling state, and every response. */
|
|
73
|
+
defineProps<{
|
|
74
|
+
dossier: CardDossier;
|
|
75
|
+
interpreters?: DiagnosticsInterpreters;
|
|
76
|
+
}>();
|
|
77
|
+
|
|
78
|
+
function perf(r: DatasetRecord): string {
|
|
79
|
+
const p = recordPerformance(r);
|
|
80
|
+
return p === null ? '—' : p.toFixed(2);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function fmtInterval(s: number): string {
|
|
84
|
+
if (!s) return 'none';
|
|
85
|
+
if (s < 3600) return `${Math.round(s / 60)}m`;
|
|
86
|
+
if (s < 86400) return `${Math.round(s / 3600)}h`;
|
|
87
|
+
return `${Math.round(s / 86400)}d`;
|
|
88
|
+
}
|
|
89
|
+
</script>
|
|
90
|
+
|
|
91
|
+
<style scoped>
|
|
92
|
+
.sk-record-table :deep(td),
|
|
93
|
+
.sk-record-table :deep(th) {
|
|
94
|
+
font-size: 0.78rem;
|
|
95
|
+
}
|
|
96
|
+
.sk-fail-row {
|
|
97
|
+
background-color: rgba(var(--v-theme-error), 0.06);
|
|
98
|
+
}
|
|
99
|
+
</style>
|