@agentuity/workbench 0.0.87 → 0.0.88

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 (258) hide show
  1. package/dist/components/App.d.ts.map +1 -1
  2. package/dist/components/App.js +18 -2
  3. package/dist/components/App.js.map +1 -1
  4. package/dist/components/ai-elements/code-block.d.ts +3 -3
  5. package/dist/components/ai-elements/code-block.d.ts.map +1 -1
  6. package/dist/components/ai-elements/code-block.js +29 -7
  7. package/dist/components/ai-elements/code-block.js.map +1 -1
  8. package/dist/components/internal/Chat.d.ts +3 -2
  9. package/dist/components/internal/Chat.d.ts.map +1 -1
  10. package/dist/components/internal/Chat.js +23 -24
  11. package/dist/components/internal/Chat.js.map +1 -1
  12. package/dist/components/internal/MonacoJsonEditor.d.ts.map +1 -1
  13. package/dist/components/internal/MonacoJsonEditor.js +10 -53
  14. package/dist/components/internal/MonacoJsonEditor.js.map +1 -1
  15. package/dist/components/internal/Schema.d.ts +1 -2
  16. package/dist/components/internal/Schema.d.ts.map +1 -1
  17. package/dist/components/internal/Schema.js +2 -3
  18. package/dist/components/internal/Schema.js.map +1 -1
  19. package/dist/components/ui/button.d.ts +1 -1
  20. package/dist/components/ui/input.d.ts.map +1 -1
  21. package/dist/components/ui/input.js +1 -1
  22. package/dist/components/ui/input.js.map +1 -1
  23. package/dist/index.d.ts +3 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +4 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/{styles.css → standalone.css} +207 -1537
  28. package/package.json +29 -29
  29. package/src/{styles.css → base.css} +36 -52
  30. package/src/components/App.tsx +41 -5
  31. package/src/components/ai-elements/code-block.tsx +42 -10
  32. package/src/components/internal/Chat.tsx +112 -120
  33. package/src/components/internal/MonacoJsonEditor.tsx +15 -63
  34. package/src/components/internal/Schema.tsx +74 -86
  35. package/src/components/ui/input.tsx +2 -3
  36. package/src/index.ts +5 -14
  37. package/src/integration.css +15 -0
  38. package/src/standalone.css +25 -0
  39. package/dist/components/ConnectionStatus.d.ts +0 -7
  40. package/dist/components/ConnectionStatus.d.ts.map +0 -1
  41. package/dist/components/ConnectionStatus.js +0 -52
  42. package/dist/components/ConnectionStatus.js.map +0 -1
  43. package/dist/components/Inline.d.ts +0 -10
  44. package/dist/components/Inline.d.ts.map +0 -1
  45. package/dist/components/Inline.js +0 -11
  46. package/dist/components/Inline.js.map +0 -1
  47. package/dist/components/ai-elements/artifact.d.ts +0 -24
  48. package/dist/components/ai-elements/artifact.d.ts.map +0 -1
  49. package/dist/components/ai-elements/artifact.js +0 -21
  50. package/dist/components/ai-elements/artifact.js.map +0 -1
  51. package/dist/components/ai-elements/branch.d.ts +0 -21
  52. package/dist/components/ai-elements/branch.d.ts.map +0 -1
  53. package/dist/components/ai-elements/branch.js +0 -71
  54. package/dist/components/ai-elements/branch.js.map +0 -1
  55. package/dist/components/ai-elements/canvas.d.ts +0 -9
  56. package/dist/components/ai-elements/canvas.d.ts.map +0 -1
  57. package/dist/components/ai-elements/canvas.js +0 -6
  58. package/dist/components/ai-elements/canvas.js.map +0 -1
  59. package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
  60. package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
  61. package/dist/components/ai-elements/chain-of-thought.js +0 -52
  62. package/dist/components/ai-elements/chain-of-thought.js.map +0 -1
  63. package/dist/components/ai-elements/confirmation.d.ts +0 -27
  64. package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
  65. package/dist/components/ai-elements/confirmation.js +0 -57
  66. package/dist/components/ai-elements/confirmation.js.map +0 -1
  67. package/dist/components/ai-elements/connection.d.ts +0 -3
  68. package/dist/components/ai-elements/connection.d.ts.map +0 -1
  69. package/dist/components/ai-elements/connection.js +0 -4
  70. package/dist/components/ai-elements/connection.js.map +0 -1
  71. package/dist/components/ai-elements/context.d.ts +0 -33
  72. package/dist/components/ai-elements/context.d.ts.map +0 -1
  73. package/dist/components/ai-elements/context.js +0 -167
  74. package/dist/components/ai-elements/context.js.map +0 -1
  75. package/dist/components/ai-elements/controls.d.ts +0 -5
  76. package/dist/components/ai-elements/controls.d.ts.map +0 -1
  77. package/dist/components/ai-elements/controls.js +0 -6
  78. package/dist/components/ai-elements/controls.js.map +0 -1
  79. package/dist/components/ai-elements/edge.d.ts +0 -6
  80. package/dist/components/ai-elements/edge.d.ts.map +0 -1
  81. package/dist/components/ai-elements/edge.js +0 -83
  82. package/dist/components/ai-elements/edge.js.map +0 -1
  83. package/dist/components/ai-elements/image.d.ts +0 -7
  84. package/dist/components/ai-elements/image.d.ts.map +0 -1
  85. package/dist/components/ai-elements/image.js +0 -4
  86. package/dist/components/ai-elements/image.js.map +0 -1
  87. package/dist/components/ai-elements/inline-citation.d.ts +0 -39
  88. package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
  89. package/dist/components/ai-elements/inline-citation.js +0 -62
  90. package/dist/components/ai-elements/inline-citation.js.map +0 -1
  91. package/dist/components/ai-elements/loader.d.ts +0 -6
  92. package/dist/components/ai-elements/loader.d.ts.map +0 -1
  93. package/dist/components/ai-elements/loader.js +0 -5
  94. package/dist/components/ai-elements/loader.js.map +0 -1
  95. package/dist/components/ai-elements/node.d.ts +0 -22
  96. package/dist/components/ai-elements/node.d.ts.map +0 -1
  97. package/dist/components/ai-elements/node.js +0 -12
  98. package/dist/components/ai-elements/node.js.map +0 -1
  99. package/dist/components/ai-elements/open-in-chat.d.ts +0 -29
  100. package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
  101. package/dist/components/ai-elements/open-in-chat.js +0 -97
  102. package/dist/components/ai-elements/open-in-chat.js.map +0 -1
  103. package/dist/components/ai-elements/panel.d.ts +0 -6
  104. package/dist/components/ai-elements/panel.d.ts.map +0 -1
  105. package/dist/components/ai-elements/panel.js +0 -5
  106. package/dist/components/ai-elements/panel.js.map +0 -1
  107. package/dist/components/ai-elements/plan.d.ts +0 -26
  108. package/dist/components/ai-elements/plan.d.ts.map +0 -1
  109. package/dist/components/ai-elements/plan.js +0 -32
  110. package/dist/components/ai-elements/plan.js.map +0 -1
  111. package/dist/components/ai-elements/queue.d.ts +0 -62
  112. package/dist/components/ai-elements/queue.d.ts.map +0 -1
  113. package/dist/components/ai-elements/queue.js +0 -25
  114. package/dist/components/ai-elements/queue.js.map +0 -1
  115. package/dist/components/ai-elements/reasoning.d.ts +0 -17
  116. package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
  117. package/dist/components/ai-elements/reasoning.js +0 -77
  118. package/dist/components/ai-elements/reasoning.js.map +0 -1
  119. package/dist/components/ai-elements/response.d.ts +0 -6
  120. package/dist/components/ai-elements/response.d.ts.map +0 -1
  121. package/dist/components/ai-elements/response.js +0 -8
  122. package/dist/components/ai-elements/response.js.map +0 -1
  123. package/dist/components/ai-elements/sources.d.ts +0 -13
  124. package/dist/components/ai-elements/sources.d.ts.map +0 -1
  125. package/dist/components/ai-elements/sources.js +0 -10
  126. package/dist/components/ai-elements/sources.js.map +0 -1
  127. package/dist/components/ai-elements/suggestion.d.ts +0 -11
  128. package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
  129. package/dist/components/ai-elements/suggestion.js +0 -13
  130. package/dist/components/ai-elements/suggestion.js.map +0 -1
  131. package/dist/components/ai-elements/task.d.ts +0 -15
  132. package/dist/components/ai-elements/task.d.ts.map +0 -1
  133. package/dist/components/ai-elements/task.js +0 -11
  134. package/dist/components/ai-elements/task.js.map +0 -1
  135. package/dist/components/ai-elements/tool.d.ts +0 -24
  136. package/dist/components/ai-elements/tool.d.ts.map +0 -1
  137. package/dist/components/ai-elements/tool.js +0 -47
  138. package/dist/components/ai-elements/tool.js.map +0 -1
  139. package/dist/components/ai-elements/toolbar.d.ts +0 -6
  140. package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
  141. package/dist/components/ai-elements/toolbar.js +0 -5
  142. package/dist/components/ai-elements/toolbar.js.map +0 -1
  143. package/dist/components/ai-elements/web-preview.d.ts +0 -35
  144. package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
  145. package/dist/components/ai-elements/web-preview.js +0 -63
  146. package/dist/components/ai-elements/web-preview.js.map +0 -1
  147. package/dist/components/ui/alert.d.ts +0 -10
  148. package/dist/components/ui/alert.d.ts.map +0 -1
  149. package/dist/components/ui/alert.js +0 -25
  150. package/dist/components/ui/alert.js.map +0 -1
  151. package/dist/components/ui/badge.d.ts +0 -10
  152. package/dist/components/ui/badge.d.ts.map +0 -1
  153. package/dist/components/ui/badge.js +0 -23
  154. package/dist/components/ui/badge.js.map +0 -1
  155. package/dist/components/ui/card.d.ts +0 -10
  156. package/dist/components/ui/card.d.ts.map +0 -1
  157. package/dist/components/ui/card.js +0 -25
  158. package/dist/components/ui/card.js.map +0 -1
  159. package/dist/components/ui/carousel.d.ts +0 -20
  160. package/dist/components/ui/carousel.d.ts.map +0 -1
  161. package/dist/components/ui/carousel.js +0 -92
  162. package/dist/components/ui/carousel.js.map +0 -1
  163. package/dist/components/ui/checkbox.d.ts +0 -5
  164. package/dist/components/ui/checkbox.d.ts.map +0 -1
  165. package/dist/components/ui/checkbox.js +0 -9
  166. package/dist/components/ui/checkbox.js.map +0 -1
  167. package/dist/components/ui/collapsible.d.ts +0 -6
  168. package/dist/components/ui/collapsible.d.ts.map +0 -1
  169. package/dist/components/ui/collapsible.js +0 -14
  170. package/dist/components/ui/collapsible.js.map +0 -1
  171. package/dist/components/ui/field.d.ts +0 -25
  172. package/dist/components/ui/field.d.ts.map +0 -1
  173. package/dist/components/ui/field.js +0 -74
  174. package/dist/components/ui/field.js.map +0 -1
  175. package/dist/components/ui/form.d.ts +0 -25
  176. package/dist/components/ui/form.d.ts.map +0 -1
  177. package/dist/components/ui/form.js +0 -58
  178. package/dist/components/ui/form.js.map +0 -1
  179. package/dist/components/ui/label.d.ts +0 -5
  180. package/dist/components/ui/label.d.ts.map +0 -1
  181. package/dist/components/ui/label.js +0 -9
  182. package/dist/components/ui/label.js.map +0 -1
  183. package/dist/components/ui/progress.d.ts +0 -5
  184. package/dist/components/ui/progress.d.ts.map +0 -1
  185. package/dist/components/ui/progress.js +0 -9
  186. package/dist/components/ui/progress.js.map +0 -1
  187. package/dist/components/ui/separator.d.ts +0 -5
  188. package/dist/components/ui/separator.d.ts.map +0 -1
  189. package/dist/components/ui/separator.js +0 -9
  190. package/dist/components/ui/separator.js.map +0 -1
  191. package/dist/components/ui/switch.d.ts +0 -5
  192. package/dist/components/ui/switch.d.ts.map +0 -1
  193. package/dist/components/ui/switch.js +0 -8
  194. package/dist/components/ui/switch.js.map +0 -1
  195. package/dist/components/ui/tabs.d.ts +0 -8
  196. package/dist/components/ui/tabs.d.ts.map +0 -1
  197. package/dist/components/ui/tabs.js +0 -17
  198. package/dist/components/ui/tabs.js.map +0 -1
  199. package/dist/components/ui/toggle.d.ts +0 -10
  200. package/dist/components/ui/toggle.d.ts.map +0 -1
  201. package/dist/components/ui/toggle.js +0 -26
  202. package/dist/components/ui/toggle.js.map +0 -1
  203. package/dist/components.d.ts +0 -12
  204. package/dist/components.d.ts.map +0 -1
  205. package/dist/components.js +0 -13
  206. package/dist/components.js.map +0 -1
  207. package/dist/hooks/index.d.ts +0 -7
  208. package/dist/hooks/index.d.ts.map +0 -1
  209. package/dist/hooks/index.js +0 -5
  210. package/dist/hooks/index.js.map +0 -1
  211. package/dist/hooks/useWorkbenchSchemas.d.ts +0 -56
  212. package/dist/hooks/useWorkbenchSchemas.d.ts.map +0 -1
  213. package/dist/hooks/useWorkbenchSchemas.js +0 -63
  214. package/dist/hooks/useWorkbenchSchemas.js.map +0 -1
  215. package/src/components/ConnectionStatus.tsx +0 -67
  216. package/src/components/Inline.tsx +0 -16
  217. package/src/components/ai-elements/artifact.tsx +0 -118
  218. package/src/components/ai-elements/branch.tsx +0 -187
  219. package/src/components/ai-elements/canvas.tsx +0 -24
  220. package/src/components/ai-elements/chain-of-thought.tsx +0 -198
  221. package/src/components/ai-elements/confirmation.tsx +0 -119
  222. package/src/components/ai-elements/connection.tsx +0 -16
  223. package/src/components/ai-elements/context.tsx +0 -357
  224. package/src/components/ai-elements/controls.tsx +0 -18
  225. package/src/components/ai-elements/edge.tsx +0 -131
  226. package/src/components/ai-elements/image.tsx +0 -16
  227. package/src/components/ai-elements/inline-citation.tsx +0 -246
  228. package/src/components/ai-elements/loader.tsx +0 -88
  229. package/src/components/ai-elements/node.tsx +0 -66
  230. package/src/components/ai-elements/open-in-chat.tsx +0 -333
  231. package/src/components/ai-elements/panel.tsx +0 -12
  232. package/src/components/ai-elements/plan.tsx +0 -123
  233. package/src/components/ai-elements/queue.tsx +0 -231
  234. package/src/components/ai-elements/reasoning.tsx +0 -163
  235. package/src/components/ai-elements/response.tsx +0 -19
  236. package/src/components/ai-elements/sources.tsx +0 -53
  237. package/src/components/ai-elements/suggestion.tsx +0 -47
  238. package/src/components/ai-elements/task.tsx +0 -64
  239. package/src/components/ai-elements/tool.tsx +0 -136
  240. package/src/components/ai-elements/toolbar.tsx +0 -13
  241. package/src/components/ai-elements/web-preview.tsx +0 -238
  242. package/src/components/ui/alert.tsx +0 -60
  243. package/src/components/ui/badge.tsx +0 -40
  244. package/src/components/ui/card.tsx +0 -41
  245. package/src/components/ui/carousel.tsx +0 -234
  246. package/src/components/ui/checkbox.tsx +0 -27
  247. package/src/components/ui/collapsible.tsx +0 -21
  248. package/src/components/ui/field.tsx +0 -234
  249. package/src/components/ui/form.tsx +0 -154
  250. package/src/components/ui/label.tsx +0 -21
  251. package/src/components/ui/progress.tsx +0 -28
  252. package/src/components/ui/separator.tsx +0 -28
  253. package/src/components/ui/switch.tsx +0 -26
  254. package/src/components/ui/tabs.tsx +0 -52
  255. package/src/components/ui/toggle.tsx +0 -44
  256. package/src/components.tsx +0 -29
  257. package/src/hooks/index.ts +0 -20
  258. package/src/hooks/useWorkbenchSchemas.ts +0 -69
