@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.
- package/dist/api/enhanced-client.d.ts +29 -16
- package/dist/api/enhanced-client.js +0 -14
- package/dist/components/ConfigForm.svelte +1 -0
- package/dist/components/PipelineStatus.svelte +9 -12
- package/dist/components/SchemaForm.svelte +1 -0
- package/dist/components/WorkflowEditor.svelte +3 -0
- package/dist/components/form/FormAutocomplete.svelte +67 -10
- package/dist/components/form/FormField.svelte +21 -0
- package/dist/components/form/FormFieldLight.svelte +1 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +24 -5
- package/dist/components/interrupt/ConfirmationPrompt.svelte +5 -0
- package/dist/components/interrupt/InterruptBubble.svelte +88 -17
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +11 -0
- package/dist/components/interrupt/ReviewPrompt.svelte +20 -0
- package/dist/components/interrupt/TextInputPrompt.svelte +5 -0
- package/dist/components/nodes/GatewayNode.svelte +2 -6
- package/dist/components/nodes/WorkflowNode.svelte +2 -6
- package/dist/components/playground/ChatBubble.svelte +289 -0
- package/dist/components/playground/ChatBubble.svelte.d.ts +10 -0
- package/dist/components/playground/ChatInput.svelte +359 -0
- package/dist/components/playground/ChatInput.svelte.d.ts +14 -0
- package/dist/components/playground/ChatPanel.svelte +100 -724
- package/dist/components/playground/ChatPanel.svelte.d.ts +9 -26
- package/dist/components/playground/ControlPanel.svelte +496 -0
- package/dist/components/playground/ControlPanel.svelte.d.ts +20 -0
- package/dist/components/playground/ExecutionConsole.svelte +163 -0
- package/dist/components/playground/ExecutionConsole.svelte.d.ts +14 -0
- package/dist/components/playground/HierarchyTrail.svelte +88 -0
- package/dist/components/playground/HierarchyTrail.svelte.d.ts +7 -0
- package/dist/components/playground/LogRow.svelte +178 -0
- package/dist/components/playground/LogRow.svelte.d.ts +8 -0
- package/dist/components/playground/MessageBubble.stories.svelte +89 -0
- package/dist/components/playground/MessageBubble.svelte +25 -737
- package/dist/components/playground/MessageBubble.svelte.d.ts +3 -11
- package/dist/components/playground/MessageCard.svelte +106 -0
- package/dist/components/playground/MessageCard.svelte.d.ts +10 -0
- package/dist/components/playground/MessageMarkdown.svelte +160 -0
- package/dist/components/playground/MessageMarkdown.svelte.d.ts +7 -0
- package/dist/components/playground/MessageNotice.svelte +120 -0
- package/dist/components/playground/MessageNotice.svelte.d.ts +9 -0
- package/dist/components/playground/MessageStream.svelte +367 -0
- package/dist/components/playground/MessageStream.svelte.d.ts +27 -0
- package/dist/components/playground/MessageTagChip.svelte +99 -0
- package/dist/components/playground/MessageTagChip.svelte.d.ts +7 -0
- package/dist/components/playground/MessageTagStrip.svelte +37 -0
- package/dist/components/playground/MessageTagStrip.svelte.d.ts +7 -0
- package/dist/components/playground/PipelineKanbanView.svelte +284 -0
- package/dist/components/playground/PipelineKanbanView.svelte.d.ts +11 -0
- package/dist/components/playground/PipelinePanel.svelte +204 -65
- package/dist/components/playground/PipelinePanel.svelte.d.ts +3 -1
- package/dist/components/playground/PipelineTableView.svelte +376 -0
- package/dist/components/playground/PipelineTableView.svelte.d.ts +11 -0
- package/dist/components/playground/Playground.svelte +262 -1200
- package/dist/components/playground/Playground.svelte.d.ts +0 -13
- package/dist/components/playground/PlaygroundStudio.svelte +113 -61
- package/dist/components/playground/PlaygroundStudio.svelte.d.ts +3 -1
- package/dist/components/playground/messageDisplay.d.ts +19 -0
- package/dist/components/playground/messageDisplay.js +62 -0
- package/dist/components/playground/pipelineViewUtils.svelte.d.ts +22 -0
- package/dist/components/playground/pipelineViewUtils.svelte.js +77 -0
- package/dist/form/autocomplete.d.ts +1 -0
- package/dist/form/autocomplete.js +1 -0
- package/dist/form/index.d.ts +17 -0
- package/dist/form/index.js +19 -0
- package/dist/messages/defaults.d.ts +29 -0
- package/dist/messages/defaults.js +30 -0
- package/dist/playground/index.d.ts +6 -1
- package/dist/playground/index.js +6 -0
- package/dist/playground/mount.d.ts +3 -0
- package/dist/playground/mount.js +3 -2
- package/dist/schemas/v1/workflow.schema.json +10 -1
- package/dist/services/categoriesApi.d.ts +2 -1
- package/dist/services/categoriesApi.js +5 -3
- package/dist/services/portConfigApi.d.ts +2 -1
- package/dist/services/portConfigApi.js +5 -3
- package/dist/stores/playgroundStore.svelte.d.ts +6 -0
- package/dist/stores/playgroundStore.svelte.js +21 -1
- package/dist/svelte-app.d.ts +1 -0
- package/dist/svelte-app.js +5 -5
- package/dist/types/index.d.ts +41 -2
- package/dist/types/playground.d.ts +81 -2
- package/dist/types/playground.js +19 -7
- package/dist/utils/nodeStatus.js +15 -5
- package/package.json +6 -1
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
import type
|
|
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
|
|
17
|
-
*
|
|
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,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;
|