@mcp-b/react-components 0.46.7 → 0.48.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 (130) hide show
  1. package/dist/{CodeBlock-CcteqDvA.js → CodeBlock-BSJl682D.js} +1 -1
  2. package/dist/Correspondent-7K6uNLUm.d.ts +64 -0
  3. package/dist/{FileTree-jtP9471I.js → FileTree-DvE0hNZu.js} +1 -1
  4. package/dist/{SetupChecklist-BXwSSorj.js → SetupChecklist-DeTU9YpW.js} +1 -1
  5. package/dist/ThinkChat-CwMdEum8.d.ts +185 -0
  6. package/dist/{ThinkChat-qztQ6Clo.js → ThinkChat-DiI6hhDP.js} +14 -14
  7. package/dist/ThinkThreadPicker-yFz4vvIf.d.ts +91 -0
  8. package/dist/{Workspace-DZusrEeP.d.ts → Workspace-LIoU30n7.d.ts} +13 -2
  9. package/dist/{WorkspaceFileView-D0HyoUV8.js → WorkspaceFileView-C_WnYm-a.js} +4 -4
  10. package/dist/{WorkspaceLink-DtH66bAY.js → WorkspaceLink-B1d2GIGl.js} +7 -2
  11. package/dist/WorkspaceLive-DfjH1Ypm.d.ts +61 -0
  12. package/dist/{WorkspaceMessageResponse-CJCmGvTx.js → WorkspaceMessageResponse-BqOezptB.js} +79 -40
  13. package/dist/WorkspaceMessageResponse-kJYU8Onj.d.ts +48 -0
  14. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  15. package/dist/components/agents-sdk/AgentChat.js +2 -2
  16. package/dist/components/agents-sdk/BrowserLiveScreen.js +1 -1
  17. package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
  18. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  19. package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
  20. package/dist/components/agents-sdk/ManagerOffice.d.ts +41 -50
  21. package/dist/components/agents-sdk/ManagerOffice.js +359 -978
  22. package/dist/components/agents-sdk/McpConnectionRequest.js +1 -1
  23. package/dist/components/agents-sdk/McpPluginCatalog.js +1 -1
  24. package/dist/components/agents-sdk/McpServerPicker.js +1 -1
  25. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  26. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  27. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  28. package/dist/components/agents-sdk/ThinkChat.d.ts +1 -180
  29. package/dist/components/agents-sdk/ThinkChat.js +1 -1
  30. package/dist/components/agents-sdk/ThinkChatToolPanels.js +1 -1
  31. package/dist/components/agents-sdk/ThinkExecutionDetail.js +1 -1
  32. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  33. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +1 -1
  34. package/dist/components/agents-sdk/ThinkFullApp.d.ts +12 -3
  35. package/dist/components/agents-sdk/ThinkFullApp.js +15 -3
  36. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +1 -1
  37. package/dist/components/agents-sdk/ThinkRoutineForm.js +1 -1
  38. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +1 -1
  39. package/dist/components/agents-sdk/ThinkSidepanel.d.ts +20 -5
  40. package/dist/components/agents-sdk/ThinkSidepanel.js +48 -36
  41. package/dist/components/agents-sdk/ThinkThreadPicker.d.ts +1 -90
  42. package/dist/components/agents-sdk/ThinkThreadPicker.js +1 -1
  43. package/dist/components/agents-sdk/Workspace.d.ts +2 -2
  44. package/dist/components/agents-sdk/Workspace.js +13 -10
  45. package/dist/components/agents-sdk/WorkspaceBrowser.d.ts +1 -1
  46. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  47. package/dist/components/agents-sdk/WorkspaceConcept.d.ts +45 -0
  48. package/dist/components/agents-sdk/WorkspaceConcept.js +42 -0
  49. package/dist/components/agents-sdk/WorkspaceCorrespondence.d.ts +96 -0
  50. package/dist/components/agents-sdk/WorkspaceCorrespondence.js +429 -0
  51. package/dist/components/agents-sdk/WorkspaceExecution.d.ts +115 -0
  52. package/dist/components/agents-sdk/WorkspaceExecution.js +330 -0
  53. package/dist/components/agents-sdk/WorkspaceExplorer.d.ts +1 -1
  54. package/dist/components/agents-sdk/WorkspaceExplorer.js +2 -2
  55. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  56. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  57. package/dist/components/agents-sdk/WorkspaceLink.js +1 -1
  58. package/dist/components/agents-sdk/WorkspaceLive.d.ts +2 -0
  59. package/dist/components/agents-sdk/WorkspaceLive.js +113 -0
  60. package/dist/components/agents-sdk/WorkspaceMessageResponse.d.ts +2 -2
  61. package/dist/components/agents-sdk/WorkspaceMessageResponse.js +2 -2
  62. package/dist/components/agents-sdk/WorkspaceMountManager.js +1 -1
  63. package/dist/components/agents-sdk/WorkspaceProject.d.ts +131 -0
  64. package/dist/components/agents-sdk/WorkspaceProject.js +238 -0
  65. package/dist/components/agents-sdk/WorkspaceUserScript.d.ts +47 -0
  66. package/dist/components/agents-sdk/WorkspaceUserScript.js +146 -0
  67. package/dist/components/ai-sdk/Activity.js +1 -1
  68. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  69. package/dist/components/ai-sdk/Approval.js +1 -1
  70. package/dist/components/ai-sdk/Artifact.js +3 -3
  71. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  72. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  73. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  74. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  75. package/dist/components/ai-sdk/ComposerLink.d.ts +4 -1
  76. package/dist/components/ai-sdk/ComposerLink.js +4 -3
  77. package/dist/components/ai-sdk/ConnectedAppCards.d.ts +29 -2
  78. package/dist/components/ai-sdk/ConnectedAppCards.js +78 -103
  79. package/dist/components/ai-sdk/Conversation.js +1 -1
  80. package/dist/components/ai-sdk/Correspondent.d.ts +2 -0
  81. package/dist/components/ai-sdk/Correspondent.js +145 -0
  82. package/dist/components/ai-sdk/Goal.js +1 -1
  83. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  84. package/dist/components/ai-sdk/Message.js +1 -1
  85. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  86. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  87. package/dist/components/ai-sdk/Plan.js +1 -1
  88. package/dist/components/ai-sdk/PromptInput.js +1 -1
  89. package/dist/components/ai-sdk/Queue.js +1 -1
  90. package/dist/components/ai-sdk/Reasoning.js +1 -1
  91. package/dist/components/ai-sdk/Sources.js +1 -1
  92. package/dist/components/ai-sdk/Task.js +1 -1
  93. package/dist/components/extension/ChatGptSignInScreen.js +1 -1
  94. package/dist/components/extension/CodexModelSelector.js +1 -1
  95. package/dist/components/extension/ConversationTabPicker.js +1 -1
  96. package/dist/components/foundations/Checkbox.js +1 -1
  97. package/dist/components/foundations/ContextMenu.js +1 -1
  98. package/dist/components/foundations/Menubar.js +1 -1
  99. package/dist/components/foundations/SearchField.js +1 -1
  100. package/dist/components/foundations/Select.js +1 -1
  101. package/dist/components/foundations/Stepper.js +1 -1
  102. package/dist/components/foundations/Toast.js +1 -1
  103. package/dist/components/foundations/icons.d.ts +2 -2
  104. package/dist/components/foundations/icons.js +2 -2
  105. package/dist/components/general-purpose/Commit.js +2 -2
  106. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  107. package/dist/components/general-purpose/FileTree.js +1 -1
  108. package/dist/components/general-purpose/PricingPlanCard.js +1 -1
  109. package/dist/components/general-purpose/ResponsiveSidebarShell.js +1 -1
  110. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  111. package/dist/components/general-purpose/Terminal.js +2 -2
  112. package/dist/components/general-purpose/TestResults.js +1 -1
  113. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  114. package/dist/components/general-purpose/WebPreview.js +1 -1
  115. package/dist/components/nanites/AgentConnection.js +2 -2
  116. package/dist/components/nanites/AgentToolDetail.d.ts +1 -1
  117. package/dist/components/nanites/AgentToolDetail.js +2 -2
  118. package/dist/{copy-button-BABPlsc-.js → copy-button-Dk2vRe9j.js} +1 -1
  119. package/dist/{icons-ChPpNMmU.d.ts → icons-CCZGYUwU.d.ts} +6 -1
  120. package/dist/{icons-BC4HZqSK.js → icons-CeGfXO21.js} +3 -2
  121. package/dist/styles/base.css +2 -2
  122. package/dist/styles/connected-app-card.css +8 -0
  123. package/dist/styles/correspondent.css +73 -0
  124. package/dist/styles/description-list.css +3 -1
  125. package/dist/styles/index.css +2 -0
  126. package/dist/styles/manager-office.css +380 -1086
  127. package/dist/styles/workspace-concepts.css +28 -0
  128. package/dist/workspace-assets-GqsCYxqT.js +168 -0
  129. package/package.json +2 -2
  130. package/dist/WorkspaceMessageResponse-D66ty4FO.d.ts +0 -24
