@townco/ui 0.1.16 → 0.1.18

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 (212) hide show
  1. package/dist/core/hooks/use-chat-input.d.ts +17 -17
  2. package/dist/core/hooks/use-chat-input.js +55 -64
  3. package/dist/core/hooks/use-chat-messages.js +114 -121
  4. package/dist/core/hooks/use-chat-session.d.ts +1 -1
  5. package/dist/core/hooks/use-chat-session.js +80 -78
  6. package/dist/gui/components/Button.d.ts +7 -23
  7. package/dist/gui/components/Button.js +27 -40
  8. package/dist/gui/components/Card.d.ts +7 -26
  9. package/dist/gui/components/Card.js +8 -54
  10. package/dist/gui/components/ChatSecondaryPanel.d.ts +25 -14
  11. package/dist/gui/components/ChatSecondaryPanel.js +60 -115
  12. package/dist/gui/components/ChatStatus.d.ts +2 -4
  13. package/dist/gui/components/ChatStatus.js +34 -45
  14. package/dist/gui/components/Conversation.d.ts +14 -17
  15. package/dist/gui/components/Conversation.js +83 -143
  16. package/dist/gui/components/Dialog.d.ts +11 -57
  17. package/dist/gui/components/Dialog.js +8 -84
  18. package/dist/gui/components/HeightTransition.d.ts +7 -12
  19. package/dist/gui/components/HeightTransition.js +77 -88
  20. package/dist/gui/components/Input.d.ts +6 -13
  21. package/dist/gui/components/Input.js +16 -27
  22. package/dist/gui/components/Label.d.ts +1 -7
  23. package/dist/gui/components/Label.js +2 -12
  24. package/dist/gui/components/MarkdownRenderer.d.ts +4 -6
  25. package/dist/gui/components/MarkdownRenderer.js +81 -178
  26. package/dist/gui/components/MessageContent.d.ts +22 -29
  27. package/dist/gui/components/PanelTabsHeader.d.ts +17 -0
  28. package/dist/gui/components/PanelTabsHeader.js +31 -0
  29. package/dist/gui/components/Reasoning.d.ts +24 -30
  30. package/dist/gui/components/Reasoning.js +60 -187
  31. package/dist/gui/components/Response.d.ts +9 -11
  32. package/dist/gui/components/Response.js +90 -229
  33. package/dist/gui/components/Select.d.ts +10 -69
  34. package/dist/gui/components/Select.js +12 -118
  35. package/dist/gui/components/Tabs.d.ts +4 -24
  36. package/dist/gui/components/Tabs.js +4 -32
  37. package/dist/gui/components/Task.d.ts +24 -28
  38. package/dist/gui/components/Task.js +31 -164
  39. package/dist/gui/components/Textarea.d.ts +7 -15
  40. package/dist/gui/components/Textarea.js +46 -63
  41. package/dist/gui/components/ThinkingBlock.d.ts +10 -20
  42. package/dist/gui/components/ThinkingBlock.js +35 -134
  43. package/dist/gui/components/TodoList.d.ts +10 -12
  44. package/dist/gui/components/TodoList.js +7 -22
  45. package/dist/gui/components/TodoListItem.d.ts +6 -9
  46. package/dist/gui/components/TodoListItem.js +4 -18
  47. package/dist/gui/components/ToolCall.js +5 -5
  48. package/dist/gui/components/index.d.ts +1 -0
  49. package/dist/gui/components/index.js +1 -0
  50. package/dist/gui/lib/utils.js +1 -1
  51. package/dist/index.test.js +1 -0
  52. package/dist/sdk/client/acp-client.d.ts +76 -88
  53. package/dist/sdk/client/acp-client.js +217 -215
  54. package/dist/sdk/schemas/agent.d.ts +64 -111
  55. package/dist/sdk/schemas/agent.js +24 -24
  56. package/dist/sdk/schemas/message.d.ts +147 -245
  57. package/dist/sdk/schemas/message.js +40 -40
  58. package/dist/sdk/schemas/session.d.ts +6 -6
  59. package/dist/sdk/transports/http.d.ts +55 -55
  60. package/dist/sdk/transports/stdio.d.ts +20 -20
  61. package/dist/sdk/transports/types.d.ts +42 -42
  62. package/dist/sdk/transports/websocket.d.ts +12 -12
  63. package/dist/sdk/transports/websocket.js +46 -52
  64. package/dist/tui/components/ChatView.d.ts +2 -4
  65. package/dist/tui/components/GameOfLife.js +35 -64
  66. package/dist/tui/components/InputBox.d.ts +11 -18
  67. package/dist/tui/components/InputBox.js +10 -70
  68. package/dist/tui/components/ReadlineInput.d.ts +6 -12
  69. package/dist/tui/components/ReadlineInput.js +237 -252
  70. package/dist/tui/components/SingleSelect.d.ts +9 -15
  71. package/dist/tui/components/SingleSelect.js +43 -84
  72. package/dist/tui/components/StatusBar.d.ts +6 -11
  73. package/dist/tui/components/StatusBar.js +67 -102
  74. package/package.json +3 -3
  75. package/dist/core/hooks/index.d.ts.map +0 -1
  76. package/dist/core/hooks/index.js.map +0 -1
  77. package/dist/core/hooks/use-chat-input.d.ts.map +0 -1
  78. package/dist/core/hooks/use-chat-input.js.map +0 -1
  79. package/dist/core/hooks/use-chat-messages.d.ts.map +0 -1
  80. package/dist/core/hooks/use-chat-messages.js.map +0 -1
  81. package/dist/core/hooks/use-chat-session.d.ts.map +0 -1
  82. package/dist/core/hooks/use-chat-session.js.map +0 -1
  83. package/dist/core/index.d.ts.map +0 -1
  84. package/dist/core/index.js.map +0 -1
  85. package/dist/core/schemas/chat.d.ts.map +0 -1
  86. package/dist/core/schemas/chat.js.map +0 -1
  87. package/dist/core/schemas/index.d.ts.map +0 -1
  88. package/dist/core/schemas/index.js.map +0 -1
  89. package/dist/core/store/chat-store.d.ts.map +0 -1
  90. package/dist/core/store/chat-store.js.map +0 -1
  91. package/dist/gui/components/Button.d.ts.map +0 -1
  92. package/dist/gui/components/Button.js.map +0 -1
  93. package/dist/gui/components/Card.d.ts.map +0 -1
  94. package/dist/gui/components/Card.js.map +0 -1
  95. package/dist/gui/components/ChatInput.d.ts.map +0 -1
  96. package/dist/gui/components/ChatInput.js.map +0 -1
  97. package/dist/gui/components/ChatInterface.d.ts +0 -12
  98. package/dist/gui/components/ChatInterface.d.ts.map +0 -1
  99. package/dist/gui/components/ChatInterface.js +0 -204
  100. package/dist/gui/components/ChatInterface.js.map +0 -1
  101. package/dist/gui/components/ChatPreview.d.ts +0 -12
  102. package/dist/gui/components/ChatPreview.d.ts.map +0 -1
  103. package/dist/gui/components/ChatPreview.js +0 -214
  104. package/dist/gui/components/ChatPreview.js.map +0 -1
  105. package/dist/gui/components/ChatSecondaryPanel.d.ts.map +0 -1
  106. package/dist/gui/components/ChatSecondaryPanel.js.map +0 -1
  107. package/dist/gui/components/ChatStatus.d.ts.map +0 -1
  108. package/dist/gui/components/ChatStatus.js.map +0 -1
  109. package/dist/gui/components/ChatView.d.ts +0 -8
  110. package/dist/gui/components/ChatView.d.ts.map +0 -1
  111. package/dist/gui/components/ChatView.js +0 -42
  112. package/dist/gui/components/ChatView.js.map +0 -1
  113. package/dist/gui/components/ConfigPanel.d.ts +0 -20
  114. package/dist/gui/components/ConfigPanel.d.ts.map +0 -1
  115. package/dist/gui/components/ConfigPanel.js +0 -225
  116. package/dist/gui/components/ConfigPanel.js.map +0 -1
  117. package/dist/gui/components/Conversation.d.ts.map +0 -1
  118. package/dist/gui/components/Conversation.js.map +0 -1
  119. package/dist/gui/components/Dialog.d.ts.map +0 -1
  120. package/dist/gui/components/Dialog.js.map +0 -1
  121. package/dist/gui/components/HeightTransition.d.ts.map +0 -1
  122. package/dist/gui/components/HeightTransition.js.map +0 -1
  123. package/dist/gui/components/Input.d.ts.map +0 -1
  124. package/dist/gui/components/Input.js.map +0 -1
  125. package/dist/gui/components/InputBox.d.ts +0 -21
  126. package/dist/gui/components/InputBox.d.ts.map +0 -1
  127. package/dist/gui/components/InputBox.js +0 -90
  128. package/dist/gui/components/InputBox.js.map +0 -1
  129. package/dist/gui/components/Label.d.ts.map +0 -1
  130. package/dist/gui/components/Label.js.map +0 -1
  131. package/dist/gui/components/MarkdownRenderer.d.ts.map +0 -1
  132. package/dist/gui/components/MarkdownRenderer.js.map +0 -1
  133. package/dist/gui/components/Message.d.ts.map +0 -1
  134. package/dist/gui/components/Message.js.map +0 -1
  135. package/dist/gui/components/MessageContent.d.ts.map +0 -1
  136. package/dist/gui/components/MessageContent.js.map +0 -1
  137. package/dist/gui/components/MessageList.d.ts.map +0 -1
  138. package/dist/gui/components/MessageList.js.map +0 -1
  139. package/dist/gui/components/PlaygroundLayout.d.ts +0 -14
  140. package/dist/gui/components/PlaygroundLayout.d.ts.map +0 -1
  141. package/dist/gui/components/PlaygroundLayout.js +0 -49
  142. package/dist/gui/components/PlaygroundLayout.js.map +0 -1
  143. package/dist/gui/components/Reasoning.d.ts.map +0 -1
  144. package/dist/gui/components/Reasoning.js.map +0 -1
  145. package/dist/gui/components/Response.d.ts.map +0 -1
  146. package/dist/gui/components/Response.js.map +0 -1
  147. package/dist/gui/components/Select.d.ts.map +0 -1
  148. package/dist/gui/components/Select.js.map +0 -1
  149. package/dist/gui/components/StatusBar.d.ts +0 -12
  150. package/dist/gui/components/StatusBar.d.ts.map +0 -1
  151. package/dist/gui/components/StatusBar.js +0 -58
  152. package/dist/gui/components/StatusBar.js.map +0 -1
  153. package/dist/gui/components/Tabs.d.ts.map +0 -1
  154. package/dist/gui/components/Tabs.js.map +0 -1
  155. package/dist/gui/components/Task.d.ts.map +0 -1
  156. package/dist/gui/components/Task.js.map +0 -1
  157. package/dist/gui/components/Textarea.d.ts.map +0 -1
  158. package/dist/gui/components/Textarea.js.map +0 -1
  159. package/dist/gui/components/ThinkingBlock.d.ts.map +0 -1
  160. package/dist/gui/components/ThinkingBlock.js.map +0 -1
  161. package/dist/gui/components/TodoList.d.ts.map +0 -1
  162. package/dist/gui/components/TodoList.js.map +0 -1
  163. package/dist/gui/components/TodoListItem.d.ts.map +0 -1
  164. package/dist/gui/components/TodoListItem.js.map +0 -1
  165. package/dist/gui/components/index.d.ts.map +0 -1
  166. package/dist/gui/components/index.js.map +0 -1
  167. package/dist/gui/index.d.ts.map +0 -1
  168. package/dist/gui/index.js.map +0 -1
  169. package/dist/gui/lib/utils.d.ts.map +0 -1
  170. package/dist/gui/lib/utils.js.map +0 -1
  171. package/dist/index.d.ts.map +0 -1
  172. package/dist/index.js.map +0 -1
  173. package/dist/sdk/client/acp-client.d.ts.map +0 -1
  174. package/dist/sdk/client/acp-client.js.map +0 -1
  175. package/dist/sdk/client/index.d.ts.map +0 -1
  176. package/dist/sdk/client/index.js.map +0 -1
  177. package/dist/sdk/index.d.ts.map +0 -1
  178. package/dist/sdk/index.js.map +0 -1
  179. package/dist/sdk/schemas/agent.d.ts.map +0 -1
  180. package/dist/sdk/schemas/agent.js.map +0 -1
  181. package/dist/sdk/schemas/index.d.ts.map +0 -1
  182. package/dist/sdk/schemas/index.js.map +0 -1
  183. package/dist/sdk/schemas/message.d.ts.map +0 -1
  184. package/dist/sdk/schemas/message.js.map +0 -1
  185. package/dist/sdk/schemas/session.d.ts.map +0 -1
  186. package/dist/sdk/schemas/session.js.map +0 -1
  187. package/dist/sdk/transports/http.d.ts.map +0 -1
  188. package/dist/sdk/transports/http.js.map +0 -1
  189. package/dist/sdk/transports/index.d.ts.map +0 -1
  190. package/dist/sdk/transports/index.js.map +0 -1
  191. package/dist/sdk/transports/stdio.d.ts.map +0 -1
  192. package/dist/sdk/transports/stdio.js.map +0 -1
  193. package/dist/sdk/transports/types.d.ts.map +0 -1
  194. package/dist/sdk/transports/types.js.map +0 -1
  195. package/dist/sdk/transports/websocket.d.ts.map +0 -1
  196. package/dist/sdk/transports/websocket.js.map +0 -1
  197. package/dist/tui/components/ChatView.d.ts.map +0 -1
  198. package/dist/tui/components/ChatView.js.map +0 -1
  199. package/dist/tui/components/GameOfLife.d.ts.map +0 -1
  200. package/dist/tui/components/GameOfLife.js.map +0 -1
  201. package/dist/tui/components/InputBox.d.ts.map +0 -1
  202. package/dist/tui/components/InputBox.js.map +0 -1
  203. package/dist/tui/components/MessageList.d.ts.map +0 -1
  204. package/dist/tui/components/MessageList.js.map +0 -1
  205. package/dist/tui/components/ReadlineInput.d.ts.map +0 -1
  206. package/dist/tui/components/ReadlineInput.js.map +0 -1
  207. package/dist/tui/components/StatusBar.d.ts.map +0 -1
  208. package/dist/tui/components/StatusBar.js.map +0 -1
  209. package/dist/tui/components/index.d.ts.map +0 -1
  210. package/dist/tui/components/index.js.map +0 -1
  211. package/dist/tui/index.d.ts.map +0 -1
  212. package/dist/tui/index.js.map +0 -1
