@vue-skuilder/common-ui 0.2.27 → 0.2.29

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 (68) hide show
  1. package/dist/admin/admin.css +2 -0
  2. package/dist/admin/common-ui-admin.es.js +1752 -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 +14 -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/PipelineOverview.vue.d.ts +18 -0
  17. package/dist/admin/components/PipelineOverview.vue.d.ts.map +1 -0
  18. package/dist/admin/components/RunDetail.vue.d.ts +12 -0
  19. package/dist/admin/components/RunDetail.vue.d.ts.map +1 -0
  20. package/dist/admin/composables/useLearnerDataset.d.ts +26 -0
  21. package/dist/admin/composables/useLearnerDataset.d.ts.map +1 -0
  22. package/dist/admin/display.d.ts +20 -0
  23. package/dist/admin/display.d.ts.map +1 -0
  24. package/dist/admin/index.d.ts +23 -0
  25. package/dist/admin/index.d.ts.map +1 -0
  26. package/dist/components/CardBrowser.vue.d.ts +5 -5
  27. package/dist/components/CardHistoryViewer.vue.d.ts +1 -1
  28. package/dist/components/CardSearchResults.vue.d.ts +1 -1
  29. package/dist/components/CourseCardBrowser.vue.d.ts +9 -9
  30. package/dist/components/CourseInformation.vue.d.ts +18 -18
  31. package/dist/components/CourseTagFilterWidget.vue.d.ts +1 -1
  32. package/dist/components/SessionControllerDebug.vue.d.ts +1 -1
  33. package/dist/components/SnackbarService.d.ts +1 -1
  34. package/dist/components/StudySession.types.d.ts +1 -1
  35. package/dist/components/StudySession.vue.d.ts +2 -2
  36. package/dist/components/TagsInput.vue.d.ts +1 -1
  37. package/dist/components/UserTagPreferences.vue.d.ts +1 -1
  38. package/dist/components/auth/UserRegistration.vue.d.ts +74 -74
  39. package/dist/components/auth/UserRegistration.vue.d.ts.map +1 -1
  40. package/dist/components/cardRendering/CardLoader.vue.d.ts +6 -6
  41. package/dist/components/cardRendering/CardViewer.vue.d.ts +2 -2
  42. package/dist/components/cardRendering/MarkdownRenderer.vue.d.ts +6 -6
  43. package/dist/components/cardRendering/MdTokenRenderer.vue.d.ts +6 -6
  44. package/dist/components/studentInputs/BaseUserInput.d.ts +2 -2
  45. package/dist/components/studentInputs/MultipleChoiceOption.vue.d.ts +6 -6
  46. package/dist/components/studentInputs/RadioMultipleChoice.types.d.ts +1 -1
  47. package/dist/components/studentInputs/RadioMultipleChoice.vue.d.ts +9 -9
  48. package/dist/components/studentInputs/TrueFalse.vue.d.ts +9 -9
  49. package/dist/components/studentInputs/UserInputNumber.vue.d.ts +2 -2
  50. package/dist/components/studentInputs/UserInputString.vue.d.ts +3 -3
  51. package/dist/components/studentInputs/fillInInput.vue.d.ts +3 -3
  52. package/dist/composables/CompositionViewable.d.ts +2 -2
  53. package/dist/composables/Displayable.d.ts +1 -1
  54. package/dist/stores/useAuthStore.d.ts +82 -82
  55. package/dist/stores/useAuthStore.d.ts.map +1 -1
  56. package/dist/stores/useConfigStore.d.ts +1 -1
  57. package/package.json +18 -5
  58. package/src/admin/components/CardDossierDetail.vue +99 -0
  59. package/src/admin/components/LearnerCardHistory.vue +196 -0
  60. package/src/admin/components/LearnerDatasetSource.vue +97 -0
  61. package/src/admin/components/LearnerDiagnostics.vue +85 -0
  62. package/src/admin/components/LearnerSessionDetail.vue +439 -0
  63. package/src/admin/components/LearnerSessionList.vue +175 -0
  64. package/src/admin/components/PipelineOverview.vue +390 -0
  65. package/src/admin/components/RunDetail.vue +186 -0
  66. package/src/admin/composables/useLearnerDataset.ts +66 -0
  67. package/src/admin/display.ts +73 -0
  68. package/src/admin/index.ts +28 -0
