@arbidocs/blocks 0.4.146 → 0.4.147

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 (74) hide show
  1. package/dist/agents/index.cjs +262 -262
  2. package/dist/agents/index.js +5 -5
  3. package/dist/{chunk-MFMASSEO.cjs → chunk-AINU3EJ6.cjs} +8 -8
  4. package/dist/{chunk-MFMASSEO.cjs.map → chunk-AINU3EJ6.cjs.map} +1 -1
  5. package/dist/{chunk-O2GW5IY6.cjs → chunk-AO7SK6WP.cjs} +29 -29
  6. package/dist/{chunk-O2GW5IY6.cjs.map → chunk-AO7SK6WP.cjs.map} +1 -1
  7. package/dist/{chunk-OBWYM25Y.js → chunk-DAHCRVPM.js} +3 -3
  8. package/dist/{chunk-OBWYM25Y.js.map → chunk-DAHCRVPM.js.map} +1 -1
  9. package/dist/{chunk-FUTMU4FR.js → chunk-DGV7HQA7.js} +6 -179
  10. package/dist/chunk-DGV7HQA7.js.map +1 -0
  11. package/dist/{chunk-O6IEZDRC.cjs → chunk-GRGS5M6O.cjs} +181 -3
  12. package/dist/chunk-GRGS5M6O.cjs.map +1 -0
  13. package/dist/{chunk-A6IU4GIW.js → chunk-H74HEPKT.js} +3 -3
  14. package/dist/{chunk-A6IU4GIW.js.map → chunk-H74HEPKT.js.map} +1 -1
  15. package/dist/{chunk-LPYEUD2D.cjs → chunk-IL3WB3YX.cjs} +3 -3
  16. package/dist/{chunk-LPYEUD2D.cjs.map → chunk-IL3WB3YX.cjs.map} +1 -1
  17. package/dist/{chunk-C3CGJK7A.cjs → chunk-LTU35TQN.cjs} +5 -5
  18. package/dist/{chunk-C3CGJK7A.cjs.map → chunk-LTU35TQN.cjs.map} +1 -1
  19. package/dist/{chunk-T5B7FM7S.js → chunk-LZRMXJIE.js} +3 -3
  20. package/dist/{chunk-T5B7FM7S.js.map → chunk-LZRMXJIE.js.map} +1 -1
  21. package/dist/{chunk-OPTBQSCV.cjs → chunk-MFY2ZNP6.cjs} +2 -181
  22. package/dist/{chunk-FUTMU4FR.js.map → chunk-MFY2ZNP6.cjs.map} +1 -1
  23. package/dist/{chunk-6HCJ3ZEU.js → chunk-R6VCPDPF.js} +178 -6
  24. package/dist/chunk-R6VCPDPF.js.map +1 -0
  25. package/dist/{chunk-C44TDH54.js → chunk-SUUPR735.js} +3 -3
  26. package/dist/{chunk-C44TDH54.js.map → chunk-SUUPR735.js.map} +1 -1
  27. package/dist/{chunk-RB7GX2VT.cjs → chunk-T5I4NRFP.cjs} +6 -6
  28. package/dist/{chunk-RB7GX2VT.cjs.map → chunk-T5I4NRFP.cjs.map} +1 -1
  29. package/dist/chunk-U37AYUPI.cjs +5371 -0
  30. package/dist/chunk-U37AYUPI.cjs.map +1 -0
  31. package/dist/{chunk-IJST4EBM.js → chunk-VUR63NMQ.js} +5 -5
  32. package/dist/{chunk-IJST4EBM.js.map → chunk-VUR63NMQ.js.map} +1 -1
  33. package/dist/chunk-WIZ7Z7FN.js +5179 -0
  34. package/dist/chunk-WIZ7Z7FN.js.map +1 -0
  35. package/dist/collaboration/index.cjs +73 -73
  36. package/dist/collaboration/index.js +2 -2
  37. package/dist/connect/docx.cjs +7 -7
  38. package/dist/connect/docx.js +4 -4
  39. package/dist/connect/index.cjs +1029 -125
  40. package/dist/connect/index.cjs.map +1 -1
  41. package/dist/connect/index.d.ts +1 -0
  42. package/dist/connect/index.js +910 -13
  43. package/dist/connect/index.js.map +1 -1
  44. package/dist/connection/connectors/ConnectedAppsSettings.d.ts +24 -0
  45. package/dist/connection/connectors/ConnectedDriveSyncDialog.d.ts +12 -0
  46. package/dist/connection/connectors/ConnectedMailboxSyncDialog.d.ts +12 -0
  47. package/dist/connection/connectors/index.d.ts +4 -0
  48. package/dist/connection/connectors/sync-labels.d.ts +21 -0
  49. package/dist/connection/settings-page/ConnectedSettingsPage.d.ts +4 -0
  50. package/dist/connection/settings-page/index.d.ts +1 -1
  51. package/dist/files/index.cjs +2 -2
  52. package/dist/files/index.js +2 -2
  53. package/dist/index.cjs +395 -395
  54. package/dist/index.js +11 -11
  55. package/dist/settings/PlanBadge.d.ts +1 -1
  56. package/dist/settings/index.cjs +545 -3710
  57. package/dist/settings/index.cjs.map +1 -1
  58. package/dist/settings/index.js +8 -3525
  59. package/dist/settings/index.js.map +1 -1
  60. package/dist/site/index.cjs +5 -5
  61. package/dist/site/index.js +1 -1
  62. package/dist/studio/index.cjs +1 -1
  63. package/dist/studio/index.js +1 -1
  64. package/dist/workflow-canvas/index.cjs +18 -18
  65. package/dist/workflow-canvas/index.js +5 -5
  66. package/node_modules/@arbidocs/coedit/package.json +1 -1
  67. package/package.json +4 -4
  68. package/dist/chunk-5YHEHEJT.js +0 -1667
  69. package/dist/chunk-5YHEHEJT.js.map +0 -1
  70. package/dist/chunk-6HCJ3ZEU.js.map +0 -1
  71. package/dist/chunk-O6IEZDRC.cjs.map +0 -1
  72. package/dist/chunk-OPTBQSCV.cjs.map +0 -1
  73. package/dist/chunk-U73KPFYH.cjs +0 -1717
  74. package/dist/chunk-U73KPFYH.cjs.map +0 -1
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkRXK3XP62_cjs = require('../chunk-RXK3XP62.cjs');
5
- var chunkU73KPFYH_cjs = require('../chunk-U73KPFYH.cjs');
5
+ var chunkU37AYUPI_cjs = require('../chunk-U37AYUPI.cjs');
6
6
  var chunkODRHHWHY_cjs = require('../chunk-ODRHHWHY.cjs');
7
- var chunkMFMASSEO_cjs = require('../chunk-MFMASSEO.cjs');
7
+ var chunkAINU3EJ6_cjs = require('../chunk-AINU3EJ6.cjs');
8
8
  var chunkGAYMJWTC_cjs = require('../chunk-GAYMJWTC.cjs');
9
9
  var chunkGFNELPDP_cjs = require('../chunk-GFNELPDP.cjs');
10
10
  var chunkJH6JTI76_cjs = require('../chunk-JH6JTI76.cjs');
@@ -12,21 +12,25 @@ require('../chunk-464YPRAE.cjs');
12
12
  require('../chunk-V5OAXIBN.cjs');
13
13
  require('../chunk-5FYU7ZIU.cjs');
14
14
  var chunkO4YPVYPO_cjs = require('../chunk-O4YPVYPO.cjs');
15
- var chunkC3CGJK7A_cjs = require('../chunk-C3CGJK7A.cjs');
15
+ require('../chunk-223D4727.cjs');
16
+ var chunkLTU35TQN_cjs = require('../chunk-LTU35TQN.cjs');
16
17
  var chunkXAJIKT6Y_cjs = require('../chunk-XAJIKT6Y.cjs');
18
+ require('../chunk-QZTNTP75.cjs');
17
19
  var chunkV46W7YLI_cjs = require('../chunk-V46W7YLI.cjs');
18
- var chunkO6IEZDRC_cjs = require('../chunk-O6IEZDRC.cjs');
20
+ require('../chunk-NWNVWO6L.cjs');
21
+ var chunkGRGS5M6O_cjs = require('../chunk-GRGS5M6O.cjs');
19
22
  require('../chunk-LJJJ6CYH.cjs');
20
23
  var chunkI2QSDQQV_cjs = require('../chunk-I2QSDQQV.cjs');
21
24
  require('../chunk-RC25WMVB.cjs');
22
- var chunkRB7GX2VT_cjs = require('../chunk-RB7GX2VT.cjs');
25
+ var chunkT5I4NRFP_cjs = require('../chunk-T5I4NRFP.cjs');
23
26
  var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
24
- var chunkLPYEUD2D_cjs = require('../chunk-LPYEUD2D.cjs');
27
+ var chunkIL3WB3YX_cjs = require('../chunk-IL3WB3YX.cjs');
25
28
  require('../chunk-EYKISBDO.cjs');
26
- require('../chunk-AHDJXIUB.cjs');
27
29
  var chunkRQ2Y7USX_cjs = require('../chunk-RQ2Y7USX.cjs');
30
+ require('../chunk-AHDJXIUB.cjs');
28
31
  require('../chunk-ZW6FPIFC.cjs');
29
32
  require('../chunk-DETZZBG2.cjs');
33
+ require('../chunk-DVUZTGVL.cjs');
30
34
  require('../chunk-DTROMMDX.cjs');
31
35
  var chunkV4ISCZJ7_cjs = require('../chunk-V4ISCZJ7.cjs');
32
36
  var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
