@flowdrop/flowdrop 1.11.0 → 1.13.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.
Files changed (84) hide show
  1. package/dist/api/enhanced-client.d.ts +29 -16
  2. package/dist/api/enhanced-client.js +0 -14
  3. package/dist/components/ConfigForm.svelte +1 -0
  4. package/dist/components/PipelineStatus.svelte +9 -12
  5. package/dist/components/SchemaForm.svelte +1 -0
  6. package/dist/components/WorkflowEditor.svelte +3 -0
  7. package/dist/components/form/FormAutocomplete.svelte +67 -10
  8. package/dist/components/form/FormField.svelte +21 -0
  9. package/dist/components/form/FormFieldLight.svelte +1 -0
  10. package/dist/components/interrupt/ChoicePrompt.svelte +24 -5
  11. package/dist/components/interrupt/ConfirmationPrompt.svelte +5 -0
  12. package/dist/components/interrupt/InterruptBubble.svelte +88 -17
  13. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +11 -0
  14. package/dist/components/interrupt/ReviewPrompt.svelte +20 -0
  15. package/dist/components/interrupt/TextInputPrompt.svelte +5 -0
  16. package/dist/components/nodes/GatewayNode.svelte +2 -6
  17. package/dist/components/nodes/WorkflowNode.svelte +2 -6
  18. package/dist/components/playground/ChatBubble.svelte +289 -0
  19. package/dist/components/playground/ChatBubble.svelte.d.ts +10 -0
  20. package/dist/components/playground/ChatInput.svelte +359 -0
  21. package/dist/components/playground/ChatInput.svelte.d.ts +14 -0
  22. package/dist/components/playground/ChatPanel.svelte +100 -724
  23. package/dist/components/playground/ChatPanel.svelte.d.ts +9 -26
  24. package/dist/components/playground/ControlPanel.svelte +496 -0
  25. package/dist/components/playground/ControlPanel.svelte.d.ts +20 -0
  26. package/dist/components/playground/ExecutionConsole.svelte +163 -0
  27. package/dist/components/playground/ExecutionConsole.svelte.d.ts +14 -0
  28. package/dist/components/playground/HierarchyTrail.svelte +88 -0
  29. package/dist/components/playground/HierarchyTrail.svelte.d.ts +7 -0
  30. package/dist/components/playground/LogRow.svelte +178 -0
  31. package/dist/components/playground/LogRow.svelte.d.ts +8 -0
  32. package/dist/components/playground/MessageBubble.stories.svelte +89 -0
  33. package/dist/components/playground/MessageBubble.svelte +25 -737
  34. package/dist/components/playground/MessageBubble.svelte.d.ts +3 -11
  35. package/dist/components/playground/MessageCard.svelte +106 -0
  36. package/dist/components/playground/MessageCard.svelte.d.ts +10 -0
  37. package/dist/components/playground/MessageMarkdown.svelte +160 -0
  38. package/dist/components/playground/MessageMarkdown.svelte.d.ts +7 -0
  39. package/dist/components/playground/MessageNotice.svelte +120 -0
  40. package/dist/components/playground/MessageNotice.svelte.d.ts +9 -0
  41. package/dist/components/playground/MessageStream.svelte +367 -0
  42. package/dist/components/playground/MessageStream.svelte.d.ts +27 -0
  43. package/dist/components/playground/MessageTagChip.svelte +99 -0
  44. package/dist/components/playground/MessageTagChip.svelte.d.ts +7 -0
  45. package/dist/components/playground/MessageTagStrip.svelte +37 -0
  46. package/dist/components/playground/MessageTagStrip.svelte.d.ts +7 -0
  47. package/dist/components/playground/PipelineKanbanView.svelte +284 -0
  48. package/dist/components/playground/PipelineKanbanView.svelte.d.ts +11 -0
  49. package/dist/components/playground/PipelinePanel.svelte +204 -65
  50. package/dist/components/playground/PipelinePanel.svelte.d.ts +3 -1
  51. package/dist/components/playground/PipelineTableView.svelte +376 -0
  52. package/dist/components/playground/PipelineTableView.svelte.d.ts +11 -0
  53. package/dist/components/playground/Playground.svelte +262 -1200
  54. package/dist/components/playground/Playground.svelte.d.ts +0 -13
  55. package/dist/components/playground/PlaygroundStudio.svelte +113 -61
  56. package/dist/components/playground/PlaygroundStudio.svelte.d.ts +3 -1
  57. package/dist/components/playground/messageDisplay.d.ts +19 -0
  58. package/dist/components/playground/messageDisplay.js +62 -0
  59. package/dist/components/playground/pipelineViewUtils.svelte.d.ts +22 -0
  60. package/dist/components/playground/pipelineViewUtils.svelte.js +77 -0
  61. package/dist/form/autocomplete.d.ts +1 -0
  62. package/dist/form/autocomplete.js +1 -0
  63. package/dist/form/index.d.ts +17 -0
  64. package/dist/form/index.js +19 -0
  65. package/dist/messages/defaults.d.ts +29 -0
  66. package/dist/messages/defaults.js +30 -0
  67. package/dist/playground/index.d.ts +6 -1
  68. package/dist/playground/index.js +6 -0
  69. package/dist/playground/mount.d.ts +3 -0
  70. package/dist/playground/mount.js +3 -2
  71. package/dist/schemas/v1/workflow.schema.json +10 -1
  72. package/dist/services/categoriesApi.d.ts +2 -1
  73. package/dist/services/categoriesApi.js +5 -3
  74. package/dist/services/portConfigApi.d.ts +2 -1
  75. package/dist/services/portConfigApi.js +5 -3
  76. package/dist/stores/playgroundStore.svelte.d.ts +6 -0
  77. package/dist/stores/playgroundStore.svelte.js +21 -1
  78. package/dist/svelte-app.d.ts +1 -0
  79. package/dist/svelte-app.js +5 -5
  80. package/dist/types/index.d.ts +41 -2
  81. package/dist/types/playground.d.ts +81 -2
  82. package/dist/types/playground.js +19 -7
  83. package/dist/utils/nodeStatus.js +15 -5
  84. package/package.json +6 -1