@@ -1,11 +1,12 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { G as SlackIcon, O as MailIcon, _ as DotIcon, d as CheckIcon, tt as XIcon, u as CalendarIcon } from "../../icons-BC4HZqSK.js";
2
+ import { G as SlackIcon, O as MailIcon, _ as DotIcon, d as CheckIcon, nt as XIcon, u as CalendarIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { Field } from "../foundations/Field.js";
5
5
  import { Textarea } from "../foundations/Textarea.js";
6
6
  import { Card, CardAction, CardContent, CardFooter, CardHeader, CardTitle } from "../foundations/Card.js";
7
7
  import { DescriptionList } from "../foundations/DescriptionList.js";
8
8
  import { Input } from "../foundations/Input.js";
9
+ import { CorrespondentName, emailDestinationCorrespondent, slackDestinationCorrespondent } from "./Correspondent.js";
9
10
  import * as React from "react";
10
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
12
  //#region src/components/ai-sdk/ConnectedAppCards.tsx
@@ -14,6 +15,29 @@ const STATE_ICON = {
14
15
  sent: CheckIcon,
15
16
  denied: XIcon
16
17
  };
18
+ function fieldItem(name, term, value, display) {
19
+ return display === void 0 ? {
20
+ name,
21
+ term,
22
+ value
23
+ } : {
24
+ name,
25
+ term,
26
+ value,
27
+ display
28
+ };
29
+ }
30
+ function createDraftUpdater(draft, onChange) {
31
+ let current = draft;
32
+ return (patch) => {
33
+ const next = {
34
+ ...current,
35
+ ...patch
36
+ };
37
+ current = next;
38
+ onChange?.(next);
39
+ };
40
+ }
17
41
  function useDecision(handlers) {
18
42
  const [reason, setReason] = React.useState("");
19
43
  const [busy, setBusy] = React.useState(false);
@@ -60,15 +84,8 @@ function FieldList({ children, editing, items, onFieldChange }) {
60
84
  })
61
85
  }) : null, children] });
