@arbidocs/blocks 0.4.134 → 0.4.136

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 (102) hide show
  1. package/dist/agents/index.cjs +354 -306
  2. package/dist/agents/index.js +5 -5
  3. package/dist/agents/skills/index.d.ts +2 -0
  4. package/dist/agents/skills/skillFiles.d.ts +65 -0
  5. package/dist/agents/skills/skillImport.d.ts +36 -0
  6. package/dist/agents/workflows/index.d.ts +1 -1
  7. package/dist/agents/workflows/workflow.d.ts +19 -0
  8. package/dist/calls/index.cjs +3 -3
  9. package/dist/calls/index.js +2 -2
  10. package/dist/chat/index.cjs +138 -138
  11. package/dist/chat/index.js +3 -3
  12. package/dist/{chunk-26E6PHD2.js → chunk-5BXEYYH6.js} +3 -3
  13. package/dist/{chunk-26E6PHD2.js.map → chunk-5BXEYYH6.js.map} +1 -1
  14. package/dist/{chunk-FUTMU4FR.js → chunk-5HFPRI3W.js} +3 -3
  15. package/dist/{chunk-FUTMU4FR.js.map → chunk-5HFPRI3W.js.map} +1 -1
  16. package/dist/{chunk-WV4IDVDQ.cjs → chunk-7YLJHTDC.cjs} +11 -11
  17. package/dist/{chunk-WV4IDVDQ.cjs.map → chunk-7YLJHTDC.cjs.map} +1 -1
  18. package/dist/{chunk-GZPTWHP5.cjs → chunk-C44D4WFG.cjs} +6 -6
  19. package/dist/{chunk-GZPTWHP5.cjs.map → chunk-C44D4WFG.cjs.map} +1 -1
  20. package/dist/{chunk-OPTBQSCV.cjs → chunk-DJM7DLCT.cjs} +3 -3
  21. package/dist/{chunk-OPTBQSCV.cjs.map → chunk-DJM7DLCT.cjs.map} +1 -1
  22. package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
  23. package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
  24. package/dist/{chunk-OQ7RUNOC.js → chunk-GFYGYME3.js} +3 -3
  25. package/dist/{chunk-OQ7RUNOC.js.map → chunk-GFYGYME3.js.map} +1 -1
  26. package/dist/{chunk-HW2J4JMV.cjs → chunk-IE5CUCZK.cjs} +8 -8
  27. package/dist/{chunk-HW2J4JMV.cjs.map → chunk-IE5CUCZK.cjs.map} +1 -1
  28. package/dist/{chunk-54ANPPMV.js → chunk-IQU2GI6V.js} +248 -4
  29. package/dist/chunk-IQU2GI6V.js.map +1 -0
  30. package/dist/{chunk-CXLVI3SB.js → chunk-JO3EMZ4X.js} +3 -3
  31. package/dist/{chunk-CXLVI3SB.js.map → chunk-JO3EMZ4X.js.map} +1 -1
  32. package/dist/{chunk-ARDHLU73.cjs → chunk-KDUGTKVI.cjs} +21 -2
  33. package/dist/chunk-KDUGTKVI.cjs.map +1 -0
  34. package/dist/{chunk-4RLCRFZS.js → chunk-L2PAPOZ5.js} +21 -3
  35. package/dist/chunk-L2PAPOZ5.js.map +1 -0
  36. package/dist/{chunk-LC2KJSUS.cjs → chunk-LIHRGG4M.cjs} +302 -45
  37. package/dist/chunk-LIHRGG4M.cjs.map +1 -0
  38. package/dist/{chunk-BMNNT27D.js → chunk-LT2X5N37.js} +7 -48
  39. package/dist/chunk-LT2X5N37.js.map +1 -0
  40. package/dist/{chunk-D4YR56FV.cjs → chunk-N55UIXVT.cjs} +5 -5
  41. package/dist/{chunk-D4YR56FV.cjs.map → chunk-N55UIXVT.cjs.map} +1 -1
  42. package/dist/{chunk-BZF55UCE.cjs → chunk-OAL3B2ZU.cjs} +5 -5
  43. package/dist/{chunk-BZF55UCE.cjs.map → chunk-OAL3B2ZU.cjs.map} +1 -1
  44. package/dist/{chunk-AAFX64WD.cjs → chunk-OR4CO743.cjs} +3 -3
  45. package/dist/{chunk-AAFX64WD.cjs.map → chunk-OR4CO743.cjs.map} +1 -1
  46. package/dist/{chunk-HM23LXUP.cjs → chunk-OWCEQKAR.cjs} +23 -2
  47. package/dist/chunk-OWCEQKAR.cjs.map +1 -0
  48. package/dist/{chunk-QUDCNT63.cjs → chunk-OZLWSNUC.cjs} +66 -110
  49. package/dist/chunk-OZLWSNUC.cjs.map +1 -0
  50. package/dist/{chunk-VW2C2AZL.js → chunk-RUB62J2X.js} +3 -3
  51. package/dist/{chunk-VW2C2AZL.js.map → chunk-RUB62J2X.js.map} +1 -1
  52. package/dist/{chunk-4UMXQPNA.js → chunk-VIU7AMHF.js} +4 -4
  53. package/dist/{chunk-4UMXQPNA.js.map → chunk-VIU7AMHF.js.map} +1 -1
  54. package/dist/{chunk-7HAM7Y5U.js → chunk-Y5KTM3V5.js} +22 -3
  55. package/dist/chunk-Y5KTM3V5.js.map +1 -0
  56. package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
  57. package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
  58. package/dist/{chunk-YIF6SVSO.js → chunk-ZNI4SW2G.js} +4 -4
  59. package/dist/{chunk-YIF6SVSO.js.map → chunk-ZNI4SW2G.js.map} +1 -1
  60. package/dist/collaboration/index.cjs +42 -42
  61. package/dist/collaboration/index.js +2 -2
  62. package/dist/connect/docx.cjs +6 -6
  63. package/dist/connect/docx.js +5 -5
  64. package/dist/connect/index.cjs +220 -131
  65. package/dist/connect/index.cjs.map +1 -1
  66. package/dist/connect/index.d.ts +2 -2
  67. package/dist/connect/index.js +142 -58
  68. package/dist/connect/index.js.map +1 -1
  69. package/dist/connection/ConnectedSkillUpload.d.ts +26 -2
  70. package/dist/connection/ConnectedWorkflowBuilder.d.ts +23 -11
  71. package/dist/connection/ConnectionProvider.d.ts +17 -0
  72. package/dist/facts/index.cjs +3 -3
  73. package/dist/facts/index.js +3 -3
  74. package/dist/files/index.cjs +2 -2
  75. package/dist/files/index.js +2 -2
  76. package/dist/home/index.cjs +2 -2
  77. package/dist/home/index.js +2 -2
  78. package/dist/index.cjs +616 -568
  79. package/dist/index.js +12 -12
  80. package/dist/retrieval/index.cjs +1 -1
  81. package/dist/retrieval/index.js +1 -1
  82. package/dist/settings/index.cjs +38 -38
  83. package/dist/settings/index.js +4 -4
  84. package/dist/shell/index.cjs +2 -2
  85. package/dist/shell/index.js +2 -2
  86. package/dist/studio/index.cjs +8 -8
  87. package/dist/studio/index.js +6 -6
  88. package/dist/workflow-canvas/index.cjs +109 -85
  89. package/dist/workflow-canvas/index.cjs.map +1 -1
  90. package/dist/workflow-canvas/index.d.ts +1 -1
  91. package/dist/workflow-canvas/index.js +60 -37
  92. package/dist/workflow-canvas/index.js.map +1 -1
  93. package/node_modules/@arbidocs/coedit/package.json +1 -1
  94. package/package.json +4 -4
  95. package/dist/chunk-4RLCRFZS.js.map +0 -1
  96. package/dist/chunk-54ANPPMV.js.map +0 -1
  97. package/dist/chunk-7HAM7Y5U.js.map +0 -1
  98. package/dist/chunk-ARDHLU73.cjs.map +0 -1
  99. package/dist/chunk-BMNNT27D.js.map +0 -1
  100. package/dist/chunk-HM23LXUP.cjs.map +0 -1
  101. package/dist/chunk-LC2KJSUS.cjs.map +0 -1
  102. package/dist/chunk-QUDCNT63.cjs.map +0 -1
