@flowdrop/flowdrop 1.12.0 → 1.14.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 (71) hide show
  1. package/README.md +5 -0
  2. package/dist/components/ConfigForm.svelte +1 -0
  3. package/dist/components/ConfigPanel.svelte +7 -1
  4. package/dist/components/NodeSwapPicker.svelte +5 -1
  5. package/dist/components/PipelineStatus.svelte +11 -2
  6. package/dist/components/SchemaForm.svelte +1 -0
  7. package/dist/components/SettingsPanel.svelte +5 -1
  8. package/dist/components/WorkflowEditor.svelte +5 -1
  9. package/dist/components/chat/AIChatPanel.svelte +1 -5
  10. package/dist/components/form/FormAutocomplete.svelte +69 -15
  11. package/dist/components/form/FormField.svelte +21 -0
  12. package/dist/components/form/FormFieldLight.svelte +1 -0
  13. package/dist/components/interrupt/ChoicePrompt.svelte +5 -1
  14. package/dist/components/interrupt/InterruptBubble.svelte +75 -17
  15. package/dist/components/interrupt/InterruptBubble.svelte.d.ts +11 -0
  16. package/dist/components/playground/ChatBubble.svelte +287 -0
  17. package/dist/components/playground/ChatBubble.svelte.d.ts +10 -0
  18. package/dist/components/playground/ChatInput.svelte +11 -5
  19. package/dist/components/playground/ControlPanel.svelte +42 -29
  20. package/dist/components/playground/ExecutionConsole.svelte +5 -1
  21. package/dist/components/playground/ExecutionConsole.svelte.d.ts +2 -0
  22. package/dist/components/playground/ExecutionList.svelte +7 -2
  23. package/dist/components/playground/HierarchyTrail.svelte +88 -0
  24. package/dist/components/playground/HierarchyTrail.svelte.d.ts +7 -0
  25. package/dist/components/playground/LogRow.svelte +179 -0
  26. package/dist/components/playground/LogRow.svelte.d.ts +8 -0
  27. package/dist/components/playground/MessageBubble.stories.svelte +89 -0
  28. package/dist/components/playground/MessageBubble.svelte +23 -738
  29. package/dist/components/playground/MessageBubble.svelte.d.ts +3 -11
  30. package/dist/components/playground/MessageCard.svelte +107 -0
  31. package/dist/components/playground/MessageCard.svelte.d.ts +10 -0
  32. package/dist/components/playground/MessageMarkdown.svelte +170 -0
  33. package/dist/components/playground/MessageMarkdown.svelte.d.ts +7 -0
  34. package/dist/components/playground/MessageNotice.svelte +121 -0
  35. package/dist/components/playground/MessageNotice.svelte.d.ts +9 -0
  36. package/dist/components/playground/MessageStream.svelte +215 -10
  37. package/dist/components/playground/MessageStream.svelte.d.ts +5 -0
  38. package/dist/components/playground/MessageTagChip.svelte +117 -0
  39. package/dist/components/playground/MessageTagChip.svelte.d.ts +7 -0
  40. package/dist/components/playground/MessageTagStrip.svelte +37 -0
  41. package/dist/components/playground/MessageTagStrip.svelte.d.ts +7 -0
  42. package/dist/components/playground/PipelineKanbanView.svelte +40 -11
  43. package/dist/components/playground/PipelinePanel.svelte +5 -1
  44. package/dist/components/playground/PipelineTableView.svelte +20 -6
  45. package/dist/components/playground/Playground.svelte +84 -22
  46. package/dist/components/playground/PlaygroundStudio.svelte +99 -7
  47. package/dist/components/playground/messageDisplay.d.ts +19 -0
  48. package/dist/components/playground/messageDisplay.js +62 -0
  49. package/dist/components/playground/pipelineViewUtils.svelte.js +11 -4
  50. package/dist/form/autocomplete.d.ts +1 -0
  51. package/dist/form/autocomplete.js +1 -0
  52. package/dist/form/index.d.ts +17 -0
  53. package/dist/form/index.js +19 -0
  54. package/dist/messages/defaults.d.ts +5 -0
  55. package/dist/messages/defaults.js +6 -0
  56. package/dist/openapi/v1/openapi.yaml +6403 -0
  57. package/dist/schemas/v1/workflow.schema.json +46 -1
  58. package/dist/services/categoriesApi.d.ts +2 -1
  59. package/dist/services/categoriesApi.js +5 -3
  60. package/dist/services/playgroundService.d.ts +23 -4
  61. package/dist/services/playgroundService.js +22 -9
  62. package/dist/services/portConfigApi.d.ts +2 -1
  63. package/dist/services/portConfigApi.js +5 -3
  64. package/dist/stores/playgroundStore.svelte.d.ts +22 -1
  65. package/dist/stores/playgroundStore.svelte.js +109 -32
  66. package/dist/svelte-app.d.ts +1 -0
  67. package/dist/svelte-app.js +5 -5
  68. package/dist/types/index.d.ts +13 -0
  69. package/dist/types/playground.d.ts +112 -2
  70. package/dist/types/playground.js +14 -0
  71. package/package.json +12 -1
