@vue-skuilder/common-ui 0.2.33 → 0.2.35
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/{MarkdownRenderer-kStoDRNE.mjs → MarkdownRenderer-U_iPiA2x.mjs} +219 -216
- package/dist/MarkdownRenderer-U_iPiA2x.mjs.map +1 -0
- package/dist/admin/admin.css +1 -1
- package/dist/admin/common-ui-admin.es.js +24754 -638
- package/dist/admin/common-ui-admin.es.js.map +1 -1
- package/dist/admin/components/EChart.vue.d.ts +14 -0
- package/dist/admin/components/EChart.vue.d.ts.map +1 -0
- package/dist/admin/components/LearnerDiagnostics.vue.d.ts +3 -3
- package/dist/admin/components/LearnerDiagnostics.vue.d.ts.map +1 -1
- package/dist/admin/components/LearnerTagElo.vue.d.ts +14 -0
- package/dist/admin/components/LearnerTagElo.vue.d.ts.map +1 -0
- package/dist/admin/index.d.ts +1 -0
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/common-ui.es.js +3 -3
- package/dist/common-ui.es.js.map +1 -1
- package/dist/common-ui.umd.js +2 -2
- package/dist/common-ui.umd.js.map +1 -1
- package/dist/components/CourseCardBrowser.vue.d.ts +3 -3
- package/dist/components/CourseInformation.vue.d.ts +3 -3
- package/dist/components/PaginatingToolbar.vue.d.ts +3 -3
- package/dist/components/SkMouseTrapToolTip.vue.d.ts +1 -1
- package/dist/composables/CompositionViewable.d.ts +2 -2
- package/dist/composables/CompositionViewable.d.ts.map +1 -1
- package/dist/composables/Displayable.d.ts +6 -1
- package/dist/composables/Displayable.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/admin/components/EChart.vue +59 -0
- package/src/admin/components/LearnerDiagnostics.vue +8 -4
- package/src/admin/components/LearnerTagElo.vue +563 -0
- package/src/admin/index.ts +1 -0
- package/src/composables/CompositionViewable.ts +11 -5
- package/src/composables/Displayable.ts +7 -1
- package/dist/MarkdownRenderer-kStoDRNE.mjs.map +0 -1
|
@@ -297,7 +297,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
297
297
|
readonly required: false;
|
|
298
298
|
readonly default: "";
|
|
299
299
|
};
|
|
300
|
-
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("
|
|
300
|
+
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("next" | "prev" | "first" | "last" | "set-page")[], "next" | "prev" | "first" | "last" | "set-page", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
301
301
|
readonly pages: {
|
|
302
302
|
readonly type: PropType<number[]>;
|
|
303
303
|
readonly required: true;
|
|
@@ -317,9 +317,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
317
317
|
readonly default: "";
|
|
318
318
|
};
|
|
319
319
|
}>> & Readonly<{
|
|
320
|
-
onFirst?: ((...args: any[]) => any) | undefined;
|
|
321
|
-
onPrev?: ((...args: any[]) => any) | undefined;
|
|
322
320
|
onNext?: ((...args: any[]) => any) | undefined;
|
|
321
|
+
onPrev?: ((...args: any[]) => any) | undefined;
|
|
322
|
+
onFirst?: ((...args: any[]) => any) | undefined;
|
|
323
323
|
onLast?: ((...args: any[]) => any) | undefined;
|
|
324
324
|
"onSet-page"?: ((...args: any[]) => any) | undefined;
|
|
325
325
|
}>, {
|
|
@@ -341,7 +341,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
341
341
|
readonly required: false;
|
|
342
342
|
readonly default: "";
|
|
343
343
|
};
|
|
344
|
-
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("
|
|
344
|
+
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("next" | "prev" | "first" | "last" | "set-page")[], "next" | "prev" | "first" | "last" | "set-page", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
345
345
|
readonly pages: {
|
|
346
346
|
readonly type: PropType<number[]>;
|
|
347
347
|
readonly required: true;
|
|
@@ -361,9 +361,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
361
361
|
readonly default: "";
|
|
362
362
|
};
|
|
363
363
|
}>> & Readonly<{
|
|
364
|
-
onFirst?: ((...args: any[]) => any) | undefined;
|
|
365
|
-
onPrev?: ((...args: any[]) => any) | undefined;
|
|
366
364
|
onNext?: ((...args: any[]) => any) | undefined;
|
|
365
|
+
onPrev?: ((...args: any[]) => any) | undefined;
|
|
366
|
+
onFirst?: ((...args: any[]) => any) | undefined;
|
|
367
367
|
onLast?: ((...args: any[]) => any) | undefined;
|
|
368
368
|
"onSet-page"?: ((...args: any[]) => any) | undefined;
|
|
369
369
|
}>, {
|
|
@@ -18,7 +18,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
18
18
|
readonly required: false;
|
|
19
19
|
readonly default: "";
|
|
20
20
|
};
|
|
21
|
-
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("
|
|
21
|
+
}>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("next" | "prev" | "first" | "last" | "set-page")[], "next" | "prev" | "first" | "last" | "set-page", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
22
22
|
readonly pages: {
|
|
23
23
|
readonly type: PropType<number[]>;
|
|
24
24
|
readonly required: true;
|
|
@@ -38,9 +38,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
38
38
|
readonly default: "";
|
|
39
39
|
};
|
|
40
40
|
}>> & Readonly<{
|
|
41
|
-
onFirst?: ((...args: any[]) => any) | undefined;
|
|
42
|
-
onPrev?: ((...args: any[]) => any) | undefined;
|
|
43
41
|
onNext?: ((...args: any[]) => any) | undefined;
|
|
42
|
+
onPrev?: ((...args: any[]) => any) | undefined;
|
|
43
|
+
onFirst?: ((...args: any[]) => any) | undefined;
|
|
44
44
|
onLast?: ((...args: any[]) => any) | undefined;
|
|
45
45
|
"onSet-page"?: ((...args: any[]) => any) | undefined;
|
|
46
46
|
}>, {
|
|
@@ -59,7 +59,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
59
59
|
showTooltip: boolean;
|
|
60
60
|
position: "left" | "top" | "bottom" | "right";
|
|
61
61
|
disabled: boolean;
|
|
62
|
-
highlightEffect: "none" | "
|
|
62
|
+
highlightEffect: "none" | "border" | "glow" | "scale";
|
|
63
63
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
64
64
|
export default _default;
|
|
65
65
|
//# sourceMappingURL=SkMouseTrapToolTip.vue.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { default as moment } from 'moment';
|
|
2
|
-
import {
|
|
2
|
+
import { Ref } from 'vue';
|
|
3
3
|
import { CardRecord, QuestionRecord } from '@vue-skuilder/db';
|
|
4
4
|
import { HotKey } from '../utils/SkldrMouseTrap';
|
|
5
5
|
import { Question } from './Displayable';
|
|
@@ -7,7 +7,7 @@ import { ViewData, Answer } from '@vue-skuilder/common';
|
|
|
7
7
|
export interface ViewableUtils {
|
|
8
8
|
startTime: Ref<moment.Moment>;
|
|
9
9
|
hotKeys: Ref<HotKey[]>;
|
|
10
|
-
timeSpent:
|
|
10
|
+
timeSpent: Readonly<Ref<number>>;
|
|
11
11
|
logger: ViewableLogger;
|
|
12
12
|
getURL: (item: string, dataShapeIndex?: number) => string;
|
|
13
13
|
emitResponse: (record: CardRecord) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositionViewable.d.ts","sourceRoot":"","sources":["../../src/composables/CompositionViewable.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"CompositionViewable.d.ts","sourceRoot":"","sources":["../../src/composables/CompositionViewable.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAkB,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvB,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,YAAY,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACvD,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,QAAQ;IACnD,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACtC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,KAAK,cAAc,CAAC;CACrG;AAGD,wBAAgB,WAAW,CACzB,KAAK,EAAE;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;CAAE,EAC3B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EACjD,aAAa,EAAE,MAAM,GACpB,aAAa,CA2Cf;AAGD,wBAAgB,eAAe,CAAC,CAAC,SAAS,QAAQ,EAChD,aAAa,EAAE,aAAa,GAE3B,iBAAiB,CAAC,CAAC,CAAC,CAsDtB;AAGD,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAO3F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DefineComponent, defineComponent } from 'vue';
|
|
2
|
-
import { DataShape, ViewData, Answer, Evaluation } from '@vue-skuilder/common';
|
|
2
|
+
import { DataShape, ViewData, Answer, Evaluation, SeedMeta } from '@vue-skuilder/common';
|
|
3
3
|
export type ViewComponent = DefineComponent<unknown, unknown, unknown> | ReturnType<typeof defineComponent>;
|
|
4
4
|
export declare function isDefineComponent(v: ViewComponent): v is DefineComponent<unknown, unknown, unknown>;
|
|
5
5
|
export declare abstract class Displayable {
|
|
@@ -14,6 +14,11 @@ export declare abstract class Displayable {
|
|
|
14
14
|
* data, and not want any user input.
|
|
15
15
|
*/
|
|
16
16
|
static acceptsUserData: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Optional tags and starting ELO for the cards seeded from one seedData
|
|
19
|
+
* item. Without it, seeded cards start untagged at ~1000.
|
|
20
|
+
*/
|
|
21
|
+
static seedMeta?: (item: unknown) => SeedMeta;
|
|
17
22
|
/**
|
|
18
23
|
*
|
|
19
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Displayable.d.ts","sourceRoot":"","sources":["../../src/composables/Displayable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Displayable.d.ts","sourceRoot":"","sources":["../../src/composables/Displayable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGpG,MAAM,MAAM,aAAa,GACrB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAC1C,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAEvC,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,aAAa,GACf,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAEjD;AAOD,8BAAsB,WAAW;IAC/B,OAAc,UAAU,EAAE,SAAS,EAAE,CAAC;IAEtC,OAAc,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,OAAc,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC;;;;;;OAMG;IACH,OAAc,eAAe,EAAE,OAAO,CAAQ;IAE9C;;;OAGG;IACH,OAAc,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,QAAQ,CAAC;IAErD;;OAEG;gBACS,QAAQ,EAAE,QAAQ,EAAE;aAShB,UAAU,IAAI,SAAS,EAAE;aACzB,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC;CAC9C;AAeD,8BAAsB,QAAS,SAAQ,WAAW;IAChD;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IACrD;;;;;;;OAOG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAmBnE;;;;;OAKG;IACI,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;CA8B/D"}
|
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.35",
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"main": "./dist/common-ui.umd.js",
|
|
9
9
|
"module": "./dist/common-ui.es.js",
|
|
@@ -47,8 +47,9 @@
|
|
|
47
47
|
"@highlightjs/vue-plugin": "^2.1.2",
|
|
48
48
|
"@mdi/font": "^7.3.67",
|
|
49
49
|
"@vojtechlanka/vue-tags-input": "^3",
|
|
50
|
-
"@vue-skuilder/common": "0.2.
|
|
51
|
-
"@vue-skuilder/db": "0.2.
|
|
50
|
+
"@vue-skuilder/common": "0.2.35",
|
|
51
|
+
"@vue-skuilder/db": "0.2.35",
|
|
52
|
+
"echarts": "6.1.0",
|
|
52
53
|
"highlight.js": "^11.0.1",
|
|
53
54
|
"marked": "^15.0.6",
|
|
54
55
|
"moment": "^2.29.4",
|
|
@@ -84,5 +85,5 @@
|
|
|
84
85
|
"vite-plugin-dts": "^4.5.3",
|
|
85
86
|
"vitest": "^4.1.0"
|
|
86
87
|
},
|
|
87
|
-
"stableVersion": "0.2.
|
|
88
|
+
"stableVersion": "0.2.35"
|
|
88
89
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div ref="el" :style="{ height: `${height}px`, width: '100%' }" />
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script setup lang="ts">
|
|
6
|
+
import { onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';
|
|
7
|
+
import { init, use, type ECElementEvent, type EChartsCoreOption, type EChartsType } from 'echarts/core';
|
|
8
|
+
import { LineChart, ScatterChart } from 'echarts/charts';
|
|
9
|
+
import {
|
|
10
|
+
DataZoomComponent,
|
|
11
|
+
GridComponent,
|
|
12
|
+
LegendComponent,
|
|
13
|
+
MarkLineComponent,
|
|
14
|
+
TooltipComponent,
|
|
15
|
+
} from 'echarts/components';
|
|
16
|
+
import { CanvasRenderer } from 'echarts/renderers';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* An ECharts canvas for the admin views. Registers only what they draw, so
|
|
20
|
+
* the admin bundle carries a fraction of ECharts. Options are replaced
|
|
21
|
+
* whole on change (`notMerge`): callers compute the full option.
|
|
22
|
+
*/
|
|
23
|
+
use([
|
|
24
|
+
LineChart,
|
|
25
|
+
ScatterChart,
|
|
26
|
+
DataZoomComponent,
|
|
27
|
+
GridComponent,
|
|
28
|
+
LegendComponent,
|
|
29
|
+
MarkLineComponent,
|
|
30
|
+
TooltipComponent,
|
|
31
|
+
CanvasRenderer,
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
const props = defineProps<{ option: EChartsCoreOption; height: number }>();
|
|
35
|
+
const emit = defineEmits<{ click: [event: ECElementEvent] }>();
|
|
36
|
+
|
|
37
|
+
const el = ref<HTMLElement | null>(null);
|
|
38
|
+
const chart = shallowRef<EChartsType | null>(null);
|
|
39
|
+
let resize: ResizeObserver | null = null;
|
|
40
|
+
|
|
41
|
+
onMounted(() => {
|
|
42
|
+
if (!el.value) return;
|
|
43
|
+
chart.value = init(el.value);
|
|
44
|
+
chart.value.setOption(props.option, { notMerge: true });
|
|
45
|
+
chart.value.on('click', (e) => emit('click', e as ECElementEvent));
|
|
46
|
+
resize = new ResizeObserver(() => chart.value?.resize());
|
|
47
|
+
resize.observe(el.value);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
watch(
|
|
51
|
+
() => props.option,
|
|
52
|
+
(option) => chart.value?.setOption(option, { notMerge: true })
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
onBeforeUnmount(() => {
|
|
56
|
+
resize?.disconnect();
|
|
57
|
+
chart.value?.dispose();
|
|
58
|
+
});
|
|
59
|
+
</script>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
<v-tab value="sessions">Sessions ({{ dataset.sessions.length }})</v-tab>
|
|
5
5
|
<v-tab value="cards">Cards ({{ dataset.cardHistories.length }})</v-tab>
|
|
6
6
|
<v-tab v-if="dataset.strategies" value="pipeline">Pipeline</v-tab>
|
|
7
|
+
<v-tab value="elo">ELO</v-tab>
|
|
7
8
|
</v-tabs>
|
|
8
9
|
|
|
9
10
|
<template v-if="tab === 'sessions'">
|
|
@@ -40,6 +41,8 @@
|
|
|
40
41
|
:stats="pipelineStats"
|
|
41
42
|
:stats-label="dataset.username"
|
|
42
43
|
/>
|
|
44
|
+
|
|
45
|
+
<learner-tag-elo v-else-if="tab === 'elo'" :dataset="dataset" :interpreters="interpreters" />
|
|
43
46
|
</div>
|
|
44
47
|
</template>
|
|
45
48
|
|
|
@@ -49,20 +52,21 @@ import { pipelineRunStats, type DiagnosticsInterpreters, type LearnerDataset } f
|
|
|
49
52
|
import LearnerCardHistory from './LearnerCardHistory.vue';
|
|
50
53
|
import LearnerSessionDetail from './LearnerSessionDetail.vue';
|
|
51
54
|
import LearnerSessionList from './LearnerSessionList.vue';
|
|
55
|
+
import LearnerTagElo from './LearnerTagElo.vue';
|
|
52
56
|
import PipelineOverview from './PipelineOverview.vue';
|
|
53
57
|
|
|
54
58
|
/**
|
|
55
|
-
* One learner: sessions (list, then a session's detail), card history,
|
|
59
|
+
* One learner: sessions (list, then a session's detail), card history,
|
|
56
60
|
* when the dataset carries the course's strategy docs, the pipeline with this
|
|
57
|
-
* learner's run stats. Session timelines link into card history. Navigation is internal;
|
|
58
|
-
* hosts that want URLs can compose the
|
|
61
|
+
* learner's run stats, and per-tag ELO. Session timelines link into card history. Navigation is internal;
|
|
62
|
+
* hosts that want URLs can compose the views themselves.
|
|
59
63
|
*/
|
|
60
64
|
const props = defineProps<{
|
|
61
65
|
dataset: LearnerDataset;
|
|
62
66
|
interpreters?: DiagnosticsInterpreters;
|
|
63
67
|
}>();
|
|
64
68
|
|
|
65
|
-
const tab = ref<'sessions' | 'cards' | 'pipeline'>('sessions');
|
|
69
|
+
const tab = ref<'sessions' | 'cards' | 'pipeline' | 'elo'>('sessions');
|
|
66
70
|
const sessionId = ref<string | null>(null);
|
|
67
71
|
const focusCard = ref<string | undefined>(undefined);
|
|
68
72
|
const pipelineStats = computed(() => pipelineRunStats(props.dataset));
|