@ovalbee/reportifact 0.0.1

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 (116) hide show
  1. package/README.md +841 -0
  2. package/dist/Chart.vue_vue_type_style_index_0_lang-B4novMFC.cjs +1 -0
  3. package/dist/Chart.vue_vue_type_style_index_0_lang-BYILFTfl.js +5895 -0
  4. package/dist/ImageGallery.vue_vue_type_style_index_0_lang-BB4dG0CB.cjs +1 -0
  5. package/dist/ImageGallery.vue_vue_type_style_index_0_lang-DPY6mSdA.js +191 -0
  6. package/dist/MetricCallout.vue_vue_type_style_index_0_lang-BZbc-Wkf.js +49 -0
  7. package/dist/MetricCallout.vue_vue_type_style_index_0_lang-WpuALh8Z.cjs +1 -0
  8. package/dist/MetricCards.vue_vue_type_style_index_0_lang-CDPSu7no.cjs +1 -0
  9. package/dist/MetricCards.vue_vue_type_style_index_0_lang-CfxCCXmB.js +33 -0
  10. package/dist/MetricsTable.vue_vue_type_style_index_0_lang-BzrxoJW4.cjs +1 -0
  11. package/dist/MetricsTable.vue_vue_type_style_index_0_lang-CO9HvYfr.js +132 -0
  12. package/dist/Reportifact.vue.d.ts +40 -0
  13. package/dist/ReportifactWidgetHost-A73gQ3bT.cjs +1 -0
  14. package/dist/ReportifactWidgetHost-BjKBwCWI.js +17 -0
  15. package/dist/Timeline.vue_vue_type_style_index_0_lang-BIyC7N9b.cjs +2 -0
  16. package/dist/Timeline.vue_vue_type_style_index_0_lang-BnrgKBMh.js +2598 -0
  17. package/dist/WidgetWrapper.vue_vue_type_style_index_0_lang-BQQ4Vv5j.cjs +1 -0
  18. package/dist/WidgetWrapper.vue_vue_type_style_index_0_lang-D-oXqmI2.js +59 -0
  19. package/dist/components/TableOfContents.vue.d.ts +15 -0
  20. package/dist/composables/useDelayedLoading.d.ts +6 -0
  21. package/dist/composables/useFetch.d.ts +13 -0
  22. package/dist/customWidgets.d.ts +18 -0
  23. package/dist/entries/chart.d.ts +3 -0
  24. package/dist/entries/contracts.d.ts +3 -0
  25. package/dist/entries/figure.d.ts +1 -0
  26. package/dist/entries/host.d.ts +1 -0
  27. package/dist/entries/imageGallery.d.ts +3 -0
  28. package/dist/entries/metricCallout.d.ts +2 -0
  29. package/dist/entries/metricCards.d.ts +2 -0
  30. package/dist/entries/metricsTable.d.ts +2 -0
  31. package/dist/entries/timeline.d.ts +2 -0
  32. package/dist/index-DFz2A8yJ.js +21229 -0
  33. package/dist/index-DmTzvbys.cjs +47 -0
  34. package/dist/index.d.ts +6 -0
  35. package/dist/markdownTable-B5207r3E.js +32 -0
  36. package/dist/markdownTable-Cbn1Du3L.cjs +2 -0
  37. package/dist/mediaResolver.d.ts +18 -0
  38. package/dist/middleware.cjs +1 -0
  39. package/dist/middleware.d.ts +21 -0
  40. package/dist/middleware.js +177 -0
  41. package/dist/portable/ReportifactFigure.vue.d.ts +36 -0
  42. package/dist/portable/ReportifactWidgetHost.vue.d.ts +17 -0
  43. package/dist/portable/contracts.d.ts +54 -0
  44. package/dist/reportifact.cjs +67 -0
  45. package/dist/reportifact.d.ts +2 -0
  46. package/dist/reportifact.js +5272 -0
  47. package/dist/style.css +13 -0
  48. package/dist/useFetch-BfOAq-Kg.cjs +1 -0
  49. package/dist/useFetch-CHQm_TmB.js +35 -0
  50. package/dist/utils/createMarked.d.ts +7 -0
  51. package/dist/utils/parseIndexMd.d.ts +29 -0
  52. package/dist/utils/tfeventsParser.cjs +1 -0
  53. package/dist/utils/tfeventsParser.d.ts +21 -0
  54. package/dist/utils/tfeventsParser.js +336 -0
  55. package/dist/widgets/Card.vue.d.ts +6 -0
  56. package/dist/widgets/Chart.vue.d.ts +26 -0
  57. package/dist/widgets/HelpTooltip.vue.d.ts +5 -0
  58. package/dist/widgets/ImageGallery.vue.d.ts +26 -0
  59. package/dist/widgets/Markdown.vue.d.ts +8 -0
  60. package/dist/widgets/MetricCallout.vue.d.ts +19 -0
  61. package/dist/widgets/MetricCards.vue.d.ts +13 -0
  62. package/dist/widgets/MetricTable.vue.d.ts +6 -0
  63. package/dist/widgets/MetricsTable.vue.d.ts +17 -0
  64. package/dist/widgets/ModelClassComparison.vue.d.ts +7 -0
  65. package/dist/widgets/ModelComparisonGallery.vue.d.ts +15 -0
  66. package/dist/widgets/Notice.vue.d.ts +6 -0
  67. package/dist/widgets/ReportifactWidget.vue.d.ts +23 -0
  68. package/dist/widgets/Scope.vue.d.ts +8 -0
  69. package/dist/widgets/Table.vue.d.ts +18 -0
  70. package/dist/widgets/Tensorboard.vue.d.ts +13 -0
  71. package/dist/widgets/Timeline.vue.d.ts +21 -0
  72. package/dist/widgets/WidgetWrapper.vue.d.ts +28 -0
  73. package/dist/widgets/chart-config/barGradient.d.ts +2 -0
  74. package/dist/widgets/chart-config/barGrouped.d.ts +2 -0
  75. package/dist/widgets/chart-config/barNormalized.d.ts +2 -0
  76. package/dist/widgets/chart-config/barStacked.d.ts +2 -0
  77. package/dist/widgets/chart-config/customGauge.d.ts +2 -0
  78. package/dist/widgets/chart-config/gaugeGrade.d.ts +2 -0
  79. package/dist/widgets/chart-config/heatmap.d.ts +2 -0
  80. package/dist/widgets/chart-config/index.d.ts +4 -0
  81. package/dist/widgets/chart-config/line.d.ts +2 -0
  82. package/dist/widgets/chart-config/pie.d.ts +2 -0
  83. package/dist/widgets/chart-config/radar.d.ts +2 -0
  84. package/dist/widgets/chart-config/shared.d.ts +15 -0
  85. package/dist/widgets/chart-config/types.d.ts +96 -0
  86. package/dist/widgets/chart.cjs +1 -0
  87. package/dist/widgets/chart.d.ts +6 -0
  88. package/dist/widgets/chart.js +5 -0
  89. package/dist/widgets/chartSizing.d.ts +1 -0
  90. package/dist/widgets/contracts.cjs +1 -0
  91. package/dist/widgets/contracts.d.ts +2 -0
  92. package/dist/widgets/contracts.js +1 -0
  93. package/dist/widgets/figure.cjs +1 -0
  94. package/dist/widgets/figure.d.ts +6 -0
  95. package/dist/widgets/figure.js +84 -0
  96. package/dist/widgets/host.cjs +1 -0
  97. package/dist/widgets/host.d.ts +6 -0
  98. package/dist/widgets/host.js +5 -0
  99. package/dist/widgets/image-gallery.cjs +1 -0
  100. package/dist/widgets/image-gallery.d.ts +6 -0
  101. package/dist/widgets/image-gallery.js +5 -0
  102. package/dist/widgets/markdownTable.d.ts +4 -0
  103. package/dist/widgets/metric-callout.cjs +1 -0
  104. package/dist/widgets/metric-callout.d.ts +6 -0
  105. package/dist/widgets/metric-callout.js +5 -0
  106. package/dist/widgets/metric-cards.cjs +1 -0
  107. package/dist/widgets/metric-cards.d.ts +6 -0
  108. package/dist/widgets/metric-cards.js +5 -0
  109. package/dist/widgets/metrics-table.cjs +1 -0
  110. package/dist/widgets/metrics-table.d.ts +6 -0
  111. package/dist/widgets/metrics-table.js +5 -0
  112. package/dist/widgets/scope.d.ts +77 -0
  113. package/dist/widgets/timeline.cjs +1 -0
  114. package/dist/widgets/timeline.d.ts +6 -0
  115. package/dist/widgets/timeline.js +5 -0
  116. package/package.json +125 -0
