@nebutra/ui 0.2.3 → 3.0.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 (51) hide show
  1. package/dist/animate-in-BlvjVh2S.d.ts +250 -0
  2. package/dist/{canonical-Drca5UMj.d.ts → canonical-DEhT4VfS.d.ts} +83 -369
  3. package/dist/card-DunB1gKE.d.ts +105 -0
  4. package/dist/chat/index.d.ts +1 -0
  5. package/dist/chat/index.js +3 -0
  6. package/dist/chat/index.js.map +1 -0
  7. package/dist/components/index.d.ts +90 -126
  8. package/dist/components/index.js +433 -182
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/editorial/index.d.ts +404 -0
  11. package/dist/editorial/index.js +942 -0
  12. package/dist/editorial/index.js.map +1 -0
  13. package/dist/empty-state-bmfHCOuN.d.ts +86 -0
  14. package/dist/hooks/index.d.ts +18 -1
  15. package/dist/hooks/index.js +120 -5
  16. package/dist/hooks/index.js.map +1 -1
  17. package/dist/icons/index.d.ts +1 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/layout/index.d.ts +17 -58
  20. package/dist/layout/index.js +368 -127
  21. package/dist/layout/index.js.map +1 -1
  22. package/dist/layouts/index.d.ts +1 -1
  23. package/dist/layouts/index.js +93 -28
  24. package/dist/layouts/index.js.map +1 -1
  25. package/dist/patterns/index.d.ts +39 -46
  26. package/dist/patterns/index.js +534 -323
  27. package/dist/patterns/index.js.map +1 -1
  28. package/dist/primitives/canonical.d.ts +5 -2
  29. package/dist/primitives/canonical.js +598 -288
  30. package/dist/primitives/canonical.js.map +1 -1
  31. package/dist/primitives/index.d.ts +165 -63
  32. package/dist/primitives/index.js +1251 -983
  33. package/dist/primitives/index.js.map +1 -1
  34. package/dist/tailwind.preset.d.ts +32 -32
  35. package/dist/tailwind.preset.js +24 -20
  36. package/dist/tailwind.preset.js.map +1 -1
  37. package/dist/theme/index.d.ts +1 -110
  38. package/dist/typography/fonts.css +8 -16
  39. package/dist/typography/index.d.ts +29 -45
  40. package/dist/typography/index.js +26 -14
  41. package/dist/typography/index.js.map +1 -1
  42. package/dist/utils/auth-surfaces.d.ts +33 -0
  43. package/dist/utils/auth-surfaces.js +9 -0
  44. package/dist/utils/auth-surfaces.js.map +1 -0
  45. package/dist/utils/index.d.ts +20 -16
  46. package/dist/utils/index.js +99 -20
  47. package/dist/utils/index.js.map +1 -1
  48. package/package.json +25 -11
  49. package/src/typography/fonts.css +8 -16
  50. package/dist/styles/brand-override.css +0 -61
  51. package/src/styles/brand-override.css +0 -61
