@d4y/agent-runtime-nuxt 0.1.4 → 0.1.7
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/module.json +1 -1
- package/dist/runtime/components/AgentRuntimeMarkdown.d.vue.ts +10 -0
- package/dist/runtime/components/AgentRuntimeMarkdown.vue +17 -7
- package/dist/runtime/components/AgentRuntimeMarkdown.vue.d.ts +10 -0
- package/dist/runtime/composables/useAgentRuntimeMarkdown.d.ts +5 -0
- package/dist/runtime/composables/useAgentRuntimeMarkdown.js +11 -8
- package/package.json +3 -3
package/dist/module.json
CHANGED
|
@@ -4,6 +4,11 @@ type __VLS_Props = {
|
|
|
4
4
|
streaming?: boolean;
|
|
5
5
|
resolveWorkspacePath?: ((relPath: string) => string | null | undefined) | null;
|
|
6
6
|
resolveWorkspacePreviewPath?: ((relPath: string) => string | null | undefined) | null;
|
|
7
|
+
previewLinkLabel?: string;
|
|
8
|
+
downloadLinkLabel?: string;
|
|
9
|
+
pdfPreviewTitleLabel?: string;
|
|
10
|
+
htmlPreviewTitleLabel?: string;
|
|
11
|
+
showPdfEmbedToolbar?: boolean;
|
|
7
12
|
};
|
|
8
13
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
9
14
|
renderedChange: (rendered: boolean) => any;
|
|
@@ -11,6 +16,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
|
|
|
11
16
|
onRenderedChange?: ((rendered: boolean) => any) | undefined;
|
|
12
17
|
}>, {
|
|
13
18
|
class: string | Record<string, boolean> | string[];
|
|
19
|
+
previewLinkLabel: string;
|
|
20
|
+
downloadLinkLabel: string;
|
|
21
|
+
pdfPreviewTitleLabel: string;
|
|
22
|
+
htmlPreviewTitleLabel: string;
|
|
23
|
+
showPdfEmbedToolbar: boolean;
|
|
14
24
|
streaming: boolean;
|
|
15
25
|
resolveWorkspacePath: ((relPath: string) => string | null | undefined) | null;
|
|
16
26
|
resolveWorkspacePreviewPath: ((relPath: string) => string | null | undefined) | null;
|
|
@@ -8,13 +8,23 @@ const props = defineProps({
|
|
|
8
8
|
class: { type: [String, Object, Array], required: false, default: "" },
|
|
9
9
|
streaming: { type: Boolean, required: false, default: false },
|
|
10
10
|
resolveWorkspacePath: { type: [Function, null], required: false, default: null },
|
|
11
|
-
resolveWorkspacePreviewPath: { type: [Function, null], required: false, default: null }
|
|
11
|
+
resolveWorkspacePreviewPath: { type: [Function, null], required: false, default: null },
|
|
12
|
+
previewLinkLabel: { type: String, required: false, default: "Preview" },
|
|
13
|
+
downloadLinkLabel: { type: String, required: false, default: "Download" },
|
|
14
|
+
pdfPreviewTitleLabel: { type: String, required: false, default: "PDF preview" },
|
|
15
|
+
htmlPreviewTitleLabel: { type: String, required: false, default: "HTML preview" },
|
|
16
|
+
showPdfEmbedToolbar: { type: Boolean, required: false, default: false }
|
|
12
17
|
});
|
|
13
|
-
const
|
|
18
|
+
const renderer = computed(() => useAgentRuntimeMarkdown({
|
|
14
19
|
resolveWorkspacePath: (relPath) => props.resolveWorkspacePath?.(relPath) ?? null,
|
|
15
|
-
resolveWorkspacePreviewPath: (relPath) => props.resolveWorkspacePreviewPath?.(relPath) ?? null
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
resolveWorkspacePreviewPath: (relPath) => props.resolveWorkspacePreviewPath?.(relPath) ?? null,
|
|
21
|
+
previewLinkLabel: props.previewLinkLabel,
|
|
22
|
+
downloadLinkLabel: props.downloadLinkLabel,
|
|
23
|
+
pdfPreviewTitleLabel: props.pdfPreviewTitleLabel,
|
|
24
|
+
htmlPreviewTitleLabel: props.htmlPreviewTitleLabel,
|
|
25
|
+
showPdfEmbedToolbar: props.showPdfEmbedToolbar
|
|
26
|
+
}));
|
|
27
|
+
const html = computed(() => props.text ? renderer.value.render(props.text) : "");
|
|
18
28
|
const dialogOpen = ref(false);
|
|
19
29
|
const dialogFile = ref(null);
|
|
20
30
|
const dialogPreviewSrc = ref(null);
|
|
@@ -57,7 +67,7 @@ watch(rendered, async (value) => {
|
|
|
57
67
|
<div
|
|
58
68
|
v-if="rendered"
|
|
59
69
|
class="agent-runtime-markdown"
|
|
60
|
-
:class="
|
|
70
|
+
:class="props.class"
|
|
61
71
|
@click="onClick"
|
|
62
72
|
v-html="
|
|
63
73
|
html
|
|
@@ -73,5 +83,5 @@ watch(rendered, async (value) => {
|
|
|
73
83
|
</template>
|
|
74
84
|
|
|
75
85
|
<style scoped>
|
|
76
|
-
.agent-runtime-markdown{line-height:1.65}.agent-runtime-markdown
|
|
86
|
+
.agent-runtime-markdown{line-height:1.65}.agent-runtime-markdown :deep(.agent-runtime-md-image-link){cursor:zoom-in;display:inline-block}.agent-runtime-markdown :deep(.agent-runtime-md-image){border-radius:.95rem;display:block;max-height:20rem;max-width:min(100%,30rem);-o-object-fit:contain;object-fit:contain}.agent-runtime-markdown :deep(.agent-runtime-md-file-link){color:inherit;text-decoration:underline;text-underline-offset:.18em}.agent-runtime-markdown :deep(.agent-runtime-md-html-shell),.agent-runtime-markdown :deep(.agent-runtime-md-pdf-shell){background:color-mix(in srgb,var(--ui-bg-elevated,rgba(248,250,252,.9)) 82%,transparent);border:1px solid color-mix(in srgb,var(--ui-border,rgba(148,163,184,.28)) 80%,transparent);border-radius:1rem;display:block;margin-top:.75rem;overflow:hidden}.agent-runtime-markdown :deep(.agent-runtime-md-embed-toolbar){align-items:center;border-bottom:1px solid color-mix(in srgb,var(--ui-border,rgba(148,163,184,.28)) 70%,transparent);display:flex;flex-wrap:wrap;font-size:.75rem;gap:.75rem;justify-content:space-between;padding:.75rem .9rem}.agent-runtime-markdown :deep(.agent-runtime-md-embed-label){font-family:var(--font-mono,ui-monospace,monospace);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-runtime-markdown :deep(.agent-runtime-md-embed-actions){display:inline-flex;flex-wrap:wrap;gap:.5rem}.agent-runtime-markdown :deep(.agent-runtime-md-download-link),.agent-runtime-markdown :deep(.agent-runtime-md-preview-link){color:inherit;text-decoration:underline;text-underline-offset:.18em}.agent-runtime-markdown :deep(.agent-runtime-md-preview-link[data-agent-runtime-preview=true]){cursor:zoom-in}.agent-runtime-markdown :deep(.agent-runtime-md-html-frame),.agent-runtime-markdown :deep(.agent-runtime-md-pdf-frame){background:color-mix(in srgb,var(--ui-bg,hsla(0,0%,100%,.94)) 85%,transparent);border:0;display:block;height:22rem;width:100%}
|
|
77
87
|
</style>
|
|
@@ -4,6 +4,11 @@ type __VLS_Props = {
|
|
|
4
4
|
streaming?: boolean;
|
|
5
5
|
resolveWorkspacePath?: ((relPath: string) => string | null | undefined) | null;
|
|
6
6
|
resolveWorkspacePreviewPath?: ((relPath: string) => string | null | undefined) | null;
|
|
7
|
+
previewLinkLabel?: string;
|
|
8
|
+
downloadLinkLabel?: string;
|
|
9
|
+
pdfPreviewTitleLabel?: string;
|
|
10
|
+
htmlPreviewTitleLabel?: string;
|
|
11
|
+
showPdfEmbedToolbar?: boolean;
|
|
7
12
|
};
|
|
8
13
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
9
14
|
renderedChange: (rendered: boolean) => any;
|
|
@@ -11,6 +16,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
|
|
|
11
16
|
onRenderedChange?: ((rendered: boolean) => any) | undefined;
|
|
12
17
|
}>, {
|
|
13
18
|
class: string | Record<string, boolean> | string[];
|
|
19
|
+
previewLinkLabel: string;
|
|
20
|
+
downloadLinkLabel: string;
|
|
21
|
+
pdfPreviewTitleLabel: string;
|
|
22
|
+
htmlPreviewTitleLabel: string;
|
|
23
|
+
showPdfEmbedToolbar: boolean;
|
|
14
24
|
streaming: boolean;
|
|
15
25
|
resolveWorkspacePath: ((relPath: string) => string | null | undefined) | null;
|
|
16
26
|
resolveWorkspacePreviewPath: ((relPath: string) => string | null | undefined) | null;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import MarkdownIt from 'markdown-it';
|
|
2
2
|
import { type AgentRuntimeAssetResolverOptions } from '../utils/files.js';
|
|
3
3
|
export interface AgentRuntimeMarkdownRenderOptions extends AgentRuntimeAssetResolverOptions {
|
|
4
|
+
previewLinkLabel?: string;
|
|
5
|
+
downloadLinkLabel?: string;
|
|
6
|
+
pdfPreviewTitleLabel?: string;
|
|
7
|
+
htmlPreviewTitleLabel?: string;
|
|
8
|
+
showPdfEmbedToolbar?: boolean;
|
|
4
9
|
}
|
|
5
10
|
export declare const createAgentRuntimeMarkdownRenderer: (options?: AgentRuntimeMarkdownRenderOptions) => MarkdownIt;
|
|
6
11
|
export declare const useAgentRuntimeMarkdown: (options?: AgentRuntimeMarkdownRenderOptions) => {
|
|
@@ -33,7 +33,7 @@ const buildImageMarkup = (md, asset, alt, title) => {
|
|
|
33
33
|
const attrs = previewAttrs(md, asset);
|
|
34
34
|
return `<a href="${safePreviewUrl}" target="_blank" rel="noopener noreferrer" class="agent-runtime-md-image-link" ${attrs}><img src="${safePreviewUrl}" alt="${safeAlt}" loading="lazy" class="agent-runtime-md-image"${titleAttr} /></a>`;
|
|
35
35
|
};
|
|
36
|
-
const buildPreviewShellMarkup = (md, asset, label) => {
|
|
36
|
+
const buildPreviewShellMarkup = (md, asset, label, options) => {
|
|
37
37
|
const previewUrl = asset.previewUrl;
|
|
38
38
|
if (!previewUrl) {
|
|
39
39
|
return buildDownloadLinkMarkup(md, asset, label);
|
|
@@ -44,16 +44,19 @@ const buildPreviewShellMarkup = (md, asset, label) => {
|
|
|
44
44
|
const shellClass = asset.kind === "pdf" ? "agent-runtime-md-pdf-shell" : "agent-runtime-md-html-shell";
|
|
45
45
|
const frameClass = asset.kind === "pdf" ? "agent-runtime-md-pdf-frame" : "agent-runtime-md-html-frame";
|
|
46
46
|
const frameAttrs = asset.kind === "pdf" ? "" : ' sandbox="" referrerpolicy="no-referrer"';
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
47
|
+
const titleLabel = asset.kind === "pdf" ? options.pdfPreviewTitleLabel ?? "PDF preview" : options.htmlPreviewTitleLabel ?? "HTML preview";
|
|
48
|
+
const title = `${titleLabel}: ${label}`;
|
|
49
|
+
const showToolbar = asset.kind !== "pdf" || options.showPdfEmbedToolbar === true;
|
|
50
|
+
const downloadButton = asset.canDownload && asset.rawUrl ? `<a href="${escapeAttr(md, asset.rawUrl)}" target="_blank" rel="noopener noreferrer" class="agent-runtime-md-download-link">${escapeAttr(md, options.downloadLinkLabel ?? "Download")}</a>` : "";
|
|
51
|
+
const toolbar = showToolbar ? `<span class="agent-runtime-md-embed-toolbar"><span class="agent-runtime-md-embed-label">${safeLabel}</span><span class="agent-runtime-md-embed-actions"><a href="${safePreviewUrl}" target="_blank" rel="noopener noreferrer" class="agent-runtime-md-preview-link" ${attrs}>${escapeAttr(md, options.previewLinkLabel ?? "Preview")}</a>${downloadButton}</span></span>` : "";
|
|
52
|
+
return `<span class="${shellClass}">${toolbar}<iframe src="${safePreviewUrl}" title="${escapeAttr(md, title)}" loading="lazy"${frameAttrs} class="${frameClass}"></iframe></span>`;
|
|
50
53
|
};
|
|
51
54
|
const toHtmlToken = (state, markup) => {
|
|
52
55
|
const token = new state.Token("html_inline", "", 0);
|
|
53
56
|
token.content = markup;
|
|
54
57
|
return token;
|
|
55
58
|
};
|
|
56
|
-
const renderWorkspaceLink = (md, asset, label) => {
|
|
59
|
+
const renderWorkspaceLink = (md, asset, label, options) => {
|
|
57
60
|
if (asset.kind === "blocked") {
|
|
58
61
|
return escapeAttr(md, label);
|
|
59
62
|
}
|
|
@@ -61,7 +64,7 @@ const renderWorkspaceLink = (md, asset, label) => {
|
|
|
61
64
|
return buildImageMarkup(md, asset, label);
|
|
62
65
|
}
|
|
63
66
|
if (asset.kind === "html" || asset.kind === "pdf") {
|
|
64
|
-
return buildPreviewShellMarkup(md, asset, label);
|
|
67
|
+
return buildPreviewShellMarkup(md, asset, label, options);
|
|
65
68
|
}
|
|
66
69
|
return buildDownloadLinkMarkup(md, asset, label);
|
|
67
70
|
};
|
|
@@ -107,7 +110,7 @@ export const createAgentRuntimeMarkdownRenderer = (options = {}) => {
|
|
|
107
110
|
if (asset.kind === "image") {
|
|
108
111
|
return buildImageMarkup(md, asset, alt, title);
|
|
109
112
|
}
|
|
110
|
-
return renderWorkspaceLink(md, asset, alt || asset.label);
|
|
113
|
+
return renderWorkspaceLink(md, asset, alt || asset.label, options);
|
|
111
114
|
};
|
|
112
115
|
md.core.ruler.after("inline", "agent_runtime_workspace_links", (state) => {
|
|
113
116
|
for (const blockToken of state.tokens) {
|
|
@@ -128,7 +131,7 @@ export const createAgentRuntimeMarkdownRenderer = (options = {}) => {
|
|
|
128
131
|
out.push(child);
|
|
129
132
|
continue;
|
|
130
133
|
}
|
|
131
|
-
out.push(toHtmlToken(state, renderWorkspaceLink(md, asset, next.content || asset.label)));
|
|
134
|
+
out.push(toHtmlToken(state, renderWorkspaceLink(md, asset, next.content || asset.label, options)));
|
|
132
135
|
idx += 2;
|
|
133
136
|
}
|
|
134
137
|
blockToken.children = out;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d4y/agent-runtime-nuxt",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Headless Nuxt module that connects a Nuxt app to an agent-runtime server. Ships server-side proxy routes (so your X-Agent-Runtime-App-Key never leaves the server) and a single composable, useAgentRuntime(), that exposes a typed chat client.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"agent"
|
|
53
53
|
],
|
|
54
54
|
"scripts": {
|
|
55
|
-
"prepack": "nuxt-module-build build",
|
|
56
|
-
"dev:prepare": "nuxt-module-build build --stub && nuxt-module-build prepare",
|
|
55
|
+
"prepack": "./node_modules/.bin/nuxt-module-build build",
|
|
56
|
+
"dev:prepare": "./node_modules/.bin/nuxt-module-build build --stub && ./node_modules/.bin/nuxt-module-build prepare",
|
|
57
57
|
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|