@@ -3,12 +3,12 @@
3
3
  * hooks, React Query + ARBI provider). Kept off the root barrel because it needs React Query.
4
4
  */
5
5
  export { type ArbiMode, type ConnectionStatus, type ArbiUser, type AssistantStep, type AssistantCitation, type AssistantMessage, type ArbiConnectionConfig, } from '../connection/types';
6
- export { ConnectionProvider, SESSION_EXPIRED_MESSAGE, useConnection, isAuthenticated, } from '../connection/ConnectionProvider';
6
+ export { ConnectionProvider, SESSION_EXPIRED_MESSAGE, useConnection, useConnectedWorkspace, type ConnectedWorkspace, isAuthenticated, } from '../connection/ConnectionProvider';
7
7
  export { ArbiAppProvider } from '../connection/ArbiAppProvider';
8
8
  export { ConnectedTaskAccessRequest } from '../connection/ConnectedTaskAccessRequest';
9
9
  export { ConnectedWorkspaceActivity, type ConnectedWorkspaceActivityProps, } from '../connection/ConnectedWorkspaceActivity';
10
10
  export { ConnectedWorkspaceNotificationMenu, ConnectedThreadFollow, type ConnectedWorkspaceNotificationMenuProps, type ConnectedThreadFollowProps, } from '../connection/ConnectedNotificationRelevance';