@@ -0,0 +1,105 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import * as React from 'react';
5
+
6
+ declare const cardVariants: (props?: ({
7
+ variant?: "default" | "outline" | "elevated" | "ghost" | null | undefined;
8
+ padding?: "none" | "sm" | "md" | "lg" | null | undefined;
9
+ interactive?: boolean | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ type CardVariant = NonNullable<VariantProps<typeof cardVariants>["variant"]>;
12
+ type CardPadding = NonNullable<VariantProps<typeof cardVariants>["padding"]>;
13
+ type DivProps = React.HTMLAttributes<HTMLDivElement> & {
14
+ ref?: React.Ref<HTMLDivElement> | undefined;
15
+ };
16
+ interface CardProps extends DivProps {
17
+ variant?: CardVariant;
18
+ padding?: CardPadding;
19
+ /** Hover lift for a card that is itself a link or button target. */
20
+ interactive?: boolean;
21
+ }
22
+ declare const CardRoot: {
23
+ ({ className, variant, padding, interactive, ref, ...props }: CardProps): react_jsx_runtime.JSX.Element;
24
+ displayName: string;
25
+ };
26
+ declare const CardHeader: {
27
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
28
+ displayName: string;
29
+ };
30
+ interface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
31
+ as?: "h2" | "h3" | "h4" | "h5" | "h6";
32
+ ref?: React.Ref<HTMLHeadingElement> | undefined;
33
+ }
34
+ declare const CardTitle: {
35
+ ({ className, as: Tag, ref, ...props }: CardTitleProps): react_jsx_runtime.JSX.Element;
36
+ displayName: string;
37
+ };
38
+ interface CardDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement | HTMLDivElement> {
39
+ as?: React.ElementType;
40
+ ref?: React.Ref<HTMLParagraphElement | HTMLDivElement> | undefined;
41
+ }
42
+ declare const CardDescription: {
43
+ ({ className, as: Tag, ref, ...props }: CardDescriptionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
44
+ displayName: string;
45
+ };
46
+ declare const CardContent: {
47
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
48
+ displayName: string;
49
+ };
50
+ declare const CardFooter: {
51
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
52
+ displayName: string;
53
+ };
54
+ interface CardIconProps extends DivProps {
55
+ size?: "sm" | "md" | "lg";
56
+ }
57
+ declare const CardIcon: {
58
+ ({ className, size, ref, ...props }: CardIconProps): react_jsx_runtime.JSX.Element;
59
+ displayName: string;
60
+ };
61
+ type CardHeaderProps = DivProps;
62
+ type CardContentProps = DivProps;
63
+ type CardBodyProps = DivProps;
64
+ type CardFooterProps = DivProps;
65
+ /** Compound form: Card.Header, Card.Title, Card.Body (= CardContent), … */
66
+ declare const Card: {
67
+ ({ className, variant, padding, interactive, ref, ...props }: CardProps): react_jsx_runtime.JSX.Element;
68
+ displayName: string;
69
+ } & {
70
+ Header: {
71
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
72
+ displayName: string;
73
+ };
74
+ Title: {
75
+ ({ className, as: Tag, ref, ...props }: CardTitleProps): react_jsx_runtime.JSX.Element;
76
+ displayName: string;
77
+ };
78
+ Description: {
79
+ ({ className, as: Tag, ref, ...props }: CardDescriptionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
80
+ displayName: string;
81
+ };
82
+ Content: {
83
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
84
+ displayName: string;
85
+ };
86
+ Body: {
87
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
88
+ displayName: string;
89
+ };
90
+ Footer: {
91
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
92
+ displayName: string;
93
+ };
94
+ Icon: {
95
+ ({ className, size, ref, ...props }: CardIconProps): react_jsx_runtime.JSX.Element;
96
+ displayName: string;
97
+ };
98
+ };
99
+ /** @deprecated Alias of CardContent from the former patterns/Card. */
100
+ declare const CardBody: {
101
+ ({ className, ref, ...props }: DivProps): react_jsx_runtime.JSX.Element;
102
+ displayName: string;
103
+ };
104
+
105
+ export { Card as C, type CardProps as a, CardBody as b, type CardBodyProps as c, CardDescription as d, type CardDescriptionProps as e, CardFooter as f, type CardFooterProps as g, CardHeader as h, type CardHeaderProps as i, CardIcon as j, type CardIconProps as k, CardRoot as l, CardTitle as m, type CardTitleProps as n, CardContent as o, type CardContentProps as p, cardVariants as q };
@@ -0,0 +1 @@
1
+ export { ChatInputArea, ChatItem, ChatItemProps, ChatList, ChatListProps, ChatMessage, MessageInput, MessageModal } from '@lobehub/ui/chat';
@@ -0,0 +1,3 @@
1
+ export { ChatInputArea, ChatItem, ChatList, MessageInput, MessageModal } from '@lobehub/ui/chat';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
@@ -1,11 +1,8 @@
1
- export { ActionIcon, ActionIconGroup, Alert, Avatar, Button, Checkbox, DraggablePanel, DraggablePanelBody, DraggablePanelContainer, DraggablePanelFooter, DraggablePanelHeader, Flexbox, FlexboxProps, Form, FormGroup, FormItem, Highlighter, Image, Input, List, Markdown, Menu, Modal, SearchBar, Segmented, Select, SideNav, Tag, TextArea, Tooltip } from '@lobehub/ui';
2
- export { ChatInputArea, ChatItem, ChatItemProps, ChatList, ChatListProps, ChatMessage, MessageInput, MessageModal } from '@lobehub/ui/chat';
3
- export { default as Spotlight } from '@lobehub/ui/es/awesome/Spotlight/Spotlight';
4
1
  export { AnimatePresence, HTMLMotionProps, LayoutGroup, LazyMotion, MotionConfig, MotionProps, MotionStyle, MotionValue, Transition, Variants, animate, domAnimation, m, motion, useAnimationFrame, useInView, useMotionTemplate, useMotionValue, useReducedMotion, useScroll, useSpring, useTransform, useVelocity } from 'framer-motion';
5
2
  export { A as AnimatedCard, a as AnimatedDrawer, b as AnimatedList, c as AnimatedModal, d as AnimatedPopover, e as AnimationDuration, f as AnimationTransition, F as FadeIn, P as PageTransition, S as ScaleIn, g as SlideIn, h as animatedList, i as animatedListItem, j as animationDistances, k as animationDurations, l as animationEasings, m as animationSprings, n as animationTransitions, o as drawerSurface, p as fadeIn, q as modalSurface, r as pageTransition, s as popoverSurface, t as reducedMotionVariants, u as scaleIn, v as slideIn } from '../tokens-EAC6uPem.js';
6
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
7
- import * as React from 'react';
8
4
  import React__default, { ReactNode } from 'react';
5
+ export { A as AnimateIn, a as AnimateInGroup, b as AnimateInGroupProps, c as AnimateInProps, d as AnimateSwap, e as AnimateSwapProps } from '../animate-in-BlvjVh2S.js';
9
6
  import { GraphEdge, GraphNode, Graph } from '@nebutra/graph-model';
10
7
 
11
8
  declare const isImageFile: (file: File) => boolean;
@@ -25,10 +22,27 @@ type PromptAttachmentPreviewsProps = {
25
22
  };
26
23
  declare function PromptAttachmentPreviews({ files, filePreviews, isRecording, onPreview, onRemove, }: PromptAttachmentPreviewsProps): react_jsx_runtime.JSX.Element | null;
27
24
 
25
+ /** Every visible and accessible string the prompt box renders. */
26
+ interface PromptInputBoxLabels {
27
+ upload: string;
28
+ search: string;
29
+ think: string;
30
+ canvas: string;
31
+ searchPlaceholder: string;
32
+ thinkPlaceholder: string;
33
+ canvasPlaceholder: string;
34
+ stopGeneration: string;
35
+ stopRecording: string;
36
+ sendMessage: string;
37
+ voiceMessage: string;
38
+ }
39
+ declare const DEFAULT_PROMPT_INPUT_BOX_LABELS: PromptInputBoxLabels;
28
40
  interface PromptInputBoxProps {
29
41
  onSend?: (message: string, files?: File[]) => void;
30
42
  isLoading?: boolean;
31
43
  placeholder?: string;
44
+ /** Override any string the box renders — pass translations here. */
45
+ labels?: Partial<PromptInputBoxLabels>;
32
46
  className?: string;
33
47
  ref?: React__default.Ref<HTMLDivElement>;
34
48
  }
@@ -49,124 +63,6 @@ interface VoiceRecorderProps {
49
63
  }
50
64
  declare const VoiceRecorder: React__default.FC<VoiceRecorderProps>;
51
65
 
52
- declare const PRESETS: {
53
- readonly emerge: {
54
- readonly initial: {
55
- readonly opacity: 0;
56
- readonly y: 16;
57
- readonly filter: "blur(6px)";
58
- };
59
- readonly animate: {
60
- readonly opacity: 1;
61
- readonly y: 0;
62
- readonly filter: "blur(0px)";
63
- };
64
- readonly exit: {
65
- readonly opacity: 0;
66
- readonly y: -8;
67
- readonly filter: "blur(4px)";
68
- };
69
- readonly transition: {
70
- duration: 0.5;
71
- ease: [number, number, number, number];
72
- };
73
- };
74
- readonly flow: {
75
- readonly initial: {
76
- readonly opacity: 0;
77
- readonly x: -20;
78
- };
79
- readonly animate: {
80
- readonly opacity: 1;
81
- readonly x: 0;
82
- };
83
- readonly exit: {
84
- readonly opacity: 0;
85
- readonly x: 20;
86
- };
87
- readonly transition: {
88
- duration: 0.3;
89
- ease: [number, number, number, number];
90
- };
91
- };
92
- readonly fade: {
93
- readonly initial: {
94
- readonly opacity: 0;
95
- };
96
- readonly animate: {
97
- readonly opacity: 1;
98
- };
99
- readonly exit: {
100
- readonly opacity: 0;
101
- };
102
- readonly transition: {
103
- readonly duration: 0.3;
104
- };
105
- };
106
- readonly fadeUp: {
107
- readonly initial: {
108
- readonly opacity: 0;
109
- readonly y: 16;
110
- };
111
- readonly animate: {
112
- readonly opacity: 1;
113
- readonly y: 0;
114
- };
115
- readonly exit: {
116
- readonly opacity: 0;
117
- readonly y: 16;
118
- };
119
- readonly transition: {
120
- type: "spring";
121
- stiffness: 200;
122
- damping: 24;
123
- mass: 1;
124
- };
125
- };
126
- readonly scale: {
127
- readonly initial: {
128
- readonly opacity: 0;
129
- readonly scale: 0.95;
130
- };
131
- readonly animate: {
132
- readonly opacity: 1;
133
- readonly scale: 1;
134
- };
135
- readonly exit: {
136
- readonly opacity: 0;
137
- readonly scale: 0.95;
138
- };
139
- readonly transition: {
140
- type: "spring";
141
- stiffness: 200;
142
- damping: 24;
143
- mass: 1;
144
- };
145
- };
146
- };
147
- type Preset = keyof typeof PRESETS;
148
- declare const STAGGER: {
149
- readonly fast: 0.05;
150
- readonly normal: 0.1;
151
- readonly slow: 0.2;
152
- };
153
- interface AnimateInProps {
154
- children: React.ReactNode;
155
- preset?: Preset;
156
- delay?: number;
157
- duration?: number;
158
- inView?: boolean;
159
- className?: string;
160
- }
161
- declare function AnimateIn(props: AnimateInProps): react_jsx_runtime.JSX.Element;
162
- interface AnimateInGroupProps {
163
- children: React.ReactNode;
164
- stagger?: keyof typeof STAGGER;
165
- inView?: boolean;
166
- className?: string;
167
- }
168
- declare function AnimateInGroup(props: AnimateInGroupProps): react_jsx_runtime.JSX.Element;
169
-
170
66
  interface AsciiTextProps {
171
67
  text: string;
172
68
  className?: string;
@@ -187,8 +83,10 @@ interface ChangelogWidgetProps {
187
83
  entries: ChangelogEntry[];
188
84
  changelogUrl?: string;
189
85
  className?: string;
86
+ /** Label for the changelog trigger button (a shared component cannot pick the product's language) */
87
+ triggerLabel?: string;
190
88
  }
191
- declare function ChangelogWidget({ entries, changelogUrl, className, }: ChangelogWidgetProps): react_jsx_runtime.JSX.Element;
89
+ declare function ChangelogWidget({ entries, changelogUrl, className, triggerLabel, }: ChangelogWidgetProps): react_jsx_runtime.JSX.Element;
192
90
 
193
91
  /**
194
92
  * Pure mapping layer between a neutral `@nebutra/graph-model` graph and the
@@ -207,6 +105,28 @@ declare function ChangelogWidget({ entries, changelogUrl, className, }: Changelo
207
105
  type EdgeIdentity<E extends GraphEdge> = (edge: E) => string;
208
106
  /** Build a domain edge from an xyflow connection, or reject it (null). */
209
107
  type MakeEdge<E extends GraphEdge> = (from: string, to: string, targetHandle: string | null) => E | null;
108
+ /** xyflow node shape we consume/produce (structurally compatible). */
109
+ interface FlowNode<N extends GraphNode> {
110
+ id: string;
111
+ type: string;
112
+ position: {
113
+ x: number;
114
+ y: number;
115
+ };
116
+ data: {
117
+ node: N;
118
+ };
119
+ }
120
+ /** xyflow edge shape we consume/produce (structurally compatible). */
121
+ interface FlowEdge<E extends GraphEdge> {
122
+ id: string;
123
+ source: string;
124
+ target: string;
125
+ targetHandle?: string | null;
126
+ data: {
127
+ edge: E;
128
+ };
129
+ }
210
130
  /** xyflow's connection payload (source/target may be null mid-drag). */
211
131
  interface FlowConnection {
212
132
  source: string | null;
@@ -214,6 +134,40 @@ interface FlowConnection {
214
134
  sourceHandle: string | null;
215
135
  targetHandle: string | null;
216
136
  }
137
+ type AddEdgeResult<G> = {
138
+ ok: true;
139
+ graph: G;
140
+ } | {
141
+ ok: false;
142
+ reason: string;
143
+ };
144
+ /** Single custom xyflow node `type` key — one renderer for every node. */
145
+ declare const GRAPH_NODE_FLOW_TYPE: "graph-node";
146
+ /** Graph → xyflow view model. Pure; allocates fresh arrays. */
147
+ declare function graphToFlow<N extends GraphNode, E extends GraphEdge>(graph: Graph<N, E>, edgeIdentity: EdgeIdentity<E>): {
148
+ nodes: FlowNode<N>[];
149
+ edges: FlowEdge<E>[];
150
+ };
151
+ /**
152
+ * Apply xyflow node positions back onto the graph. Returns a *new* graph;
153
+ * the input and its `nodes` array are never mutated. Non-structural fields
154
+ * (anything besides `nodes`/`edges`) are preserved by spread.
155
+ */
156
+ declare function applyNodePositions<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(graph: G, flowNodes: readonly FlowNode<N>[]): G;
157
+ /**
158
+ * Attempt to add a connection as a domain edge. Rejected (with a
159
+ * human-readable hint) on missing endpoints, self-loop, duplicate, a domain
160
+ * `makeEdge` veto, or when it would make the graph cyclic — enforced via the
161
+ * neutral `@nebutra/graph-model` guard so the UI can never persist a non-DAG.
162
+ */
163
+ declare function tryAddEdge<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(graph: G, connection: FlowConnection, opts: {
164
+ makeEdge: MakeEdge<E>;
165
+ edgeIdentity: EdgeIdentity<E>;
166
+ }): AddEdgeResult<G>;
167
+ /** Remove a node and every edge incident to it. Returns a new graph. */
168
+ declare function removeNode<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(graph: G, nodeId: string): G;
169
+ /** Remove one edge identified by its injected stable identity. */
170
+ declare function removeFlowEdge<N extends GraphNode, E extends GraphEdge, G extends Graph<N, E>>(graph: G, flowEdgeId: string, edgeIdentity: EdgeIdentity<E>): G;
217
171
 
218
172
  /** Domain-supplied presentation for one node. */
219
173
  interface NodeView {
@@ -265,6 +219,8 @@ interface OnboardingChecklistProps {
265
219
  videoThumbnailUrl: string;
266
220
  /** Embed URL for the video (YouTube, Vimeo, etc.) */
267
221
  videoUrl: string;
222
+ /** Accessible name of the video play button. Pass a translated string. */
223
+ playVideoLabel?: string;
268
224
  /** Additional CSS classes */
269
225
  className?: string;
270
226
  }
@@ -295,7 +251,7 @@ interface OnboardingChecklistProps {
295
251
  * />
296
252
  * ```
297
253
  */
298
- declare function OnboardingChecklist({ title, description, items, videoThumbnailUrl, videoUrl, className, }: OnboardingChecklistProps): react_jsx_runtime.JSX.Element;
254
+ declare function OnboardingChecklist({ title, description, items, videoThumbnailUrl, videoUrl, playVideoLabel, className, }: OnboardingChecklistProps): react_jsx_runtime.JSX.Element;
299
255
 
300
256
  interface ChatSender {
301
257
  /** Display name */
@@ -342,9 +298,17 @@ interface TeamChatProps {
342
298
  onReactionClick?: (messageId: string, emoji: string) => void;
343
299
  /** Callback when more options clicked */
344
300
  onMoreOptions?: () => void;
301
+ /** Accessible names for the icon buttons. Pass translated strings. */
302
+ labels?: Partial<TeamChatLabels>;
345
303
  /** Additional CSS classes */
346
304
  className?: string;
347
305
  }
306
+ interface TeamChatLabels {
307
+ moreOptions: string;
308
+ addEmoji: string;
309
+ sendMessage: string;
310
+ }
311
+ declare const DEFAULT_TEAM_CHAT_LABELS: TeamChatLabels;
348
312
  /**
349
313
  * TeamChat - Team messaging interface with participant sidebar
350
314
  *
@@ -370,6 +334,6 @@ interface TeamChatProps {
370
334
  * />
371
335
  * ```
372
336
  */
373
- declare function TeamChat({ chatName, tagline, messages, inputPlaceholder, onSendMessage, onReactionClick, onMoreOptions, className, }: TeamChatProps): react_jsx_runtime.JSX.Element;
337
+ declare function TeamChat({ chatName, tagline, messages, inputPlaceholder, onSendMessage, onReactionClick, onMoreOptions, labels: labelOverrides, className, }: TeamChatProps): react_jsx_runtime.JSX.Element;
374
338
 
375
- export { AnimateIn, AnimateInGroup, type AnimateInGroupProps, type AnimateInProps, AsciiText, type ChangelogEntry, ChangelogWidget, type ChangelogWidgetProps, type ChatReaction, type ChatSender, type ChecklistItem, type EdgeIdentity, type FlowConnection, ImageViewDialog, type ImageViewDialogProps, MAX_VISUALIZER_BARS, type MakeEdge, NodeGraphCanvas, type NodeGraphCanvasProps, type NodeView, OnboardingChecklist, type OnboardingChecklistProps, PromptAttachmentPreviews, type PromptAttachmentPreviewsProps, PromptInputBox, type PromptInputBoxProps, TeamChat, type TeamChatProps, VISUALIZER_BAR_STYLES, VoiceRecorder, type VoiceRecorderProps, formatRecordingTime, getFilePreviewKey, isImageFile, preventDragDefaults };
339
+ export { type AddEdgeResult, AsciiText, type ChangelogEntry, ChangelogWidget, type ChangelogWidgetProps, type ChatMessage, type ChatReaction, type ChatSender, type ChecklistItem, DEFAULT_PROMPT_INPUT_BOX_LABELS, DEFAULT_TEAM_CHAT_LABELS, type EdgeIdentity, type FlowConnection, type FlowEdge, type FlowNode, GRAPH_NODE_FLOW_TYPE, ImageViewDialog, type ImageViewDialogProps, MAX_VISUALIZER_BARS, type MakeEdge, NodeGraphCanvas, type NodeGraphCanvasProps, type NodeView, OnboardingChecklist, type OnboardingChecklistProps, PromptAttachmentPreviews, type PromptAttachmentPreviewsProps, PromptInputBox, type PromptInputBoxLabels, type PromptInputBoxProps, TeamChat, type TeamChatLabels, type TeamChatProps, VISUALIZER_BAR_STYLES, VoiceRecorder, type VoiceRecorderProps, applyNodePositions, formatRecordingTime, getFilePreviewKey, graphToFlow, isImageFile, preventDragDefaults, removeFlowEdge, removeNode, tryAddEdge };