@@ -0,0 +1 @@
1
+ "use strict";const a=require("vue"),$=require("./useFetch-BfOAq-Kg.cjs"),x=require("./WidgetWrapper.vue_vue_type_style_index_0_lang-BQQ4Vv5j.cjs"),G={class:"reportifact-image-gallery"},D={class:"reportifact-image-gallery-frame"},j=["src"],P=["src"],W={key:2,class:"reportifact-image-gallery-empty"},m=4,H=a.defineComponent({__name:"ImageGallery",props:{widget:{default:void 0},url:{default:void 0},src:{default:void 0},data:{default:void 0},options:{default:void 0},mediaResolver:{type:Function,default:void 0}},emits:["row-click"],setup(_,{expose:h,emit:S}){const r=_,l=a.ref([]),g=a.ref([]),B=a.computed(()=>r.data===void 0?r.src??r.url??"":""),n=a.computed(()=>{var e;return r.options??((e=r.widget)==null?void 0:e.options)??{}}),E=a.computed(()=>g.value.slice(0,m)),N=a.computed(()=>l.value.length>m&&l.value.some(e=>e.asset)),d=a.computed(()=>String(n.value.fit??"contain")==="cover"?"cover":"contain"),C=a.computed(()=>String(n.value.aspectRatio??"4 / 3")),v=a.computed(()=>A(n.value.overlayOpacity,.7)),y=a.computed(()=>n.value.drawTags!==!1&&n.value.drawTags!=="false"),{loading:R,error:V,fetchData:U}=$.useFetch(B,{async onSuccess(e){await u(await e.json())}}),b=a.computed(()=>r.data===void 0&&R.value),I=a.computed(()=>r.data!==void 0?null:r.src||r.url?V.value:"Resource not found in asset");async function u(e){l.value=F(e),await p()}a.watch(()=>r.data,e=>{e!==void 0&&u(e)},{immediate:!0,deep:!0});const O=S;a.watch(()=>[r.mediaResolver,v.value],()=>{p()});async function p(){const e=l.value.slice(0,m);g.value=await Promise.all(e.map(z))}async function z(e,t){const o=await f({role:"image",item:e,index:t,src:e.imageSrc,asset:e.asset}),s=await f({role:"overlay",item:e,index:t,src:e.overlaySrc,annotation:e.annotation,imageAsset:e.asset,imageSrc:e.imageSrc,imageUrl:o,drawTags:y.value});return{key:`${t}:${e.asset??e.imageSrc??""}:${e.annotation??e.overlaySrc??""}`,imageUrl:o,overlayUrl:s,overlayOpacity:v.value}}async function f(e){return!e.src&&!e.asset&&!e.annotation?null:r.mediaResolver?T(await r.mediaResolver({role:e.role,index:e.index,item:e.item,src:e.src,asset:e.asset,annotation:e.annotation,imageAsset:e.imageAsset,imageSrc:e.imageSrc,imageUrl:e.imageUrl,drawTags:e.drawTags,defaultResolve:t=>t})):e.src??null}function T(e){return typeof e=="string"?e||null:e&&typeof e=="object"?e.url??null:null}function A(e,t){const o=typeof e=="number"?e:Number(e);return Number.isFinite(o)?Math.max(0,Math.min(1,o)):t}function F(e){const t=i(e.assets),o=i(e.annotations),s=i(e.images),w=i(e.overlays),L=Math.max(t.length,o.length,s.length,w.length);return Array.from({length:L},(J,c)=>({imageSrc:s[c],overlaySrc:w[c],asset:t[c],annotation:o[c]}))}function i(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t:""):[]}function M(){const e=l.value.filter(t=>k(t.asset)).map(t=>({asset:t.asset,layers:k(t.annotation)?[{annotation:t.annotation}]:[]}));e.length&&O("row-click",{action:"asset-preview",title:"Images",assets:e,layout:"collection",click:"preview",grid:4,drawTags:y.value})}function k(e){return typeof e=="string"&&e.length>0}return h({refresh(){r.data!==void 0?u(r.data):U()}}),(e,t)=>(a.openBlock(),a.createBlock(x._sfc_main,{loading:b.value,error:I.value},{skeleton:a.withCtx(()=>[a.createElementVNode("div",G,[(a.openBlock(),a.createElementBlock(a.Fragment,null,a.renderList(4,o=>a.createElementVNode("div",{key:o,class:"reportifact-image-gallery-tile"},[...t[0]||(t[0]=[a.createElementVNode("div",{class:"reportifact-skeleton-line reportifact-image-gallery-skeleton"},null,-1)])])),64))])]),default:a.withCtx(()=>[a.createElementVNode("div",null,[a.createElementVNode("div",{class:"reportifact-image-gallery",style:a.normalizeStyle({"--reportifact-gallery-aspect-ratio":C.value})},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(E.value,o=>(a.openBlock(),a.createElementBlock("article",{key:o.key,class:"reportifact-image-gallery-tile"},[a.createElementVNode("div",D,[o.imageUrl?(a.openBlock(),a.createElementBlock("img",{key:0,class:a.normalizeClass(["reportifact-image-gallery-image",`reportifact-image-gallery-image--${d.value}`]),src:o.imageUrl,alt:"Gallery image",loading:"lazy"},null,10,j)):a.createCommentVNode("",!0),o.overlayUrl?(a.openBlock(),a.createElementBlock("img",{key:1,class:a.normalizeClass(["reportifact-image-gallery-overlay",`reportifact-image-gallery-image--${d.value}`]),src:o.overlayUrl,alt:"Gallery overlay",style:a.normalizeStyle({opacity:o.overlayOpacity}),loading:"lazy"},null,14,P)):a.createCommentVNode("",!0),o.imageUrl?a.createCommentVNode("",!0):(a.openBlock(),a.createElementBlock("div",W," Media unavailable "))])]))),128))],4),N.value?(a.openBlock(),a.createElementBlock("button",{key:0,type:"button",class:"reportifact-image-gallery-more",onClick:M}," Show all "+a.toDisplayString(l.value.length)+" images ",1)):a.createCommentVNode("",!0)])]),_:1},8,["loading","error"]))}});exports._sfc_main=H;
@@ -0,0 +1,191 @@
1
+ import { defineComponent as X, ref as U, computed as o, watch as b, createBlock as Y, openBlock as l, withCtx as I, createElementVNode as s, createElementBlock as n, createCommentVNode as m, normalizeStyle as O, Fragment as T, renderList as A, normalizeClass as M, toDisplayString as Z } from "vue";
2
+ import { u as q } from "./useFetch-CHQm_TmB.js";
3
+ import { _ as aa } from "./WidgetWrapper.vue_vue_type_style_index_0_lang-D-oXqmI2.js";
4
+ const ea = { class: "reportifact-image-gallery" }, ta = { class: "reportifact-image-gallery-frame" }, ra = ["src"], oa = ["src"], la = {
5
+ key: 2,
6
+ class: "reportifact-image-gallery-empty"
7
+ }, d = 4, ga = /* @__PURE__ */ X({
8
+ __name: "ImageGallery",
9
+ props: {
10
+ widget: { default: void 0 },
11
+ url: { default: void 0 },
12
+ src: { default: void 0 },
13
+ data: { default: void 0 },
14
+ options: { default: void 0 },
15
+ mediaResolver: { type: Function, default: void 0 }
16
+ },
17
+ emits: ["row-click"],
18
+ setup($, { expose: z, emit: C }) {
19
+ const r = $, i = U([]), f = U([]), F = o(() => r.data === void 0 ? r.src ?? r.url ?? "" : ""), c = o(() => {
20
+ var a;
21
+ return r.options ?? ((a = r.widget) == null ? void 0 : a.options) ?? {};
22
+ }), G = o(() => f.value.slice(0, d)), L = o(
23
+ () => i.value.length > d && i.value.some((a) => a.asset)
24
+ ), p = o(() => String(c.value.fit ?? "contain") === "cover" ? "cover" : "contain"), N = o(() => String(c.value.aspectRatio ?? "4 / 3")), w = o(() => J(c.value.overlayOpacity, 0.7)), h = o(
25
+ () => c.value.drawTags !== !1 && c.value.drawTags !== "false"
26
+ ), { loading: x, error: B, fetchData: D } = q(F, {
27
+ async onSuccess(a) {
28
+ await y(await a.json());
29
+ }
30
+ }), E = o(() => r.data === void 0 && x.value), j = o(() => r.data !== void 0 ? null : r.src || r.url ? B.value : "Resource not found in asset");
31
+ async function y(a) {
32
+ i.value = K(a), await _();
33
+ }
34
+ b(
35
+ () => r.data,
36
+ (a) => {
37
+ a !== void 0 && y(a);
38
+ },
39
+ { immediate: !0, deep: !0 }
40
+ );
41
+ const P = C;
42
+ b(
43
+ () => [r.mediaResolver, w.value],
44
+ () => {
45
+ _();
46
+ }
47
+ );
48
+ async function _() {
49
+ const a = i.value.slice(0, d);
50
+ f.value = await Promise.all(a.map(V));
51
+ }
52
+ async function V(a, e) {
53
+ const t = await k({
54
+ role: "image",
55
+ item: a,
56
+ index: e,
57
+ src: a.imageSrc,
58
+ asset: a.asset
59
+ }), u = await k({
60
+ role: "overlay",
61
+ item: a,
62
+ index: e,
63
+ src: a.overlaySrc,
64
+ annotation: a.annotation,
65
+ imageAsset: a.asset,
66
+ imageSrc: a.imageSrc,
67
+ imageUrl: t,
68
+ drawTags: h.value
69
+ });
70
+ return {
71
+ key: `${e}:${a.asset ?? a.imageSrc ?? ""}:${a.annotation ?? a.overlaySrc ?? ""}`,
72
+ imageUrl: t,
73
+ overlayUrl: u,
74
+ overlayOpacity: w.value
75
+ };
76
+ }
77
+ async function k(a) {
78
+ return !a.src && !a.asset && !a.annotation ? null : r.mediaResolver ? H(await r.mediaResolver({
79
+ role: a.role,
80
+ index: a.index,
81
+ item: a.item,
82
+ src: a.src,
83
+ asset: a.asset,
84
+ annotation: a.annotation,
85
+ imageAsset: a.imageAsset,
86
+ imageSrc: a.imageSrc,
87
+ imageUrl: a.imageUrl,
88
+ drawTags: a.drawTags,
89
+ defaultResolve: (e) => e
90
+ })) : a.src ?? null;
91
+ }
92
+ function H(a) {
93
+ return typeof a == "string" ? a || null : a && typeof a == "object" ? a.url ?? null : null;
94
+ }
95
+ function J(a, e) {
96
+ const t = typeof a == "number" ? a : Number(a);
97
+ return Number.isFinite(t) ? Math.max(0, Math.min(1, t)) : e;
98
+ }
99
+ function K(a) {
100
+ const e = g(a.assets), t = g(a.annotations), u = g(a.images), R = g(a.overlays), W = Math.max(e.length, t.length, u.length, R.length);
101
+ return Array.from({ length: W }, (na, v) => ({
102
+ imageSrc: u[v],
103
+ overlaySrc: R[v],
104
+ asset: e[v],
105
+ annotation: t[v]
106
+ }));
107
+ }
108
+ function g(a) {
109
+ return Array.isArray(a) ? a.map((e) => typeof e == "string" ? e : "") : [];
110
+ }
111
+ function Q() {
112
+ const a = i.value.filter((e) => S(e.asset)).map((e) => ({
113
+ asset: e.asset,
114
+ layers: S(e.annotation) ? [{ annotation: e.annotation }] : []
115
+ }));
116
+ a.length && P("row-click", {
117
+ action: "asset-preview",
118
+ title: "Images",
119
+ assets: a,
120
+ layout: "collection",
121
+ click: "preview",
122
+ grid: 4,
123
+ drawTags: h.value
124
+ });
125
+ }
126
+ function S(a) {
127
+ return typeof a == "string" && a.length > 0;
128
+ }
129
+ return z({
130
+ refresh() {
131
+ r.data !== void 0 ? y(r.data) : D();
132
+ }
133
+ }), (a, e) => (l(), Y(aa, {
134
+ loading: E.value,
135
+ error: j.value
136
+ }, {
137
+ skeleton: I(() => [
138
+ s("div", ea, [
139
+ (l(), n(T, null, A(4, (t) => s("div", {
140
+ key: t,
141
+ class: "reportifact-image-gallery-tile"
142
+ }, [...e[0] || (e[0] = [
143
+ s("div", { class: "reportifact-skeleton-line reportifact-image-gallery-skeleton" }, null, -1)
144
+ ])])), 64))
145
+ ])
146
+ ]),
147
+ default: I(() => [
148
+ s("div", null, [
149
+ s("div", {
150
+ class: "reportifact-image-gallery",
151
+ style: O({ "--reportifact-gallery-aspect-ratio": N.value })
152
+ }, [
153
+ (l(!0), n(T, null, A(G.value, (t) => (l(), n("article", {
154
+ key: t.key,
155
+ class: "reportifact-image-gallery-tile"
156
+ }, [
157
+ s("div", ta, [
158
+ t.imageUrl ? (l(), n("img", {
159
+ key: 0,
160
+ class: M(["reportifact-image-gallery-image", `reportifact-image-gallery-image--${p.value}`]),
161
+ src: t.imageUrl,
162
+ alt: "Gallery image",
163
+ loading: "lazy"
164
+ }, null, 10, ra)) : m("", !0),
165
+ t.overlayUrl ? (l(), n("img", {
166
+ key: 1,
167
+ class: M(["reportifact-image-gallery-overlay", `reportifact-image-gallery-image--${p.value}`]),
168
+ src: t.overlayUrl,
169
+ alt: "Gallery overlay",
170
+ style: O({ opacity: t.overlayOpacity }),
171
+ loading: "lazy"
172
+ }, null, 14, oa)) : m("", !0),
173
+ t.imageUrl ? m("", !0) : (l(), n("div", la, " Media unavailable "))
174
+ ])
175
+ ]))), 128))
176
+ ], 4),
177
+ L.value ? (l(), n("button", {
178
+ key: 0,
179
+ type: "button",
180
+ class: "reportifact-image-gallery-more",
181
+ onClick: Q
182
+ }, " Show all " + Z(i.value.length) + " images ", 1)) : m("", !0)
183
+ ])
184
+ ]),
185
+ _: 1
186
+ }, 8, ["loading", "error"]));
187
+ }
188
+ });
189
+ export {
190
+ ga as _
191
+ };
@@ -0,0 +1,49 @@
1
+ import { defineComponent as v, computed as a, createElementBlock as s, openBlock as n, createElementVNode as l, createCommentVNode as f, toDisplayString as i, normalizeClass as _ } from "vue";
2
+ import { m as h } from "./markdownTable-B5207r3E.js";
3
+ const g = { class: "reportifact-metric-callout" }, b = { class: "reportifact-metric-callout-header" }, w = { class: "reportifact-metric-callout-label" }, k = { class: "reportifact-metric-callout-description" }, y = ["innerHTML"], S = /* @__PURE__ */ v({
4
+ __name: "MetricCallout",
5
+ props: {
6
+ widget: { default: void 0 },
7
+ data: { default: void 0 },
8
+ label: { default: void 0 },
9
+ value: { default: void 0 },
10
+ description: { default: void 0 },
11
+ html: { default: void 0 }
12
+ },
13
+ setup(d) {
14
+ const t = d, u = a(() => {
15
+ var e, o;
16
+ return String(t.label ?? ((e = t.data) == null ? void 0 : e.label) ?? ((o = t.widget) == null ? void 0 : o.options.label) ?? "Metric");
17
+ }), c = a(() => {
18
+ var e, o;
19
+ return String(t.value ?? ((e = t.data) == null ? void 0 : e.value) ?? ((o = t.widget) == null ? void 0 : o.options.value) ?? "");
20
+ }), p = a(() => {
21
+ var e, o;
22
+ return String(
23
+ t.description ?? ((e = t.data) == null ? void 0 : e.description) ?? ((o = t.widget) == null ? void 0 : o.options.description) ?? ""
24
+ );
25
+ }), r = a(() => {
26
+ var e, o;
27
+ return t.html ?? ((e = t.data) == null ? void 0 : e.html) ?? ((o = t.widget) == null ? void 0 : o.html) ?? "";
28
+ }), m = a(() => h(c.value));
29
+ return (e, o) => (n(), s("section", g, [
30
+ l("header", b, [
31
+ l("div", null, [
32
+ l("div", w, i(u.value), 1),
33
+ l("strong", {
34
+ class: _(["reportifact-metric-callout-value", `reportifact-metric-callout-value--${m.value}`])
35
+ }, i(c.value), 3)
36
+ ]),
37
+ l("div", k, i(p.value), 1)
38
+ ]),
39
+ r.value ? (n(), s("div", {
40
+ key: 0,
41
+ class: "reportifact-metric-callout-body reportifact-markdown",
42
+ innerHTML: r.value
43
+ }, null, 8, y)) : f("", !0)
44
+ ]));
45
+ }
46
+ });
47
+ export {
48
+ S as _
49
+ };
@@ -0,0 +1 @@
1
+ "use strict";const e=require("vue"),s=require("./markdownTable-Cbn1Du3L.cjs"),u={class:"reportifact-metric-callout"},m={class:"reportifact-metric-callout-header"},p={class:"reportifact-metric-callout-label"},v={class:"reportifact-metric-callout-description"},_=["innerHTML"],f=e.defineComponent({__name:"MetricCallout",props:{widget:{default:void 0},data:{default:void 0},label:{default:void 0},value:{default:void 0},description:{default:void 0},html:{default:void 0}},setup(i){const t=i,r=e.computed(()=>{var o,a;return String(t.label??((o=t.data)==null?void 0:o.label)??((a=t.widget)==null?void 0:a.options.label)??"Metric")}),l=e.computed(()=>{var o,a;return String(t.value??((o=t.data)==null?void 0:o.value)??((a=t.widget)==null?void 0:a.options.value)??"")}),n=e.computed(()=>{var o,a;return String(t.description??((o=t.data)==null?void 0:o.description)??((a=t.widget)==null?void 0:a.options.description)??"")}),c=e.computed(()=>{var o,a;return t.html??((o=t.data)==null?void 0:o.html)??((a=t.widget)==null?void 0:a.html)??""}),d=e.computed(()=>s.metricTone(l.value));return(o,a)=>(e.openBlock(),e.createElementBlock("section",u,[e.createElementVNode("header",m,[e.createElementVNode("div",null,[e.createElementVNode("div",p,e.toDisplayString(r.value),1),e.createElementVNode("strong",{class:e.normalizeClass(["reportifact-metric-callout-value",`reportifact-metric-callout-value--${d.value}`])},e.toDisplayString(l.value),3)]),e.createElementVNode("div",v,e.toDisplayString(n.value),1)]),c.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"reportifact-metric-callout-body reportifact-markdown",innerHTML:c.value},null,8,_)):e.createCommentVNode("",!0)]))}});exports._sfc_main=f;
@@ -0,0 +1 @@
1
+ "use strict";const e=require("vue"),a=require("./markdownTable-Cbn1Du3L.cjs"),i={class:"reportifact-metric-cards"},d={class:"reportifact-metric-card-label"},p={class:"reportifact-metric-card-value"},m={class:"reportifact-metric-card-description"},u=e.defineComponent({__name:"MetricCards",props:{widget:{default:void 0},content:{default:void 0},data:{default:void 0}},setup(n){const c=n,o=e.computed(()=>{var r;return c.data??a.parseMarkdownTable(c.content??((r=c.widget)==null?void 0:r.content)??"")}),l=a.metricTone,s=a.metricPercent;return(r,f)=>(e.openBlock(),e.createElementBlock("div",i,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,t=>(e.openBlock(),e.createElementBlock("article",{key:t.label,class:e.normalizeClass(["reportifact-metric-card",`reportifact-metric-card--${e.unref(l)(t.value)}`])},[e.createElementVNode("span",{class:"reportifact-metric-card-fill",style:e.normalizeStyle({height:`${e.unref(s)(t.value)}%`})},null,4),e.createElementVNode("span",d,e.toDisplayString(t.label),1),e.createElementVNode("strong",p,e.toDisplayString(t.value),1),e.createElementVNode("p",m,e.toDisplayString(t.description),1)],2))),128))]))}});exports._sfc_main=u;
@@ -0,0 +1,33 @@
1
+ import { defineComponent as m, computed as u, createElementBlock as c, openBlock as s, Fragment as f, renderList as _, normalizeClass as v, unref as n, createElementVNode as t, normalizeStyle as h, toDisplayString as o } from "vue";
2
+ import { p as g, m as b, a as k } from "./markdownTable-B5207r3E.js";
3
+ const y = { class: "reportifact-metric-cards" }, C = { class: "reportifact-metric-card-label" }, x = { class: "reportifact-metric-card-value" }, z = { class: "reportifact-metric-card-description" }, S = /* @__PURE__ */ m({
4
+ __name: "MetricCards",
5
+ props: {
6
+ widget: { default: void 0 },
7
+ content: { default: void 0 },
8
+ data: { default: void 0 }
9
+ },
10
+ setup(i) {
11
+ const r = i, l = u(() => {
12
+ var a;
13
+ return r.data ?? g(r.content ?? ((a = r.widget) == null ? void 0 : a.content) ?? "");
14
+ }), d = b, p = k;
15
+ return (a, B) => (s(), c("div", y, [
16
+ (s(!0), c(f, null, _(l.value, (e) => (s(), c("article", {
17
+ key: e.label,
18
+ class: v(["reportifact-metric-card", `reportifact-metric-card--${n(d)(e.value)}`])
19
+ }, [
20
+ t("span", {
21
+ class: "reportifact-metric-card-fill",
22
+ style: h({ height: `${n(p)(e.value)}%` })
23
+ }, null, 4),
24
+ t("span", C, o(e.label), 1),
25
+ t("strong", x, o(e.value), 1),
26
+ t("p", z, o(e.description), 1)
27
+ ], 2))), 128))
28
+ ]));
29
+ }
30
+ });
31
+ export {
32
+ S as _
33
+ };
@@ -0,0 +1 @@
1
+ "use strict";const e=require("vue"),b=require("./useFetch-BfOAq-Kg.cjs"),F=require("./WidgetWrapper.vue_vue_type_style_index_0_lang-BQQ4Vv5j.cjs"),C={class:"rm-skeleton"},D={key:0,class:"rm-title"},S={key:0,class:"rm-empty"},L={class:"rm-name"},A={class:"rm-value"},M={class:"rm-bar-track"},R={key:0,class:"rm-pct"},q={key:2,class:"rm-table"},W=e.defineComponent({__name:"MetricsTable",props:{url:{default:void 0},src:{default:void 0},data:{default:void 0},options:{default:void 0}},setup(d,{expose:m}){const l=d,c=e.computed(()=>{var t;return typeof((t=l.options)==null?void 0:t.title)=="string"?l.options.title:""}),s=e.computed(()=>{var t;return((t=l.options)==null?void 0:t.show_pct)===!0}),n=e.ref(null),p=e.computed(()=>l.data===void 0?l.src??l.url??"":""),{loading:v,error:k,fetchData:f}=b.useFetch(p,{async onSuccess(t){n.value=await t.json()}}),y=e.computed(()=>l.data===void 0&&v.value),_=e.computed(()=>l.data!==void 0?null:l.src||l.url?k.value:"Resource not found in asset");e.watch(()=>l.data,t=>{t!==void 0&&(n.value=t)},{immediate:!0,deep:!0});function B(){l.data!==void 0?n.value=l.data:f()}m({refresh:B});const i=e.computed(()=>{const t=n.value;if(!t||!Array.isArray(t.rows))return!1;const r=t.rows[0];return r===void 0||typeof r=="object"&&"value"in r}),a=e.computed(()=>{const t=n.value;return!!t&&Array.isArray(t.columns)}),u=e.computed(()=>i.value?n.value.rows:[]),E=e.computed(()=>a.value?n.value.columns:[]),h=e.computed(()=>a.value?n.value.rows:[]);function g(t){return t.toFixed(3)}function V(t,r){return Math.min(100,Math.max(0,t/(r??1)*100))}return(t,r)=>(e.openBlock(),e.createBlock(F._sfc_main,{loading:y.value,error:_.value},{skeleton:e.withCtx(()=>[e.createElementVNode("div",C,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(4,o=>e.createElementVNode("div",{key:o,class:"rm-skeleton-row"},[...r[0]||(r[0]=[e.createElementVNode("div",{class:"reportifact-skeleton-line",style:{width:"80px"}},null,-1),e.createElementVNode("div",{class:"reportifact-skeleton-line",style:{width:"40px"}},null,-1),e.createElementVNode("div",{class:"reportifact-skeleton-line",style:{flex:"1"}},null,-1)])])),64))])]),default:e.withCtx(()=>[c.value?(e.openBlock(),e.createElementBlock("div",D,e.toDisplayString(c.value),1)):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["rm-metrics",{"rm-metrics--with-pct":s.value}])},[u.value.length===0?(e.openBlock(),e.createElementBlock("div",S," Waiting for first evaluation… ")):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(u.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.name,class:"rm-row"},[e.createElementVNode("span",L,e.toDisplayString(o.name),1),e.createElementVNode("span",A,e.toDisplayString(g(o.value)),1),e.createElementVNode("div",M,[e.createElementVNode("div",{class:"rm-bar-fill",style:e.normalizeStyle({width:V(o.value,o.max)+"%"})},null,4)]),s.value?(e.openBlock(),e.createElementBlock("span",R,e.toDisplayString((o.value*100).toFixed(1))+"%",1)):e.createCommentVNode("",!0)]))),128))],2)):a.value?(e.openBlock(),e.createElementBlock("table",q,[e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value,o=>(e.openBlock(),e.createElementBlock("th",{key:o},e.toDisplayString(o),1))),128))])]),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,(o,N)=>(e.openBlock(),e.createElementBlock("tr",{key:N},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o,(w,x)=>(e.openBlock(),e.createElementBlock("td",{key:x},e.toDisplayString(w),1))),128))]))),128))])])):e.createCommentVNode("",!0)]),_:1},8,["loading","error"]))}});exports._sfc_main=W;
@@ -0,0 +1,132 @@
1
+ import { defineComponent as z, computed as o, ref as L, watch as N, createBlock as P, openBlock as t, withCtx as h, createElementBlock as s, createCommentVNode as m, toDisplayString as u, normalizeClass as T, Fragment as c, renderList as d, createElementVNode as a, normalizeStyle as W } from "vue";
2
+ import { u as $ } from "./useFetch-CHQm_TmB.js";
3
+ import { _ as q } from "./WidgetWrapper.vue_vue_type_style_index_0_lang-D-oXqmI2.js";
4
+ const G = { class: "rm-skeleton" }, H = {
5
+ key: 0,
6
+ class: "rm-title"
7
+ }, I = {
8
+ key: 0,
9
+ class: "rm-empty"
10
+ }, J = { class: "rm-name" }, K = { class: "rm-value" }, O = { class: "rm-bar-track" }, Q = {
11
+ key: 0,
12
+ class: "rm-pct"
13
+ }, U = {
14
+ key: 2,
15
+ class: "rm-table"
16
+ }, ee = /* @__PURE__ */ z({
17
+ __name: "MetricsTable",
18
+ props: {
19
+ url: { default: void 0 },
20
+ src: { default: void 0 },
21
+ data: { default: void 0 },
22
+ options: { default: void 0 }
23
+ },
24
+ setup(k, { expose: w }) {
25
+ const l = k, f = o(() => {
26
+ var e;
27
+ return typeof ((e = l.options) == null ? void 0 : e.title) == "string" ? l.options.title : "";
28
+ }), p = o(() => {
29
+ var e;
30
+ return ((e = l.options) == null ? void 0 : e.show_pct) === !0;
31
+ }), n = L(null), b = o(() => l.data === void 0 ? l.src ?? l.url ?? "" : ""), { loading: x, error: g, fetchData: C } = $(b, {
32
+ async onSuccess(e) {
33
+ n.value = await e.json();
34
+ }
35
+ }), A = o(() => l.data === void 0 && x.value), F = o(() => l.data !== void 0 ? null : l.src || l.url ? g.value : "Resource not found in asset");
36
+ N(
37
+ () => l.data,
38
+ (e) => {
39
+ e !== void 0 && (n.value = e);
40
+ },
41
+ { immediate: !0, deep: !0 }
42
+ );
43
+ function M() {
44
+ l.data !== void 0 ? n.value = l.data : C();
45
+ }
46
+ w({ refresh: M });
47
+ const y = o(() => {
48
+ const e = n.value;
49
+ if (!e || !Array.isArray(e.rows)) return !1;
50
+ const i = e.rows[0];
51
+ return i === void 0 || typeof i == "object" && "value" in i;
52
+ }), v = o(() => {
53
+ const e = n.value;
54
+ return !!e && Array.isArray(e.columns);
55
+ }), _ = o(
56
+ () => y.value ? n.value.rows : []
57
+ ), R = o(
58
+ () => v.value ? n.value.columns : []
59
+ ), B = o(
60
+ () => v.value ? n.value.rows : []
61
+ );
62
+ function D(e) {
63
+ return e.toFixed(3);
64
+ }
65
+ function E(e, i) {
66
+ return Math.min(100, Math.max(0, e / (i ?? 1) * 100));
67
+ }
68
+ return (e, i) => (t(), P(q, {
69
+ loading: A.value,
70
+ error: F.value
71
+ }, {
72
+ skeleton: h(() => [
73
+ a("div", G, [
74
+ (t(), s(c, null, d(4, (r) => a("div", {
75
+ key: r,
76
+ class: "rm-skeleton-row"
77
+ }, [...i[0] || (i[0] = [
78
+ a("div", {
79
+ class: "reportifact-skeleton-line",
80
+ style: { width: "80px" }
81
+ }, null, -1),
82
+ a("div", {
83
+ class: "reportifact-skeleton-line",
84
+ style: { width: "40px" }
85
+ }, null, -1),
86
+ a("div", {
87
+ class: "reportifact-skeleton-line",
88
+ style: { flex: "1" }
89
+ }, null, -1)
90
+ ])])), 64))
91
+ ])
92
+ ]),
93
+ default: h(() => [
94
+ f.value ? (t(), s("div", H, u(f.value), 1)) : m("", !0),
95
+ y.value ? (t(), s("div", {
96
+ key: 1,
97
+ class: T(["rm-metrics", { "rm-metrics--with-pct": p.value }])
98
+ }, [
99
+ _.value.length === 0 ? (t(), s("div", I, " Waiting for first evaluation… ")) : (t(!0), s(c, { key: 1 }, d(_.value, (r) => (t(), s("div", {
100
+ key: r.name,
101
+ class: "rm-row"
102
+ }, [
103
+ a("span", J, u(r.name), 1),
104
+ a("span", K, u(D(r.value)), 1),
105
+ a("div", O, [
106
+ a("div", {
107
+ class: "rm-bar-fill",
108
+ style: W({ width: E(r.value, r.max) + "%" })
109
+ }, null, 4)
110
+ ]),
111
+ p.value ? (t(), s("span", Q, u((r.value * 100).toFixed(1)) + "%", 1)) : m("", !0)
112
+ ]))), 128))
113
+ ], 2)) : v.value ? (t(), s("table", U, [
114
+ a("thead", null, [
115
+ a("tr", null, [
116
+ (t(!0), s(c, null, d(R.value, (r) => (t(), s("th", { key: r }, u(r), 1))), 128))
117
+ ])
118
+ ]),
119
+ a("tbody", null, [
120
+ (t(!0), s(c, null, d(B.value, (r, S) => (t(), s("tr", { key: S }, [
121
+ (t(!0), s(c, null, d(r, (V, j) => (t(), s("td", { key: j }, u(V), 1))), 128))
122
+ ]))), 128))
123
+ ])
124
+ ])) : m("", !0)
125
+ ]),
126
+ _: 1
127
+ }, 8, ["loading", "error"]));
128
+ }
129
+ });
130
+ export {
131
+ ee as _
132
+ };
@@ -0,0 +1,40 @@
1
+ import { ReportifactMediaResolver } from './mediaResolver';
2
+ import { ReportifactCustomWidgets } from './customWidgets';
3
+ type __VLS_Props = {
4
+ /** Direct URL to index.md */
5
+ url?: string;
6
+ /** Map filename -> fetch URL. Uses "index.md" for schema when provided. */
7
+ urlMap?: Record<string, string>;
8
+ /** Optional map for markdown links that should download instead of opening the inline resource URL. */
9
+ linkUrlMap?: Record<string, string>;
10
+ /** Base path for parquet/tfevents API routes (e.g. "/api/reports"). When set, parquet and tfevents widgets use /table/ and /tfevents/ subpaths. */
11
+ basePath?: string;
12
+ /** Scrolling container element. Pass when content is scrolled by a container instead of the window. */
13
+ scrollContainer?: HTMLElement | null;
14
+ /** Initial auto-refresh interval in ms. Undefined = no auto-refresh (toolbar still shown for manual force-refresh). */
15
+ refreshInterval?: number;
16
+ /** Optional host hook for resolving opaque media refs used by widgets like imageGallery. */
17
+ mediaResolver?: ReportifactMediaResolver;
18
+ /** Optional host-provided widgets keyed by directive name. */
19
+ customWidgets?: ReportifactCustomWidgets;
20
+ };
21
+ declare function forceRefresh(): void;
22
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {
23
+ forceRefresh: typeof forceRefresh;
24
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
25
+ "row-click": (payload: unknown) => any;
26
+ refreshed: () => any;
27
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
28
+ "onRow-click"?: ((payload: unknown) => any) | undefined;
29
+ onRefreshed?: (() => any) | undefined;
30
+ }>, {
31
+ url: string;
32
+ mediaResolver: ReportifactMediaResolver;
33
+ customWidgets: ReportifactCustomWidgets;
34
+ urlMap: Record<string, string>;
35
+ linkUrlMap: Record<string, string>;
36
+ basePath: string;
37
+ scrollContainer: HTMLElement | null;
38
+ refreshInterval: number;
39
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
40
+ export default _default;
@@ -0,0 +1 @@
1
+ "use strict";const e=require("vue"),r=(t,o)=>{const c=t.__vccOpts||t;for(const[s,n]of o)c[s]=n;return c},i={},_={class:"reportifact reportifact-widget-host"};function a(t,o){return e.openBlock(),e.createElementBlock("div",_,[e.renderSlot(t.$slots,"default")])}const f=r(i,[["render",a]]);exports.ReportifactWidgetHost=f;exports._export_sfc=r;
@@ -0,0 +1,17 @@
1
+ import { createElementBlock as s, openBlock as n, renderSlot as a } from "vue";
2
+ const _ = (t, e) => {
3
+ const o = t.__vccOpts || t;
4
+ for (const [r, c] of e)
5
+ o[r] = c;
6
+ return o;
7
+ }, f = {}, i = { class: "reportifact reportifact-widget-host" };
8
+ function d(t, e) {
9
+ return n(), s("div", i, [
10
+ a(t.$slots, "default")
11
+ ]);
12
+ }
13
+ const p = /* @__PURE__ */ _(f, [["render", d]]);
14
+ export {
15
+ p as R,
16
+ _
17
+ };