@meridianlabs/log-viewer 0.3.273 → 0.3.276

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 (60) hide show
  1. package/lib/AnsiDisplayRich-302CIkEj.js +1431 -0
  2. package/lib/AnsiDisplayRich-302CIkEj.js.map +1 -0
  3. package/lib/ToolButton-BmBvTvKO.js +124 -0
  4. package/lib/ToolButton-BmBvTvKO.js.map +1 -0
  5. package/lib/e2e/content-trust.spec.d.ts +2 -0
  6. package/lib/e2e/content-trust.spec.d.ts.map +1 -0
  7. package/lib/e2e/fixtures/log-list-scenario.d.ts +1 -0
  8. package/lib/e2e/fixtures/log-list-scenario.d.ts.map +1 -1
  9. package/lib/e2e/fixtures/serve-eval-file.d.ts +20 -0
  10. package/lib/e2e/fixtures/serve-eval-file.d.ts.map +1 -0
  11. package/lib/e2e/sample-activity.spec.d.ts +10 -0
  12. package/lib/e2e/sample-activity.spec.d.ts.map +1 -0
  13. package/lib/index.js +16620 -31058
  14. package/lib/index.js.map +1 -1
  15. package/lib/markdownPipeline-BeMkkZRz.js +8575 -0
  16. package/lib/markdownPipeline-BeMkkZRz.js.map +1 -0
  17. package/lib/markdownText-z5R6PHwt.js +105 -0
  18. package/lib/markdownText-z5R6PHwt.js.map +1 -0
  19. package/lib/prismHighlighter-D-PZtkPX.js +1927 -0
  20. package/lib/prismHighlighter-D-PZtkPX.js.map +1 -0
  21. package/lib/rolldown-runtime-B-lAHAz2.js +37 -0
  22. package/lib/src/app/App.d.ts.map +1 -1
  23. package/lib/src/app/flow/FlowPanel.d.ts.map +1 -1
  24. package/lib/src/app/log-view/tabs/InfoTab.d.ts +1 -0
  25. package/lib/src/app/log-view/tabs/InfoTab.d.ts.map +1 -1
  26. package/lib/src/app/log-view/tabs/JsonTab.d.ts +1 -1
  27. package/lib/src/app/log-view/tabs/ModelsTab.d.ts +1 -0
  28. package/lib/src/app/log-view/tabs/ModelsTab.d.ts.map +1 -1
  29. package/lib/src/app/log-view/tabs/SamplesTab.d.ts +1 -1
  30. package/lib/src/app/log-view/tabs/TaskTab.d.ts +1 -0
  31. package/lib/src/app/log-view/tabs/TaskTab.d.ts.map +1 -1
  32. package/lib/src/app/log-view/tabs/timeline/TimelineTab.d.ts +1 -0
  33. package/lib/src/app/log-view/tabs/timeline/TimelineTab.d.ts.map +1 -1
  34. package/lib/src/app/log-view/title-view/ScoreGrid.d.ts.map +1 -1
  35. package/lib/src/app/routing/AppRouter.d.ts.map +1 -1
  36. package/lib/src/app/samples/SampleDisplay.d.ts.map +1 -1
  37. package/lib/src/app/samples/SampleSummaryView.d.ts.map +1 -1
  38. package/lib/src/app/samples/event/SampleEventView.d.ts.map +1 -1
  39. package/lib/src/app/samples/print/SamplePrintView.d.ts.map +1 -1
  40. package/lib/src/app/samples/status/status.d.ts +1 -1
  41. package/lib/src/app/shared/contentTrust.d.ts +14 -0
  42. package/lib/src/app/shared/contentTrust.d.ts.map +1 -0
  43. package/lib/src/app/shared/samples-grid/cells.d.ts.map +1 -1
  44. package/lib/src/app_config/appConfig.d.ts +3 -0
  45. package/lib/src/app_config/appConfig.d.ts.map +1 -1
  46. package/lib/src/app_config/resolveBackend.d.ts.map +1 -1
  47. package/lib/src/components/CodePanel.d.ts.map +1 -1
  48. package/lib/src/constants.d.ts +1 -0
  49. package/lib/src/constants.d.ts.map +1 -1
  50. package/lib/src/log_data/sampleSummaries.d.ts.map +1 -1
  51. package/lib/src/state/hooks.d.ts +1 -0
  52. package/lib/src/state/hooks.d.ts.map +1 -1
  53. package/lib/src-s8Cexy_j.js +9977 -0
  54. package/lib/src-s8Cexy_j.js.map +1 -0
  55. package/lib/styles/index.css +2220 -965
  56. package/lib/type-CI-Mc4Kw.js +29 -0
  57. package/lib/type-CI-Mc4Kw.js.map +1 -0
  58. package/package.json +11 -11
  59. package/lib/src/utils/markdown.d.ts +0 -16
  60. package/lib/src/utils/markdown.d.ts.map +0 -1