@@ -0,0 +1,179 @@
1
+ <!--
2
+ LogRow — dense terminal-style entry for log messages.
3
+ Width-based reshaping is driven by `@container fd-message-stream` rules
4
+ declared in MessageStream.svelte (the file that also sets the container).
5
+ -->
6
+
7
+ <script lang="ts">
8
+ import Icon from '@iconify/svelte';
9
+ import type { PlaygroundMessage } from '../../types/playground.js';
10
+ import HierarchyTrail from './HierarchyTrail.svelte';
11
+ import MessageTagStrip from './MessageTagStrip.svelte';
12
+ import { formatTimestamp, getLogLevelIcon } from './messageDisplay.js';
13
+
14
+ interface Props {
15
+ message: PlaygroundMessage;
16
+ showTimestamp?: boolean;
17
+ }
18
+
19
+ let { message, showTimestamp = true }: 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="log-row"
28
+ class:log-row--error={level === 'error'}
29
+ class:log-row--warning={level === 'warning'}
30
+ class:log-row--debug={level === 'debug'}
31
+ aria-label="{level ?? 'info'} log{message.metadata?.nodeLabel
32
+ ? ` from ${message.metadata.nodeLabel}`
33
+ : ''}"
34
+ >
35
+ <div class="log-row__level" aria-hidden="true">
36
+ <Icon icon={getLogLevelIcon(level)} />
37
+ </div>
38
+ <div class="log-row__body">
39
+ {#if message.metadata?.source}
40
+ <span class="log-row__source">{message.metadata.source}</span>
41
+ {/if}
42
+ <HierarchyTrail items={hierarchy} />
43
+ {#if message.metadata?.nodeLabel ?? message.nodeId}
44
+ <span class="log-row__node">{message.metadata?.nodeLabel ?? message.nodeId}</span>
45
+ {/if}
46
+ <span class="log-row__text">{message.content}</span>
47
+ </div>
48
+ {#if tags.length > 0}
49
+ <span class="log-row__tags">
50
+ <MessageTagStrip {tags} />
51
+ </span>
52
+ {/if}
53
+ {#if showTimestamp}
54
+ <time
55
+ class="log-row__timestamp"
56
+ datetime={message.timestamp}
57
+ aria-label="sent at {formatTimestamp(message.timestamp)}"
58
+ >{formatTimestamp(message.timestamp)}</time
59
+ >
60
+ {/if}
61
+ </div>
62
+
63
+ <style>
64
+ .log-row {
65
+ display: flex;
66
+ flex-wrap: wrap;
67
+ align-items: center;
68
+ gap: var(--fd-space-sm);
69
+ padding: 0.1875rem var(--fd-space-xl);
70
+ border-left: 2px solid var(--fd-info);
71
+ margin: 1px 0;
72
+ font-family: var(--fd-font-mono);
73
+ font-size: var(--fd-text-xs);
74
+ color: var(--fd-muted-foreground);
75
+ line-height: var(--fd-leading-normal);
76
+ background-color: transparent;
77
+ min-width: 0;
78
+ }
79
+
80
+ .log-row:hover {
81
+ background-color: var(--fd-muted);
82
+ }
83
+
84
+ .log-row--error {
85
+ border-left-color: var(--fd-error);
86
+ color: var(--fd-error);
87
+ }
88
+
89
+ .log-row--warning {
90
+ border-left-color: var(--fd-warning);
91
+ color: var(--fd-warning);
92
+ }
93
+
94
+ .log-row--debug {
95
+ border-left-color: var(--fd-border-strong);
96
+ color: var(--fd-border-strong);
97
+ }
98
+
99
+ .log-row__level {
100
+ flex-shrink: 0;
101
+ display: flex;
102
+ align-items: center;
103
+ font-size: var(--fd-text-sm);
104
+ opacity: 0.7;
105
+ }
106
+
107
+ .log-row--error .log-row__level,
108
+ .log-row--warning .log-row__level {
109
+ opacity: 1;
110
+ }
111
+
112
+ .log-row__body {
113
+ flex: 1 1 12rem;
114
+ min-width: 0;
115
+ display: flex;
116
+ flex-wrap: wrap;
117
+ align-items: baseline;
118
+ gap: var(--fd-space-sm);
119
+ overflow: hidden;
120
+ }
121
+
122
+ .log-row__source {
123
+ flex-shrink: 0;
124
+ font-size: 0.6rem;
125
+ text-transform: uppercase;
126
+ letter-spacing: 0.06em;
127
+ color: var(--fd-muted-foreground);
128
+ opacity: 0.6;
129
+ background-color: var(--fd-muted);
130
+ border: 1px solid var(--fd-border);
131
+ border-radius: var(--fd-radius-sm);
132
+ padding: 0 0.25rem;
133
+ line-height: 1.4;
134
+ }
135
+
136
+ .log-row__node {
137
+ flex-shrink: 0;
138
+ font-weight: 600;
139
+ color: var(--fd-foreground);
140
+ opacity: 0.5;
141
+ font-size: 0.65rem;
142
+ text-transform: uppercase;
143
+ letter-spacing: 0.04em;
144
+ }
145
+
146
+ .log-row__text {
147
+ flex: 1;
148
+ min-width: 0;
149
+ white-space: pre-wrap;
150
+ overflow-wrap: anywhere;
151
+ }
152
+
153
+ .log-row__timestamp {
154
+ flex-shrink: 0;
155
+ font-size: 0.625rem;
156
+ color: var(--fd-border-strong);
157
+ opacity: 0.8;
158
+ }
159
+
160
+ /* Wrapper around the tag strip. Owns its grid-area in the @container
161
+ queries (see MessageStream.svelte) without those rules reaching into
162
+ MessageTagStrip's scope. inline-flex so the strip lays out naturally
163
+ in the default wide layout. */
164
+ .log-row__tags {
165
+ display: inline-flex;
166
+ min-width: 0;
167
+ }
168
+
169
+ @media (max-width: 640px) {
170
+ .log-row {
171
+ padding: 0.1875rem var(--fd-space-md);
172
+ }
173
+
174
+ .log-row__source,
175
+ .log-row__node {
176
+ font-size: 0.55rem;
177
+ }
178
+ }
179
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { PlaygroundMessage } from '../../types/playground.js';
2
+ interface Props {
3
+ message: PlaygroundMessage;
4
+ showTimestamp?: boolean;
5
+ }
6
+ declare const LogRow: import("svelte").Component<Props, {}, "">;
7
+ type LogRow = ReturnType<typeof LogRow>;
8
+ export default LogRow;
@@ -10,6 +10,16 @@
10
10
  layout: 'padded'
11
11
  }
12
12
  });
13
+
14
+ const baseHierarchy = [
15
+ { id: 'demo-foreach-loop', label: 'ForEach Loop', icon: 'mdi:graph' },
16
+ { id: 'greeter-flow', label: 'Greeter', icon: 'mdi:hand-wave' }
17
+ ];
18
+
19
+ const sampleTags = [
20
+ { id: 'run', label: 'Run #3', icon: 'mdi:play-circle', color: 'info', variant: 'subtle' },
21
+ { id: 'iteration', label: 'iter 1/5', color: 'muted', variant: 'subtle' }
22
+ ];
13
23
  </script>
14
24
 
15
25
  <Story
@@ -60,3 +70,82 @@
60
70
  }