62
86
  }
63
- function StateIndicator({ state, labels }) {
64
- const Icon = STATE_ICON[state];
65
- return /* @__PURE__ */ jsxs(CardAction, {
66
- className: "connected-app-card__status",
67
- "data-state": state,
68
- children: [/* @__PURE__ */ jsx(Icon, { size: 14 }), labels[state]]
69
- });
70
- }
71
- function ConnectedAppCardFrame({ children, className, icon, kind, sendLabel, slot, state = "pending", stateLabels, onDiscard, onReject, onSend, ref, ...props }) {
87
+ function ConnectedAppCardFrame({ children, className, headerActions, icon, kind, sendLabel, slot, state = "pending", saveState, stateLabels, onDiscard, onReject, onSend, ref, ...props }) {
88
+ const StateIcon = STATE_ICON[state];
72
89
  const titleId = React.useId();
73
90
  const ariaLabel = props["aria-label"];
74
91
  const ariaLabelledBy = props["aria-labelledby"] ?? (ariaLabel ? void 0 : titleId);
@@ -78,6 +95,8 @@ function ConnectedAppCardFrame({ children, className, icon, kind, sendLabel, slo
78
95
  onReject,
79
96
  onSend
80
97
  });
98
+ const saveBlocked = saveState !== void 0;
99
+ const saveErrorMessage = saveState?.status === "error" ? saveState.message : "";
81
100
  return /* @__PURE__ */ jsxs(Card, {
82
101
  ...props,
83
102
  ref,
@@ -97,9 +116,13 @@ function ConnectedAppCardFrame({ children, className, icon, kind, sendLabel, slo
97
116
  "aria-hidden": "true",
98
117
  children: icon
99
118
  }), kind]
100
- }), /* @__PURE__ */ jsx(StateIndicator, {
101
- state,
102
- labels: stateLabels
119
+ }), /* @__PURE__ */ jsxs(CardAction, {
120
+ className: "sigvelo-cluster",
121
+ children: [/* @__PURE__ */ jsxs("span", {
122
+ className: "connected-app-card__status",
123
+ "data-state": state,
124
+ children: [/* @__PURE__ */ jsx(StateIcon, { size: 14 }), state === "pending" && !hasDecision ? "Sending" : stateLabels[state]]
125
+ }), headerActions]
103
126
  })] }),
104
127
  /* @__PURE__ */ jsxs(CardContent, { children: [
105
128
  children,
@@ -117,12 +140,23 @@ function ConnectedAppCardFrame({ children, className, icon, kind, sendLabel, slo
117
140
  }
118
141
  }
119
142
  })] }) : null,
143
+ saveErrorMessage ? /* @__PURE__ */ jsxs("div", {
144
+ className: "connected-app-card__save-error",
145
+ children: [/* @__PURE__ */ jsx(Field.Errors, { errors: [saveErrorMessage] }), saveState?.status === "error" && saveState.onRetry ? /* @__PURE__ */ jsx(Button, {
146
+ type: "button",
147
+ size: "sm",
148
+ variant: "ghost",
149
+ color: "neutral",
150
+ onClick: saveState.onRetry,
151
+ children: "Retry save"
152
+ }) : null]
153
+ }) : null,
120
154
  decision.errorMessage ? /* @__PURE__ */ jsx(Field.Errors, { errors: [decision.errorMessage] }) : null,
121
155
  /* @__PURE__ */ jsx("span", {
122
156
  className: "sigvelo-visually-hidden",
123
157
  role: "status",
124
158
  "aria-atomic": "true",
125
- children: decision.errorMessage || (decision.busy ? "Submitting" : "")
159
+ children: saveErrorMessage || decision.errorMessage || (saveState?.status === "saving" ? "Saving" : decision.busy ? "Submitting" : "")
126
160
  })
127
161
  ] }),