@@ -1,147 +1,87 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
2
  import * as React from "react";
2
3
  import { useCallback, useEffect, useRef, useState } from "react";
3
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import { cn } from "../lib/utils.js";
5
- export const Conversation = React.forwardRef(
6
- (
7
- {
8
- autoScroll = true,
9
- isStreaming = false,
10
- scrollBehavior = "smooth",
11
- scrollThreshold = 100,
12
- showScrollButton = true,
13
- scrollButton,
14
- className,
15
- children,
16
- ...props
17
- },
18
- ref,
19
- ) => {
20
- const containerRef = useRef(null);
21
- const [isNearBottom, setIsNearBottom] = useState(true);
22
- const [showButton, setShowButton] = useState(false);
23
- const lastScrollTopRef = useRef(0);
24
- // Combine refs
25
- React.useImperativeHandle(ref, () => {
26
- if (!containerRef.current) {
27
- throw new Error("Container ref not initialized");
28
- }
29
- return containerRef.current;
30
- });
31
- // Check if user is near bottom of scroll area
32
- const checkScrollPosition = useCallback(() => {
33
- const container = containerRef.current;
34
- if (!container) return;
35
- const { scrollTop, scrollHeight, clientHeight } = container;
36
- const distanceFromBottom = scrollHeight - scrollTop - clientHeight;
37
- const nearBottom = distanceFromBottom < scrollThreshold;
38
- setIsNearBottom(nearBottom);
39
- setShowButton(!nearBottom && showScrollButton);
40
- lastScrollTopRef.current = scrollTop;
41
- }, [scrollThreshold, showScrollButton]);
42
- // Scroll to bottom
43
- const scrollToBottom = useCallback(
44
- (behavior = scrollBehavior) => {
45
- const container = containerRef.current;
46
- if (!container) return;
47
- container.scrollTo({
48
- top: container.scrollHeight,
49
- behavior,
50
- });
51
- },
52
- [scrollBehavior],
53
- );
54
- // Auto-scroll when new content appears and user is near bottom
55
- useEffect(() => {
56
- if (!autoScroll) return;
57
- const container = containerRef.current;
58
- if (!container) return;
59
- // Always scroll during streaming if user is near bottom
60
- if (isStreaming && isNearBottom) {
61
- scrollToBottom("auto");
62
- }
63
- // Scroll on new messages if near bottom
64
- else if (!isStreaming && isNearBottom) {
65
- scrollToBottom();
66
- }
67
- }, [autoScroll, isStreaming, isNearBottom, scrollToBottom]);
68
- // Set up scroll listener
69
- useEffect(() => {
70
- const container = containerRef.current;
71
- if (!container) return;
72
- const handleScroll = () => {
73
- checkScrollPosition();
74
- };
75
- container.addEventListener("scroll", handleScroll, { passive: true });
76
- // Check initial position
77
- checkScrollPosition();
78
- return () => {
79
- container.removeEventListener("scroll", handleScroll);
80
- };
81
- }, [checkScrollPosition]);
82
- // Watch for resize events
83
- useEffect(() => {
84
- const container = containerRef.current;
85
- if (!container) return;
86
- const resizeObserver = new ResizeObserver(() => {
87
- if (isNearBottom && autoScroll) {
88
- scrollToBottom("auto");
89
- }
90
- });
91
- resizeObserver.observe(container);
92
- return () => {
93
- resizeObserver.disconnect();
94
- };
95
- }, [isNearBottom, autoScroll, scrollToBottom]);
96
- return _jsxs("div", {
97
- className: "relative flex-1",
98
- children: [
99
- _jsx("div", {
100
- ref: containerRef,
101
- className: cn(
102
- "h-full overflow-y-auto overflow-x-hidden",
103
- "scrollbar-thin scrollbar-thumb-[border] scrollbar-track-transparent",
104
- className,
105
- ),
106
- ...props,
107
- children: _jsx("div", {
108
- className: "flex flex-col gap-4 px-4 py-4",
109
- children: children,
110
- }),
111
- }),
112
- showButton &&
113
- _jsx("div", {
114
- className: "absolute bottom-4 left-1/2 -translate-x-1/2 z-10",
115
- children:
116
- scrollButton ||
117
- _jsxs("button", {
118
- type: "button",
119
- onClick: () => scrollToBottom(),
120
- className:
121
- "px-4 py-2 rounded-full bg-card border border-border shadow-lg hover:shadow-xl hover:bg-card/90 transition-all text-sm font-medium text-foreground flex items-center gap-2",
122
- "aria-label": "Scroll to bottom",
123
- children: [
124
- _jsx("svg", {
125
- className: "w-4 h-4",
126
- fill: "none",
127
- stroke: "currentColor",
128
- viewBox: "0 0 24 24",
129
- xmlns: "http://www.w3.org/2000/svg",
130
- role: "img",
131
- "aria-label": "Down arrow",
132
- children: _jsx("path", {
133
- strokeLinecap: "round",
134
- strokeLinejoin: "round",
135
- strokeWidth: 2,
136
- d: "M19 14l-7 7m0 0l-7-7m7 7V3",
137
- }),
138
- }),
139
- "Scroll to bottom",
140
- ],
141
- }),
142
- }),
143
- ],
144
- });
145
- },
146
- );
5
+ export const Conversation = React.forwardRef(({ autoScroll = true, isStreaming = false, scrollBehavior = "smooth", scrollThreshold = 100, showScrollButton = true, scrollButton, className, children, ...props }, ref) => {
6
+ const containerRef = useRef(null);
7
+ const [isNearBottom, setIsNearBottom] = useState(true);
8
+ const [showButton, setShowButton] = useState(false);
9
+ const lastScrollTopRef = useRef(0);
10
+ // Combine refs
11
+ React.useImperativeHandle(ref, () => {
12
+ if (!containerRef.current) {
13
+ throw new Error("Container ref not initialized");
14
+ }
15
+ return containerRef.current;
16
+ });
17
+ // Check if user is near bottom of scroll area
18
+ const checkScrollPosition = useCallback(() => {
19
+ const container = containerRef.current;
20
+ if (!container)
21
+ return;
22
+ const { scrollTop, scrollHeight, clientHeight } = container;
23
+ const distanceFromBottom = scrollHeight - scrollTop - clientHeight;
24
+ const nearBottom = distanceFromBottom < scrollThreshold;
25
+ setIsNearBottom(nearBottom);
26
+ setShowButton(!nearBottom && showScrollButton);
27
+ lastScrollTopRef.current = scrollTop;
28
+ }, [scrollThreshold, showScrollButton]);
29
+ // Scroll to bottom
30
+ const scrollToBottom = useCallback((behavior = scrollBehavior) => {
31
+ const container = containerRef.current;
32
+ if (!container)
33
+ return;
34
+ container.scrollTo({
35
+ top: container.scrollHeight,
36
+ behavior,
37
+ });
38
+ }, [scrollBehavior]);
39
+ // Auto-scroll when new content appears and user is near bottom
40
+ useEffect(() => {
41
+ if (!autoScroll)
42
+ return;
43
+ const container = containerRef.current;
44
+ if (!container)
45
+ return;
46
+ // Always scroll during streaming if user is near bottom
47
+ if (isStreaming && isNearBottom) {
48
+ scrollToBottom("auto");
49
+ }
50
+ // Scroll on new messages if near bottom
51
+ else if (!isStreaming && isNearBottom) {
52
+ scrollToBottom();
53
+ }
54
+ }, [autoScroll, isStreaming, isNearBottom, scrollToBottom]);
55
+ // Set up scroll listener
56
+ useEffect(() => {
57
+ const container = containerRef.current;
58
+ if (!container)
59
+ return;
60
+ const handleScroll = () => {
61
+ checkScrollPosition();
62
+ };
63
+ container.addEventListener("scroll", handleScroll, { passive: true });
64
+ // Check initial position
65
+ checkScrollPosition();
66
+ return () => {
67
+ container.removeEventListener("scroll", handleScroll);
68
+ };
69
+ }, [checkScrollPosition]);
70
+ // Watch for resize events
71
+ useEffect(() => {
72
+ const container = containerRef.current;
73
+ if (!container)
74
+ return;
75
+ const resizeObserver = new ResizeObserver(() => {
76
+ if (isNearBottom && autoScroll) {
77
+ scrollToBottom("auto");
78
+ }
79
+ });
80
+ resizeObserver.observe(container);
81
+ return () => {
82
+ resizeObserver.disconnect();
83
+ };
84
+ }, [isNearBottom, autoScroll, scrollToBottom]);
85
+ return (_jsxs("div", { className: "relative flex-1", children: [_jsx("div", { ref: containerRef, className: cn("h-full overflow-y-auto overflow-x-hidden", "scrollbar-thin scrollbar-thumb-[border] scrollbar-track-transparent", className), ...props, children: _jsx("div", { className: "flex flex-col gap-4 px-4 py-4", children: children }) }), showButton && (_jsx("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 z-10", children: scrollButton || (_jsxs("button", { type: "button", onClick: () => scrollToBottom(), className: "px-4 py-2 rounded-full bg-card border border-border shadow-lg hover:shadow-xl hover:bg-card/90 transition-all text-sm font-medium text-foreground flex items-center gap-2", "aria-label": "Scroll to bottom", children: [_jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", role: "img", "aria-label": "Down arrow", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 14l-7 7m0 0l-7-7m7 7V3" }) }), "Scroll to bottom"] })) }))] }));
86
+ });
147
87
  Conversation.displayName = "Conversation";