61
71
  }}
62
72
  />
73
+
74
+ <Story
75
+ name="With Tags"
76
+ args={{
77
+ message: {
78
+ id: 'msg-5',
79
+ role: 'assistant',
80
+ content: 'Iteration complete.',
81
+ timestamp: new Date().toISOString(),
82
+ tags: sampleTags
83
+ }
84
+ }}
85
+ />
86
+
87
+ <Story
88
+ name="Tag Colors (each variant)"
89
+ args={{
90
+ message: {
91
+ id: 'msg-6',
92
+ role: 'log',
93
+ content: 'Showcasing semantic colors and visual variants',
94
+ timestamp: new Date().toISOString(),
95
+ tags: [
96
+ { id: 't-1', label: 'subtle.muted', color: 'muted', variant: 'subtle' },
97
+ { id: 't-2', label: 'subtle.success', color: 'success', variant: 'subtle' },
98
+ { id: 't-3', label: 'subtle.warning', color: 'warning', variant: 'subtle' },
99
+ { id: 't-4', label: 'subtle.error', color: 'error', variant: 'subtle' },
100
+ { id: 't-5', label: 'outline.primary', color: 'primary', variant: 'outline' },
101
+ { id: 't-6', label: 'solid.info', color: 'info', variant: 'solid' }
102
+ ]
103
+ }
104
+ }}
105
+ />
106
+
107
+ <Story
108
+ name="With Hierarchy"
109
+ args={{
110
+ message: {
111
+ id: 'msg-7',
112
+ role: 'log',
113
+ content: 'greeter said hi to Apple',
114
+ timestamp: new Date().toISOString(),
115
+ hierarchy: baseHierarchy,
116
+ tags: [{ id: 'iter', label: 'iter 1/5', color: 'muted', variant: 'subtle' }]
117
+ }
118
+ }}
119
+ />
120
+
121
+ <Story
122
+ name="Card Display"
123
+ args={{
124
+ message: {
125
+ id: 'msg-8',
126
+ role: 'log',
127
+ content:
128
+ 'Greeter aborted because Cherry never reached the queue. The upstream loader returned a timeout after retrying twice — check the JSON Loader configuration for `retries` and `backoffMs`.',
129
+ timestamp: new Date().toISOString(),
130
+ display: 'card',
131
+ hierarchy: baseHierarchy,
132
+ tags: [
133
+ { id: 'iter', label: 'iter 3/5', color: 'muted', variant: 'subtle' },
134
+ { id: 'status', label: 'aborted', color: 'warning', variant: 'solid' }
135
+ ]
136
+ }
137
+ }}
138
+ />
139
+
140
+ <Story
141
+ name="Server-driven display override (log as bubble)"
142
+ args={{
143
+ message: {
144
+ id: 'msg-9',
145
+ role: 'log',
146
+ content: 'This log message is rendered as a bubble because the server set display=bubble',
147
+ timestamp: new Date().toISOString(),
148
+ display: 'bubble'
149
+ }
150
+ }}
151
+ />