@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.
Files changed (65) hide show
  1. package/dist/admin/admin.css +2 -0
  2. package/dist/admin/common-ui-admin.es.js +1394 -0
  3. package/dist/admin/common-ui-admin.es.js.map +1 -0
  4. package/dist/admin/components/CardDossierDetail.vue.d.ts +9 -0
  5. package/dist/admin/components/CardDossierDetail.vue.d.ts.map +1 -0
  6. package/dist/admin/components/LearnerCardHistory.vue.d.ts +13 -0
  7. package/dist/admin/components/LearnerCardHistory.vue.d.ts.map +1 -0
  8. package/dist/admin/components/LearnerDatasetSource.vue.d.ts +24 -0
  9. package/dist/admin/components/LearnerDatasetSource.vue.d.ts.map +1 -0
  10. package/dist/admin/components/LearnerDiagnostics.vue.d.ts +13 -0
  11. package/dist/admin/components/LearnerDiagnostics.vue.d.ts.map +1 -0
  12. package/dist/admin/components/LearnerSessionDetail.vue.d.ts +14 -0
  13. package/dist/admin/components/LearnerSessionDetail.vue.d.ts.map +1 -0
  14. package/dist/admin/components/LearnerSessionList.vue.d.ts +13 -0
  15. package/dist/admin/components/LearnerSessionList.vue.d.ts.map +1 -0
  16. package/dist/admin/components/RunDetail.vue.d.ts +12 -0
  17. package/dist/admin/components/RunDetail.vue.d.ts.map +1 -0
  18. package/dist/admin/composables/useLearnerDataset.d.ts +26 -0
  19. package/dist/admin/composables/useLearnerDataset.d.ts.map +1 -0
  20. package/dist/admin/display.d.ts +20 -0
  21. package/dist/admin/display.d.ts.map +1 -0
  22. package/dist/admin/index.d.ts +22 -0
  23. package/dist/admin/index.d.ts.map +1 -0
  24. package/dist/components/CardBrowser.vue.d.ts +5 -5
  25. package/dist/components/CardHistoryViewer.vue.d.ts +1 -1
  26. package/dist/components/CardSearchResults.vue.d.ts +1 -1
  27. package/dist/components/CourseCardBrowser.vue.d.ts +9 -9
  28. package/dist/components/CourseInformation.vue.d.ts +18 -18
  29. package/dist/components/CourseTagFilterWidget.vue.d.ts +1 -1
  30. package/dist/components/SessionControllerDebug.vue.d.ts +1 -1
  31. package/dist/components/SnackbarService.d.ts +1 -1
  32. package/dist/components/StudySession.types.d.ts +1 -1
  33. package/dist/components/StudySession.vue.d.ts +2 -2
  34. package/dist/components/TagsInput.vue.d.ts +1 -1
  35. package/dist/components/UserTagPreferences.vue.d.ts +1 -1
  36. package/dist/components/auth/UserRegistration.vue.d.ts +74 -74
  37. package/dist/components/auth/UserRegistration.vue.d.ts.map +1 -1
  38. package/dist/components/cardRendering/CardLoader.vue.d.ts +6 -6
  39. package/dist/components/cardRendering/CardViewer.vue.d.ts +2 -2
  40. package/dist/components/cardRendering/MarkdownRenderer.vue.d.ts +6 -6
  41. package/dist/components/cardRendering/MdTokenRenderer.vue.d.ts +6 -6
  42. package/dist/components/studentInputs/BaseUserInput.d.ts +2 -2
  43. package/dist/components/studentInputs/MultipleChoiceOption.vue.d.ts +6 -6
  44. package/dist/components/studentInputs/RadioMultipleChoice.types.d.ts +1 -1
  45. package/dist/components/studentInputs/RadioMultipleChoice.vue.d.ts +9 -9
  46. package/dist/components/studentInputs/TrueFalse.vue.d.ts +9 -9
  47. package/dist/components/studentInputs/UserInputNumber.vue.d.ts +2 -2
  48. package/dist/components/studentInputs/UserInputString.vue.d.ts +3 -3
  49. package/dist/components/studentInputs/fillInInput.vue.d.ts +3 -3
  50. package/dist/composables/CompositionViewable.d.ts +2 -2
  51. package/dist/composables/Displayable.d.ts +1 -1
  52. package/dist/stores/useAuthStore.d.ts +82 -82
  53. package/dist/stores/useAuthStore.d.ts.map +1 -1
  54. package/dist/stores/useConfigStore.d.ts +1 -1
  55. package/package.json +18 -5
  56. package/src/admin/components/CardDossierDetail.vue +99 -0
  57. package/src/admin/components/LearnerCardHistory.vue +196 -0
  58. package/src/admin/components/LearnerDatasetSource.vue +97 -0
  59. package/src/admin/components/LearnerDiagnostics.vue +68 -0
  60. package/src/admin/components/LearnerSessionDetail.vue +439 -0
  61. package/src/admin/components/LearnerSessionList.vue +175 -0
  62. package/src/admin/components/RunDetail.vue +166 -0
  63. package/src/admin/composables/useLearnerDataset.ts +66 -0
  64. package/src/admin/display.ts +73 -0
  65. package/src/admin/index.ts +27 -0