@@ -1,65 +1,19 @@
1
1
  import * as DialogPrimitive from "@radix-ui/react-dialog";
2
2
  import * as React from "react";
3
3
  declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
4
- declare const DialogTrigger: React.ForwardRefExoticComponent<
5
- DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>
6
- >;
4
+ declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
7
5
  declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
8
- declare const DialogClose: React.ForwardRefExoticComponent<
9
- DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>
10
- >;
11
- declare const DialogOverlay: React.ForwardRefExoticComponent<
12
- Omit<
13
- DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>,
14
- "ref"
15
- > &
16
- React.RefAttributes<HTMLDivElement>
17
- >;
18
- declare const DialogContent: React.ForwardRefExoticComponent<
19
- Omit<
20
- DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>,
21
- "ref"
22
- > &
23
- React.RefAttributes<HTMLDivElement>
24
- >;
6
+ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
25
9
  declare const DialogHeader: {
26
- ({
27
- className,
28
- ...props
29
- }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
30
- displayName: string;
10
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
11
+ displayName: string;
31
12
  };
32
13
  declare const DialogFooter: {
33
- ({
34
- className,
35
- ...props
36
- }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
37
- displayName: string;
38
- };
39
- declare const DialogTitle: React.ForwardRefExoticComponent<
40
- Omit<
41
- DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>,
42
- "ref"
43
- > &
44
- React.RefAttributes<HTMLHeadingElement>
45
- >;
46
- declare const DialogDescription: React.ForwardRefExoticComponent<
47
- Omit<
48
- DialogPrimitive.DialogDescriptionProps &
49
- React.RefAttributes<HTMLParagraphElement>,
50
- "ref"
51
- > &
52
- React.RefAttributes<HTMLParagraphElement>
53
- >;
54
- export {
55
- Dialog,
56
- DialogPortal,
57
- DialogOverlay,
58
- DialogClose,
59
- DialogTrigger,
60
- DialogContent,
61
- DialogHeader,
62
- DialogFooter,
63
- DialogTitle,
64
- DialogDescription,
14
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
15
+ displayName: string;
65
16
  };
17
+ declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
18
+ declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
19
+ export { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, };
@@ -1,98 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
2
  import * as DialogPrimitive from "@radix-ui/react-dialog";
2
3
  import { X } from "lucide-react";
3
4
  import * as React from "react";
4
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { cn } from "../lib/utils.js";
6
-
7
6
  const Dialog = DialogPrimitive.Root;
8
7
  const DialogTrigger = DialogPrimitive.Trigger;
9
8
  const DialogPortal = DialogPrimitive.Portal;
10
9
  const DialogClose = DialogPrimitive.Close;
11
- const DialogOverlay = React.forwardRef(({ className, ...props }, ref) =>
12
- _jsx(DialogPrimitive.Overlay, {
13
- ref: ref,
14
- className: cn(
15
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
16
- className,
17
- ),
18
- ...props,
19
- }),
20
- );
10
+ const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props })));
21
11
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
22
- const DialogContent = React.forwardRef(
23
- ({ className, children, ...props }, ref) =>
24
- _jsxs(DialogPortal, {
25
- children: [
26
- _jsx(DialogOverlay, {}),
27
- _jsxs(DialogPrimitive.Content, {
28
- ref: ref,
29
- className: cn(
30
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
31
- className,
32
- ),
33
- ...props,
34
- children: [
35
- children,
36
- _jsxs(DialogPrimitive.Close, {
37
- className:
38
- "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",
39
- children: [
40
- _jsx(X, { className: "h-4 w-4" }),
41
- _jsx("span", { className: "sr-only", children: "Close" }),
42
- ],
43
- }),
44
- ],
45
- }),
46
- ],
47
- }),
48
- );
12
+ const DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DialogPortal, { children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { ref: ref, className: cn("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", className), ...props, children: [children, _jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [_jsx(X, { className: "h-4 w-4" }), _jsx("span", { className: "sr-only", children: "Close" })] })] })] })));
49
13
  DialogContent.displayName = DialogPrimitive.Content.displayName;