11
- export { ConnectedSkillUpload } from '../connection/ConnectedSkillUpload';
11
+ export { ConnectedSkillUpload, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, type ConnectedSkillUploadProps, type ConnectedSkillUploadLabels, } from '../connection/ConnectedSkillUpload';
12
12
  export { useConnectedAiTask, useConnectedChat, ConnectedAssistantDock, useWorkspaceDocs, useSemanticSearch, toRedlineMarkdown, redlineStats, textToArtifact, type AiTaskStatus, type AiRunOptions, type SearchChunk, type ArtifactEvent, } from '../connection/ai';
13
13
  export { StreamedArtifact, type StreamedArtifactProps } from '../connection/StreamedArtifact';
14
14
  export { ConnectedWorkflowRunner, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, type ConnectedWorkflowRunnerProps, type ConnectedWorkflowRunnerLabels, type WorkflowRunnerDocument, } from '../connection/ConnectedWorkflowRunner';
@@ -1,49 +1,49 @@
1
1
  "use client";
2
- import { SettingsSection, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, SettingsCard, SettingsActionRow, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, SettingsRow, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, SettingsDangerZone, DeleteAccountDialog, toDeleteBlockerViews } from '../chunk-OQ7RUNOC.js';
3
- import { useWorkspaceDocs } from '../chunk-YIF6SVSO.js';
4
- export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-YIF6SVSO.js';
5
- import { ConnectedNativeDocxEditor } from '../chunk-4UMXQPNA.js';
6
- import { ConnectionProvider, useConnection } from '../chunk-4RLCRFZS.js';
7
- export { ConnectionProvider, SESSION_EXPIRED_MESSAGE, isAuthenticated, useConnection } from '../chunk-4RLCRFZS.js';
2
+ import { SettingsSection, ProfileCard, AvatarPicker, IdentityVerificationCard, IdentityVerificationDialog, RequireVerified, PasswordChangeDialog, SettingsCard, SettingsActionRow, EMAIL_NOTIFICATION_KEYS, EMAIL_NOTIFICATION_CATEGORIES, NotificationCategoryList, toNotificationCategories, toActiveSessionViews, SettingsRow, ActiveSessionsDialog, LogoutDialog, toLogoutSessionViews, SettingsDangerZone, DeleteAccountDialog, toDeleteBlockerViews } from '../chunk-GFYGYME3.js';
3
+ import { useWorkspaceDocs } from '../chunk-ZNI4SW2G.js';
4
+ export { ConnectedAssistantDock, redlineStats, textToArtifact, toRedlineMarkdown, useConnectedAiTask, useConnectedChat, useSemanticSearch, useWorkspaceDocs } from '../chunk-ZNI4SW2G.js';
5
+ import { ConnectedNativeDocxEditor } from '../chunk-VIU7AMHF.js';
6
+ import { ConnectionProvider, useConnection } from '../chunk-L2PAPOZ5.js';
7
+ export { ConnectionProvider, SESSION_EXPIRED_MESSAGE, isAuthenticated, useConnectedWorkspace, useConnection } from '../chunk-L2PAPOZ5.js';
8
8
  import { SignDocumentDialog } from '../chunk-2YOVK524.js';