@@ -142,7 +146,7 @@ function ConnectedWorkspaceActivity({
142
146
  [feed.data]
143
147
  );
144
148
  return /* @__PURE__ */ jsxRuntime.jsx(
145
- chunkC3CGJK7A_cjs.WorkspaceActivityList,
149
+ chunkLTU35TQN_cjs.WorkspaceActivityList,
146
150
  {
147
151
  ...listProps,
148
152
  items,
@@ -570,7 +574,7 @@ function NotificationCenter({
570
574
  }
571
575
  ];
572
576
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full bg-background", "data-testid": "notifications-page", children: [
573
- /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
577
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
574
578
  chunk7RGLTF76_cjs.TabHeader,
575
579
  {
576
580
  tabs,
@@ -820,7 +824,7 @@ function ConnectedWorkspaceNotificationMenu({
820
824
  }, [error, notify]);
821
825
  if (!workspaceId) return null;
822
826
  return /* @__PURE__ */ jsxRuntime.jsx(
823
- chunkC3CGJK7A_cjs.WorkspaceNotificationMenu,
827
+ chunkLTU35TQN_cjs.WorkspaceNotificationMenu,
824
828
  {
825
829
  ...menuProps,
826
830
  level,
@@ -839,7 +843,7 @@ function ConnectedThreadFollow({
839
843
  enabled: live
840
844
  });
841
845
  if (!conversationId) return null;
842
- const Control = as === "menu-item" ? chunkC3CGJK7A_cjs.ThreadFollowMenuItem : chunkC3CGJK7A_cjs.ThreadFollowButton;
846
+ const Control = as === "menu-item" ? chunkLTU35TQN_cjs.ThreadFollowMenuItem : chunkLTU35TQN_cjs.ThreadFollowButton;
843
847
  return /* @__PURE__ */ jsxRuntime.jsx(
844
848
  Control,
845
849
  {
@@ -912,7 +916,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
912
916
  onChange: (e) => {
913
917
  const file = e.target.files?.[0];
914
918
  e.target.value = "";
915
- if (file) void add(() => chunkRB7GX2VT_cjs.importSkillFile(file));
919
+ if (file) void add(() => chunkT5I4NRFP_cjs.importSkillFile(file));
916
920
  }
917
921
  }
918
922
  ),
@@ -937,7 +941,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
937
941
  className: "space-y-2",
938
942
  onSubmit: (e) => {
939
943
  e.preventDefault();
940
- if (url.trim()) void add(() => chunkRB7GX2VT_cjs.importSkillFromUrl(url));
944
+ if (url.trim()) void add(() => chunkT5I4NRFP_cjs.importSkillFromUrl(url));
941
945
  },
942
946
  children: [
943
947
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "skills-add-url", children: l.fromLink }),
@@ -1001,9 +1005,9 @@ function ConnectedSkillsLibrary({
1001
1005
  const [type, setType] = react.useState("all");
1002
1006
  const [view, setView] = react.useState("gallery");
1003
1007
  const [isBusy, setIsBusy] = react.useState(false);
1004
- const all = react.useMemo(() => chunkRB7GX2VT_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
1008
+ const all = react.useMemo(() => chunkT5I4NRFP_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
1005
1009
  const shown = react.useMemo(
1006
- () => chunkRB7GX2VT_cjs.filterLibrarySkills(all, { query, source, type }),
1010
+ () => chunkT5I4NRFP_cjs.filterLibrarySkills(all, { query, source, type }),
1007
1011
  [all, query, source, type]
1008
1012
  );
1009
1013
  const current = all.find((s) => s.slug === selected) ?? null;
@@ -1014,21 +1018,21 @@ function ConnectedSkillsLibrary({
1014
1018
  const count = (s) => all.filter((x) => x.source === s).length;
1015
1019
  const sourceOptions = [
1016
1020
  { id: "all", label: "All", count: all.length },
1017
- { id: "builtin", label: chunkRB7GX2VT_cjs.SKILL_SOURCE_LABELS.builtin, count: count("builtin") },
1018
- { id: "mine", label: chunkRB7GX2VT_cjs.SKILL_SOURCE_LABELS.mine, count: count("mine") },
1019
- { id: "shared", label: chunkRB7GX2VT_cjs.SKILL_SOURCE_LABELS.shared, count: count("shared") }
1021
+ { id: "builtin", label: chunkT5I4NRFP_cjs.SKILL_SOURCE_LABELS.builtin, count: count("builtin") },
1022
+ { id: "mine", label: chunkT5I4NRFP_cjs.SKILL_SOURCE_LABELS.mine, count: count("mine") },
1023
+ { id: "shared", label: chunkT5I4NRFP_cjs.SKILL_SOURCE_LABELS.shared, count: count("shared") }
1020
1024
  ];
1021
1025
  const types = [...new Set(all.map((s) => s.type))];
1022
1026
  const typeOptions = [
1023
1027
  { id: "all", label: "Any kind" },
1024
- ...types.map((t) => ({ id: t, label: chunkRB7GX2VT_cjs.SKILL_TYPE_LABELS[t] ?? t }))
1028
+ ...types.map((t) => ({ id: t, label: chunkT5I4NRFP_cjs.SKILL_TYPE_LABELS[t] ?? t }))
1025
1029
  ];
1026
1030
  const pick = (slug) => {
1027
1031
  setSelected(slug);
1028
1032
  setMode("detail");
1029
1033
  };
1030
1034
  const markdownOf = async (skill) => {
1031
- if (!skill.docExtId) return chunkRB7GX2VT_cjs.workflowToSkillMarkdown(skill.workflow);
1035
+ if (!skill.docExtId) return chunkT5I4NRFP_cjs.workflowToSkillMarkdown(skill.workflow);
1032
1036
  const response = await arbi.documents.download(skill.docExtId);
1033
1037
  if (!response.ok) throw new Error(`Could not read the skill (${response.status})`);
1034
1038
  return response.text();
@@ -1036,7 +1040,7 @@ function ConnectedSkillsLibrary({
1036
1040
  const saveAs = (slug, markdown, shared = false) => upload.mutateAsync([
1037
1041
  {
1038
1042
  folder: `${SKILL_FOLDER}${slug}`,
1039
- fileName: chunkRB7GX2VT_cjs.SKILL_MAIN_FILENAME,
1043
+ fileName: chunkT5I4NRFP_cjs.SKILL_MAIN_FILENAME,
1040
1044
  content: new Blob([markdown], { type: "text/markdown" }),
1041
1045
  shared
1042
1046
  }
@@ -1099,7 +1103,7 @@ function ConnectedSkillsLibrary({
1099
1103
  try {
1100
1104
  documentTools.downloadBlob(
1101
1105
  new Blob([await markdownOf(skill)], { type: "text/markdown" }),
1102
- chunkRB7GX2VT_cjs.SKILL_MAIN_FILENAME
1106
+ chunkT5I4NRFP_cjs.SKILL_MAIN_FILENAME
1103
1107
  );
1104
1108
  } catch (error) {
1105
1109
  notify(errorText(error, "Could not export the skill"), "error");
@@ -1140,10 +1144,10 @@ function ConnectedSkillsLibrary({
1140
1144
  }
1141
1145
  )
1142
1146
  ] }),
1143
- /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.SkillViewToggle, { value: view, onChange: setView })
1147
+ /* @__PURE__ */ jsxRuntime.jsx(chunkT5I4NRFP_cjs.SkillViewToggle, { value: view, onChange: setView })
1144
1148
  ] }),
1145
1149
  /* @__PURE__ */ jsxRuntime.jsx(
1146
- chunkRB7GX2VT_cjs.SkillFilterChips,
1150
+ chunkT5I4NRFP_cjs.SkillFilterChips,
1147
1151
  {
1148
1152
  label: "Show",
1149
1153
  value: source,
@@ -1152,7 +1156,7 @@ function ConnectedSkillsLibrary({
1152
1156
  }
1153
1157
  ),
1154
1158
  types.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
1155
- chunkRB7GX2VT_cjs.SkillFilterChips,
1159
+ chunkT5I4NRFP_cjs.SkillFilterChips,
1156
1160
  {
1157
1161
  label: "Kind",
1158
1162
  value: type,
@@ -1199,12 +1203,12 @@ function ConnectedSkillsLibrary({
1199
1203
  view === "gallery" ? "grid grid-cols-[repeat(auto-fill,minmax(9.5rem,1fr))]" : "flex flex-col"
1200
1204
  ),
1201
1205
  children: shown.map((skill) => /* @__PURE__ */ jsxRuntime.jsx(
1202
- chunkRB7GX2VT_cjs.SkillTile,
1206
+ chunkT5I4NRFP_cjs.SkillTile,
1203
1207
  {
1204
1208
  name: skill.title,
1205
1209
  testId: `skill-tile-${skill.slug}`,
1206
1210
  description: skill.description,
1207
- sourceLabel: skill.isShared ? `${chunkRB7GX2VT_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkRB7GX2VT_cjs.SKILL_SOURCE_LABELS[skill.source],
1211
+ sourceLabel: skill.isShared ? `${chunkT5I4NRFP_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkT5I4NRFP_cjs.SKILL_SOURCE_LABELS[skill.source],
1208
1212
  type: skill.type,
1209
1213
  icon,
1210
1214
  layout: view,
@@ -1239,7 +1243,7 @@ function ConnectedSkillsLibrary({
1239
1243
  }
1240
1244
  ),
1241
1245
  mode === "new" && /* @__PURE__ */ jsxRuntime.jsx(
1242
- chunkRB7GX2VT_cjs.SkillGenerateForm,
1246
+ chunkT5I4NRFP_cjs.SkillGenerateForm,
1243
1247
  {
1244
1248
  icon,
1245
1249
  onGenerate: (desc) => {
@@ -1266,11 +1270,11 @@ function ConnectedSkillsLibrary({
1266
1270
  ),
1267
1271
  mode === "add" && /* @__PURE__ */ jsxRuntime.jsx(ConnectedSkillUpload, { onDone: done }),
1268
1272
  mode === "detail" && current && /* @__PURE__ */ jsxRuntime.jsx(
1269
- chunkRB7GX2VT_cjs.SkillLibraryDetail,
1273
+ chunkT5I4NRFP_cjs.SkillLibraryDetail,
1270
1274
  {
1271
1275
  skill: current,
1272
1276
  icon,
1273
- instructions: current.docExtId ? currentText ? chunkRB7GX2VT_cjs.parseSkillFrontmatter(currentText, chunkRB7GX2VT_cjs.SKILL_MAIN_FILENAME).content : "" : current.workflow.run.kind === "prompt" ? current.workflow.run.promptTemplate : "",
1277
+ instructions: current.docExtId ? currentText ? chunkT5I4NRFP_cjs.parseSkillFrontmatter(currentText, chunkT5I4NRFP_cjs.SKILL_MAIN_FILENAME).content : "" : current.workflow.run.kind === "prompt" ? current.workflow.run.promptTemplate : "",
1274
1278
  isLoading: !!current.docExtId && textLoading,
1275
1279
  actions: {
1276
1280
  onRun: () => onRun(current.slug),
@@ -1305,7 +1309,7 @@ function SkillEditor({
1305
1309
  const [seeded, setSeeded] = react.useState(!isEditing);
1306
1310
  const [nameError, setNameError] = react.useState(null);
1307
1311
  if (isEditing && !seeded && text !== void 0) {
1308
- const parsed = chunkRB7GX2VT_cjs.parseSkillFrontmatter(text, chunkRB7GX2VT_cjs.SKILL_MAIN_FILENAME);
1312
+ const parsed = chunkT5I4NRFP_cjs.parseSkillFrontmatter(text, chunkT5I4NRFP_cjs.SKILL_MAIN_FILENAME);
1309
1313
  setDescription(parsed.description ?? "");
1310
1314
  setBody(parsed.content ?? "");
1311
1315
  setSeeded(true);
@@ -1319,15 +1323,15 @@ function SkillEditor({
1319
1323
  notify("Add a short description.", "error");
1320
1324
  return;
1321
1325
  }
1322
- const slug = chunkRB7GX2VT_cjs.skillSlug(name);
1326
+ const slug = chunkT5I4NRFP_cjs.skillSlug(name);
1323
1327
  try {
1324
- await onSave(slug, chunkRB7GX2VT_cjs.serializeSkill({ name: slug, description, body }), isEditing);
1328
+ await onSave(slug, chunkT5I4NRFP_cjs.serializeSkill({ name: slug, description, body }), isEditing);
1325
1329
  } catch (err) {
1326
1330
  notify(errorText(err, "Could not save the skill"), "error");
1327
1331
  }
1328
1332
  };
1329
1333
  return /* @__PURE__ */ jsxRuntime.jsx(
1330
- chunkRB7GX2VT_cjs.SkillEditForm,
1334
+ chunkT5I4NRFP_cjs.SkillEditForm,
1331
1335
  {
1332
1336
  name,
1333
1337
  onNameChange: setName,
@@ -1363,9 +1367,9 @@ function ConnectedAgentCreator({
1363
1367
  agent,
1364
1368
  initialName,
1365
1369
  onSaved,
1366
- capabilities = chunkRB7GX2VT_cjs.DEFAULT_AGENT_CAPABILITIES,
1367
- templates = chunkRB7GX2VT_cjs.DEFAULT_AGENT_TEMPLATES,
1368
- types = chunkRB7GX2VT_cjs.DEFAULT_AGENT_TYPES,
1370
+ capabilities = chunkT5I4NRFP_cjs.DEFAULT_AGENT_CAPABILITIES,
1371
+ templates = chunkT5I4NRFP_cjs.DEFAULT_AGENT_TEMPLATES,
1372
+ types = chunkT5I4NRFP_cjs.DEFAULT_AGENT_TYPES,
1369
1373
  canRevokeWorkspaces = false,
1370
1374
  labels
1371
1375
  }) {
@@ -1407,7 +1411,7 @@ function ConnectedAgentCreator({
1407
1411
  const initialValues = react.useMemo(
1408
1412
  () => ({
1409
1413
  name: agent?.given_name ?? initialName ?? "",
1410
- persona: isEdit ? chunkRB7GX2VT_cjs.stripPersonaPreamble(String(agents.PERSONA ?? "")) : "",
1414
+ persona: isEdit ? chunkT5I4NRFP_cjs.stripPersonaPreamble(String(agents.PERSONA ?? "")) : "",
1411
1415
  modelName: String(agents.AGENT_MODEL_NAME ?? ""),
1412
1416
  capabilities: Object.fromEntries(capabilities.map(({ key }) => [key, Boolean(agents[key])])),
1413
1417
  type: "builtin",
@@ -1426,7 +1430,7 @@ function ConnectedAgentCreator({
1426
1430
  try {
1427
1431
  let agentExtId = agent?.external_id ?? early?.id ?? "";
1428
1432
  if (!agentExtId) {
1429
- if (!chunkRB7GX2VT_cjs.isValidAgentName(values.name)) {
1433
+ if (!chunkT5I4NRFP_cjs.isValidAgentName(values.name)) {
1430
1434
  notify("Give the agent a name first.", "error");
1431
1435
  return;
1432
1436
  }
@@ -1462,7 +1466,7 @@ function ConnectedAgentCreator({
1462
1466
  title: `agent-${name}`,
1463
1467
  sections: {
1464
1468
  Agents: {
1465
- PERSONA: chunkRB7GX2VT_cjs.composePersona(name, values.persona),
1469
+ PERSONA: chunkT5I4NRFP_cjs.composePersona(name, values.persona),
1466
1470
  ...values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {},
1467
1471
  ...Object.fromEntries(capabilities.map(({ key }) => [key, !!values.capabilities[key]])),
1468
1472
  ENABLED_SKILLS: values.capabilities.SKILLS_ENABLED && skills.length ? skills : null,
@@ -1485,7 +1489,7 @@ function ConnectedAgentCreator({
1485
1489
  };
1486
1490
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1487
1491
  /* @__PURE__ */ jsxRuntime.jsx(
1488
- chunkRB7GX2VT_cjs.AgentCreator,
1492
+ chunkT5I4NRFP_cjs.AgentCreator,
1489
1493
  {
1490
1494
  open: ready,
1491
1495
  onOpenChange,
@@ -1501,11 +1505,11 @@ function ConnectedAgentCreator({
1501
1505
  ) : void 0,
1502
1506
  revokingWorkspaceId: revokeAccess.isPending ? revokeAccess.variables?.workspaceId : void 0,
1503
1507
  avatar: (values) => /* @__PURE__ */ jsxRuntime.jsx(
1504
- chunkRB7GX2VT_cjs.AgentAvatarField,
1508
+ chunkT5I4NRFP_cjs.AgentAvatarField,
1505
1509
  {
1506
1510
  picture,
1507
1511
  isBusy: avatarBusy,
1508
- canGenerate: isEdit || chunkRB7GX2VT_cjs.isValidAgentName(values.name),
1512
+ canGenerate: isEdit || chunkT5I4NRFP_cjs.isValidAgentName(values.name),
1509
1513
  onGenerate: () => handleGenerateAvatar(values)
1510
1514
  }
1511
1515
  ),
@@ -1557,7 +1561,7 @@ function ConnectedAgentCreator({
1557
1561
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: "Connect your agent" }),
1558
1562
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: "This key is shown once. Run the script on the machine that will host the agent." })
1559
1563
  ] }),
1560
- connect && /* @__PURE__ */ jsxRuntime.jsx(chunkRB7GX2VT_cjs.AgentConnectInstructions, { email: connect.email, signingKey: connect.signingKey })
1564
+ connect && /* @__PURE__ */ jsxRuntime.jsx(chunkT5I4NRFP_cjs.AgentConnectInstructions, { email: connect.email, signingKey: connect.signingKey })
1561
1565
  ]
1562
1566
  }
1563
1567
  ) })
@@ -1594,7 +1598,7 @@ function ConnectedWorkflowHistory({
1594
1598
  const { openConversation } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
1595
1599
  const { data: runs = [], isLoading } = react$1.useWorkflowRuns(workflow?.external_id);
1596
1600
  return /* @__PURE__ */ jsxRuntime.jsx(
1597
- chunkRB7GX2VT_cjs.TaskRunsDialog,
1601
+ chunkT5I4NRFP_cjs.TaskRunsDialog,
1598
1602
  {
1599
1603
  inline,
1600
1604
  hideHeader,
@@ -1630,14 +1634,14 @@ function ConnectedTaskActivityDialog({
1630
1634
  const activity = react$1.useConversationActivity(conversationId, { live });
1631
1635
  const { data: agents = [] } = react$1.useAgents();
1632
1636
  const { userId } = chunkGFNELPDP_cjs.useConnectedWorkspace();
1633
- const { members } = chunkMFMASSEO_cjs.useConnectedWorkspaceRole();
1637
+ const { members } = chunkAINU3EJ6_cjs.useConnectedWorkspaceRole();
1634
1638
  const renderPerson = react.useCallback(
1635
1639
  (id) => {
1636
1640
  const isMe = !!id && id === userId;
1637
1641
  const member = members.find((m) => m.user.external_id === id)?.user;
1638
1642
  const name = member && [member.given_name, member.family_name].filter(Boolean).join(" ") || member?.email;
1639
1643
  const person = { id, label: isMe ? "You" : name || "Someone", isMe };
1640
- return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkLPYEUD2D_cjs.PersonPill, { person });
1644
+ return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkIL3WB3YX_cjs.PersonPill, { person });
1641
1645
  },
1642
1646
  [renderTaskPerson, userId, members]
1643
1647
  );
@@ -1646,7 +1650,7 @@ function ConnectedTaskActivityDialog({
1646
1650
  [agents]
1647
1651
  );
1648
1652
  return /* @__PURE__ */ jsxRuntime.jsx(
1649
- chunkRB7GX2VT_cjs.TaskActivityDialog,
1653
+ chunkT5I4NRFP_cjs.TaskActivityDialog,
1650
1654
  {
1651
1655
  open: true,
1652
1656
  onOpenChange: (open) => !open && onClose(),
@@ -1792,7 +1796,7 @@ function useWorkflowThread(workflow, options = {}) {
1792
1796
  );
1793
1797
  const conversation = conversations.data?.find((c) => c.external_id === threadId);
1794
1798
  const steps = react.useMemo(
1795
- () => chunkJSTKEZBS_cjs.workflowSteps(workflow).length > 0 ? chunkJSTKEZBS_cjs.workflowSteps(workflow) : chunkRB7GX2VT_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
1799
+ () => chunkJSTKEZBS_cjs.workflowSteps(workflow).length > 0 ? chunkJSTKEZBS_cjs.workflowSteps(workflow) : chunkT5I4NRFP_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
1796
1800
  [workflow, conversation?.plan?.steps]
1797
1801
  );
1798
1802
  const activity = react$1.useConversationActivity(threadId, { live: !!threadId });
@@ -1852,7 +1856,7 @@ function useWorkflowThread(workflow, options = {}) {
1852
1856
  criteria: [],
1853
1857
  max_passes: 3,
1854
1858
  documents: [],
1855
- steps: chunkRB7GX2VT_cjs.toPlanSteps(workflow, {
1859
+ steps: chunkT5I4NRFP_cjs.toPlanSteps(workflow, {
1856
1860
  inputs: values,
1857
1861
  resolveWorkflow: options.resolveWorkflow,
1858
1862
  compose: options.compose
@@ -1939,7 +1943,7 @@ function useWorkflowThread(workflow, options = {}) {
1939
1943
  const anyRunning = Object.values(states).some((s) => s.status === "running");
1940
1944
  const needsStart = !threadId || idle && !anyRunning;
1941
1945
  const runError = idle ? conversation?.last_error ?? null : null;
1942
- const view = chunkRB7GX2VT_cjs.useWorkflowView({
1946
+ const view = chunkT5I4NRFP_cjs.useWorkflowView({
1943
1947
  steps,
1944
1948
  states,
1945
1949
  inputs,
@@ -2107,7 +2111,7 @@ function WorkflowWordDialog({
2107
2111
  title: title ?? labels.wordTitle,
2108
2112
  size: "xl",
2109
2113
  testId: "workflow-word-dialog",
2110
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkMFMASSEO_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2114
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkAINU3EJ6_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2111
2115
  }
2112
2116
  );
2113
2117
  }
@@ -2416,7 +2420,7 @@ function ConnectedWorkflowRunner({
2416
2420
  );
2417
2421
  };
2418
2422
  const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
2419
- chunkRB7GX2VT_cjs.WorkflowRunner,
2423
+ chunkT5I4NRFP_cjs.WorkflowRunner,
2420
2424
  {
2421
2425
  people,
2422
2426
  ...runnerProps,
@@ -2462,7 +2466,7 @@ function ConnectedWorkflowRunner({
2462
2466
  ) }),
2463
2467
  inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2464
2468
  /* @__PURE__ */ jsxRuntime.jsx(
2465
- chunkRB7GX2VT_cjs.WorkflowStepBar,
2469
+ chunkT5I4NRFP_cjs.WorkflowStepBar,
2466
2470
  {
2467
2471
  run: view,
2468
2472
  levels: chunkJSTKEZBS_cjs.stepLevels(view.steps),
@@ -2663,7 +2667,7 @@ function ConnectedTagTable({
2663
2667
  const fail = (e) => setError(e instanceof Error ? e.message : String(e));
2664
2668
  const snapshot = (data) => {
2665
2669
  const title = exportTitle ?? KIND_TITLES[kind];
2666
- const bytes = chunkC3CGJK7A_cjs.tagTableDocx(data, {
2670
+ const bytes = chunkLTU35TQN_cjs.tagTableDocx(data, {
2667
2671
  title,
2668
2672
  nameOf: (id) => people.find((p) => p.value === id)?.label
2669
2673
  });
@@ -2673,7 +2677,7 @@ function ConnectedTagTable({
2673
2677
  };
2674
2678
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
2675
2679
  /* @__PURE__ */ jsxRuntime.jsx(
2676
- chunkC3CGJK7A_cjs.TagTable,
2680
+ chunkLTU35TQN_cjs.TagTable,
2677
2681
  {
2678
2682
  ...props,
2679
2683
  table,
@@ -2820,13 +2824,13 @@ function ConnectedProfileCard({
2820
2824
  }
2821
2825
  });
2822
2826
  const display = profile?.fullName || "Unnamed";
2823
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
2827
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
2824
2828
  /* @__PURE__ */ jsxRuntime.jsx(
2825
- chunkU73KPFYH_cjs.ProfileCard,
2829
+ chunkU37AYUPI_cjs.ProfileCard,
2826
2830
  {
2827
2831
  avatar: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2828
2832
  /* @__PURE__ */ jsxRuntime.jsx(
2829
- chunkU73KPFYH_cjs.AvatarPicker,
2833
+ chunkU37AYUPI_cjs.AvatarPicker,
2830
2834
  {
2831
2835
  pictureUrl: profile?.picture,
2832
2836
  initials: chunkKDG6FER6_cjs.initials(display),
@@ -2873,9 +2877,9 @@ function ConnectedIdentityVerification({
2873
2877
  onNameAccepted: () => notify("Name updated to match your ID", "success")
2874
2878
  });
2875
2879
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2876
- /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
2880
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
2877
2881
  /* @__PURE__ */ jsxRuntime.jsx(
2878
- chunkU73KPFYH_cjs.IdentityVerificationDialog,
2882
+ chunkU37AYUPI_cjs.IdentityVerificationDialog,
2879
2883
  {
2880
2884
  flow,
2881
2885
  accountName: profile?.fullName ?? "",
@@ -2888,7 +2892,7 @@ function ConnectedIdentityVerification({
2888
2892
  function ConnectedRequireVerified({ children, labels }) {
2889
2893
  const { data: profile } = react$1.useProfile();
2890
2894
  const flow = react$1.useIdentityVerification();
2891
- return /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
2895
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
2892
2896
  }
2893
2897
  function defaultUnmetPasswordRequirement(password) {
2894
2898
  if (password.length < 8) return "Minimum 8 characters";
@@ -2921,7 +2925,7 @@ function ConnectedPasswordChangeDialog({
2921
2925
  onRecoveryComplete
2922
2926
  });
2923
2927
  return /* @__PURE__ */ jsxRuntime.jsx(
2924
- chunkU73KPFYH_cjs.PasswordChangeDialog,
2928
+ chunkU37AYUPI_cjs.PasswordChangeDialog,
2925
2929
  {
2926
2930
  open,
2927
2931
  onClose: form.onCancel,
@@ -2947,10 +2951,10 @@ function ConnectedSecuritySection({
2947
2951
  children
2948
2952
  }) {
2949
2953
  const [open, setOpen] = react.useState(false);
2950
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), title: "Security", children: [
2951
- /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsCard, { padding: "sm", children: [
2954
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), title: "Security", children: [
2955
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsCard, { padding: "sm", children: [
2952
2956
  /* @__PURE__ */ jsxRuntime.jsx(
2953
- chunkU73KPFYH_cjs.SettingsActionRow,
2957
+ chunkU37AYUPI_cjs.SettingsActionRow,
2954
2958
  {
2955
2959
  title: "Change password",
2956
2960
  description: "Used to sign in and to unlock your account key. Changing it keeps everything readable and re-encrypts nothing.",
@@ -2971,23 +2975,23 @@ function ConnectedSecuritySection({
2971
2975
  ] });
2972
2976
  }
2973
2977
  function ConnectedNotificationPreferences({
2974
- categories = chunkU73KPFYH_cjs.EMAIL_NOTIFICATION_CATEGORIES,
2978
+ categories = chunkU37AYUPI_cjs.EMAIL_NOTIFICATION_CATEGORIES,
2975
2979
  title = "Notifications"
2976
2980
  }) {
2977
2981
  const keys = react.useMemo(
2978
- () => categories === chunkU73KPFYH_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkU73KPFYH_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
2982
+ () => categories === chunkU37AYUPI_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkU37AYUPI_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
2979
2983
  [categories]
2980
2984
  );
2981
2985
  const prefs = react$1.useNotificationPreferences(keys);
2982
- return /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
2983
- chunkU73KPFYH_cjs.NotificationCategoryList,
2986
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
2987
+ chunkU37AYUPI_cjs.NotificationCategoryList,
2984
2988
  {
2985
2989
  masterId: "emailNotifications",
2986
2990
  masterTitle: "Email Notifications",
2987
2991
  masterDescription: "Email me about activity when I\u2019m away",
2988
2992
  masterChecked: prefs.masterChecked,
2989
2993
  onMasterChange: prefs.setAll,
2990
- categories: chunkU73KPFYH_cjs.toNotificationCategories(prefs.checked, categories),
2994
+ categories: chunkU37AYUPI_cjs.toNotificationCategories(prefs.checked, categories),
2991
2995
  onCategoryChange: prefs.setCategory
2992
2996
  }
2993
2997
  ) }) });
@@ -3000,14 +3004,14 @@ function ConnectedSessionsRow({
3000
3004
  const sessions = react$1.useSessions({ enabled: open });
3001
3005
  const currentSessionId = react$1.useCurrentSessionId();
3002
3006
  const terminate = react$1.useTerminateSession();
3003
- const views = chunkU73KPFYH_cjs.toActiveSessionViews(sessions.data ?? [], {
3007
+ const views = chunkU37AYUPI_cjs.toActiveSessionViews(sessions.data ?? [], {
3004
3008
  currentSessionId,
3005
3009
  terminatingId: terminate.isPending ? terminate.variables : null,
3006
3010
  renderIcon: renderSessionIcon
3007
3011
  });
3008
3012
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3009
3013
  /* @__PURE__ */ jsxRuntime.jsx(
3010
- chunkU73KPFYH_cjs.SettingsRow,
3014
+ chunkU37AYUPI_cjs.SettingsRow,
3011
3015
  {
3012
3016
  label: "Active sessions",
3013
3017
  description: "Devices and agents currently signed in to your account.",
@@ -3029,7 +3033,7 @@ function ConnectedSessionsRow({
3029
3033
  }
3030
3034
  ),
3031
3035
  /* @__PURE__ */ jsxRuntime.jsx(
3032
- chunkU73KPFYH_cjs.ActiveSessionsDialog,
3036
+ chunkU37AYUPI_cjs.ActiveSessionsDialog,
3033
3037
  {
3034
3038
  open,
3035
3039
  onOpenChange: setOpen,
@@ -3071,7 +3075,7 @@ function ConnectedLogoutDialog({
3071
3075
  signOut.mutate({ everywhere, reason: "manual" });
3072
3076
  };
3073
3077
  return /* @__PURE__ */ jsxRuntime.jsx(
3074
- chunkU73KPFYH_cjs.LogoutDialog,
3078
+ chunkU37AYUPI_cjs.LogoutDialog,
3075
3079
  {
3076
3080
  open,
3077
3081
  onClose,
@@ -3079,7 +3083,7 @@ function ConnectedLogoutDialog({
3079
3083
  onLogoutAll: () => void run(true),
3080
3084
  canLogoutAll,
3081
3085
  isOnline,
3082
- sessions: chunkU73KPFYH_cjs.toLogoutSessionViews(sessions.data ?? []),
3086
+ sessions: chunkU37AYUPI_cjs.toLogoutSessionViews(sessions.data ?? []),
3083
3087
  renderSessionIcon
3084
3088
  }
3085
3089
  );
@@ -3101,7 +3105,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
3101
3105
  });
3102
3106
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3103
3107
  /* @__PURE__ */ jsxRuntime.jsx(
3104
- chunkU73KPFYH_cjs.SettingsDangerZone,
3108
+ chunkU37AYUPI_cjs.SettingsDangerZone,
3105
3109
  {
3106
3110
  isOpen: zoneOpen,
3107
3111
  onToggle: () => setZoneOpen((o) => !o),
@@ -3121,12 +3125,12 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
3121
3125
  }
3122
3126
  ),
3123
3127
  /* @__PURE__ */ jsxRuntime.jsx(
3124
- chunkU73KPFYH_cjs.DeleteAccountDialog,
3128
+ chunkU37AYUPI_cjs.DeleteAccountDialog,
3125
3129
  {
3126
3130
  open: dialogOpen,
3127
3131
  onClose: flow.onClose,
3128
3132
  step: flow.step,
3129
- blockers: chunkU73KPFYH_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
3133
+ blockers: chunkU37AYUPI_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
3130
3134
  onContinue: flow.onContinue,
3131
3135
  onBack: flow.onBack,
3132
3136
  userEmail,
@@ -3141,7 +3145,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
3141
3145
  function ServerConnectionRow({ onRefresh, ...status }) {
3142
3146
  const { runtimeConfig } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
3143
3147
  const [isRefreshing, setIsRefreshing] = react.useState(false);
3144
- const view = chunkU73KPFYH_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
3148
+ const view = chunkU37AYUPI_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
3145
3149
  const refresh = async () => {
3146
3150
  setIsRefreshing(true);
3147
3151
  try {
@@ -3150,8 +3154,8 @@ function ServerConnectionRow({ onRefresh, ...status }) {
3150
3154
  setIsRefreshing(false);
3151
3155
  }
3152
3156
  };
3153
- return /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsRow, { label: "Server connection", description: view.description, children: /* @__PURE__ */ jsxRuntime.jsx(
3154
- chunkU73KPFYH_cjs.ServerConnectionButton,
3157
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsRow, { label: "Server connection", description: view.description, children: /* @__PURE__ */ jsxRuntime.jsx(
3158
+ chunkU37AYUPI_cjs.ServerConnectionButton,
3155
3159
  {
3156
3160
  state: view.state,
3157
3161
  label: view.label,
@@ -3173,7 +3177,7 @@ function ConnectedAccountSettings({
3173
3177
  renderSubscriptionLink
3174
3178
  }) {
3175
3179
  const [logoutOpen, setLogoutOpen] = react.useState(false);
3176
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsPanel, { className: "max-w-2xl", children: [
3180
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsPanel, { className: "max-w-2xl", children: [
3177
3181
  /* @__PURE__ */ jsxRuntime.jsx(ConnectedProfileCard, { avatarClassName, children: /* @__PURE__ */ jsxRuntime.jsx(
3178
3182
  ConnectedIdentityVerification,
3179
3183
  {
@@ -3183,10 +3187,10 @@ function ConnectedAccountSettings({
3183
3187
  ) }),
3184
3188
  afterProfile,
3185
3189
  /* @__PURE__ */ jsxRuntime.jsx(ConnectedSecuritySection, { getUnmetRequirement: getUnmetPasswordRequirement, children: securityRows }),
3186
- /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wifi, {}), title: "Session", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsCard, { children: [
3190
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wifi, {}), title: "Session", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsCard, { children: [
3187
3191
  connection && /* @__PURE__ */ jsxRuntime.jsx(ServerConnectionRow, { ...connection }),
3188
3192
  /* @__PURE__ */ jsxRuntime.jsx(ConnectedSessionsRow, { renderSessionIcon }),
3189
- /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsRow, { label: "Logout", description: "Sign out of your account on this device.", children: /* @__PURE__ */ jsxRuntime.jsxs(
3193
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsRow, { label: "Logout", description: "Sign out of your account on this device.", children: /* @__PURE__ */ jsxRuntime.jsxs(
3190
3194
  ui.Button,
3191
3195
  {
3192
3196
  type: "button",
@@ -3468,10 +3472,10 @@ function ConnectedPrivacySettings({
3468
3472
  const update = react$1.useUpdateUserSettings();
3469
3473
  const hideOnlineStatus = settings?.hide_online_status ?? false;
3470
3474
  const dismissedTips = settings?.dismissed_tips ?? [];
3471
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsPanel, { className: "max-w-2xl", children: [
3472
- /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsSection, { title: "Privacy and tips", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkU73KPFYH_cjs.SettingsCard, { children: [
3475
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsPanel, { className: "max-w-2xl", children: [
3476
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsSection, { title: "Privacy and tips", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsCard, { children: [
3473
3477
  /* @__PURE__ */ jsxRuntime.jsx(
3474
- chunkU73KPFYH_cjs.SettingsRow,
3478
+ chunkU37AYUPI_cjs.SettingsRow,
3475
3479
  {
3476
3480
  label: "Show Online Status",
3477
3481
  labelFor: "showOnlineStatus",
@@ -3489,7 +3493,7 @@ function ConnectedPrivacySettings({
3489
3493
  ),
3490
3494
  rows,
3491
3495
  showTipsReset && /* @__PURE__ */ jsxRuntime.jsx(
3492
- chunkU73KPFYH_cjs.SettingsRow,
3496
+ chunkU37AYUPI_cjs.SettingsRow,
3493
3497
  {
3494
3498
  label: "Hidden tips",
3495
3499
  description: "Restore any Smart Tips you\u2019ve hidden with \u201Cdon\u2019t show again\u201D.",
@@ -3553,13 +3557,13 @@ var COLUMNS = [
3553
3557
  flex: 1,
3554
3558
  minWidth: 120,
3555
3559
  cellRenderer: (params) => isStandard(params.data) ? /* @__PURE__ */ jsxRuntime.jsx(
3556
- chunkU73KPFYH_cjs.ModelProviderLabel,
3560
+ chunkU37AYUPI_cjs.ModelProviderLabel,
3557
3561
  {
3558
3562
  logo: /* @__PURE__ */ jsxRuntime.jsx("img", { src: "/favicon.svg", alt: "ARBI", className: "size-3.5 flex-shrink-0 rounded-sm" }),
3559
3563
  children: "ARBI CITY"
3560
3564
  }
3561
3565
  ) : /* @__PURE__ */ jsxRuntime.jsx(
3562
- chunkU73KPFYH_cjs.ModelProviderLabel,
3566
+ chunkU37AYUPI_cjs.ModelProviderLabel,
3563
3567
  {
3564
3568
  logo: /* @__PURE__ */ jsxRuntime.jsx(react$1.ProviderIcon, { modelName: params.data?.model_name, provider: params.value, size: 14 }),
3565
3569
  children: PROVIDER_NAMES[params.value ?? ""] || params.value || "\u2014"
@@ -3635,8 +3639,8 @@ function ConnectedPremiumModels() {
3635
3639
  [save]
3636
3640
  );
3637
3641
  if (premiumModels.length === 0) return null;
3638
- return /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsPanel, { className: "max-w-2xl space-y-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsSection, { title: "Premium models", children: /* @__PURE__ */ jsxRuntime.jsx(chunkU73KPFYH_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
3639
- chunkU73KPFYH_cjs.PremiumModelsFrame,
3642
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsPanel, { className: "max-w-2xl space-y-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsSection, { title: "Premium models", children: /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
3643
+ chunkU37AYUPI_cjs.PremiumModelsFrame,
3640
3644
  {
3641
3645
  enabled: premiumModel !== "",
3642
3646
  onEnabledChange: (enabled) => {
@@ -3660,11 +3664,269 @@ function ConnectedPremiumModels() {
3660
3664
  }
3661
3665
  ) }) }) });
3662
3666
  }
3667
+ var FAMILY_PRESENTATION = {
3668
+ microsoft: {
3669
+ name: "Microsoft",
3670
+ description: "One Microsoft connection covers both Outlook (email) and OneDrive (files) \u2014 import documents from either into a workspace.",
3671
+ descriptionWithSharePoint: "One Microsoft connection covers Outlook (email), OneDrive and SharePoint (files) \u2014 import documents from any of them into a workspace."
3672
+ },
3673
+ gmail: {
3674
+ name: "Google",
3675
+ description: "One Google connection covers both Gmail (email) and Google Drive (files) \u2014 import documents from either into a workspace."
3676
+ }
3677
+ };
3678
+ var EMAIL_AND_DRIVE_SUBTITLE = [
3679
+ "Connect Microsoft or Google once \u2014 a single connection lets you import documents",
3680
+ "from both their email (Outlook / Gmail) and their cloud storage (OneDrive / Google Drive)",
3681
+ "into a workspace."
3682
+ ].join(" ");
3683
+ function toConnectionCardView(catalog, userConnector, options) {
3684
+ const isConnected = !!userConnector;
3685
+ const presentation = FAMILY_PRESENTATION[catalog.vendor_key];
3686
+ const description = (options.sharePointVisible ? presentation?.descriptionWithSharePoint : void 0) ?? presentation?.description ?? catalog.description;
3687
+ return {
3688
+ id: catalog.vendor_key,
3689
+ title: presentation?.name ?? catalog.display_name,
3690
+ description: description ?? void 0,
3691
+ iconUrl: catalog.icon_url,
3692
+ iconAlt: catalog.display_name,
3693
+ status: isConnected ? "connected" : catalog.requires_per_user_auth ? "available" : "organisation",
3694
+ justConnected: options.justConnected,
3695
+ identity: userConnector?.vendor_user_identity,
3696
+ warning: isConnected && userConnector?.token_scheme === "env" ? "Reconnect to upgrade security \u2014 your access token isn't yet bound to your session." : void 0,
3697
+ note: !catalog.requires_per_user_auth && !isConnected ? "Enabled for your organisation \u2014 no personal login required" : void 0,
3698
+ // Mailbox connectors show a read-only notice when native mail writes are disabled; sync is
3699
+ // configured per-workspace from the Add-files flow, not on this tab.
3700
+ showReadOnlyNotice: react$1.isMailboxSyncVendor(catalog.vendor_key) && !options.mailWriteEnabled,
3701
+ isDisconnecting: options.isDisconnecting
3702
+ };
3703
+ }
3704
+ function ConnectedAppsSettings({
3705
+ justConnectedVendor = null,
3706
+ onJustConnectedSeen
3707
+ }) {
3708
+ const arbi = react$1.useArbi();
3709
+ const { notify, navigate } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
3710
+ const { data: mailPolicy } = react$1.useMailPolicy();
3711
+ const isVendorVisible = react$1.useConnectorVendorVisibility();
3712
+ react.useEffect(() => {
3713
+ if (!justConnectedVendor || !onJustConnectedSeen) return;
3714
+ const timer = setTimeout(onJustConnectedSeen, 4e3);
3715
+ return () => clearTimeout(timer);
3716
+ }, [justConnectedVendor, onJustConnectedSeen]);
3717
+ react.useEffect(() => {
3718
+ if (!justConnectedVendor) return;
3719
+ void arbi.connectors.bridgeTokens({ vendor: justConnectedVendor });
3720
+ }, [justConnectedVendor, arbi]);
3721
+ const {
3722
+ data: catalog = [],
3723
+ isLoading: catalogLoading,
3724
+ error: catalogError
3725
+ } = react$1.useConnectorCatalog();
3726
+ const { data: myConnectors = [], isLoading: myLoading } = react$1.useMyConnectors();
3727
+ const disconnect = react$1.useDisconnectConnector();
3728
+ const {
3729
+ data: slackConnection,
3730
+ isLoading: slackLoading,
3731
+ isPending: slackStatusPendingQuery,
3732
+ isFetching: slackStatusFetching,
3733
+ isError: slackStatusError,
3734
+ refetch: refetchSlackConnection
3735
+ } = react$1.useSlackConnection();
3736
+ const slackStatusPending = slackStatusPendingQuery || slackStatusFetching || justConnectedVendor === "slack" && !slackConnection?.connected && !slackStatusError;
3737
+ const disconnectSlack = react$1.useDisconnectSlack();
3738
+ const { data: agents = [] } = react$1.useAgents();
3739
+ const [slackAgentId, setSlackAgentId] = react.useState("");
3740
+ const { data: slackAgentWorkspaces = [], isLoading: slackAgentWorkspacesLoading } = react$1.useAgentWorkspaces(slackAgentId, { enabled: Boolean(slackAgentId) });
3741
+ const [slackAuthorizing, setSlackAuthorizing] = react.useState(false);
3742
+ const [slackAgentEditorOpen, setSlackAgentEditorOpen] = react.useState(false);
3743
+ const isLoading = catalogLoading || myLoading;
3744
+ const connectedByVendor = Object.fromEntries(myConnectors.map((uc) => [uc.vendor_key, uc]));
3745
+ const handleConnect = async (vendorKey) => {
3746
+ navigate(await arbi.connectors.authorize(vendorKey));
3747
+ };
3748
+ const handleSlackConnect = async () => {
3749
+ if (!slackAgentId) return;
3750
+ setSlackAuthorizing(true);
3751
+ try {
3752
+ navigate(await arbi.connectors.slack.authorize(slackAgentId));
3753
+ } catch (error) {
3754
+ notify(
3755
+ error instanceof Error ? error.message : "Could not start Slack authorization",
3756
+ "error"
3757
+ );
3758
+ setSlackAuthorizing(false);
3759
+ }
3760
+ };
3761
+ const handleDisconnect = (vendorKey) => {
3762
+ disconnect.mutate({ vendorKey });
3763
+ if (vendorKey === "microsoft") {
3764
+ for (const spVendor of react$1.SHAREPOINT_VENDORS) {
3765
+ if (connectedByVendor[spVendor]) {
3766
+ disconnect.mutate({ vendorKey: spVendor });
3767
+ }
3768
+ }
3769
+ }
3770
+ };
3771
+ if (isLoading) {
3772
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
3773
+ }
3774
+ if (catalogError) {
3775
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
3776
+ }
3777
+ const visibleCatalog = catalog.filter((c) => isVendorVisible(c.vendor_key));
3778
+ const sharePointVisible = isVendorVisible("microsoft_sharepoint");
3779
+ const emailCatalog = visibleCatalog.filter((c) => react$1.isMailboxSyncVendor(c.vendor_key));
3780
+ const mcpCatalog = visibleCatalog.filter(
3781
+ (c) => !react$1.isMailboxSyncVendor(c.vendor_key) && !react$1.isSharePointVendor(c.vendor_key)
3782
+ );
3783
+ const renderCard = (entry) => /* @__PURE__ */ jsxRuntime.jsx(
3784
+ chunkU37AYUPI_cjs.ConnectionCard,
3785
+ {
3786
+ connection: toConnectionCardView(entry, connectedByVendor[entry.vendor_key], {
3787
+ isDisconnecting: disconnect.isPending && disconnect.variables?.vendorKey === entry.vendor_key,
3788
+ sharePointVisible,
3789
+ mailWriteEnabled: mailPolicy?.enabled_providers.includes(entry.vendor_key) ?? false,
3790
+ // A `?connected=microsoft_sharepoint` return has no card of its own — alias
3791
+ // it to the Microsoft family card so its "Just connected" badge still lights.
3792
+ justConnected: justConnectedVendor === entry.vendor_key || entry.vendor_key === "microsoft" && react$1.isSharePointVendor(justConnectedVendor ?? "")
3793
+ }),
3794
+ onConnect: handleConnect,
3795
+ onDisconnect: handleDisconnect
3796
+ },
3797
+ entry.vendor_key
3798
+ );
3799
+ const renderGroup = (title, subtitle, icon2, entries) => {
3800
+ if (entries.length === 0) return null;
3801
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsSection, { icon: icon2, title, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsCard, { className: "space-y-3", children: [
3802
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: subtitle }),
3803
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: entries.map(renderCard) })
3804
+ ] }) });
3805
+ };
3806
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SettingsPanel, { className: "max-w-2xl", children: [
3807
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-border bg-card px-5 py-4", children: [
3808
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
3809
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-border bg-background text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, { className: "h-5 w-5" }) }),
3810
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
3811
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-heading text-sm font-semibold text-foreground", children: "Slack" }),
3812
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-sm text-muted-foreground", children: "Connect Slack to an existing ARBI agent. The agent uses its configured default workspace." }),
3813
+ slackConnection?.connected && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-1 text-xs text-muted-foreground", children: [
3814
+ "Connected to ",
3815
+ slackConnection.agent_name
3816
+ ] })
3817
+ ] }),
3818
+ slackConnection?.connected ? /* @__PURE__ */ jsxRuntime.jsxs(
3819
+ ui.Button,
3820
+ {
3821
+ variant: "outline",
3822
+ size: "sm",
3823
+ onClick: () => disconnectSlack.mutate(),
3824
+ disabled: disconnectSlack.isPending,
3825
+ className: "text-destructive hover:bg-destructive/10 hover:text-destructive",
3826
+ children: [
3827
+ disconnectSlack.isPending ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" }) : null,
3828
+ "Disconnect"
3829
+ ]
3830
+ }
3831
+ ) : slackStatusPending ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Badge, { variant: "outline", className: "gap-1.5 text-muted-foreground", children: [
3832
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "h-3 w-3 animate-spin" }),
3833
+ "Pending"
3834
+ ] }) : slackStatusError ? /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", size: "sm", onClick: () => void refetchSlackConnection(), children: "Retry status check" }) : slackConnection?.configured ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "outline", className: "text-muted-foreground", children: "Not connected" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "outline", className: "text-muted-foreground", children: "Unavailable" })
3835
+ ] }),
3836
+ !slackConnection?.connected && !slackStatusPending && /* @__PURE__ */ jsxRuntime.jsxs(
3837
+ "div",
3838
+ {
3839
+ className: "mt-4 flex flex-wrap items-end gap-3 border-t border-border/60 pt-4",
3840
+ "data-testid": "slack-agent-setup",
3841
+ children: [
3842
+ /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "min-w-56 flex-1 space-y-1.5", children: [
3843
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: "ARBI agent" }),
3844
+ /* @__PURE__ */ jsxRuntime.jsxs(
3845
+ "select",
3846
+ {
3847
+ className: "h-10 w-full rounded-md border border-input bg-background px-3 text-sm pointer-coarse:h-11",
3848
+ value: slackAgentId,
3849
+ onChange: (event) => setSlackAgentId(event.target.value),
3850
+ children: [
3851
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", children: "Choose an agent" }),
3852
+ agents.map((agent) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: agent.external_id, children: agent.given_name || agent.email }, agent.external_id))
3853
+ ]
3854
+ }
3855
+ )
3856
+ ] }),
3857
+ /* @__PURE__ */ jsxRuntime.jsx(
3858
+ ui.Button,
3859
+ {
3860
+ variant: "outline",
3861
+ size: "sm",
3862
+ onClick: () => setSlackAgentEditorOpen(true),
3863
+ disabled: slackLoading || slackAuthorizing,
3864
+ children: "Create Slack agent"
3865
+ }
3866
+ ),
3867
+ /* @__PURE__ */ jsxRuntime.jsxs(
3868
+ ui.Button,
3869
+ {
3870
+ size: "sm",
3871
+ onClick: () => void handleSlackConnect(),
3872
+ disabled: !slackConnection?.configured || !slackAgentId || slackLoading || slackAuthorizing,
3873
+ children: [
3874
+ slackAuthorizing ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "mr-1.5 h-3.5 w-3.5 animate-spin" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { className: "mr-1.5 h-3.5 w-3.5" }),
3875
+ slackAuthorizing ? "Starting Slack authorization\u2026" : "Connect to Slack"
3876
+ ]
3877
+ }
3878
+ ),
3879
+ slackAgentId && /* @__PURE__ */ jsxRuntime.jsxs(
3880
+ "div",
3881
+ {
3882
+ className: "w-full rounded-md bg-muted/40 px-3 py-2 text-xs",
3883
+ "data-testid": "slack-agent-workspaces",
3884
+ children: [
3885
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium text-foreground", children: "Agent workspace access" }),
3886
+ slackAgentWorkspacesLoading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-muted-foreground", children: "Loading access\u2026" }) : slackAgentWorkspaces.length ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-1 space-y-1", children: slackAgentWorkspaces.map((workspace) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex flex-wrap gap-x-2", children: [
3887
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: workspace.name }),
3888
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: workspace.role }),
3889
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: workspace.permanent ? "Standing access" : "Temporary access" }),
3890
+ workspace.is_default && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: "Slack default" })
3891
+ ] }, workspace.workspace_ext_id)) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-muted-foreground", children: "No workspace access. Share a workspace with this agent in that workspace\u2019s Members settings." })
3892
+ ]
3893
+ }
3894
+ ),
3895
+ slackStatusError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "w-full text-xs text-muted-foreground", children: "ARBI could not check Slack availability. Retry the status check above before connecting." }) : !slackConnection?.configured ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "w-full text-xs text-muted-foreground", children: "Slack is unavailable because this ARBI deployment has not configured its Slack app credentials. You can still create an agent and set its workspace access; an administrator must configure Slack before connecting." }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "w-full text-xs text-muted-foreground", children: "Slack DMs wake this agent and receive replies there. It uses the marked default workspace; standing access is required." })
3896
+ ]
3897
+ }
3898
+ ),
3899
+ /* @__PURE__ */ jsxRuntime.jsx(
3900
+ ConnectedAgentCreator,
3901
+ {
3902
+ open: slackAgentEditorOpen,
3903
+ onOpenChange: setSlackAgentEditorOpen,
3904
+ initialName: "SlackAssistant",
3905
+ onSaved: (agentExtId) => {
3906
+ setSlackAgentId(agentExtId);
3907
+ setSlackAgentEditorOpen(false);
3908
+ }
3909
+ }
3910
+ )
3911
+ ] }),
3912
+ catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3913
+ renderGroup("Email & Drive", EMAIL_AND_DRIVE_SUBTITLE, /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, {}), emailCatalog),
3914
+ renderGroup(
3915
+ "Apps & Integrations (MCP)",
3916
+ "Connect your legal tools so the ARBI agent can search them live during a conversation.",
3917
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlugZap, {}),
3918
+ mcpCatalog
3919
+ )
3920
+ ] }),
3921
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-1 text-xs text-muted-foreground", children: "ARBI requests only the minimum permissions needed. Your credentials are encrypted and never shared. You can disconnect at any time." })
3922
+ ] });
3923
+ }
3663
3924
  var SETTINGS_SECTION_IDS = {
3664
3925
  account: "account",
3665
3926
  mail: "mail",
3666
3927
  privacy: "privacy",
3667
- chat: "chat"
3928
+ chat: "chat",
3929
+ connectedApps: "connected-apps"
3668
3930
  };
3669
3931
  function accountSettingsSection(props) {
3670
3932
  return {
@@ -3698,6 +3960,14 @@ function chatSettingsSection() {
3698
3960
  render: () => /* @__PURE__ */ jsxRuntime.jsx(ConnectedPremiumModels, {})
3699
3961
  };
3700
3962
  }
3963
+ function connectedAppsSettingsSection(props) {
3964
+ return {
3965
+ id: SETTINGS_SECTION_IDS.connectedApps,
3966
+ label: "Connected Apps",
3967
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlugZap, { className: "w-6 h-6" }),
3968
+ render: () => /* @__PURE__ */ jsxRuntime.jsx(ConnectedAppsSettings, { ...props })
3969
+ };
3970
+ }
3701
3971
  var DEFAULT_SETTINGS_SECTIONS = [
3702
3972
  accountSettingsSection(),
3703
3973
  privacySettingsSection(),
@@ -3716,7 +3986,7 @@ function ConnectedSettingsPage({
3716
3986
  }, [requested]);
3717
3987
  const controlled = section !== void 0;
3718
3988
  return /* @__PURE__ */ jsxRuntime.jsx(
3719
- chunkU73KPFYH_cjs.SettingsPage,
3989
+ chunkU37AYUPI_cjs.SettingsPage,
3720
3990
  {
3721
3991
  ...page,
3722
3992
  sections,
@@ -3929,13 +4199,13 @@ function ConnectedWorkspaceSettings({
3929
4199
  const [membersExpanded, setMembersExpanded] = react.useState(false);
3930
4200
  const [shareOpen, setShareOpen] = react.useState(false);
3931
4201
  if (!workspace) {
3932
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRXK3XP62_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkC3CGJK7A_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
4202
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkRXK3XP62_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkLTU35TQN_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
3933
4203
  }
3934
4204
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3935
4205
  /* @__PURE__ */ jsxRuntime.jsxs(chunkRXK3XP62_cjs.WorkspacePageFrame, { testId, children: [
3936
4206
  /* @__PURE__ */ jsxRuntime.jsxs(chunkRXK3XP62_cjs.WorkspaceIdentityPanel, { children: [
3937
4207
  /* @__PURE__ */ jsxRuntime.jsx(
3938
- chunkC3CGJK7A_cjs.EntityIdentityBar,
4208
+ chunkLTU35TQN_cjs.EntityIdentityBar,
3939
4209
  {
3940
4210
  testId: "workspace-identity-bar",
3941
4211
  canEdit: isOwner,
@@ -3952,7 +4222,7 @@ function ConnectedWorkspaceSettings({
3952
4222
  label: "Name",
3953
4223
  value: workspace.name,
3954
4224
  placeholder: "Untitled",
3955
- maxLength: chunkC3CGJK7A_cjs.IDENTITY_NAME_MAX_LENGTH,
4225
+ maxLength: chunkLTU35TQN_cjs.IDENTITY_NAME_MAX_LENGTH,
3956
4226
  valueClassName: "truncate text-base font-semibold",
3957
4227
  testId: "workspace-home-title",
3958
4228
  hideLabel: true,
@@ -4078,6 +4348,633 @@ function ConnectedWorkspaceSettings({
4078
4348
  })
4079
4349
  ] });
4080
4350
  }
4351
+
4352
+ // src/connection/connectors/sync-labels.ts
4353
+ var BACKFILL_OPTIONS = [
4354
+ { value: "1", label: "Last 1 day" },
4355
+ { value: "7", label: "Last 7 days" },
4356
+ { value: "30", label: "Last 30 days" },
4357
+ { value: "90", label: "Last 90 days" },
4358
+ { value: "365", label: "Last year" }
4359
+ ];
4360
+ function formatLastSync(iso) {
4361
+ const date = new Date(iso);
4362
+ if (Number.isNaN(date.getTime())) return iso;
4363
+ const diffMs = Date.now() - date.getTime();
4364
+ const diffMin = Math.round(diffMs / 6e4);
4365
+ if (diffMin < 1) return "just now";
4366
+ if (diffMin < 60) return `${diffMin}m ago`;
4367
+ const diffHr = Math.round(diffMin / 60);
4368
+ if (diffHr < 24) return `${diffHr}h ago`;
4369
+ const diffDay = Math.round(diffHr / 24);
4370
+ if (diffDay < 30) return `${diffDay}d ago`;
4371
+ return date.toLocaleDateString();
4372
+ }
4373
+ function windowLabel(days) {
4374
+ return BACKFILL_OPTIONS.find((o) => o.value === String(days))?.label ?? `Last ${days} days`;
4375
+ }
4376
+ function ConnectedMailboxSyncDialog({
4377
+ catalog,
4378
+ userConnector,
4379
+ open,
4380
+ onOpenChange,
4381
+ lockedWorkspaceExtId,
4382
+ onEnabled
4383
+ }) {
4384
+ const enableSync = react$1.useEnableMailboxSync();
4385
+ const disconnect = react$1.useDisconnectConnector();
4386
+ const arbi = react$1.useArbi();
4387
+ const { notify, navigate } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
4388
+ const reconnect = async () => {
4389
+ try {
4390
+ await disconnect.mutateAsync({ vendorKey: catalog.vendor_key });
4391
+ } catch {
4392
+ }
4393
+ try {
4394
+ navigate(await arbi.connectors.authorize(catalog.vendor_key, react$1.connectorReturnTo()));
4395
+ } catch {
4396
+ notify("Could not start reconnection. Please try again.", "error");
4397
+ }
4398
+ };
4399
+ const { data: workspaces = [] } = react$1.useWorkspaces({ enabled: open && !lockedWorkspaceExtId });
4400
+ const memberWorkspaces = workspaces.filter((w) => w.is_member);
4401
+ const [tokensBridged, setTokensBridged] = react.useState(false);
4402
+ react.useEffect(() => {
4403
+ if (!open) {
4404
+ setTokensBridged(false);
4405
+ return;
4406
+ }
4407
+ if (!userConnector?.is_connected) {
4408
+ setTokensBridged(true);
4409
+ return;
4410
+ }
4411
+ let cancelled = false;
4412
+ void arbi.connectors.bridgeTokens({ vendor: catalog.vendor_key }).finally(() => {
4413
+ if (!cancelled) setTokensBridged(true);
4414
+ });
4415
+ return () => {
4416
+ cancelled = true;
4417
+ };
4418
+ }, [open, arbi, userConnector?.is_connected, catalog.vendor_key]);
4419
+ const [workspaceExtId, setWorkspaceExtId] = react.useState("");
4420
+ const [backfill, setBackfill] = react.useState("1");
4421
+ const [backfillSince, setBackfillSince] = react.useState("");
4422
+ const [selectedFolders, setSelectedFolders] = react.useState([]);
4423
+ const [skipDuplicates, setSkipDuplicates] = react.useState(true);
4424
+ const [autoRename, setAutoRename] = react.useState(false);
4425
+ const [shared, setShared] = react.useState(false);
4426
+ const [autoSync, setAutoSync] = react.useState(false);
4427
+ react.useEffect(() => {
4428
+ if (!open) return;
4429
+ const target = lockedWorkspaceExtId ?? userConnector?.sync_workspace_ext_id ?? "";
4430
+ const workspaceSync = lockedWorkspaceExtId ? userConnector?.syncs?.find((s) => s.workspace_ext_id === lockedWorkspaceExtId) : void 0;
4431
+ setWorkspaceExtId(target);
4432
+ const since = workspaceSync?.backfill_since ?? userConnector?.backfill_since ?? null;
4433
+ if (since) {
4434
+ setBackfill("custom");
4435
+ setBackfillSince(since.slice(0, 10));
4436
+ } else {
4437
+ setBackfill(String(workspaceSync?.backfill_window ?? userConnector?.backfill_window ?? 1));
4438
+ setBackfillSince("");
4439
+ }
4440
+ setSelectedFolders(workspaceSync?.folders ?? userConnector?.sync_folders ?? []);
4441
+ setSkipDuplicates(workspaceSync?.skip_duplicates ?? userConnector?.skip_duplicates ?? true);
4442
+ setAutoRename(workspaceSync?.auto_rename ?? userConnector?.auto_rename ?? false);
4443
+ setShared(workspaceSync?.shared ?? userConnector?.shared ?? false);
4444
+ setAutoSync(workspaceSync?.auto_sync ?? userConnector?.auto_sync ?? false);
4445
+ }, [open, lockedWorkspaceExtId, userConnector]);
4446
+ const {
4447
+ data: folders = [],
4448
+ isLoading: foldersQueryLoading,
4449
+ error: foldersError
4450
+ } = react$1.useMailboxFolders(catalog.vendor_key, open && tokensBridged);
4451
+ const foldersLoading = !tokensBridged || foldersQueryLoading;
4452
+ const folderTree = chunkGRGS5M6O_cjs.buildMailFolderTree(folders);
4453
+ const [expandAllNonce, setExpandAllNonce] = react.useState(0);
4454
+ const [collapseAllNonce, setCollapseAllNonce] = react.useState(0);
4455
+ const selectAllIds = folderTree.flatMap(
4456
+ (n) => n.folder ? [n.folder.id] : n.children.flatMap((c) => c.folder ? [c.folder.id] : [])
4457
+ );
4458
+ const allSelected = selectAllIds.length > 0 && selectAllIds.every((id) => selectedFolders.includes(id));
4459
+ const toggleAllFolders = () => setSelectedFolders(allSelected ? [] : selectAllIds);
4460
+ const isCustomBackfill = backfill === "custom";
4461
+ const customDateMissing = isCustomBackfill && !backfillSince;
4462
+ const handleEnableSubmit = () => {
4463
+ if (!workspaceExtId || selectedFolders.length === 0 || customDateMissing) return;
4464
+ enableSync.mutate(
4465
+ {
4466
+ vendorKey: catalog.vendor_key,
4467
+ workspaceExtId,
4468
+ // A fixed date overrides the rolling window server-side; keep a sane
4469
+ // window value for backward compatibility.
4470
+ backfillWindow: isCustomBackfill ? 90 : Number(backfill),
4471
+ backfillSince: isCustomBackfill ? (/* @__PURE__ */ new Date(`${backfillSince}T00:00:00Z`)).toISOString() : null,
4472
+ folders: selectedFolders,
4473
+ skipDuplicates,
4474
+ autoRename,
4475
+ shared,
4476
+ autoSync
4477
+ },
4478
+ {
4479
+ onSuccess: () => {
4480
+ notify("Email settings saved", "success");
4481
+ onOpenChange(false);
4482
+ onEnabled?.(workspaceExtId);
4483
+ },
4484
+ onError: (err) => {
4485
+ let msg = "Could not enable email sync. Please try again.";
4486
+ const status = react$1.connectorErrorStatus(err);
4487
+ if (status !== void 0) {
4488
+ if (status === 403) {
4489
+ msg = "You are not a member of the selected workspace.";
4490
+ } else if (status === 404) {
4491
+ msg = "This connector is not available for email sync.";
4492
+ }
4493
+ }
4494
+ notify(msg, "error");
4495
+ }
4496
+ }
4497
+ );
4498
+ };
4499
+ const mailboxName = catalog.vendor_key === "gmail" ? "Gmail" : catalog.vendor_key === "microsoft" ? "Outlook" : catalog.display_name;
4500
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4501
+ chunkULWRNGGE_cjs.ModalScaffold,
4502
+ {
4503
+ open,
4504
+ onOpenChange,
4505
+ title: `${mailboxName} Import Settings`,
4506
+ description: `Import emails from ${catalog.display_name} into a workspace so the ARBI agent can search them. This is read-only \u2014 ARBI imports a copy and never modifies or deletes anything in your mailbox.`,
4507
+ showDescription: true,
4508
+ className: "w-[92vw] sm:max-w-lg",
4509
+ children: [
4510
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncDialogBody, { children: [
4511
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
4512
+ chunkU37AYUPI_cjs.SyncSelect,
4513
+ {
4514
+ id: "sync-workspace",
4515
+ value: workspaceExtId,
4516
+ onValueChange: setWorkspaceExtId,
4517
+ placeholder: "Select a workspace",
4518
+ options: memberWorkspaces.map((w) => ({ value: w.external_id, label: w.name }))
4519
+ }
4520
+ ) }),
4521
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
4522
+ /* @__PURE__ */ jsxRuntime.jsx(
4523
+ chunkU37AYUPI_cjs.SyncSelect,
4524
+ {
4525
+ id: "sync-backfill",
4526
+ value: backfill,
4527
+ onValueChange: setBackfill,
4528
+ options: [...BACKFILL_OPTIONS, { value: "custom", label: "Custom date\u2026" }]
4529
+ }
4530
+ ),
4531
+ isCustomBackfill && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
4532
+ /* @__PURE__ */ jsxRuntime.jsx(
4533
+ ui.Input,
4534
+ {
4535
+ type: "date",
4536
+ value: backfillSince,
4537
+ max: (/* @__PURE__ */ new Date()).toISOString().slice(0, 10),
4538
+ onChange: (e) => setBackfillSince(e.target.value),
4539
+ "data-testid": "backfill-since-date",
4540
+ "aria-label": "Import emails since date"
4541
+ }
4542
+ ),
4543
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
4544
+ ] })
4545
+ ] }),
4546
+ /* @__PURE__ */ jsxRuntime.jsx(
4547
+ chunkU37AYUPI_cjs.SyncField,
4548
+ {
4549
+ label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
4550
+ hint: "Select at least one folder to import.",
4551
+ actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncLinkRow, { children: [
4552
+ /* @__PURE__ */ jsxRuntime.jsx(
4553
+ chunkU37AYUPI_cjs.SyncLinkButton,
4554
+ {
4555
+ onClick: () => setExpandAllNonce((n) => n + 1),
4556
+ testId: "mail-folders-expand-all",
4557
+ children: "Expand all"
4558
+ }
4559
+ ),
4560
+ /* @__PURE__ */ jsxRuntime.jsx(
4561
+ chunkU37AYUPI_cjs.SyncLinkButton,
4562
+ {
4563
+ onClick: () => setCollapseAllNonce((n) => n + 1),
4564
+ testId: "mail-folders-collapse-all",
4565
+ children: "Collapse all"
4566
+ }
4567
+ ),
4568
+ /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
4569
+ ] }),
4570
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
4571
+ // A failed fetch is not an empty mailbox: it hides auth/scope errors (e.g. a Gmail
4572
+ // account needing reconnect).
4573
+ /* @__PURE__ */ jsxRuntime.jsx(
4574
+ chunkU37AYUPI_cjs.SyncReconnectNotice,
4575
+ {
4576
+ message: `Couldn\u2019t load folders from ${catalog.display_name}. Reconnect the account and try again.`,
4577
+ onReconnect: () => void reconnect(),
4578
+ isPending: disconnect.isPending,
4579
+ testId: "folders-reconnect"
4580
+ }
4581
+ )
4582
+ ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
4583
+ chunkGRGS5M6O_cjs.MailFolderTree,
4584
+ {
4585
+ nodes: folderTree,
4586
+ selected: selectedFolders,
4587
+ onChange: setSelectedFolders,
4588
+ expandAllNonce,
4589
+ collapseAllNonce
4590
+ }
4591
+ ) })
4592
+ }
4593
+ ),
4594
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncOptions, { children: [
4595
+ /* @__PURE__ */ jsxRuntime.jsx(
4596
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4597
+ {
4598
+ checked: skipDuplicates,
4599
+ onCheckedChange: setSkipDuplicates,
4600
+ title: "Skip duplicates",
4601
+ description: "Skip files identical to ones already in the workspace.",
4602
+ testId: "mailbox-sync-skip-duplicates"
4603
+ }
4604
+ ),
4605
+ /* @__PURE__ */ jsxRuntime.jsx(
4606
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4607
+ {
4608
+ checked: autoRename,
4609
+ onCheckedChange: setAutoRename,
4610
+ title: "Auto-rename",
4611
+ description: "Generate a descriptive title with AI instead of using the sender and subject.",
4612
+ testId: "mailbox-sync-auto-rename"
4613
+ }
4614
+ ),
4615
+ /* @__PURE__ */ jsxRuntime.jsx(
4616
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4617
+ {
4618
+ checked: shared,
4619
+ onCheckedChange: setShared,
4620
+ title: "Share with the workspace",
4621
+ description: shared ? "Imported documents are visible to everyone in the workspace." : "Imported documents stay private to you.",
4622
+ testId: "mailbox-sync-shared"
4623
+ }
4624
+ ),
4625
+ /* @__PURE__ */ jsxRuntime.jsx(
4626
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4627
+ {
4628
+ checked: autoSync,
4629
+ onCheckedChange: setAutoSync,
4630
+ title: "Sync automatically",
4631
+ description: "Check for new email when you sign in, instead of only when you click Sync now. Requires you to be signed in \u2014 nothing syncs while you are away.",
4632
+ testId: "mailbox-sync-auto-sync"
4633
+ }
4634
+ )
4635
+ ] })
4636
+ ] }),
4637
+ /* @__PURE__ */ jsxRuntime.jsx(
4638
+ chunkU37AYUPI_cjs.SyncDialogFooter,
4639
+ {
4640
+ onCancel: () => onOpenChange(false),
4641
+ onSave: handleEnableSubmit,
4642
+ saveDisabled: !workspaceExtId || selectedFolders.length === 0 || customDateMissing,
4643
+ isSaving: enableSync.isPending
4644
+ }
4645
+ )
4646
+ ]
4647
+ }
4648
+ );
4649
+ }
4650
+ var DRIVE_PRODUCT_NAMES = {
4651
+ gmail: "Google Drive",
4652
+ microsoft_sharepoint: "SharePoint",
4653
+ box: "Box",
4654
+ dropbox: "Dropbox",
4655
+ onenote: "OneNote",
4656
+ clio: "Clio"
4657
+ };
4658
+ function DriveFolderNode({
4659
+ vendorKey,
4660
+ folder,
4661
+ depth,
4662
+ selected,
4663
+ onToggle,
4664
+ enabled,
4665
+ ancestorSelected,
4666
+ expandAllNonce,
4667
+ collapseAllNonce
4668
+ }) {
4669
+ const isSelected = ancestorSelected || selected.includes(folder.id);
4670
+ const [expanded, setExpanded] = react.useState(() => selected.includes(folder.id) || expandAllNonce > 0);
4671
+ const appliedNonce = react.useRef(expandAllNonce);
4672
+ react.useEffect(() => {
4673
+ if (expandAllNonce > appliedNonce.current) {
4674
+ appliedNonce.current = expandAllNonce;
4675
+ setExpanded(true);
4676
+ }
4677
+ }, [expandAllNonce]);
4678
+ const appliedCollapseNonce = react.useRef(collapseAllNonce);
4679
+ react.useEffect(() => {
4680
+ if (collapseAllNonce > appliedCollapseNonce.current) {
4681
+ appliedCollapseNonce.current = collapseAllNonce;
4682
+ setExpanded(false);
4683
+ }
4684
+ }, [collapseAllNonce]);
4685
+ const { data: children = [], isLoading } = react$1.useDriveFolderChildren(
4686
+ vendorKey,
4687
+ folder.id,
4688
+ enabled && expanded
4689
+ );
4690
+ const isSelectable = folder.selectable !== false;
4691
+ const { data: docCount, isLoading: countLoading } = react$1.useDriveFolderDocCount(
4692
+ vendorKey,
4693
+ folder.id,
4694
+ enabled && isSelectable
4695
+ // ← disabled for site: nodes
4696
+ );
4697
+ const mightHaveChildren = docCount == null || docCount > 0;
4698
+ const orderedChildren = [...children].sort((a, b) => a.name.localeCompare(b.name));
4699
+ return /* @__PURE__ */ jsxRuntime.jsx(
4700
+ chunkU37AYUPI_cjs.SyncFolderRow,
4701
+ {
4702
+ id: folder.id,
4703
+ name: folder.name,
4704
+ depth,
4705
+ hasChildren: mightHaveChildren,
4706
+ isExpanded: expanded,
4707
+ onToggleExpanded: () => setExpanded((e) => !e),
4708
+ isSelectable,
4709
+ checked: isSelected,
4710
+ disabled: ancestorSelected,
4711
+ onCheckedChange: () => onToggle(folder.id),
4712
+ count: typeof docCount === "number" ? docCount : void 0,
4713
+ isCountLoading: isSelectable && countLoading,
4714
+ children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
4715
+ DriveFolderNode,
4716
+ {
4717
+ vendorKey,
4718
+ folder: child,
4719
+ depth: depth + 1,
4720
+ selected,
4721
+ onToggle,
4722
+ enabled,
4723
+ ancestorSelected: isSelected,
4724
+ expandAllNonce,
4725
+ collapseAllNonce
4726
+ },
4727
+ child.id
4728
+ ))
4729
+ }
4730
+ );
4731
+ }
4732
+ function ConnectedDriveSyncDialog({
4733
+ catalog,
4734
+ userConnector,
4735
+ open,
4736
+ onOpenChange,
4737
+ lockedWorkspaceExtId,
4738
+ onEnabled
4739
+ }) {
4740
+ const enableSync = react$1.useEnableDriveSync();
4741
+ const disconnect = react$1.useDisconnectConnector();
4742
+ const arbi = react$1.useArbi();
4743
+ const { notify, navigate } = chunkKPZZ5FHE_cjs.useBlocksEnvironment();
4744
+ const reconnect = async () => {
4745
+ try {
4746
+ await disconnect.mutateAsync({ vendorKey: catalog.vendor_key });
4747
+ } catch {
4748
+ }
4749
+ try {
4750
+ navigate(await arbi.connectors.authorize(catalog.vendor_key, react$1.connectorReturnTo()));
4751
+ } catch {
4752
+ notify("Could not start reconnection. Please try again.", "error");
4753
+ }
4754
+ };
4755
+ const { data: workspaces = [] } = react$1.useWorkspaces({ enabled: open && !lockedWorkspaceExtId });
4756
+ const memberWorkspaces = workspaces.filter((w) => w.is_member);
4757
+ const [tokensBridged, setTokensBridged] = react.useState(false);
4758
+ react.useEffect(() => {
4759
+ if (!open) {
4760
+ setTokensBridged(false);
4761
+ return;
4762
+ }
4763
+ if (!userConnector?.is_connected) {
4764
+ setTokensBridged(true);
4765
+ return;
4766
+ }
4767
+ let cancelled = false;
4768
+ void arbi.connectors.bridgeTokens({ vendor: catalog.vendor_key }).finally(() => {
4769
+ if (!cancelled) setTokensBridged(true);
4770
+ });
4771
+ return () => {
4772
+ cancelled = true;
4773
+ };
4774
+ }, [open, arbi, userConnector?.is_connected, catalog.vendor_key]);
4775
+ const [workspaceExtId, setWorkspaceExtId] = react.useState("");
4776
+ const [selectedFolders, setSelectedFolders] = react.useState([]);
4777
+ const [skipDuplicates, setSkipDuplicates] = react.useState(false);
4778
+ const [autoRename, setAutoRename] = react.useState(false);
4779
+ const [shared, setShared] = react.useState(false);
4780
+ const [autoSync, setAutoSync] = react.useState(false);
4781
+ react.useEffect(() => {
4782
+ if (!open) return;
4783
+ const target = lockedWorkspaceExtId ?? userConnector?.drive_sync_workspace_ext_id ?? "";
4784
+ setWorkspaceExtId(target);
4785
+ setSelectedFolders(userConnector?.drive_sync_folders ?? []);
4786
+ setSkipDuplicates(userConnector?.drive_skip_duplicates ?? false);
4787
+ setAutoRename(userConnector?.drive_auto_rename ?? false);
4788
+ setShared(userConnector?.drive_shared ?? false);
4789
+ setAutoSync(userConnector?.drive_auto_sync ?? false);
4790
+ setExpandAllNonce(0);
4791
+ setCollapseAllNonce(0);
4792
+ }, [open, lockedWorkspaceExtId, userConnector]);
4793
+ const [expandAllNonce, setExpandAllNonce] = react.useState(0);
4794
+ const [collapseAllNonce, setCollapseAllNonce] = react.useState(0);
4795
+ const treeEnabled = open && tokensBridged;
4796
+ const {
4797
+ data: folders = [],
4798
+ isLoading: foldersQueryLoading,
4799
+ error: foldersError
4800
+ } = react$1.useDriveFolderChildren(catalog.vendor_key, "root", treeEnabled);
4801
+ const foldersLoading = !tokensBridged || foldersQueryLoading;
4802
+ const needsReconnect = react$1.connectorErrorStatus(foldersError) === 409;
4803
+ const toggleFolder = (id) => setSelectedFolders((prev) => prev.includes(id) ? prev.filter((f) => f !== id) : [...prev, id]);
4804
+ const orderedFolders = [...folders].sort(
4805
+ (a, b) => a.name.localeCompare(b.name)
4806
+ );
4807
+ const handleEnableSubmit = () => {
4808
+ if (!workspaceExtId || selectedFolders.length === 0) return;
4809
+ const foldersToSubmit = selectedFolders.filter((id) => !id.startsWith("site:"));
4810
+ if (foldersToSubmit.length === 0) return;
4811
+ enableSync.mutate(
4812
+ {
4813
+ vendorKey: catalog.vendor_key,
4814
+ workspaceExtId,
4815
+ folders: foldersToSubmit,
4816
+ skipDuplicates,
4817
+ autoRename,
4818
+ shared,
4819
+ autoSync
4820
+ },
4821
+ {
4822
+ onSuccess: () => {
4823
+ notify(`${productName} settings saved`, "success");
4824
+ onOpenChange(false);
4825
+ onEnabled?.(workspaceExtId);
4826
+ },
4827
+ onError: (err) => {
4828
+ let msg = `Could not enable ${productName} sync. Please try again.`;
4829
+ const status = react$1.connectorErrorStatus(err);
4830
+ if (status !== void 0) {
4831
+ if (status === 403) {
4832
+ msg = "You are not a member of the selected workspace.";
4833
+ } else if (status === 409) {
4834
+ msg = `Reconnect needed \u2014 re-authorize your account to enable ${productName}.`;
4835
+ } else if (status === 404) {
4836
+ msg = `This connector is not available for ${productName} sync.`;
4837
+ }
4838
+ }
4839
+ notify(msg, "error");
4840
+ }
4841
+ }
4842
+ );
4843
+ };
4844
+ const productName = DRIVE_PRODUCT_NAMES[catalog.vendor_key] ?? "OneDrive";
4845
+ const reconnectButtonProps = {
4846
+ onReconnect: () => void reconnect(),
4847
+ isPending: disconnect.isPending,
4848
+ testId: "drive-folders-reconnect"
4849
+ };
4850
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4851
+ chunkULWRNGGE_cjs.ModalScaffold,
4852
+ {
4853
+ open,
4854
+ onOpenChange,
4855
+ title: `${productName} Import Settings`,
4856
+ description: `Import documents from ${productName} into a workspace so the ARBI agent can search them. This is read-only \u2014 ARBI imports a copy and never modifies or deletes anything in your ${productName}.`,
4857
+ showDescription: true,
4858
+ className: "w-[92vw] sm:max-w-lg",
4859
+ children: [
4860
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncDialogBody, { children: [
4861
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
4862
+ chunkU37AYUPI_cjs.SyncSelect,
4863
+ {
4864
+ id: "drive-sync-workspace",
4865
+ value: workspaceExtId,
4866
+ onValueChange: setWorkspaceExtId,
4867
+ placeholder: "Select a workspace",
4868
+ options: memberWorkspaces.map((w) => ({ value: w.external_id, label: w.name }))
4869
+ }
4870
+ ) }),
4871
+ /* @__PURE__ */ jsxRuntime.jsx(
4872
+ chunkU37AYUPI_cjs.SyncField,
4873
+ {
4874
+ label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
4875
+ hint: "Select at least one folder. Importing a folder includes everything inside it.",
4876
+ actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncLinkRow, { children: [
4877
+ /* @__PURE__ */ jsxRuntime.jsx(
4878
+ chunkU37AYUPI_cjs.SyncLinkButton,
4879
+ {
4880
+ onClick: () => setExpandAllNonce((n) => n + 1),
4881
+ testId: "drive-folders-expand-all",
4882
+ children: "Expand all"
4883
+ }
4884
+ ),
4885
+ /* @__PURE__ */ jsxRuntime.jsx(
4886
+ chunkU37AYUPI_cjs.SyncLinkButton,
4887
+ {
4888
+ onClick: () => setCollapseAllNonce((n) => n + 1),
4889
+ testId: "drive-folders-collapse-all",
4890
+ children: "Collapse all"
4891
+ }
4892
+ )
4893
+ ] }),
4894
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
4895
+ chunkU37AYUPI_cjs.SyncReconnectNotice,
4896
+ {
4897
+ ...reconnectButtonProps,
4898
+ message: `Reconnect ${catalog.display_name} to enable ${productName} \u2014 your account needs to grant file access.`
4899
+ }
4900
+ ) : foldersError ? /* @__PURE__ */ jsxRuntime.jsx(
4901
+ chunkU37AYUPI_cjs.SyncReconnectNotice,
4902
+ {
4903
+ ...reconnectButtonProps,
4904
+ message: `Couldn\u2019t load folders from ${productName}. Reconnect the account and try again.`
4905
+ }
4906
+ ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkU37AYUPI_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
4907
+ DriveFolderNode,
4908
+ {
4909
+ vendorKey: catalog.vendor_key,
4910
+ folder: f,
4911
+ depth: 0,
4912
+ selected: selectedFolders,
4913
+ onToggle: toggleFolder,
4914
+ enabled: treeEnabled,
4915
+ ancestorSelected: false,
4916
+ expandAllNonce,
4917
+ collapseAllNonce
4918
+ },
4919
+ f.id
4920
+ )) }) })
4921
+ }
4922
+ ),
4923
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkU37AYUPI_cjs.SyncOptions, { children: [
4924
+ /* @__PURE__ */ jsxRuntime.jsx(
4925
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4926
+ {
4927
+ checked: skipDuplicates,
4928
+ onCheckedChange: setSkipDuplicates,
4929
+ title: "Skip duplicates",
4930
+ description: "Skip files identical to ones already in the workspace."
4931
+ }
4932
+ ),
4933
+ /* @__PURE__ */ jsxRuntime.jsx(
4934
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4935
+ {
4936
+ checked: autoRename,
4937
+ onCheckedChange: setAutoRename,
4938
+ title: "Auto-rename",
4939
+ description: "Generate a descriptive title with AI instead of using the filename."
4940
+ }
4941
+ ),
4942
+ /* @__PURE__ */ jsxRuntime.jsx(
4943
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4944
+ {
4945
+ checked: shared,
4946
+ onCheckedChange: setShared,
4947
+ title: "Share with the workspace",
4948
+ description: shared ? "Imported documents are visible to everyone in the workspace." : "Imported documents stay private to you."
4949
+ }
4950
+ ),
4951
+ /* @__PURE__ */ jsxRuntime.jsx(
4952
+ chunkU37AYUPI_cjs.SyncOptionToggle,
4953
+ {
4954
+ checked: autoSync,
4955
+ onCheckedChange: setAutoSync,
4956
+ title: "Sync automatically",
4957
+ description: "Check for new files when you sign in, instead of only when you click Sync now. Requires you to be signed in \u2014 nothing syncs while you are away.",
4958
+ testId: "drive-sync-auto-sync"
4959
+ }
4960
+ )
4961
+ ] })
4962
+ ] }),
4963
+ /* @__PURE__ */ jsxRuntime.jsx(
4964
+ chunkU37AYUPI_cjs.SyncDialogFooter,
4965
+ {
4966
+ onCancel: () => onOpenChange(false),
4967
+ onSave: handleEnableSubmit,
4968
+ saveDisabled: !workspaceExtId || selectedFolders.length === 0,
4969
+ isSaving: enableSync.isPending,
4970
+ cancelButton: { testId: "drive-sync-cancel" },
4971
+ saveButton: { testId: "drive-sync-save" }
4972
+ }
4973
+ )
4974
+ ]
4975
+ }
4976
+ );
4977
+ }
4081
4978
  function useConnectedDocxNotifications(onOpen) {
4082
4979
  const arbi = react$1.useArbi();
4083
4980
  const { status, user, apiUrl } = chunkGFNELPDP_cjs.useConnection();
@@ -4359,7 +5256,7 @@ function useWordBody({
4359
5256
  }
4360
5257
  var MailBodyEditor = react.lazy(
4361
5258
  () => import('../MailBodyEditor-D7MGJMLH.cjs').catch(() => ({
4362
- default: chunkO6IEZDRC_cjs.PlainMailBodyEditor
5259
+ default: chunkGRGS5M6O_cjs.PlainMailBodyEditor
4363
5260
  }))
4364
5261
  );
4365
5262
  var NativeDocxEditor = react.lazy(
@@ -4451,9 +5348,9 @@ function MailComposerForm({
4451
5348
  }, [drafts, draftId, subject]);
4452
5349
  const body = () => ({
4453
5350
  ...initial,
4454
- to: chunkO6IEZDRC_cjs.parseMailRecipients(to),
4455
- cc: chunkO6IEZDRC_cjs.parseMailRecipients(cc),
4456
- bcc: chunkO6IEZDRC_cjs.parseMailRecipients(bcc),
5351
+ to: chunkGRGS5M6O_cjs.parseMailRecipients(to),
5352
+ cc: chunkGRGS5M6O_cjs.parseMailRecipients(cc),
5353
+ bcc: chunkGRGS5M6O_cjs.parseMailRecipients(bcc),
4457
5354
  subject,
4458
5355
  text,
4459
5356
  html,
@@ -4909,7 +5806,7 @@ function MailComposerForm({
4909
5806
  }
4910
5807
  ),
4911
5808
  documents && /* @__PURE__ */ jsxRuntime.jsx(
4912
- chunkO6IEZDRC_cjs.MailDocumentPicker,
5809
+ chunkGRGS5M6O_cjs.MailDocumentPicker,
4913
5810
  {
4914
5811
  documents: documents.documents,
4915
5812
  disabled: locked,
@@ -5028,7 +5925,7 @@ function ConnectedMailComposer({
5028
5925
  openId,
5029
5926
  async (from, id) => {
5030
5927
  const message = await client.getMessage(from, id);
5031
- return chunkO6IEZDRC_cjs.draftMailCompose(
5928
+ return chunkGRGS5M6O_cjs.draftMailCompose(
5032
5929
  message,
5033
5930
  await hydrateMailAttachments(client, from, message.id, message.attachments, {
5034
5931
  isOnline,
@@ -5042,11 +5939,11 @@ function ConnectedMailComposer({
5042
5939
  const start = react.useMemo(() => {
5043
5940
  if (replyTo)
5044
5941
  return original.data && account ? {
5045
- ...chunkO6IEZDRC_cjs.replyMailCompose(original.data, { account, folderRole: "inbox" }),
5942
+ ...chunkGRGS5M6O_cjs.replyMailCompose(original.data, { account, folderRole: "inbox" }),
5046
5943
  text: "",
5047
5944
  html: ""
5048
5945
  } : void 0;
5049
- return reloaded ? draft.data : initial ?? (openId ? draft.data : chunkO6IEZDRC_cjs.emptyMailCompose());
5946
+ return reloaded ? draft.data : initial ?? (openId ? draft.data : chunkGRGS5M6O_cjs.emptyMailCompose());
5050
5947
  }, [replyTo, original.data, account, reloaded, initial, openId, draft.data]);
5051
5948
  if (!start)
5052
5949
  return draft.error ?? original.error ? /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "p-4 text-sm text-destructive", children: (draft.error ?? original.error)?.message }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-4 text-sm text-muted-foreground", children: "Loading draft\u2026" });
@@ -5352,7 +6249,7 @@ function ConnectedMailbox({
5352
6249
  const message = detail.data;
5353
6250
  react.useEffect(() => {
5354
6251
  if (!composeAttachments?.length) return;
5355
- openCompose({ ...chunkO6IEZDRC_cjs.emptyMailCompose(), attachments: composeAttachments });
6252
+ openCompose({ ...chunkGRGS5M6O_cjs.emptyMailCompose(), attachments: composeAttachments });
5356
6253
  onComposeOpened?.();
5357
6254
  }, [composeAttachments]);
5358
6255
  react.useEffect(() => {
@@ -5480,7 +6377,7 @@ function ConnectedMailbox({
5480
6377
  const editDraft = async () => {
5481
6378
  if (!message) return;
5482
6379
  try {
5483
- openCompose(chunkO6IEZDRC_cjs.draftMailCompose(message, await hydrate(message.attachments)));
6380
+ openCompose(chunkGRGS5M6O_cjs.draftMailCompose(message, await hydrate(message.attachments)));
5484
6381
  } catch (e) {
5485
6382
  setActionError(e instanceof Error ? e.message : "Could not load draft attachments");
5486
6383
  }
@@ -5489,7 +6386,7 @@ function ConnectedMailbox({
5489
6386
  if (!message || !account) return;
5490
6387
  try {
5491
6388
  const attachments = forward ? await hydrate(message.attachments) : [];
5492
- openCompose(chunkO6IEZDRC_cjs.replyMailCompose(message, { account, folderRole, forward, all, attachments }));
6389
+ openCompose(chunkGRGS5M6O_cjs.replyMailCompose(message, { account, folderRole, forward, all, attachments }));
5493
6390
  } catch (e) {
5494
6391
  setActionError(e instanceof Error ? e.message : "Could not prepare forwarded attachments");
5495
6392
  }
@@ -5609,7 +6506,7 @@ function ConnectedMailbox({
5609
6506
  {
5610
6507
  size: "sm",
5611
6508
  disabled: !ready || !!compose,
5612
- onClick: () => openCompose(chunkO6IEZDRC_cjs.emptyMailCompose()),
6509
+ onClick: () => openCompose(chunkGRGS5M6O_cjs.emptyMailCompose()),
5613
6510
  children: [
5614
6511
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-1.5 size-4" }),
5615
6512
  "Email"
@@ -5688,7 +6585,7 @@ function ConnectedMailbox({
5688
6585
  onEdit: (value) => openCompose({ ...value })
5689
6586
  }),
5690
6587
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: deviceFolder ? "hidden" : "min-h-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
5691
- chunkO6IEZDRC_cjs.MailGrid,
6588
+ chunkGRGS5M6O_cjs.MailGrid,
5692
6589
  {
5693
6590
  messages: filteredMessages,
5694
6591
  loading: list.isPending && list.fetchStatus !== "idle",
@@ -5751,7 +6648,7 @@ function ConnectedMailbox({
5751
6648
  },
5752
6649
  `${account?.id}-${composeSession}`
5753
6650
  ) : message && selected ? /* @__PURE__ */ jsxRuntime.jsx(
5754
- chunkO6IEZDRC_cjs.MailMessageView,
6651
+ chunkGRGS5M6O_cjs.MailMessageView,
5755
6652
  {
5756
6653
  account,
5757
6654
  message,
@@ -5888,7 +6785,7 @@ function ConnectedMailMessage({
5888
6785
  const attachments = forward ? await hydrateMailAttachments(client, account, message.id, message.attachments, {
5889
6786
  isOnline
5890
6787
  }) : [];
5891
- onCompose(chunkO6IEZDRC_cjs.replyMailCompose(message, { account, folderRole, forward, all, attachments }));
6788
+ onCompose(chunkGRGS5M6O_cjs.replyMailCompose(message, { account, folderRole, forward, all, attachments }));
5892
6789
  } catch (e) {
5893
6790
  setError(e instanceof Error ? e.message : "Could not prepare forwarded attachments");
5894
6791
  }
@@ -5896,7 +6793,7 @@ function ConnectedMailMessage({
5896
6793
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [
5897
6794
  error && /* @__PURE__ */ jsxRuntime.jsx("p", { role: "alert", className: "px-4 pt-3 text-sm text-destructive", children: error }),
5898
6795
  /* @__PURE__ */ jsxRuntime.jsx(
5899
- chunkO6IEZDRC_cjs.MailMessageView,
6796
+ chunkGRGS5M6O_cjs.MailMessageView,
5900
6797
  {
5901
6798
  account,
5902
6799
  message,
@@ -5907,7 +6804,7 @@ function ConnectedMailMessage({
5907
6804
  onBack: onClose,
5908
6805
  onEditDraft: () => void hydrateMailAttachments(client, account, message.id, message.attachments, {
5909
6806
  isOnline
5910
- }).then((attachments) => onCompose(chunkO6IEZDRC_cjs.draftMailCompose(message, attachments))).catch((e) => setError(e.message)),
6807
+ }).then((attachments) => onCompose(chunkGRGS5M6O_cjs.draftMailCompose(message, attachments))).catch((e) => setError(e.message)),
5911
6808
  onReply: (forward, all) => void reply(forward, all),
5912
6809
  onReplyWithArbi: onReplyWithArbi && account.provider === "native" ? () => onReplyWithArbi(message, account) : void 0,
5913
6810
  onUpdate: (body) => void update(body),
@@ -9658,43 +10555,43 @@ Object.defineProperty(exports, "useWorkspaceDocs", {
9658
10555
  });
9659
10556
  Object.defineProperty(exports, "ConnectedWorkflowDocumentsField", {
9660
10557
  enumerable: true,
9661
- get: function () { return chunkMFMASSEO_cjs.ConnectedWorkflowDocumentsField; }
10558
+ get: function () { return chunkAINU3EJ6_cjs.ConnectedWorkflowDocumentsField; }
9662
10559
  });
9663
10560
  Object.defineProperty(exports, "ConnectedWorkflowLauncher", {
9664
10561
  enumerable: true,
9665
- get: function () { return chunkMFMASSEO_cjs.ConnectedWorkflowLauncher; }
10562
+ get: function () { return chunkAINU3EJ6_cjs.ConnectedWorkflowLauncher; }
9666
10563
  });
9667
10564
  Object.defineProperty(exports, "ConnectedWorkflowsTable", {
9668
10565
  enumerable: true,
9669
- get: function () { return chunkMFMASSEO_cjs.ConnectedWorkflowsTable; }
10566
+ get: function () { return chunkAINU3EJ6_cjs.ConnectedWorkflowsTable; }
9670
10567
  });
9671
10568
  Object.defineProperty(exports, "DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS", {
9672
10569
  enumerable: true,
9673
- get: function () { return chunkMFMASSEO_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
10570
+ get: function () { return chunkAINU3EJ6_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
9674
10571
  });
9675
10572
  Object.defineProperty(exports, "NativeDocxSupportProvider", {
9676
10573
  enumerable: true,
9677
- get: function () { return chunkMFMASSEO_cjs.NativeDocxSupportProvider; }
10574
+ get: function () { return chunkAINU3EJ6_cjs.NativeDocxSupportProvider; }
9678
10575
  });
9679
10576
  Object.defineProperty(exports, "toWorkflowFieldDocument", {
9680
10577
  enumerable: true,
9681
- get: function () { return chunkMFMASSEO_cjs.toWorkflowFieldDocument; }
10578
+ get: function () { return chunkAINU3EJ6_cjs.toWorkflowFieldDocument; }
9682
10579
  });
9683
10580
  Object.defineProperty(exports, "useConnectedAgentOptions", {
9684
10581
  enumerable: true,
9685
- get: function () { return chunkMFMASSEO_cjs.useConnectedAgentOptions; }
10582
+ get: function () { return chunkAINU3EJ6_cjs.useConnectedAgentOptions; }
9686
10583
  });
9687
10584
  Object.defineProperty(exports, "useConnectedWorkflowScopeSource", {
9688
10585
  enumerable: true,
9689
- get: function () { return chunkMFMASSEO_cjs.useConnectedWorkflowScopeSource; }
10586
+ get: function () { return chunkAINU3EJ6_cjs.useConnectedWorkflowScopeSource; }
9690
10587
  });
9691
10588
  Object.defineProperty(exports, "useConnectedWorkspaceRole", {
9692
10589
  enumerable: true,
9693
- get: function () { return chunkMFMASSEO_cjs.useConnectedWorkspaceRole; }
10590
+ get: function () { return chunkAINU3EJ6_cjs.useConnectedWorkspaceRole; }
9694
10591
  });
9695
10592
  Object.defineProperty(exports, "useNativeDocxSupport", {
9696
10593
  enumerable: true,
9697
- get: function () { return chunkMFMASSEO_cjs.useNativeDocxSupport; }
10594
+ get: function () { return chunkAINU3EJ6_cjs.useNativeDocxSupport; }
9698
10595
  });
9699
10596
  Object.defineProperty(exports, "ConnectedWorkspaceDataProvider", {
9700
10597
  enumerable: true,
@@ -9733,11 +10630,14 @@ Object.defineProperty(exports, "useConnection", {
9733
10630
  get: function () { return chunkGFNELPDP_cjs.useConnection; }
9734
10631
  });
9735
10632
  exports.ArbiAppProvider = ArbiAppProvider;
10633
+ exports.BACKFILL_OPTIONS = BACKFILL_OPTIONS;
9736
10634
  exports.ConnectedAccountSettings = ConnectedAccountSettings;
9737
10635
  exports.ConnectedAgentChatPanel = ConnectedAgentChatPanel;
9738
10636
  exports.ConnectedAgentCreator = ConnectedAgentCreator;
10637
+ exports.ConnectedAppsSettings = ConnectedAppsSettings;
9739
10638
  exports.ConnectedCalendar = ConnectedCalendar;
9740
10639
  exports.ConnectedDangerZone = ConnectedDangerZone;
10640
+ exports.ConnectedDriveSyncDialog = ConnectedDriveSyncDialog;
9741
10641
  exports.ConnectedIdentityVerification = ConnectedIdentityVerification;
9742
10642
  exports.ConnectedLogoutDialog = ConnectedLogoutDialog;
9743
10643
  exports.ConnectedMailAccounts = ConnectedMailAccounts;
@@ -9747,6 +10647,7 @@ exports.ConnectedMailMessage = ConnectedMailMessage;
9747
10647
  exports.ConnectedMailSettings = ConnectedMailSettings;
9748
10648
  exports.ConnectedMailSetup = ConnectedMailSetup;
9749
10649
  exports.ConnectedMailbox = ConnectedMailbox;
10650
+ exports.ConnectedMailboxSyncDialog = ConnectedMailboxSyncDialog;
9750
10651
  exports.ConnectedNotificationCenter = ConnectedNotificationCenter;
9751
10652
  exports.ConnectedNotificationPreferences = ConnectedNotificationPreferences;
9752
10653
  exports.ConnectedPasswordChangeDialog = ConnectedPasswordChangeDialog;
@@ -9783,9 +10684,11 @@ exports.accountSettingsSection = accountSettingsSection;
9783
10684
  exports.bookingCancelLink = bookingCancelLink;
9784
10685
  exports.buildNotificationCenterItems = buildNotificationCenterItems;
9785
10686
  exports.chatSettingsSection = chatSettingsSection;
10687
+ exports.connectedAppsSettingsSection = connectedAppsSettingsSection;
9786
10688
  exports.countNotificationTypes = countNotificationTypes;
9787
10689
  exports.defaultUnmetPasswordRequirement = defaultUnmetPasswordRequirement;
9788
10690
  exports.filterNotificationCenterItems = filterNotificationCenterItems;
10691
+ exports.formatLastSync = formatLastSync;
9789
10692
  exports.mailSettingsSection = mailSettingsSection;
9790
10693
  exports.openMeetingLink = openMeetingLink;
9791
10694
  exports.privacySettingsSection = privacySettingsSection;
@@ -9798,6 +10701,7 @@ exports.useConnectedDocxNotifications = useConnectedDocxNotifications;
9798
10701
  exports.useConnectedShellWorkspaces = useConnectedShellWorkspaces;
9799
10702
  exports.useConnectedWorkNotifications = useConnectedWorkNotifications;
9800
10703
  exports.useConnectedWorkspaceSettings = useConnectedWorkspaceSettings;
10704
+ exports.windowLabel = windowLabel;
9801
10705
  exports.workflowRunView = workflowRunView;
9802
10706
  //# sourceMappingURL=index.cjs.map
9803
10707
  //# sourceMappingURL=index.cjs.map