@@ -1,4 +1,4 @@
1
- import { UserDBInterface } from '../../../db/dist/index.mjs';
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('../../../db/dist/index.mjs').UserHydrationStatus;
21
- awaitHydration: () => Promise<import('../../../db/dist/index.mjs').UserHydrationStatus>;
22
- getConfig: () => Promise<import('../../../db/dist/index.mjs').UserConfig>;
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('../../../db/dist/index.mjs').QualifiedCardID[]>;
25
- getCourseRegistrationsDoc: () => Promise<import('../../../db/dist/index.mjs').CourseRegistrationDoc>;
26
- getCourseRegDoc: (courseId: string) => Promise<import('../../../db/dist/index.mjs').CourseRegistration>;
27
- getActiveCourses: () => Promise<import('../../../db/dist/index.mjs').CourseRegistration[]>;
28
- getPendingReviews: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
29
- getStudySessions: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').StudySessionDoc[]>;
30
- getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
31
- getActivityRecords: () => Promise<import('../../../db/dist/index.mjs').ActivityRecord[]>;
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('../../../db/dist/index.mjs').ClassroomRegistrationDoc>;
33
+ getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
34
34
  getActiveClasses: () => Promise<string[]>;
35
- getCourseInterface: (courseId: string) => Promise<import('../../../db/dist/index.mjs').UsrCrsDataInterface>;
36
- setConfig: (config: Partial<import('../../../db/dist/index.mjs').UserConfig>) => Promise<void>;
37
- putCardRecord: <T extends import('../../../db/dist/index.mjs').CardRecord>(record: T) => Promise<import('../../../db/dist/index.mjs').CardHistory<import('../../../db/dist/index.mjs').CardRecord>>;
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('../../../common/dist/index.mjs').CourseElo) => Promise<PouchDB.Core.Response>;
51
+ updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
52
52
  resetUserData: () => Promise<{
53
- status: import('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserOutcomeRecord) => Promise<void>;
59
- putStudySession: (doc: import('../../../db/dist/index.mjs').StudySessionDoc) => Promise<void>;
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('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserHydrationStatus;
95
- awaitHydration: () => Promise<import('../../../db/dist/index.mjs').UserHydrationStatus>;
96
- getConfig: () => Promise<import('../../../db/dist/index.mjs').UserConfig>;
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('../../../db/dist/index.mjs').QualifiedCardID[]>;
99
- getCourseRegistrationsDoc: () => Promise<import('../../../db/dist/index.mjs').CourseRegistrationDoc>;
100
- getCourseRegDoc: (courseId: string) => Promise<import('../../../db/dist/index.mjs').CourseRegistration>;
101
- getActiveCourses: () => Promise<import('../../../db/dist/index.mjs').CourseRegistration[]>;
102
- getPendingReviews: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
103
- getStudySessions: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').StudySessionDoc[]>;
104
- getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
105
- getActivityRecords: () => Promise<import('../../../db/dist/index.mjs').ActivityRecord[]>;
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('../../../db/dist/index.mjs').ClassroomRegistrationDoc>;
107
+ getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
108
108
  getActiveClasses: () => Promise<string[]>;
109
- getCourseInterface: (courseId: string) => Promise<import('../../../db/dist/index.mjs').UsrCrsDataInterface>;
110
- setConfig: (config: Partial<import('../../../db/dist/index.mjs').UserConfig>) => Promise<void>;
111
- putCardRecord: <T extends import('../../../db/dist/index.mjs').CardRecord>(record: T) => Promise<import('../../../db/dist/index.mjs').CardHistory<import('../../../db/dist/index.mjs').CardRecord>>;
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('../../../common/dist/index.mjs').CourseElo) => Promise<PouchDB.Core.Response>;
125
+ updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
126
126
  resetUserData: () => Promise<{
127
- status: import('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserOutcomeRecord) => Promise<void>;
133
- putStudySession: (doc: import('../../../db/dist/index.mjs').StudySessionDoc) => Promise<void>;
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('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserHydrationStatus;
169
- awaitHydration: () => Promise<import('../../../db/dist/index.mjs').UserHydrationStatus>;
170
- getConfig: () => Promise<import('../../../db/dist/index.mjs').UserConfig>;
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('../../../db/dist/index.mjs').QualifiedCardID[]>;
173
- getCourseRegistrationsDoc: () => Promise<import('../../../db/dist/index.mjs').CourseRegistrationDoc>;
174
- getCourseRegDoc: (courseId: string) => Promise<import('../../../db/dist/index.mjs').CourseRegistration>;
175
- getActiveCourses: () => Promise<import('../../../db/dist/index.mjs').CourseRegistration[]>;
176
- getPendingReviews: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
177
- getStudySessions: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').StudySessionDoc[]>;
178
- getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
179
- getActivityRecords: () => Promise<import('../../../db/dist/index.mjs').ActivityRecord[]>;
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('../../../db/dist/index.mjs').ClassroomRegistrationDoc>;
181
+ getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
182
182
  getActiveClasses: () => Promise<string[]>;
183
- getCourseInterface: (courseId: string) => Promise<import('../../../db/dist/index.mjs').UsrCrsDataInterface>;
184
- setConfig: (config: Partial<import('../../../db/dist/index.mjs').UserConfig>) => Promise<void>;
185
- putCardRecord: <T extends import('../../../db/dist/index.mjs').CardRecord>(record: T) => Promise<import('../../../db/dist/index.mjs').CardHistory<import('../../../db/dist/index.mjs').CardRecord>>;
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('../../../common/dist/index.mjs').CourseElo) => Promise<PouchDB.Core.Response>;
199
+ updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
200
200
  resetUserData: () => Promise<{
201
- status: import('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserOutcomeRecord) => Promise<void>;
207
- putStudySession: (doc: import('../../../db/dist/index.mjs').StudySessionDoc) => Promise<void>;
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('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserHydrationStatus;
244
- awaitHydration: () => Promise<import('../../../db/dist/index.mjs').UserHydrationStatus>;
245
- getConfig: () => Promise<import('../../../db/dist/index.mjs').UserConfig>;
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('../../../db/dist/index.mjs').QualifiedCardID[]>;
248
- getCourseRegistrationsDoc: () => Promise<import('../../../db/dist/index.mjs').CourseRegistrationDoc>;
249
- getCourseRegDoc: (courseId: string) => Promise<import('../../../db/dist/index.mjs').CourseRegistration>;
250
- getActiveCourses: () => Promise<import('../../../db/dist/index.mjs').CourseRegistration[]>;
251
- getPendingReviews: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
252
- getStudySessions: (courseId?: string) => Promise<import('../../../db/dist/index.mjs').StudySessionDoc[]>;
253
- getReviewsForcast: (daysCount: number, courseId?: string) => Promise<import('../../../db/dist/index.mjs').ScheduledCard[]>;
254
- getActivityRecords: () => Promise<import('../../../db/dist/index.mjs').ActivityRecord[]>;
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('../../../db/dist/index.mjs').ClassroomRegistrationDoc>;
256
+ getUserClassrooms: () => Promise<import('@vue-skuilder/db').ClassroomRegistrationDoc>;
257
257
  getActiveClasses: () => Promise<string[]>;
258
- getCourseInterface: (courseId: string) => Promise<import('../../../db/dist/index.mjs').UsrCrsDataInterface>;
259
- setConfig: (config: Partial<import('../../../db/dist/index.mjs').UserConfig>) => Promise<void>;
260
- putCardRecord: <T extends import('../../../db/dist/index.mjs').CardRecord>(record: T) => Promise<import('../../../db/dist/index.mjs').CardHistory<import('../../../db/dist/index.mjs').CardRecord>>;
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('../../../common/dist/index.mjs').CourseElo) => Promise<PouchDB.Core.Response>;
274
+ updateUserElo: (courseId: string, elo: import('@vue-skuilder/common').CourseElo) => Promise<PouchDB.Core.Response>;
275
275
  resetUserData: () => Promise<{
276
- status: import('../../../common/dist/index.mjs').Status;
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('../../../db/dist/index.mjs').UserOutcomeRecord) => Promise<void>;
282
- putStudySession: (doc: import('../../../db/dist/index.mjs').StudySessionDoc) => Promise<void>;
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('../../../common/dist/index.mjs').Status;
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('../../../common/dist/index.mjs').Status;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAgFkgmC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;kBA3Gp4qC,OAAO;sBACH,OAAO;2BACF,OAAO;6BACL,OAAO;;wBAEV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsGkgmC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;kBA3Gp4qC,OAAO;sBACH,OAAO;2BACF,OAAO;6BACL,OAAO;;wBAEV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsGkgmC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;kBA3Gp4qC,OAAO;sBACH,OAAO;2BACF,OAAO;6BACL,OAAO;;wBAEV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsGkgmC,CAAC;;;;;;;;;;;;;oBAAm7D,CAAC;qBAAuB,CAAC;;;;;;;;;qBAA0Y,CAAC;wBAA0B,CAAC;;;;;;yBA1Cn3qC,OAAO;uBAIT,OAAO;;;;;EAqC/B,CAAC"}
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"}
@@ -1,4 +1,4 @@
1
- import { UserConfig } from '../../../db/dist/index.mjs';
1
+ import { UserConfig } from '@vue-skuilder/db';
2
2
  export declare const useConfigStore: () => import('pinia').Store<"config", {
3
3
  config: UserConfig;
4
4
  }, {}, {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.2.27",
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
- "build": "vite build",
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.27",
38
- "@vue-skuilder/db": "0.2.27",
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.27"
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>