9
9
  import '../chunk-GYAUJ4KT.js';
10
10
  import '../chunk-2FL7QJKJ.js';
11
11
  import '../chunk-HFZ45FD3.js';
12
12
  import { FilesFilterBar, FolderFilterButton, FolderPickerRow } from '../chunk-7RJTEWYM.js';
13
- import { WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, tagTableDocx } from '../chunk-VW2C2AZL.js';
13
+ import { WorkspaceActivityList, WorkspaceNotificationMenu, ThreadFollowMenuItem, ThreadFollowButton, TagTable, tagTableDocx } from '../chunk-RUB62J2X.js';
14
14
  import { PlainMailBodyEditor, draftMailCompose, replyMailCompose, emptyMailCompose, MailGrid, MailMessageView, MailDocumentPicker, parseMailRecipients } from '../chunk-6HCJ3ZEU.js';
15
15
  import { DOCX_MIME_TYPE } from '../chunk-QXMR5YHC.js';
16
16
  import '../chunk-AF6RDAJF.js';
17
- import { StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
18
- import { WorkflowStepBar, WorkflowRunner, fromPlanSteps, toPlanSteps, useWorkflowView } from '../chunk-54ANPPMV.js';
17
+ import { WorkflowStepBar, importSkillFile, importSkillFromUrl, WorkflowRunner, fromPlanSteps, toPlanSteps, useWorkflowView } from '../chunk-IQU2GI6V.js';
19
18
  import '../chunk-XD2M6LIG.js';
20
19
  import { TriStateFilterMenu } from '../chunk-6S5FLMWG.js';
21
20
  import '../chunk-EVUEIBNU.js';
22
21
  import { FilterInput } from '../chunk-YU2KUMGE.js';
23
22
  import '../chunk-N5YEF3LC.js';
23
+ import { StreamedArtifactFrame } from '../chunk-LOJVUGBJ.js';
24
24
  import '../chunk-VILAPTCB.js';
25
- import { ConfirmDialog } from '../chunk-VHJHY7TT.js';
25
+ import { ConfirmDialog } from '../chunk-ECERC6TI.js';
26
26
  import { TabHeader } from '../chunk-4WWM3GQ5.js';
27
- import { ChatPage } from '../chunk-CXLVI3SB.js';
27
+ import { useBlocksEnvironment } from '../chunk-YNIBUKV5.js';
28
+ import { ModalScaffold } from '../chunk-TX2ZICS7.js';
29
+ import { ChatPage } from '../chunk-JO3EMZ4X.js';
28
30
  import '../chunk-7XF5SFJ2.js';
29
31
  import { takeOpenDocumentForTurn, useRegisterOpenDocument } from '../chunk-YBLIKTJK.js';
30
- import { splitDocRef, stepLevels, stepDocuments, stepKindOf, initialRunInputs, workflowSteps, stepStatesFromActivity, runThreadTitle, stepFields } from '../chunk-7HAM7Y5U.js';
32
+ import { splitDocRef, stepLevels, stepDocuments, stepKindOf, initialRunInputs, workflowSteps, stepStatesFromActivity, runThreadTitle, stepFields } from '../chunk-Y5KTM3V5.js';
31
33
  import '../chunk-AA3PT6KR.js';
32
34
  import '../chunk-AUS3KBHJ.js';
33
35
  import '../chunk-SLSBJRWW.js';
34
36
  import '../chunk-NPLYHR2E.js';
35
37
  import '../chunk-7F6CBP3Z.js';
36
- import { useBlocksEnvironment } from '../chunk-YNIBUKV5.js';
37
- import { ModalScaffold } from '../chunk-TX2ZICS7.js';
38
38
  import { initials } from '../chunk-OXF2IFXG.js';
39
39
  import '../chunk-VUNV25KB.js';
40
- import { lazy, useState, useMemo, Suspense, useEffect, useRef, useCallback, useLayoutEffect } from 'react';
40
+ import { lazy, useState, useMemo, useRef, Suspense, useEffect, useCallback, useLayoutEffect } from 'react';
41
41
  import { QueryClient, QueryClientProvider, useQueryClient, useQuery } from '@tanstack/react-query';
42
42
  import { ArbiProvider, useConversations, useRunConversation, useWorkspaceActivity, useWorkspaceUsers, useWorkspaceNotificationLevel, useFollowThread, useUploadSkillFiles, ArtifactCanvas, useArbiChat, useArbi, useDocuments, useTagKindSchema, useTags, useSetTagValues, useUpdateTagKindSchema, useInvalidateTagData, useWorkspaces, useShellWorkspaces, useProfile, useUpdateProfile, useRequestEmailChange, useConfirmEmailChange, useNameEditor, useAvatarCrop, useEmailChange, ImageCropModal, useIdentityVerification, usePasswordChange, usePasswordChangeForm, useNotificationPreferences, useSessions, useCurrentSessionId, useTerminateSession, useSignOut, useDeleteAccount, useDeleteAccountFlow, useArbiWebSocket, useWorkNotifications, mailDraftIdFromContent, useMailClient, defaultMailAlias, useClaimNativeAlias, useMailOnline, useConnectMailAccount, useDisconnectMailAccount, useMailPolicy, useMailAccounts, useMailUnlock, useMailFolders, useMailMessages, useMailDraftCompose, useMailMessage, useMailCache, MailOfflineUnavailableError, accountPath, useAgentSession, useStartAgentSession, useCloseAgentSession, isAliasTakenError, nextAliasSuggestion, aliasTakenMessage, mailJson, ArbiWebSocketProvider, useCreateWork, useActOnStep, useConversationActivity, useConversationThreads, fileAttachment, useMailProjects, useSaveMailDraft, useSendMail, useMailDraftReplaced, AiAnswer, useMailDraftEditor } from '@arbidocs/react';
43
43
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
44
- import { Button, Label, Input, Dialog, DialogContent, DialogTitle, DialogDescription, Tooltip, TooltipTrigger, TooltipContent, cn } from '@arbidocs/react/ui';
44
+ import { Button, Label, Input, cn, Dialog, DialogContent, DialogTitle, DialogDescription, Tooltip, TooltipTrigger, TooltipContent } from '@arbidocs/react/ui';
45
+ import { Upload, Link2, ExternalLink, UserCircle, KeyRound, Radio, Mail, Settings, Plus, ArrowLeft, Loader2, X, Paperclip, Send, MessageSquare } from 'lucide-react';
45
46
  import { useStreamedArtifact } from '@arbidocs/react/artifacts';
46
- import { ExternalLink, UserCircle, KeyRound, Radio, Mail, Settings, Plus, ArrowLeft, Loader2, X, Paperclip, Send, MessageSquare } from 'lucide-react';
47
47
  import { useIsOnline, useOptionalDocumentTools, fetchDocumentPdf, DocumentToolsProvider } from '@arbidocs/react/document-tools';
48
48
  import { useNotify } from '@arbidocs/react/shell';
49
49
  import { bytesToBase64 } from '@arbidocs/client';
@@ -181,47 +181,131 @@ function ConnectedThreadFollow({
181
181
  }
182
182
  );
183
183
  }