50
- const DialogHeader = ({ className, ...props }) =>
51
- _jsx("div", {
52
- className: cn(
53
- "flex flex-col space-y-1.5 text-center sm:text-left",
54
- className,
55
- ),
56
- ...props,
57
- });
14
+ const DialogHeader = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props }));
58
15
  DialogHeader.displayName = "DialogHeader";
59
- const DialogFooter = ({ className, ...props }) =>
60
- _jsx("div", {
61
- className: cn(
62
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
63
- className,
64
- ),
65
- ...props,
66
- });
16
+ const DialogFooter = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props }));
67
17
  DialogFooter.displayName = "DialogFooter";
68
- const DialogTitle = React.forwardRef(({ className, ...props }, ref) =>
69
- _jsx(DialogPrimitive.Title, {
70
- ref: ref,
71
- className: cn(
72
- "text-lg font-semibold leading-none tracking-tight",
73
- className,
74
- ),
75
- ...props,
76
- }),
77
- );
18
+ const DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props })));
78
19
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
79
- const DialogDescription = React.forwardRef(({ className, ...props }, ref) =>
80
- _jsx(DialogPrimitive.Description, {
81
- ref: ref,
82
- className: cn("text-sm text-muted-foreground", className),
83
- ...props,
84
- }),
85
- );
20
+ const DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn("text-sm text-muted-foreground", className), ...props })));
86
21
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
87
- export {
88
- Dialog,
89
- DialogPortal,
90
- DialogOverlay,
91
- DialogClose,
92
- DialogTrigger,
93
- DialogContent,
94
- DialogHeader,
95
- DialogFooter,
96
- DialogTitle,
97
- DialogDescription,
98
- };
22
+ export { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, };
@@ -1,15 +1,10 @@
1
1
  import { type ReactNode } from "react";