@@ -1,21 +1,13 @@
1
- import type { PlaygroundMessage } from '../../types/playground.js';
2
- /**
3
- * Component props
4
- */
1
+ import { type PlaygroundMessage } from '../../types/playground.js';
5
2
  interface Props {
6
- /** The message to display */
7
3
  message: PlaygroundMessage;
8
- /** Whether to show the timestamp */
9
4
  showTimestamp?: boolean;
10
- /** Whether this is the last message (affects styling) */
11
5
  isLast?: boolean;
12
- /** Whether to render markdown content */
13
6
  enableMarkdown?: boolean;
14
7
  /**
15
8
  * Use compact display mode for system messages.
16
- * When true, system messages are rendered as minimal inline text
17
- * instead of full chat bubbles to reduce visual noise.
18
- * @default true
9
+ * When true (default), system messages without an explicit `display`
10
+ * default to the 'notice' layout instead of 'bubble'.
19
11
  */
20
12
  compactSystemMessages?: boolean;
21
13
  }
@@ -0,0 +1,106 @@
1
+ <!--
2
+ MessageCard — vertical card layout: hierarchy (top) · body (middle) · tags (bottom).
3
+ Picks up shared markdown typography via <MessageMarkdown>.
4
+ -->
5
+
6
+ <script lang="ts">
7
+ import type { PlaygroundMessage } from '../../types/playground.js';
8
+ import HierarchyTrail from './HierarchyTrail.svelte';
9
+ import MessageTagStrip from './MessageTagStrip.svelte';
10
+ import MessageMarkdown from './MessageMarkdown.svelte';
11
+ import { formatTimestamp, getRoleLabel } from './messageDisplay.js';
12
+ import { m } from '../../messages/index.js';
13
+
14
+ interface Props {
15
+ message: PlaygroundMessage;
16
+ showTimestamp?: boolean;
17
+ isLast?: boolean;
18
+ enableMarkdown?: boolean;
19
+ }
20
+
21
+ let { message, showTimestamp = true, isLast = false, enableMarkdown = true }: Props = $props();
22
+
23
+ const level = $derived(message.metadata?.level);
24
+ const hierarchy = $derived(message.hierarchy ?? []);
25
+ const tags = $derived(message.tags ?? []);
26
+ const roleLabel = $derived(getRoleLabel(message, m().playground.roles));
27
+ // Logs render as plain text; everything else respects enableMarkdown.
28
+ const markdown = $derived(enableMarkdown && message.role !== 'log');
29
+ </script>
30
+
31
+ <article
32
+ class="message-card"
33
+ class:message-card--last={isLast}
34
+ class:message-card--error={level === 'error'}
35
+ class:message-card--warning={level === 'warning'}
36
+ aria-label={roleLabel}
37
+ >
38
+ {#if hierarchy.length > 0 || showTimestamp}
39
+ <header class="message-card__header">
40
+ <HierarchyTrail items={hierarchy} />
41
+ {#if showTimestamp}
42
+ <time
43
+ class="message-card__timestamp"
44
+ datetime={message.timestamp}
45
+ aria-label="sent at {formatTimestamp(message.timestamp)}"
46
+ >{formatTimestamp(message.timestamp)}</time>
47
+ {/if}
48
+ </header>
49
+ {/if}
50
+ <MessageMarkdown content={message.content} enableMarkdown={markdown} />
51
+ <MessageTagStrip {tags} />
52
+ </article>
53
+
54
+ <style>
55
+ .message-card {
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: var(--fd-space-xs);
59
+ margin: var(--fd-space-3xs) var(--fd-space-xl);
60
+ padding: var(--fd-space-sm) var(--fd-space-md);
61
+ border-radius: var(--fd-radius-lg);
62
+ background-color: var(--fd-card);
63
+ border: 1px solid var(--fd-border);
64
+ color: var(--fd-card-foreground);
65
+ font-size: var(--fd-text-sm);
66
+ line-height: var(--fd-leading-normal);
67
+ /* fd-fade-in + reduced-motion guard live in MessageStream.svelte */
68
+ animation: fd-fade-in 0.18s ease-out;
69
+ }
70
+
71
+ .message-card--last {
72
+ margin-bottom: var(--fd-space-xl);
73
+ }
74
+
75
+ .message-card--error {
76
+ border-color: var(--fd-error);
77
+ background-color: color-mix(in srgb, var(--fd-error) 6%, var(--fd-card));
78
+ }
79
+
80
+ .message-card--warning {
81
+ border-color: var(--fd-warning);
82
+ background-color: color-mix(in srgb, var(--fd-warning) 6%, var(--fd-card));
83
+ }
84
+
85
+ .message-card__header {
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ gap: var(--fd-space-sm);
90
+ min-width: 0;
91
+ }
92
+
93
+ .message-card__timestamp {
94
+ flex-shrink: 0;
95
+ font-size: 0.625rem;
96
+ font-family: var(--fd-font-mono);
97
+ color: var(--fd-muted-foreground);
98
+ }
99
+
100
+ @media (max-width: 640px) {
101
+ .message-card {
102
+ margin: var(--fd-space-3xs) var(--fd-space-md);
103
+ padding: var(--fd-space-xs) var(--fd-space-sm);
104
+ }
105
+ }
106
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { PlaygroundMessage } from '../../types/playground.js';
2
+ interface Props {
3
+ message: PlaygroundMessage;
4
+ showTimestamp?: boolean;
5
+ isLast?: boolean;
6
+ enableMarkdown?: boolean;
7
+ }
8
+ declare const MessageCard: import("svelte").Component<Props, {}, "">;
9
+ type MessageCard = ReturnType<typeof MessageCard>;
10
+ export default MessageCard;
@@ -0,0 +1,160 @@
1
+ <!--
2
+ MessageMarkdown Component
3
+
4
+ Renders message content. Wraps marked + sanitizeHtml and applies the
5
+ shared markdown typography. Used by ChatBubble (assistant/system/user)
6
+ and MessageCard so they share one set of typography rules.
7
+
8
+ Consumers scope overrides via :global(.message-markdown ...) from their
9
+ own component CSS — see ChatBubble's user-bubble rules.
10
+
11
+ When `enableMarkdown` is false (or the role is 'log'), the content is
12
+ rendered as plain text.
13
+ -->
14
+
15
+ <script lang="ts">
16
+ import { marked } from 'marked';
17
+ import { sanitizeHtml } from '../../utils/sanitize.js';
18
+
19
+ interface Props {
20
+ content: string;
21
+ enableMarkdown?: boolean;
22
+ }
23
+
24
+ let { content, enableMarkdown = true }: Props = $props();
25
+
26
+ const rendered = $derived(
27
+ enableMarkdown ? sanitizeHtml(marked.parse(content || '') as string) : null
28
+ );
29
+ </script>
30
+
31
+ <div class="message-markdown">
32
+ {#if rendered !== null}
33
+ <!-- Markdown sanitized via DOMPurify in sanitizeHtml. -->
34
+ <!-- eslint-disable-next-line svelte/no-at-html-tags -->
35
+ {@html rendered}
36
+ {:else}
37
+ {content}
38
+ {/if}
39
+ </div>
40
+
41
+ <style>
42
+ .message-markdown {
43
+ line-height: var(--fd-leading-relaxed);
44
+ word-break: break-word;
45
+ }
46
+
47
+ .message-markdown :global(p) {
48
+ margin: 0 0 var(--fd-space-md) 0;
49
+ }
50
+
51
+ .message-markdown :global(p:last-child) {
52
+ margin-bottom: 0;
53
+ }
54
+
55
+ .message-markdown :global(h1),
56
+ .message-markdown :global(h2),
57
+ .message-markdown :global(h3),
58
+ .message-markdown :global(h4),
59
+ .message-markdown :global(h5),
60
+ .message-markdown :global(h6) {
61
+ margin: var(--fd-space-xl) 0 var(--fd-space-xs) 0;
62
+ font-weight: 600;
63
+ line-height: 1.3;
64
+ }
65
+
66
+ .message-markdown :global(h1:first-child),
67
+ .message-markdown :global(h2:first-child),
68
+ .message-markdown :global(h3:first-child),
69
+ .message-markdown :global(h4:first-child),
70
+ .message-markdown :global(h5:first-child),
71
+ .message-markdown :global(h6:first-child) {
72
+ margin-top: 0;
73
+ }
74
+
75
+ .message-markdown :global(h1) { font-size: var(--fd-text-xl); }
76
+ .message-markdown :global(h2) { font-size: var(--fd-text-lg); }
77
+ .message-markdown :global(h3) { font-size: var(--fd-text-base); }
78
+
79
+ .message-markdown :global(ul),
80
+ .message-markdown :global(ol) {
81
+ margin: var(--fd-space-xs) 0;
82
+ padding-left: var(--fd-space-3xl);
83
+ }
84
+
85
+ .message-markdown :global(li) {
86
+ margin: var(--fd-space-3xs) 0;
87
+ }
88
+
89
+ .message-markdown :global(code) {
90
+ background-color: var(--fd-secondary);
91
+ padding: 0.125rem var(--fd-space-3xs);
92
+ border-radius: var(--fd-radius-sm);
93
+ font-family: var(--fd-font-mono);
94
+ font-size: 0.875em;
95
+ }
96
+
97
+ .message-markdown :global(pre) {
98
+ background-color: var(--fd-foreground);
99
+ color: var(--fd-background);
100
+ padding: var(--fd-space-md) var(--fd-space-xl);
101
+ border-radius: var(--fd-radius-lg);
102
+ overflow-x: auto;
103
+ margin: var(--fd-space-md) 0;
104
+ font-size: var(--fd-text-sm);
105
+ line-height: var(--fd-leading-normal);
106
+ }
107
+
108
+ .message-markdown :global(pre code) {
109
+ background-color: transparent;
110
+ padding: 0;
111
+ border-radius: 0;
112
+ color: inherit;
113
+ font-size: inherit;
114
+ }
115
+
116
+ .message-markdown :global(blockquote) {
117
+ border-left: 3px solid var(--fd-border-strong);
118
+ padding-left: var(--fd-space-xl);
119
+ margin: var(--fd-space-md) 0;
120
+ color: var(--fd-muted-foreground);
121
+ font-style: italic;
122
+ }
123
+
124
+ .message-markdown :global(a) {
125
+ color: var(--fd-primary);
126
+ text-decoration: none;
127
+ }
128
+
129
+ .message-markdown :global(a:hover) {
130
+ text-decoration: underline;
131
+ }
132
+
133
+ .message-markdown :global(hr) {
134
+ border: none;
135
+ border-top: 1px solid var(--fd-border);
136
+ margin: var(--fd-space-xl) 0;
137
+ }
138
+
139
+ .message-markdown :global(table) {
140
+ border-collapse: collapse;
141
+ width: 100%;
142
+ margin: var(--fd-space-md) 0;
143
+ font-size: var(--fd-text-sm);
144
+ }
145
+
146
+ .message-markdown :global(th),
147
+ .message-markdown :global(td) {
148
+ border: 1px solid var(--fd-border);
149
+ padding: var(--fd-space-xs) var(--fd-space-md);
150
+ text-align: left;
151
+ }
152
+
153
+ .message-markdown :global(th) {
154
+ background-color: var(--fd-muted);
155
+ font-weight: 600;
156
+ }
157
+
158
+ .message-markdown :global(strong) { font-weight: 600; }
159
+ .message-markdown :global(em) { font-style: italic; }
160
+ </style>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ content: string;
3
+ enableMarkdown?: boolean;
4
+ }
5
+ declare const MessageMarkdown: import("svelte").Component<Props, {}, "">;
6
+ type MessageMarkdown = ReturnType<typeof MessageMarkdown>;
7
+ export default MessageMarkdown;
@@ -0,0 +1,120 @@
1
+ <!--
2
+ MessageNotice — compact centered inline notice for system messages.
3
+ No role="status" — the parent <div role="log"> already announces additions.
4
+ -->
5
+
6
+ <script lang="ts">
7
+ import Icon from '@iconify/svelte';
8
+ import type { PlaygroundMessage } from '../../types/playground.js';
9
+ import HierarchyTrail from './HierarchyTrail.svelte';
10
+ import MessageTagStrip from './MessageTagStrip.svelte';
11
+ import { formatTimestamp, getLogLevelIcon } from './messageDisplay.js';
12
+
13
+ interface Props {
14
+ message: PlaygroundMessage;
15
+ showTimestamp?: boolean;
16
+ isLast?: boolean;
17
+ }
18
+
19
+ let { message, showTimestamp = true, isLast = false }: Props = $props();
20
+
21
+ const level = $derived(message.metadata?.level);
22
+ const hierarchy = $derived(message.hierarchy ?? []);
23
+ const tags = $derived(message.tags ?? []);
24
+ </script>
25
+
26
+ <div
27
+ class="system-notice"
28
+ class:system-notice--last={isLast}
29
+ class:system-notice--warning={level === 'warning'}
30
+ class:system-notice--error={level === 'error'}
31
+ class:system-notice--debug={level === 'debug'}
32
+ >
33
+ <Icon icon={getLogLevelIcon(level)} class="system-notice__icon" aria-hidden="true" />
34
+ {#if message.metadata?.source}
35
+ <span class="system-notice__source">{message.metadata.source}</span>
36
+ {/if}
37
+ <HierarchyTrail items={hierarchy} />
38
+ <span class="system-notice__text">{message.content}</span>
39
+ <MessageTagStrip {tags} />
40
+ {#if showTimestamp}
41
+ <time
42
+ class="system-notice__timestamp"
43
+ datetime={message.timestamp}
44
+ aria-label="sent at {formatTimestamp(message.timestamp)}"
45
+ >{formatTimestamp(message.timestamp)}</time>
46
+ {/if}
47
+ </div>
48
+
49
+ <style>
50
+ .system-notice {
51
+ display: flex;
52
+ flex-wrap: wrap;
53
+ align-items: center;
54
+ justify-content: center;
55
+ gap: var(--fd-space-3xs);
56
+ padding: var(--fd-space-3xs) var(--fd-space-md);
57
+ margin: var(--fd-space-3xs) 0;
58
+ font-size: var(--fd-text-xs);
59
+ color: var(--fd-muted-foreground);
60
+ text-align: center;
61
+ min-width: 0;
62
+ }
63
+
64
+ .system-notice--last {
65
+ margin-bottom: var(--fd-space-md);
66
+ }
67
+
68
+ .system-notice :global(.system-notice__icon) {
69
+ flex-shrink: 0;
70
+ font-size: var(--fd-text-sm);
71
+ color: var(--fd-border-strong);
72
+ }
73
+
74
+ .system-notice__source {
75
+ flex-shrink: 0;
76
+ font-size: 0.6rem;
77
+ text-transform: uppercase;
78
+ letter-spacing: 0.06em;
79
+ color: var(--fd-muted-foreground);
80
+ background-color: var(--fd-muted);
81
+ border: 1px solid var(--fd-border);
82
+ border-radius: var(--fd-radius-sm);
83
+ padding: 0 0.25rem;
84
+ line-height: 1.4;
85
+ }
86
+
87
+ .system-notice__text {
88
+ min-width: 0;
89
+ overflow-wrap: anywhere;
90
+ line-height: var(--fd-leading-tight);
91
+ }
92
+
93
+ .system-notice--warning,
94
+ .system-notice--warning :global(.system-notice__icon) {
95
+ color: var(--fd-warning);
96
+ }
97
+
98
+ .system-notice--error,
99
+ .system-notice--error :global(.system-notice__icon) {
100
+ color: var(--fd-error);
101
+ }
102
+
103
+ .system-notice--debug {
104
+ color: var(--fd-border-strong);
105
+ opacity: 0.6;
106
+ }
107
+
108
+ .system-notice__timestamp {
109
+ flex-shrink: 0;
110
+ font-size: 0.625rem;
111
+ color: var(--fd-border-strong);
112
+ font-family: var(--fd-font-mono);
113
+ }
114
+
115
+ @media (max-width: 640px) {
116
+ .system-notice__timestamp {
117
+ display: none;
118
+ }
119
+ }
120
+ </style>
@@ -0,0 +1,9 @@
1
+ import type { PlaygroundMessage } from '../../types/playground.js';
2
+ interface Props {
3
+ message: PlaygroundMessage;
4
+ showTimestamp?: boolean;
5
+ isLast?: boolean;
6
+ }
7
+ declare const MessageNotice: import("svelte").Component<Props, {}, "">;
8
+ type MessageNotice = ReturnType<typeof MessageNotice>;
9
+ export default MessageNotice;