184
- function ConnectedSkillUpload() {
185
- const [name, setName] = useState("");
186
- const [file, setFile] = useState(null);
184
+ var DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS = {
185
+ title: "Add a skill",
186
+ description: "Bring in a skill someone sent you, from a file or a link.",
187
+ fromFile: "From a file",
188
+ chooseFile: "Choose a file",
189
+ fromLink: "From a link",
190
+ linkPlaceholder: "https://\u2026/SKILL.md",
191
+ add: "Add",
192
+ cancel: "Cancel",
193
+ added: (slug) => `${slug} added`,
194
+ failed: "Could not add the skill"
195
+ };
196
+ function ConnectedSkillUpload({ onDone, labels, className }) {
197
+ const l = { ...DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, ...labels };
198
+ const { notify } = useBlocksEnvironment();
187
199
  const upload = useUploadSkillFiles();
188
- const slug = name.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
189
- return /* @__PURE__ */ jsxs("section", { className: "space-y-3 rounded-lg border p-4", "data-testid": "skill-upload", children: [
190
- /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold", children: "Add a skill" }),
191
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Upload a SKILL.md file containing the instructions your assistant should follow." }),
192
- /* @__PURE__ */ jsx(Label, { htmlFor: "skill-upload-name", children: "Skill name" }),
193
- /* @__PURE__ */ jsx(
194
- Input,
195
- {
196
- id: "skill-upload-name",
197
- value: name,
198
- onChange: (event) => setName(event.target.value),
199
- placeholder: "disclosure-review",
200
- "data-testid": "skill-upload-name"
201
- }
202
- ),
203
- /* @__PURE__ */ jsx(
204
- Input,
205
- {
206
- type: "file",
207
- accept: ".md",
208
- "aria-label": "Skill instructions file",
209
- onChange: (event) => setFile(event.target.files?.[0] ?? null),
210
- "data-testid": "skill-upload-file"
211
- }
212
- ),
213
- /* @__PURE__ */ jsx(
214
- Button,
215
- {
216
- disabled: !slug || !file || upload.isPending,
217
- onClick: () => file && upload.mutate([{ folder: `skills/${slug}`, fileName: "SKILL.md", content: file }]),
218
- "data-testid": "skill-upload-submit",
219
- children: upload.isPending ? "Uploading\u2026" : "Upload skill"
220
- }
221
- ),
222
- upload.isSuccess && /* @__PURE__ */ jsx("p", { role: "status", className: "text-sm", children: "Uploaded. The skill will appear once processing finishes." }),
223
- upload.error && /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm text-destructive", children: upload.error.message })
224
- ] });
200
+ const fileRef = useRef(null);
201
+ const [url, setUrl] = useState("");
202
+ const [busy, setBusy] = useState(false);
203
+ const add = async (read) => {
204
+ setBusy(true);
205
+ try {
206
+ const { slug, entries } = await read();
207
+ await upload.mutateAsync(
208
+ entries.map((e) => ({
209
+ folder: e.folder,
210
+ fileName: e.fileName,
211
+ content: new Blob([e.content], { type: "text/markdown" })
212
+ }))
213
+ );
214
+ notify(l.added(slug), "success");
215
+ setUrl("");
216
+ onDone?.(slug);
217
+ } catch (error) {
218
+ notify(error instanceof Error && error.message ? error.message : l.failed, "error");
219
+ } finally {
220
+ setBusy(false);
221
+ }
222
+ };
223
+ return /* @__PURE__ */ jsxs(
224
+ "div",
225
+ {
226
+ className: cn("flex flex-col gap-6 overflow-y-auto p-4", className),
227
+ "data-testid": "skills-add-view",
228
+ children: [
229
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
230
+ /* @__PURE__ */ jsx("h3", { className: "text-base font-semibold", children: l.title }),
231
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: l.description })
232
+ ] }),
233
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
234
+ /* @__PURE__ */ jsx(Label, { children: l.fromFile }),
235
+ /* @__PURE__ */ jsx(
236
+ "input",
237
+ {
238
+ ref: fileRef,
239
+ type: "file",
240
+ accept: ".md,.markdown,.zip",
241
+ className: "hidden",
242
+ "data-testid": "skills-add-file-input",
243
+ onChange: (e) => {
244
+ const file = e.target.files?.[0];
245
+ e.target.value = "";
246
+ if (file) void add(() => importSkillFile(file));
247
+ }
248
+ }
249
+ ),
250
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
251
+ Button,
252
+ {
253
+ variant: "outline",
254
+ disabled: busy,
255
+ onClick: () => fileRef.current?.click(),
256
+ className: "pointer-coarse:min-h-11",
257
+ "data-testid": "skills-add-file",
258
+ children: [
259
+ /* @__PURE__ */ jsx(Upload, { className: "mr-1.5 size-4" }),
260
+ l.chooseFile
261
+ ]
262
+ }
263
+ ) })
264
+ ] }),
265
+ /* @__PURE__ */ jsxs(
266
+ "form",
267
+ {
268
+ className: "space-y-2",
269
+ onSubmit: (e) => {
270
+ e.preventDefault();
271
+ if (url.trim()) void add(() => importSkillFromUrl(url));
272
+ },
273
+ children: [
274
+ /* @__PURE__ */ jsx(Label, { htmlFor: "skills-add-url", children: l.fromLink }),
275
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 sm:flex-row", children: [
276
+ /* @__PURE__ */ jsx(
277
+ Input,
278
+ {
279
+ id: "skills-add-url",
280
+ value: url,
281
+ onChange: (e) => setUrl(e.target.value),
282
+ placeholder: l.linkPlaceholder,
283
+ inputMode: "url",
284
+ className: "pointer-coarse:min-h-11",
285
+ "data-testid": "skills-add-url-input"
286
+ }
287
+ ),
288
+ /* @__PURE__ */ jsxs(
289
+ Button,
290
+ {
291
+ type: "submit",
292
+ disabled: busy || !url.trim(),
293
+ className: "pointer-coarse:min-h-11",
294
+ "data-testid": "skills-add-url-submit",
295
+ children: [
296
+ /* @__PURE__ */ jsx(Link2, { className: "mr-1.5 size-4" }),
297
+ l.add
298
+ ]
299
+ }
300
+ )
301
+ ] })
302
+ ]
303
+ }
304
+ ),
305
+ onDone && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Button, { variant: "ghost", onClick: () => onDone(), className: "pointer-coarse:min-h-11", children: l.cancel }) })
306
+ ]
307
+ }
308
+ );
225
309
  }