@@ -0,0 +1,73 @@
1
+ // Display-only helpers shared by the admin views: colours, icons, and
2
+ // locale-formatted times. Anything a text export also needs lives in
3
+ // @vue-skuilder/db/diagnostics instead.
4
+ import { ref, type Ref } from 'vue';
5
+ import type { SessionFlag } from '@vue-skuilder/db/diagnostics';
6
+
7
+ export const FLAG_UI: Record<SessionFlag, { icon: string; color: string }> = {
8
+ churned: { icon: 'mdi-autorenew', color: 'warning' },
9
+ 'out-of-content': { icon: 'mdi-cup-off-outline', color: 'error' },
10
+ walked: { icon: 'mdi-exit-run', color: 'error' },
11
+ stalled: { icon: 'mdi-arrow-collapse-horizontal', color: 'grey' },
12
+ grinding: { icon: 'mdi-alert-octagon-outline', color: 'warning' },
13
+ };
14
+
15
+ export function statusColor(status: string): string {
16
+ if (status === 'closed') return 'success';
17
+ if (status === 'abandoned') return 'warning';
18
+ return 'error'; // 'open': the tab went away before close
19
+ }
20
+
21
+ export function accuracyClass(a: number | null): string {
22
+ if (a === null) return 'text-disabled';
23
+ if (a >= 0.8) return 'text-success';
24
+ if (a < 0.5) return 'text-error';
25
+ return '';
26
+ }
27
+
28
+ export function deltaClass(d: number | null): string {
29
+ if (d === null || d === 0) return 'text-disabled';
30
+ return d > 0 ? 'text-success' : 'text-error';
31
+ }
32
+
33
+ export function deltaColor(d: number): string {
34
+ if (d > 0) return 'success';
35
+ if (d < 0) return 'error';
36
+ return 'grey';
37
+ }
38
+
39
+ export function fmtTime(iso: string | null | undefined): string {
40
+ if (!iso) return '—';
41
+ const d = new Date(iso);
42
+ return Number.isNaN(d.getTime()) ? iso : d.toLocaleString();
43
+ }
44
+
45
+ /** Time of day only: a session timeline reads as a within-sitting sequence. */
46
+ export function fmtClock(iso: string): string {
47
+ const d = new Date(iso);
48
+ return Number.isNaN(d.getTime()) ? iso : d.toLocaleTimeString(undefined, { hour12: false });
49
+ }
50
+
51
+ export function shortId(id: string, max = 28): string {
52
+ return id.length > max ? `…${id.slice(-(max - 2))}` : id;
53
+ }
54
+
55
+ /** Copy text, and remember which control asked, briefly, for a tick. */
56
+ export function useCopy(): {
57
+ copied: Ref<string | null>;
58
+ copy: (text: string, key: string) => Promise<void>;
59
+ } {
60
+ const copied = ref<string | null>(null);
61
+ let timer: ReturnType<typeof setTimeout> | null = null;
62
+ async function copy(text: string, key: string): Promise<void> {
63
+ try {
64
+ await navigator.clipboard.writeText(text);
65
+ copied.value = key;
66
+ if (timer) clearTimeout(timer);
67
+ timer = setTimeout(() => (copied.value = null), 1400);
68
+ } catch (e) {
69
+ console.warn('[admin] clipboard write failed', e);
70
+ }
71
+ }
72
+ return { copied, copy };
73
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `@vue-skuilder/common-ui/admin`: admin and diagnostics components.
3
+ *
4
+ * A separate entry (built by vite.config.admin.js) so learner-facing bundles
5
+ * don't carry it. Views here render a `LearnerDataset` from
6
+ * `@vue-skuilder/db/diagnostics`, whether it came from couch or a dump file,
7
+ * and take the course's `DiagnosticsInterpreters` for domain meaning.
8
+ *
9
+ * Built CSS: import '@vue-skuilder/common-ui/admin/style' where these render.
10
+ *
11
+ * Import shared common-ui pieces from '@vue-skuilder/common-ui', not
12
+ * '@cui/...', so the admin bundle doesn't duplicate them.
13
+ */
14
+
15
+ export {
16
+ useLearnerDataset,
17
+ downloadLearnerDump,
18
+ type LearnerCouchSource,
19
+ } from './composables/useLearnerDataset';
20
+
21
+ export { default as LearnerDatasetSource } from './components/LearnerDatasetSource.vue';
22
+ export { default as LearnerDiagnostics } from './components/LearnerDiagnostics.vue';
23
+ export { default as LearnerSessionList } from './components/LearnerSessionList.vue';
24
+ export { default as LearnerSessionDetail } from './components/LearnerSessionDetail.vue';
25
+ export { default as LearnerCardHistory } from './components/LearnerCardHistory.vue';
26
+ export { default as CardDossierDetail } from './components/CardDossierDetail.vue';
27
+ export { default as RunDetail } from './components/RunDetail.vue';
28
+ export { default as PipelineOverview } from './components/PipelineOverview.vue';