@revenexx/studio-integrations 0.5.1 → 0.7.0
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/CHANGELOG.md +428 -0
- package/README.md +48 -4
- package/dist/module.d.mts +17 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +10 -2
- package/dist/runtime/components/Integrations/CredentialCreateDialog.vue +43 -41
- package/dist/runtime/components/Integrations/CredentialDetailDialog.vue +123 -50
- package/dist/runtime/components/Integrations/CredentialRevenexxSource.vue +108 -71
- package/dist/runtime/components/Integrations/CredentialTypePicker.vue +12 -15
- package/dist/runtime/components/Integrations/DeadLettersPanel.vue +18 -17
- package/dist/runtime/components/Integrations/EventTypeCombobox.d.vue.ts +1 -0
- package/dist/runtime/components/Integrations/EventTypeCombobox.vue +7 -4
- package/dist/runtime/components/Integrations/EventTypeCombobox.vue.d.ts +1 -0
- package/dist/runtime/components/Integrations/ExpressionInput.d.vue.ts +4 -0
- package/dist/runtime/components/Integrations/ExpressionInput.vue +67 -37
- package/dist/runtime/components/Integrations/ExpressionInput.vue.d.ts +4 -0
- package/dist/runtime/components/Integrations/GroupFrameView.vue +30 -20
- package/dist/runtime/components/Integrations/Layout.vue +48 -4
- package/dist/runtime/components/Integrations/NodeConfigDynamicField.vue +23 -23
- package/dist/runtime/components/Integrations/NodeConfigDynamicSchema.vue +11 -13
- package/dist/runtime/components/Integrations/NodeConfigField.d.vue.ts +2 -0
- package/dist/runtime/components/Integrations/NodeConfigField.vue +187 -93
- package/dist/runtime/components/Integrations/NodeConfigField.vue.d.ts +2 -0
- package/dist/runtime/components/Integrations/NodeInspector.d.vue.ts +6 -0
- package/dist/runtime/components/Integrations/NodeInspector.vue +1157 -376
- package/dist/runtime/components/Integrations/NodeInspector.vue.d.ts +6 -0
- package/dist/runtime/components/Integrations/NodeLogo.d.vue.ts +12 -0
- package/dist/runtime/components/Integrations/NodeLogo.vue +2 -30
- package/dist/runtime/components/Integrations/NodeLogo.vue.d.ts +12 -0
- package/dist/runtime/components/Integrations/NodeMark.d.vue.ts +15 -0
- package/dist/runtime/components/Integrations/NodeMark.vue +79 -0
- package/dist/runtime/components/Integrations/NodeMark.vue.d.ts +15 -0
- package/dist/runtime/components/Integrations/NodeOutputSchema.d.vue.ts +21 -0
- package/dist/runtime/components/Integrations/NodeOutputSchema.vue +43 -0
- package/dist/runtime/components/Integrations/NodeOutputSchema.vue.d.ts +21 -0
- package/dist/runtime/components/Integrations/NodePalette.vue +122 -55
- package/dist/runtime/components/Integrations/QueryBuilder.vue +46 -38
- package/dist/runtime/components/Integrations/RunActionsMenu.vue +38 -12
- package/dist/runtime/components/Integrations/RunDetailPanel.vue +114 -62
- package/dist/runtime/components/Integrations/RunPayloadInput.vue +27 -13
- package/dist/runtime/components/Integrations/RunResponseModal.vue +11 -10
- package/dist/runtime/components/Integrations/RunsTable.d.vue.ts +0 -1
- package/dist/runtime/components/Integrations/RunsTable.vue +38 -16
- package/dist/runtime/components/Integrations/RunsTable.vue.d.ts +0 -1
- package/dist/runtime/components/Integrations/SftpAccountImportDialog.vue +8 -7
- package/dist/runtime/components/Integrations/Sidebar.vue +14 -10
- package/dist/runtime/components/Integrations/StickyNoteView.d.vue.ts +14 -4
- package/dist/runtime/components/Integrations/StickyNoteView.vue +38 -23
- package/dist/runtime/components/Integrations/StickyNoteView.vue.d.ts +14 -4
- package/dist/runtime/components/Integrations/TemplateCard.d.vue.ts +18 -0
- package/dist/runtime/components/Integrations/TemplateCard.vue +119 -0
- package/dist/runtime/components/Integrations/TemplateCard.vue.d.ts +18 -0
- package/dist/runtime/components/Integrations/TemplateFlowPreview.d.vue.ts +2 -2
- package/dist/runtime/components/Integrations/TemplateFlowPreview.vue +16 -18
- package/dist/runtime/components/Integrations/TemplateFlowPreview.vue.d.ts +2 -2
- package/dist/runtime/components/Integrations/WorkflowContextMenu.vue +34 -33
- package/dist/runtime/components/Integrations/WorkflowCreateDialog.vue +52 -67
- package/dist/runtime/components/Integrations/WorkflowDuplicateDialog.vue +8 -7
- package/dist/runtime/components/Integrations/WorkflowEdgeView.d.vue.ts +18 -4
- package/dist/runtime/components/Integrations/WorkflowEdgeView.vue +29 -11
- package/dist/runtime/components/Integrations/WorkflowEdgeView.vue.d.ts +18 -4
- package/dist/runtime/components/Integrations/WorkflowEditor.d.vue.ts +20 -1
- package/dist/runtime/components/Integrations/WorkflowEditor.vue +240 -116
- package/dist/runtime/components/Integrations/WorkflowEditor.vue.d.ts +20 -1
- package/dist/runtime/components/Integrations/WorkflowHistoryPanel.vue +28 -43
- package/dist/runtime/components/Integrations/WorkflowIconPicker.d.vue.ts +19 -1
- package/dist/runtime/components/Integrations/WorkflowIconPicker.vue +17 -7
- package/dist/runtime/components/Integrations/WorkflowIconPicker.vue.d.ts +19 -1
- package/dist/runtime/components/Integrations/WorkflowNodeView.d.vue.ts +4 -0
- package/dist/runtime/components/Integrations/WorkflowNodeView.vue +198 -56
- package/dist/runtime/components/Integrations/WorkflowNodeView.vue.d.ts +4 -0
- package/dist/runtime/components/Integrations/WorkflowRunReplayPanel.vue +56 -59
- package/dist/runtime/components/Integrations/WorkflowSettingsDialog.vue +28 -21
- package/dist/runtime/components/Integrations/WorkflowTagsInput.d.vue.ts +1 -0
- package/dist/runtime/components/Integrations/WorkflowTagsInput.vue +15 -9
- package/dist/runtime/components/Integrations/WorkflowTagsInput.vue.d.ts +1 -0
- package/dist/runtime/components/Integrations/WorkflowTriggerView.vue +15 -10
- package/dist/runtime/components/Integrations/WorkflowVariablesDialog.vue +50 -36
- package/dist/runtime/components/Integrations/WorkflowsTable.vue +126 -48
- package/dist/runtime/composables/integrationsApi.js +4 -2
- package/dist/runtime/composables/useCredentialTypes.js +8 -6
- package/dist/runtime/composables/useIntegrationsAudit.js +4 -3
- package/dist/runtime/composables/useIntegrationsCredentials.js +10 -8
- package/dist/runtime/composables/useIntegrationsDeadLetters.js +7 -6
- package/dist/runtime/composables/useIntegrationsFocus.d.ts +12 -0
- package/dist/runtime/composables/useIntegrationsLocale.d.ts +26 -0
- package/dist/runtime/composables/useIntegrationsLocale.js +8 -0
- package/dist/runtime/composables/useIntegrationsNodes.js +7 -5
- package/dist/runtime/composables/useIntegrationsRealtime.d.ts +149 -0
- package/dist/runtime/composables/useIntegrationsRealtime.js +80 -0
- package/dist/runtime/composables/useIntegrationsRevisions.js +9 -7
- package/dist/runtime/composables/useIntegrationsRuns.d.ts +1 -1
- package/dist/runtime/composables/useIntegrationsRuns.js +14 -7
- package/dist/runtime/composables/useIntegrationsSchedules.d.ts +4 -0
- package/dist/runtime/composables/useIntegrationsSchedules.js +10 -3
- package/dist/runtime/composables/useIntegrationsSecrets.js +14 -9
- package/dist/runtime/composables/useIntegrationsT.d.ts +35 -0
- package/dist/runtime/composables/useIntegrationsT.js +9 -0
- package/dist/runtime/composables/useIntegrationsTemplates.d.ts +3 -3
- package/dist/runtime/composables/useIntegrationsTemplates.js +28 -16
- package/dist/runtime/composables/useIntegrationsTriggers.js +10 -8
- package/dist/runtime/composables/useIntegrationsWorkflows.js +13 -7
- package/dist/runtime/composables/useLoadGate.d.ts +17 -0
- package/dist/runtime/composables/useLoadGate.js +8 -0
- package/dist/runtime/composables/useNodeConfigResolve.js +2 -1
- package/dist/runtime/data/branchReorder.d.ts +37 -0
- package/dist/runtime/data/branchReorder.js +71 -0
- package/dist/runtime/data/handleId.d.ts +23 -0
- package/dist/runtime/data/handleId.js +6 -0
- package/dist/runtime/data/integrationNodeCatalog.d.ts +41 -0
- package/dist/runtime/data/integrationNodeCatalog.js +14 -0
- package/dist/runtime/data/integrationTemplates.d.ts +48 -0
- package/dist/runtime/data/integrationTemplates.js +21 -0
- package/dist/runtime/data/integrationWorkflowSamples.js +1 -1
- package/dist/runtime/data/nodeIcons.d.ts +2 -0
- package/dist/runtime/data/nodeIcons.js +73 -0
- package/dist/runtime/data/nodeInputData.d.ts +16 -4
- package/dist/runtime/data/nodeInputData.js +4 -0
- package/dist/runtime/data/payloadForm.d.ts +9 -2
- package/dist/runtime/data/payloadForm.js +29 -4
- package/dist/runtime/data/portTone.d.ts +17 -0
- package/dist/runtime/data/portTone.js +7 -0
- package/dist/runtime/data/webhookAuth.d.ts +18 -0
- package/dist/runtime/data/webhookAuth.js +19 -0
- package/dist/runtime/data/workflowIconCatalog.js +4 -6
- package/dist/runtime/i18n/messages/de.json +1207 -0
- package/dist/runtime/i18n/messages/en.json +1207 -0
- package/dist/runtime/i18n/translate.d.ts +83 -0
- package/dist/runtime/i18n/translate.js +41 -0
- package/dist/runtime/pages/integrations/audit.vue +140 -37
- package/dist/runtime/pages/integrations/credentials/oauth-complete.vue +9 -6
- package/dist/runtime/pages/integrations/credentials.vue +180 -64
- package/dist/runtime/pages/integrations/index.vue +91 -92
- package/dist/runtime/pages/integrations/runs.vue +33 -21
- package/dist/runtime/pages/integrations/schedules.vue +88 -23
- package/dist/runtime/pages/integrations/secrets.vue +57 -35
- package/dist/runtime/pages/integrations/templates/[slug].vue +119 -88
- package/dist/runtime/pages/integrations/templates/index.vue +82 -103
- package/dist/runtime/pages/integrations/workflows/[id].vue +344 -91
- package/dist/runtime/pages/integrations/workflows/index.vue +23 -5
- package/dist/runtime/plugins/locale.d.ts +10 -0
- package/dist/runtime/plugins/locale.js +6 -0
- package/dist/runtime/plugins/realtime.client.d.ts +32 -0
- package/dist/runtime/plugins/realtime.client.js +4 -0
- package/dist/runtime/types/integrations.d.ts +65 -6
- package/dist/runtime/utils/apiError.d.ts +47 -0
- package/dist/runtime/utils/apiError.js +32 -0
- package/dist/runtime/utils/cockpitSources.d.ts +153 -0
- package/dist/runtime/utils/cockpitSources.js +14 -0
- package/dist/runtime/utils/credentialState.d.ts +24 -1
- package/dist/runtime/utils/credentialState.js +26 -11
- package/dist/runtime/utils/loadGate.d.ts +61 -0
- package/dist/runtime/utils/loadGate.js +22 -0
- package/dist/runtime/utils/localize.d.ts +46 -4
- package/dist/runtime/utils/localize.js +34 -7
- package/dist/runtime/utils/notify.d.ts +59 -0
- package/dist/runtime/utils/notify.js +21 -0
- package/dist/runtime/utils/pollBudget.d.ts +72 -0
- package/dist/runtime/utils/pollBudget.js +17 -0
- package/dist/runtime/utils/revenexxCredentialSource.d.ts +26 -0
- package/dist/runtime/utils/revenexxCredentialSource.js +8 -0
- package/dist/runtime/utils/schedule.d.ts +116 -0
- package/dist/runtime/utils/schedule.js +219 -0
- package/dist/runtime/utils/statusStyle.d.ts +26 -2
- package/dist/runtime/utils/statusStyle.js +9 -1
- package/dist/runtime/utils/validationFindings.d.ts +101 -0
- package/dist/runtime/utils/validationFindings.js +54 -0
- package/dist/runtime/utils/whenIdle.d.ts +42 -0
- package/dist/runtime/utils/whenIdle.js +12 -0
- package/dist/types.d.mts +2 -6
- package/package.json +10 -3
|
@@ -20,6 +20,12 @@ type __VLS_Props = {
|
|
|
20
20
|
dynamicOutputs?: Record<string, NodeManifestOutput[]>;
|
|
21
21
|
/** Workflow id — enables sampling real values from the latest run. */
|
|
22
22
|
workflowId?: number | string;
|
|
23
|
+
/**
|
|
24
|
+
* Config key → why the LAST SAVE refused it. Not live validation: the server
|
|
25
|
+
* is the only judge, so a fix shows once it is saved. Absent for a node the
|
|
26
|
+
* last save had no complaint about.
|
|
27
|
+
*/
|
|
28
|
+
refusedFields?: Record<string, string>;
|
|
23
29
|
};
|
|
24
30
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
25
31
|
close: () => any;
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `NodeMark` directly. This is a thin back-compat shim kept so
|
|
3
|
+
* that hosts still referencing the auto-registered `<IntegrationsNodeLogo>`
|
|
4
|
+
* (e.g. integrations/studio-ui `local-nodes.vue`) keep resolving the component
|
|
5
|
+
* after PO-194 renamed NodeLogo → NodeMark. Auto-registered components are
|
|
6
|
+
* public API surface for the hosts, so a silent delete breaks them at a
|
|
7
|
+
* different repo's build, invisible to this repo's CI.
|
|
8
|
+
*
|
|
9
|
+
* The old NodeLogo rendered "logo OR glyph, logo preferred" — exactly
|
|
10
|
+
* `NodeMark`'s `logo-only` behaviour (logo when present, glyph fallback). Drop
|
|
11
|
+
* this shim one release after the hosts have migrated to `NodeMark`.
|
|
12
|
+
*/
|
|
1
13
|
import type { NodeManifest } from '../../types/integrations.js';
|
|
2
14
|
type __VLS_Props = {
|
|
3
15
|
manifest: NodeManifest | null;
|
|
@@ -1,38 +1,10 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
|
|
3
|
-
import * as Lucide from "lucide-vue-next";
|
|
4
|
-
const props = defineProps({
|
|
2
|
+
defineProps({
|
|
5
3
|
manifest: { type: [Object, null], required: true },
|
|
6
4
|
size: { type: Number, required: false, default: 16 }
|
|
7
5
|
});
|
|
8
|
-
const failed = ref(false);
|
|
9
|
-
watch(() => props.manifest?.slug, () => {
|
|
10
|
-
failed.value = false;
|
|
11
|
-
});
|
|
12
|
-
const logoSrc = computed(() => {
|
|
13
|
-
const imgs = props.manifest?.images ?? [];
|
|
14
|
-
const logo = imgs.find((i) => i.category === "logo") ?? imgs[0];
|
|
15
|
-
return logo?.src ?? null;
|
|
16
|
-
});
|
|
17
|
-
const glyph = computed(() => {
|
|
18
|
-
const name = props.manifest?.icon;
|
|
19
|
-
if (!name) return Lucide.Box;
|
|
20
|
-
const cleaned = (name.includes(":") ? name.split(":").pop() : name).split("-").map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join("");
|
|
21
|
-
return Lucide[cleaned] || Lucide.Box;
|
|
22
|
-
});
|
|
23
6
|
</script>
|
|
24
7
|
|
|
25
8
|
<template>
|
|
26
|
-
<
|
|
27
|
-
v-if="logoSrc && !failed"
|
|
28
|
-
:src="logoSrc"
|
|
29
|
-
:width="size"
|
|
30
|
-
:height="size"
|
|
31
|
-
class="shrink-0 rounded-[3px] object-contain"
|
|
32
|
-
:style="{ width: `${size}px`, height: `${size}px` }"
|
|
33
|
-
alt=""
|
|
34
|
-
loading="lazy"
|
|
35
|
-
@error="failed = true"
|
|
36
|
-
>
|
|
37
|
-
<component :is="glyph" v-else :size="size" />
|
|
9
|
+
<IntegrationsNodeMark :manifest="manifest" :size="size" logo-only />
|
|
38
10
|
</template>
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Use `NodeMark` directly. This is a thin back-compat shim kept so
|
|
3
|
+
* that hosts still referencing the auto-registered `<IntegrationsNodeLogo>`
|
|
4
|
+
* (e.g. integrations/studio-ui `local-nodes.vue`) keep resolving the component
|
|
5
|
+
* after PO-194 renamed NodeLogo → NodeMark. Auto-registered components are
|
|
6
|
+
* public API surface for the hosts, so a silent delete breaks them at a
|
|
7
|
+
* different repo's build, invisible to this repo's CI.
|
|
8
|
+
*
|
|
9
|
+
* The old NodeLogo rendered "logo OR glyph, logo preferred" — exactly
|
|
10
|
+
* `NodeMark`'s `logo-only` behaviour (logo when present, glyph fallback). Drop
|
|
11
|
+
* this shim one release after the hosts have migrated to `NodeMark`.
|
|
12
|
+
*/
|
|
1
13
|
import type { NodeManifest } from '../../types/integrations.js';
|
|
2
14
|
type __VLS_Props = {
|
|
3
15
|
manifest: NodeManifest | null;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { NodeManifest } from '../../types/integrations.js';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
manifest: NodeManifest | null;
|
|
4
|
+
size?: number;
|
|
5
|
+
/** Render only the vendor logo (folder/group rows), never the glyph+badge composite. */
|
|
6
|
+
logoOnly?: boolean;
|
|
7
|
+
/** Overlay the vendor logo as a corner badge. Off in rows that already name the vendor. */
|
|
8
|
+
badge?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
11
|
+
size: number;
|
|
12
|
+
badge: boolean;
|
|
13
|
+
logoOnly: boolean;
|
|
14
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { computed, ref, watch } from "vue";
|
|
3
|
+
import { nodeIcon } from "../../data/nodeIcons";
|
|
4
|
+
const props = defineProps({
|
|
5
|
+
manifest: { type: [Object, null], required: true },
|
|
6
|
+
size: { type: Number, required: false, default: 16 },
|
|
7
|
+
logoOnly: { type: Boolean, required: false, default: false },
|
|
8
|
+
badge: { type: Boolean, required: false, default: true }
|
|
9
|
+
});
|
|
10
|
+
const failed = ref(false);
|
|
11
|
+
const { load: reloadCatalog } = useIntegrationsNodes();
|
|
12
|
+
const refreshed = ref(false);
|
|
13
|
+
watch(() => props.manifest?.slug, () => {
|
|
14
|
+
failed.value = false;
|
|
15
|
+
refreshed.value = false;
|
|
16
|
+
});
|
|
17
|
+
function onImageError() {
|
|
18
|
+
if (!refreshed.value) {
|
|
19
|
+
refreshed.value = true;
|
|
20
|
+
void reloadCatalog(true);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
failed.value = true;
|
|
24
|
+
}
|
|
25
|
+
function onImageLoad() {
|
|
26
|
+
refreshed.value = false;
|
|
27
|
+
}
|
|
28
|
+
const logoSrc = computed(() => {
|
|
29
|
+
const imgs = props.manifest?.images ?? [];
|
|
30
|
+
const logo = imgs.find((i) => i.category === "logo") ?? imgs[0];
|
|
31
|
+
return logo?.src ?? null;
|
|
32
|
+
});
|
|
33
|
+
const hasIcon = computed(() => typeof props.manifest?.icon === "string" && props.manifest.icon.trim() !== "");
|
|
34
|
+
const glyph = computed(() => nodeIcon(props.manifest?.icon));
|
|
35
|
+
const logoOk = computed(() => !!logoSrc.value && !failed.value);
|
|
36
|
+
const logoPrimary = computed(() => logoOk.value && (props.logoOnly || !hasIcon.value));
|
|
37
|
+
const composite = computed(() => props.badge && !props.logoOnly && logoOk.value && hasIcon.value);
|
|
38
|
+
const badgeSize = computed(() => Math.max(12, Math.round(props.size * 0.72)));
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<template>
|
|
42
|
+
<!-- Logo as the primary mark (folder rows, or a node without its own glyph). -->
|
|
43
|
+
<img
|
|
44
|
+
v-if="logoPrimary"
|
|
45
|
+
:src="logoSrc"
|
|
46
|
+
:width="size"
|
|
47
|
+
:height="size"
|
|
48
|
+
class="shrink-0 rounded-[3px] object-contain"
|
|
49
|
+
:style="{ width: `${size}px`, height: `${size}px` }"
|
|
50
|
+
alt=""
|
|
51
|
+
loading="lazy"
|
|
52
|
+
@error="onImageError"
|
|
53
|
+
@load="onImageLoad"
|
|
54
|
+
>
|
|
55
|
+
<!-- Per-node glyph, with the vendor logo as a plated corner badge when present. -->
|
|
56
|
+
<span
|
|
57
|
+
v-else
|
|
58
|
+
class="relative inline-flex shrink-0"
|
|
59
|
+
:style="{ width: `${size}px`, height: `${size}px` }"
|
|
60
|
+
>
|
|
61
|
+
<component :is="glyph" :size="size" :stroke-width="2.25" />
|
|
62
|
+
<!-- The badge deliberately sits 3px OUTSIDE this box (integrations-ui
|
|
63
|
+
geometry): it overlaps the glyph's corner instead of shrinking the
|
|
64
|
+
glyph. Consequence for call sites — a chip hosting a mark has to leave
|
|
65
|
+
its overflow visible; an `overflow-hidden` wrapper clips the badge. -->
|
|
66
|
+
<img
|
|
67
|
+
v-if="composite"
|
|
68
|
+
:src="logoSrc"
|
|
69
|
+
:width="badgeSize"
|
|
70
|
+
:height="badgeSize"
|
|
71
|
+
class="absolute rounded-[3px] bg-white object-contain p-px ring-1 ring-black/10"
|
|
72
|
+
:style="{ width: `${badgeSize}px`, height: `${badgeSize}px`, right: '-3px', bottom: '-3px' }"
|
|
73
|
+
alt=""
|
|
74
|
+
loading="lazy"
|
|
75
|
+
@error="onImageError"
|
|
76
|
+
@load="onImageLoad"
|
|
77
|
+
>
|
|
78
|
+
</span>
|
|
79
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { NodeManifest } from '../../types/integrations.js';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
manifest: NodeManifest | null;
|
|
4
|
+
size?: number;
|
|
5
|
+
/** Render only the vendor logo (folder/group rows), never the glyph+badge composite. */
|
|
6
|
+
logoOnly?: boolean;
|
|
7
|
+
/** Overlay the vendor logo as a corner badge. Off in rows that already name the vendor. */
|
|
8
|
+
badge?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
11
|
+
size: number;
|
|
12
|
+
badge: boolean;
|
|
13
|
+
logoOnly: boolean;
|
|
14
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PortEntry } from '../../data/nodeInputData.js';
|
|
2
|
+
/**
|
|
3
|
+
* The ports a node hands downstream, with their declared fields and whatever
|
|
4
|
+
* sample value is known for each.
|
|
5
|
+
*
|
|
6
|
+
* Rendered from one place — the Output tab (specs/node-configuration.md AC-4). It
|
|
7
|
+
* keeps its own file for readability rather than for reuse: the schema list is
|
|
8
|
+
* a self-contained tree with its own type glyphs and sample formatting, and
|
|
9
|
+
* inlining it would bury the tab's own markup.
|
|
10
|
+
*
|
|
11
|
+
* It was briefly read from a second place, an always-visible summary strip
|
|
12
|
+
* above the form. That was AC-5, retired before it ever held — see the Gaps
|
|
13
|
+
* section of the spec. Do not go looking for the second call site.
|
|
14
|
+
*/
|
|
15
|
+
type __VLS_Props = {
|
|
16
|
+
ports: PortEntry[];
|
|
17
|
+
/** Sample preview for a port, or for one field of it; null when unknown. */
|
|
18
|
+
valueAt: (port: string, field?: string) => string | null;
|
|
19
|
+
};
|
|
20
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
export default _default;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { portDotClass } from "../../data/portTone";
|
|
3
|
+
defineProps({
|
|
4
|
+
ports: { type: Array, required: true },
|
|
5
|
+
valueAt: { type: Function, required: true }
|
|
6
|
+
});
|
|
7
|
+
const t = useIntegrationsT();
|
|
8
|
+
const TYPE_GLYPHS = {
|
|
9
|
+
string: { char: "A", cls: "text-sky-600" },
|
|
10
|
+
number: { char: "#", cls: "text-amber-600" },
|
|
11
|
+
integer: { char: "#", cls: "text-amber-600" },
|
|
12
|
+
boolean: { char: "\u2713", cls: "text-emerald-600" },
|
|
13
|
+
object: { char: "{}", cls: "text-violet-600" },
|
|
14
|
+
array: { char: "[]", cls: "text-violet-600" }
|
|
15
|
+
};
|
|
16
|
+
function typeGlyph(dataType) {
|
|
17
|
+
return dataType ? TYPE_GLYPHS[dataType] ?? null : null;
|
|
18
|
+
}
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<div>
|
|
23
|
+
<div v-for="p in ports" :key="p.name" class="mb-3 space-y-1">
|
|
24
|
+
<div class="flex items-center gap-1.5">
|
|
25
|
+
<span class="size-1.5 rounded-full" :class="portDotClass(p.kind, p.name)" />
|
|
26
|
+
<span class="text-[10px] font-medium uppercase tracking-wider text-muted-foreground">{{ p.name }}</span>
|
|
27
|
+
</div>
|
|
28
|
+
<div v-if="p.fields.length" class="space-y-0.5">
|
|
29
|
+
<div v-for="f in p.fields" :key="f.name" class="flex min-w-0 items-baseline gap-1 font-mono text-[11px]">
|
|
30
|
+
<span v-if="typeGlyph(f.dataType)" class="shrink-0 font-semibold" :class="typeGlyph(f.dataType).cls">{{ typeGlyph(f.dataType).char }}</span>
|
|
31
|
+
<span class="shrink-0 text-slate-700">{{ f.name }}</span>
|
|
32
|
+
<span v-if="valueAt(p.name, f.name) !== null" class="min-w-0 truncate text-slate-400">: {{ valueAt(p.name, f.name) }}</span>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<p v-else class="text-[11px] leading-snug text-muted-foreground">
|
|
36
|
+
{{ t("integration.nodeInspector.output.schema.noFields") }}<template v-if="valueAt(p.name) !== null">{{ t("integration.nodeInspector.output.schema.sampledSuffix") }} <span class="font-mono">{{ valueAt(p.name) }}</span></template>.
|
|
37
|
+
</p>
|
|
38
|
+
</div>
|
|
39
|
+
<p v-if="!ports.length" class="text-xs leading-snug text-muted-foreground">
|
|
40
|
+
{{ t("integration.nodeInspector.output.schema.noOutputs") }}
|
|
41
|
+
</p>
|
|
42
|
+
</div>
|
|
43
|
+
</template>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PortEntry } from '../../data/nodeInputData.js';
|
|
2
|
+
/**
|
|
3
|
+
* The ports a node hands downstream, with their declared fields and whatever
|
|
4
|
+
* sample value is known for each.
|
|
5
|
+
*
|
|
6
|
+
* Rendered from one place — the Output tab (specs/node-configuration.md AC-4). It
|
|
7
|
+
* keeps its own file for readability rather than for reuse: the schema list is
|
|
8
|
+
* a self-contained tree with its own type glyphs and sample formatting, and
|
|
9
|
+
* inlining it would bury the tab's own markup.
|
|
10
|
+
*
|
|
11
|
+
* It was briefly read from a second place, an always-visible summary strip
|
|
12
|
+
* above the form. That was AC-5, retired before it ever held — see the Gaps
|
|
13
|
+
* section of the spec. Do not go looking for the second call site.
|
|
14
|
+
*/
|
|
15
|
+
type __VLS_Props = {
|
|
16
|
+
ports: PortEntry[];
|
|
17
|
+
/** Sample preview for a port, or for one field of it; null when unknown. */
|
|
18
|
+
valueAt: (port: string, field?: string) => string | null;
|
|
19
|
+
};
|
|
20
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
+
export default _default;
|