226
310
  var StreamedArtifactEditor = lazy(() => import('../StreamedArtifactEditor-XQNANTWM.js'));
227
311
  function StreamedArtifact({
@@ -3825,6 +3909,6 @@ function ConnectedAgentChatPanel({
3825
3909
  ] });
3826
3910
  }
3827
3911
 
3828
- export { ArbiAppProvider, ConnectedAgentChatPanel, ConnectedDangerZone, ConnectedIdentityVerification, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailMessage, ConnectedMailSetup, ConnectedMailbox, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedRequireVerified, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSkillUpload, ConnectedTagTable, ConnectedTaskAccessRequest, ConnectedThreadFollow, ConnectedWorkflowRunner, ConnectedWorkspaceActivity, ConnectedWorkspaceNotificationMenu, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, StreamedArtifact, WorkflowRunThread, defaultUnmetPasswordRequirement, resolveMailbox, useConnectedDocxNotifications, useConnectedShellWorkspaces, useConnectedWorkNotifications };
3912
+ export { ArbiAppProvider, ConnectedAgentChatPanel, ConnectedDangerZone, ConnectedIdentityVerification, ConnectedLogoutDialog, ConnectedMailAccounts, ConnectedMailComposer, ConnectedMailMessage, ConnectedMailSetup, ConnectedMailbox, ConnectedNotificationPreferences, ConnectedPasswordChangeDialog, ConnectedProfileCard, ConnectedRequireVerified, ConnectedSecuritySection, ConnectedSessionsRow, ConnectedSkillUpload, ConnectedTagTable, ConnectedTaskAccessRequest, ConnectedThreadFollow, ConnectedWorkflowRunner, ConnectedWorkspaceActivity, ConnectedWorkspaceNotificationMenu, DEFAULT_CONNECTED_SKILL_UPLOAD_LABELS, DEFAULT_CONNECTED_WORKFLOW_RUNNER_LABELS, StreamedArtifact, WorkflowRunThread, defaultUnmetPasswordRequirement, resolveMailbox, useConnectedDocxNotifications, useConnectedShellWorkspaces, useConnectedWorkNotifications };
3829
3913
  //# sourceMappingURL=index.js.map
3830
3914
  //# sourceMappingURL=index.js.map