@@ -1,18 +0,0 @@
1
- 'use client';
2
-
3
- import { cn } from '../../lib/utils';
4
- import { Controls as ControlsPrimitive } from '@xyflow/react';
5
- import type { ComponentProps } from 'react';
6
-
7
- export type ControlsProps = ComponentProps<typeof ControlsPrimitive>;
8
-
9
- export const Controls = ({ className, ...props }: ControlsProps) => (
10
- <ControlsPrimitive
11
- className={cn(
12
- 'gap-px overflow-hidden rounded-md border bg-card p-1 shadow-none!',
13
- '[&>button]:rounded-md [&>button]:border-none! [&>button]:bg-transparent! [&>button]:hover:bg-secondary!',
14
- className
15
- )}
16
- {...props}
17
- />
18
- );
@@ -1,131 +0,0 @@
1
- import {
2
- BaseEdge,
3
- type EdgeProps,
4
- getBezierPath,
5
- getSimpleBezierPath,
6
- type InternalNode,
7
- type Node,
8
- Position,
9
- useInternalNode,
10
- } from '@xyflow/react';
11
-
12
- const Temporary = ({
13
- id,
14
- sourceX,
15
- sourceY,
16
- targetX,
17
- targetY,
18
- sourcePosition,
19
- targetPosition,
20
- }: EdgeProps) => {
21
- const [edgePath] = getSimpleBezierPath({
22
- sourceX,
23
- sourceY,
24
- sourcePosition,
25
- targetX,
26
- targetY,
27
- targetPosition,
28
- });
29
-
30
- return (
31
- <BaseEdge
32
- className="stroke-1 stroke-ring"
33
- id={id}
34
- path={edgePath}
35
- style={{
36
- strokeDasharray: '5, 5',
37
- }}
38
- />
39
- );
40
- };
41
-
42
- const getHandleCoordsByPosition = (node: InternalNode<Node>, handlePosition: Position) => {
43
- // Choose the handle type based on position - Left is for target, Right is for source
44
- const handleType = handlePosition === Position.Left ? 'target' : 'source';
45
-
46
- const handle = node.internals.handleBounds?.[handleType]?.find(
47
- (h) => h.position === handlePosition
48
- );
49
-
50
- if (!handle) {
51
- return [0, 0] as const;
52
- }
53
-
54
- let offsetX = handle.width / 2;
55
- let offsetY = handle.height / 2;
56
-
57
- // this is a tiny detail to make the markerEnd of an edge visible.
58
- // The handle position that gets calculated has the origin top-left, so depending which side we are using, we add a little offset
59
- // when the handlePosition is Position.Right for example, we need to add an offset as big as the handle itself in order to get the correct position
60
- switch (handlePosition) {
61
- case Position.Left:
62
- offsetX = 0;
63
- break;
64
- case Position.Right:
65
- offsetX = handle.width;
66
- break;
67
- case Position.Top:
68
- offsetY = 0;
69
- break;
70
- case Position.Bottom:
71
- offsetY = handle.height;
72
- break;
73
- default:
74
- throw new Error(`Invalid handle position: ${handlePosition}`);
75
- }
76
-
77
- const x = node.internals.positionAbsolute.x + handle.x + offsetX;
78
- const y = node.internals.positionAbsolute.y + handle.y + offsetY;
79
-
80
- return [x, y] as const;
81
- };
82
-
83
- const getEdgeParams = (source: InternalNode<Node>, target: InternalNode<Node>) => {
84
- const sourcePos = Position.Right;
85
- const [sx, sy] = getHandleCoordsByPosition(source, sourcePos);
86
- const targetPos = Position.Left;
87
- const [tx, ty] = getHandleCoordsByPosition(target, targetPos);
88
-
89
- return {
90
- sx,
91
- sy,
92
- tx,
93
- ty,
94
- sourcePos,
95
- targetPos,
96
- };
97
- };
98
-
99
- const Animated = ({ id, source, target, markerEnd, style }: EdgeProps) => {
100
- const sourceNode = useInternalNode(source);
101
- const targetNode = useInternalNode(target);
102
-
103
- if (!(sourceNode && targetNode)) {
104
- return null;
105
- }
106
-
107
- const { sx, sy, tx, ty, sourcePos, targetPos } = getEdgeParams(sourceNode, targetNode);
108
-
109
- const [edgePath] = getBezierPath({
110
- sourceX: sx,
111
- sourceY: sy,
112
- sourcePosition: sourcePos,
113
- targetX: tx,
114
- targetY: ty,
115
- targetPosition: targetPos,
116
- });
117
-
118
- return (
119
- <>
120
- <BaseEdge id={id} markerEnd={markerEnd} path={edgePath} style={style} />
121
- <circle fill="var(--primary)" r="4">
122
- <animateMotion dur="2s" path={edgePath} repeatCount="indefinite" />
123
- </circle>
124
- </>
125
- );
126
- };
127
-
128
- export const Edge = {
129
- Temporary,
130
- Animated,
131
- };
@@ -1,16 +0,0 @@
1
- import { cn } from '../../lib/utils';
2
- import type { Experimental_GeneratedImage } from 'ai';
3
-
4
- export type ImageProps = Experimental_GeneratedImage & {
5
- className?: string;
6
- alt?: string;
7
- };
8
-
9
- export const Image = ({ base64, uint8Array, mediaType, ...props }: ImageProps) => (
10
- <img
11
- {...props}
12
- alt={props.alt}
13
- className={cn('h-auto max-w-full overflow-hidden rounded-md', props.className)}
14
- src={`data:${mediaType};base64,${base64}`}
15
- />
16
- );
@@ -1,246 +0,0 @@
1
- 'use client';
2
-
3
- import { Badge } from '../ui/badge';
4
- import { Carousel, type CarouselApi, CarouselContent, CarouselItem } from '../ui/carousel';
5
- import { HoverCard, HoverCardContent, HoverCardTrigger } from '../ui/hover-card';
6
- import { cn } from '../../lib/utils';
7
- import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';
8
- import {
9
- type ComponentProps,
10
- createContext,
11
- useCallback,
12
- useContext,
13
- useEffect,
14
- useState,
15
- } from 'react';
16
-
17
- export type InlineCitationProps = ComponentProps<'span'>;
18
-
19
- export const InlineCitation = ({ className, ...props }: InlineCitationProps) => (
20
- <span className={cn('group inline items-center gap-1', className)} {...props} />
21
- );
22
-
23
- export type InlineCitationTextProps = ComponentProps<'span'>;
24
-
25
- export const InlineCitationText = ({ className, ...props }: InlineCitationTextProps) => (
26
- <span className={cn('transition-colors group-hover:bg-accent', className)} {...props} />
27
- );
28
-
29
- export type InlineCitationCardProps = ComponentProps<typeof HoverCard>;
30
-
31
- export const InlineCitationCard = (props: InlineCitationCardProps) => (
32
- <HoverCard closeDelay={0} openDelay={0} {...props} />
33
- );
34
-
35
- export type InlineCitationCardTriggerProps = ComponentProps<typeof Badge> & {
36
- sources: string[];
37
- };
38
-
39
- export const InlineCitationCardTrigger = ({
40
- sources,
41
- className,
42
- ...props
43
- }: InlineCitationCardTriggerProps) => (
44
- <HoverCardTrigger asChild>
45
- <Badge className={cn('ml-1 rounded-full', className)} variant="secondary" {...props}>
46
- {sources[0] ? (
47
- <>
48
- {new URL(sources[0]).hostname} {sources.length > 1 && `+${sources.length - 1}`}
49
- </>
50
- ) : (
51
- 'unknown'
52
- )}
53
- </Badge>
54
- </HoverCardTrigger>
55
- );
56
-
57
- export type InlineCitationCardBodyProps = ComponentProps<'div'>;
58
-
59
- export const InlineCitationCardBody = ({ className, ...props }: InlineCitationCardBodyProps) => (
60
- <HoverCardContent className={cn('relative w-80 p-0', className)} {...props} />
61
- );
62
-
63
- const CarouselApiContext = createContext<CarouselApi | undefined>(undefined);
64
-
65
- const useCarouselApi = () => {
66
- const context = useContext(CarouselApiContext);
67
- return context;
68
- };
69
-
70
- export type InlineCitationCarouselProps = ComponentProps<typeof Carousel>;
71
-
72
- export const InlineCitationCarousel = ({
73
- className,
74
- children,
75
- ...props
76
- }: InlineCitationCarouselProps) => {
77
- const [api, setApi] = useState<CarouselApi>();
78
-
79
- return (
80
- <CarouselApiContext.Provider value={api}>
81
- <Carousel className={cn('w-full', className)} setApi={setApi} {...props}>
82
- {children}
83
- </Carousel>
84
- </CarouselApiContext.Provider>
85
- );
86
- };
87
-
88
- export type InlineCitationCarouselContentProps = ComponentProps<'div'>;
89
-
90
- export const InlineCitationCarouselContent = (props: InlineCitationCarouselContentProps) => (
91
- <CarouselContent {...props} />
92
- );
93
-
94
- export type InlineCitationCarouselItemProps = ComponentProps<'div'>;
95
-
96
- export const InlineCitationCarouselItem = ({
97
- className,
98
- ...props
99
- }: InlineCitationCarouselItemProps) => (
100
- <CarouselItem className={cn('w-full space-y-2 p-4 pl-8', className)} {...props} />
101
- );
102
-
103
- export type InlineCitationCarouselHeaderProps = ComponentProps<'div'>;
104
-
105
- export const InlineCitationCarouselHeader = ({
106
- className,
107
- ...props
108
- }: InlineCitationCarouselHeaderProps) => (
109
- <div
110
- className={cn(
111
- 'flex items-center justify-between gap-2 rounded-t-md bg-secondary p-2',
112
- className
113
- )}
114
- {...props}
115
- />
116
- );
117
-
118
- export type InlineCitationCarouselIndexProps = ComponentProps<'div'>;
119
-
120
- export const InlineCitationCarouselIndex = ({
121
- children,
122
- className,
123
- ...props
124
- }: InlineCitationCarouselIndexProps) => {
125
- const api = useCarouselApi();
126
- const [current, setCurrent] = useState(0);
127
- const [count, setCount] = useState(0);
128
-
129
- useEffect(() => {
130
- if (!api) {
131
- return;
132
- }
133
-
134
- setCount(api.scrollSnapList().length);
135
- setCurrent(api.selectedScrollSnap() + 1);
136
-
137
- api.on('select', () => {
138
- setCurrent(api.selectedScrollSnap() + 1);
139
- });
140
- }, [api]);
141
-
142
- return (
143
- <div
144
- className={cn(
145
- 'flex flex-1 items-center justify-end px-3 py-1 text-muted-foreground text-xs',
146
- className
147
- )}
148
- {...props}
149
- >
150
- {children ?? `${current}/${count}`}
151
- </div>
152
- );
153
- };
154
-
155
- export type InlineCitationCarouselPrevProps = ComponentProps<'button'>;
156
-
157
- export const InlineCitationCarouselPrev = ({
158
- className,
159
- ...props
160
- }: InlineCitationCarouselPrevProps) => {
161
- const api = useCarouselApi();
162
-
163
- const handleClick = useCallback(() => {
164
- if (api) {
165
- api.scrollPrev();
166
- }
167
- }, [api]);
168
-
169
- return (
170
- <button
171
- aria-label="Previous"
172
- className={cn('shrink-0', className)}
173
- onClick={handleClick}
174
- type="button"
175
- {...props}
176
- >
177
- <ArrowLeftIcon className="size-4 text-muted-foreground" />
178
- </button>
179
- );
180
- };
181
-
182
- export type InlineCitationCarouselNextProps = ComponentProps<'button'>;
183
-
184
- export const InlineCitationCarouselNext = ({
185
- className,
186
- ...props
187
- }: InlineCitationCarouselNextProps) => {
188
- const api = useCarouselApi();
189
-
190
- const handleClick = useCallback(() => {
191
- if (api) {
192
- api.scrollNext();
193
- }
194
- }, [api]);
195
-
196
- return (
197
- <button
198
- aria-label="Next"
199
- className={cn('shrink-0', className)}
200
- onClick={handleClick}
201
- type="button"
202
- {...props}
203
- >
204
- <ArrowRightIcon className="size-4 text-muted-foreground" />
205
- </button>
206
- );
207
- };
208
-
209
- export type InlineCitationSourceProps = ComponentProps<'div'> & {
210
- title?: string;
211
- url?: string;
212
- description?: string;
213
- };
214
-
215
- export const InlineCitationSource = ({
216
- title,
217
- url,
218
- description,
219
- className,
220
- children,
221
- ...props
222
- }: InlineCitationSourceProps) => (
223
- <div className={cn('space-y-1', className)} {...props}>
224
- {title && <h4 className="truncate font-medium text-sm leading-tight">{title}</h4>}
225
- {url && <p className="truncate break-all text-muted-foreground text-xs">{url}</p>}
226
- {description && (
227
- <p className="line-clamp-3 text-muted-foreground text-sm leading-relaxed">{description}</p>
228
- )}
229
- {children}
230
- </div>
231
- );
232
-
233
- export type InlineCitationQuoteProps = ComponentProps<'blockquote'>;
234
-
235
- export const InlineCitationQuote = ({
236
- children,
237
- className,
238
- ...props
239
- }: InlineCitationQuoteProps) => (
240
- <blockquote
241
- className={cn('border-muted border-l-2 pl-3 text-muted-foreground text-sm italic', className)}
242
- {...props}
243
- >
244
- {children}
245
- </blockquote>
246
- );
@@ -1,88 +0,0 @@
1
- import { cn } from '../../lib/utils';
2
- import type { HTMLAttributes } from 'react';
3
-
4
- type LoaderIconProps = {
5
- size?: number;
6
- };
7
-
8
- const LoaderIcon = ({ size = 16 }: LoaderIconProps) => (
9
- <svg
10
- height={size}
11
- strokeLinejoin="round"
12
- style={{ color: 'currentcolor' }}
13
- viewBox="0 0 16 16"
14
- width={size}
15
- >
16
- <title>Loader</title>
17
- <g clipPath="url(#clip0_2393_1490)">
18
- <path d="M8 0V4" stroke="currentColor" strokeWidth="1.5" />
19
- <path d="M8 16V12" opacity="0.5" stroke="currentColor" strokeWidth="1.5" />
20
- <path
21
- d="M3.29773 1.52783L5.64887 4.7639"
22
- opacity="0.9"
23
- stroke="currentColor"
24
- strokeWidth="1.5"
25
- />
26
- <path
27
- d="M12.7023 1.52783L10.3511 4.7639"
28
- opacity="0.1"
29
- stroke="currentColor"
30
- strokeWidth="1.5"
31
- />
32
- <path
33
- d="M12.7023 14.472L10.3511 11.236"
34
- opacity="0.4"
35
- stroke="currentColor"
36
- strokeWidth="1.5"
37
- />
38
- <path
39
- d="M3.29773 14.472L5.64887 11.236"
40
- opacity="0.6"
41
- stroke="currentColor"
42
- strokeWidth="1.5"
43
- />
44
- <path
45
- d="M15.6085 5.52783L11.8043 6.7639"
46
- opacity="0.2"
47
- stroke="currentColor"
48
- strokeWidth="1.5"
49
- />
50
- <path
51
- d="M0.391602 10.472L4.19583 9.23598"
52
- opacity="0.7"
53
- stroke="currentColor"
54
- strokeWidth="1.5"
55
- />
56
- <path
57
- d="M15.6085 10.4722L11.8043 9.2361"
58
- opacity="0.3"
59
- stroke="currentColor"
60
- strokeWidth="1.5"
61
- />
62
- <path
63
- d="M0.391602 5.52783L4.19583 6.7639"
64
- opacity="0.8"
65
- stroke="currentColor"
66
- strokeWidth="1.5"
67
- />
68
- </g>
69
- <defs>
70
- <clipPath id="clip0_2393_1490">
71
- <rect fill="white" height="16" width="16" />
72
- </clipPath>
73
- </defs>
74
- </svg>
75
- );
76
-
77
- export type LoaderProps = HTMLAttributes<HTMLDivElement> & {
78
- size?: number;
79
- };
80
-
81
- export const Loader = ({ className, size = 16, ...props }: LoaderProps) => (
82
- <div
83
- className={cn('inline-flex animate-spin items-center justify-center', className)}
84
- {...props}
85
- >
86
- <LoaderIcon size={size} />
87
- </div>
88
- );
@@ -1,66 +0,0 @@
1
- import {
2
- Card,
3
- CardAction,
4
- CardContent,
5
- CardDescription,
6
- CardFooter,
7
- CardHeader,
8
- CardTitle,
9
- } from '../ui/card';
10
- import { cn } from '../../lib/utils';
11
- import { Handle, Position } from '@xyflow/react';
12
- import type { ComponentProps } from 'react';
13
-
14
- export type NodeProps = ComponentProps<typeof Card> & {
15
- handles: {
16
- target: boolean;
17
- source: boolean;
18
- };
19
- };
20
-
21
- export const Node = ({ handles, className, ...props }: NodeProps) => (
22
- <Card
23
- className={cn(
24
- 'node-container relative size-full h-auto w-sm gap-0 rounded-md p-0',
25
- className
26
- )}
27
- {...props}
28
- >
29
- {handles.target && <Handle position={Position.Left} type="target" />}
30
- {handles.source && <Handle position={Position.Right} type="source" />}
31
- {props.children}
32
- </Card>
33
- );
34
-
35
- export type NodeHeaderProps = ComponentProps<typeof CardHeader>;
36
-
37
- export const NodeHeader = ({ className, ...props }: NodeHeaderProps) => (
38
- <CardHeader
39
- className={cn('gap-0.5 rounded-t-md border-b bg-secondary p-3!', className)}
40
- {...props}
41
- />
42
- );
43
-
44
- export type NodeTitleProps = ComponentProps<typeof CardTitle>;
45
-
46
- export const NodeTitle = (props: NodeTitleProps) => <CardTitle {...props} />;
47
-
48
- export type NodeDescriptionProps = ComponentProps<typeof CardDescription>;
49
-
50
- export const NodeDescription = (props: NodeDescriptionProps) => <CardDescription {...props} />;
51
-
52
- export type NodeActionProps = ComponentProps<typeof CardAction>;
53
-
54
- export const NodeAction = (props: NodeActionProps) => <CardAction {...props} />;
55
-
56
- export type NodeContentProps = ComponentProps<typeof CardContent>;
57
-
58
- export const NodeContent = ({ className, ...props }: NodeContentProps) => (
59
- <CardContent className={cn('p-3', className)} {...props} />
60
- );
61
-
62
- export type NodeFooterProps = ComponentProps<typeof CardFooter>;
63
-
64
- export const NodeFooter = ({ className, ...props }: NodeFooterProps) => (
65
- <CardFooter className={cn('rounded-b-md border-t bg-secondary p-3!', className)} {...props} />
66
- );