@burdenoff/microfe-store 2026.1014.1 → 2026.1031.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.
- package/dist/components/ExternalListingBadge.d.ts +15 -0
- package/dist/components/ExternalListingBadge.js +19 -0
- package/dist/components/ExternalListingBadge.js.map +1 -0
- package/dist/components/TemplateRevisionsQueue.d.ts +10 -0
- package/dist/components/TemplateRevisionsQueue.js +300 -0
- package/dist/components/TemplateRevisionsQueue.js.map +1 -0
- package/dist/components/WorkflowTemplatePreviewPanel.d.ts +50 -0
- package/dist/components/WorkflowTemplatePreviewPanel.js +221 -0
- package/dist/components/WorkflowTemplatePreviewPanel.js.map +1 -0
- package/dist/generated/global-operations.d.ts +14 -0
- package/dist/generated/global-operations.js +14 -0
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +377 -2
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +20345 -404
- package/dist/hooks/useStoreGraphQL.d.ts +4 -0
- package/dist/hooks/useStoreGraphQL.js.map +1 -1
- package/dist/pages/AdminSubmissionsQueuePage.js +447 -334
- package/dist/pages/AdminSubmissionsQueuePage.js.map +1 -1
- package/dist/pages/MarketplaceHomePage.js +134 -127
- package/dist/pages/MarketplaceHomePage.js.map +1 -1
- package/dist/pages/ProductDetailPage.js +628 -601
- package/dist/pages/ProductDetailPage.js.map +1 -1
- package/dist/translations/en.d.ts +6 -0
- package/dist/translations/en.js +6 -0
- package/dist/translations/en.js.map +1 -1
- package/dist/utils/externalListing.d.ts +35 -0
- package/dist/utils/externalListing.js +34 -0
- package/dist/utils/externalListing.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { useState as e } from "react";
|
|
2
|
+
import { ChevronDown as t, ChevronUp as n, Eraser as r, FileJson as i, KeyRound as a, Network as o, PlugZap as s, TextCursorInput as c } from "lucide-react";
|
|
3
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/WorkflowTemplatePreviewPanel.tsx
|
|
5
|
+
var d = "\n nodeTypes { nodeType nodeVersion publishType displayName }\n nodeCount\n edgeCount\n requiredInputs { name type label required usedBy }\n requiredCredentials { name kind nodeId nodeType nodeLabel }\n cleaningReport {\n connectionsCleared\n secretsRemoved\n pinnedDataRemoved\n clearedConnections { nodeId nodeType nodeLabel field }\n removedSecrets { nodeId nodeType nodeLabel field }\n }\n definitionJson\n";
|
|
6
|
+
function f(e) {
|
|
7
|
+
return e.nodeLabel ?? e.nodeId ?? "Workflow";
|
|
8
|
+
}
|
|
9
|
+
var p = "mb-2 flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]", m = "inline-flex items-center gap-1 rounded-md border border-[var(--color-border-seam)] bg-[var(--color-surface-default)] px-2 py-1 text-xs text-[var(--color-text-primary)]", h = ({ refs: e, total: t, testId: n }) => /* @__PURE__ */ u("ul", {
|
|
10
|
+
className: "mt-1.5 space-y-1",
|
|
11
|
+
"data-testid": n,
|
|
12
|
+
children: [e.map((e) => /* @__PURE__ */ u("li", {
|
|
13
|
+
className: "text-xs text-[var(--color-text-secondary)]",
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ l("span", {
|
|
16
|
+
className: "font-medium text-[var(--color-text-primary)]",
|
|
17
|
+
children: f(e)
|
|
18
|
+
}),
|
|
19
|
+
e.nodeType && /* @__PURE__ */ u("span", {
|
|
20
|
+
className: "text-[var(--color-text-muted)]",
|
|
21
|
+
children: [
|
|
22
|
+
" (",
|
|
23
|
+
e.nodeType,
|
|
24
|
+
")"
|
|
25
|
+
]
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ u("span", {
|
|
28
|
+
className: "font-mono",
|
|
29
|
+
children: [" · ", e.field]
|
|
30
|
+
})
|
|
31
|
+
]
|
|
32
|
+
}, `${e.nodeId ?? "root"}:${e.field}`)), t > e.length && /* @__PURE__ */ u("li", {
|
|
33
|
+
className: "text-xs text-[var(--color-text-muted)]",
|
|
34
|
+
children: [
|
|
35
|
+
"and ",
|
|
36
|
+
t - e.length,
|
|
37
|
+
" more not listed"
|
|
38
|
+
]
|
|
39
|
+
})]
|
|
40
|
+
}), g = "text-xs text-[var(--color-text-muted)]", _ = "text-xs text-[var(--color-text-secondary)]";
|
|
41
|
+
function v(e, t) {
|
|
42
|
+
return `${e} ${t}${e === 1 ? "" : "s"}`;
|
|
43
|
+
}
|
|
44
|
+
var y = ({ preview: e }) => /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("h4", {
|
|
45
|
+
className: p,
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ l(o, { className: "size-3.5" }),
|
|
48
|
+
"Nodes (",
|
|
49
|
+
v(e.nodeCount, "node"),
|
|
50
|
+
", ",
|
|
51
|
+
v(e.edgeCount, "connection"),
|
|
52
|
+
",",
|
|
53
|
+
" ",
|
|
54
|
+
v(e.nodeTypes.length, "node type"),
|
|
55
|
+
")"
|
|
56
|
+
]
|
|
57
|
+
}), e.nodeTypes.length === 0 ? /* @__PURE__ */ l("p", {
|
|
58
|
+
className: g,
|
|
59
|
+
children: "No node types found."
|
|
60
|
+
}) : /* @__PURE__ */ l("div", {
|
|
61
|
+
className: "flex flex-wrap gap-1.5",
|
|
62
|
+
"data-testid": "template-node-types",
|
|
63
|
+
children: e.nodeTypes.map((e) => /* @__PURE__ */ u("span", {
|
|
64
|
+
className: m,
|
|
65
|
+
title: e.nodeType,
|
|
66
|
+
children: [
|
|
67
|
+
e.displayName,
|
|
68
|
+
/* @__PURE__ */ u("span", {
|
|
69
|
+
className: "font-mono text-[var(--color-text-muted)]",
|
|
70
|
+
children: [
|
|
71
|
+
e.nodeType,
|
|
72
|
+
" · v",
|
|
73
|
+
e.nodeVersion
|
|
74
|
+
]
|
|
75
|
+
}),
|
|
76
|
+
e.publishType === "STORE" && /* @__PURE__ */ l("span", {
|
|
77
|
+
className: "rounded bg-[var(--color-status-info-bg-subtle)] px-1 text-[10px] text-[var(--color-status-info-text)]",
|
|
78
|
+
children: "Store"
|
|
79
|
+
})
|
|
80
|
+
]
|
|
81
|
+
}, e.nodeType))
|
|
82
|
+
})] }), b = ({ inputs: e }) => /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("h4", {
|
|
83
|
+
className: p,
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ l(c, { className: "size-3.5" }),
|
|
86
|
+
"Required inputs (",
|
|
87
|
+
e.length,
|
|
88
|
+
")"
|
|
89
|
+
]
|
|
90
|
+
}), e.length === 0 ? /* @__PURE__ */ l("p", {
|
|
91
|
+
className: g,
|
|
92
|
+
children: "The template reads no variables the importer has to fill in."
|
|
93
|
+
}) : /* @__PURE__ */ l("ul", {
|
|
94
|
+
className: "space-y-1",
|
|
95
|
+
"data-testid": "template-required-inputs",
|
|
96
|
+
children: e.map((e) => /* @__PURE__ */ u("li", {
|
|
97
|
+
className: _,
|
|
98
|
+
children: [
|
|
99
|
+
/* @__PURE__ */ l("span", {
|
|
100
|
+
className: "font-mono text-[var(--color-text-primary)]",
|
|
101
|
+
children: e.name
|
|
102
|
+
}),
|
|
103
|
+
e.type === "secret" && /* @__PURE__ */ l("span", {
|
|
104
|
+
className: "ml-1 rounded bg-[var(--color-status-warning-bg-subtle)] px-1 text-[10px] text-[var(--color-status-warning-text)]",
|
|
105
|
+
children: "secret"
|
|
106
|
+
}),
|
|
107
|
+
e.usedBy.length > 0 && /* @__PURE__ */ u("span", { children: [" · used by ", e.usedBy.join(", ")] })
|
|
108
|
+
]
|
|
109
|
+
}, e.name))
|
|
110
|
+
})] }), x = ({ credentials: e }) => /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("h4", {
|
|
111
|
+
className: p,
|
|
112
|
+
children: [
|
|
113
|
+
/* @__PURE__ */ l(s, { className: "size-3.5" }),
|
|
114
|
+
"Required credentials (",
|
|
115
|
+
e.length,
|
|
116
|
+
")"
|
|
117
|
+
]
|
|
118
|
+
}), e.length === 0 ? /* @__PURE__ */ l("p", {
|
|
119
|
+
className: g,
|
|
120
|
+
children: "No credentials needed."
|
|
121
|
+
}) : /* @__PURE__ */ l("ul", {
|
|
122
|
+
className: "space-y-1",
|
|
123
|
+
"data-testid": "template-required-credentials",
|
|
124
|
+
children: e.map((e) => {
|
|
125
|
+
let t = e.nodeLabel ?? e.nodeId, n = e.kind === "connection" ? "saved connection (cleared at submission)" : "credential lookup";
|
|
126
|
+
return /* @__PURE__ */ u("li", {
|
|
127
|
+
className: _,
|
|
128
|
+
children: [
|
|
129
|
+
/* @__PURE__ */ l("span", {
|
|
130
|
+
className: "font-medium text-[var(--color-text-primary)]",
|
|
131
|
+
children: e.name
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ u("span", { children: [" · ", n] }),
|
|
134
|
+
t && /* @__PURE__ */ u("span", { children: [" · ", t] })
|
|
135
|
+
]
|
|
136
|
+
}, `${e.kind}-${e.name}-${e.nodeId ?? ""}`);
|
|
137
|
+
})
|
|
138
|
+
})] }), S = ({ report: e }) => /* @__PURE__ */ u("div", {
|
|
139
|
+
className: "space-y-3 text-xs",
|
|
140
|
+
"data-testid": "template-cleaning-report",
|
|
141
|
+
children: [
|
|
142
|
+
/* @__PURE__ */ u("div", {
|
|
143
|
+
className: "flex flex-wrap gap-1.5",
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ u("span", {
|
|
146
|
+
className: m,
|
|
147
|
+
children: [
|
|
148
|
+
/* @__PURE__ */ l(s, { className: "size-3" }),
|
|
149
|
+
v(e.connectionsCleared, "connection"),
|
|
150
|
+
" cleared"
|
|
151
|
+
]
|
|
152
|
+
}),
|
|
153
|
+
/* @__PURE__ */ u("span", {
|
|
154
|
+
className: m,
|
|
155
|
+
children: [
|
|
156
|
+
/* @__PURE__ */ l(a, { className: "size-3" }),
|
|
157
|
+
v(e.secretsRemoved, "secret"),
|
|
158
|
+
" removed"
|
|
159
|
+
]
|
|
160
|
+
}),
|
|
161
|
+
/* @__PURE__ */ l("span", {
|
|
162
|
+
className: m,
|
|
163
|
+
children: e.pinnedDataRemoved ? "Pinned run data removed" : "No pinned run data"
|
|
164
|
+
})
|
|
165
|
+
]
|
|
166
|
+
}),
|
|
167
|
+
e.clearedConnections.length > 0 && /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
|
|
168
|
+
className: "font-medium text-[var(--color-text-secondary)]",
|
|
169
|
+
children: "Connections cleared"
|
|
170
|
+
}), /* @__PURE__ */ l(h, {
|
|
171
|
+
refs: e.clearedConnections,
|
|
172
|
+
total: e.connectionsCleared,
|
|
173
|
+
testId: "template-cleared-connections"
|
|
174
|
+
})] }),
|
|
175
|
+
e.removedSecrets.length > 0 && /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
|
|
176
|
+
className: "font-medium text-[var(--color-text-secondary)]",
|
|
177
|
+
children: "Secrets removed"
|
|
178
|
+
}), /* @__PURE__ */ l(h, {
|
|
179
|
+
refs: e.removedSecrets,
|
|
180
|
+
total: e.secretsRemoved,
|
|
181
|
+
testId: "template-removed-secrets"
|
|
182
|
+
})] })
|
|
183
|
+
]
|
|
184
|
+
}), C = ({ report: e }) => /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("h4", {
|
|
185
|
+
className: p,
|
|
186
|
+
children: [/* @__PURE__ */ l(r, { className: "size-3.5" }), "Cleaning report"]
|
|
187
|
+
}), e ? /* @__PURE__ */ l(S, { report: e }) : /* @__PURE__ */ l("p", {
|
|
188
|
+
className: g,
|
|
189
|
+
children: "No cleaning report was recorded for this template (it was stored before reports were kept)."
|
|
190
|
+
})] }), w = ({ definition: r }) => {
|
|
191
|
+
let [a, o] = e(!1);
|
|
192
|
+
return /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ u("button", {
|
|
193
|
+
type: "button",
|
|
194
|
+
onClick: () => o((e) => !e),
|
|
195
|
+
className: "inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] transition-colors hover:bg-[var(--color-surface-hover)]",
|
|
196
|
+
children: [
|
|
197
|
+
/* @__PURE__ */ l(i, { className: "size-3.5" }),
|
|
198
|
+
a ? "Hide definition" : "View cleaned definition",
|
|
199
|
+
l(a ? n : t, { className: "size-3" })
|
|
200
|
+
]
|
|
201
|
+
}), a && /* @__PURE__ */ l("pre", {
|
|
202
|
+
className: "mt-2 max-h-72 overflow-auto rounded-lg border border-[var(--color-border-seam)] bg-[var(--color-surface-default)] p-4 text-[11px] leading-relaxed text-[var(--color-text-primary)]",
|
|
203
|
+
children: JSON.stringify(r, null, 2)
|
|
204
|
+
})] });
|
|
205
|
+
}, T = ({ preview: e }) => /* @__PURE__ */ u("div", {
|
|
206
|
+
className: "space-y-5",
|
|
207
|
+
"data-testid": "workflow-template-preview",
|
|
208
|
+
children: [
|
|
209
|
+
/* @__PURE__ */ l(y, { preview: e }),
|
|
210
|
+
/* @__PURE__ */ u("div", {
|
|
211
|
+
className: "grid gap-5 sm:grid-cols-2",
|
|
212
|
+
children: [/* @__PURE__ */ l(b, { inputs: e.requiredInputs }), /* @__PURE__ */ l(x, { credentials: e.requiredCredentials })]
|
|
213
|
+
}),
|
|
214
|
+
/* @__PURE__ */ l(C, { report: e.cleaningReport }),
|
|
215
|
+
e.definitionJson && /* @__PURE__ */ l(w, { definition: e.definitionJson })
|
|
216
|
+
]
|
|
217
|
+
});
|
|
218
|
+
//#endregion
|
|
219
|
+
export { d as WORKFLOW_TEMPLATE_PREVIEW_FIELDS, T as WorkflowTemplatePreviewPanel };
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=WorkflowTemplatePreviewPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowTemplatePreviewPanel.js","names":[],"sources":["../../src/components/WorkflowTemplatePreviewPanel.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useState } from 'react';\nimport {\n ChevronDown,\n ChevronUp,\n Eraser,\n FileJson,\n KeyRound,\n Network,\n PlugZap,\n TextCursorInput,\n} from 'lucide-react';\n\n/**\n * Reviewer preview of a community workflow template (BOFF-10463): what the\n * template does before a store admin approves it. Mirrors the store service's\n * `WorkflowTemplatePreview` type.\n */\nexport type WorkflowTemplateFieldRef = {\n nodeId?: string | null;\n nodeType?: string | null;\n nodeLabel?: string | null;\n field: string;\n};\n\nexport type WorkflowTemplatePreview = {\n nodeTypes: Array<{\n nodeType: string;\n nodeVersion: string;\n publishType: string;\n displayName: string;\n }>;\n nodeCount: number;\n edgeCount: number;\n requiredInputs: Array<{\n name: string;\n type: string;\n label: string;\n required: boolean;\n usedBy: string[];\n }>;\n requiredCredentials: Array<{\n name: string;\n kind: string;\n nodeId?: string | null;\n nodeType?: string | null;\n nodeLabel?: string | null;\n }>;\n cleaningReport?: {\n connectionsCleared: number;\n secretsRemoved: number;\n pinnedDataRemoved: boolean;\n clearedConnections: WorkflowTemplateFieldRef[];\n removedSecrets: WorkflowTemplateFieldRef[];\n } | null;\n definitionJson?: Record<string, unknown> | null;\n};\n\n/** GraphQL selection for a `WorkflowTemplatePreview` field. */\nexport const WORKFLOW_TEMPLATE_PREVIEW_FIELDS = /* GraphQL */ `\n nodeTypes { nodeType nodeVersion publishType displayName }\n nodeCount\n edgeCount\n requiredInputs { name type label required usedBy }\n requiredCredentials { name kind nodeId nodeType nodeLabel }\n cleaningReport {\n connectionsCleared\n secretsRemoved\n pinnedDataRemoved\n clearedConnections { nodeId nodeType nodeLabel field }\n removedSecrets { nodeId nodeType nodeLabel field }\n }\n definitionJson\n`;\n\nfunction nodeName(ref: { nodeLabel?: string | null; nodeId?: string | null }): string {\n return ref.nodeLabel ?? ref.nodeId ?? 'Workflow';\n}\n\nconst SECTION_TITLE =\n 'mb-2 flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]';\nconst CHIP =\n 'inline-flex items-center gap-1 rounded-md border border-[var(--color-border-seam)] bg-[var(--color-surface-default)] px-2 py-1 text-xs text-[var(--color-text-primary)]';\n\nconst FieldRefList: FC<{ refs: WorkflowTemplateFieldRef[]; total: number; testId: string }> = ({\n refs,\n total,\n testId,\n}) => (\n <ul className=\"mt-1.5 space-y-1\" data-testid={testId}>\n {/* A field path is unique within its node, so node id + path is a stable key. */}\n {refs.map((ref) => (\n <li\n key={`${ref.nodeId ?? 'root'}:${ref.field}`}\n className=\"text-xs text-[var(--color-text-secondary)]\"\n >\n <span className=\"font-medium text-[var(--color-text-primary)]\">{nodeName(ref)}</span>\n {ref.nodeType && <span className=\"text-[var(--color-text-muted)]\"> ({ref.nodeType})</span>}\n <span className=\"font-mono\"> · {ref.field}</span>\n </li>\n ))}\n {total > refs.length && (\n <li className=\"text-xs text-[var(--color-text-muted)]\">\n and {total - refs.length} more not listed\n </li>\n )}\n </ul>\n);\n\ntype Preview = WorkflowTemplatePreview;\ntype CleaningReport = NonNullable<Preview['cleaningReport']>;\n\nconst MUTED = 'text-xs text-[var(--color-text-muted)]';\nconst ROW = 'text-xs text-[var(--color-text-secondary)]';\n\nfunction plural(count: number, word: string): string {\n return `${count} ${word}${count === 1 ? '' : 's'}`;\n}\n\nconst NodeTypesSection: FC<{ preview: Preview }> = ({ preview }) => (\n <div>\n <h4 className={SECTION_TITLE}>\n <Network className=\"size-3.5\" />\n Nodes ({plural(preview.nodeCount, 'node')}, {plural(preview.edgeCount, 'connection')},{' '}\n {plural(preview.nodeTypes.length, 'node type')})\n </h4>\n {preview.nodeTypes.length === 0 ? (\n <p className={MUTED}>No node types found.</p>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\" data-testid=\"template-node-types\">\n {preview.nodeTypes.map((node) => (\n <span key={node.nodeType} className={CHIP} title={node.nodeType}>\n {node.displayName}\n <span className=\"font-mono text-[var(--color-text-muted)]\">\n {node.nodeType} · v{node.nodeVersion}\n </span>\n {node.publishType === 'STORE' && (\n <span className=\"rounded bg-[var(--color-status-info-bg-subtle)] px-1 text-[10px] text-[var(--color-status-info-text)]\">\n Store\n </span>\n )}\n </span>\n ))}\n </div>\n )}\n </div>\n);\n\nconst RequiredInputsSection: FC<{ inputs: Preview['requiredInputs'] }> = ({ inputs }) => (\n <div>\n <h4 className={SECTION_TITLE}>\n <TextCursorInput className=\"size-3.5\" />\n Required inputs ({inputs.length})\n </h4>\n {inputs.length === 0 ? (\n <p className={MUTED}>The template reads no variables the importer has to fill in.</p>\n ) : (\n <ul className=\"space-y-1\" data-testid=\"template-required-inputs\">\n {inputs.map((input) => (\n <li key={input.name} className={ROW}>\n <span className=\"font-mono text-[var(--color-text-primary)]\">{input.name}</span>\n {input.type === 'secret' && (\n <span className=\"ml-1 rounded bg-[var(--color-status-warning-bg-subtle)] px-1 text-[10px] text-[var(--color-status-warning-text)]\">\n secret\n </span>\n )}\n {input.usedBy.length > 0 && <span> · used by {input.usedBy.join(', ')}</span>}\n </li>\n ))}\n </ul>\n )}\n </div>\n);\n\nconst RequiredCredentialsSection: FC<{ credentials: Preview['requiredCredentials'] }> = ({\n credentials,\n}) => (\n <div>\n <h4 className={SECTION_TITLE}>\n <PlugZap className=\"size-3.5\" />\n Required credentials ({credentials.length})\n </h4>\n {credentials.length === 0 ? (\n <p className={MUTED}>No credentials needed.</p>\n ) : (\n <ul className=\"space-y-1\" data-testid=\"template-required-credentials\">\n {credentials.map((credential) => {\n const where = credential.nodeLabel ?? credential.nodeId;\n const kind =\n credential.kind === 'connection'\n ? 'saved connection (cleared at submission)'\n : 'credential lookup';\n return (\n <li\n key={`${credential.kind}-${credential.name}-${credential.nodeId ?? ''}`}\n className={ROW}\n >\n <span className=\"font-medium text-[var(--color-text-primary)]\">\n {credential.name}\n </span>\n <span> · {kind}</span>\n {where && <span> · {where}</span>}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n);\n\nconst CleaningReportDetails: FC<{ report: CleaningReport }> = ({ report }) => (\n <div className=\"space-y-3 text-xs\" data-testid=\"template-cleaning-report\">\n <div className=\"flex flex-wrap gap-1.5\">\n <span className={CHIP}>\n <PlugZap className=\"size-3\" />\n {plural(report.connectionsCleared, 'connection')} cleared\n </span>\n <span className={CHIP}>\n <KeyRound className=\"size-3\" />\n {plural(report.secretsRemoved, 'secret')} removed\n </span>\n <span className={CHIP}>\n {report.pinnedDataRemoved ? 'Pinned run data removed' : 'No pinned run data'}\n </span>\n </div>\n {report.clearedConnections.length > 0 && (\n <div>\n <p className=\"font-medium text-[var(--color-text-secondary)]\">Connections cleared</p>\n <FieldRefList\n refs={report.clearedConnections}\n total={report.connectionsCleared}\n testId=\"template-cleared-connections\"\n />\n </div>\n )}\n {report.removedSecrets.length > 0 && (\n <div>\n <p className=\"font-medium text-[var(--color-text-secondary)]\">Secrets removed</p>\n <FieldRefList\n refs={report.removedSecrets}\n total={report.secretsRemoved}\n testId=\"template-removed-secrets\"\n />\n </div>\n )}\n </div>\n);\n\nconst CleaningReportSection: FC<{ report: Preview['cleaningReport'] }> = ({ report }) => (\n <div>\n <h4 className={SECTION_TITLE}>\n <Eraser className=\"size-3.5\" />\n Cleaning report\n </h4>\n {report ? (\n <CleaningReportDetails report={report} />\n ) : (\n <p className={MUTED}>\n No cleaning report was recorded for this template (it was stored before reports were kept).\n </p>\n )}\n </div>\n);\n\nconst DefinitionSection: FC<{ definition: Record<string, unknown> }> = ({ definition }) => {\n const [open, setOpen] = useState(false);\n return (\n <div>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-1.5 text-xs font-medium text-[var(--color-text-secondary)] transition-colors hover:bg-[var(--color-surface-hover)]\"\n >\n <FileJson className=\"size-3.5\" />\n {open ? 'Hide definition' : 'View cleaned definition'}\n {open ? <ChevronUp className=\"size-3\" /> : <ChevronDown className=\"size-3\" />}\n </button>\n {open && (\n <pre className=\"mt-2 max-h-72 overflow-auto rounded-lg border border-[var(--color-border-seam)] bg-[var(--color-surface-default)] p-4 text-[11px] leading-relaxed text-[var(--color-text-primary)]\">\n {JSON.stringify(definition, null, 2)}\n </pre>\n )}\n </div>\n );\n};\n\nexport const WorkflowTemplatePreviewPanel: FC<{ preview: WorkflowTemplatePreview }> = ({\n preview,\n}) => (\n <div className=\"space-y-5\" data-testid=\"workflow-template-preview\">\n <NodeTypesSection preview={preview} />\n <div className=\"grid gap-5 sm:grid-cols-2\">\n <RequiredInputsSection inputs={preview.requiredInputs} />\n <RequiredCredentialsSection credentials={preview.requiredCredentials} />\n </div>\n <CleaningReportSection report={preview.cleaningReport} />\n {preview.definitionJson && <DefinitionSection definition={preview.definitionJson} />}\n </div>\n);\n"],"mappings":"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"}
|
|
@@ -897,6 +897,8 @@ export type BrowseStoreQuery = {
|
|
|
897
897
|
category?: string | null;
|
|
898
898
|
tags: Array<string>;
|
|
899
899
|
publishedAt?: string | null;
|
|
900
|
+
externalService?: string | null;
|
|
901
|
+
externalUrl?: string | null;
|
|
900
902
|
publisher?: {
|
|
901
903
|
__typename?: 'Publisher';
|
|
902
904
|
id: string;
|
|
@@ -1227,6 +1229,8 @@ export type HomeGroupedProductsQuery = {
|
|
|
1227
1229
|
category?: string | null;
|
|
1228
1230
|
tags: Array<string>;
|
|
1229
1231
|
publishedAt?: string | null;
|
|
1232
|
+
externalService?: string | null;
|
|
1233
|
+
externalUrl?: string | null;
|
|
1230
1234
|
publisher?: {
|
|
1231
1235
|
__typename?: 'Publisher';
|
|
1232
1236
|
id: string;
|
|
@@ -1257,6 +1261,8 @@ export type HomeGroupedProductsQuery = {
|
|
|
1257
1261
|
category?: string | null;
|
|
1258
1262
|
tags: Array<string>;
|
|
1259
1263
|
publishedAt?: string | null;
|
|
1264
|
+
externalService?: string | null;
|
|
1265
|
+
externalUrl?: string | null;
|
|
1260
1266
|
publisher?: {
|
|
1261
1267
|
__typename?: 'Publisher';
|
|
1262
1268
|
id: string;
|
|
@@ -1287,6 +1293,8 @@ export type HomeGroupedProductsQuery = {
|
|
|
1287
1293
|
category?: string | null;
|
|
1288
1294
|
tags: Array<string>;
|
|
1289
1295
|
publishedAt?: string | null;
|
|
1296
|
+
externalService?: string | null;
|
|
1297
|
+
externalUrl?: string | null;
|
|
1290
1298
|
publisher?: {
|
|
1291
1299
|
__typename?: 'Publisher';
|
|
1292
1300
|
id: string;
|
|
@@ -1317,6 +1325,8 @@ export type HomeGroupedProductsQuery = {
|
|
|
1317
1325
|
category?: string | null;
|
|
1318
1326
|
tags: Array<string>;
|
|
1319
1327
|
publishedAt?: string | null;
|
|
1328
|
+
externalService?: string | null;
|
|
1329
|
+
externalUrl?: string | null;
|
|
1320
1330
|
publisher?: {
|
|
1321
1331
|
__typename?: 'Publisher';
|
|
1322
1332
|
id: string;
|
|
@@ -1364,6 +1374,8 @@ export type StoreProductDetailsQuery = {
|
|
|
1364
1374
|
category?: string | null;
|
|
1365
1375
|
tags: Array<string>;
|
|
1366
1376
|
publishedAt?: string | null;
|
|
1377
|
+
externalService?: string | null;
|
|
1378
|
+
externalUrl?: string | null;
|
|
1367
1379
|
createdAt: string;
|
|
1368
1380
|
updatedAt: string;
|
|
1369
1381
|
subType?: string | null;
|
|
@@ -1437,6 +1449,8 @@ export type StoreProductDetailsQuery = {
|
|
|
1437
1449
|
category?: string | null;
|
|
1438
1450
|
tags: Array<string>;
|
|
1439
1451
|
publishedAt?: string | null;
|
|
1452
|
+
externalService?: string | null;
|
|
1453
|
+
externalUrl?: string | null;
|
|
1440
1454
|
publisher?: {
|
|
1441
1455
|
__typename?: 'Publisher';
|
|
1442
1456
|
id: string;
|
|
@@ -1082,6 +1082,8 @@ var V = t`
|
|
|
1082
1082
|
category
|
|
1083
1083
|
tags
|
|
1084
1084
|
publishedAt
|
|
1085
|
+
externalService
|
|
1086
|
+
externalUrl
|
|
1085
1087
|
publisher {
|
|
1086
1088
|
id
|
|
1087
1089
|
name
|
|
@@ -1515,6 +1517,8 @@ var J = t`
|
|
|
1515
1517
|
category
|
|
1516
1518
|
tags
|
|
1517
1519
|
publishedAt
|
|
1520
|
+
externalService
|
|
1521
|
+
externalUrl
|
|
1518
1522
|
publisher {
|
|
1519
1523
|
id
|
|
1520
1524
|
name
|
|
@@ -1543,6 +1547,8 @@ var J = t`
|
|
|
1543
1547
|
category
|
|
1544
1548
|
tags
|
|
1545
1549
|
publishedAt
|
|
1550
|
+
externalService
|
|
1551
|
+
externalUrl
|
|
1546
1552
|
publisher {
|
|
1547
1553
|
id
|
|
1548
1554
|
name
|
|
@@ -1571,6 +1577,8 @@ var J = t`
|
|
|
1571
1577
|
category
|
|
1572
1578
|
tags
|
|
1573
1579
|
publishedAt
|
|
1580
|
+
externalService
|
|
1581
|
+
externalUrl
|
|
1574
1582
|
publisher {
|
|
1575
1583
|
id
|
|
1576
1584
|
name
|
|
@@ -1599,6 +1607,8 @@ var J = t`
|
|
|
1599
1607
|
category
|
|
1600
1608
|
tags
|
|
1601
1609
|
publishedAt
|
|
1610
|
+
externalService
|
|
1611
|
+
externalUrl
|
|
1602
1612
|
publisher {
|
|
1603
1613
|
id
|
|
1604
1614
|
name
|
|
@@ -1660,6 +1670,8 @@ var Y = t`
|
|
|
1660
1670
|
category
|
|
1661
1671
|
tags
|
|
1662
1672
|
publishedAt
|
|
1673
|
+
externalService
|
|
1674
|
+
externalUrl
|
|
1663
1675
|
createdAt
|
|
1664
1676
|
updatedAt
|
|
1665
1677
|
subType
|
|
@@ -1728,6 +1740,8 @@ var Y = t`
|
|
|
1728
1740
|
category
|
|
1729
1741
|
tags
|
|
1730
1742
|
publishedAt
|
|
1743
|
+
externalService
|
|
1744
|
+
externalUrl
|
|
1731
1745
|
publisher {
|
|
1732
1746
|
id
|
|
1733
1747
|
name
|