128
162
  hasDecision ? /* @__PURE__ */ jsxs(CardFooter, {
@@ -131,7 +165,7 @@ function ConnectedAppCardFrame({ children, className, icon, kind, sendLabel, slo
131
165
  decision.send ? /* @__PURE__ */ jsx(Button, {
132
166
  type: "button",
133
167
  size: "sm",
134
- disabled: decision.busy,
168
+ disabled: decision.busy || saveBlocked,
135
169
  onClick: () => void decision.send?.(),
136
170
  children: sendLabel
137
171
  }) : null,
@@ -162,7 +196,7 @@ function ConnectedAppCardFrame({ children, className, icon, kind, sendLabel, slo
162
196
  * Email draft or result. Pending cards can be edited and released; send,
163
197
  * discard, and reject-with-reason stay application-owned.
164
198
  */
165
- function EmailMessageCard({ body, from, icon, onChange, onDiscard, onReject, onSend, state = "pending", subject, to, ref, ...props }) {
199
+ function EmailMessageCard({ body, correspondent, from, icon, onChange, onDiscard, onReject, onSend, state = "pending", subject, to, ref, ...props }) {
166
200
  const editing = state === "pending" && onChange != null;
167
201
  const draft = {
168
202
  from,
@@ -170,6 +204,8 @@ function EmailMessageCard({ body, from, icon, onChange, onDiscard, onReject, onS
170
204
  subject,
171
205
  body
172
206
  };
207
+ const toCorrespondent = !editing && to ? correspondent ?? emailDestinationCorrespondent(to) : void 0;
208
+ const updateDraft = createDraftUpdater(draft, onChange);
173
209
  return /* @__PURE__ */ jsx(ConnectedAppCardFrame, {
174
210
  ...props,
175
211
  ref,
@@ -188,43 +224,16 @@ function EmailMessageCard({ body, from, icon, onChange, onDiscard, onReject, onS
188
224
  onSend,
189
225
  children: /* @__PURE__ */ jsx(FieldList, {
190
226
  editing,
191
- onFieldChange: (name, value) => onChange?.({
192
- ...draft,
193
- [name]: value
194
- }),
195
- items: (editing ? [
196
- {
197
- name: "from",
198
- term: "From",
199
- value: from ?? ""
200
- },
201
- {
202
- name: "to",
203
- term: "To",
204
- value: to ?? ""
205
- },
206
- {
207
- name: "subject",
208
- term: "Subject",
209
- value: subject
210
- }
227
+ onFieldChange: (name, value) => updateDraft({ [name]: value }),
228
+ items: editing ? [
229
+ fieldItem("from", "From", from ?? ""),
230
+ fieldItem("to", "To", to ?? ""),
231
+ fieldItem("subject", "Subject", subject)
211
232
  ] : [
212
- from ? {
213
- name: "from",
214
- term: "From",
215
- value: from
216
- } : null,
217
- to ? {
218
- name: "to",
219
- term: "To",
220
- value: to
221
- } : null,
222
- {
223
- name: "subject",
224
- term: "Subject",
225
- value: subject
226
- }
227
- ]).filter((item) => item != null),
233
+ ...from ? [fieldItem("from", "From", from)] : [],
234
+ ...to ? [fieldItem("to", "To", to, toCorrespondent ? /* @__PURE__ */ jsx(CorrespondentName, { correspondent: toCorrespondent }) : void 0)] : [],
235
+ fieldItem("subject", "Subject", subject)
236
+ ],
228
237
  children: editing ? /* @__PURE__ */ jsxs(Field.Root, { children: [/* @__PURE__ */ jsx(Field.Label, { children: "Message" }), /* @__PURE__ */ jsx(Field.Control, {
229
238
  render: /* @__PURE__ */ jsx(Textarea, {
230
239
  name: "body",
@@ -233,10 +242,7 @@ function EmailMessageCard({ body, from, icon, onChange, onDiscard, onReject, onS
233
242
  autoComplete: "off"
234
243
  }),
235
244
  value: body ?? "",
236
- onChange: (event) => onChange({
237
- ...draft,
238
- body: event.currentTarget.value
239
- })
245
+ onChange: (event) => updateDraft({ body: event.currentTarget.value })
240
246
  })] }) : body != null && body !== "" ? /* @__PURE__ */ jsx("p", {
241
247
  className: "connected-app-card__body",
242
248
  children: body
@@ -245,7 +251,7 @@ function EmailMessageCard({ body, from, icon, onChange, onDiscard, onReject, onS
245
251
  });
246
252
  }
247
253
  /** Slack draft or posted message with workspace, destination, and thread fields. */
248
- function SlackMessageCard({ icon, message, onChange, onDiscard, onReject, onSend, state = "pending", thread, to, workspace, ref, ...props }) {
254
+ function SlackMessageCard({ correspondent, icon, message, onChange, onDiscard, onReject, onSend, state = "pending", thread, to, workspace, ref, ...props }) {
249
255
  const editing = state === "pending" && onChange != null;
250
256
  const draft = {
251
257
  workspace,
@@ -253,6 +259,8 @@ function SlackMessageCard({ icon, message, onChange, onDiscard, onReject, onSend
253
259
  thread,
254
260
  message
255
261
  };
262
+ const toCorrespondent = !editing ? correspondent ?? slackDestinationCorrespondent(to) : void 0;
263
+ const updateDraft = createDraftUpdater(draft, onChange);
256
264
  return /* @__PURE__ */ jsx(ConnectedAppCardFrame, {
257
265
  ...props,
258
266
  ref,
@@ -271,43 +279,16 @@ function SlackMessageCard({ icon, message, onChange, onDiscard, onReject, onSend
271
279
  onSend,
272
280
  children: /* @__PURE__ */ jsx(FieldList, {
273
281
  editing,
274
- onFieldChange: (name, value) => onChange?.({
275
- ...draft,
276
- [name]: value
277
- }),
278
- items: (editing ? [
279
- {
280
- name: "workspace",
281
- term: "Workspace",
282
- value: workspace ?? ""
283
- },
284
- {
285
- name: "to",
286
- term: "To",
287
- value: to
288
- },
289
- {
290
- name: "thread",
291
- term: "Thread",
292
- value: thread ?? ""
293
- }
282
+ onFieldChange: (name, value) => updateDraft({ [name]: value }),
283
+ items: editing ? [
284
+ fieldItem("workspace", "Workspace", workspace ?? ""),
285
+ fieldItem("to", "To", to),
286
+ fieldItem("thread", "Thread", thread ?? "")
294
287
  ] : [
295
- workspace ? {
296
- name: "workspace",
297
- term: "Workspace",
298
- value: workspace
299
- } : null,
300
- {
301
- name: "to",
302
- term: "To",
303
- value: to
304
- },
305
- thread ? {
306
- name: "thread",
307
- term: "Thread",
308
- value: thread
309
- } : null
310
- ]).filter((item) => item != null),
288
+ ...workspace ? [fieldItem("workspace", "Workspace", workspace)] : [],
289
+ fieldItem("to", "To", to, toCorrespondent ? /* @__PURE__ */ jsx(CorrespondentName, { correspondent: toCorrespondent }) : void 0),
290
+ ...thread ? [fieldItem("thread", "Thread", thread)] : []
291
+ ],
311
292
  children: editing ? /* @__PURE__ */ jsxs(Field.Root, { children: [/* @__PURE__ */ jsx(Field.Label, { children: "Message" }), /* @__PURE__ */ jsx(Field.Control, {
312
293
  render: /* @__PURE__ */ jsx(Textarea, {
313
294
  name: "message",
@@ -316,10 +297,7 @@ function SlackMessageCard({ icon, message, onChange, onDiscard, onReject, onSend
316
297
  autoComplete: "off"
317
298
  }),
318
299
  value: message,
319
- onChange: (event) => onChange({
320
- ...draft,
321
- message: event.currentTarget.value
322
- })
300
+ onChange: (event) => updateDraft({ message: event.currentTarget.value })
323
301
  })] }) : /* @__PURE__ */ jsx("p", {
324
302
  className: "connected-app-card__body",
325
303
  children: message
@@ -333,13 +311,13 @@ function SlackMessageCard({ icon, message, onChange, onDiscard, onReject, onSend
333
311
  */
334
312
  function CalendarEventCard({ attendees, eventTitle, icon, location, onChange, onDiscard, onReject, onSend, state = "pending", when, whenDateTime, ref, ...props }) {
335
313
  const editing = state === "pending" && onChange != null;
336
- const draft = {
314
+ const updateDraft = createDraftUpdater({
337
315
  eventTitle,
338
316
  when,
339
317
  whenDateTime,
340
318
  location,
341
319
  attendees
342
- };
320
+ }, onChange);
343
321
  return /* @__PURE__ */ jsx(ConnectedAppCardFrame, {
344
322
  ...props,
345
323
  ref,
@@ -358,10 +336,7 @@ function CalendarEventCard({ attendees, eventTitle, icon, location, onChange, on
358
336
  onSend,
359
337
  children: /* @__PURE__ */ jsx(FieldList, {
360
338
  editing,
361
- onFieldChange: (name, value) => onChange?.({
362
- ...draft,
363
- [name]: value
364
- }),
339
+ onFieldChange: (name, value) => updateDraft({ [name]: value }),
365
340
  items: editing ? [
366
341
  {
367
342
  name: "eventTitle",
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { n as ArrowDownIcon, v as DownloadIcon } from "../../icons-BC4HZqSK.js";
2
+ import { n as ArrowDownIcon, v as DownloadIcon } from "../../icons-CeGfXO21.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
4
  import { t as assignRef } from "../../merge-refs-DF_7w2x_.js";
5
5
  import { MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport } from "./MessageScroller.js";
@@ -0,0 +1,2 @@
1
+ import { a as CorrespondentNameProps, c as emailDestinationCorrespondent, i as CorrespondentName, l as linkedinTabCorrespondent, n as CorrespondentHandle, o as correspondentHandleLabel, r as CorrespondentLatest, s as correspondentInitials, t as Correspondent, u as slackDestinationCorrespondent } from "../../Correspondent-7K6uNLUm.js";
2
+ export { Correspondent, CorrespondentHandle, CorrespondentLatest, CorrespondentName, CorrespondentNameProps, correspondentHandleLabel, correspondentInitials, emailDestinationCorrespondent, linkedinTabCorrespondent, slackDestinationCorrespondent };
@@ -0,0 +1,145 @@
1
+ import { t as cx } from "../../class-names-BiMDVpUo.js";
2
+ import { PreviewCard } from "../foundations/PreviewCard.js";
3
+ import { Avatar } from "../foundations/Avatar.js";
4
+ import { Popover } from "../foundations/Popover.js";
5
+ import "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/ai-sdk/Correspondent.tsx
8
+ const SLACK_USER_ID = /^U[A-Z0-9]+$/iu;
9
+ const EMAIL_ADDRESS = /^[^\s@]+@[^\s@]+\.[^\s@]+$/u;
10
+ function slackDestinationCorrespondent(to) {
11
+ const userId = to.trim();
12
+ if (!SLACK_USER_ID.test(userId)) return void 0;
13
+ return { handle: {
14
+ kind: "slack",
15
+ userId
16
+ } };
17
+ }
18
+ function emailDestinationCorrespondent(to) {
19
+ const address = to.trim();
20
+ if (!address || address.includes(",")) return void 0;
21
+ if (!EMAIL_ADDRESS.test(address)) return void 0;
22
+ return { handle: {
23
+ kind: "email",
24
+ address
25
+ } };
26
+ }
27
+ function linkedinTabCorrespondent(url) {
28
+ const href = safeHttpUrl(url);
29
+ if (!href) return void 0;
30
+ let parsed;
31
+ try {
32
+ parsed = new URL(href);
33
+ } catch {
34
+ return;
35
+ }
36
+ if (!/(^|\.)linkedin\.com$/iu.test(parsed.hostname)) return void 0;
37
+ if (!parsed.pathname.includes("/in/")) return void 0;
38
+ return { handle: {
39
+ kind: "linkedin",
40
+ url: href
41
+ } };
42
+ }
43
+ function correspondentHandleLabel(handle) {
44
+ if (handle.kind === "email") return handle.address;
45
+ if (handle.kind === "slack") return handle.userName ? `@${handle.userName}` : handle.userId;
46
+ if (handle.kind === "linkedin") return handle.url;
47
+ return handle.resourceName;
48
+ }
49
+ function correspondentInitials(label) {
50
+ const parts = (label.split("@", 1)[0] ?? label).split(/[\s._-]+/u).filter(Boolean);
51
+ if (parts.length >= 2) {
52
+ const first = parts[0]?.[0];
53
+ const second = parts[1]?.[0];
54
+ if (first && second) return `${first}${second}`.toUpperCase();
55
+ }
56
+ return (parts[0] ?? label).slice(0, 2).toUpperCase() || "?";
57
+ }
58
+ function safeHttpUrl(url) {
59
+ try {
60
+ const parsed = new URL(url);
61
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return void 0;
62
+ return parsed.href;
63
+ } catch {
64
+ return;
65
+ }
66
+ }
67
+ function correspondentHref(handle) {
68
+ return handle.kind === "linkedin" ? safeHttpUrl(handle.url) : void 0;
69
+ }
70
+ function latestLabel(latest) {
71
+ if (latest.kind === "linkedin-tab") return latest.title ?? latest.url;
72
+ return latest.label;
73
+ }
74
+ /**
75
+ * Avatar + name for a person-shaped destination. LinkedIn handles open the
76
+ * profile; other handles disclose handle and latest thread without inventing
77
+ * a directory.
78
+ */
79
+ function CorrespondentName({ correspondent, className }) {
80
+ const handleLabel = correspondentHandleLabel(correspondent.handle);
81
+ const label = correspondent.displayName?.trim() || handleLabel;
82
+ const href = correspondentHref(correspondent.handle);
83
+ const initials = correspondentInitials(label);
84
+ const trigger = /* @__PURE__ */ jsxs("span", {
85
+ className: cx("correspondent", className),
86
+ "data-slot": "correspondent",
87
+ children: [/* @__PURE__ */ jsxs(Avatar.Root, {
88
+ size: "sm",
89
+ children: [correspondent.avatarUrl ? /* @__PURE__ */ jsx(Avatar.Image, {
90
+ src: correspondent.avatarUrl,
91
+ alt: ""
92
+ }) : null, /* @__PURE__ */ jsx(Avatar.Fallback, { children: initials })]
93
+ }), /* @__PURE__ */ jsx("span", {
94
+ className: "correspondent__name sigvelo-truncate",
95
+ children: label
96
+ })]
97
+ });
98
+ const details = /* @__PURE__ */ jsxs("div", {
99
+ className: "correspondent__details",
100
+ children: [
101
+ /* @__PURE__ */ jsx("strong", {
102
+ className: "correspondent__title sigvelo-truncate",
103
+ children: label
104
+ }),
105
+ /* @__PURE__ */ jsx("span", {
106
+ className: "correspondent__handle",
107
+ children: handleLabel
108
+ }),
109
+ correspondent.latest ? /* @__PURE__ */ jsx("span", {
110
+ className: "correspondent__latest",
111
+ children: latestLabel(correspondent.latest)
112
+ }) : null
113
+ ]
114
+ });
115
+ if (href) return /* @__PURE__ */ jsxs(PreviewCard.Root, { children: [/* @__PURE__ */ jsx(PreviewCard.Trigger, {
116
+ delay: 0,
117
+ closeDelay: 0,
118
+ href,
119
+ target: "_blank",
120
+ rel: "noreferrer",
121
+ className: "correspondent__trigger",
122
+ "aria-label": `${label} (${handleLabel}, opens in a new tab)`,
123
+ children: trigger
124
+ }), /* @__PURE__ */ jsx(PreviewCard.Portal, { children: /* @__PURE__ */ jsx(PreviewCard.Positioner, {
125
+ sideOffset: 8,
126
+ children: /* @__PURE__ */ jsx(PreviewCard.Popup, {
127
+ className: "correspondent__popup",
128
+ children: details
129
+ })
130
+ }) })] });
131
+ return /* @__PURE__ */ jsxs(Popover.Root, { children: [/* @__PURE__ */ jsx(Popover.Trigger, {
132
+ unstyled: true,
133
+ className: "correspondent__trigger",
134
+ "aria-label": `${label} (${handleLabel})`,
135
+ children: trigger
136
+ }), /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsx(Popover.Positioner, {
137
+ sideOffset: 8,
138
+ children: /* @__PURE__ */ jsx(Popover.Popup, {
139
+ className: "correspondent__popup",
140
+ children: details
141
+ })
142
+ }) })] });
143
+ }
144
+ //#endregion
145
+ export { CorrespondentName, correspondentHandleLabel, correspondentInitials, emailDestinationCorrespondent, linkedinTabCorrespondent, slackDestinationCorrespondent };
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { L as PauseIcon, Q as TrashIcon, X as TargetIcon, z as PlayIcon } from "../../icons-BC4HZqSK.js";
2
+ import { L as PauseIcon, Q as TrashIcon, X as TargetIcon, z as PlayIcon } from "../../icons-CeGfXO21.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
4
  import { a as formatErrorMessage } from "../../format-COCyV98Z.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { z as PlayIcon } from "../../icons-BC4HZqSK.js";
2
+ import { z as PlayIcon } from "../../icons-CeGfXO21.js";
3
3
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
4
4
  import { Card } from "../foundations/Card.js";
5
5
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import { parseComposerHref } from "../../utils/composer-link.js";
2
2
  import { t as cx } from "../../class-names-BiMDVpUo.js";
3
- import { S as FileIcon, i as ArrowRightIcon, r as ArrowLeftIcon } from "../../icons-BC4HZqSK.js";
3
+ import { S as FileIcon, i as ArrowRightIcon, r as ArrowLeftIcon } from "../../icons-CeGfXO21.js";
4
4
  import { Button } from "../foundations/Button.js";
5
5
  import { IconButton } from "../foundations/IconButton.js";
6
6
  import { t as AttachmentPreview } from "../../attachment-preview-1CXJvrmb.js";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { n as ArrowDownIcon } from "../../icons-BC4HZqSK.js";
2
+ import { n as ArrowDownIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as messageScrollerContract } from "../../message-scroller-C8cplcQO.js";
5
5
  import "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { n as ArrowDownIcon } from "../../icons-BC4HZqSK.js";
2
+ import { n as ArrowDownIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as messageScrollerContract } from "../../message-scroller-C8cplcQO.js";
5
5
  import * as React from "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { _ as DotIcon, d as CheckIcon, i as ArrowRightIcon } from "../../icons-BC4HZqSK.js";
2
+ import { _ as DotIcon, d as CheckIcon, i as ArrowRightIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Popover } from "../foundations/Popover.js";
4
4
  import { t as ProgressRing } from "../../progress-ring-Cgii90dC.js";
5
5
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import { composerTriggerMatch, parseComposerLinks, replaceComposerTrigger } from "../../utils/composer-link.js";
2
2
  import { n as mergeBaseClassName, t as cx } from "../../class-names-BiMDVpUo.js";
3
- import { $ as WarningIcon, B as PlusIcon, C as FolderIcon, I as PaperclipIcon, J as StopIcon, K as SpinnerIcon, M as MicrophoneIcon, P as MonitorIcon, S as FileIcon, a as ArrowUpIcon, d as CheckIcon, et as WrenchIcon, f as ChevronDownIcon, q as SquareIcon, tt as XIcon } from "../../icons-BC4HZqSK.js";
3
+ import { B as PlusIcon, C as FolderIcon, I as PaperclipIcon, J as StopIcon, K as SpinnerIcon, M as MicrophoneIcon, P as MonitorIcon, S as FileIcon, a as ArrowUpIcon, d as CheckIcon, et as WarningIcon, f as ChevronDownIcon, nt as XIcon, q as SquareIcon, tt as WrenchIcon } from "../../icons-CeGfXO21.js";
4
4
  import { Button } from "../foundations/Button.js";
5
5
  import { Tooltip } from "../foundations/Tooltip.js";
6
6
  import { IconButton } from "../foundations/IconButton.js";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { S as FileIcon, _ as DotIcon, d as CheckIcon, p as ChevronRightIcon } from "../../icons-BC4HZqSK.js";
3
+ import { S as FileIcon, _ as DotIcon, d as CheckIcon, p as ChevronRightIcon } from "../../icons-CeGfXO21.js";
4
4
  import { Button } from "../foundations/Button.js";
5
5
  import { ScrollArea } from "../foundations/ScrollArea.js";
6
6
  import "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon } from "../../icons-BC4HZqSK.js";
2
+ import { K as SpinnerIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Activity, ActivityContent, ActivityText, ActivityTrigger } from "./Activity.js";
4
4
  import { MessageResponse } from "./Message.js";
5
5
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { D as LinkIcon, p as ChevronRightIcon } from "../../icons-BC4HZqSK.js";
3
+ import { D as LinkIcon, p as ChevronRightIcon } from "../../icons-CeGfXO21.js";
4
4
  import "react";
5
5
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/ai-sdk/Sources.tsx
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
2
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { S as FileIcon, U as SearchIcon, p as ChevronRightIcon } from "../../icons-BC4HZqSK.js";
3
+ import { S as FileIcon, U as SearchIcon, p as ChevronRightIcon } from "../../icons-CeGfXO21.js";
4
4
  import "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/ai-sdk/Task.tsx
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon } from "../../icons-BC4HZqSK.js";
2
+ import { K as SpinnerIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as ProviderLogo } from "../../provider-logos-DWYY8wNz.js";
5
5
  import "react";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { H as RefreshIcon, d as CheckIcon, f as ChevronDownIcon, l as BrainIcon, p as ChevronRightIcon } from "../../icons-BC4HZqSK.js";
2
+ import { H as RefreshIcon, d as CheckIcon, f as ChevronDownIcon, l as BrainIcon, p as ChevronRightIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Tooltip } from "../foundations/Tooltip.js";
4
4
  import { Menu } from "../foundations/Menu.js";
5
5
  import { c as titleCase } from "../../format-COCyV98Z.js";
@@ -1,4 +1,4 @@
1
- import { $ as WarningIcon } from "../../icons-BC4HZqSK.js";
1
+ import { et as WarningIcon } from "../../icons-CeGfXO21.js";
2
2
  import { Button } from "../foundations/Button.js";
3
3
  import { Menu } from "../foundations/Menu.js";
4
4
  import { a as formatErrorMessage } from "../../format-COCyV98Z.js";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
2
- import { d as CheckIcon } from "../../icons-BC4HZqSK.js";
2
+ import { d as CheckIcon } from "../../icons-CeGfXO21.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
5
5
  //#region src/components/foundations/Checkbox.tsx
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { _ as DotIcon, d as CheckIcon } from "../../icons-BC4HZqSK.js";
2
+ import { _ as DotIcon, d as CheckIcon } from "../../icons-CeGfXO21.js";
3
3
  import "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { _ as DotIcon, d as CheckIcon } from "../../icons-BC4HZqSK.js";
2
+ import { _ as DotIcon, d as CheckIcon } from "../../icons-CeGfXO21.js";
3
3
  import { buttonVariants } from "./Button.js";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
2
- import { U as SearchIcon } from "../../icons-BC4HZqSK.js";
2
+ import { U as SearchIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Field } from "./Field.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/foundations/SearchField.tsx
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
2
- import { a as ArrowUpIcon, d as CheckIcon, n as ArrowDownIcon } from "../../icons-BC4HZqSK.js";
2
+ import { a as ArrowUpIcon, d as CheckIcon, n as ArrowDownIcon } from "../../icons-CeGfXO21.js";
3
3
  import "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  import { Select as Select$1 } from "@base-ui/react/select";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { K as SpinnerIcon, d as CheckIcon } from "../../icons-BC4HZqSK.js";
2
+ import { K as SpinnerIcon, d as CheckIcon } from "../../icons-CeGfXO21.js";
3
3
  import { Tabs } from "./Tabs.js";
4
4
  import * as React from "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { n as mergeBaseClassName } from "../../class-names-BiMDVpUo.js";
2
- import { tt as XIcon } from "../../icons-BC4HZqSK.js";
2
+ import { nt as XIcon } from "../../icons-CeGfXO21.js";
3
3
  import { buttonVariants } from "./Button.js";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";