@@ -0,0 +1,105 @@
1
+ //#region ../../packages/util/src/media.ts
2
+ var parseDataUri = (value) => {
3
+ let uri;
4
+ try {
5
+ uri = new URL(value);
6
+ } catch {
7
+ return;
8
+ }
9
+ if (uri.protocol.toLowerCase() !== "data:") return;
10
+ const comma = uri.pathname.indexOf(",");
11
+ if (comma < 0) return;
12
+ const [rawMimeType = "", ...parameters] = uri.pathname.slice(0, comma).split(";");
13
+ const mimeType = rawMimeType.trim().toLowerCase();
14
+ if (!mimeType) return;
15
+ return {
16
+ mimeType,
17
+ base64: parameters.some((parameter) => parameter.trim().toLowerCase() === "base64")
18
+ };
19
+ };
20
+ var rasterImageMimeTypes = /* @__PURE__ */ new Set([
21
+ "image/avif",
22
+ "image/bmp",
23
+ "image/gif",
24
+ "image/jpeg",
25
+ "image/png",
26
+ "image/webp",
27
+ "image/x-icon"
28
+ ]);
29
+ var imageMimeAliases = /* @__PURE__ */ new Map([["image/jpg", "image/jpeg"], ["image/vnd.microsoft.icon", "image/x-icon"]]);
30
+ var normalizedImageMimeType = (mimeType) => {
31
+ const normalized = mimeType.trim().toLowerCase();
32
+ return imageMimeAliases.get(normalized) ?? normalized;
33
+ };
34
+ var isRasterImageMimeType = (mimeType) => rasterImageMimeTypes.has(normalizedImageMimeType(mimeType));
35
+ var base64DataUriMimeType = (source) => {
36
+ const dataUri = parseDataUri(source);
37
+ return dataUri?.base64 ? dataUri.mimeType : void 0;
38
+ };
39
+ /** Inline image data that is safe to render without a network request. */ var isRenderableImageSource = (source) => {
40
+ const mimeType = base64DataUriMimeType(source);
41
+ return mimeType !== void 0 && isRasterImageMimeType(mimeType);
42
+ };
43
+ /**
44
+ * Canonical form of a renderable inline image source, or undefined.
45
+ *
46
+ * Callers that gate on the source must render THIS value rather than their
47
+ * input: validating one string and emitting another lets characters the URL
48
+ * parser rejects (U+FEFF, U+202F) survive into the DOM, where the browser
49
+ * reads the result as a relative path and fetches it.
50
+ */ var canonicalImageSource = (source) => {
51
+ const trimmed = source.trim();
52
+ if (!isRenderableImageSource(trimmed)) return;
53
+ try {
54
+ return new URL(trimmed).href;
55
+ } catch {
56
+ return;
57
+ }
58
+ };
59
+ var parseAbsoluteHttpUrl = (value) => {
60
+ let url;
61
+ try {
62
+ url = new URL(value);
63
+ } catch {
64
+ return;
65
+ }
66
+ if (url.protocol !== "http:" && url.protocol !== "https:" || !url.hostname) return;
67
+ return url.href;
68
+ };
69
+ //#endregion
70
+ //#region ../../packages/react/src/components/markdownText.ts
71
+ var defaultMarkdownRenderer = "full";
72
+ /**
73
+ * The part of `text` that truncating it to `maxLength` can depend on (plus
74
+ * one character, which keeps "was the text longer?"). Cutting to it first
75
+ * leaves the truncated result unchanged but bounds the work, and the length
76
+ * of what callers pass on or key caches by.
77
+ */ var truncationWindow = (text, maxLength) => text.slice(0, maxLength * 8 + 1);
78
+ var escapeHtmlCharacters = (content) => {
79
+ if (!content) return content;
80
+ return content.replace(/[<>&'"]/g, (c) => {
81
+ switch (c) {
82
+ case "<": return "&lt;";
83
+ case ">": return "&gt;";
84
+ case "&": return "&amp;";
85
+ case "'": return "&apos;";
86
+ case "\"": return "&quot;";
87
+ default: throw new Error("Matched a value that isn't replaceable");
88
+ }
89
+ });
90
+ };
91
+ /**
92
+ * Simple markdown truncation that falls back to basic string slicing
93
+ * This is a faster alternative when markdown parsing isn't critical
94
+ */ function simpleMarkdownTruncate(markdown, maxLength = 250, ellipsis = "...") {
95
+ if (!markdown || markdown.length <= maxLength) return markdown;
96
+ const targetLength = maxLength - ellipsis.length;
97
+ const truncated = markdown.slice(0, targetLength);
98
+ const lastSpace = truncated.lastIndexOf(" ");
99
+ if (lastSpace > 0) return truncated.slice(0, lastSpace) + ellipsis;
100
+ return truncated + ellipsis;
101
+ }
102
+ //#endregion
103
+ export { base64DataUriMimeType as a, isRenderableImageSource as c, parseDataUri as d, truncationWindow as i, normalizedImageMimeType as l, escapeHtmlCharacters as n, canonicalImageSource as o, simpleMarkdownTruncate as r, isRasterImageMimeType as s, defaultMarkdownRenderer as t, parseAbsoluteHttpUrl as u };
104
+
105
+ //# sourceMappingURL=markdownText-z5R6PHwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownText-z5R6PHwt.js","names":["parseDataUri","value","uri","URL","undefined","protocol","toLowerCase","comma","pathname","indexOf","rawMimeType","parameters","slice","split","mimeType","trim","base64","some","parameter","rasterImageMimeTypes","Set","imageMimeAliases","Map","normalizedImageMimeType","normalized","get","isRasterImageMimeType","has","base64DataUriMimeType","source","dataUri","isRenderableImageSource","canonicalImageSource","trimmed","href","parseAbsoluteHttpUrl","url","hostname","defaultMarkdownRenderer","kTruncationWindowFactor","truncationWindow","text","maxLength","slice","escapeHtmlCharacters","content","replace","c","Error","simpleMarkdownTruncate","markdown","ellipsis","length","targetLength","truncated","lastSpace","lastIndexOf"],"sources":["../../../packages/util/src/media.ts","../../../packages/react/src/components/markdownText.ts"],"sourcesContent":["export interface DataUri {\n mimeType: string;\n base64: boolean;\n}\n\nexport const parseDataUri = (value: string): DataUri | undefined => {\n let uri: URL;\n try {\n uri = new URL(value);\n } catch {\n return undefined;\n }\n\n if (uri.protocol.toLowerCase() !== \"data:\") {\n return undefined;\n }\n\n const comma = uri.pathname.indexOf(\",\");\n if (comma < 0) {\n return undefined;\n }\n\n const [rawMimeType = \"\", ...parameters] = uri.pathname\n .slice(0, comma)\n .split(\";\");\n const mimeType = rawMimeType.trim().toLowerCase();\n if (!mimeType) {\n return undefined;\n }\n\n return {\n mimeType,\n base64: parameters.some(\n (parameter) => parameter.trim().toLowerCase() === \"base64\"\n ),\n };\n};\n\n// Private, and deliberately not exported: these back a sanitizer decision, so\n// a consumer able to call .add() could re-enable inline SVG process-wide.\n// SVG is absent because it can carry script, whatever the encoding.\nconst rasterImageMimeTypes: ReadonlySet<string> = new Set([\n \"image/avif\",\n \"image/bmp\",\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/x-icon\",\n]);\n\nconst imageMimeAliases: ReadonlyMap<string, string> = new Map([\n [\"image/jpg\", \"image/jpeg\"],\n [\"image/vnd.microsoft.icon\", \"image/x-icon\"],\n]);\n\nexport const normalizedImageMimeType = (mimeType: string): string => {\n const normalized = mimeType.trim().toLowerCase();\n return imageMimeAliases.get(normalized) ?? normalized;\n};\n\nexport const isRasterImageMimeType = (mimeType: string): boolean =>\n rasterImageMimeTypes.has(normalizedImageMimeType(mimeType));\n\nexport const base64DataUriMimeType = (source: string): string | undefined => {\n const dataUri = parseDataUri(source);\n return dataUri?.base64 ? dataUri.mimeType : undefined;\n};\n\n/** Inline image data that is safe to render without a network request. */\nexport const isRenderableImageSource = (source: string): boolean => {\n const mimeType = base64DataUriMimeType(source);\n return mimeType !== undefined && isRasterImageMimeType(mimeType);\n};\n\n/**\n * Canonical form of a renderable inline image source, or undefined.\n *\n * Callers that gate on the source must render THIS value rather than their\n * input: validating one string and emitting another lets characters the URL\n * parser rejects (U+FEFF, U+202F) survive into the DOM, where the browser\n * reads the result as a relative path and fetches it.\n */\nexport const canonicalImageSource = (source: string): string | undefined => {\n const trimmed = source.trim();\n if (!isRenderableImageSource(trimmed)) {\n return undefined;\n }\n try {\n return new URL(trimmed).href;\n } catch {\n return undefined;\n }\n};\n\nexport const parseAbsoluteHttpUrl = (value: string): string | undefined => {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return undefined;\n }\n\n if (\n (url.protocol !== \"http:\" && url.protocol !== \"https:\") ||\n !url.hostname\n ) {\n return undefined;\n }\n\n return url.href;\n};\n","// Library-free markdown helpers, safe to import anywhere. The markdown\n// pipeline itself (markdown-it, DOMPurify, MathJax) loads on demand for\n// trusted content only; see markdownPipeline.ts.\n\nexport type MarkdownRenderer = \"full\" | \"textOnly\" | \"fragment\";\n\nexport const defaultMarkdownRenderer: MarkdownRenderer = \"full\";\n\n// Markdown-aware truncation to `maxLength` reads at most this many times\n// `maxLength` characters (see markdownTruncate.ts). 8x leaves 7 * maxLength of\n// headroom for markup that carries no visible text (URLs, tags, fences)\n// before the cut can change what is shown.\nexport const kTruncationWindowFactor = 8;\n\n/**\n * The part of `text` that truncating it to `maxLength` can depend on (plus\n * one character, which keeps \"was the text longer?\"). Cutting to it first\n * leaves the truncated result unchanged but bounds the work, and the length\n * of what callers pass on or key caches by.\n */\nexport const truncationWindow = (text: string, maxLength: number): string =>\n text.slice(0, maxLength * kTruncationWindowFactor + 1);\n\nexport const escapeHtmlCharacters = (content: string): string => {\n if (!content) return content;\n\n return content.replace(/[<>&'\"]/g, (c: string): string => {\n switch (c) {\n case \"<\":\n return \"&lt;\";\n case \">\":\n return \"&gt;\";\n case \"&\":\n return \"&amp;\";\n case \"'\":\n return \"&apos;\";\n case '\"':\n return \"&quot;\";\n default:\n throw new Error(\"Matched a value that isn't replaceable\");\n }\n });\n};\n\n/**\n * Simple markdown truncation that falls back to basic string slicing\n * This is a faster alternative when markdown parsing isn't critical\n */\nexport function simpleMarkdownTruncate(\n markdown: string,\n maxLength: number = 250,\n ellipsis: string = \"...\"\n): string {\n if (!markdown || markdown.length <= maxLength) {\n return markdown;\n }\n\n const targetLength = maxLength - ellipsis.length;\n const truncated = markdown.slice(0, targetLength);\n\n // Find the last space to avoid cutting words\n const lastSpace = truncated.lastIndexOf(\" \");\n if (lastSpace > 0) {\n return truncated.slice(0, lastSpace) + ellipsis;\n }\n\n // If no space found, just truncate at target length\n return truncated + ellipsis;\n}\n"],"mappings":";AAKA,IAAaA,gBAAgBC,UAAAA;CAC3B,IAAIC;CACJ,IAAI;EACFA,MAAM,IAAIC,IAAIF,KAAAA;CAChB,QAAQ;EACN;CACF;CAEA,IAAIC,IAAIG,SAASC,YAAW,MAAO,SACjC;CAGF,MAAMC,QAAQL,IAAIM,SAASC,QAAQ,GAAA;CACnC,IAAIF,QAAQ,GACV;CAGF,MAAM,CAACG,cAAc,IAAI,GAAGC,cAAcT,IAAIM,SAC3CI,MAAM,GAAGL,KAAAA,CAAAA,CACTM,MAAM,GAAA;CACT,MAAMC,WAAWJ,YAAYK,KAAI,CAAA,CAAGT,YAAW;CAC/C,IAAI,CAACQ,UACH;CAGF,OAAO;EACLA;EACAE,QAAQL,WAAWM,MAChBC,cAAcA,UAAUH,KAAI,CAAA,CAAGT,YAAW,MAAO,QAAA;CAEtD;AACF;AAKA,IAAMa,uCAA4C,IAAIC,IAAI;CACxD;CACA;CACA;CACA;CACA;CACA;CACA;AACD,CAAA;AAED,IAAMC,mCAAgD,IAAIC,IAAI,CAC5D,CAAC,aAAa,YAAa,GAC3B,CAAC,4BAA4B,cAAe,CAC7C,CAAA;AAED,IAAaC,2BAA2BT,aAAAA;CACtC,MAAMU,aAAaV,SAASC,KAAI,CAAA,CAAGT,YAAW;CAC9C,OAAOe,iBAAiBI,IAAID,UAAAA,KAAeA;AAC7C;AAEA,IAAaE,yBAAyBZ,aACpCK,qBAAqBQ,IAAIJ,wBAAwBT,QAAAA,CAAAA;AAEnD,IAAac,yBAAyBC,WAAAA;CACpC,MAAMC,UAAU9B,aAAa6B,MAAAA;CAC7B,OAAOC,SAASd,SAASc,QAAQhB,WAAWV,KAAAA;AAC9C;2EAGA,IAAa2B,2BAA2BF,WAAAA;CACtC,MAAMf,WAAWc,sBAAsBC,MAAAA;CACvC,OAAOf,aAAaV,KAAAA,KAAasB,sBAAsBZ,QAAAA;AACzD;;;;;;;;GAUA,IAAakB,wBAAwBH,WAAAA;CACnC,MAAMI,UAAUJ,OAAOd,KAAI;CAC3B,IAAI,CAACgB,wBAAwBE,OAAAA,GAC3B;CAEF,IAAI;EACF,OAAO,IAAI9B,IAAI8B,OAAAA,CAAAA,CAASC;CAC1B,QAAQ;EACN;CACF;AACF;AAEA,IAAaC,wBAAwBlC,UAAAA;CACnC,IAAImC;CACJ,IAAI;EACFA,MAAM,IAAIjC,IAAIF,KAAAA;CAChB,QAAQ;EACN;CACF;CAEA,IACE,IAAKI,aAAa,WAAW+B,IAAI/B,aAAa,YAC9C,CAAC+B,IAAIC,UAEL;CAGF,OAAOD,IAAIF;AACb;;;ACzGA,IAAaI,0BAA4C;;;;;;GAczD,IAAaE,oBAAoBC,MAAcC,cAC7CD,KAAKE,MAAM,GAAGD,YAAAA,IAAsC,CAAA;AAEtD,IAAaE,wBAAwBC,YAAAA;CACnC,IAAI,CAACA,SAAS,OAAOA;CAErB,OAAOA,QAAQC,QAAQ,aAAaC,MAAAA;EAClC,QAAQA,GAAR;GACE,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,KACH,OAAO;GACT,KAAK,MACH,OAAO;GACT,SACE,MAAM,IAAIC,MAAM,wCAAA;EACpB;CACF,CAAA;AACF;;;;GAMA,SAAgBC,uBACdC,UACAR,YAAoB,KACpBS,WAAmB,OAAK;CAExB,IAAI,CAACD,YAAYA,SAASE,UAAUV,WAClC,OAAOQ;CAGT,MAAMG,eAAeX,YAAYS,SAASC;CAC1C,MAAME,YAAYJ,SAASP,MAAM,GAAGU,YAAAA;CAGpC,MAAME,YAAYD,UAAUE,YAAY,GAAA;CACxC,IAAID,YAAY,GACd,OAAOD,UAAUX,MAAM,GAAGY,SAAAA,IAAaJ;CAIzC,OAAOG,YAAYH;AACrB"}