2
2
  interface HeightTransitionProps {
3
- children: ReactNode;
4
- durationMs?: number;
5
- easing?: string;
6
- pinContentTo?: "top" | "bottom";
7
- className?: string;
3
+ children: ReactNode;
4
+ durationMs?: number;
5
+ easing?: string;
6
+ pinContentTo?: "top" | "bottom";
7
+ className?: string;
8
8
  }
9
- export declare function HeightTransition({
10
- children,
11
- durationMs,
12
- easing,
13
- pinContentTo,
14
- className,
15
- }: HeightTransitionProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function HeightTransition({ children, durationMs, easing, pinContentTo, className, }: HeightTransitionProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -1,91 +1,80 @@
1
- import { useCallback, useEffect, useRef } from "react";
2
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef } from "react";
3
3
  import { cn } from "../lib/utils.js";
4
- export function HeightTransition({
5
- children,
6
- durationMs = 320,
7
- easing = "ease",
8
- pinContentTo = "top",
9
- className,
10
- }) {
11
- const containerRef = useRef(null);
12
- const contentRef = useRef(null);
13
- const prevHeightRef = useRef(null);
14
- const isAnimatingRef = useRef(false);
15
- const durationRef = useRef(durationMs);
16
- const easingRef = useRef(easing);
17
- useEffect(() => {
18
- durationRef.current = durationMs;
19
- easingRef.current = easing;
20
- }, [durationMs, easing]);
21
- const transitionTo = useCallback(
22
- (next) => {
23
- const el = containerRef.current;
24
- const contentEl = contentRef.current;
25
- if (!el || !contentEl) return;
26
- const prev = prevHeightRef.current ?? el.getBoundingClientRect().height;
27
- if (Math.abs(prev - next) < 0.5) {
28
- prevHeightRef.current = next;
29
- el.style.height = `${next}px`;
30
- return;
31
- }
32
- if (isAnimatingRef.current) return;
33
- isAnimatingRef.current = true;
34
- el.style.transition = "none";
35
- el.style.height = `${prev}px`;
36
- void el.getBoundingClientRect();
37
- el.style.transition = `height ${durationRef.current}ms ${easingRef.current}`;
38
- el.style.height = `${next}px`;
39
- contentEl.style.position = "absolute";
40
- if (pinContentTo === "top") {
41
- contentEl.style.top = "0";
42
- } else {
43
- contentEl.style.bottom = "0";
44
- }
45
- prevHeightRef.current = next;
46
- },
47
- [pinContentTo],
48
- );
49
- const onEndTransition = useCallback((e) => {
50
- const el = containerRef.current;
51
- const contentEl = contentRef.current;
52
- if (!el || !contentEl) return;
53
- if (e.propertyName !== "height") return;
54
- if (e.target !== el) return;
55
- el.style.transition = "";
56
- el.style.height = `auto`;
57
- contentEl.style.removeProperty("position");
58
- contentEl.style.removeProperty("top");
59
- contentEl.style.removeProperty("bottom");
60
- isAnimatingRef.current = false;
61
- }, []);
62
- // Observe intrinsic content height changes and animate container height accordingly
63
- useEffect(() => {
64
- const el = containerRef.current;
65
- const contentEl = contentRef.current;
66
- if (!el || !contentEl) return;
67
- const initial = contentEl.scrollHeight;
68
- prevHeightRef.current = initial;
69
- const ro = new ResizeObserver(() => {
70
- const next = contentEl.scrollHeight;
71
- transitionTo(next);
72
- });
73
- ro.observe(contentEl);
74
- el.addEventListener("transitionend", onEndTransition);
75
- return () => {
76
- ro.disconnect();
77
- el.removeEventListener("transitionend", onEndTransition);
78
- };
79
- // eslint-disable-next-line react-hooks/exhaustive-deps
80
- }, [onEndTransition, transitionTo]);
81
- return _jsx("div", {
82
- ref: containerRef,
83
- className: cn("overflow-hidden relative", className),
84
- style: { willChange: "height" },
85
- children: _jsx("div", {
86
- ref: contentRef,
87
- className: "w-full",
88
- children: children,
89
- }),
90
- });
4
+ export function HeightTransition({ children, durationMs = 320, easing = "ease", pinContentTo = "top", className, }) {
5
+ const containerRef = useRef(null);
6
+ const contentRef = useRef(null);
7
+ const prevHeightRef = useRef(null);
8
+ const isAnimatingRef = useRef(false);
9
+ const durationRef = useRef(durationMs);
10
+ const easingRef = useRef(easing);
11
+ useEffect(() => {
12
+ durationRef.current = durationMs;
13
+ easingRef.current = easing;
14
+ }, [durationMs, easing]);
15
+ const transitionTo = useCallback((next) => {
16
+ const el = containerRef.current;
17
+ const contentEl = contentRef.current;
18
+ if (!el || !contentEl)
19
+ return;
20
+ const prev = prevHeightRef.current ?? el.getBoundingClientRect().height;
21
+ if (Math.abs(prev - next) < 0.5) {
22
+ prevHeightRef.current = next;
23
+ el.style.height = `${next}px`;
24
+ return;
25
+ }
26
+ if (isAnimatingRef.current)
27
+ return;
28
+ isAnimatingRef.current = true;
29
+ el.style.transition = "none";
30
+ el.style.height = `${prev}px`;
31
+ void el.getBoundingClientRect();
32
+ el.style.transition = `height ${durationRef.current}ms ${easingRef.current}`;
33
+ el.style.height = `${next}px`;
34
+ contentEl.style.position = "absolute";
35
+ if (pinContentTo === "top") {
36
+ contentEl.style.top = "0";
37
+ }
38
+ else {
39
+ contentEl.style.bottom = "0";
40
+ }
41
+ prevHeightRef.current = next;
42
+ }, [pinContentTo]);
43
+ const onEndTransition = useCallback((e) => {
44
+ const el = containerRef.current;
45
+ const contentEl = contentRef.current;
46
+ if (!el || !contentEl)
47
+ return;
48
+ if (e.propertyName !== "height")
49
+ return;
50
+ if (e.target !== el)
51
+ return;
52
+ el.style.transition = "";
53
+ el.style.height = `auto`;
54
+ contentEl.style.removeProperty("position");
55
+ contentEl.style.removeProperty("top");
56
+ contentEl.style.removeProperty("bottom");
57
+ isAnimatingRef.current = false;
58
+ }, []);
59
+ // Observe intrinsic content height changes and animate container height accordingly
60
+ useEffect(() => {
61
+ const el = containerRef.current;
62
+ const contentEl = contentRef.current;
63
+ if (!el || !contentEl)
64
+ return;
65
+ const initial = contentEl.scrollHeight;
66
+ prevHeightRef.current = initial;
67
+ const ro = new ResizeObserver(() => {
68
+ const next = contentEl.scrollHeight;
69
+ transitionTo(next);
70
+ });
71
+ ro.observe(contentEl);
72
+ el.addEventListener("transitionend", onEndTransition);
73
+ return () => {
74
+ ro.disconnect();
75
+ el.removeEventListener("transitionend", onEndTransition);
76
+ };
77
+ // eslint-disable-next-line react-hooks/exhaustive-deps
78
+ }, [onEndTransition, transitionTo]);
79
+ return (_jsx("div", { ref: containerRef, className: cn("overflow-hidden relative", className), style: { willChange: "height" }, children: _jsx("div", { ref: contentRef, className: "w-full", children: children }) }));
91
80
  }
@@ -1,16 +1,9 @@
1
1
  import { type VariantProps } from "class-variance-authority";
2
2
  import * as React from "react";
3
- declare const inputVariants: (
4
- props?:
5
- | ({
6
- variant?: "default" | "error" | "success" | null | undefined;
7
- } & import("class-variance-authority/types").ClassProp)
8
- | undefined,
9
- ) => string;
10
- export interface InputProps
11
- extends React.InputHTMLAttributes<HTMLInputElement>,
12
- VariantProps<typeof inputVariants> {}
13
- declare const Input: React.ForwardRefExoticComponent<
14
- InputProps & React.RefAttributes<HTMLInputElement>
15
- >;
3
+ declare const inputVariants: (props?: ({
4
+ variant?: "success" | "default" | "error" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement>, VariantProps<typeof inputVariants> {
7
+ }
8
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
16
9
  export { Input, inputVariants };