@arbidocs/blocks 0.5.24 → 0.5.25

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 (98) hide show
  1. package/dist/{ConnectedNativeDocxComparison-GMQHSY3Z.js → ConnectedNativeDocxComparison-MZX222GC.js} +6 -6
  2. package/dist/{ConnectedNativeDocxComparison-GMQHSY3Z.js.map → ConnectedNativeDocxComparison-MZX222GC.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-HH3PHNXU.cjs → ConnectedNativeDocxComparison-WRO3J6VV.cjs} +7 -7
  4. package/dist/{ConnectedNativeDocxComparison-HH3PHNXU.cjs.map → ConnectedNativeDocxComparison-WRO3J6VV.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-4IAKVBEF.js → ConnectedNativeDocxEditor-OJ6SYZ3W.js} +5 -5
  6. package/dist/{ConnectedNativeDocxEditor-4IAKVBEF.js.map → ConnectedNativeDocxEditor-OJ6SYZ3W.js.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-JNHNZG3P.cjs → ConnectedNativeDocxEditor-XTUJWL25.cjs} +7 -7
  8. package/dist/{ConnectedNativeDocxEditor-JNHNZG3P.cjs.map → ConnectedNativeDocxEditor-XTUJWL25.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-CZZOH667.cjs → ConnectedStreamedWordArtifact-5JURNV4L.cjs} +7 -7
  10. package/dist/ConnectedStreamedWordArtifact-5JURNV4L.cjs.map +1 -0
  11. package/dist/{ConnectedStreamedWordArtifact-GLJCJPTP.js → ConnectedStreamedWordArtifact-KURJRZH3.js} +6 -6
  12. package/dist/{ConnectedStreamedWordArtifact-GLJCJPTP.js.map → ConnectedStreamedWordArtifact-KURJRZH3.js.map} +1 -1
  13. package/dist/{WorkspaceTableView-S2PTTVHL.js → WorkspaceTableView-2XI6FIOO.js} +7 -7
  14. package/dist/WorkspaceTableView-2XI6FIOO.js.map +1 -0
  15. package/dist/{WorkspaceTableView-GIDGNGBW.cjs → WorkspaceTableView-KG4D53SK.cjs} +13 -13
  16. package/dist/WorkspaceTableView-KG4D53SK.cjs.map +1 -0
  17. package/dist/agents/index.cjs +326 -326
  18. package/dist/agents/index.js +4 -4
  19. package/dist/{chunk-X4Y7ZHFB.js → chunk-2GDKBLD5.js} +11 -6
  20. package/dist/chunk-2GDKBLD5.js.map +1 -0
  21. package/dist/{chunk-DXO2RXVQ.cjs → chunk-3FQHFFV5.cjs} +4 -4
  22. package/dist/{chunk-DXO2RXVQ.cjs.map → chunk-3FQHFFV5.cjs.map} +1 -1
  23. package/dist/{chunk-AAVFCPKD.js → chunk-3OATYBZK.js} +4 -4
  24. package/dist/{chunk-AAVFCPKD.js.map → chunk-3OATYBZK.js.map} +1 -1
  25. package/dist/{chunk-AF24CV6J.js → chunk-4I2V55LL.js} +3 -3
  26. package/dist/{chunk-AF24CV6J.js.map → chunk-4I2V55LL.js.map} +1 -1
  27. package/dist/{chunk-VNHLFS6T.cjs → chunk-4KLBM5K5.cjs} +4 -4
  28. package/dist/{chunk-VNHLFS6T.cjs.map → chunk-4KLBM5K5.cjs.map} +1 -1
  29. package/dist/{chunk-BTF4AZMG.js → chunk-57CG33XJ.js} +5 -5
  30. package/dist/chunk-57CG33XJ.js.map +1 -0
  31. package/dist/{chunk-KJVDYWAM.cjs → chunk-6UKNYQ7Q.cjs} +13 -8
  32. package/dist/chunk-6UKNYQ7Q.cjs.map +1 -0
  33. package/dist/{chunk-H3XAHVDT.cjs → chunk-6UZ6YTML.cjs} +6 -6
  34. package/dist/{chunk-H3XAHVDT.cjs.map → chunk-6UZ6YTML.cjs.map} +1 -1
  35. package/dist/{chunk-RTAYJUQM.js → chunk-7RFDYAK7.js} +3 -3
  36. package/dist/{chunk-RTAYJUQM.js.map → chunk-7RFDYAK7.js.map} +1 -1
  37. package/dist/{chunk-ZYGQFD5Y.js → chunk-BSDZXG55.js} +3 -3
  38. package/dist/{chunk-ZYGQFD5Y.js.map → chunk-BSDZXG55.js.map} +1 -1
  39. package/dist/{chunk-I5RK4WAE.cjs → chunk-FGZQUH2Y.cjs} +3 -3
  40. package/dist/{chunk-I5RK4WAE.cjs.map → chunk-FGZQUH2Y.cjs.map} +1 -1
  41. package/dist/{chunk-7S76Q5RK.js → chunk-GA2A7OX6.js} +3 -3
  42. package/dist/{chunk-7S76Q5RK.js.map → chunk-GA2A7OX6.js.map} +1 -1
  43. package/dist/{chunk-BL74GYSA.cjs → chunk-JGCYM3II.cjs} +9 -9
  44. package/dist/{chunk-BL74GYSA.cjs.map → chunk-JGCYM3II.cjs.map} +1 -1
  45. package/dist/{chunk-JUUOJP7I.cjs → chunk-KWJW5TMH.cjs} +5 -5
  46. package/dist/chunk-KWJW5TMH.cjs.map +1 -0
  47. package/dist/{chunk-RHKFCSFC.cjs → chunk-LAGHW4JM.cjs} +24 -10
  48. package/dist/chunk-LAGHW4JM.cjs.map +1 -0
  49. package/dist/{chunk-C6P2QW36.js → chunk-NZIVQ4Q4.js} +4 -4
  50. package/dist/{chunk-C6P2QW36.js.map → chunk-NZIVQ4Q4.js.map} +1 -1
  51. package/dist/{chunk-44FPFTU2.js → chunk-ORUV4MEP.js} +3 -3
  52. package/dist/{chunk-44FPFTU2.js.map → chunk-ORUV4MEP.js.map} +1 -1
  53. package/dist/{chunk-75Z5AUMM.js → chunk-QB6JCNVG.js} +3 -3
  54. package/dist/{chunk-75Z5AUMM.js.map → chunk-QB6JCNVG.js.map} +1 -1
  55. package/dist/{chunk-S4G3DNMA.cjs → chunk-QZTA2M4U.cjs} +9 -9
  56. package/dist/{chunk-S4G3DNMA.cjs.map → chunk-QZTA2M4U.cjs.map} +1 -1
  57. package/dist/{chunk-LYF47OXX.cjs → chunk-T67EFI43.cjs} +5 -5
  58. package/dist/{chunk-LYF47OXX.cjs.map → chunk-T67EFI43.cjs.map} +1 -1
  59. package/dist/{chunk-FDUQQNDT.js → chunk-TDFL676I.js} +25 -11
  60. package/dist/chunk-TDFL676I.js.map +1 -0
  61. package/dist/{chunk-YD3RN2FY.cjs → chunk-U72QI2W3.cjs} +3 -3
  62. package/dist/{chunk-YD3RN2FY.cjs.map → chunk-U72QI2W3.cjs.map} +1 -1
  63. package/dist/{chunk-75UVQKQ5.cjs → chunk-WTGJHS7F.cjs} +48 -48
  64. package/dist/{chunk-75UVQKQ5.cjs.map → chunk-WTGJHS7F.cjs.map} +1 -1
  65. package/dist/{chunk-MKTEVOC3.js → chunk-ZKAIT3M2.js} +4 -4
  66. package/dist/{chunk-MKTEVOC3.js.map → chunk-ZKAIT3M2.js.map} +1 -1
  67. package/dist/connect/docx.cjs +9 -9
  68. package/dist/connect/docx.js +5 -5
  69. package/dist/connect/index.cjs +756 -728
  70. package/dist/connect/index.cjs.map +1 -1
  71. package/dist/connect/index.js +102 -74
  72. package/dist/connect/index.js.map +1 -1
  73. package/dist/connect/viewer.cjs +4 -4
  74. package/dist/connect/viewer.js +4 -4
  75. package/dist/connection/projects/ProjectsListPage.d.ts +3 -2
  76. package/dist/facts/index.cjs +55 -55
  77. package/dist/facts/index.js +3 -3
  78. package/dist/index.cjs +409 -409
  79. package/dist/index.js +8 -8
  80. package/dist/settings/index.cjs +162 -162
  81. package/dist/settings/index.js +2 -2
  82. package/dist/workflow-canvas/index.cjs +20 -18
  83. package/dist/workflow-canvas/index.cjs.map +1 -1
  84. package/dist/workflow-canvas/index.js +8 -6
  85. package/dist/workflow-canvas/index.js.map +1 -1
  86. package/dist/workspaces/index.cjs +43 -43
  87. package/dist/workspaces/index.js +3 -3
  88. package/node_modules/@arbidocs/coedit/package.json +1 -1
  89. package/package.json +5 -5
  90. package/dist/ConnectedStreamedWordArtifact-CZZOH667.cjs.map +0 -1
  91. package/dist/WorkspaceTableView-GIDGNGBW.cjs.map +0 -1
  92. package/dist/WorkspaceTableView-S2PTTVHL.js.map +0 -1
  93. package/dist/chunk-BTF4AZMG.js.map +0 -1
  94. package/dist/chunk-FDUQQNDT.js.map +0 -1
  95. package/dist/chunk-JUUOJP7I.cjs.map +0 -1
  96. package/dist/chunk-KJVDYWAM.cjs.map +0 -1
  97. package/dist/chunk-RHKFCSFC.cjs.map +0 -1
  98. package/dist/chunk-X4Y7ZHFB.js.map +0 -1
@@ -1,17 +1,17 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkLYF47OXX_cjs = require('../chunk-LYF47OXX.cjs');
5
- var chunkKJVDYWAM_cjs = require('../chunk-KJVDYWAM.cjs');
6
- var chunkJUUOJP7I_cjs = require('../chunk-JUUOJP7I.cjs');
4
+ var chunkT67EFI43_cjs = require('../chunk-T67EFI43.cjs');
5
+ var chunk6UKNYQ7Q_cjs = require('../chunk-6UKNYQ7Q.cjs');
6
+ var chunkKWJW5TMH_cjs = require('../chunk-KWJW5TMH.cjs');
7
7
  var chunkPSIKUQYM_cjs = require('../chunk-PSIKUQYM.cjs');
8
- var chunkYD3RN2FY_cjs = require('../chunk-YD3RN2FY.cjs');
8
+ var chunkU72QI2W3_cjs = require('../chunk-U72QI2W3.cjs');
9
9
  var chunkFCWS7I5C_cjs = require('../chunk-FCWS7I5C.cjs');
10
10
  var chunkOU3RGQFX_cjs = require('../chunk-OU3RGQFX.cjs');
11
11
  require('../chunk-UAEYU2NN.cjs');
12
- var chunkRHKFCSFC_cjs = require('../chunk-RHKFCSFC.cjs');
12
+ var chunkLAGHW4JM_cjs = require('../chunk-LAGHW4JM.cjs');
13
13
  var chunk7ZHPLTGK_cjs = require('../chunk-7ZHPLTGK.cjs');
14
- var chunkBL74GYSA_cjs = require('../chunk-BL74GYSA.cjs');
14
+ var chunkJGCYM3II_cjs = require('../chunk-JGCYM3II.cjs');
15
15
  var chunkWPOQLGKJ_cjs = require('../chunk-WPOQLGKJ.cjs');
16
16
  var chunkEWWVKXEQ_cjs = require('../chunk-EWWVKXEQ.cjs');
17
17
  var chunk2WLXQGWC_cjs = require('../chunk-2WLXQGWC.cjs');
@@ -23,7 +23,7 @@ require('../chunk-464YPRAE.cjs');
23
23
  require('../chunk-NML42O7Q.cjs');
24
24
  var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
25
25
  require('../chunk-ZESMRGDV.cjs');
26
- var chunkH3XAHVDT_cjs = require('../chunk-H3XAHVDT.cjs');
26
+ var chunk6UZ6YTML_cjs = require('../chunk-6UZ6YTML.cjs');
27
27
  var chunkC2ECYOPP_cjs = require('../chunk-C2ECYOPP.cjs');
28
28
  var chunkGOWXP5KT_cjs = require('../chunk-GOWXP5KT.cjs');
29
29
  var chunkYBTKLOGG_cjs = require('../chunk-YBTKLOGG.cjs');
@@ -38,14 +38,14 @@ require('../chunk-7G2LJMUG.cjs');
38
38
  var chunkTM2D4XT4_cjs = require('../chunk-TM2D4XT4.cjs');
39
39
  var chunk5Y6V7F6W_cjs = require('../chunk-5Y6V7F6W.cjs');
40
40
  var chunkAXAHA4LL_cjs = require('../chunk-AXAHA4LL.cjs');
41
- var chunkB26FXLMG_cjs = require('../chunk-B26FXLMG.cjs');
42
41
  require('../chunk-VLCY46K6.cjs');
42
+ var chunkB26FXLMG_cjs = require('../chunk-B26FXLMG.cjs');
43
43
  require('../chunk-D54JXTPG.cjs');
44
44
  var chunkJIOHDVWH_cjs = require('../chunk-JIOHDVWH.cjs');
45
45
  var chunkRC25WMVB_cjs = require('../chunk-RC25WMVB.cjs');
46
- var chunkS4G3DNMA_cjs = require('../chunk-S4G3DNMA.cjs');
46
+ var chunkQZTA2M4U_cjs = require('../chunk-QZTA2M4U.cjs');
47
47
  var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
48
- var chunkI5RK4WAE_cjs = require('../chunk-I5RK4WAE.cjs');
48
+ var chunkFGZQUH2Y_cjs = require('../chunk-FGZQUH2Y.cjs');
49
49
  var chunkKKT53TZQ_cjs = require('../chunk-KKT53TZQ.cjs');
50
50
  var chunkAQPZ4QMV_cjs = require('../chunk-AQPZ4QMV.cjs');
51
51
  require('../chunk-SIB6C7P7.cjs');
@@ -58,9 +58,6 @@ var chunkLKK52DEY_cjs = require('../chunk-LKK52DEY.cjs');
58
58
  var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
59
59
  var chunkBYJUI4AT_cjs = require('../chunk-BYJUI4AT.cjs');
60
60
  var chunkCG757WKY_cjs = require('../chunk-CG757WKY.cjs');
61
- var chunkW3PSIIMN_cjs = require('../chunk-W3PSIIMN.cjs');
62
- var chunkQUMUAJ2P_cjs = require('../chunk-QUMUAJ2P.cjs');
63
- var chunkVZOOGA47_cjs = require('../chunk-VZOOGA47.cjs');
64
61
  var chunkKXSXIQSW_cjs = require('../chunk-KXSXIQSW.cjs');
65
62
  var chunkEGSSLWNZ_cjs = require('../chunk-EGSSLWNZ.cjs');
66
63
  var chunkYOMT5FFH_cjs = require('../chunk-YOMT5FFH.cjs');
@@ -86,6 +83,9 @@ var chunk2QQUGL2V_cjs = require('../chunk-2QQUGL2V.cjs');
86
83
  var chunkSI222Z3A_cjs = require('../chunk-SI222Z3A.cjs');
87
84
  var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
88
85
  require('../chunk-MHVNT4J3.cjs');
86
+ var chunkW3PSIIMN_cjs = require('../chunk-W3PSIIMN.cjs');
87
+ var chunkQUMUAJ2P_cjs = require('../chunk-QUMUAJ2P.cjs');
88
+ var chunkVZOOGA47_cjs = require('../chunk-VZOOGA47.cjs');
89
89
  require('../chunk-DES3K4SD.cjs');
90
90
  var reactQuery = require('@tanstack/react-query');
91
91
  var react = require('@arbidocs/react');
@@ -163,9 +163,9 @@ var ConnectedUserEntity = React7.memo(function ConnectedUserEntity2({
163
163
  if (isMe) openSettings();
164
164
  else openDirectChat?.(user.external_id);
165
165
  };
166
- const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunkH3XAHVDT_cjs.EntityTooltip, { children: [
166
+ const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunk6UZ6YTML_cjs.EntityTooltip, { children: [
167
167
  /* @__PURE__ */ jsxRuntime.jsx(
168
- chunkH3XAHVDT_cjs.EntityTooltipHeader,
168
+ chunk6UZ6YTML_cjs.EntityTooltipHeader,
169
169
  {
170
170
  lead: /* @__PURE__ */ jsxRuntime.jsxs(
171
171
  ui.Avatar,
@@ -196,13 +196,13 @@ var ConnectedUserEntity = React7.memo(function ConnectedUserEntity2({
196
196
  subtitle: user.email
197
197
  }
198
198
  ),
199
- userIsAgent && agentOwner && /* @__PURE__ */ jsxRuntime.jsx(chunkH3XAHVDT_cjs.EntityTooltipSection, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkH3XAHVDT_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(react.ArbiBotHeadIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }), children: [
199
+ userIsAgent && agentOwner && /* @__PURE__ */ jsxRuntime.jsx(chunk6UZ6YTML_cjs.EntityTooltipSection, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunk6UZ6YTML_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(react.ArbiBotHeadIcon, { className: "w-3.5 h-3.5 flex-shrink-0" }), children: [
200
200
  "Agent of",
201
201
  " ",
202
202
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: ui.getUserDisplayName(agentOwner) })
203
203
  ] }) }),
204
204
  sharedWorkspaces.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
205
- chunkH3XAHVDT_cjs.EntityTooltipSection,
205
+ chunk6UZ6YTML_cjs.EntityTooltipSection,
206
206
  {
207
207
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Users, { className: "w-3.5 h-3.5 flex-shrink-0" }),
208
208
  heading: "Shared Workspaces",
@@ -233,7 +233,7 @@ var ConnectedUserEntity = React7.memo(function ConnectedUserEntity2({
233
233
  ] })
234
234
  }
235
235
  ),
236
- interactive && variant === "pill" && canChat && /* @__PURE__ */ jsxRuntime.jsx(chunkH3XAHVDT_cjs.EntityTooltipHint, { isRuled: true, icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleMore, { className: "w-3 h-3" }), children: "Click to send message" })
236
+ interactive && variant === "pill" && canChat && /* @__PURE__ */ jsxRuntime.jsx(chunk6UZ6YTML_cjs.EntityTooltipHint, { isRuled: true, icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleMore, { className: "w-3 h-3" }), children: "Click to send message" })
237
237
  ] });
238
238
  return /* @__PURE__ */ jsxRuntime.jsx(
239
239
  ui.UserEntity,
@@ -368,7 +368,7 @@ function ConnectedWorkspaceActivity({
368
368
  [feed.data]
369
369
  );
370
370
  return /* @__PURE__ */ jsxRuntime.jsx(
371
- chunkH3XAHVDT_cjs.WorkspaceActivityList,
371
+ chunk6UZ6YTML_cjs.WorkspaceActivityList,
372
372
  {
373
373
  ...listProps,
374
374
  items,
@@ -1088,7 +1088,7 @@ function NotificationCenter({
1088
1088
  }
1089
1089
  ];
1090
1090
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full bg-background", "data-testid": "notifications-page", children: [
1091
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
1091
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
1092
1092
  chunkMEMWZ72Y_cjs.TabHeader,
1093
1093
  {
1094
1094
  tabs,
@@ -1401,7 +1401,7 @@ function ConnectedWorkspaceNotificationMenu({
1401
1401
  }, [error, notify17]);
1402
1402
  if (!workspaceId) return null;
1403
1403
  return /* @__PURE__ */ jsxRuntime.jsx(
1404
- chunkH3XAHVDT_cjs.WorkspaceNotificationMenu,
1404
+ chunk6UZ6YTML_cjs.WorkspaceNotificationMenu,
1405
1405
  {
1406
1406
  ...menuProps,
1407
1407
  level,
@@ -1420,7 +1420,7 @@ function ConnectedThreadFollow({
1420
1420
  enabled: live
1421
1421
  });
1422
1422
  if (!conversationId) return null;
1423
- const Control = as === "menu-item" ? chunkH3XAHVDT_cjs.ThreadFollowMenuItem : chunkH3XAHVDT_cjs.ThreadFollowButton;
1423
+ const Control = as === "menu-item" ? chunk6UZ6YTML_cjs.ThreadFollowMenuItem : chunk6UZ6YTML_cjs.ThreadFollowButton;
1424
1424
  return /* @__PURE__ */ jsxRuntime.jsx(
1425
1425
  Control,
1426
1426
  {
@@ -1493,7 +1493,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
1493
1493
  onChange: (e) => {
1494
1494
  const file = e.target.files?.[0];
1495
1495
  e.target.value = "";
1496
- if (file) void add(() => chunkS4G3DNMA_cjs.importSkillFile(file));
1496
+ if (file) void add(() => chunkQZTA2M4U_cjs.importSkillFile(file));
1497
1497
  }
1498
1498
  }
1499
1499
  ),
@@ -1518,7 +1518,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
1518
1518
  className: "space-y-2",
1519
1519
  onSubmit: (e) => {
1520
1520
  e.preventDefault();
1521
- if (url.trim()) void add(() => chunkS4G3DNMA_cjs.importSkillFromUrl(url));
1521
+ if (url.trim()) void add(() => chunkQZTA2M4U_cjs.importSkillFromUrl(url));
1522
1522
  },
1523
1523
  children: [
1524
1524
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "skills-add-url", children: l.fromLink }),
@@ -1581,9 +1581,9 @@ function ConnectedSkillsLibrary({
1581
1581
  const [type, setType] = React7.useState("all");
1582
1582
  const [view, setView] = React7.useState("gallery");
1583
1583
  const [isBusy, setIsBusy] = React7.useState(false);
1584
- const all = React7.useMemo(() => chunkS4G3DNMA_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
1584
+ const all = React7.useMemo(() => chunkQZTA2M4U_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
1585
1585
  const shown = React7.useMemo(
1586
- () => chunkS4G3DNMA_cjs.filterLibrarySkills(all, { query, source, type }),
1586
+ () => chunkQZTA2M4U_cjs.filterLibrarySkills(all, { query, source, type }),
1587
1587
  [all, query, source, type]
1588
1588
  );
1589
1589
  const current2 = all.find((s) => s.slug === selected) ?? null;
@@ -1594,21 +1594,21 @@ function ConnectedSkillsLibrary({
1594
1594
  const count2 = (s) => all.filter((x) => x.source === s).length;
1595
1595
  const sourceOptions = [
1596
1596
  { id: "all", label: "All", count: all.length },
1597
- { id: "builtin", label: chunkS4G3DNMA_cjs.SKILL_SOURCE_LABELS.builtin, count: count2("builtin") },
1598
- { id: "mine", label: chunkS4G3DNMA_cjs.SKILL_SOURCE_LABELS.mine, count: count2("mine") },
1599
- { id: "shared", label: chunkS4G3DNMA_cjs.SKILL_SOURCE_LABELS.shared, count: count2("shared") }
1597
+ { id: "builtin", label: chunkQZTA2M4U_cjs.SKILL_SOURCE_LABELS.builtin, count: count2("builtin") },
1598
+ { id: "mine", label: chunkQZTA2M4U_cjs.SKILL_SOURCE_LABELS.mine, count: count2("mine") },
1599
+ { id: "shared", label: chunkQZTA2M4U_cjs.SKILL_SOURCE_LABELS.shared, count: count2("shared") }
1600
1600
  ];
1601
1601
  const types = [...new Set(all.map((s) => s.type))];
1602
1602
  const typeOptions = [
1603
1603
  { id: "all", label: "Any kind" },
1604
- ...types.map((t) => ({ id: t, label: chunkS4G3DNMA_cjs.SKILL_TYPE_LABELS[t] ?? t }))
1604
+ ...types.map((t) => ({ id: t, label: chunkQZTA2M4U_cjs.SKILL_TYPE_LABELS[t] ?? t }))
1605
1605
  ];
1606
1606
  const pick = (slug) => {
1607
1607
  setSelected(slug);
1608
1608
  setMode("detail");
1609
1609
  };
1610
1610
  const markdownOf = async (skill) => {
1611
- if (!skill.docExtId) return chunkS4G3DNMA_cjs.workflowToSkillMarkdown(skill.workflow);
1611
+ if (!skill.docExtId) return chunkQZTA2M4U_cjs.workflowToSkillMarkdown(skill.workflow);
1612
1612
  const response = await arbi.documents.download(skill.docExtId);
1613
1613
  if (!response.ok) throw new Error(`Could not read the skill (${response.status})`);
1614
1614
  return response.text();
@@ -1672,7 +1672,7 @@ function ConnectedSkillsLibrary({
1672
1672
  try {
1673
1673
  documentTools.downloadBlob(
1674
1674
  new Blob([await markdownOf(skill)], { type: "text/markdown" }),
1675
- chunkS4G3DNMA_cjs.SKILL_MAIN_FILENAME
1675
+ chunkQZTA2M4U_cjs.SKILL_MAIN_FILENAME
1676
1676
  );
1677
1677
  } catch (error) {
1678
1678
  notify17(errorText(error, "Could not export the skill"), "error");
@@ -1713,10 +1713,10 @@ function ConnectedSkillsLibrary({
1713
1713
  }
1714
1714
  )
1715
1715
  ] }),
1716
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.SkillViewToggle, { value: view, onChange: setView })
1716
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.SkillViewToggle, { value: view, onChange: setView })
1717
1717
  ] }),
1718
1718
  /* @__PURE__ */ jsxRuntime.jsx(
1719
- chunkS4G3DNMA_cjs.SkillFilterChips,
1719
+ chunkQZTA2M4U_cjs.SkillFilterChips,
1720
1720
  {
1721
1721
  label: "Show",
1722
1722
  value: source,
@@ -1725,7 +1725,7 @@ function ConnectedSkillsLibrary({
1725
1725
  }
1726
1726
  ),
1727
1727
  types.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
1728
- chunkS4G3DNMA_cjs.SkillFilterChips,
1728
+ chunkQZTA2M4U_cjs.SkillFilterChips,
1729
1729
  {
1730
1730
  label: "Kind",
1731
1731
  value: type,
@@ -1772,12 +1772,12 @@ function ConnectedSkillsLibrary({
1772
1772
  view === "gallery" ? "grid grid-cols-[repeat(auto-fill,minmax(9.5rem,1fr))]" : "flex flex-col"
1773
1773
  ),
1774
1774
  children: shown.map((skill) => /* @__PURE__ */ jsxRuntime.jsx(
1775
- chunkS4G3DNMA_cjs.SkillTile,
1775
+ chunkQZTA2M4U_cjs.SkillTile,
1776
1776
  {
1777
1777
  name: skill.title,
1778
1778
  testId: `skill-tile-${skill.slug}`,
1779
1779
  description: skill.description,
1780
- sourceLabel: skill.isShared ? `${chunkS4G3DNMA_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkS4G3DNMA_cjs.SKILL_SOURCE_LABELS[skill.source],
1780
+ sourceLabel: skill.isShared ? `${chunkQZTA2M4U_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkQZTA2M4U_cjs.SKILL_SOURCE_LABELS[skill.source],
1781
1781
  type: skill.type,
1782
1782
  icon,
1783
1783
  layout: view,
@@ -1812,7 +1812,7 @@ function ConnectedSkillsLibrary({
1812
1812
  }
1813
1813
  ),
1814
1814
  mode === "new" && /* @__PURE__ */ jsxRuntime.jsx(
1815
- chunkS4G3DNMA_cjs.SkillGenerateForm,
1815
+ chunkQZTA2M4U_cjs.SkillGenerateForm,
1816
1816
  {
1817
1817
  icon,
1818
1818
  onGenerate: (desc) => {
@@ -1839,11 +1839,11 @@ function ConnectedSkillsLibrary({
1839
1839
  ),
1840
1840
  mode === "add" && /* @__PURE__ */ jsxRuntime.jsx(ConnectedSkillUpload, { onDone: done }),
1841
1841
  mode === "detail" && current2 && /* @__PURE__ */ jsxRuntime.jsx(
1842
- chunkS4G3DNMA_cjs.SkillLibraryDetail,
1842
+ chunkQZTA2M4U_cjs.SkillLibraryDetail,
1843
1843
  {
1844
1844
  skill: current2,
1845
1845
  icon,
1846
- instructions: current2.docExtId ? currentText ? chunkS4G3DNMA_cjs.parseSkillFrontmatter(currentText, chunkS4G3DNMA_cjs.SKILL_MAIN_FILENAME).content : "" : current2.workflow.run.kind === "prompt" ? current2.workflow.run.promptTemplate : "",
1846
+ instructions: current2.docExtId ? currentText ? chunkQZTA2M4U_cjs.parseSkillFrontmatter(currentText, chunkQZTA2M4U_cjs.SKILL_MAIN_FILENAME).content : "" : current2.workflow.run.kind === "prompt" ? current2.workflow.run.promptTemplate : "",
1847
1847
  isLoading: !!current2.docExtId && textLoading,
1848
1848
  actions: {
1849
1849
  onRun: () => onRun(current2.slug),
@@ -1878,7 +1878,7 @@ function SkillEditor({
1878
1878
  const [seeded, setSeeded] = React7.useState(!isEditing);
1879
1879
  const [nameError, setNameError] = React7.useState(null);
1880
1880
  if (isEditing && !seeded && text2 !== void 0) {
1881
- const parsed = chunkS4G3DNMA_cjs.parseSkillFrontmatter(text2, chunkS4G3DNMA_cjs.SKILL_MAIN_FILENAME);
1881
+ const parsed = chunkQZTA2M4U_cjs.parseSkillFrontmatter(text2, chunkQZTA2M4U_cjs.SKILL_MAIN_FILENAME);
1882
1882
  setDescription(parsed.description ?? "");
1883
1883
  setBody(parsed.content ?? "");
1884
1884
  setSeeded(true);
@@ -1892,15 +1892,15 @@ function SkillEditor({
1892
1892
  notify17("Add a short description.", "error");
1893
1893
  return;
1894
1894
  }
1895
- const slug = chunkS4G3DNMA_cjs.skillSlug(name);
1895
+ const slug = chunkQZTA2M4U_cjs.skillSlug(name);
1896
1896
  try {
1897
- await onSave(slug, chunkS4G3DNMA_cjs.serializeSkill({ name: slug, description, body }), isEditing);
1897
+ await onSave(slug, chunkQZTA2M4U_cjs.serializeSkill({ name: slug, description, body }), isEditing);
1898
1898
  } catch (err) {
1899
1899
  notify17(errorText(err, "Could not save the skill"), "error");
1900
1900
  }
1901
1901
  };
1902
1902
  return /* @__PURE__ */ jsxRuntime.jsx(
1903
- chunkS4G3DNMA_cjs.SkillEditForm,
1903
+ chunkQZTA2M4U_cjs.SkillEditForm,
1904
1904
  {
1905
1905
  name,
1906
1906
  onNameChange: setName,
@@ -1936,9 +1936,9 @@ function ConnectedAgentCreator({
1936
1936
  agent,
1937
1937
  initialName,
1938
1938
  onSaved,
1939
- capabilities = chunkS4G3DNMA_cjs.DEFAULT_AGENT_CAPABILITIES,
1940
- templates = chunkS4G3DNMA_cjs.DEFAULT_AGENT_TEMPLATES,
1941
- types = chunkS4G3DNMA_cjs.DEFAULT_AGENT_TYPES,
1939
+ capabilities = chunkQZTA2M4U_cjs.DEFAULT_AGENT_CAPABILITIES,
1940
+ templates = chunkQZTA2M4U_cjs.DEFAULT_AGENT_TEMPLATES,
1941
+ types = chunkQZTA2M4U_cjs.DEFAULT_AGENT_TYPES,
1942
1942
  canRevokeWorkspaces = false,
1943
1943
  labels
1944
1944
  }) {
@@ -1980,7 +1980,7 @@ function ConnectedAgentCreator({
1980
1980
  const initialValues = React7.useMemo(
1981
1981
  () => ({
1982
1982
  name: agent?.given_name ?? initialName ?? "",
1983
- persona: isEdit ? chunkS4G3DNMA_cjs.stripPersonaPreamble(String(agents.PERSONA ?? "")) : "",
1983
+ persona: isEdit ? chunkQZTA2M4U_cjs.stripPersonaPreamble(String(agents.PERSONA ?? "")) : "",
1984
1984
  modelName: String(agents.AGENT_MODEL_NAME ?? ""),
1985
1985
  capabilities: Object.fromEntries(capabilities.map(({ key }) => [key, Boolean(agents[key])])),
1986
1986
  type: "builtin",
@@ -1999,7 +1999,7 @@ function ConnectedAgentCreator({
1999
1999
  try {
2000
2000
  let agentExtId = agent?.external_id ?? early?.id ?? "";
2001
2001
  if (!agentExtId) {
2002
- if (!chunkS4G3DNMA_cjs.isValidAgentName(values.name)) {
2002
+ if (!chunkQZTA2M4U_cjs.isValidAgentName(values.name)) {
2003
2003
  notify17("Give the agent a name first.", "error");
2004
2004
  return;
2005
2005
  }
@@ -2035,7 +2035,7 @@ function ConnectedAgentCreator({
2035
2035
  title: `agent-${name}`,
2036
2036
  sections: {
2037
2037
  Agents: {
2038
- PERSONA: chunkS4G3DNMA_cjs.composePersona(name, values.persona),
2038
+ PERSONA: chunkQZTA2M4U_cjs.composePersona(name, values.persona),
2039
2039
  ...values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {},
2040
2040
  ...Object.fromEntries(capabilities.map(({ key }) => [key, !!values.capabilities[key]])),
2041
2041
  ENABLED_SKILLS: values.capabilities.SKILLS_ENABLED && skills.length ? skills : null,
@@ -2058,7 +2058,7 @@ function ConnectedAgentCreator({
2058
2058
  };
2059
2059
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2060
2060
  /* @__PURE__ */ jsxRuntime.jsx(
2061
- chunkS4G3DNMA_cjs.AgentCreator,
2061
+ chunkQZTA2M4U_cjs.AgentCreator,
2062
2062
  {
2063
2063
  open: ready,
2064
2064
  onOpenChange,
@@ -2074,11 +2074,11 @@ function ConnectedAgentCreator({
2074
2074
  ) : void 0,
2075
2075
  revokingWorkspaceId: revokeAccess.isPending ? revokeAccess.variables?.workspaceId : void 0,
2076
2076
  avatar: (values) => /* @__PURE__ */ jsxRuntime.jsx(
2077
- chunkS4G3DNMA_cjs.AgentAvatarField,
2077
+ chunkQZTA2M4U_cjs.AgentAvatarField,
2078
2078
  {
2079
2079
  picture,
2080
2080
  isBusy: avatarBusy,
2081
- canGenerate: isEdit || chunkS4G3DNMA_cjs.isValidAgentName(values.name),
2081
+ canGenerate: isEdit || chunkQZTA2M4U_cjs.isValidAgentName(values.name),
2082
2082
  onGenerate: () => handleGenerateAvatar(values)
2083
2083
  }
2084
2084
  ),
@@ -2130,7 +2130,7 @@ function ConnectedAgentCreator({
2130
2130
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: "Connect your agent" }),
2131
2131
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: "This key is shown once. Run the script on the machine that will host the agent." })
2132
2132
  ] }),
2133
- connect && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.AgentConnectInstructions, { email: connect.email, signingKey: connect.signingKey })
2133
+ connect && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.AgentConnectInstructions, { email: connect.email, signingKey: connect.signingKey })
2134
2134
  ]
2135
2135
  }
2136
2136
  ) })
@@ -2167,7 +2167,7 @@ function ConnectedWorkflowHistory({
2167
2167
  const { openConversation } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
2168
2168
  const { data: runs = [], isLoading } = react.useWorkflowRuns(workflow?.external_id);
2169
2169
  return /* @__PURE__ */ jsxRuntime.jsx(
2170
- chunkS4G3DNMA_cjs.TaskRunsDialog,
2170
+ chunkQZTA2M4U_cjs.TaskRunsDialog,
2171
2171
  {
2172
2172
  inline,
2173
2173
  hideHeader,
@@ -2203,14 +2203,14 @@ function ConnectedTaskActivityDialog({
2203
2203
  const activity = react.useConversationActivity(conversationId, { live });
2204
2204
  const { data: agents = [] } = react.useAgents();
2205
2205
  const { userId } = chunkIWT4QVQL_cjs.useConnectedWorkspace();
2206
- const { members } = chunkBL74GYSA_cjs.useConnectedWorkspaceRole();
2206
+ const { members } = chunkJGCYM3II_cjs.useConnectedWorkspaceRole();
2207
2207
  const renderPerson = React7.useCallback(
2208
2208
  (id) => {
2209
2209
  const isMe = !!id && id === userId;
2210
2210
  const member = members.find((m) => m.user.external_id === id)?.user;
2211
2211
  const name = member && [member.given_name, member.family_name].filter(Boolean).join(" ") || member?.email;
2212
2212
  const person = { id, label: isMe ? "You" : name || "Someone", isMe };
2213
- return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkI5RK4WAE_cjs.PersonPill, { person });
2213
+ return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkFGZQUH2Y_cjs.PersonPill, { person });
2214
2214
  },
2215
2215
  [renderTaskPerson, userId, members]
2216
2216
  );
@@ -2219,7 +2219,7 @@ function ConnectedTaskActivityDialog({
2219
2219
  [agents]
2220
2220
  );
2221
2221
  return /* @__PURE__ */ jsxRuntime.jsx(
2222
- chunkS4G3DNMA_cjs.TaskActivityDialog,
2222
+ chunkQZTA2M4U_cjs.TaskActivityDialog,
2223
2223
  {
2224
2224
  open: true,
2225
2225
  onOpenChange: (open) => !open && onClose(),
@@ -2365,7 +2365,7 @@ function useWorkflowThread(workflow, options2 = {}) {
2365
2365
  );
2366
2366
  const conversation = conversations.data?.find((c) => c.external_id === threadId);
2367
2367
  const steps = React7.useMemo(
2368
- () => chunkEZLZ3MDU_cjs.workflowSteps(workflow).length > 0 ? chunkEZLZ3MDU_cjs.workflowSteps(workflow) : chunkS4G3DNMA_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
2368
+ () => chunkEZLZ3MDU_cjs.workflowSteps(workflow).length > 0 ? chunkEZLZ3MDU_cjs.workflowSteps(workflow) : chunkQZTA2M4U_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
2369
2369
  [workflow, conversation?.plan?.steps]
2370
2370
  );
2371
2371
  const activity = react.useConversationActivity(threadId, { live: !!threadId });
@@ -2425,7 +2425,7 @@ function useWorkflowThread(workflow, options2 = {}) {
2425
2425
  criteria: [],
2426
2426
  max_passes: 3,
2427
2427
  documents: [],
2428
- steps: chunkS4G3DNMA_cjs.toPlanSteps(workflow, {
2428
+ steps: chunkQZTA2M4U_cjs.toPlanSteps(workflow, {
2429
2429
  inputs: values,
2430
2430
  resolveWorkflow: options2.resolveWorkflow,
2431
2431
  compose: options2.compose
@@ -2512,7 +2512,7 @@ function useWorkflowThread(workflow, options2 = {}) {
2512
2512
  const anyRunning = Object.values(states).some((s) => s.status === "running");
2513
2513
  const needsStart = !threadId || idle && !anyRunning;
2514
2514
  const runError = idle ? conversation?.last_error ?? null : null;
2515
- const view = chunkS4G3DNMA_cjs.useWorkflowView({
2515
+ const view = chunkQZTA2M4U_cjs.useWorkflowView({
2516
2516
  steps,
2517
2517
  states,
2518
2518
  inputs,
@@ -2678,7 +2678,7 @@ function WorkflowWordDialog({
2678
2678
  title: title ?? labels.wordTitle,
2679
2679
  size: "xl",
2680
2680
  testId: "workflow-word-dialog",
2681
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkBL74GYSA_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2681
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkJGCYM3II_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2682
2682
  }
2683
2683
  );
2684
2684
  }
@@ -3000,7 +3000,7 @@ function ConnectedWorkflowRunner({
3000
3000
  );
3001
3001
  };
3002
3002
  const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
3003
- chunkS4G3DNMA_cjs.WorkflowRunner,
3003
+ chunkQZTA2M4U_cjs.WorkflowRunner,
3004
3004
  {
3005
3005
  people,
3006
3006
  ...runnerProps,
@@ -3046,7 +3046,7 @@ function ConnectedWorkflowRunner({
3046
3046
  ) }),
3047
3047
  inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3048
3048
  /* @__PURE__ */ jsxRuntime.jsx(
3049
- chunkS4G3DNMA_cjs.WorkflowStepBar,
3049
+ chunkQZTA2M4U_cjs.WorkflowStepBar,
3050
3050
  {
3051
3051
  run: view,
3052
3052
  levels: chunkEZLZ3MDU_cjs.stepLevels(view.steps),
@@ -3217,10 +3217,10 @@ function cascadeTagCombination(tags, previous, next) {
3217
3217
  function tagCombinationMatches(combination, items) {
3218
3218
  if (!isCombining(combination)) return void 0;
3219
3219
  const pass = (list) => new Set(
3220
- chunkRHKFCSFC_cjs.applyInvertedIndexFilter(
3220
+ chunkLAGHW4JM_cjs.applyInvertedIndexFilter(
3221
3221
  [...list],
3222
3222
  combination,
3223
- chunkRHKFCSFC_cjs.buildInvertedIndex(
3223
+ chunkLAGHW4JM_cjs.buildInvertedIndex(
3224
3224
  [...list],
3225
3225
  (item) => item.id,
3226
3226
  (item) => item.tagIds
@@ -3337,7 +3337,7 @@ function ConnectedTagTable({
3337
3337
  const fail = (fallback) => (e) => notify17(browser.refusalReason(e, fallback), "error");
3338
3338
  const snapshot3 = (data) => {
3339
3339
  const title = exportTitle ?? ui.tagKindTitle(kind, { plural: true });
3340
- const bytes = chunkH3XAHVDT_cjs.tagTableDocx(data, {
3340
+ const bytes = chunk6UZ6YTML_cjs.tagTableDocx(data, {
3341
3341
  title,
3342
3342
  nameOf: (id) => people.find((p) => p.value === id)?.label
3343
3343
  });
@@ -3346,7 +3346,7 @@ function ConnectedTagTable({
3346
3346
  return { blob: new Blob([bytes], { type: chunkJIOHDVWH_cjs.DOCX_MIME_TYPE }), name };
3347
3347
  };
3348
3348
  return /* @__PURE__ */ jsxRuntime.jsx(
3349
- chunkH3XAHVDT_cjs.TagTable,
3349
+ chunk6UZ6YTML_cjs.TagTable,
3350
3350
  {
3351
3351
  ...props,
3352
3352
  table,
@@ -3387,7 +3387,7 @@ function DocTagPassages({ docId, tagId, label, docOf, testId }) {
3387
3387
  const [open, setOpen] = React7.useState(false);
3388
3388
  const doctag = docOf(docId)?.doctags?.find((dt) => dt.tag_ext_id === tagId);
3389
3389
  const citations = React7.useMemo(
3390
- () => chunkYD3RN2FY_cjs.toFactCitations(doctag?.citations) ?? [],
3390
+ () => chunkU72QI2W3_cjs.toFactCitations(doctag?.citations) ?? [],
3391
3391
  [doctag?.citations]
3392
3392
  );
3393
3393
  const { quoteFor, orderOf } = react.usePassageQuotes(
@@ -3396,7 +3396,7 @@ function DocTagPassages({ docId, tagId, label, docOf, testId }) {
3396
3396
  const { openDocument } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
3397
3397
  const viewingPassageId = react.useArbiSessionState((s) => s.viewingDocument?.passageId ?? null);
3398
3398
  const id = testId ?? `doctag-passages-${docId}`;
3399
- const refOf = (cited) => chunkYD3RN2FY_cjs.citedVersionRef(cited.doc_ext_id, cited.version, docOf(cited.doc_ext_id)?.current_version);
3399
+ const refOf = (cited) => chunkU72QI2W3_cjs.citedVersionRef(cited.doc_ext_id, cited.version, docOf(cited.doc_ext_id)?.current_version);
3400
3400
  const ordered = (cited) => [...cited.chunks].sort((a, b) => {
3401
3401
  const oa = orderOf(a.chunk_id);
3402
3402
  const ob = orderOf(b.chunk_id);
@@ -3427,7 +3427,7 @@ function DocTagPassages({ docId, tagId, label, docOf, testId }) {
3427
3427
  const doc = docOf(cited.doc_ext_id);
3428
3428
  const passages = ordered(cited);
3429
3429
  return /* @__PURE__ */ jsxRuntime.jsx(
3430
- chunkYD3RN2FY_cjs.FactSourceGroup,
3430
+ chunkU72QI2W3_cjs.FactSourceGroup,
3431
3431
  {
3432
3432
  docId: cited.doc_ext_id,
3433
3433
  hasPassages: passages.length > 0,
@@ -3484,9 +3484,9 @@ function GlossaryExport({ labelId, nameOf }) {
3484
3484
  const narrowed = agreements.find((a) => a.id === narrowTo);
3485
3485
  const title = narrowed ? `Glossary - ${narrowed.name}` : "Glossary";
3486
3486
  const download = (format) => {
3487
- const entries = chunkH3XAHVDT_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
3488
- const blob = format === "docx" ? new Blob([chunkH3XAHVDT_cjs.glossaryDocx(entries, { title })], { type: chunkJIOHDVWH_cjs.DOCX_MIME_TYPE }) : new Blob([chunkH3XAHVDT_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
3489
- documentTools.downloadBlob(blob, chunkH3XAHVDT_cjs.glossaryFileName(title, format));
3487
+ const entries = chunk6UZ6YTML_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
3488
+ const blob = format === "docx" ? new Blob([chunk6UZ6YTML_cjs.glossaryDocx(entries, { title })], { type: chunkJIOHDVWH_cjs.DOCX_MIME_TYPE }) : new Blob([chunk6UZ6YTML_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
3489
+ documentTools.downloadBlob(blob, chunk6UZ6YTML_cjs.glossaryFileName(title, format));
3490
3490
  };
3491
3491
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", "data-testid": "tags-glossary", children: [
3492
3492
  agreements.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -4272,7 +4272,7 @@ var DocumentSharedCell = React7.memo(function DocumentSharedCell2({
4272
4272
  [document2.external_id, onToggle]
4273
4273
  );
4274
4274
  return /* @__PURE__ */ jsxRuntime.jsx(
4275
- chunkH3XAHVDT_cjs.SharedCell,
4275
+ chunk6UZ6YTML_cjs.SharedCell,
4276
4276
  {
4277
4277
  item: document2,
4278
4278
  onToggle: handleToggle,
@@ -4855,7 +4855,7 @@ function TagFilterChips({
4855
4855
  const name = (id) => tags.find((t) => t.external_id === id)?.name ?? id;
4856
4856
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", "data-testid": "tags-filter-chips", children: [
4857
4857
  set2.map(([id, state]) => /* @__PURE__ */ jsxRuntime.jsx(
4858
- chunkRHKFCSFC_cjs.FilterChip,
4858
+ chunkLAGHW4JM_cjs.FilterChip,
4859
4859
  {
4860
4860
  label: name(id),
4861
4861
  state,
@@ -4983,7 +4983,7 @@ function KindSection({
4983
4983
  {
4984
4984
  testId: `tags-kind-${kind}`,
4985
4985
  title: ui.tagKindTitle(kind, { plural: true }),
4986
- description: chunkH3XAHVDT_cjs.tagKindDescription(kind),
4986
+ description: chunk6UZ6YTML_cjs.tagKindDescription(kind),
4987
4987
  actions: picker,
4988
4988
  children: [
4989
4989
  browser.isEntityTag({ kind }) && extractingCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -4994,9 +4994,9 @@ function KindSection({
4994
4994
  children: [
4995
4995
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }),
4996
4996
  "Extracting ",
4997
- chunkH3XAHVDT_cjs.entitiesPhrase().toLowerCase(),
4997
+ chunk6UZ6YTML_cjs.entitiesPhrase().toLowerCase(),
4998
4998
  " from ",
4999
- chunkH3XAHVDT_cjs.documentCount(extractingCount),
4999
+ chunk6UZ6YTML_cjs.documentCount(extractingCount),
5000
5000
  "\u2026"
5001
5001
  ]
5002
5002
  }
@@ -5014,7 +5014,7 @@ function KindSection({
5014
5014
  onOpenDocument: (id) => openDocument(id),
5015
5015
  onOpenFact: ctx.onOpenFact,
5016
5016
  onOpenThread: (id) => openConversation(id),
5017
- labels: chunkH3XAHVDT_cjs.tagTableLabels(kind),
5017
+ labels: chunk6UZ6YTML_cjs.tagTableLabels(kind),
5018
5018
  testId: `tags-table-${kind}`
5019
5019
  }
5020
5020
  )
@@ -5116,12 +5116,12 @@ function TagSection({
5116
5116
  onOpenDocument: (id) => openDocument(id),
5117
5117
  onOpenFact: ctx.onOpenFact,
5118
5118
  onOpenThread: (id) => openConversation(id),
5119
- labels: chunkH3XAHVDT_cjs.tagTableLabels(tag.kind),
5119
+ labels: chunk6UZ6YTML_cjs.tagTableLabels(tag.kind),
5120
5120
  testId: "tags-rows"
5121
5121
  }
5122
5122
  ),
5123
5123
  /* @__PURE__ */ jsxRuntime.jsx(
5124
- chunkH3XAHVDT_cjs.TagDetail,
5124
+ chunk6UZ6YTML_cjs.TagDetail,
5125
5125
  {
5126
5126
  row: detailRow && narrowTagRow(detailRow, ctx.filter.matches),
5127
5127
  fields: schema.data?.fields ?? [],
@@ -5133,10 +5133,10 @@ function TagSection({
5133
5133
  onOpenDocument: (id) => openDocument(id),
5134
5134
  onOpenFact: ctx.onOpenFact,
5135
5135
  onOpenThread: (id) => openConversation(id),
5136
- noteLabel: chunkH3XAHVDT_cjs.tagNoteLabel(tag.kind),
5136
+ noteLabel: chunk6UZ6YTML_cjs.tagNoteLabel(tag.kind),
5137
5137
  noteIsValue: tag.kind === "annotation",
5138
5138
  renderPassages: (d, label) => renderPassages(d.doc_ext_id, label),
5139
- labels: chunkH3XAHVDT_cjs.tagDetailLabels(),
5139
+ labels: chunk6UZ6YTML_cjs.tagDetailLabels(),
5140
5140
  testId: "tags-detail"
5141
5141
  }
5142
5142
  )
@@ -5224,7 +5224,7 @@ function ConnectedTagsPage({
5224
5224
  const onDelete = async (t) => {
5225
5225
  const nested = browser.getChildTags([...tags], t.external_id);
5226
5226
  const uses = browser.tagUseCount(t);
5227
- const n2 = chunkH3XAHVDT_cjs.tagsPageNouns();
5227
+ const n2 = chunk6UZ6YTML_cjs.tagsPageNouns();
5228
5228
  const tagNoun = (count2) => (count2 === 1 ? n2.tag : n2.tags).toLowerCase();
5229
5229
  const carriers = uses === 1 ? `${n2.document}, ${n2.fact} or ${n2.thread}` : `${n2.documents}, ${n2.facts} and ${n2.threads}`;
5230
5230
  const message = `Delete ${ui.tagKindNouns(t.kind).singular} "${t.name}"?` + (uses > 0 ? `
@@ -5245,16 +5245,16 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5245
5245
  try {
5246
5246
  await extract.mutateAsync(docIds);
5247
5247
  notify17(
5248
- `Extracting ${chunkH3XAHVDT_cjs.entitiesPhrase().toLowerCase()} from ${chunkH3XAHVDT_cjs.documentCount(docIds.length)}. You will be notified when it is done.`,
5248
+ `Extracting ${chunk6UZ6YTML_cjs.entitiesPhrase().toLowerCase()} from ${chunk6UZ6YTML_cjs.documentCount(docIds.length)}. You will be notified when it is done.`,
5249
5249
  "info"
5250
5250
  );
5251
5251
  } catch (error) {
5252
- notify17(browser.refusalReason(error, `Could not extract ${chunkH3XAHVDT_cjs.entitiesPhrase().toLowerCase()}`), "error");
5252
+ notify17(browser.refusalReason(error, `Could not extract ${chunk6UZ6YTML_cjs.entitiesPhrase().toLowerCase()}`), "error");
5253
5253
  throw error;
5254
5254
  }
5255
5255
  };
5256
5256
  const picker = /* @__PURE__ */ jsxRuntime.jsx(
5257
- chunkH3XAHVDT_cjs.TagPicker,
5257
+ chunk6UZ6YTML_cjs.TagPicker,
5258
5258
  {
5259
5259
  tags: viewTags,
5260
5260
  selectedId: tag?.external_id,
@@ -5268,10 +5268,10 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5268
5268
  onOpenTag: openTag,
5269
5269
  onOpenFact
5270
5270
  };
5271
- const n = chunkH3XAHVDT_cjs.tagsPageNouns();
5271
+ const n = chunk6UZ6YTML_cjs.tagsPageNouns();
5272
5272
  const action = view === "person" || view === "organisation" ? {
5273
5273
  label: "Extract",
5274
- title: `Extract ${chunkH3XAHVDT_cjs.entitiesPhrase().toLowerCase()} from ${n.documents.toLowerCase()}`,
5274
+ title: `Extract ${chunk6UZ6YTML_cjs.entitiesPhrase().toLowerCase()} from ${n.documents.toLowerCase()}`,
5275
5275
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-4 w-4" }),
5276
5276
  run: () => setExtracting(true),
5277
5277
  testId: "tags-extract-entities"
@@ -5421,7 +5421,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
5421
5421
  }
5422
5422
  ),
5423
5423
  /* @__PURE__ */ jsxRuntime.jsx(
5424
- chunkH3XAHVDT_cjs.ExtractEntitiesDialog,
5424
+ chunk6UZ6YTML_cjs.ExtractEntitiesDialog,
5425
5425
  {
5426
5426
  open: extracting,
5427
5427
  onOpenChange: setExtracting,
@@ -5482,7 +5482,7 @@ function FactSourcesPopover({
5482
5482
  reset();
5483
5483
  }
5484
5484
  };
5485
- const refOf = (docId) => chunkYD3RN2FY_cjs.citedVersionRef(
5485
+ const refOf = (docId) => chunkU72QI2W3_cjs.citedVersionRef(
5486
5486
  docId,
5487
5487
  citations.find((d) => d.doc_ext_id === docId)?.version,
5488
5488
  citedDocs?.[docId]?.current_version
@@ -5512,7 +5512,7 @@ function FactSourcesPopover({
5512
5512
  const olderVersion = refOf(docId) !== docId ? refOf(docId).split("@v")[1] : null;
5513
5513
  const cited = passagesOf(docId);
5514
5514
  return /* @__PURE__ */ jsxRuntime.jsx(
5515
- chunkYD3RN2FY_cjs.FactSourceGroup,
5515
+ chunkU72QI2W3_cjs.FactSourceGroup,
5516
5516
  {
5517
5517
  docId,
5518
5518
  isViewing,
@@ -5581,8 +5581,8 @@ function FactMarkdownEditor({
5581
5581
  citationContainer,
5582
5582
  "data-testid": dataTestId
5583
5583
  }) {
5584
- const sources = React7.useMemo(() => chunkYD3RN2FY_cjs.toFactCitations(citations) ?? [], [citations]);
5585
- const docIds = chunkYD3RN2FY_cjs.docIdsOf(sources);
5584
+ const sources = React7.useMemo(() => chunkU72QI2W3_cjs.toFactCitations(citations) ?? [], [citations]);
5585
+ const docIds = chunkU72QI2W3_cjs.docIdsOf(sources);
5586
5586
  const hasSources = docIds.length > 0;
5587
5587
  const { quoteFor, orderOf } = react.usePassageQuotes(
5588
5588
  React7.useMemo(() => sources.filter((d) => d.chunks.length > 0).map((d) => d.doc_ext_id), [sources])
@@ -5601,7 +5601,7 @@ function FactMarkdownEditor({
5601
5601
  const editorRef = React7.useRef(null);
5602
5602
  React7.useEffect(() => {
5603
5603
  if (!editorRef.current) return;
5604
- return chunkYD3RN2FY_cjs.enableFactTableColumnResize(editorRef.current);
5604
+ return chunkU72QI2W3_cjs.enableFactTableColumnResize(editorRef.current);
5605
5605
  }, []);
5606
5606
  React7.useEffect(() => {
5607
5607
  if (!editing) return;
@@ -5616,14 +5616,14 @@ function FactMarkdownEditor({
5616
5616
  return () => document.removeEventListener("pointerdown", onPointerDown, true);
5617
5617
  }, [editing]);
5618
5618
  const removeDoc = (docExtId) => {
5619
- const remaining = chunkYD3RN2FY_cjs.withoutDoc(sources, docExtId);
5619
+ const remaining = chunkU72QI2W3_cjs.withoutDoc(sources, docExtId);
5620
5620
  if (!remaining) setSourcesOpen(false);
5621
5621
  onChange(value, remaining);
5622
5622
  };
5623
5623
  const citeDocument = (docExtId) => onCiteDocument(docExtId, { toggle: false });
5624
5624
  const handleToggleDoc = (docExtId) => {
5625
5625
  if (docIds.includes(docExtId)) removeDoc(docExtId);
5626
- else onChange(value, chunkYD3RN2FY_cjs.withDoc(sources, docExtId));
5626
+ else onChange(value, chunkU72QI2W3_cjs.withDoc(sources, docExtId));
5627
5627
  };
5628
5628
  const expandToggle = /* @__PURE__ */ jsxRuntime.jsx(
5629
5629
  "button",
@@ -5842,7 +5842,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5842
5842
  const [composing, setComposing] = React7.useState(false);
5843
5843
  const [draft, setDraft] = React7.useState("");
5844
5844
  const [baselineText, setBaselineText] = React7.useState("");
5845
- const [draftDateFields, setDraftDateFields] = React7.useState(chunkYD3RN2FY_cjs.EMPTY_FACT_DATE_FIELDS);
5845
+ const [draftDateFields, setDraftDateFields] = React7.useState(chunkU72QI2W3_cjs.EMPTY_FACT_DATE_FIELDS);
5846
5846
  const [composerError, setComposerError] = React7.useState(null);
5847
5847
  const [editingId, setEditingId] = React7.useState(null);
5848
5848
  const [draftShared, setDraftShared] = React7.useState(false);
@@ -5899,9 +5899,9 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5899
5899
  if (!collector || !picked?.length || !collectingFor || !docBeingCollected) return;
5900
5900
  const docExtId = docBeingCollected;
5901
5901
  const apply = (prev) => {
5902
- let next = chunkYD3RN2FY_cjs.toFactCitations(prev);
5902
+ let next = chunkU72QI2W3_cjs.toFactCitations(prev);
5903
5903
  for (const pending of picked) {
5904
- next = chunkYD3RN2FY_cjs.withChunk(next, docExtId, { chunk_id: pending.chunk_id, page: pending.page ?? null });
5904
+ next = chunkU72QI2W3_cjs.withChunk(next, docExtId, { chunk_id: pending.chunk_id, page: pending.page ?? null });
5905
5905
  }
5906
5906
  return next ?? [];
5907
5907
  };
@@ -5912,8 +5912,8 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5912
5912
  React7.useEffect(() => {
5913
5913
  if (!collector || !unpicked?.length || !collectingFor) return;
5914
5914
  setDraftCitations((prev) => {
5915
- let next = chunkYD3RN2FY_cjs.toFactCitations(prev);
5916
- for (const chunkId of unpicked) next = chunkYD3RN2FY_cjs.withoutChunk(next, chunkId);
5915
+ let next = chunkU72QI2W3_cjs.toFactCitations(prev);
5916
+ for (const chunkId of unpicked) next = chunkU72QI2W3_cjs.withoutChunk(next, chunkId);
5917
5917
  return next;
5918
5918
  });
5919
5919
  collector.consumeUnpicked();
@@ -5923,7 +5923,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5923
5923
  setBaselineText("");
5924
5924
  setDraftCitations(null);
5925
5925
  setDraftTagIds([]);
5926
- setDraftDateFields(chunkYD3RN2FY_cjs.EMPTY_FACT_DATE_FIELDS);
5926
+ setDraftDateFields(chunkU72QI2W3_cjs.EMPTY_FACT_DATE_FIELDS);
5927
5927
  setDraftShared(false);
5928
5928
  setDraftConfirmed(true);
5929
5929
  setComposerError(null);
@@ -5937,7 +5937,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5937
5937
  setBaselineText("");
5938
5938
  setDraftCitations(null);
5939
5939
  setDraftTagIds([]);
5940
- setDraftDateFields(chunkYD3RN2FY_cjs.EMPTY_FACT_DATE_FIELDS);
5940
+ setDraftDateFields(chunkU72QI2W3_cjs.EMPTY_FACT_DATE_FIELDS);
5941
5941
  setDraftShared(false);
5942
5942
  setDraftConfirmed(true);
5943
5943
  setComposerError(null);
@@ -5948,7 +5948,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5948
5948
  const content = chunkRC25WMVB_cjs.decodeWhitespaceEntities(draft).trim();
5949
5949
  if (!content) return;
5950
5950
  setComposerError(null);
5951
- const span = chunkYD3RN2FY_cjs.factDateFieldsToSpan(draftDateFields);
5951
+ const span = chunkU72QI2W3_cjs.factDateFieldsToSpan(draftDateFields);
5952
5952
  try {
5953
5953
  let saved;
5954
5954
  if (editingId) {
@@ -5986,7 +5986,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
5986
5986
  setBaselineText(draft);
5987
5987
  setDraftCitations(saved.citations ?? null);
5988
5988
  setDraftTagIds(saved.tags.map((t) => t.tag_ext_id));
5989
- setDraftDateFields(chunkYD3RN2FY_cjs.factDateSpanToFields(saved.date_start, saved.date_end, saved.timezone));
5989
+ setDraftDateFields(chunkU72QI2W3_cjs.factDateSpanToFields(saved.date_start, saved.date_end, saved.timezone));
5990
5990
  setDraftShared(saved.shared ?? false);
5991
5991
  setDraftConfirmed(saved.confirmed ?? true);
5992
5992
  }
@@ -6011,7 +6011,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
6011
6011
  setBaselineText(m.text);
6012
6012
  setDraftCitations(m.citations ?? null);
6013
6013
  setDraftTagIds(m.tags.map((t) => t.tag_ext_id));
6014
- setDraftDateFields(chunkYD3RN2FY_cjs.factDateSpanToFields(m.date_start, m.date_end, m.timezone));
6014
+ setDraftDateFields(chunkU72QI2W3_cjs.factDateSpanToFields(m.date_start, m.date_end, m.timezone));
6015
6015
  setDraftShared(m.shared ?? false);
6016
6016
  setDraftConfirmed(m.confirmed ?? true);
6017
6017
  setComposerError(null);
@@ -6025,7 +6025,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
6025
6025
  const textChanged = draft.trim() !== baselineText.trim();
6026
6026
  const citationsChanged = JSON.stringify(draftCitations ?? null) !== JSON.stringify(f.citations ?? null);
6027
6027
  const tagsChanged = JSON.stringify([...draftTagIds].sort()) !== JSON.stringify(f.tags.map((t) => t.tag_ext_id).sort());
6028
- const dateChanged = JSON.stringify(draftDateFields) !== JSON.stringify(chunkYD3RN2FY_cjs.factDateSpanToFields(f.date_start, f.date_end, f.timezone));
6028
+ const dateChanged = JSON.stringify(draftDateFields) !== JSON.stringify(chunkU72QI2W3_cjs.factDateSpanToFields(f.date_start, f.date_end, f.timezone));
6029
6029
  const sharedChanged = draftShared !== (f.shared ?? false);
6030
6030
  const confirmedChanged = draftConfirmed !== (f.confirmed ?? true);
6031
6031
  return textChanged || citationsChanged || tagsChanged || dateChanged || sharedChanged || confirmedChanged;
@@ -6118,10 +6118,10 @@ function useFactFilters(notes, view, chat) {
6118
6118
  const factFilters = view.filters;
6119
6119
  const setFactFilters = view.setFilters;
6120
6120
  const quickFilteredNotes = React7.useMemo(
6121
- () => chunkRHKFCSFC_cjs.applyInvertedIndexFilter(
6121
+ () => chunkLAGHW4JM_cjs.applyInvertedIndexFilter(
6122
6122
  notes,
6123
6123
  factFilters,
6124
- chunkRHKFCSFC_cjs.buildInvertedIndex(
6124
+ chunkLAGHW4JM_cjs.buildInvertedIndex(
6125
6125
  notes,
6126
6126
  (f) => f.external_id,
6127
6127
  (f) => Object.entries(getFactFilterAttributes(f)).filter(([id, on]) => on && factFilterIds.includes(id)).map(([id]) => id)
@@ -6199,7 +6199,7 @@ function useFactFilters(notes, view, chat) {
6199
6199
  const makeTagPicker = React7.useCallback(
6200
6200
  (selected, setSelected, opts) => {
6201
6201
  const applied = new Set(selected);
6202
- return /* @__PURE__ */ jsxRuntime.jsx(chunkYD3RN2FY_cjs.FactFieldRow, { label: "Labels", children: /* @__PURE__ */ jsxRuntime.jsx(
6202
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkU72QI2W3_cjs.FactFieldRow, { label: "Labels", children: /* @__PURE__ */ jsxRuntime.jsx(
6203
6203
  chunkEWWVKXEQ_cjs.FieldLabelsSelect,
6204
6204
  {
6205
6205
  options: labelOptions,
@@ -6390,14 +6390,14 @@ function useFactSelection(notes, gridApiRef, setFactTags, chat) {
6390
6390
  }
6391
6391
  function renderSourcesCell(params) {
6392
6392
  const fact = params.data;
6393
- const count2 = chunkYD3RN2FY_cjs.sourceDocCount(fact);
6393
+ const count2 = chunkU72QI2W3_cjs.sourceDocCount(fact);
6394
6394
  if (!fact || count2 === 0) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\u2014" });
6395
6395
  return /* @__PURE__ */ jsxRuntime.jsxs(
6396
6396
  "button",
6397
6397
  {
6398
6398
  type: "button",
6399
6399
  onClick: () => params.context?.openEdit?.(fact),
6400
- title: chunkYD3RN2FY_cjs.DEFAULT_FACT_COLUMN_LABELS.sourcedFrom(count2),
6400
+ title: chunkU72QI2W3_cjs.DEFAULT_FACT_COLUMN_LABELS.sourcedFrom(count2),
6401
6401
  "data-testid": `facts-grid-sources-${fact.external_id}`,
6402
6402
  className: "inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground",
6403
6403
  children: [
@@ -6454,14 +6454,14 @@ function createFactPageColumns({
6454
6454
  onToggleConfirmed,
6455
6455
  onToggleShared
6456
6456
  }) {
6457
- const columns = chunkYD3RN2FY_cjs.createFactColumns({
6457
+ const columns = chunkU72QI2W3_cjs.createFactColumns({
6458
6458
  onToggleInChat,
6459
6459
  isInChat,
6460
6460
  renderHeader: (params, colId) => /* @__PURE__ */ jsxRuntime.jsx(FactHeader, { params, colId }),
6461
6461
  renderRowActions: (fact, params) => {
6462
6462
  const ctx = params.context;
6463
6463
  return /* @__PURE__ */ jsxRuntime.jsx(
6464
- chunkYD3RN2FY_cjs.FactRowActions,
6464
+ chunkU72QI2W3_cjs.FactRowActions,
6465
6465
  {
6466
6466
  onEdit: () => ctx?.openEdit?.(fact),
6467
6467
  canEdit: ctx?.canRewrite?.(fact) !== false,
@@ -6591,7 +6591,7 @@ function useFactsGrid({
6591
6591
  );
6592
6592
  const renderFactTags = React7.useCallback(
6593
6593
  (fact, rowHeight) => /* @__PURE__ */ jsxRuntime.jsx(
6594
- chunkYD3RN2FY_cjs.FactLabelsCell,
6594
+ chunkU72QI2W3_cjs.FactLabelsCell,
6595
6595
  {
6596
6596
  options: labelOptions,
6597
6597
  selectedIds: fact.tags.map((t) => t.tag_ext_id),
@@ -7240,7 +7240,7 @@ var citedDocIdsCache = /* @__PURE__ */ new WeakMap();
7240
7240
  function citedDocIds(m) {
7241
7241
  const cached = citedDocIdsCache.get(m);
7242
7242
  if (cached) return cached;
7243
- const ids = chunkYD3RN2FY_cjs.docIdsOf(chunkYD3RN2FY_cjs.toFactCitations(m.citations));
7243
+ const ids = chunkU72QI2W3_cjs.docIdsOf(chunkU72QI2W3_cjs.toFactCitations(m.citations));
7244
7244
  citedDocIdsCache.set(m, ids);
7245
7245
  return ids;
7246
7246
  }
@@ -7341,7 +7341,7 @@ function ConnectedFactsPage({
7341
7341
  const citedDocs = React7.useMemo(() => {
7342
7342
  const wanted = /* @__PURE__ */ new Set([
7343
7343
  ...notes.flatMap((n) => citedDocIds(n)),
7344
- ...chunkYD3RN2FY_cjs.docIdsOf(chunkYD3RN2FY_cjs.toFactCitations(composer.draftCitations))
7344
+ ...chunkU72QI2W3_cjs.docIdsOf(chunkU72QI2W3_cjs.toFactCitations(composer.draftCitations))
7345
7345
  ]);
7346
7346
  return Object.fromEntries(
7347
7347
  documents.filter((d) => wanted.has(d.external_id)).map((d) => [d.external_id, d])
@@ -7395,7 +7395,7 @@ function ConnectedFactsPage({
7395
7395
  };
7396
7396
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: setFactSection, className: "relative flex h-full flex-col", "data-testid": "facts-page", children: [
7397
7397
  /* @__PURE__ */ jsxRuntime.jsx(
7398
- chunkYD3RN2FY_cjs.FactsToolbar,
7398
+ chunkU72QI2W3_cjs.FactsToolbar,
7399
7399
  {
7400
7400
  count: filteredNotes.length,
7401
7401
  hasActiveFilters: filters.hasActiveFilters,
@@ -7424,7 +7424,7 @@ function ConnectedFactsPage({
7424
7424
  onNewFact: composing && !editingId ? () => void 0 : composer.startNewFact,
7425
7425
  navSlotRef: setNavSlot,
7426
7426
  navigator: view === "table" ? /* @__PURE__ */ jsxRuntime.jsx(
7427
- chunkH3XAHVDT_cjs.GridRowNavigator,
7427
+ chunk6UZ6YTML_cjs.GridRowNavigator,
7428
7428
  {
7429
7429
  gridApi,
7430
7430
  selectedId: editingId,
@@ -7435,7 +7435,7 @@ function ConnectedFactsPage({
7435
7435
  ) : null,
7436
7436
  showToolbarRow: view !== "smart_search",
7437
7437
  tools: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7438
- view === "table" && /* @__PURE__ */ jsxRuntime.jsx(chunkYD3RN2FY_cjs.FactsFieldsButton, { getGridApi: () => gridApiRef.current }),
7438
+ view === "table" && /* @__PURE__ */ jsxRuntime.jsx(chunkU72QI2W3_cjs.FactsFieldsButton, { getGridApi: () => gridApiRef.current }),
7439
7439
  view === "table" && /* @__PURE__ */ jsxRuntime.jsx(
7440
7440
  chunkEWWVKXEQ_cjs.RowDensityControl,
7441
7441
  {
@@ -7456,7 +7456,7 @@ function ConnectedFactsPage({
7456
7456
  }
7457
7457
  ),
7458
7458
  /* @__PURE__ */ jsxRuntime.jsx(
7459
- chunkYD3RN2FY_cjs.FactComposer,
7459
+ chunkU72QI2W3_cjs.FactComposer,
7460
7460
  {
7461
7461
  isOpen: composing,
7462
7462
  isEditing: !!editingId,
@@ -7489,7 +7489,7 @@ function ConnectedFactsPage({
7489
7489
  reserveSourcesSpace: view === "gantt" || view === "calendar",
7490
7490
  citationContainer: factSection,
7491
7491
  renderDocumentPicker: (onSelect, selectedIds, onOpen, sourcesToggle, sourcesOpen) => /* @__PURE__ */ jsxRuntime.jsx(
7492
- chunkYD3RN2FY_cjs.FactSourcesRow,
7492
+ chunkU72QI2W3_cjs.FactSourcesRow,
7493
7493
  {
7494
7494
  toggle: sourcesToggle,
7495
7495
  picker: /* @__PURE__ */ jsxRuntime.jsx(
@@ -7535,7 +7535,7 @@ function ConnectedFactsPage({
7535
7535
  }
7536
7536
  ),
7537
7537
  dateInput: /* @__PURE__ */ jsxRuntime.jsx(
7538
- chunkYD3RN2FY_cjs.FactDateInput,
7538
+ chunkU72QI2W3_cjs.FactDateInput,
7539
7539
  {
7540
7540
  value: composer.draftDateFields,
7541
7541
  onChange: composer.setDraftDateFields,
@@ -7545,13 +7545,13 @@ function ConnectedFactsPage({
7545
7545
  }
7546
7546
  ),
7547
7547
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "scrollbar-subtle flex-1 overflow-y-auto pb-2", children: [
7548
- isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkYD3RN2FY_cjs.FactsLoading, {}) : isError ? /* @__PURE__ */ jsxRuntime.jsx(chunkYD3RN2FY_cjs.FactsLoadError, { onRetry: () => refetch() }) : smartSearch ? (
7548
+ isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkU72QI2W3_cjs.FactsLoading, {}) : isError ? /* @__PURE__ */ jsxRuntime.jsx(chunkU72QI2W3_cjs.FactsLoadError, { onRetry: () => refetch() }) : smartSearch ? (
7549
7549
  // Searches facts only (never documents). Kept before the empty-state guard so the
7550
7550
  // search UI is reachable even in an empty workspace.
7551
7551
  smartSearch({ selectedFactId: editingId, onOpenFact: openFactById })
7552
7552
  ) : notes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-full flex-col items-center justify-center", children: [
7553
7553
  /* @__PURE__ */ jsxRuntime.jsx(
7554
- chunkYD3RN2FY_cjs.FactsEmptyState,
7554
+ chunkU72QI2W3_cjs.FactsEmptyState,
7555
7555
  {
7556
7556
  onUseExample: (text2) => {
7557
7557
  composer.setDraft(text2);
@@ -7562,7 +7562,7 @@ function ConnectedFactsPage({
7562
7562
  ),
7563
7563
  emptyStateExtra
7564
7564
  ] }) : view === "calendar" ? /* @__PURE__ */ jsxRuntime.jsx(
7565
- chunkYD3RN2FY_cjs.FactsCalendar,
7565
+ chunkU72QI2W3_cjs.FactsCalendar,
7566
7566
  {
7567
7567
  facts: filteredNotes,
7568
7568
  onSelect: (n) => openEditIfAllowed(n),
@@ -7571,7 +7571,7 @@ function ConnectedFactsPage({
7571
7571
  navigatorTotal: filteredNotes.length
7572
7572
  }
7573
7573
  ) : view === "gantt" ? /* @__PURE__ */ jsxRuntime.jsx(
7574
- chunkYD3RN2FY_cjs.FactsGanttPane,
7574
+ chunkU72QI2W3_cjs.FactsGanttPane,
7575
7575
  {
7576
7576
  items: ganttItems,
7577
7577
  labelWidth: pageView.labelWidth,
@@ -7621,7 +7621,7 @@ function ConnectedFactsPage({
7621
7621
  )
7622
7622
  ] }),
7623
7623
  selectable && notes.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
7624
- chunkYD3RN2FY_cjs.FactsBulkBar,
7624
+ chunkU72QI2W3_cjs.FactsBulkBar,
7625
7625
  {
7626
7626
  count: selection.selectedFacts.length,
7627
7627
  onClear: selection.clearSelection,
@@ -7764,11 +7764,11 @@ function ConnectedProfileCard({
7764
7764
  const display = profile?.fullName || "Unnamed";
7765
7765
  return /* @__PURE__ */ jsxRuntime.jsxs(chunkIRY63R4L_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
7766
7766
  /* @__PURE__ */ jsxRuntime.jsx(
7767
- chunkRHKFCSFC_cjs.ProfileCard,
7767
+ chunkLAGHW4JM_cjs.ProfileCard,
7768
7768
  {
7769
7769
  avatar: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7770
7770
  /* @__PURE__ */ jsxRuntime.jsx(
7771
- chunkRHKFCSFC_cjs.AvatarPicker,
7771
+ chunkLAGHW4JM_cjs.AvatarPicker,
7772
7772
  {
7773
7773
  pictureUrl: profile?.picture,
7774
7774
  initials: chunkUFEXJIEY_cjs.initials(display),
@@ -7818,7 +7818,7 @@ function ConnectedIdentityVerification({
7818
7818
  });
7819
7819
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7820
7820
  /* @__PURE__ */ jsxRuntime.jsx(
7821
- chunkRHKFCSFC_cjs.IdentityVerificationCard,
7821
+ chunkLAGHW4JM_cjs.IdentityVerificationCard,
7822
7822
  {
7823
7823
  flow,
7824
7824
  labels,
@@ -7827,7 +7827,7 @@ function ConnectedIdentityVerification({
7827
7827
  }
7828
7828
  ),
7829
7829
  /* @__PURE__ */ jsxRuntime.jsx(
7830
- chunkRHKFCSFC_cjs.IdentityVerificationDialog,
7830
+ chunkLAGHW4JM_cjs.IdentityVerificationDialog,
7831
7831
  {
7832
7832
  flow,
7833
7833
  accountName: profile?.fullName ?? "",
@@ -7840,7 +7840,7 @@ function ConnectedIdentityVerification({
7840
7840
  function ConnectedRequireVerified({ children, labels }) {
7841
7841
  const { data: profile } = react.useProfile();
7842
7842
  const flow = react.useIdentityVerification();
7843
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
7843
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
7844
7844
  }
7845
7845
  function ConnectedPasswordChangeDialog({
7846
7846
  open,
@@ -7865,7 +7865,7 @@ function ConnectedPasswordChangeDialog({
7865
7865
  onRecoveryComplete
7866
7866
  });
7867
7867
  return /* @__PURE__ */ jsxRuntime.jsx(
7868
- chunkRHKFCSFC_cjs.PasswordChangeDialog,
7868
+ chunkLAGHW4JM_cjs.PasswordChangeDialog,
7869
7869
  {
7870
7870
  open,
7871
7871
  onClose: form.onCancel,
@@ -7905,23 +7905,23 @@ function ConnectedSecuritySection({ children }) {
7905
7905
  ] });
7906
7906
  }
7907
7907
  function ConnectedNotificationPreferences({
7908
- categories = chunkRHKFCSFC_cjs.EMAIL_NOTIFICATION_CATEGORIES,
7908
+ categories = chunkLAGHW4JM_cjs.EMAIL_NOTIFICATION_CATEGORIES,
7909
7909
  title = "Notifications"
7910
7910
  }) {
7911
7911
  const keys = React7.useMemo(
7912
- () => categories === chunkRHKFCSFC_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkRHKFCSFC_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
7912
+ () => categories === chunkLAGHW4JM_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkLAGHW4JM_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
7913
7913
  [categories]
7914
7914
  );
7915
7915
  const prefs = react.useNotificationPreferences(keys);
7916
7916
  return /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
7917
- chunkRHKFCSFC_cjs.NotificationCategoryList,
7917
+ chunkLAGHW4JM_cjs.NotificationCategoryList,
7918
7918
  {
7919
7919
  masterId: "emailNotifications",
7920
7920
  masterTitle: "Email Notifications",
7921
7921
  masterDescription: "Email me about activity when I\u2019m away",
7922
7922
  masterChecked: prefs.masterChecked,
7923
7923
  onMasterChange: prefs.setAll,
7924
- categories: chunkRHKFCSFC_cjs.toNotificationCategories(prefs.checked, categories),
7924
+ categories: chunkLAGHW4JM_cjs.toNotificationCategories(prefs.checked, categories),
7925
7925
  onCategoryChange: prefs.setCategory
7926
7926
  }
7927
7927
  ) }) });
@@ -7934,7 +7934,7 @@ function ConnectedSessionsRow({
7934
7934
  const sessions = react.useSessions({ enabled: open });
7935
7935
  const currentSessionId = react.useCurrentSessionId();
7936
7936
  const terminate = react.useTerminateSession();
7937
- const views = chunkRHKFCSFC_cjs.toActiveSessionViews(sessions.data ?? [], {
7937
+ const views = chunkLAGHW4JM_cjs.toActiveSessionViews(sessions.data ?? [], {
7938
7938
  currentSessionId,
7939
7939
  terminatingId: terminate.isPending ? terminate.variables : null,
7940
7940
  renderIcon: renderSessionIcon
@@ -7963,7 +7963,7 @@ function ConnectedSessionsRow({
7963
7963
  }
7964
7964
  ),
7965
7965
  /* @__PURE__ */ jsxRuntime.jsx(
7966
- chunkRHKFCSFC_cjs.ActiveSessionsDialog,
7966
+ chunkLAGHW4JM_cjs.ActiveSessionsDialog,
7967
7967
  {
7968
7968
  open,
7969
7969
  onOpenChange: setOpen,
@@ -8005,7 +8005,7 @@ function ConnectedLogoutDialog({
8005
8005
  signOut.mutate({ everywhere, reason: "manual" });
8006
8006
  };
8007
8007
  return /* @__PURE__ */ jsxRuntime.jsx(
8008
- chunkRHKFCSFC_cjs.LogoutDialog,
8008
+ chunkLAGHW4JM_cjs.LogoutDialog,
8009
8009
  {
8010
8010
  open,
8011
8011
  onClose,
@@ -8013,7 +8013,7 @@ function ConnectedLogoutDialog({
8013
8013
  onLogoutAll: () => void run(true),
8014
8014
  canLogoutAll,
8015
8015
  isOnline,
8016
- sessions: chunkRHKFCSFC_cjs.toLogoutSessionViews(sessions.data ?? []),
8016
+ sessions: chunkLAGHW4JM_cjs.toLogoutSessionViews(sessions.data ?? []),
8017
8017
  renderSessionIcon
8018
8018
  }
8019
8019
  );
@@ -8055,12 +8055,12 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
8055
8055
  }
8056
8056
  ),
8057
8057
  /* @__PURE__ */ jsxRuntime.jsx(
8058
- chunkRHKFCSFC_cjs.DeleteAccountDialog,
8058
+ chunkLAGHW4JM_cjs.DeleteAccountDialog,
8059
8059
  {
8060
8060
  open: dialogOpen,
8061
8061
  onClose: flow.onClose,
8062
8062
  step: flow.step,
8063
- blockers: chunkRHKFCSFC_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
8063
+ blockers: chunkLAGHW4JM_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
8064
8064
  onContinue: flow.onContinue,
8065
8065
  onBack: flow.onBack,
8066
8066
  userEmail,
@@ -8220,7 +8220,7 @@ function ConnectedBoxPortalSection() {
8220
8220
  function ServerConnectionRow({ onRefresh, ...status }) {
8221
8221
  const { runtimeConfig } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
8222
8222
  const [isRefreshing, setIsRefreshing] = React7.useState(false);
8223
- const view = chunkRHKFCSFC_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
8223
+ const view = chunkLAGHW4JM_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
8224
8224
  const refresh = async () => {
8225
8225
  setIsRefreshing(true);
8226
8226
  try {
@@ -8230,7 +8230,7 @@ function ServerConnectionRow({ onRefresh, ...status }) {
8230
8230
  }
8231
8231
  };
8232
8232
  return /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsRow, { label: "Server connection", description: view.description, children: /* @__PURE__ */ jsxRuntime.jsx(
8233
- chunkRHKFCSFC_cjs.ServerConnectionButton,
8233
+ chunkLAGHW4JM_cjs.ServerConnectionButton,
8234
8234
  {
8235
8235
  state: view.state,
8236
8236
  label: view.label,
@@ -8640,13 +8640,13 @@ var COLUMNS = [
8640
8640
  flex: 1,
8641
8641
  minWidth: 120,
8642
8642
  cellRenderer: (params) => isStandard(params.data) ? /* @__PURE__ */ jsxRuntime.jsx(
8643
- chunkRHKFCSFC_cjs.ModelProviderLabel,
8643
+ chunkLAGHW4JM_cjs.ModelProviderLabel,
8644
8644
  {
8645
8645
  logo: /* @__PURE__ */ jsxRuntime.jsx(ui.ArbiIcon, { size: 14, "aria-label": "ARBI", className: "flex-shrink-0 rounded-sm" }),
8646
8646
  children: "ARBI CITY"
8647
8647
  }
8648
8648
  ) : /* @__PURE__ */ jsxRuntime.jsx(
8649
- chunkRHKFCSFC_cjs.ModelProviderLabel,
8649
+ chunkLAGHW4JM_cjs.ModelProviderLabel,
8650
8650
  {
8651
8651
  logo: /* @__PURE__ */ jsxRuntime.jsx(ui.ProviderIcon, { modelName: params.data?.model_name, provider: params.value, size: 14 }),
8652
8652
  children: PROVIDER_NAMES[params.value ?? ""] || params.value || "\u2014"
@@ -8723,7 +8723,7 @@ function ConnectedPremiumModels() {
8723
8723
  );
8724
8724
  if (premiumModels.length === 0) return null;
8725
8725
  return /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsPanel, { className: "max-w-2xl space-y-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsSection, { title: "Premium models", children: /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
8726
- chunkRHKFCSFC_cjs.PremiumModelsFrame,
8726
+ chunkLAGHW4JM_cjs.PremiumModelsFrame,
8727
8727
  {
8728
8728
  enabled: premiumModel !== "",
8729
8729
  onEnabledChange: (enabled) => {
@@ -8852,10 +8852,10 @@ function ConnectedAppsSettings({
8852
8852
  }
8853
8853
  };
8854
8854
  if (isLoading) {
8855
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
8855
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
8856
8856
  }
8857
8857
  if (catalogError) {
8858
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
8858
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
8859
8859
  }
8860
8860
  const visibleCatalog = catalog.filter((c) => isVendorVisible(c.vendor_key));
8861
8861
  const sharePointVisible = isVendorVisible("microsoft_sharepoint");
@@ -8864,7 +8864,7 @@ function ConnectedAppsSettings({
8864
8864
  (c) => !react.isMailboxSyncVendor(c.vendor_key) && !react.isSharePointVendor(c.vendor_key)
8865
8865
  );
8866
8866
  const renderCard = (entry) => /* @__PURE__ */ jsxRuntime.jsx(
8867
- chunkRHKFCSFC_cjs.ConnectionCard,
8867
+ chunkLAGHW4JM_cjs.ConnectionCard,
8868
8868
  {
8869
8869
  connection: toConnectionCardView(entry, connectedByVendor[entry.vendor_key], {
8870
8870
  isDisconnecting: disconnect.isPending && disconnect.variables?.vendorKey === entry.vendor_key,
@@ -8992,7 +8992,7 @@ function ConnectedAppsSettings({
8992
8992
  }
8993
8993
  )
8994
8994
  ] }),
8995
- catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8995
+ catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkIRY63R4L_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8996
8996
  renderGroup("Email & Drive", EMAIL_AND_DRIVE_SUBTITLE, /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, {}), emailCatalog),
8997
8997
  renderGroup(
8998
8998
  "Apps & Integrations (MCP)",
@@ -9498,7 +9498,7 @@ function ConnectedStorageProjectCard({
9498
9498
  project.personal && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-sm text-muted-foreground", children: "Mail, recordings of calls you host, chat attachments and everything not in a project." })
9499
9499
  ] }),
9500
9500
  /* @__PURE__ */ jsxRuntime.jsx(
9501
- chunkRHKFCSFC_cjs.UsageToggle,
9501
+ chunkLAGHW4JM_cjs.UsageToggle,
9502
9502
  {
9503
9503
  value: view,
9504
9504
  onChange: setView,
@@ -9583,7 +9583,7 @@ function ConnectedStorageProjectCard({
9583
9583
  ] })
9584
9584
  ] }),
9585
9585
  view === "largest" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
9586
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.UsageToggle, { value: kind, onChange: setKind, options: KIND_FILTERS, ariaLabel: "Kind" }),
9586
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.UsageToggle, { value: kind, onChange: setKind, options: KIND_FILTERS, ariaLabel: "Kind" }),
9587
9587
  largest.isLoading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Loading\u2026" }) : /* @__PURE__ */ jsxRuntime.jsx(
9588
9588
  StorageItemsTable,
9589
9589
  {
@@ -9833,7 +9833,7 @@ function ConnectedSettingsPage({
9833
9833
  }, [requested]);
9834
9834
  const controlled = section !== void 0;
9835
9835
  return /* @__PURE__ */ jsxRuntime.jsx(
9836
- chunkRHKFCSFC_cjs.SettingsPage,
9836
+ chunkLAGHW4JM_cjs.SettingsPage,
9837
9837
  {
9838
9838
  ...page,
9839
9839
  sections,
@@ -9865,7 +9865,7 @@ function UsageSettings({ icon: icon2 }) {
9865
9865
  description: "AI usage today, in \xA3 (ex VAT).",
9866
9866
  testId: "settings-usage",
9867
9867
  children: /* @__PURE__ */ jsxRuntime.jsx(
9868
- chunkRHKFCSFC_cjs.UsageSummary,
9868
+ chunkLAGHW4JM_cjs.UsageSummary,
9869
9869
  {
9870
9870
  stats: [
9871
9871
  {
@@ -9983,7 +9983,7 @@ function ReaderAppearance({ bundle }) {
9983
9983
  const { defaults } = bundle;
9984
9984
  const isDefault = state.pairingId === defaults.pairingId && state.colorScheme === defaults.colorScheme && state.textSize === defaults.textSize;
9985
9985
  return /* @__PURE__ */ jsxRuntime.jsx(
9986
- chunkRHKFCSFC_cjs.AppearanceSettings,
9986
+ chunkLAGHW4JM_cjs.AppearanceSettings,
9987
9987
  {
9988
9988
  colorScheme: state.colorScheme,
9989
9989
  onColorSchemeChange: state.setColorScheme,
@@ -10024,7 +10024,7 @@ function ConnectedDeploymentStorage() {
10024
10024
  const projectColumns = [
10025
10025
  {
10026
10026
  key: "name",
10027
- header: view === "people" ? "Person" : "Project",
10027
+ header: view === "people" ? "Person" : ui.getEntityLabel("PROJECT"),
10028
10028
  render: (p) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
10029
10029
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate font-medium text-foreground", children: view === "people" ? p.owner_email ?? p.name : p.name }),
10030
10030
  view !== "people" && p.owner_email && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "truncate text-xs text-muted-foreground", children: p.owner_email })
@@ -10111,10 +10111,10 @@ function ConnectedDeploymentStorage() {
10111
10111
  (deployment.orphaned_bytes > 0 || deployment.unattributed_bytes > 0) && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", "data-testid": "deployment-storage-unowned", children: [
10112
10112
  formatBytes(deployment.orphaned_bytes),
10113
10113
  " left behind by deleted items (removed by the next monthly clean-up)",
10114
- deployment.unattributed_bytes > 0 && ` \xB7 ${formatBytes(deployment.unattributed_bytes)} not owned by any project`
10114
+ deployment.unattributed_bytes > 0 && ` \xB7 ${formatBytes(deployment.unattributed_bytes)} not owned by any ${ui.entityNoun("PROJECT")}`
10115
10115
  ] }),
10116
10116
  trend.dates.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
10117
- chunkRHKFCSFC_cjs.UsageLineChart,
10117
+ chunkLAGHW4JM_cjs.UsageLineChart,
10118
10118
  {
10119
10119
  dates: trend.dates,
10120
10120
  series: trend.series,
@@ -10123,13 +10123,13 @@ function ConnectedDeploymentStorage() {
10123
10123
  }
10124
10124
  ),
10125
10125
  /* @__PURE__ */ jsxRuntime.jsx(
10126
- chunkRHKFCSFC_cjs.UsageToggle,
10126
+ chunkLAGHW4JM_cjs.UsageToggle,
10127
10127
  {
10128
10128
  value: view,
10129
10129
  onChange: setView,
10130
10130
  ariaLabel: "Storage by",
10131
10131
  options: [
10132
- { value: "projects", label: "Projects" },
10132
+ { value: "projects", label: ui.getEntityLabel("PROJECT", "PLURAL") },
10133
10133
  { value: "people", label: "People" },
10134
10134
  { value: "items", label: "Largest items" }
10135
10135
  ]
@@ -10151,7 +10151,7 @@ function ConnectedDeploymentStorage() {
10151
10151
  rows: [...view === "people" ? people : projects].sort(byBytes),
10152
10152
  getRowId: (p) => p.project_ext_id,
10153
10153
  area: "deployment-storage-projects",
10154
- emptyTitle: view === "people" ? "No personal storage yet" : "No projects yet"
10154
+ emptyTitle: view === "people" ? "No personal storage yet" : `No ${ui.entityNoun("PROJECT", "PLURAL")} yet`
10155
10155
  }
10156
10156
  )
10157
10157
  ]
@@ -10343,7 +10343,7 @@ You will lose access to all content in this ${workspaceWord()}.`,
10343
10343
  };
10344
10344
  }
10345
10345
  var memberName = (user) => user.family_name ? `${user.given_name} ${user.family_name}` : user.given_name;
10346
- var ALL_ROLES = ["owner", "collaborator", "guest"].map((value) => ({ value, label: chunkKJVDYWAM_cjs.formatRole(value), badgeClass: chunkKJVDYWAM_cjs.getRoleBadgeClass(value) }));
10346
+ var ALL_ROLES = ["owner", "collaborator", "guest"].map((value) => ({ value, label: chunk6UKNYQ7Q_cjs.formatRole(value), badgeClass: chunk6UKNYQ7Q_cjs.getRoleBadgeClass(value) }));
10347
10347
  var BULK_ROLES = ALL_ROLES.filter((r) => r.value !== "owner");
10348
10348
  var ROLE_ORDER = { owner: 0, collaborator: 1, guest: 2 };
10349
10349
  function roleLock(targetId, selfId, isOwner) {
@@ -10390,7 +10390,7 @@ function ConnectedWorkspaceMembers({
10390
10390
  try {
10391
10391
  await updateRoles.mutateAsync({ userIds: rows2.map((r) => r.user.external_id), role });
10392
10392
  notify17(
10393
- single ? `${single}'s role updated to ${chunkKJVDYWAM_cjs.formatRole(role)} in "${workspace.name}"` : `Updated ${rows2.length} users to ${chunkKJVDYWAM_cjs.formatRole(role)} in "${workspace.name}"`,
10393
+ single ? `${single}'s role updated to ${chunk6UKNYQ7Q_cjs.formatRole(role)} in "${workspace.name}"` : `Updated ${rows2.length} users to ${chunk6UKNYQ7Q_cjs.formatRole(role)} in "${workspace.name}"`,
10394
10394
  "success"
10395
10395
  );
10396
10396
  return true;
@@ -10447,7 +10447,7 @@ function ConnectedWorkspaceMembers({
10447
10447
  {
10448
10448
  role: row2.role,
10449
10449
  roles: ALL_ROLES,
10450
- tooltip: lock ?? chunkKJVDYWAM_cjs.getRoleDescription(row2.role),
10450
+ tooltip: lock ?? chunk6UKNYQ7Q_cjs.getRoleDescription(row2.role),
10451
10451
  canChange: !lock,
10452
10452
  isPending: updateRoles.isPending,
10453
10453
  onChange: (value) => void setRoles([row2], value),
@@ -10598,13 +10598,13 @@ function ConnectedWorkspaceSettings({
10598
10598
  const [membersExpanded, setMembersExpanded] = React7.useState(false);
10599
10599
  const [shareOpen, setShareOpen] = React7.useState(false);
10600
10600
  if (!workspace) {
10601
- return /* @__PURE__ */ jsxRuntime.jsx(chunkKJVDYWAM_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkH3XAHVDT_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
10601
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6UKNYQ7Q_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunk6UZ6YTML_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
10602
10602
  }
10603
10603
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10604
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKJVDYWAM_cjs.WorkspacePageFrame, { testId, children: [
10605
- /* @__PURE__ */ jsxRuntime.jsxs(chunkKJVDYWAM_cjs.WorkspaceIdentityPanel, { children: [
10604
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk6UKNYQ7Q_cjs.WorkspacePageFrame, { testId, children: [
10605
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk6UKNYQ7Q_cjs.WorkspaceIdentityPanel, { children: [
10606
10606
  /* @__PURE__ */ jsxRuntime.jsx(
10607
- chunkH3XAHVDT_cjs.EntityIdentityBar,
10607
+ chunk6UZ6YTML_cjs.EntityIdentityBar,
10608
10608
  {
10609
10609
  testId: "workspace-identity-bar",
10610
10610
  canEdit: isOwner,
@@ -10621,7 +10621,7 @@ function ConnectedWorkspaceSettings({
10621
10621
  label: "Name",
10622
10622
  value: workspace.name,
10623
10623
  placeholder: "Untitled",
10624
- maxLength: chunkH3XAHVDT_cjs.IDENTITY_NAME_MAX_LENGTH,
10624
+ maxLength: chunk6UZ6YTML_cjs.IDENTITY_NAME_MAX_LENGTH,
10625
10625
  valueClassName: "truncate text-base font-semibold",
10626
10626
  testId: "workspace-home-title",
10627
10627
  hideLabel: true,
@@ -10636,7 +10636,7 @@ function ConnectedWorkspaceSettings({
10636
10636
  }
10637
10637
  ),
10638
10638
  trailing: project && /* @__PURE__ */ jsxRuntime.jsx(
10639
- chunkKJVDYWAM_cjs.WorkspaceProjectSlot,
10639
+ chunk6UKNYQ7Q_cjs.WorkspaceProjectSlot,
10640
10640
  {
10641
10641
  testId: "workspace-home-project",
10642
10642
  caption: `${ui.getEntityLabel("PROJECT")}:`,
@@ -10655,13 +10655,13 @@ function ConnectedWorkspaceSettings({
10655
10655
  testId: "workspace-home-description",
10656
10656
  hideLabel: true,
10657
10657
  trailing: /* @__PURE__ */ jsxRuntime.jsx(
10658
- chunkKJVDYWAM_cjs.WorkspaceAudienceLine,
10658
+ chunk6UKNYQ7Q_cjs.WorkspaceAudienceLine,
10659
10659
  {
10660
10660
  visibility: {
10661
10661
  testId: "workspace-home-visibility",
10662
10662
  caption: "Visibility:",
10663
10663
  toggle: isOwner && isDeveloper ? /* @__PURE__ */ jsxRuntime.jsx(
10664
- chunkKJVDYWAM_cjs.CommonWorkspaceToggle,
10664
+ chunk6UKNYQ7Q_cjs.CommonWorkspaceToggle,
10665
10665
  {
10666
10666
  isCommon: workspace.is_public ?? false,
10667
10667
  onToggle: (value) => void settings.setPublic(value),
@@ -10697,7 +10697,7 @@ function ConnectedWorkspaceSettings({
10697
10697
  }
10698
10698
  ),
10699
10699
  isMember && /* @__PURE__ */ jsxRuntime.jsx(
10700
- chunkKJVDYWAM_cjs.ExpandableSection,
10700
+ chunk6UKNYQ7Q_cjs.ExpandableSection,
10701
10701
  {
10702
10702
  expanded: membersExpanded,
10703
10703
  testId: "workspace-settings-members-section",
@@ -10734,7 +10734,7 @@ function ConnectedWorkspaceSettings({
10734
10734
  )
10735
10735
  ] }),
10736
10736
  !isOwner && /* @__PURE__ */ jsxRuntime.jsx(
10737
- chunkKJVDYWAM_cjs.LeaveFooter,
10737
+ chunk6UKNYQ7Q_cjs.LeaveFooter,
10738
10738
  {
10739
10739
  testId: "workspace-settings-footer",
10740
10740
  leave: {
@@ -10902,9 +10902,9 @@ function ConnectedMailboxSyncDialog({
10902
10902
  showDescription: true,
10903
10903
  className: "w-[92vw] sm:max-w-lg",
10904
10904
  children: [
10905
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncDialogBody, { children: [
10906
- !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
10907
- chunkRHKFCSFC_cjs.SyncSelect,
10905
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncDialogBody, { children: [
10906
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
10907
+ chunkLAGHW4JM_cjs.SyncSelect,
10908
10908
  {
10909
10909
  id: "sync-workspace",
10910
10910
  value: workspaceExtId,
@@ -10913,9 +10913,9 @@ function ConnectedMailboxSyncDialog({
10913
10913
  options: memberWorkspaces.map((w) => ({ value: w.external_id, label: w.name }))
10914
10914
  }
10915
10915
  ) }),
10916
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
10916
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
10917
10917
  /* @__PURE__ */ jsxRuntime.jsx(
10918
- chunkRHKFCSFC_cjs.SyncSelect,
10918
+ chunkLAGHW4JM_cjs.SyncSelect,
10919
10919
  {
10920
10920
  id: "sync-backfill",
10921
10921
  value: backfill,
@@ -10935,17 +10935,17 @@ function ConnectedMailboxSyncDialog({
10935
10935
  "aria-label": "Import emails since date"
10936
10936
  }
10937
10937
  ),
10938
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
10938
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
10939
10939
  ] })
10940
10940
  ] }),
10941
10941
  /* @__PURE__ */ jsxRuntime.jsx(
10942
- chunkRHKFCSFC_cjs.SyncField,
10942
+ chunkLAGHW4JM_cjs.SyncField,
10943
10943
  {
10944
10944
  label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
10945
10945
  hint: "Select at least one folder to import.",
10946
- actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncLinkRow, { children: [
10946
+ actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncLinkRow, { children: [
10947
10947
  /* @__PURE__ */ jsxRuntime.jsx(
10948
- chunkRHKFCSFC_cjs.SyncLinkButton,
10948
+ chunkLAGHW4JM_cjs.SyncLinkButton,
10949
10949
  {
10950
10950
  onClick: () => setExpandAllNonce((n) => n + 1),
10951
10951
  testId: "mail-folders-expand-all",
@@ -10953,20 +10953,20 @@ function ConnectedMailboxSyncDialog({
10953
10953
  }
10954
10954
  ),
10955
10955
  /* @__PURE__ */ jsxRuntime.jsx(
10956
- chunkRHKFCSFC_cjs.SyncLinkButton,
10956
+ chunkLAGHW4JM_cjs.SyncLinkButton,
10957
10957
  {
10958
10958
  onClick: () => setCollapseAllNonce((n) => n + 1),
10959
10959
  testId: "mail-folders-collapse-all",
10960
10960
  children: "Collapse all"
10961
10961
  }
10962
10962
  ),
10963
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
10963
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
10964
10964
  ] }),
10965
- children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
10965
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
10966
10966
  // A failed fetch is not an empty mailbox: it hides auth/scope errors (e.g. a Gmail
10967
10967
  // account needing reconnect).
10968
10968
  /* @__PURE__ */ jsxRuntime.jsx(
10969
- chunkRHKFCSFC_cjs.SyncReconnectNotice,
10969
+ chunkLAGHW4JM_cjs.SyncReconnectNotice,
10970
10970
  {
10971
10971
  message: `Couldn\u2019t load folders from ${catalog.display_name}. Reconnect the account and try again.`,
10972
10972
  onReconnect: () => void reconnect(),
@@ -10974,7 +10974,7 @@ function ConnectedMailboxSyncDialog({
10974
10974
  testId: "folders-reconnect"
10975
10975
  }
10976
10976
  )
10977
- ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
10977
+ ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
10978
10978
  chunkWUG24K7P_cjs.MailFolderTree,
10979
10979
  {
10980
10980
  nodes: folderTree,
@@ -10986,9 +10986,9 @@ function ConnectedMailboxSyncDialog({
10986
10986
  ) })
10987
10987
  }
10988
10988
  ),
10989
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncOptions, { children: [
10989
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncOptions, { children: [
10990
10990
  /* @__PURE__ */ jsxRuntime.jsx(
10991
- chunkRHKFCSFC_cjs.SyncOptionToggle,
10991
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
10992
10992
  {
10993
10993
  checked: skipDuplicates,
10994
10994
  onCheckedChange: setSkipDuplicates,
@@ -10998,7 +10998,7 @@ function ConnectedMailboxSyncDialog({
10998
10998
  }
10999
10999
  ),
11000
11000
  /* @__PURE__ */ jsxRuntime.jsx(
11001
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11001
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11002
11002
  {
11003
11003
  checked: autoRename,
11004
11004
  onCheckedChange: setAutoRename,
@@ -11008,7 +11008,7 @@ function ConnectedMailboxSyncDialog({
11008
11008
  }
11009
11009
  ),
11010
11010
  /* @__PURE__ */ jsxRuntime.jsx(
11011
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11011
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11012
11012
  {
11013
11013
  checked: shared,
11014
11014
  onCheckedChange: setShared,
@@ -11018,7 +11018,7 @@ function ConnectedMailboxSyncDialog({
11018
11018
  }
11019
11019
  ),
11020
11020
  /* @__PURE__ */ jsxRuntime.jsx(
11021
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11021
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11022
11022
  {
11023
11023
  checked: autoSync,
11024
11024
  onCheckedChange: setAutoSync,
@@ -11030,7 +11030,7 @@ function ConnectedMailboxSyncDialog({
11030
11030
  ] })
11031
11031
  ] }),
11032
11032
  /* @__PURE__ */ jsxRuntime.jsx(
11033
- chunkRHKFCSFC_cjs.SyncDialogFooter,
11033
+ chunkLAGHW4JM_cjs.SyncDialogFooter,
11034
11034
  {
11035
11035
  onCancel: () => onOpenChange(false),
11036
11036
  onSave: handleEnableSubmit,
@@ -11092,7 +11092,7 @@ function DriveFolderNode({
11092
11092
  const mightHaveChildren = docCount == null || docCount > 0;
11093
11093
  const orderedChildren = [...children].sort((a, b) => a.name.localeCompare(b.name));
11094
11094
  return /* @__PURE__ */ jsxRuntime.jsx(
11095
- chunkRHKFCSFC_cjs.SyncFolderRow,
11095
+ chunkLAGHW4JM_cjs.SyncFolderRow,
11096
11096
  {
11097
11097
  id: folder.id,
11098
11098
  name: folder.name,
@@ -11106,7 +11106,7 @@ function DriveFolderNode({
11106
11106
  onCheckedChange: () => onToggle(folder.id),
11107
11107
  count: typeof docCount === "number" ? docCount : void 0,
11108
11108
  isCountLoading: isSelectable && countLoading,
11109
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
11109
+ children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
11110
11110
  DriveFolderNode,
11111
11111
  {
11112
11112
  vendorKey,
@@ -11252,9 +11252,9 @@ function ConnectedDriveSyncDialog({
11252
11252
  showDescription: true,
11253
11253
  className: "w-[92vw] sm:max-w-lg",
11254
11254
  children: [
11255
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncDialogBody, { children: [
11256
- !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
11257
- chunkRHKFCSFC_cjs.SyncSelect,
11255
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncDialogBody, { children: [
11256
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
11257
+ chunkLAGHW4JM_cjs.SyncSelect,
11258
11258
  {
11259
11259
  id: "drive-sync-workspace",
11260
11260
  value: workspaceExtId,
@@ -11264,13 +11264,13 @@ function ConnectedDriveSyncDialog({
11264
11264
  }
11265
11265
  ) }),
11266
11266
  /* @__PURE__ */ jsxRuntime.jsx(
11267
- chunkRHKFCSFC_cjs.SyncField,
11267
+ chunkLAGHW4JM_cjs.SyncField,
11268
11268
  {
11269
11269
  label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
11270
11270
  hint: "Select at least one folder. Importing a folder includes everything inside it.",
11271
- actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncLinkRow, { children: [
11271
+ actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncLinkRow, { children: [
11272
11272
  /* @__PURE__ */ jsxRuntime.jsx(
11273
- chunkRHKFCSFC_cjs.SyncLinkButton,
11273
+ chunkLAGHW4JM_cjs.SyncLinkButton,
11274
11274
  {
11275
11275
  onClick: () => setExpandAllNonce((n) => n + 1),
11276
11276
  testId: "drive-folders-expand-all",
@@ -11278,7 +11278,7 @@ function ConnectedDriveSyncDialog({
11278
11278
  }
11279
11279
  ),
11280
11280
  /* @__PURE__ */ jsxRuntime.jsx(
11281
- chunkRHKFCSFC_cjs.SyncLinkButton,
11281
+ chunkLAGHW4JM_cjs.SyncLinkButton,
11282
11282
  {
11283
11283
  onClick: () => setCollapseAllNonce((n) => n + 1),
11284
11284
  testId: "drive-folders-collapse-all",
@@ -11286,19 +11286,19 @@ function ConnectedDriveSyncDialog({
11286
11286
  }
11287
11287
  )
11288
11288
  ] }),
11289
- children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
11290
- chunkRHKFCSFC_cjs.SyncReconnectNotice,
11289
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
11290
+ chunkLAGHW4JM_cjs.SyncReconnectNotice,
11291
11291
  {
11292
11292
  ...reconnectButtonProps,
11293
11293
  message: `Reconnect ${catalog.display_name} to enable ${productName} \u2014 your account needs to grant file access.`
11294
11294
  }
11295
11295
  ) : foldersError ? /* @__PURE__ */ jsxRuntime.jsx(
11296
- chunkRHKFCSFC_cjs.SyncReconnectNotice,
11296
+ chunkLAGHW4JM_cjs.SyncReconnectNotice,
11297
11297
  {
11298
11298
  ...reconnectButtonProps,
11299
11299
  message: `Couldn\u2019t load folders from ${productName}. Reconnect the account and try again.`
11300
11300
  }
11301
- ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
11301
+ ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
11302
11302
  DriveFolderNode,
11303
11303
  {
11304
11304
  vendorKey: catalog.vendor_key,
@@ -11315,9 +11315,9 @@ function ConnectedDriveSyncDialog({
11315
11315
  )) }) })
11316
11316
  }
11317
11317
  ),
11318
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.SyncOptions, { children: [
11318
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.SyncOptions, { children: [
11319
11319
  /* @__PURE__ */ jsxRuntime.jsx(
11320
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11320
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11321
11321
  {
11322
11322
  checked: skipDuplicates,
11323
11323
  onCheckedChange: setSkipDuplicates,
@@ -11326,7 +11326,7 @@ function ConnectedDriveSyncDialog({
11326
11326
  }
11327
11327
  ),
11328
11328
  /* @__PURE__ */ jsxRuntime.jsx(
11329
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11329
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11330
11330
  {
11331
11331
  checked: autoRename,
11332
11332
  onCheckedChange: setAutoRename,
@@ -11335,7 +11335,7 @@ function ConnectedDriveSyncDialog({
11335
11335
  }
11336
11336
  ),
11337
11337
  /* @__PURE__ */ jsxRuntime.jsx(
11338
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11338
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11339
11339
  {
11340
11340
  checked: shared,
11341
11341
  onCheckedChange: setShared,
@@ -11344,7 +11344,7 @@ function ConnectedDriveSyncDialog({
11344
11344
  }
11345
11345
  ),
11346
11346
  /* @__PURE__ */ jsxRuntime.jsx(
11347
- chunkRHKFCSFC_cjs.SyncOptionToggle,
11347
+ chunkLAGHW4JM_cjs.SyncOptionToggle,
11348
11348
  {
11349
11349
  checked: autoSync,
11350
11350
  onCheckedChange: setAutoSync,
@@ -11356,7 +11356,7 @@ function ConnectedDriveSyncDialog({
11356
11356
  ] })
11357
11357
  ] }),
11358
11358
  /* @__PURE__ */ jsxRuntime.jsx(
11359
- chunkRHKFCSFC_cjs.SyncDialogFooter,
11359
+ chunkLAGHW4JM_cjs.SyncDialogFooter,
11360
11360
  {
11361
11361
  onCancel: () => onOpenChange(false),
11362
11362
  onSave: handleEnableSubmit,
@@ -11377,36 +11377,36 @@ function ConnectedSharePointAdminConsentPage({
11377
11377
  const result = givenResult === void 0 ? queryResult : givenResult;
11378
11378
  const { apiBaseUrl } = chunk2QQUGL2V_cjs.useBlocksEnvironment().runtimeConfig;
11379
11379
  const consentUrl = `${apiBaseUrl}/v1/connectors/microsoft_sharepoint/admin-consent`;
11380
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentCard, { size: "md", children: [
11380
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentCard, { size: "md", children: [
11381
11381
  /* @__PURE__ */ jsxRuntime.jsx(
11382
- chunkS4G3DNMA_cjs.ConsentHeader,
11382
+ chunkQZTA2M4U_cjs.ConsentHeader,
11383
11383
  {
11384
11384
  icon: /* @__PURE__ */ jsxRuntime.jsx(chunkEWWVKXEQ_cjs.VendorLogo, { vendorKey: "microsoft_sharepoint", product: "sharepoint" }),
11385
11385
  title: "Approve ARBI for SharePoint access",
11386
11386
  children: "A member of your organization uses ARBI and wants to sync documents from SharePoint. Your Microsoft 365 organization requires an administrator to approve this once for the whole organization."
11387
11387
  }
11388
11388
  ),
11389
- result === "granted" && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentNotice, { tone: "success", title: "Access approved \u2014 you\u2019re all set.", className: "mt-4", children: "People in your organization can now connect SharePoint from their own ARBI account. Nothing is synced until each user connects and chooses what to import." }),
11390
- result === "declined" && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentNotice, { tone: "warning", title: "The approval didn\u2019t complete.", className: "mt-4", children: "The request was declined or canceled on the Microsoft screen. You can try again below \u2014 you must sign in with a Microsoft 365 administrator account of your organization." }),
11391
- /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentSection, { title: "What you are approving", children: [
11389
+ result === "granted" && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentNotice, { tone: "success", title: "Access approved \u2014 you\u2019re all set.", className: "mt-4", children: "People in your organization can now connect SharePoint from their own ARBI account. Nothing is synced until each user connects and chooses what to import." }),
11390
+ result === "declined" && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentNotice, { tone: "warning", title: "The approval didn\u2019t complete.", className: "mt-4", children: "The request was declined or canceled on the Microsoft screen. You can try again below \u2014 you must sign in with a Microsoft 365 administrator account of your organization." }),
11391
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentSection, { title: "What you are approving", children: [
11392
11392
  /* @__PURE__ */ jsxRuntime.jsx(
11393
- chunkS4G3DNMA_cjs.ConsentBulletList,
11393
+ chunkQZTA2M4U_cjs.ConsentBulletList,
11394
11394
  {
11395
11395
  items: [
11396
11396
  /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11397
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentStrong, { children: "Read SharePoint sites and files" }),
11397
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentStrong, { children: "Read SharePoint sites and files" }),
11398
11398
  " \u2014 lets each user who connects their own account import documents from sites they already have access to. ARBI never gets more access than the user has."
11399
11399
  ] }),
11400
11400
  /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11401
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentStrong, { children: "Sign users in and keep access" }),
11401
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentStrong, { children: "Sign users in and keep access" }),
11402
11402
  " \u2014 standard sign-in (openid, profile, email) and offline access so syncs keep working between sessions."
11403
11403
  ] })
11404
11404
  ]
11405
11405
  }
11406
11406
  ),
11407
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentText, { children: "Approving does not sync anything by itself and grants ARBI no standing access to your tenant. Each user still connects their own Microsoft account, and their tokens are end-to-end encrypted so ARBI\u2019s servers cannot read them at rest." }),
11407
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentText, { children: "Approving does not sync anything by itself and grants ARBI no standing access to your tenant. Each user still connects their own Microsoft account, and their tokens are end-to-end encrypted so ARBI\u2019s servers cannot read them at rest." }),
11408
11408
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { asChild: true, className: "w-full pointer-coarse:h-11", children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: consentUrl, children: "Review and approve in Microsoft" }) }),
11409
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentText, { variant: "footnote", children: "You\u2019ll sign in at login.microsoftonline.com and see Microsoft\u2019s own summary of these permissions before anything is granted." })
11409
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentText, { variant: "footnote", children: "You\u2019ll sign in at login.microsoftonline.com and see Microsoft\u2019s own summary of these permissions before anything is granted." })
11410
11410
  ] })
11411
11411
  ] }) });
11412
11412
  }
@@ -11428,7 +11428,7 @@ function BillingProjectEntity({
11428
11428
  subscription = "none",
11429
11429
  ...props
11430
11430
  }) {
11431
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
11431
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
11432
11432
  const isPaid2 = stripeEnabled && (subscription === "active" || subscription === "past_due" || subscription === "dev");
11433
11433
  return /* @__PURE__ */ jsxRuntime.jsx(ui.ProjectEntity, { ...props, subscription, isPaid: isPaid2 });
11434
11434
  }
@@ -11455,8 +11455,8 @@ function InvoicesModal({
11455
11455
  key: inv.number ?? String(i),
11456
11456
  date: formatInvoiceDate(inv.date),
11457
11457
  kind: KIND_LABELS2[inv.kind],
11458
- amount: chunkLYF47OXX_cjs.formatMoney(inv.amount, inv.currency),
11459
- amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunkLYF47OXX_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
11458
+ amount: chunkT67EFI43_cjs.formatMoney(inv.amount, inv.currency),
11459
+ amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunkT67EFI43_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
11460
11460
  status: inv.status,
11461
11461
  isPaid: isPaid2,
11462
11462
  href: inv.hosted_invoice_url ?? inv.url ?? inv.pdf_url ?? void 0,
@@ -11464,7 +11464,7 @@ function InvoicesModal({
11464
11464
  };
11465
11465
  });
11466
11466
  return /* @__PURE__ */ jsxRuntime.jsx(
11467
- chunkRHKFCSFC_cjs.InvoicesDialog,
11467
+ chunkLAGHW4JM_cjs.InvoicesDialog,
11468
11468
  {
11469
11469
  open,
11470
11470
  onOpenChange,
@@ -11491,7 +11491,7 @@ function StripeCheckoutModal({
11491
11491
  const [clientSecret, setClientSecret] = React7.useState(null);
11492
11492
  const [isCreating, setIsCreating] = React7.useState(false);
11493
11493
  const [stripe, setStripe] = React7.useState(null);
11494
- const { stripeEnabled, checkout } = chunkLYF47OXX_cjs.useBillingSupport();
11494
+ const { stripeEnabled, checkout } = chunkT67EFI43_cjs.useBillingSupport();
11495
11495
  const createCheckout = react.useCreateProjectCheckout();
11496
11496
  const refreshProject = react.useRefreshProject();
11497
11497
  const invalidateProjects = react.useInvalidateProjects();
@@ -11518,7 +11518,7 @@ function StripeCheckoutModal({
11518
11518
  projectExtId,
11519
11519
  body: {
11520
11520
  interval,
11521
- packs: chunkLYF47OXX_cjs.PRO_PACKS,
11521
+ packs: chunkT67EFI43_cjs.PRO_PACKS,
11522
11522
  ai_blocks: aiBlocks,
11523
11523
  storage_blocks: storageBlocks,
11524
11524
  addon_budget_pence: addonBudgetPence,
@@ -11534,7 +11534,7 @@ function StripeCheckoutModal({
11534
11534
  },
11535
11535
  onError: (error) => {
11536
11536
  console.error("Failed to create checkout session:", error);
11537
- const reason = chunkLYF47OXX_cjs.apiErrorDetail(error)?.message;
11537
+ const reason = chunkT67EFI43_cjs.apiErrorDetail(error)?.message;
11538
11538
  shell.notify.error(
11539
11539
  reason ? `Checkout didn't start: ${reason}` : "Checkout didn't start. Try again."
11540
11540
  );
@@ -11567,9 +11567,9 @@ function StripeCheckoutModal({
11567
11567
  }
11568
11568
  }, [open]);
11569
11569
  const isStripeConfigured = stripeEnabled;
11570
- const vatNote = quote ? `${chunkLYF47OXX_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunkLYF47OXX_cjs.quoteTotalLine(quote)}` : null;
11570
+ const vatNote = quote ? `${chunkT67EFI43_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunkT67EFI43_cjs.quoteTotalLine(quote)}` : null;
11571
11571
  return /* @__PURE__ */ jsxRuntime.jsx(
11572
- chunkRHKFCSFC_cjs.CheckoutDialogFrame,
11572
+ chunkLAGHW4JM_cjs.CheckoutDialogFrame,
11573
11573
  {
11574
11574
  open,
11575
11575
  onOpenChange,
@@ -11579,7 +11579,7 @@ function StripeCheckoutModal({
11579
11579
  children: clientSecret && !!stripe && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11580
11580
  vatNote && /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-vat-note", className: "mb-4 text-sm text-muted-foreground", children: vatNote }),
11581
11581
  checkout?.render(stripe, { clientSecret, onComplete: handleComplete }),
11582
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.MoreInfo, { title: "Paying", label: "Payment help", testId: "checkout-payment-help", children: [
11582
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.MoreInfo, { title: "Paying", label: "Payment help", testId: "checkout-payment-help", children: [
11583
11583
  /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-decline-note", children: "Card declined? Nothing was charged. Try again or use another card." }),
11584
11584
  /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-vat-id-note", children: "No VAT number? Leave \u2018purchasing as a business\u2019 unticked." }),
11585
11585
  /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Add-ons chosen here are on the first invoice with the plan and renew with it until you reduce them." })
@@ -11621,31 +11621,31 @@ function defaultBillingCountry(languages = typeof navigator === "undefined" ? []
11621
11621
  }
11622
11622
  var choiceForPacks = (packs) => packs > 0 ? "pro" : "free";
11623
11623
  function proCard(selected, isAnnual, prices) {
11624
- const packs = chunkLYF47OXX_cjs.PLAN_CHOICE_PACKS.pro;
11624
+ const packs = chunkT67EFI43_cjs.PLAN_CHOICE_PACKS.pro;
11625
11625
  const currency = prices.monthly?.currency ?? prices.annual?.currency ?? "gbp";
11626
- const monthly = chunkLYF47OXX_cjs.packPrice(prices.monthly, packs);
11627
- const annual = chunkLYF47OXX_cjs.packPrice(prices.annual, packs);
11626
+ const monthly = chunkT67EFI43_cjs.packPrice(prices.monthly, packs);
11627
+ const annual = chunkT67EFI43_cjs.packPrice(prices.annual, packs);
11628
11628
  const current2 = isAnnual ? annual : monthly;
11629
11629
  const effectiveMonthly = current2 ? isAnnual ? current2.amount_ex_vat / 12 : current2.amount_ex_vat : null;
11630
11630
  return {
11631
11631
  id: packs,
11632
- name: chunkLYF47OXX_cjs.planNameForPacks(packs),
11632
+ name: chunkT67EFI43_cjs.planNameForPacks(packs),
11633
11633
  isSelected: selected === "pro",
11634
11634
  price: current2 && effectiveMonthly != null ? {
11635
11635
  annual: isAnnual,
11636
- yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current2.amount_ex_vat ? chunkLYF47OXX_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
11637
- yearlyTotal: isAnnual ? chunkLYF47OXX_cjs.formatMoney(current2.amount_ex_vat, currency) : void 0,
11636
+ yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current2.amount_ex_vat ? chunkT67EFI43_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
11637
+ yearlyTotal: isAnnual ? chunkT67EFI43_cjs.formatMoney(current2.amount_ex_vat, currency) : void 0,
11638
11638
  intervalLabel: isAnnual ? "/yr + VAT" : "/mo",
11639
- monthly: chunkLYF47OXX_cjs.formatMoney(Math.round(effectiveMonthly), currency),
11639
+ monthly: chunkT67EFI43_cjs.formatMoney(Math.round(effectiveMonthly), currency),
11640
11640
  taxLabel: "+ VAT",
11641
11641
  // The inclusive figure for a UK customer, right under the headline.
11642
- note: `${chunkLYF47OXX_cjs.formatMoney(current2.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
11642
+ note: `${chunkT67EFI43_cjs.formatMoney(current2.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
11643
11643
  } : void 0,
11644
11644
  features: [
11645
- `${react.formatGbp(chunkLYF47OXX_cjs.PRO_AI_GBP)} of AI usage / month`,
11646
- `${chunkLYF47OXX_cjs.PRO_STORAGE_GB} GB storage`,
11645
+ `${react.formatGbp(chunkT67EFI43_cjs.PRO_AI_GBP)} of AI usage / month`,
11646
+ `${chunkT67EFI43_cjs.PRO_STORAGE_GB} GB storage`,
11647
11647
  "Unlimited collaborators",
11648
- ...isAnnual ? [chunkLYF47OXX_cjs.ANNUAL_PREMIUM_AI_NOTE] : []
11648
+ ...isAnnual ? [chunkT67EFI43_cjs.ANNUAL_PREMIUM_AI_NOTE] : []
11649
11649
  ]
11650
11650
  };
11651
11651
  }
@@ -11657,9 +11657,9 @@ function buildPlanCards(selected, isAnnual, prices, isOnFree) {
11657
11657
  isCurrent: isOnFree,
11658
11658
  isSelected: selected === "free" && !isOnFree,
11659
11659
  features: [
11660
- `${react.formatGbp(chunkLYF47OXX_cjs.FREE_AI_GBP)} of AI usage / month`,
11661
- `${chunkLYF47OXX_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
11662
- chunkLYF47OXX_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunkLYF47OXX_cjs.FREE_COLLABORATORS} collaborators`
11660
+ `${react.formatGbp(chunkT67EFI43_cjs.FREE_AI_GBP)} of AI usage / month`,
11661
+ `${chunkT67EFI43_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
11662
+ chunkT67EFI43_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunkT67EFI43_cjs.FREE_COLLABORATORS} collaborators`
11663
11663
  ]
11664
11664
  };
11665
11665
  return [free, proCard(selected, isAnnual, prices)];
@@ -11672,7 +11672,7 @@ function PlanChoiceCards({
11672
11672
  isOnFree = false
11673
11673
  }) {
11674
11674
  return /* @__PURE__ */ jsxRuntime.jsx(
11675
- chunkRHKFCSFC_cjs.PlanCardGrid,
11675
+ chunkLAGHW4JM_cjs.PlanCardGrid,
11676
11676
  {
11677
11677
  plans: buildPlanCards(selected, isAnnual, prices, isOnFree),
11678
11678
  onSelect: (id) => onSelect(choiceForPacks(id))
@@ -11681,13 +11681,13 @@ function PlanChoiceCards({
11681
11681
  }
11682
11682
  function PlanInfoPopover2() {
11683
11683
  const { openSettings } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
11684
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanInfoPopover, { onOpenModelList: () => openSettings("chat") });
11684
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanInfoPopover, { onOpenModelList: () => openSettings("chat") });
11685
11685
  }
11686
11686
  function CheckoutAddonBudget({
11687
11687
  value,
11688
11688
  onChange
11689
11689
  }) {
11690
- const budget = chunkLYF47OXX_cjs.parseBudgetPounds(value);
11690
+ const budget = chunkT67EFI43_cjs.parseBudgetPounds(value);
11691
11691
  return /* @__PURE__ */ jsxRuntime.jsxs(
11692
11692
  "div",
11693
11693
  {
@@ -11710,7 +11710,7 @@ function CheckoutAddonBudget({
11710
11710
  step: 25,
11711
11711
  className: "h-8 w-24",
11712
11712
  value,
11713
- placeholder: String(chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
11713
+ placeholder: String(chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
11714
11714
  onChange: (e) => onChange(e.target.value),
11715
11715
  "aria-invalid": budget === void 0,
11716
11716
  "data-testid": "checkout-addon-budget-input"
@@ -11728,7 +11728,7 @@ function BlockStepper({
11728
11728
  onChange,
11729
11729
  testId
11730
11730
  }) {
11731
- const set2 = (n) => onChange(Math.max(0, Math.min(chunkLYF47OXX_cjs.MAX_CHECKOUT_BLOCKS, n)));
11731
+ const set2 = (n) => onChange(Math.max(0, Math.min(chunkT67EFI43_cjs.MAX_CHECKOUT_BLOCKS, n)));
11732
11732
  return /* @__PURE__ */ jsxRuntime.jsxs(
11733
11733
  "div",
11734
11734
  {
@@ -11772,7 +11772,7 @@ function BlockStepper({
11772
11772
  className: "size-8",
11773
11773
  "aria-label": `More: ${label}`,
11774
11774
  onClick: () => set2(value + 1),
11775
- disabled: value >= chunkLYF47OXX_cjs.MAX_CHECKOUT_BLOCKS,
11775
+ disabled: value >= chunkT67EFI43_cjs.MAX_CHECKOUT_BLOCKS,
11776
11776
  "data-testid": `${testId}-increment`,
11777
11777
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" })
11778
11778
  }
@@ -11789,8 +11789,8 @@ function CheckoutAddonBlocks({
11789
11789
  onStorageBlocksChange,
11790
11790
  price
11791
11791
  }) {
11792
- const ai = chunkLYF47OXX_cjs.addonPrice(price, "ai_usage");
11793
- const storage = chunkLYF47OXX_cjs.addonPrice(price, "storage");
11792
+ const ai = chunkT67EFI43_cjs.addonPrice(price, "ai_usage");
11793
+ const storage = chunkT67EFI43_cjs.addonPrice(price, "storage");
11794
11794
  return /* @__PURE__ */ jsxRuntime.jsxs(
11795
11795
  "div",
11796
11796
  {
@@ -11800,8 +11800,8 @@ function CheckoutAddonBlocks({
11800
11800
  /* @__PURE__ */ jsxRuntime.jsx(
11801
11801
  BlockStepper,
11802
11802
  {
11803
- label: `+${react.formatGbp(ai?.ai_gbp || chunkLYF47OXX_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
11804
- priceText: chunkLYF47OXX_cjs.checkoutBlockPriceText(price, "ai_usage"),
11803
+ label: `+${react.formatGbp(ai?.ai_gbp || chunkT67EFI43_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
11804
+ priceText: chunkT67EFI43_cjs.checkoutBlockPriceText(price, "ai_usage"),
11805
11805
  value: aiBlocks,
11806
11806
  onChange: onAiBlocksChange,
11807
11807
  testId: "checkout-ai-blocks"
@@ -11810,8 +11810,8 @@ function CheckoutAddonBlocks({
11810
11810
  /* @__PURE__ */ jsxRuntime.jsx(
11811
11811
  BlockStepper,
11812
11812
  {
11813
- label: `+${storage?.storage_gb || chunkLYF47OXX_cjs.STORAGE_BLOCK_GB} GB storage`,
11814
- priceText: chunkLYF47OXX_cjs.checkoutBlockPriceText(price, "storage"),
11813
+ label: `+${storage?.storage_gb || chunkT67EFI43_cjs.STORAGE_BLOCK_GB} GB storage`,
11814
+ priceText: chunkT67EFI43_cjs.checkoutBlockPriceText(price, "storage"),
11815
11815
  value: storageBlocks,
11816
11816
  onChange: onStorageBlocksChange,
11817
11817
  testId: "checkout-storage-blocks"
@@ -11866,14 +11866,14 @@ function ConnectedReferralRewardSummary({
11866
11866
  if (!reward) return null;
11867
11867
  const applied = totalCents != null && currency ? applyReferralReward(totalCents, reward, currency) : null;
11868
11868
  return /* @__PURE__ */ jsxRuntime.jsx(
11869
- chunkRHKFCSFC_cjs.ReferralRewardSummary,
11869
+ chunkLAGHW4JM_cjs.ReferralRewardSummary,
11870
11870
  {
11871
- amountLabel: chunkLYF47OXX_cjs.formatMoney(reward.amount, reward.currency),
11871
+ amountLabel: chunkT67EFI43_cjs.formatMoney(reward.amount, reward.currency),
11872
11872
  breakdown: applied && totalCents != null && currency ? {
11873
- subtotal: chunkLYF47OXX_cjs.formatMoney(totalCents, currency),
11874
- reward: chunkLYF47OXX_cjs.formatMoney(applied.bonus, currency),
11875
- youPay: chunkLYF47OXX_cjs.formatMoney(applied.youPay, currency),
11876
- rollover: applied.remaining > 0 ? chunkLYF47OXX_cjs.formatMoney(applied.remaining, currency) : void 0
11873
+ subtotal: chunkT67EFI43_cjs.formatMoney(totalCents, currency),
11874
+ reward: chunkT67EFI43_cjs.formatMoney(applied.bonus, currency),
11875
+ youPay: chunkT67EFI43_cjs.formatMoney(applied.youPay, currency),
11876
+ rollover: applied.remaining > 0 ? chunkT67EFI43_cjs.formatMoney(applied.remaining, currency) : void 0
11877
11877
  } : void 0
11878
11878
  }
11879
11879
  );
@@ -11881,7 +11881,7 @@ function ConnectedReferralRewardSummary({
11881
11881
  function ConnectedReferralRewardNote() {
11882
11882
  const reward = useReferralReward();
11883
11883
  if (!reward) return null;
11884
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.ReferralRewardNote, { amountLabel: chunkLYF47OXX_cjs.formatMoney(reward.amount, reward.currency) });
11884
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.ReferralRewardNote, { amountLabel: chunkT67EFI43_cjs.formatMoney(reward.amount, reward.currency) });
11885
11885
  }
11886
11886
  function CheckoutTotal({
11887
11887
  state,
@@ -11910,7 +11910,7 @@ function CheckoutTotal({
11910
11910
  className: "text-sm font-medium text-foreground",
11911
11911
  "data-testid": "checkout-total",
11912
11912
  "aria-live": "polite",
11913
- children: state.quote && !state.isLoading ? chunkLYF47OXX_cjs.quoteTotalLine(state.quote) : state.isLoading ? "Calculating total\u2026" : state.error
11913
+ children: state.quote && !state.isLoading ? chunkT67EFI43_cjs.quoteTotalLine(state.quote) : state.isLoading ? "Calculating total\u2026" : state.error
11914
11914
  }
11915
11915
  )
11916
11916
  ] });
@@ -11943,13 +11943,13 @@ function useCheckoutQuote({
11943
11943
  ...aiBlocks || storageBlocks ? { addons: { ai_usage: aiBlocks, storage: storageBlocks } } : {}
11944
11944
  } : null
11945
11945
  );
11946
- const { code, message } = query.isError ? chunkLYF47OXX_cjs.quoteError(query.error) : {};
11947
- const locationInvalid = code === chunkLYF47OXX_cjs.TAX_LOCATION_INVALID;
11946
+ const { code, message } = query.isError ? chunkT67EFI43_cjs.quoteError(query.error) : {};
11947
+ const locationInvalid = code === chunkT67EFI43_cjs.TAX_LOCATION_INVALID;
11948
11948
  const isLoading = enabled && (query.isLoading || postal !== postalCode.trim());
11949
11949
  return {
11950
11950
  quote: query.data,
11951
11951
  isLoading,
11952
- showPostcode: chunkLYF47OXX_cjs.POSTCODE_COUNTRIES.includes(country) || locationInvalid || postalCode !== "",
11952
+ showPostcode: chunkT67EFI43_cjs.POSTCODE_COUNTRIES.includes(country) || locationInvalid || postalCode !== "",
11953
11953
  error: query.isError ? locationInvalid ? message ?? "Enter your ZIP / postal code to see the total." : message ?? "Couldn't calculate tax. Stripe shows the total next." : null,
11954
11954
  canContinue: !isLoading && (!!query.data || query.isError && !locationInvalid)
11955
11955
  };
@@ -11958,7 +11958,7 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
11958
11958
  const { data: products, isLoading, error } = react.useProducts();
11959
11959
  const [isAnnual, setIsAnnual] = React7.useState(false);
11960
11960
  const [promoCode, setPromoCode] = React7.useState("");
11961
- const [addonBudget, setAddonBudget] = React7.useState(String(chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
11961
+ const [addonBudget, setAddonBudget] = React7.useState(String(chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
11962
11962
  const [checkoutBudget, setCheckoutBudget] = React7.useState(null);
11963
11963
  const [aiBlocks, setAiBlocks] = React7.useState(0);
11964
11964
  const [storageBlocks, setStorageBlocks] = React7.useState(0);
@@ -11976,31 +11976,31 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
11976
11976
  storageBlocks,
11977
11977
  enabled: !!products?.length
11978
11978
  });
11979
- if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { children: "Loading plans\u2026" });
11980
- if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
11981
- if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { children: "No plans available." });
11982
- const prices = chunkLYF47OXX_cjs.findProPrices(products);
11979
+ if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { children: "Loading plans\u2026" });
11980
+ if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
11981
+ if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { children: "No plans available." });
11982
+ const prices = chunkT67EFI43_cjs.findProPrices(products);
11983
11983
  const intervalPrice = isAnnual ? prices.annual : prices.monthly;
11984
- const selectedPrice = chunkLYF47OXX_cjs.packPrice(intervalPrice);
11984
+ const selectedPrice = chunkT67EFI43_cjs.packPrice(intervalPrice);
11985
11985
  if (!intervalPrice) return null;
11986
11986
  const interval = isAnnual ? "year" : "month";
11987
- const savingsPercent = chunkLYF47OXX_cjs.calcSavingsPercent(prices.monthly, prices.annual);
11987
+ const savingsPercent = chunkT67EFI43_cjs.calcSavingsPercent(prices.monthly, prices.annual);
11988
11988
  const handleSubscribe = () => {
11989
11989
  setCheckoutInterval(interval);
11990
- const parsed = chunkLYF47OXX_cjs.parseBudgetPounds(addonBudget);
11991
- setCheckoutBudget(parsed == null || parsed === chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed);
11990
+ const parsed = chunkT67EFI43_cjs.parseBudgetPounds(addonBudget);
11991
+ setCheckoutBudget(parsed == null || parsed === chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed);
11992
11992
  setCheckoutQuote(quote.quote);
11993
11993
  setIsCheckoutModalOpen(true);
11994
11994
  };
11995
11995
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11996
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanStack, { children: [
11996
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanStack, { children: [
11997
11997
  /* @__PURE__ */ jsxRuntime.jsx(
11998
- chunkRHKFCSFC_cjs.PlanPickerHeader,
11998
+ chunkLAGHW4JM_cjs.PlanPickerHeader,
11999
11999
  {
12000
12000
  title: "Plan",
12001
12001
  info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
12002
12002
  toggle: /* @__PURE__ */ jsxRuntime.jsx(
12003
- chunkRHKFCSFC_cjs.PricingToggle,
12003
+ chunkLAGHW4JM_cjs.PricingToggle,
12004
12004
  {
12005
12005
  isAnnual,
12006
12006
  onToggle: () => setIsAnnual(!isAnnual),
@@ -12037,7 +12037,7 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
12037
12037
  currency: intervalPrice.currency
12038
12038
  }
12039
12039
  ),
12040
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
12040
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
12041
12041
  /* @__PURE__ */ jsxRuntime.jsx(
12042
12042
  CheckoutCountrySelect,
12043
12043
  {
@@ -12049,9 +12049,9 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
12049
12049
  }
12050
12050
  ),
12051
12051
  /* @__PURE__ */ jsxRuntime.jsx(CheckoutTotal, { state: quote, postalCode, onPostalCodeChange: setPostalCode }),
12052
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanActionRow, { children: [
12052
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanActionRow, { children: [
12053
12053
  onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
12054
- chunkRHKFCSFC_cjs.PlanActionButton,
12054
+ chunkLAGHW4JM_cjs.PlanActionButton,
12055
12055
  {
12056
12056
  tone: "muted",
12057
12057
  fill: true,
@@ -12062,11 +12062,11 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
12062
12062
  }
12063
12063
  ),
12064
12064
  /* @__PURE__ */ jsxRuntime.jsx(
12065
- chunkRHKFCSFC_cjs.PlanActionButton,
12065
+ chunkLAGHW4JM_cjs.PlanActionButton,
12066
12066
  {
12067
12067
  fill: true,
12068
12068
  onClick: handleSubscribe,
12069
- disabled: !selectedPrice || chunkLYF47OXX_cjs.parseBudgetPounds(addonBudget) === void 0 || !quote.canContinue,
12069
+ disabled: !selectedPrice || chunkT67EFI43_cjs.parseBudgetPounds(addonBudget) === void 0 || !quote.canContinue,
12070
12070
  size: "sm",
12071
12071
  "data-testid": "subscribe-button",
12072
12072
  children: "Continue to payment"
@@ -12098,15 +12098,15 @@ var sentence = (text2) => text2.trim().replace(/[.;:,\s]+$/, "");
12098
12098
  function refusal(what, next) {
12099
12099
  return `${sentence(what)}. Nothing was charged. ${sentence(next)}.`;
12100
12100
  }
12101
-
12102
- // src/connection/billing/useAddonPurchase.ts
12103
12101
  var FALLBACK_MESSAGES = {
12104
12102
  PAYMENT_DECLINED: "Card declined. Update your card and try again.",
12105
- PAYMENT_METHOD_REQUIRED: "Add a card to this project first.",
12103
+ get PAYMENT_METHOD_REQUIRED() {
12104
+ return `Add a card to this ${ui.entityNoun("PROJECT")} first.`;
12105
+ },
12106
12106
  BILLING_ADDRESS_REQUIRED: "Add a billing address first."
12107
12107
  };
12108
12108
  function addonErrorMessage(error) {
12109
- const detail = chunkLYF47OXX_cjs.apiErrorDetail(error);
12109
+ const detail = chunkT67EFI43_cjs.apiErrorDetail(error);
12110
12110
  if (detail && typeof detail === "object") {
12111
12111
  const { code, message } = detail;
12112
12112
  if (message) return message;
@@ -12117,29 +12117,33 @@ function addonErrorMessage(error) {
12117
12117
  }
12118
12118
  var REFUSALS = {
12119
12119
  PAYMENT_DECLINED: refusal("Card declined", "Update your card and try again"),
12120
- PAYMENT_METHOD_REQUIRED: refusal("No card on this project", "Add one with Update card"),
12121
- BILLING_ADDRESS_REQUIRED: refusal(
12122
- "No billing address on this project",
12123
- "Add one with Update card"
12124
- )
12120
+ get PAYMENT_METHOD_REQUIRED() {
12121
+ return refusal(`No card on this ${ui.entityNoun("PROJECT")}`, "Add one with Update card");
12122
+ },
12123
+ get BILLING_ADDRESS_REQUIRED() {
12124
+ return refusal(
12125
+ `No billing address on this ${ui.entityNoun("PROJECT")}`,
12126
+ "Add one with Update card"
12127
+ );
12128
+ }
12125
12129
  };
12126
12130
  function chargeRefusalMessage(error) {
12127
12131
  const code = addonErrorCode(error);
12128
12132
  return code ? REFUSALS[code] : null;
12129
12133
  }
12130
12134
  function addonErrorCode(error) {
12131
- const detail = chunkLYF47OXX_cjs.apiErrorDetail(error);
12135
+ const detail = chunkT67EFI43_cjs.apiErrorDetail(error);
12132
12136
  if (detail && typeof detail === "object") {
12133
12137
  const code = detail.code;
12134
12138
  if (code && code in FALLBACK_MESSAGES) return code;
12135
12139
  }
12136
12140
  return null;
12137
12141
  }
12138
- var addedMessage = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `${react.formatGbp(blockAiGbp ?? chunkLYF47OXX_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunkLYF47OXX_cjs.STORAGE_BLOCK_GB} GB added`;
12142
+ var addedMessage = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `${react.formatGbp(blockAiGbp ?? chunkT67EFI43_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunkT67EFI43_cjs.STORAGE_BLOCK_GB} GB added`;
12139
12143
  function useAddonPurchase() {
12140
12144
  const addBlock = react.useAddProjectAddonBlock();
12141
12145
  const { mutate } = addBlock;
12142
- const { onAddonBlocksBought } = chunkLYF47OXX_cjs.useBillingSupport();
12146
+ const { onAddonBlocksBought } = chunkT67EFI43_cjs.useBillingSupport();
12143
12147
  const buy = React7.useCallback(
12144
12148
  (kind, projectExtId, options2) => {
12145
12149
  mutate(
@@ -12183,7 +12187,7 @@ function PlanChangeLines({
12183
12187
  isError,
12184
12188
  className
12185
12189
  }) {
12186
- const lines = preview ? chunkLYF47OXX_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunkLYF47OXX_cjs.PAY_TODAY_UNPRICED : "Checking price\u2026" }];
12190
+ const lines = preview ? chunkT67EFI43_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunkT67EFI43_cjs.PAY_TODAY_UNPRICED : "Checking price\u2026" }];
12187
12191
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className, "data-testid": "plan-change-lines", children: lines.map((line) => /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": `plan-change-${line.id}`, children: line.text }, line.id)) });
12188
12192
  }
12189
12193
  var BANK_CONFIRM_PLAN_CHANGE = "Confirm with your bank. Nothing is charged until you do.";
@@ -12191,13 +12195,13 @@ function notifyPlanChange(data, fallback, planName2) {
12191
12195
  const outcome = data?.plan_change;
12192
12196
  switch (outcome?.result) {
12193
12197
  case "upgraded": {
12194
- const plan = chunkLYF47OXX_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
12195
- const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunkLYF47OXX_cjs.formatMoney(outcome.charged_pence, "gbp")} charged` : "";
12198
+ const plan = chunkT67EFI43_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
12199
+ const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunkT67EFI43_cjs.formatMoney(outcome.charged_pence, "gbp")} charged` : "";
12196
12200
  shell.notify.success(`Upgraded to ${plan}${charged}`);
12197
12201
  break;
12198
12202
  }
12199
12203
  case "scheduled": {
12200
- const when2 = chunkLYF47OXX_cjs.formatPeriodEnd(data?.addons?.period_end ?? data?.current_period_end);
12204
+ const when2 = chunkT67EFI43_cjs.formatPeriodEnd(data?.addons?.period_end ?? data?.current_period_end);
12201
12205
  shell.notify.success(when2 ? `Scheduled for ${when2}` : fallback);
12202
12206
  break;
12203
12207
  }
@@ -12230,23 +12234,23 @@ function ChangeProPlan({
12230
12234
  const { data: products } = react.useProducts();
12231
12235
  const changePlan = react.useChangeProjectPlan();
12232
12236
  const cancel = react.useCancelProjectSubscription();
12233
- const prices = chunkLYF47OXX_cjs.findProPrices(products);
12237
+ const prices = chunkT67EFI43_cjs.findProPrices(products);
12234
12238
  const addons = project.addons;
12235
12239
  const isCanceling = project.cancel_at_period_end === true || project.subscription === "canceled";
12236
- const currentPacks = Math.max(addons?.packs ?? project.packs ?? chunkLYF47OXX_cjs.PRO_PACKS, chunkLYF47OXX_cjs.PRO_PACKS);
12237
- const isLegacyMultiPack = currentPacks > chunkLYF47OXX_cjs.PRO_PACKS;
12240
+ const currentPacks = Math.max(addons?.packs ?? project.packs ?? chunkT67EFI43_cjs.PRO_PACKS, chunkT67EFI43_cjs.PRO_PACKS);
12241
+ const isLegacyMultiPack = currentPacks > chunkT67EFI43_cjs.PRO_PACKS;
12238
12242
  const currentInterval = project.plan_interval === "year" ? "year" : "month";
12239
12243
  const scheduledPacks = isCanceling ? 0 : addons?.packs_next ?? currentPacks;
12240
12244
  const scheduledInterval = addons?.pending_interval ?? currentInterval;
12241
12245
  const [targetPacks, setTargetPacks] = React7.useState(scheduledPacks);
12242
12246
  const [chosenInterval, setChosenInterval] = React7.useState(scheduledInterval);
12243
- const targetInterval = targetPacks > chunkLYF47OXX_cjs.PRO_PACKS ? currentInterval : chosenInterval;
12247
+ const targetInterval = targetPacks > chunkT67EFI43_cjs.PRO_PACKS ? currentInterval : chosenInterval;
12244
12248
  const periodEnd = formatDate(addons?.period_end ?? project.current_period_end);
12245
12249
  const when2 = periodEnd ?? "the end of the period";
12246
12250
  const shortWhen = periodEnd ? periodEnd.replace(/ \d{4}$/, "") : "period end";
12247
12251
  const isPending = changePlan.isPending || cancel.isPending;
12248
12252
  const sameAsScheduled = targetPacks === scheduledPacks && (targetPacks === 0 || targetInterval === scheduledInterval);
12249
- const packOptions = isLegacyMultiPack ? [currentPacks, chunkLYF47OXX_cjs.PRO_PACKS, 0] : [chunkLYF47OXX_cjs.PRO_PACKS, 0];
12253
+ const packOptions = isLegacyMultiPack ? [currentPacks, chunkT67EFI43_cjs.PRO_PACKS, 0] : [chunkT67EFI43_cjs.PRO_PACKS, 0];
12250
12254
  const intervalPrice = targetInterval === "year" ? prices.annual : prices.monthly;
12251
12255
  const currency = intervalPrice?.currency ?? project.currency ?? "gbp";
12252
12256
  const preview = react.usePreviewProjectPlanChange(
@@ -12254,7 +12258,7 @@ function ChangeProPlan({
12254
12258
  sameAsScheduled || targetPacks === 0 ? null : { packs: targetPacks, interval: targetInterval }
12255
12259
  );
12256
12260
  const noChange = sameAsScheduled || preview.data?.unchanged === true;
12257
- const nameFor = (packs) => packs === currentPacks && packs > 0 ? chunkLYF47OXX_cjs.proTierName(project) : chunkLYF47OXX_cjs.planNameForPacks(packs);
12261
+ const nameFor = (packs) => packs === currentPacks && packs > 0 ? chunkT67EFI43_cjs.proTierName(project) : chunkT67EFI43_cjs.planNameForPacks(packs);
12258
12262
  const effects = [];
12259
12263
  const target = nameFor(targetPacks);
12260
12264
  if (targetPacks === 0) {
@@ -12264,7 +12268,7 @@ function ChangeProPlan({
12264
12268
  if (targetPacks < currentPacks) {
12265
12269
  effects.push(`Changes to one Pro licence on ${when2}. No refund.`);
12266
12270
  } else if (!isCanceling && addons?.packs_next != null) {
12267
- effects.push(`Cancels the change to ${chunkLYF47OXX_cjs.planNameForPacks(addons.packs_next)}.`);
12271
+ effects.push(`Cancels the change to ${chunkT67EFI43_cjs.planNameForPacks(addons.packs_next)}.`);
12268
12272
  }
12269
12273
  if (targetInterval !== currentInterval) {
12270
12274
  effects.push(`${targetInterval === "year" ? "Annual" : "Monthly"} billing from ${when2}.`);
@@ -12303,33 +12307,33 @@ function ChangeProPlan({
12303
12307
  if (packs === 0) {
12304
12308
  return {
12305
12309
  total: "\xA30",
12306
- summary: `${react.formatGbp(chunkLYF47OXX_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunkLYF47OXX_cjs.FREE_STORAGE_MB} MB \xB7 just you`
12310
+ summary: `${react.formatGbp(chunkT67EFI43_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunkT67EFI43_cjs.FREE_STORAGE_MB} MB \xB7 just you`
12307
12311
  };
12308
12312
  }
12309
- const allowance = `${react.formatGbp(chunkLYF47OXX_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunkLYF47OXX_cjs.PRO_STORAGE_GB * packs} GB`;
12310
- const legacy = packs > chunkLYF47OXX_cjs.PRO_PACKS;
12311
- const exVat = legacy ? project.amount_ex_vat : chunkLYF47OXX_cjs.packPrice(intervalPrice)?.amount_ex_vat;
12313
+ const allowance = `${react.formatGbp(chunkT67EFI43_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunkT67EFI43_cjs.PRO_STORAGE_GB * packs} GB`;
12314
+ const legacy = packs > chunkT67EFI43_cjs.PRO_PACKS;
12315
+ const exVat = legacy ? project.amount_ex_vat : chunkT67EFI43_cjs.packPrice(intervalPrice)?.amount_ex_vat;
12312
12316
  return {
12313
- total: exVat != null ? chunkLYF47OXX_cjs.plusVat(exVat, currency) : void 0,
12317
+ total: exVat != null ? chunkT67EFI43_cjs.plusVat(exVat, currency) : void 0,
12314
12318
  summary: allowance
12315
12319
  };
12316
12320
  };
12317
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanStack, { gap: 4, testId: "change-pro-plan", children: [
12321
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanStack, { gap: 4, testId: "change-pro-plan", children: [
12318
12322
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
12319
12323
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-foreground", children: "Billing" }),
12320
- targetPacks > chunkLYF47OXX_cjs.PRO_PACKS ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", "data-testid": "change-plan-interval-fixed", children: currentInterval === "year" ? "Annual" : "Monthly" }) : /* @__PURE__ */ jsxRuntime.jsx(
12321
- chunkRHKFCSFC_cjs.PricingToggle,
12324
+ targetPacks > chunkT67EFI43_cjs.PRO_PACKS ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", "data-testid": "change-plan-interval-fixed", children: currentInterval === "year" ? "Annual" : "Monthly" }) : /* @__PURE__ */ jsxRuntime.jsx(
12325
+ chunkLAGHW4JM_cjs.PricingToggle,
12322
12326
  {
12323
12327
  isAnnual: targetInterval === "year",
12324
12328
  onToggle: () => setChosenInterval(targetInterval === "year" ? "month" : "year"),
12325
- savingsPercent: chunkLYF47OXX_cjs.calcSavingsPercent(prices.monthly, prices.annual)
12329
+ savingsPercent: chunkT67EFI43_cjs.calcSavingsPercent(prices.monthly, prices.annual)
12326
12330
  }
12327
12331
  )
12328
12332
  ] }),
12329
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
12333
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
12330
12334
  const { total, summary } = optionFor(packs);
12331
12335
  return /* @__PURE__ */ jsxRuntime.jsx(
12332
- chunkRHKFCSFC_cjs.PlanTierOption,
12336
+ chunkLAGHW4JM_cjs.PlanTierOption,
12333
12337
  {
12334
12338
  onSelect: setTargetPacks,
12335
12339
  option: {
@@ -12346,13 +12350,13 @@ function ChangeProPlan({
12346
12350
  );
12347
12351
  }) }),
12348
12352
  isLegacyMultiPack && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1", children: [
12349
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
12350
- chunkLYF47OXX_cjs.proTierName(project),
12353
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
12354
+ chunkT67EFI43_cjs.proTierName(project),
12351
12355
  " is no longer sold"
12352
12356
  ] }),
12353
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
12357
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
12354
12358
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
12355
- chunkLYF47OXX_cjs.proTierName(project),
12359
+ chunkT67EFI43_cjs.proTierName(project),
12356
12360
  " keeps renewing at its own price, with its allowance and add-ons, until you change it."
12357
12361
  ] }),
12358
12362
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
@@ -12373,7 +12377,7 @@ function ChangeProPlan({
12373
12377
  ),
12374
12378
  targetPacks > 0 && /* @__PURE__ */ jsxRuntime.jsx(ConnectedReferralRewardNote, {}),
12375
12379
  /* @__PURE__ */ jsxRuntime.jsx(
12376
- chunkRHKFCSFC_cjs.PlanActionButton,
12380
+ chunkLAGHW4JM_cjs.PlanActionButton,
12377
12381
  {
12378
12382
  onClick: apply,
12379
12383
  disabled: noChange || isPending,
@@ -12384,9 +12388,9 @@ function ChangeProPlan({
12384
12388
  ] });
12385
12389
  }
12386
12390
  function ChangePlanDialog({ project, open, onOpenChange }) {
12387
- const isPro = !!project && chunkLYF47OXX_cjs.isProProject(project);
12391
+ const isPro = !!project && chunkT67EFI43_cjs.isProProject(project);
12388
12392
  return /* @__PURE__ */ jsxRuntime.jsx(
12389
- chunkRHKFCSFC_cjs.PlanDialogFrame,
12393
+ chunkLAGHW4JM_cjs.PlanDialogFrame,
12390
12394
  {
12391
12395
  open,
12392
12396
  onOpenChange,
@@ -12406,14 +12410,14 @@ function ChangePlanDialog({ project, open, onOpenChange }) {
12406
12410
  }
12407
12411
  function ProjectsTable() {
12408
12412
  const { data: projects, isLoading } = react.useProjects();
12409
- const currentUserExtId = chunkLYF47OXX_cjs.useSelfExtId();
12413
+ const currentUserExtId = chunkT67EFI43_cjs.useSelfExtId();
12410
12414
  const { openProject } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
12411
12415
  const updateProject = react.useUpdateProjectFields();
12412
12416
  const [renameTarget, setRenameTarget] = React7.useState(null);
12413
12417
  const [renameValue, setRenameValue] = React7.useState("");
12414
12418
  const [invoicesTarget, setInvoicesTarget] = React7.useState(null);
12415
12419
  const [upgradeTarget, setUpgradeTarget] = React7.useState(null);
12416
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
12420
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
12417
12421
  const ownedProjects = React7.useMemo(
12418
12422
  () => (projects ?? []).filter((p) => p.created_by === currentUserExtId),
12419
12423
  [projects, currentUserExtId]
@@ -12442,9 +12446,9 @@ function ProjectsTable() {
12442
12446
  {
12443
12447
  onSuccess: () => {
12444
12448
  setRenameTarget(null);
12445
- shell.notify.success("Project renamed");
12449
+ shell.notify.success(`${ui.getEntityLabel("PROJECT")} renamed`);
12446
12450
  },
12447
- onError: () => shell.notify.error("Failed to rename project")
12451
+ onError: () => shell.notify.error(`Failed to rename ${ui.entityNoun("PROJECT")}`)
12448
12452
  }
12449
12453
  );
12450
12454
  }, [renameTarget, renameValue, updateProject]);
@@ -12452,13 +12456,13 @@ function ProjectsTable() {
12452
12456
  const hasPaid = p.subscription === "active" || p.subscription === "past_due";
12453
12457
  const canUpgrade = stripeEnabled && !hasPaid && p.subscription !== "canceled" && p.subscription !== "dev";
12454
12458
  return /* @__PURE__ */ jsxRuntime.jsx(
12455
- chunkRHKFCSFC_cjs.ProjectRow,
12459
+ chunkLAGHW4JM_cjs.ProjectRow,
12456
12460
  {
12457
12461
  testId: `project-row-${p.external_id}`,
12458
12462
  onOpen: () => openProject(p.external_id),
12459
12463
  identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "mine", subscription: p.subscription, size: "sm" }),
12460
- summary: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanBadge, { ...chunkLYF47OXX_cjs.planBadgeView(p) }) }) : void 0,
12461
- usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.QuotaMeter, { items: chunkLYF47OXX_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
12464
+ summary: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanBadge, { ...chunkT67EFI43_cjs.planBadgeView(p) }) }) : void 0,
12465
+ usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.QuotaMeter, { items: chunkT67EFI43_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
12462
12466
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12463
12467
  canUpgrade && /* @__PURE__ */ jsxRuntime.jsxs(
12464
12468
  ui.Button,
@@ -12492,9 +12496,9 @@ function ProjectsTable() {
12492
12496
  );
12493
12497
  };
12494
12498
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12495
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
12499
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
12496
12500
  /* @__PURE__ */ jsxRuntime.jsx(
12497
- chunkRHKFCSFC_cjs.RenameDialog,
12501
+ chunkLAGHW4JM_cjs.RenameDialog,
12498
12502
  {
12499
12503
  open: !!renameTarget,
12500
12504
  onClose: () => setRenameTarget(null),
@@ -12525,7 +12529,7 @@ function ProjectsTable() {
12525
12529
  }
12526
12530
  function SharedProjects() {
12527
12531
  const { data: projects } = react.useProjects();
12528
- const currentUserExtId = chunkLYF47OXX_cjs.useSelfExtId();
12532
+ const currentUserExtId = chunkT67EFI43_cjs.useSelfExtId();
12529
12533
  const { data: usageToday } = react.useUserUsageToday();
12530
12534
  const shared = React7.useMemo(
12531
12535
  () => (projects ?? []).filter((p) => p.created_by !== currentUserExtId),
@@ -12533,26 +12537,32 @@ function SharedProjects() {
12533
12537
  );
12534
12538
  if (shared.length === 0) return null;
12535
12539
  const usedToday = usageToday?.used_gbp ?? 0;
12536
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.SharedProjectsSection, { footnote: "Your daily AI usage allowance in projects other people run \u2014 their plan and billing are theirs.", children: shared.map((p) => {
12537
- const cap = p.daily_cap_per_user;
12538
- return /* @__PURE__ */ jsxRuntime.jsx(
12539
- chunkRHKFCSFC_cjs.SharedProjectRow,
12540
- {
12541
- testId: `shared-project-${p.external_id}`,
12542
- identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "other", size: "sm" }),
12543
- allowance: cap != null && cap > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
12544
- chunkQZTNTP75_cjs.UsageMeter,
12540
+ return /* @__PURE__ */ jsxRuntime.jsx(
12541
+ chunkLAGHW4JM_cjs.SharedProjectsSection,
12542
+ {
12543
+ footnote: `Your daily AI usage allowance in ${ui.entityNoun("PROJECT", "PLURAL")} other people run \u2014 their plan and billing are theirs.`,
12544
+ children: shared.map((p) => {
12545
+ const cap = p.daily_cap_per_user;
12546
+ return /* @__PURE__ */ jsxRuntime.jsx(
12547
+ chunkLAGHW4JM_cjs.SharedProjectRow,
12545
12548
  {
12546
- label: "Today",
12547
- value: `${react.formatGbp(usedToday)} / ${react.formatGbp(cap)}`,
12548
- pct: usedToday / cap * 100,
12549
- testId: `shared-project-allowance-${p.external_id}`
12550
- }
12551
- ) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-right text-xs text-muted-foreground", children: "No daily limit" })
12552
- },
12553
- p.external_id
12554
- );
12555
- }) });
12549
+ testId: `shared-project-${p.external_id}`,
12550
+ identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "other", size: "sm" }),
12551
+ allowance: cap != null && cap > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
12552
+ chunkQZTNTP75_cjs.UsageMeter,
12553
+ {
12554
+ label: "Today",
12555
+ value: `${react.formatGbp(usedToday)} / ${react.formatGbp(cap)}`,
12556
+ pct: usedToday / cap * 100,
12557
+ testId: `shared-project-allowance-${p.external_id}`
12558
+ }
12559
+ ) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-right text-xs text-muted-foreground", children: "No daily limit" })
12560
+ },
12561
+ p.external_id
12562
+ );
12563
+ })
12564
+ }
12565
+ );
12556
12566
  }
12557
12567
  var capText = (cap) => cap != null ? String(cap) : "";
12558
12568
  function DailyCapEditor({ project }) {
@@ -12580,7 +12590,7 @@ function DailyCapEditor({ project }) {
12580
12590
  );
12581
12591
  };
12582
12592
  return /* @__PURE__ */ jsxRuntime.jsx(
12583
- chunkRHKFCSFC_cjs.DailyCapField,
12593
+ chunkLAGHW4JM_cjs.DailyCapField,
12584
12594
  {
12585
12595
  value,
12586
12596
  onChange: setValue,
@@ -12593,11 +12603,11 @@ function DailyCapEditor({ project }) {
12593
12603
  function SubscriptionStatus({ project }) {
12594
12604
  const { quotas, cancel_at_period_end, subscription, current_period_end, addons } = project;
12595
12605
  return /* @__PURE__ */ jsxRuntime.jsx(
12596
- chunkRHKFCSFC_cjs.SubscriptionStatusView,
12606
+ chunkLAGHW4JM_cjs.SubscriptionStatusView,
12597
12607
  {
12598
- resetDate: chunkLYF47OXX_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
12608
+ resetDate: chunkT67EFI43_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
12599
12609
  isCanceling: subscription === "canceled" || cancel_at_period_end === true,
12600
- meters: chunkLYF47OXX_cjs.getQuotaItems(quotas).map((q) => ({
12610
+ meters: chunkT67EFI43_cjs.getQuotaItems(quotas).map((q) => ({
12601
12611
  key: q.key,
12602
12612
  icon: q.icon,
12603
12613
  label: q.label,
@@ -12661,7 +12671,7 @@ function PendingChange({
12661
12671
  }
12662
12672
  );
12663
12673
  }
12664
- var titleFor = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `Add ${react.formatGbp(blockAiGbp ?? chunkLYF47OXX_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunkLYF47OXX_cjs.STORAGE_BLOCK_GB} GB storage`;
12674
+ var titleFor = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `Add ${react.formatGbp(blockAiGbp ?? chunkT67EFI43_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunkT67EFI43_cjs.STORAGE_BLOCK_GB} GB storage`;
12665
12675
  var blocksOf = (kind, project) => (kind === "ai_usage" ? project.addons?.ai_blocks : project.addons?.storage_blocks) ?? 0;
12666
12676
  function Row({ label, children }) {
12667
12677
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline justify-between gap-4", children: [
@@ -12682,11 +12692,11 @@ function AddAddonDialog({
12682
12692
  const addons = project.addons;
12683
12693
  if (!addons) return null;
12684
12694
  const isAnnual = project.plan_interval === "year";
12685
- const price = chunkLYF47OXX_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
12686
- const nextCharge = chunkLYF47OXX_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
12687
- const now = quote.data ? chunkLYF47OXX_cjs.quoteParts(quote.data.now) : null;
12688
- const renewal = quote.data ? chunkLYF47OXX_cjs.quoteParts(quote.data.renewal) : null;
12689
- const today = now ? { total: chunkLYF47OXX_cjs.money2(now.total), detail: chunkLYF47OXX_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
12695
+ const price = chunkT67EFI43_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
12696
+ const nextCharge = chunkT67EFI43_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
12697
+ const now = quote.data ? chunkT67EFI43_cjs.quoteParts(quote.data.now) : null;
12698
+ const renewal = quote.data ? chunkT67EFI43_cjs.quoteParts(quote.data.renewal) : null;
12699
+ const today = now ? { total: chunkT67EFI43_cjs.money2(now.total), detail: chunkT67EFI43_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
12690
12700
  const pricing = quote.isLoading;
12691
12701
  const confirm = () => {
12692
12702
  const before = blocksOf(kind, project);
@@ -12725,8 +12735,8 @@ function AddAddonDialog({
12725
12735
  isAnnual ? "yearly" : "monthly",
12726
12736
  " \xB7 no refund"
12727
12737
  ] }),
12728
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
12729
- chunkRHKFCSFC_cjs.MoreInfoList,
12738
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
12739
+ chunkLAGHW4JM_cjs.MoreInfoList,
12730
12740
  {
12731
12741
  items: [
12732
12742
  {
@@ -12741,7 +12751,7 @@ function AddAddonDialog({
12741
12751
  term: "Usage cap",
12742
12752
  text: "Adding by hand is never blocked by the usage cap; the cap limits automatic top-ups only."
12743
12753
  },
12744
- ...isAnnual && kind === "ai_usage" ? [{ term: "Annual", text: `${chunkLYF47OXX_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : []
12754
+ ...isAnnual && kind === "ai_usage" ? [{ term: "Annual", text: `${chunkT67EFI43_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : []
12745
12755
  ]
12746
12756
  }
12747
12757
  ) })
@@ -12764,7 +12774,7 @@ function AddAddonDialog({
12764
12774
  )
12765
12775
  ] }) }),
12766
12776
  !pricing && /* @__PURE__ */ jsxRuntime.jsxs(Row, { label: "Next charge", children: [
12767
- renewal ? chunkLYF47OXX_cjs.totalWithTaxWord(renewal) : price.then.replace(/\/(month|year)/, ""),
12777
+ renewal ? chunkT67EFI43_cjs.totalWithTaxWord(renewal) : price.then.replace(/\/(month|year)/, ""),
12768
12778
  nextCharge ? ` on ${nextCharge}` : " at renewal"
12769
12779
  ] })
12770
12780
  ] }) }),
@@ -12795,11 +12805,11 @@ function ReduceAddonDialog({
12795
12805
  const update = react.useUpdateProjectNextPeriodAddons();
12796
12806
  const addons = project.addons;
12797
12807
  if (!addons) return null;
12798
- const { min, next } = chunkLYF47OXX_cjs.reduceBounds(kind, addons);
12808
+ const { min, next } = chunkT67EFI43_cjs.reduceBounds(kind, addons);
12799
12809
  const keep = Math.max(min, next - 1);
12800
- const size = chunkLYF47OXX_cjs.nextRemovedBlockSize(kind, addons);
12801
- const what = chunkLYF47OXX_cjs.stepLabel(kind, size);
12802
- const from = chunkLYF47OXX_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
12810
+ const size = chunkT67EFI43_cjs.nextRemovedBlockSize(kind, addons);
12811
+ const what = chunkT67EFI43_cjs.stepLabel(kind, size);
12812
+ const from = chunkT67EFI43_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
12803
12813
  const fromShort = from.replace(/ \d{4}$/, "");
12804
12814
  const allowanceNext = kind === "ai_usage" ? addons.ai_allowance_next_gbp - size : addons.storage_allowance_next_gb - size;
12805
12815
  const allowanceNow = kind === "ai_usage" ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -12807,7 +12817,7 @@ function ReduceAddonDialog({
12807
12817
  const save = () => update.mutate(
12808
12818
  {
12809
12819
  projectExtId: project.external_id,
12810
- body: chunkLYF47OXX_cjs.nextPeriodBody(kind, keep)
12820
+ body: chunkT67EFI43_cjs.nextPeriodBody(kind, keep)
12811
12821
  },
12812
12822
  {
12813
12823
  onSuccess: () => {
@@ -12835,7 +12845,7 @@ function ReduceAddonDialog({
12835
12845
  fromShort,
12836
12846
  " \xB7 no refund"
12837
12847
  ] }),
12838
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.MoreInfo, { title: "Reducing a top-up", testId: "reduce-addon-more-info", children: [
12848
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.MoreInfo, { title: "Reducing a top-up", testId: "reduce-addon-more-info", children: [
12839
12849
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
12840
12850
  "The reduction applies from your next renewal (",
12841
12851
  from,
@@ -12874,7 +12884,7 @@ function ReduceAddonDialog({
12874
12884
  }
12875
12885
  ) });
12876
12886
  }
12877
- var gbp = (pence) => chunkLYF47OXX_cjs.formatMoney(pence, "gbp");
12887
+ var gbp = (pence) => chunkT67EFI43_cjs.formatMoney(pence, "gbp");
12878
12888
  var gb2 = (n) => `${Math.round(n * 10) / 10} GB`;
12879
12889
  var pct = (used, limit) => limit > 0 ? Math.min(100, used / limit * 100) : 0;
12880
12890
  function formatShortDate(unix) {
@@ -12886,20 +12896,20 @@ function AutoTopupThreshold({
12886
12896
  addons
12887
12897
  }) {
12888
12898
  const updateSettings = react.useUpdateProjectAddonSettings();
12889
- const min = addons.min_auto_topup_threshold_gbp || chunkLYF47OXX_cjs.MIN_AUTO_TOPUP_THRESHOLD_GBP;
12899
+ const min = addons.min_auto_topup_threshold_gbp || chunkT67EFI43_cjs.MIN_AUTO_TOPUP_THRESHOLD_GBP;
12890
12900
  const saved = addons.auto_topup_threshold_gbp;
12891
12901
  const [value, setValue] = React7.useState(String(saved));
12892
12902
  React7.useEffect(() => setValue(String(saved)), [saved]);
12893
12903
  const parsed = Number(value);
12894
12904
  const valid = Number.isFinite(parsed) && parsed >= min;
12895
12905
  const dirty = valid && parsed !== saved;
12896
- const off = chunkLYF47OXX_cjs.isAddonBudgetZero(addons);
12906
+ const off = chunkT67EFI43_cjs.isAddonBudgetZero(addons);
12897
12907
  const save = () => {
12898
12908
  if (!dirty) return;
12899
12909
  updateSettings.mutate(
12900
12910
  {
12901
12911
  projectExtId: project.external_id,
12902
- body: chunkLYF47OXX_cjs.addonSettingsBody(addons, { auto_topup_threshold_gbp: parsed })
12912
+ body: chunkT67EFI43_cjs.addonSettingsBody(addons, { auto_topup_threshold_gbp: parsed })
12903
12913
  },
12904
12914
  {
12905
12915
  onSuccess: () => shell.notify.success(`Auto-add below ${react.formatGbp(parsed)} of AI usage left`),
@@ -12996,10 +13006,10 @@ function ResourceMeter({
12996
13006
  const update = react.useUpdateProjectNextPeriodAddons();
12997
13007
  const isAi = kind === "ai_usage";
12998
13008
  const slug = isAi ? "ai-usage" : "storage";
12999
- const periodEnd = chunkLYF47OXX_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
13009
+ const periodEnd = chunkT67EFI43_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
13000
13010
  const from = periodEnd ?? "your next renewal";
13001
13011
  const fromShort = formatShortDate(addons.period_end ?? project.current_period_end) ?? "renewal";
13002
- const { min, current: current2, next } = chunkLYF47OXX_cjs.reduceBounds(kind, addons);
13012
+ const { min, current: current2, next } = chunkT67EFI43_cjs.reduceBounds(kind, addons);
13003
13013
  const fmt = (n) => isAi ? react.formatGbp(n) : gb2(n);
13004
13014
  const used = isAi ? addons.ai_used_gbp : addons.storage_used_gb;
13005
13015
  const allowance = isAi ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -13007,15 +13017,15 @@ function ResourceMeter({
13007
13017
  const plan = isAi ? addons.plan_ai_gbp : addons.plan_storage_gb;
13008
13018
  const topUps = Math.max(0, allowance - plan);
13009
13019
  const blocks = isAi ? addons.ai_blocks : addons.storage_blocks;
13010
- const hasLegacy = chunkLYF47OXX_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
13011
- const room = chunkLYF47OXX_cjs.autoRoom(kind, addons);
13012
- const capZero = chunkLYF47OXX_cjs.isAddonBudgetZero(addons);
13013
- const resets = isAi ? formatShortDate(chunkLYF47OXX_cjs.aiUsageResetTimestamp(project)) : null;
13014
- const removeSize = chunkLYF47OXX_cjs.nextRemovedBlockSize(kind, addons);
13020
+ const hasLegacy = chunkT67EFI43_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
13021
+ const room = chunkT67EFI43_cjs.autoRoom(kind, addons);
13022
+ const capZero = chunkT67EFI43_cjs.isAddonBudgetZero(addons);
13023
+ const resets = isAi ? formatShortDate(chunkT67EFI43_cjs.aiUsageResetTimestamp(project)) : null;
13024
+ const removeSize = chunkT67EFI43_cjs.nextRemovedBlockSize(kind, addons);
13015
13025
  const undo = () => update.mutate(
13016
13026
  {
13017
13027
  projectExtId: project.external_id,
13018
- body: chunkLYF47OXX_cjs.nextPeriodBody(kind, current2)
13028
+ body: chunkT67EFI43_cjs.nextPeriodBody(kind, current2)
13019
13029
  },
13020
13030
  {
13021
13031
  onSuccess: () => shell.notify.success("Kept"),
@@ -13032,7 +13042,7 @@ function ResourceMeter({
13032
13042
  allowance: { used, plan, topUps, autoRoom: capZero ? 0 : room },
13033
13043
  legend: {
13034
13044
  plan: `Plan ${fmt(plan)}`,
13035
- topUps: topUps > 0 ? `Top-ups ${fmt(topUps)}${hasLegacy ? ` (${chunkLYF47OXX_cjs.blocksLabel(kind, blocks, addons)})` : ""}` : void 0,
13045
+ topUps: topUps > 0 ? `Top-ups ${fmt(topUps)}${hasLegacy ? ` (${chunkT67EFI43_cjs.blocksLabel(kind, blocks, addons)})` : ""}` : void 0,
13036
13046
  autoRoom: room != null && room > 0 && !capZero ? `Automatic up to ${fmt(room)}` : void 0
13037
13047
  },
13038
13048
  testId: `usage-meter-${slug}`,
@@ -13061,9 +13071,9 @@ function ResourceMeter({
13061
13071
  {
13062
13072
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-3.5" }),
13063
13073
  label: isAi ? react.formatGbp(addons.block_ai_gbp) : `${addons.block_storage_gb} GB`,
13064
- caption: chunkLYF47OXX_cjs.addStepCaption(kind, addons),
13074
+ caption: chunkT67EFI43_cjs.addStepCaption(kind, addons),
13065
13075
  onClick: onAdd,
13066
- ariaLabel: `Add ${chunkLYF47OXX_cjs.stepLabel(kind, isAi ? addons.block_ai_gbp : addons.block_storage_gb)}`,
13076
+ ariaLabel: `Add ${chunkT67EFI43_cjs.stepLabel(kind, isAi ? addons.block_ai_gbp : addons.block_storage_gb)}`,
13067
13077
  testId: isAi ? "add-ai-block-button" : "add-storage-block-button"
13068
13078
  }
13069
13079
  ),
@@ -13074,7 +13084,7 @@ function ResourceMeter({
13074
13084
  label: isAi ? react.formatGbp(removeSize) : `${removeSize} GB`,
13075
13085
  caption: `from ${fromShort}`,
13076
13086
  onClick: onReduce,
13077
- ariaLabel: `Remove ${chunkLYF47OXX_cjs.stepLabel(kind, removeSize)} from ${from}`,
13087
+ ariaLabel: `Remove ${chunkT67EFI43_cjs.stepLabel(kind, removeSize)} from ${from}`,
13078
13088
  testId: `reduce-${slug}-button`
13079
13089
  }
13080
13090
  )
@@ -13113,10 +13123,10 @@ function UsageCapEditor({ project, addons }) {
13113
13123
  updateSettings.mutate(
13114
13124
  {
13115
13125
  projectExtId: project.external_id,
13116
- body: chunkLYF47OXX_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
13126
+ body: chunkT67EFI43_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
13117
13127
  },
13118
13128
  {
13119
- onSuccess: () => shell.notify.success(chunkLYF47OXX_cjs.budgetSavedMessage(nextCap)),
13129
+ onSuccess: () => shell.notify.success(chunkT67EFI43_cjs.budgetSavedMessage(nextCap)),
13120
13130
  onError: (error) => shell.notify.error(addonErrorMessage(error))
13121
13131
  }
13122
13132
  );
@@ -13127,14 +13137,14 @@ function UsageCapEditor({ project, addons }) {
13127
13137
  /* @__PURE__ */ jsxRuntime.jsx(
13128
13138
  chunkQZTNTP75_cjs.UsageMeter,
13129
13139
  {
13130
- label: chunkLYF47OXX_cjs.USAGE_CAP_LABEL,
13140
+ label: chunkT67EFI43_cjs.USAGE_CAP_LABEL,
13131
13141
  hint: spendResets && savedCap !== 0 ? `resets ${spendResets}` : void 0,
13132
13142
  value: readout,
13133
13143
  pct: savedCap != null && savedCap > 0 ? pct(spent, savedCap) : 0,
13134
13144
  testId: "addon-spend"
13135
13145
  }
13136
13146
  ),
13137
- addons.cap_reached && savedCap != null && savedCap > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-cap-reached", children: chunkLYF47OXX_cjs.CAP_REACHED_MESSAGE }),
13147
+ addons.cap_reached && savedCap != null && savedCap > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-cap-reached", children: chunkT67EFI43_cjs.CAP_REACHED_MESSAGE }),
13138
13148
  addons.manual_spent_pence > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-manual-spend", children: [
13139
13149
  "Added by hand this month: ",
13140
13150
  gbp(addons.manual_spent_pence),
@@ -13155,7 +13165,7 @@ function UsageCapEditor({ project, addons }) {
13155
13165
  step: 25,
13156
13166
  className: "h-9 w-28",
13157
13167
  value: noCap ? "" : value,
13158
- placeholder: noCap ? "No limit" : String(chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
13168
+ placeholder: noCap ? "No limit" : String(chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
13159
13169
  disabled: noCap,
13160
13170
  onChange: (e) => setValue(e.target.value),
13161
13171
  onKeyDown: (e) => e.key === "Enter" && save(),
@@ -13181,7 +13191,7 @@ function UsageCapEditor({ project, addons }) {
13181
13191
  checked: noCap,
13182
13192
  onCheckedChange: (checked) => {
13183
13193
  setNoCap(checked);
13184
- if (!checked && value === "") setValue(String(chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
13194
+ if (!checked && value === "") setValue(String(chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
13185
13195
  },
13186
13196
  "data-testid": "no-cap-switch"
13187
13197
  }
@@ -13194,8 +13204,8 @@ function UsageCapEditor({ project, addons }) {
13194
13204
  function UsageInfo({ addons, isAnnual }) {
13195
13205
  const period = isAnnual ? "year" : "month";
13196
13206
  const legacy = (addons.legacy_ai_blocks ?? 0) > 0 || (addons.legacy_storage_blocks ?? 0) > 0;
13197
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
13198
- chunkRHKFCSFC_cjs.MoreInfoList,
13207
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
13208
+ chunkLAGHW4JM_cjs.MoreInfoList,
13199
13209
  {
13200
13210
  items: [
13201
13211
  {
@@ -13210,7 +13220,7 @@ function UsageInfo({ addons, isAnnual }) {
13210
13220
  term: "Automatic top-ups",
13211
13221
  text: "One step is added when AI usage drops below your auto top-up level, or when an upload needs more storage."
13212
13222
  },
13213
- { term: "Usage cap", text: chunkLYF47OXX_cjs.USAGE_CAP_HELP },
13223
+ { term: "Usage cap", text: chunkT67EFI43_cjs.USAGE_CAP_HELP },
13214
13224
  {
13215
13225
  term: "Reducing",
13216
13226
  text: "\u2212 removes one step from your next renewal. You keep this period's allowance. No refunds."
@@ -13221,7 +13231,7 @@ function UsageInfo({ addons, isAnnual }) {
13221
13231
  text: "Top-ups bought on an earlier price keep their size and price until removed; they are removed last."
13222
13232
  }
13223
13233
  ] : [],
13224
- ...isAnnual ? [{ term: "Annual", text: `${chunkLYF47OXX_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : [],
13234
+ ...isAnnual ? [{ term: "Annual", text: `${chunkT67EFI43_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : [],
13225
13235
  {
13226
13236
  term: "Prices",
13227
13237
  text: "Shown ex VAT. The confirm step shows the total with VAT before you pay."
@@ -13313,7 +13323,7 @@ function formatShortDate2(unix) {
13313
13323
  if (!unix) return null;
13314
13324
  return new Date(unix * 1e3).toLocaleDateString("en-GB", { day: "numeric", month: "short" });
13315
13325
  }
13316
- var gbp2 = (pence) => chunkLYF47OXX_cjs.formatMoney(pence, "gbp");
13326
+ var gbp2 = (pence) => chunkT67EFI43_cjs.formatMoney(pence, "gbp");
13317
13327
  var gbNum = (n) => `${Math.round(n * 10) / 10}`;
13318
13328
  var pct2 = (used, limit) => limit > 0 ? Math.min(100, used / limit * 100) : 0;
13319
13329
  function Meter({
@@ -13331,15 +13341,15 @@ function Meter({
13331
13341
  ] });
13332
13342
  }
13333
13343
  function usePlanPrice(project) {
13334
- const { data: products } = react.useProducts({ enabled: chunkLYF47OXX_cjs.isProProject(project) });
13335
- if (!chunkLYF47OXX_cjs.isProProject(project)) return null;
13344
+ const { data: products } = react.useProducts({ enabled: chunkT67EFI43_cjs.isProProject(project) });
13345
+ if (!chunkT67EFI43_cjs.isProProject(project)) return null;
13336
13346
  const isAnnual = project.plan_interval === "year";
13337
13347
  if (project.amount != null) {
13338
13348
  return { incl: project.amount, ex: project.amount_ex_vat ?? null, isAnnual };
13339
13349
  }
13340
- if ((project.packs ?? chunkLYF47OXX_cjs.PRO_PACKS) > chunkLYF47OXX_cjs.PRO_PACKS) return null;
13341
- const prices = chunkLYF47OXX_cjs.findProPrices(products);
13342
- const pp = chunkLYF47OXX_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
13350
+ if ((project.packs ?? chunkT67EFI43_cjs.PRO_PACKS) > chunkT67EFI43_cjs.PRO_PACKS) return null;
13351
+ const prices = chunkT67EFI43_cjs.findProPrices(products);
13352
+ const pp = chunkT67EFI43_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
13343
13353
  return pp ? { incl: pp.amount, ex: pp.amount_ex_vat, isAnnual } : null;
13344
13354
  }
13345
13355
  function paidLine(payment, addons) {
@@ -13352,11 +13362,11 @@ function ProjectPlanCard({
13352
13362
  onChangePlan
13353
13363
  }) {
13354
13364
  const { quotas, addons } = project;
13355
- const isPro = chunkLYF47OXX_cjs.isProProject(project);
13365
+ const isPro = chunkT67EFI43_cjs.isProProject(project);
13356
13366
  const used = quotas?.ai_usage?.used ?? 0;
13357
13367
  const limit = quotas?.ai_usage?.limit ?? 0;
13358
- const resetDate = formatShortDate2(chunkLYF47OXX_cjs.aiUsageResetTimestamp(project));
13359
- const periodEnd = chunkLYF47OXX_cjs.formatPeriodEnd(addons?.period_end ?? project.current_period_end);
13368
+ const resetDate = formatShortDate2(chunkT67EFI43_cjs.aiUsageResetTimestamp(project));
13369
+ const periodEnd = chunkT67EFI43_cjs.formatPeriodEnd(addons?.period_end ?? project.current_period_end);
13360
13370
  const when2 = periodEnd ?? "the end of the period";
13361
13371
  const storageUsed = quotas?.storage_gb?.used ?? 0;
13362
13372
  const storageLimit = quotas?.storage_gb?.limit ?? 0;
@@ -13372,7 +13382,7 @@ function ProjectPlanCard({
13372
13382
  project.external_id,
13373
13383
  hasScheduledChange && addons ? { packs: packsNext ?? addons.packs, interval: pending ?? currentInterval } : null
13374
13384
  ).data;
13375
- const tier = isPro ? chunkLYF47OXX_cjs.proTierName(project) : project.subscription === "dev" ? "Dev" : "Free";
13385
+ const tier = isPro ? chunkT67EFI43_cjs.proTierName(project) : project.subscription === "dev" ? "Dev" : "Free";
13376
13386
  const pendingPayment = addons?.payment?.status === "pending" ? addons.payment : null;
13377
13387
  const confirmUrl = pendingPayment?.confirm_url ?? addons?.confirm_url;
13378
13388
  const paidPayment = addons?.payment?.status === "paid" ? addons.payment : null;
@@ -13406,7 +13416,7 @@ function ProjectPlanCard({
13406
13416
  isPro && " ",
13407
13417
  isPro && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-sm font-normal text-muted-foreground", children: currentInterval === "year" ? "Annual" : "Monthly" })
13408
13418
  ] }),
13409
- isPro && periodEnd && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", "data-testid": "project-plan-renews", children: isCanceling ? `Ends ${periodEnd}` : hasScheduledChange && nextBill ? `Next bill ${chunkLYF47OXX_cjs.totalWithTaxWord({
13419
+ isPro && periodEnd && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", "data-testid": "project-plan-renews", children: isCanceling ? `Ends ${periodEnd}` : hasScheduledChange && nextBill ? `Next bill ${chunkT67EFI43_cjs.totalWithTaxWord({
13410
13420
  subtotal: nextBill.next_renewal_ex_vat_pence,
13411
13421
  tax: nextBill.next_renewal_tax_pence,
13412
13422
  total: nextBill.next_renewal_pence,
@@ -13415,7 +13425,7 @@ function ProjectPlanCard({
13415
13425
  ] }),
13416
13426
  price && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto text-right", "data-testid": "project-plan-price", children: [
13417
13427
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg font-semibold tabular-nums text-foreground", children: [
13418
- price.ex != null ? chunkLYF47OXX_cjs.plusVat(price.ex) : gbp2(price.incl),
13428
+ price.ex != null ? chunkT67EFI43_cjs.plusVat(price.ex) : gbp2(price.incl),
13419
13429
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-normal text-muted-foreground", children: price.isAnnual ? "/year" : "/month" })
13420
13430
  ] }),
13421
13431
  price.ex != null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground", children: [
@@ -13453,7 +13463,7 @@ function ProjectPlanCard({
13453
13463
  undoTestId: "undo-plan-change-button",
13454
13464
  children: [
13455
13465
  "Changes to ",
13456
- chunkLYF47OXX_cjs.planNameForPacks(packsNext),
13466
+ chunkT67EFI43_cjs.planNameForPacks(packsNext),
13457
13467
  " on ",
13458
13468
  when2,
13459
13469
  "."
@@ -13498,8 +13508,8 @@ function ProjectPlanCard({
13498
13508
  }
13499
13509
  )
13500
13510
  ] }),
13501
- addons?.billing_error && /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
13502
- confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanNotice, { testId: "plan-payment-state", children: [
13511
+ addons?.billing_error && /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
13512
+ confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanNotice, { testId: "plan-payment-state", children: [
13503
13513
  "Waiting for your bank",
13504
13514
  pendingPayment?.amount_pence ? ` \xB7 ${gbp2(pendingPayment.amount_pence)}` : "",
13505
13515
  " \xB7",
@@ -13517,7 +13527,7 @@ function ProjectPlanCard({
13517
13527
  ]
13518
13528
  }
13519
13529
  )
13520
- ] }) : paidPayment && addons && /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { testId: "plan-payment-state", children: paidLine(paidPayment, addons) }),
13530
+ ] }) : paidPayment && addons && /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { testId: "plan-payment-state", children: paidLine(paidPayment, addons) }),
13521
13531
  isPro && /* @__PURE__ */ jsxRuntime.jsxs(
13522
13532
  "button",
13523
13533
  {
@@ -13544,7 +13554,7 @@ function ProjectBilling({
13544
13554
  const { addons } = project;
13545
13555
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", "data-testid": "project-billing", children: [
13546
13556
  /* @__PURE__ */ jsxRuntime.jsx(ProjectPlanCard, { project, onChangePlan }),
13547
- addons && chunkLYF47OXX_cjs.isProProject(project) && /* @__PURE__ */ jsxRuntime.jsx(ProjectUsageCard, { project, addons })
13557
+ addons && chunkT67EFI43_cjs.isProProject(project) && /* @__PURE__ */ jsxRuntime.jsx(ProjectUsageCard, { project, addons })
13548
13558
  ] });
13549
13559
  }
13550
13560
  var BREAKDOWN_LABELS = {
@@ -13679,13 +13689,13 @@ function ProjectUsageContent({
13679
13689
  };
13680
13690
  const quotaPct = effectiveUsage && aiUsageLimit ? Math.round(effectiveUsage.total_spend / aiUsageLimit * 100) : 0;
13681
13691
  return /* @__PURE__ */ jsxRuntime.jsx(
13682
- chunkRHKFCSFC_cjs.UsagePanel,
13692
+ chunkLAGHW4JM_cjs.UsagePanel,
13683
13693
  {
13684
13694
  state,
13685
13695
  dateRange,
13686
13696
  emptyMessage: `No usage ${period === "current" ? "yet this month" : "last month"}.`,
13687
13697
  period: /* @__PURE__ */ jsxRuntime.jsx(
13688
- chunkRHKFCSFC_cjs.UsageToggle,
13698
+ chunkLAGHW4JM_cjs.UsageToggle,
13689
13699
  {
13690
13700
  ariaLabel: "Period",
13691
13701
  value: period,
@@ -13698,7 +13708,7 @@ function ProjectUsageContent({
13698
13708
  ),
13699
13709
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13700
13710
  effectiveUsage?.invoice_pdf && /* @__PURE__ */ jsxRuntime.jsx(
13701
- chunkRHKFCSFC_cjs.UsageActionButton,
13711
+ chunkLAGHW4JM_cjs.UsageActionButton,
13702
13712
  {
13703
13713
  label: "Download Stripe invoice PDF",
13704
13714
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "size-3.5" }),
@@ -13706,7 +13716,7 @@ function ProjectUsageContent({
13706
13716
  }
13707
13717
  ),
13708
13718
  /* @__PURE__ */ jsxRuntime.jsx(
13709
- chunkRHKFCSFC_cjs.UsageActionButton,
13719
+ chunkLAGHW4JM_cjs.UsageActionButton,
13710
13720
  {
13711
13721
  label: "Print usage summary",
13712
13722
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Printer, { className: "size-3.5" }),
@@ -13716,7 +13726,7 @@ function ProjectUsageContent({
13716
13726
  ] }),
13717
13727
  children: effectiveUsage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13718
13728
  /* @__PURE__ */ jsxRuntime.jsx(
13719
- chunkRHKFCSFC_cjs.UsageSummary,
13729
+ chunkLAGHW4JM_cjs.UsageSummary,
13720
13730
  {
13721
13731
  stats: [
13722
13732
  {
@@ -13724,7 +13734,7 @@ function ProjectUsageContent({
13724
13734
  value: /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: react.formatGbp(effectiveUsage.total_spend) }),
13725
13735
  label: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13726
13736
  "AI usage",
13727
- quotaPct > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.UsageQuotaHint, { children: [
13737
+ quotaPct > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.UsageQuotaHint, { children: [
13728
13738
  "(",
13729
13739
  quotaPct,
13730
13740
  "% of quota)"
@@ -13745,7 +13755,7 @@ function ProjectUsageContent({
13745
13755
  }
13746
13756
  ),
13747
13757
  /* @__PURE__ */ jsxRuntime.jsx(
13748
- chunkRHKFCSFC_cjs.UsageToggle,
13758
+ chunkLAGHW4JM_cjs.UsageToggle,
13749
13759
  {
13750
13760
  ariaLabel: "Breakdown by",
13751
13761
  size: "fill",
@@ -13758,12 +13768,12 @@ function ProjectUsageContent({
13758
13768
  }
13759
13769
  ),
13760
13770
  /* @__PURE__ */ jsxRuntime.jsx(
13761
- chunkRHKFCSFC_cjs.UsageSection,
13771
+ chunkLAGHW4JM_cjs.UsageSection,
13762
13772
  {
13763
- footer: /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.UsageLegend, { series }),
13773
+ footer: /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.UsageLegend, { series }),
13764
13774
  title: `Daily AI usage${breakdown === "model" ? ` by ${BREAKDOWN_LABELS[breakdown]}` : ""}`,
13765
13775
  children: /* @__PURE__ */ jsxRuntime.jsx(
13766
- chunkRHKFCSFC_cjs.UsageLineChart,
13776
+ chunkLAGHW4JM_cjs.UsageLineChart,
13767
13777
  {
13768
13778
  dates,
13769
13779
  series,
@@ -13774,12 +13784,12 @@ function ProjectUsageContent({
13774
13784
  }
13775
13785
  ),
13776
13786
  /* @__PURE__ */ jsxRuntime.jsx(
13777
- chunkRHKFCSFC_cjs.UsageSection,
13787
+ chunkLAGHW4JM_cjs.UsageSection,
13778
13788
  {
13779
13789
  title: "Breakdown",
13780
13790
  gap: "md",
13781
13791
  action: /* @__PURE__ */ jsxRuntime.jsx(
13782
- chunkRHKFCSFC_cjs.UsageToggle,
13792
+ chunkLAGHW4JM_cjs.UsageToggle,
13783
13793
  {
13784
13794
  ariaLabel: "Breakdown metric",
13785
13795
  value: metric,
@@ -13791,7 +13801,7 @@ function ProjectUsageContent({
13791
13801
  }
13792
13802
  ),
13793
13803
  children: /* @__PURE__ */ jsxRuntime.jsx(
13794
- chunkRHKFCSFC_cjs.UsageProportionBar,
13804
+ chunkLAGHW4JM_cjs.UsageProportionBar,
13795
13805
  {
13796
13806
  metric,
13797
13807
  items: breakdownItems.map((item) => ({
@@ -13809,13 +13819,13 @@ function ProjectUsageContent({
13809
13819
  );
13810
13820
  }
13811
13821
  function ProjectDetail({ projectExtId, storage }) {
13812
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
13822
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
13813
13823
  const [planOpen, setPlanOpen] = React7.useState(false);
13814
13824
  const [renameOpen, setRenameOpen] = React7.useState(false);
13815
13825
  const [renameValue, setRenameValue] = React7.useState("");
13816
13826
  const updateProject = react.useUpdateProjectFields();
13817
13827
  const { data: projects, isLoading } = react.useProjects();
13818
- const currentUserExtId = chunkLYF47OXX_cjs.useSelfExtId();
13828
+ const currentUserExtId = chunkT67EFI43_cjs.useSelfExtId();
13819
13829
  const project = projects?.find((p) => p.external_id === projectExtId);
13820
13830
  const handleSaveRename = React7.useCallback(() => {
13821
13831
  const trimmed = renameValue.trim();
@@ -13831,15 +13841,19 @@ function ProjectDetail({ projectExtId, storage }) {
13831
13841
  {
13832
13842
  onSuccess: () => {
13833
13843
  setRenameOpen(false);
13834
- shell.notify.success("Project renamed");
13844
+ shell.notify.success(`${ui.getEntityLabel("PROJECT")} renamed`);
13835
13845
  },
13836
- onError: () => shell.notify.error("Failed to rename project")
13846
+ onError: () => shell.notify.error(`Failed to rename ${ui.entityNoun("PROJECT")}`)
13837
13847
  }
13838
13848
  );
13839
13849
  }, [project, renameValue, updateProject]);
13840
13850
  const hasBilling = stripeEnabled && project?.subscription !== "dev";
13841
13851
  if (isLoading) {
13842
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground p-6", children: "Loading project..." });
13852
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm text-muted-foreground p-6", children: [
13853
+ "Loading ",
13854
+ ui.entityNoun("PROJECT"),
13855
+ "..."
13856
+ ] });
13843
13857
  }
13844
13858
  if (!project) {
13845
13859
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground p-6", "data-testid": "project-detail-missing", children: "This project is no longer available." });
@@ -13849,7 +13863,7 @@ function ProjectDetail({ projectExtId, storage }) {
13849
13863
  }
13850
13864
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-6 space-y-6 max-w-4xl", "data-testid": `project-detail-${project.external_id}`, children: [
13851
13865
  /* @__PURE__ */ jsxRuntime.jsx(
13852
- chunkRHKFCSFC_cjs.ProjectDetailHeader,
13866
+ chunkLAGHW4JM_cjs.ProjectDetailHeader,
13853
13867
  {
13854
13868
  icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "PROJECT" }),
13855
13869
  name: project.name,
@@ -13857,11 +13871,11 @@ function ProjectDetail({ projectExtId, storage }) {
13857
13871
  setRenameValue(project.name);
13858
13872
  setRenameOpen(true);
13859
13873
  },
13860
- badge: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanBadge, { ...chunkLYF47OXX_cjs.planBadgeView(project), size: "md" }) : void 0
13874
+ badge: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanBadge, { ...chunkT67EFI43_cjs.planBadgeView(project), size: "md" }) : void 0
13861
13875
  }
13862
13876
  ),
13863
13877
  hasBilling && /* @__PURE__ */ jsxRuntime.jsx(ProjectBilling, { project, onChangePlan: () => setPlanOpen(true) }),
13864
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.ProjectDetailSection, { title: hasBilling ? "Collaborator limits" : "Plan limits", children: [
13878
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.ProjectDetailSection, { title: hasBilling ? "Collaborator limits" : "Plan limits", children: [
13865
13879
  !hasBilling && /* @__PURE__ */ jsxRuntime.jsx(SubscriptionStatus, { project }),
13866
13880
  /* @__PURE__ */ jsxRuntime.jsxs(
13867
13881
  "div",
@@ -13877,7 +13891,7 @@ function ProjectDetail({ projectExtId, storage }) {
13877
13891
  }
13878
13892
  )
13879
13893
  ] }),
13880
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.ProjectDetailSection, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(
13894
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.ProjectDetailSection, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(
13881
13895
  ProjectUsageContent,
13882
13896
  {
13883
13897
  projectExtId: project.external_id,
@@ -13887,7 +13901,7 @@ function ProjectDetail({ projectExtId, storage }) {
13887
13901
  ) }),
13888
13902
  storage,
13889
13903
  /* @__PURE__ */ jsxRuntime.jsx(
13890
- chunkRHKFCSFC_cjs.RenameDialog,
13904
+ chunkLAGHW4JM_cjs.RenameDialog,
13891
13905
  {
13892
13906
  open: renameOpen,
13893
13907
  onClose: () => setRenameOpen(false),
@@ -13901,8 +13915,8 @@ function ProjectDetail({ projectExtId, storage }) {
13901
13915
  /* @__PURE__ */ jsxRuntime.jsx(ChangePlanDialog, { project, open: planOpen, onOpenChange: setPlanOpen })
13902
13916
  ] });
13903
13917
  }
13904
- function createProjectErrorMessage(error, fallback = "Failed to create project") {
13905
- const detail = chunkLYF47OXX_cjs.apiErrorDetail(error);
13918
+ function createProjectErrorMessage(error, fallback = `Failed to create ${ui.entityNoun("PROJECT")}`) {
13919
+ const detail = chunkT67EFI43_cjs.apiErrorDetail(error);
13906
13920
  if (typeof detail === "string" && detail) return detail;
13907
13921
  const message = detail?.message;
13908
13922
  return typeof message === "string" && message ? message : fallback;
@@ -13912,7 +13926,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
13912
13926
  const [plan, setPlan] = React7.useState("pro");
13913
13927
  const [isAnnual, setIsAnnual] = React7.useState(false);
13914
13928
  const [promoCode, setPromoCode] = React7.useState("");
13915
- const [addonBudget, setAddonBudget] = React7.useState(String(chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
13929
+ const [addonBudget, setAddonBudget] = React7.useState(String(chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
13916
13930
  const [checkoutBudget, setCheckoutBudget] = React7.useState(null);
13917
13931
  const [aiBlocks, setAiBlocks] = React7.useState(0);
13918
13932
  const [storageBlocks, setStorageBlocks] = React7.useState(0);
@@ -13926,7 +13940,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
13926
13940
  const [checkoutProjectName, setCheckoutProjectName] = React7.useState("");
13927
13941
  const [checkoutInterval, setCheckoutInterval] = React7.useState("month");
13928
13942
  const paymentCompletedRef = React7.useRef(false);
13929
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
13943
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
13930
13944
  const { data: products, isLoading: productsLoading } = react.useProducts({
13931
13945
  enabled: stripeEnabled
13932
13946
  });
@@ -13955,18 +13969,18 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
13955
13969
  setPlan("pro");
13956
13970
  setPromoCode("");
13957
13971
  setPostalCode("");
13958
- setAddonBudget(String(chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
13972
+ setAddonBudget(String(chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
13959
13973
  setAiBlocks(0);
13960
13974
  setStorageBlocks(0);
13961
13975
  setIsCreating(false);
13962
13976
  }
13963
13977
  onOpenChange(newOpen);
13964
13978
  };
13965
- const prices = chunkLYF47OXX_cjs.findProPrices(products);
13979
+ const prices = chunkT67EFI43_cjs.findProPrices(products);
13966
13980
  const intervalPrice = isAnnual ? prices.annual : prices.monthly;
13967
- const selectedPrice = chunkLYF47OXX_cjs.packPrice(intervalPrice);
13981
+ const selectedPrice = chunkT67EFI43_cjs.packPrice(intervalPrice);
13968
13982
  const currency = intervalPrice?.currency ?? "gbp";
13969
- const savingsPercent = chunkLYF47OXX_cjs.calcSavingsPercent(prices.monthly, prices.annual);
13983
+ const savingsPercent = chunkT67EFI43_cjs.calcSavingsPercent(prices.monthly, prices.annual);
13970
13984
  const isPro = stripeEnabled && plan !== "free";
13971
13985
  const quote = useCheckoutQuote({
13972
13986
  interval: isAnnual ? "year" : "month",
@@ -13976,18 +13990,18 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
13976
13990
  storageBlocks,
13977
13991
  enabled: open && isPro && !!selectedPrice
13978
13992
  });
13979
- const canSubmit = !!projectName.trim() && !isCreating && !createProject.isPending && (!isPro || !!selectedPrice && chunkLYF47OXX_cjs.parseBudgetPounds(addonBudget) !== void 0 && quote.canContinue);
13993
+ const canSubmit = !!projectName.trim() && !isCreating && !createProject.isPending && (!isPro || !!selectedPrice && chunkT67EFI43_cjs.parseBudgetPounds(addonBudget) !== void 0 && quote.canContinue);
13980
13994
  const handleCreateFree = () => {
13981
13995
  setIsCreating(true);
13982
13996
  createProject.mutate(
13983
13997
  {
13984
13998
  name: projectName.trim(),
13985
13999
  plan: "free",
13986
- daily_cap_per_user: chunkLYF47OXX_cjs.SUGGESTED_DAILY_CAP_PER_USER
14000
+ daily_cap_per_user: chunkT67EFI43_cjs.SUGGESTED_DAILY_CAP_PER_USER
13987
14001
  },
13988
14002
  {
13989
14003
  onSuccess: () => {
13990
- shell.notify.success("Project created");
14004
+ shell.notify.success(`${ui.getEntityLabel("PROJECT")} created`);
13991
14005
  setIsCreating(false);
13992
14006
  onOpenChange(false);
13993
14007
  },
@@ -14000,14 +14014,14 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14000
14014
  };
14001
14015
  const handleSubscribe = () => {
14002
14016
  const interval = isAnnual ? "year" : "month";
14003
- const parsed = chunkLYF47OXX_cjs.parseBudgetPounds(addonBudget);
14004
- const budgetToSend = parsed == null || parsed === chunkLYF47OXX_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed;
14017
+ const parsed = chunkT67EFI43_cjs.parseBudgetPounds(addonBudget);
14018
+ const budgetToSend = parsed == null || parsed === chunkT67EFI43_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed;
14005
14019
  setIsCreating(true);
14006
14020
  createProject.mutate(
14007
14021
  {
14008
14022
  name: projectName.trim(),
14009
14023
  plan: "pro",
14010
- daily_cap_per_user: chunkLYF47OXX_cjs.SUGGESTED_DAILY_CAP_PER_USER
14024
+ daily_cap_per_user: chunkT67EFI43_cjs.SUGGESTED_DAILY_CAP_PER_USER
14011
14025
  },
14012
14026
  {
14013
14027
  onSuccess: (newProject) => {
@@ -14044,12 +14058,12 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14044
14058
  {
14045
14059
  open,
14046
14060
  onOpenChange: handleOpenChange,
14047
- title: "New project",
14048
- description: stripeEnabled ? "Name it and pick a plan." : "Projects group your workspaces.",
14061
+ title: `New ${ui.entityNoun("PROJECT")}`,
14062
+ description: stripeEnabled ? "Name it and pick a plan." : `${ui.getEntityLabel("PROJECT", "PLURAL")} group your ${ui.entityNoun("WORKSPACE", "PLURAL")}.`,
14049
14063
  showDescription: true,
14050
14064
  size: "xl",
14051
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanStack, { gap: 5, children: [
14052
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanStack, { gap: 2, children: [
14065
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanStack, { gap: 5, children: [
14066
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanStack, { gap: 2, children: [
14053
14067
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "new-project-name", children: "Name" }),
14054
14068
  /* @__PURE__ */ jsxRuntime.jsx(
14055
14069
  ui.Input,
@@ -14057,7 +14071,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14057
14071
  id: "new-project-name",
14058
14072
  value: projectName,
14059
14073
  onChange: (e) => setProjectName(e.target.value),
14060
- placeholder: "My Project",
14074
+ placeholder: `My ${ui.getEntityLabel("PROJECT")}`,
14061
14075
  autoFocus: true,
14062
14076
  onKeyDown: (e) => {
14063
14077
  if (e.key === "Enter") submit();
@@ -14065,16 +14079,16 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14065
14079
  }
14066
14080
  )
14067
14081
  ] }),
14068
- stripeEnabled && (productsLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14069
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PlanPickerCard, { children: [
14082
+ stripeEnabled && (productsLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14083
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PlanPickerCard, { children: [
14070
14084
  /* @__PURE__ */ jsxRuntime.jsx(
14071
- chunkRHKFCSFC_cjs.PlanPickerHeader,
14085
+ chunkLAGHW4JM_cjs.PlanPickerHeader,
14072
14086
  {
14073
14087
  title: "Plan",
14074
14088
  info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
14075
14089
  infoPlacement: "toggle",
14076
14090
  toggle: plan !== "free" ? /* @__PURE__ */ jsxRuntime.jsx(
14077
- chunkRHKFCSFC_cjs.PricingToggle,
14091
+ chunkLAGHW4JM_cjs.PricingToggle,
14078
14092
  {
14079
14093
  isAnnual,
14080
14094
  onToggle: () => setIsAnnual(!isAnnual),
@@ -14112,7 +14126,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14112
14126
  currency
14113
14127
  }
14114
14128
  ),
14115
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
14129
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
14116
14130
  /* @__PURE__ */ jsxRuntime.jsx(
14117
14131
  CheckoutCountrySelect,
14118
14132
  {
@@ -14131,10 +14145,10 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14131
14145
  onPostalCodeChange: setPostalCode
14132
14146
  }
14133
14147
  )
14134
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { children: "Pro isn't available right now." }))
14148
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { children: "Pro isn't available right now." }))
14135
14149
  ] })),
14136
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : "Create project" }),
14137
- isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
14150
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : `Create ${ui.entityNoun("PROJECT")}` }),
14151
+ isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
14138
14152
  ] })
14139
14153
  }
14140
14154
  ),
@@ -14162,7 +14176,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
14162
14176
  function useAutoRefreshPendingProjects() {
14163
14177
  const { data: projects } = react.useProjects();
14164
14178
  const refreshProject = react.useRefreshProject();
14165
- const currentUserExtId = chunkLYF47OXX_cjs.useSelfExtId();
14179
+ const currentUserExtId = chunkT67EFI43_cjs.useSelfExtId();
14166
14180
  const refreshedRef = React7.useRef(/* @__PURE__ */ new Set());
14167
14181
  React7.useEffect(() => {
14168
14182
  if (!projects || !currentUserExtId) return;
@@ -14175,7 +14189,7 @@ function useAutoRefreshPendingProjects() {
14175
14189
  }
14176
14190
  }, [projects, refreshProject, currentUserExtId]);
14177
14191
  }
14178
- var QUOTA_EXCEEDED_MESSAGE = "This project's AI usage for this month is used up.";
14192
+ var quotaExceededMessage = () => `This ${ui.entityNoun("PROJECT")}'s AI usage for this month is used up.`;
14179
14193
  var BOX_MEMBER_QUOTA_MESSAGE = "AI usage for this month is used up. Ask your Box admin to add more.";
14180
14194
  var BOX_ADMIN_QUOTA_MESSAGE = "AI usage for this month is used up. Add more in the ARBI portal.";
14181
14195
  function ConnectedQuotaDialog({ info, onClose: close }) {
@@ -14193,7 +14207,7 @@ function ConnectedQuotaDialog({ info, onClose: close }) {
14193
14207
  if (quotaProjectId) void refetchProjects();
14194
14208
  }, [quotaProjectId, refetchProjects]);
14195
14209
  const project = info?.projectExtId ? projects?.find((p) => p.external_id === info.projectExtId) : void 0;
14196
- const addons = project && chunkLYF47OXX_cjs.isProProject(project) ? project.addons : null;
14210
+ const addons = project && chunkT67EFI43_cjs.isProProject(project) ? project.addons : null;
14197
14211
  const handleUpgrade = () => {
14198
14212
  if (info?.projectExtId) {
14199
14213
  requestProjectBillingFocus({ projectExtId: info.projectExtId, openUpgrade: true });
@@ -14217,7 +14231,7 @@ function ConnectedQuotaDialog({ info, onClose: close }) {
14217
14231
  close();
14218
14232
  };
14219
14233
  const percent = info && info.budget > 0 ? Math.min(100, Math.round(info.spend / info.budget * 100)) : 100;
14220
- let message = info?.message ?? QUOTA_EXCEEDED_MESSAGE;
14234
+ let message = info?.message ?? quotaExceededMessage();
14221
14235
  let actions = void 0;
14222
14236
  if (box) {
14223
14237
  message = box.isAdmin ? BOX_ADMIN_QUOTA_MESSAGE : BOX_MEMBER_QUOTA_MESSAGE;
@@ -14229,8 +14243,8 @@ function ConnectedQuotaDialog({ info, onClose: close }) {
14229
14243
  /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {})
14230
14244
  );
14231
14245
  } else if (addons) {
14232
- const price = `${chunkLYF47OXX_cjs.formatMoney(addons.ai_block_price_ex_vat_pence, "gbp")} + VAT`;
14233
- const capZero = chunkLYF47OXX_cjs.isAddonBudgetZero(addons);
14246
+ const price = `${chunkT67EFI43_cjs.formatMoney(addons.ai_block_price_ex_vat_pence, "gbp")} + VAT`;
14247
+ const capZero = chunkT67EFI43_cjs.isAddonBudgetZero(addons);
14234
14248
  const addAiUsage = /* @__PURE__ */ jsxRuntime.jsxs(ui.Button, { onClick: handleAddAiUsage, "data-testid": "quota-add-ai-usage-button", children: [
14235
14249
  "Add ",
14236
14250
  react.formatGbp(addons.block_ai_gbp),
@@ -14238,7 +14252,7 @@ function ConnectedQuotaDialog({ info, onClose: close }) {
14238
14252
  price
14239
14253
  ] });
14240
14254
  if (capZero || addons.cap_reached) {
14241
- message = capZero ? chunkLYF47OXX_cjs.ZERO_BUDGET_MESSAGE : chunkLYF47OXX_cjs.CAP_REACHED_MESSAGE;
14255
+ message = capZero ? chunkT67EFI43_cjs.ZERO_BUDGET_MESSAGE : chunkT67EFI43_cjs.CAP_REACHED_MESSAGE;
14242
14256
  actions = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14243
14257
  addAiUsage,
14244
14258
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: handleRaiseCap, "data-testid": "quota-raise-cap-button", children: capZero ? "Set cap" : "Raise cap" })
@@ -14251,7 +14265,7 @@ function ConnectedQuotaDialog({ info, onClose: close }) {
14251
14265
  const addAiUsageProject = addAiUsageFor ? projects?.find((p) => p.external_id === addAiUsageFor) : void 0;
14252
14266
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14253
14267
  /* @__PURE__ */ jsxRuntime.jsx(
14254
- chunkRHKFCSFC_cjs.QuotaExceededDialogView,
14268
+ chunkLAGHW4JM_cjs.QuotaExceededDialogView,
14255
14269
  {
14256
14270
  open,
14257
14271
  onClose: close,
@@ -14348,7 +14362,7 @@ function ConnectedWelcomeDialog({
14348
14362
  }) {
14349
14363
  const currentUser = react.useArbiSession().user;
14350
14364
  const { data: projects } = react.useProjects();
14351
- const balance = chunkLYF47OXX_cjs.useRewardBalance();
14365
+ const balance = chunkT67EFI43_cjs.useRewardBalance();
14352
14366
  const [showPlans, setShowPlans] = React7.useState(false);
14353
14367
  const [showInvite, setShowInvite] = React7.useState(false);
14354
14368
  const [selectedProjectId, setSelectedProjectId] = React7.useState(null);
@@ -14369,28 +14383,28 @@ function ConnectedWelcomeDialog({
14369
14383
  return /* @__PURE__ */ jsxRuntime.jsx(ChangePlanDialog, { project: selectedProject, open, onOpenChange: handleOpenChange });
14370
14384
  }
14371
14385
  if (showInvite) {
14372
- return /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.InviteContactsDialog, { open, onClose: () => handleOpenChange(false), children: /* @__PURE__ */ jsxRuntime.jsx(
14386
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.InviteContactsDialog, { open, onClose: () => handleOpenChange(false), children: /* @__PURE__ */ jsxRuntime.jsx(
14373
14387
  ConnectedAddContacts,
14374
14388
  {
14375
14389
  onClose: () => handleOpenChange(false),
14376
- rewardAmount: chunkLYF47OXX_cjs.formatMoney(REFERRAL_OFFER.amount, REFERRAL_OFFER.currency)
14390
+ rewardAmount: chunkT67EFI43_cjs.formatMoney(REFERRAL_OFFER.amount, REFERRAL_OFFER.currency)
14377
14391
  }
14378
14392
  ) });
14379
14393
  }
14380
14394
  const firstName2 = currentUser?.given_name;
14381
14395
  const hasBalance = balance !== null;
14382
- const quotaItems = chunkLYF47OXX_cjs.getQuotaItems(selectedProject.quotas);
14383
- const resetTs = chunkLYF47OXX_cjs.aiUsageResetTimestamp(selectedProject);
14384
- const aiUsageHint = resetTs ? `resets ${chunkLYF47OXX_cjs.formatResetDate(resetTs)}` : void 0;
14396
+ const quotaItems = chunkT67EFI43_cjs.getQuotaItems(selectedProject.quotas);
14397
+ const resetTs = chunkT67EFI43_cjs.aiUsageResetTimestamp(selectedProject);
14398
+ const aiUsageHint = resetTs ? `resets ${chunkT67EFI43_cjs.formatResetDate(resetTs)}` : void 0;
14385
14399
  return /* @__PURE__ */ jsxRuntime.jsx(
14386
- chunkRHKFCSFC_cjs.WelcomeDialog,
14400
+ chunkLAGHW4JM_cjs.WelcomeDialog,
14387
14401
  {
14388
14402
  open,
14389
14403
  onClose: () => handleOpenChange(false),
14390
14404
  firstName: firstName2,
14391
14405
  hasReward: hasBalance,
14392
14406
  projectPicker: /* @__PURE__ */ jsxRuntime.jsx(
14393
- chunkKJVDYWAM_cjs.ProjectPicker,
14407
+ chunk6UKNYQ7Q_cjs.ProjectPicker,
14394
14408
  {
14395
14409
  variant: "welcome",
14396
14410
  value: selectedProject.external_id,
@@ -14398,7 +14412,7 @@ function ConnectedWelcomeDialog({
14398
14412
  onChange: setSelectedProjectId
14399
14413
  }
14400
14414
  ),
14401
- planBadge: /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PlanBadge, { ...chunkLYF47OXX_cjs.planBadgeView(selectedProject), size: "md" }),
14415
+ planBadge: /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PlanBadge, { ...chunkT67EFI43_cjs.planBadgeView(selectedProject), size: "md" }),
14402
14416
  quotas: quotaItems.map((q) => ({
14403
14417
  key: q.key,
14404
14418
  icon: q.icon,
@@ -14408,14 +14422,14 @@ function ConnectedWelcomeDialog({
14408
14422
  hint: q.key === "ai-usage" ? aiUsageHint : void 0
14409
14423
  })),
14410
14424
  onSeePlans: () => setShowPlans(true),
14411
- referralOfferLabel: `${chunkLYF47OXX_cjs.formatMoney(REFERRAL_OFFER.amount, REFERRAL_OFFER.currency)} off your plan`,
14425
+ referralOfferLabel: `${chunkT67EFI43_cjs.formatMoney(REFERRAL_OFFER.amount, REFERRAL_OFFER.currency)} off your plan`,
14412
14426
  onInvite: () => setShowInvite(true),
14413
- rewardBalanceLabel: hasBalance ? chunkLYF47OXX_cjs.formatMoney(balance.amount, balance.currency) : void 0
14427
+ rewardBalanceLabel: hasBalance ? chunkT67EFI43_cjs.formatMoney(balance.amount, balance.currency) : void 0
14414
14428
  }
14415
14429
  );
14416
14430
  }
14417
14431
  function toWorkspaceSummary(workspace, selfId) {
14418
- const people = (workspace.users ?? []).filter((m) => !chunkJUUOJP7I_cjs.isAgentAccount(m.user));
14432
+ const people = (workspace.users ?? []).filter((m) => !chunkKWJW5TMH_cjs.isAgentAccount(m.user));
14419
14433
  const ordered = [
14420
14434
  ...people.filter((m) => m.role === "owner"),
14421
14435
  ...people.filter((m) => m.role !== "owner")
@@ -14429,8 +14443,8 @@ function toWorkspaceSummary(workspace, selfId) {
14429
14443
  id: workspace.external_id,
14430
14444
  name: workspace.name,
14431
14445
  description: workspace.description,
14432
- docCount: chunkJUUOJP7I_cjs.workspaceDocumentCount(workspace),
14433
- chatCount: chunkJUUOJP7I_cjs.workspaceConversationCount(workspace),
14446
+ docCount: chunkKWJW5TMH_cjs.workspaceDocumentCount(workspace),
14447
+ chatCount: chunkKWJW5TMH_cjs.workspaceConversationCount(workspace),
14434
14448
  memberCount: members.length,
14435
14449
  members,
14436
14450
  // A public workspace's members are hidden from someone who has not joined it.
@@ -14447,13 +14461,13 @@ function WorkspaceCardsView({
14447
14461
  createDisabledReason,
14448
14462
  workspaceState
14449
14463
  }) {
14450
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
14464
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
14451
14465
  const { hrefFor } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
14452
14466
  const workspaceLabel = ui.getEntityLabel("WORKSPACE");
14453
14467
  const projectLabel = ui.getEntityLabel("PROJECT").toLowerCase();
14454
14468
  const { groups, projects, selfId } = list;
14455
14469
  if (groups.length === 0) {
14456
- return /* @__PURE__ */ jsxRuntime.jsx(chunkKJVDYWAM_cjs.WorkspaceList, { testId: "workspace-cards-list", className: "gap-0", children: /* @__PURE__ */ jsxRuntime.jsx(
14470
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6UKNYQ7Q_cjs.WorkspaceList, { testId: "workspace-cards-list", className: "gap-0", children: /* @__PURE__ */ jsxRuntime.jsx(
14457
14471
  chunkFCWS7I5C_cjs.CreateTile,
14458
14472
  {
14459
14473
  label: `New ${workspaceLabel.toLowerCase()}`,
@@ -14465,15 +14479,15 @@ function WorkspaceCardsView({
14465
14479
  }
14466
14480
  ) });
14467
14481
  }
14468
- return /* @__PURE__ */ jsxRuntime.jsx(chunkKJVDYWAM_cjs.WorkspaceList, { testId: "workspace-cards-list", children: groups.map((group) => {
14482
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk6UKNYQ7Q_cjs.WorkspaceList, { testId: "workspace-cards-list", children: groups.map((group) => {
14469
14483
  const project = projects.find((p) => p.external_id === group.projectExtId);
14470
- const { breakdown, readout } = chunkLYF47OXX_cjs.projectGroupBilling(project, {
14484
+ const { breakdown, readout } = chunkT67EFI43_cjs.projectGroupBilling(project, {
14471
14485
  isOwned: group.isOwned,
14472
14486
  stripeEnabled
14473
14487
  });
14474
14488
  const count2 = group.workspaces.length;
14475
14489
  return /* @__PURE__ */ jsxRuntime.jsxs(
14476
- chunkKJVDYWAM_cjs.WorkspaceGroup,
14490
+ chunk6UKNYQ7Q_cjs.WorkspaceGroup,
14477
14491
  {
14478
14492
  title: group.projectExtId ? /* @__PURE__ */ jsxRuntime.jsx(
14479
14493
  chunkOU3RGQFX_cjs.ProjectBandTitle,
@@ -14509,11 +14523,11 @@ function WorkspaceCardsView({
14509
14523
  testId: "add-workspace-button"
14510
14524
  }
14511
14525
  ),
14512
- [...group.workspaces].sort(chunkJUUOJP7I_cjs.byRecentUpdate).map((workspace) => {
14526
+ [...group.workspaces].sort(chunkKWJW5TMH_cjs.byRecentUpdate).map((workspace) => {
14513
14527
  const state = workspaceState?.(workspace);
14514
14528
  const selectLabel = state?.selectLabel;
14515
14529
  return /* @__PURE__ */ jsxRuntime.jsx(
14516
- chunkKJVDYWAM_cjs.WorkspaceCard,
14530
+ chunk6UKNYQ7Q_cjs.WorkspaceCard,
14517
14531
  {
14518
14532
  workspace: {
14519
14533
  ...toWorkspaceSummary(workspace, selfId),
@@ -14548,20 +14562,20 @@ function WorkspaceFilterMenu({ list }) {
14548
14562
  const [open, setOpen] = React7.useState(false);
14549
14563
  const { workspaces, projects, selfId, pinned, filters, setFilters } = list;
14550
14564
  const { options: options2, groups } = React7.useMemo(() => {
14551
- const attributes = workspaces.map((w) => chunkJUUOJP7I_cjs.workspaceFilterAttributes(w, { selfId, pinned }));
14565
+ const attributes = workspaces.map((w) => chunkKWJW5TMH_cjs.workspaceFilterAttributes(w, { selfId, pinned }));
14552
14566
  const countOf = (id) => attributes.filter((a) => a[id]).length;
14553
- const projectIds = projects.map((p) => chunkJUUOJP7I_cjs.projectFilterId(p.external_id));
14567
+ const projectIds = projects.map((p) => chunkKWJW5TMH_cjs.projectFilterId(p.external_id));
14554
14568
  const options3 = [
14555
14569
  ...projects.map((p) => ({
14556
- id: chunkJUUOJP7I_cjs.projectFilterId(p.external_id),
14570
+ id: chunkKWJW5TMH_cjs.projectFilterId(p.external_id),
14557
14571
  label: p.name,
14558
- count: countOf(chunkJUUOJP7I_cjs.projectFilterId(p.external_id))
14572
+ count: countOf(chunkKWJW5TMH_cjs.projectFilterId(p.external_id))
14559
14573
  })),
14560
- ...chunkJUUOJP7I_cjs.WORKSPACE_CATEGORY_FILTERS.map(({ id, label }) => ({ id, label, count: countOf(id) }))
14574
+ ...chunkKWJW5TMH_cjs.WORKSPACE_CATEGORY_FILTERS.map(({ id, label }) => ({ id, label, count: countOf(id) }))
14561
14575
  ];
14562
14576
  const groups2 = [
14563
14577
  { label: "Projects", options: projectIds },
14564
- { label: "Workspaces", options: chunkJUUOJP7I_cjs.WORKSPACE_CATEGORY_FILTERS.map((f) => f.id) }
14578
+ { label: "Workspaces", options: chunkKWJW5TMH_cjs.WORKSPACE_CATEGORY_FILTERS.map((f) => f.id) }
14565
14579
  ];
14566
14580
  return { options: options3, groups: groups2 };
14567
14581
  }, [workspaces, projects, selfId, pinned]);
@@ -14598,7 +14612,7 @@ function useConnectedWorkspaceList({
14598
14612
  const canCreateProjects = react.useCanCreateProjects();
14599
14613
  const deleteWorkspaces = react.useDeleteWorkspaces();
14600
14614
  const workspaces = React7.useMemo(
14601
- () => (workspacesQuery.data ?? []).filter(chunkJUUOJP7I_cjs.isListedWorkspace),
14615
+ () => (workspacesQuery.data ?? []).filter(chunkKWJW5TMH_cjs.isListedWorkspace),
14602
14616
  [workspacesQuery.data]
14603
14617
  );
14604
14618
  const pinned = React7.useMemo(
@@ -14608,9 +14622,9 @@ function useConnectedWorkspaceList({
14608
14622
  const [localFilters, setLocalFilters] = React7.useState({});
14609
14623
  const filters = controlledFilters ?? localFilters;
14610
14624
  const filterMap = React7.useMemo(() => {
14611
- const known = new Set(chunkJUUOJP7I_cjs.WORKSPACE_CATEGORY_FILTERS.map((f) => f.id));
14612
- for (const p of projects ?? []) known.add(chunkJUUOJP7I_cjs.projectFilterId(p.external_id));
14613
- for (const w of workspaces) if (w.project_ext_id) known.add(chunkJUUOJP7I_cjs.projectFilterId(w.project_ext_id));
14625
+ const known = new Set(chunkKWJW5TMH_cjs.WORKSPACE_CATEGORY_FILTERS.map((f) => f.id));
14626
+ for (const p of projects ?? []) known.add(chunkKWJW5TMH_cjs.projectFilterId(p.external_id));
14627
+ for (const w of workspaces) if (w.project_ext_id) known.add(chunkKWJW5TMH_cjs.projectFilterId(w.project_ext_id));
14614
14628
  return new Map(Object.entries(filters).filter(([id, state]) => state !== null && known.has(id)));
14615
14629
  }, [filters, projects, workspaces]);
14616
14630
  const setFilters = React7.useCallback(
@@ -14622,15 +14636,15 @@ function useConnectedWorkspaceList({
14622
14636
  [controlledFilters, onFiltersChange]
14623
14637
  );
14624
14638
  const attributesOf = React7.useCallback(
14625
- (workspace) => chunkJUUOJP7I_cjs.workspaceFilterAttributes(workspace, { selfId, pinned }),
14639
+ (workspace) => chunkKWJW5TMH_cjs.workspaceFilterAttributes(workspace, { selfId, pinned }),
14626
14640
  [selfId, pinned]
14627
14641
  );
14628
14642
  const filtered = React7.useMemo(
14629
- () => chunkRHKFCSFC_cjs.applyTriStateFilters(workspaces, filterMap, attributesOf),
14643
+ () => chunkLAGHW4JM_cjs.applyTriStateFilters(workspaces, filterMap, attributesOf),
14630
14644
  [workspaces, filterMap, attributesOf]
14631
14645
  );
14632
14646
  const groups = React7.useMemo(
14633
- () => chunkJUUOJP7I_cjs.groupWorkspacesByProject(filtered, {
14647
+ () => chunkKWJW5TMH_cjs.groupWorkspacesByProject(filtered, {
14634
14648
  selfId,
14635
14649
  pinned,
14636
14650
  projects: projects ?? [],
@@ -14691,7 +14705,7 @@ function useConnectedWorkspaceList({
14691
14705
  };
14692
14706
  }
14693
14707
  var WorkspaceTableView = React7.lazy(
14694
- () => import('../WorkspaceTableView-GIDGNGBW.cjs').then((m) => ({ default: m.WorkspaceTableView }))
14708
+ () => import('../WorkspaceTableView-KG4D53SK.cjs').then((m) => ({ default: m.WorkspaceTableView }))
14695
14709
  );
14696
14710
  var WORKSPACES_TAB_ID = "workspaces";
14697
14711
  var defaultRenderMember2 = (user, size) => {
@@ -14743,7 +14757,7 @@ function ConnectedWorkspaceList({
14743
14757
  else void openWorkspace(workspace.external_id, { name: workspace.name });
14744
14758
  };
14745
14759
  const createDisabledReason = list.canCreateProjects === false ? react.PROJECT_CREATION_DENIED_REASON : void 0;
14746
- if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkH3XAHVDT_cjs.LoadingIndicator, { message: "Loading workspaces..." });
14760
+ if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunk6UZ6YTML_cjs.LoadingIndicator, { message: "Loading workspaces..." });
14747
14761
  if (list.error) {
14748
14762
  return /* @__PURE__ */ jsxRuntime.jsx(
14749
14763
  chunkFCWS7I5C_cjs.HomeLoadError,
@@ -14816,7 +14830,7 @@ function ConnectedWorkspaceList({
14816
14830
  workspaceState
14817
14831
  }
14818
14832
  ) })
14819
- ) : /* @__PURE__ */ jsxRuntime.jsx(React7.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkH3XAHVDT_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunkFCWS7I5C_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
14833
+ ) : /* @__PURE__ */ jsxRuntime.jsx(React7.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunk6UZ6YTML_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunkFCWS7I5C_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
14820
14834
  WorkspaceTableView,
14821
14835
  {
14822
14836
  list,
@@ -14836,8 +14850,8 @@ function workspaceSummary(w) {
14836
14850
  name: w.name,
14837
14851
  description: w.description ?? void 0,
14838
14852
  isPublic: !!w.is_public,
14839
- documentCount: chunkJUUOJP7I_cjs.workspaceDocumentCount(w),
14840
- conversationCount: chunkJUUOJP7I_cjs.workspaceConversationCount(w),
14853
+ documentCount: chunkKWJW5TMH_cjs.workspaceDocumentCount(w),
14854
+ conversationCount: chunkKWJW5TMH_cjs.workspaceConversationCount(w),
14841
14855
  memberCount: w.users?.length ?? 0,
14842
14856
  filesMb: w.user_files_mb ?? 0,
14843
14857
  updatedAt: w.updated_at
@@ -14856,7 +14870,7 @@ function distinctMembers(workspaces) {
14856
14870
  name: name || user.email || "Unknown",
14857
14871
  email: user.email ?? "",
14858
14872
  role: member.role ?? "member",
14859
- isAgent: Boolean(member.agent_ext_id) || chunkJUUOJP7I_cjs.isAgentAccount(user)
14873
+ isAgent: Boolean(member.agent_ext_id) || chunkKWJW5TMH_cjs.isAgentAccount(user)
14860
14874
  });
14861
14875
  }
14862
14876
  }
@@ -14873,7 +14887,7 @@ function buildProjectSummaries(projects, workspaces) {
14873
14887
  const own = byProject.get(p.external_id) ?? [];
14874
14888
  const storage = p.quotas?.storage_gb;
14875
14889
  const aiUsage = p.quotas?.ai_usage;
14876
- const stats = chunkJUUOJP7I_cjs.workspaceGroupStats(own);
14890
+ const stats = chunkKWJW5TMH_cjs.workspaceGroupStats(own);
14877
14891
  return {
14878
14892
  id: p.external_id,
14879
14893
  name: p.name,
@@ -14938,11 +14952,19 @@ var DEFAULT_PROJECT_LIST_COLUMNS = [
14938
14952
  "storage"
14939
14953
  ];
14940
14954
  var DEFAULT_PROJECTS_LIST_LABELS = {
14941
- title: "Projects",
14942
- description: "Every project: its client, stage, documents and the work on it.",
14943
- searchPlaceholder: "Search projects and workspaces\u2026",
14955
+ get title() {
14956
+ return ui.getEntityLabel("PROJECT", "PLURAL");
14957
+ },
14958
+ get description() {
14959
+ return `Every ${ui.entityNoun("PROJECT")}: its client, stage, documents and the work on it.`;
14960
+ },
14961
+ get searchPlaceholder() {
14962
+ return `Search ${ui.entityNoun("PROJECT", "PLURAL")} and workspaces\u2026`;
14963
+ },
14944
14964
  columns: {
14945
- name: "Project",
14965
+ get name() {
14966
+ return ui.getEntityLabel("PROJECT");
14967
+ },
14946
14968
  client: "Client",
14947
14969
  stage: "Stage",
14948
14970
  documents: "Documents",
@@ -14951,9 +14973,15 @@ var DEFAULT_PROJECTS_LIST_LABELS = {
14951
14973
  storage: "Storage"
14952
14974
  },
14953
14975
  opened: "opened",
14954
- loadingTitle: "Loading projects\u2026",
14955
- loadingDescription: "Fetching your projects.",
14956
- emptyTitle: "No projects yet"
14976
+ get loadingTitle() {
14977
+ return `Loading ${ui.entityNoun("PROJECT", "PLURAL")}\u2026`;
14978
+ },
14979
+ get loadingDescription() {
14980
+ return `Fetching your ${ui.entityNoun("PROJECT", "PLURAL")}.`;
14981
+ },
14982
+ get emptyTitle() {
14983
+ return `No ${ui.entityNoun("PROJECT", "PLURAL")} yet`;
14984
+ }
14957
14985
  };
14958
14986
  function formatStorageGb(gb3) {
14959
14987
  if (gb3 <= 0) return "\u2014";
@@ -15044,7 +15072,7 @@ function ProjectsListPage({
15044
15072
  }
15045
15073
  ),
15046
15074
  /* @__PURE__ */ jsxRuntime.jsx(
15047
- chunkH3XAHVDT_cjs.Toolbar,
15075
+ chunk6UZ6YTML_cjs.Toolbar,
15048
15076
  {
15049
15077
  search,
15050
15078
  onSearch: setSearch,
@@ -15108,7 +15136,7 @@ function ProjectsPanel({
15108
15136
  const { data: projects } = react.useProjects();
15109
15137
  const canCreateProjects = react.useCanCreateProjects();
15110
15138
  const { userId } = chunkIWT4QVQL_cjs.useConnectedWorkspace();
15111
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
15139
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
15112
15140
  const billingPortal = useOpenBillingPortal();
15113
15141
  const [newProjectOpen, setNewProjectOpen] = React7.useState(false);
15114
15142
  useAutoRefreshPendingProjects();
@@ -15126,26 +15154,26 @@ function ProjectsPanel({
15126
15154
  },
15127
15155
  ...tabs.openProjectIds.map((id) => ({
15128
15156
  id,
15129
- label: projects?.find((p) => p.external_id === id)?.name ?? "Project",
15157
+ label: projects?.find((p) => p.external_id === id)?.name ?? ui.getEntityLabel("PROJECT"),
15130
15158
  icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "PROJECT" }),
15131
15159
  onClose: () => tabs.onClose(id),
15132
- closeTooltip: "Close project"
15160
+ closeTooltip: `Close ${ui.entityNoun("PROJECT")}`
15133
15161
  }))
15134
15162
  ],
15135
15163
  [ownedCount, tabs, projects]
15136
15164
  );
15137
15165
  const paidProject = projects?.find(isPaid);
15138
- const panel = /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PanelFrame, { className, testId: "projects-panel", children: [
15139
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
15166
+ const panel = /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PanelFrame, { className, testId: "projects-panel", children: [
15167
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
15140
15168
  chunkMEMWZ72Y_cjs.TabHeader,
15141
15169
  {
15142
15170
  tabs: headerTabs,
15143
15171
  activeTabId: activeProjectId ?? PROJECTS_BASE_TAB_ID,
15144
15172
  onTabChange: (id) => tabs.onSelect(id === PROJECTS_BASE_TAB_ID ? null : id),
15145
15173
  afterTabs: (isCompact) => /* @__PURE__ */ jsxRuntime.jsx(
15146
- chunkRHKFCSFC_cjs.PanelAddButton,
15174
+ chunkLAGHW4JM_cjs.PanelAddButton,
15147
15175
  {
15148
- label: "New project",
15176
+ label: `New ${ui.entityNoun("PROJECT")}`,
15149
15177
  onClick: () => setNewProjectOpen(true),
15150
15178
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" }),
15151
15179
  isCompact,
@@ -15158,15 +15186,15 @@ function ProjectsPanel({
15158
15186
  compactBreakpoint: 360
15159
15187
  }
15160
15188
  ) }),
15161
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PanelScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
15189
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PanelScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
15162
15190
  ProjectDetail,
15163
15191
  {
15164
15192
  projectExtId: activeProjectId,
15165
15193
  storage: projectStorage?.(activeProjectId)
15166
15194
  }
15167
- ) }) : /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PanelScroll, { variant: "padded", children: [
15195
+ ) }) : /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PanelScroll, { variant: "padded", children: [
15168
15196
  /* @__PURE__ */ jsxRuntime.jsx(ProjectsTable, {}),
15169
- stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PanelActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsxs(
15197
+ stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PanelActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsxs(
15170
15198
  ui.Button,
15171
15199
  {
15172
15200
  onClick: () => billingPortal.open(paidProject.external_id),
@@ -15188,7 +15216,7 @@ function ProjectsPanel({
15188
15216
  {
15189
15217
  open: newProjectOpen,
15190
15218
  onOpenChange: setNewProjectOpen,
15191
- defaultName: `Project ${(projects?.length ?? 0) + 1}`
15219
+ defaultName: `${ui.getEntityLabel("PROJECT")} ${(projects?.length ?? 0) + 1}`
15192
15220
  }
15193
15221
  )
15194
15222
  ] });
@@ -15843,7 +15871,7 @@ function recentConversations(conversations) {
15843
15871
  return [...conversations].sort((a, b) => time(b.updated_at) - time(a.updated_at)).slice(0, RECENT_ROWS).map((c) => ({
15844
15872
  id: c.external_id,
15845
15873
  title: c.title?.trim() || "Untitled thread",
15846
- subtitle: c.status ? [chunkS4G3DNMA_cjs.STATUS_LABELS[chunkS4G3DNMA_cjs.asTaskStatus(c.status)], c.due_at ? `due ${shortDate(c.due_at)}` : null].filter(Boolean).join(" \xB7 ") : `${c.message_count} ${c.message_count === 1 ? "message" : "messages"}`,
15874
+ subtitle: c.status ? [chunkQZTA2M4U_cjs.STATUS_LABELS[chunkQZTA2M4U_cjs.asTaskStatus(c.status)], c.due_at ? `due ${shortDate(c.due_at)}` : null].filter(Boolean).join(" \xB7 ") : `${c.message_count} ${c.message_count === 1 ? "message" : "messages"}`,
15847
15875
  time: timeAndDate(c.updated_at)
15848
15876
  }));
15849
15877
  }
@@ -16927,7 +16955,7 @@ function MailComposerForm({
16927
16955
  "label",
16928
16956
  {
16929
16957
  className: "flex items-center gap-1 text-xs text-muted-foreground",
16930
- title: "ARBI's work on this email is billed to this project",
16958
+ title: `ARBI's work on this email is billed to this ${ui.entityNoun("PROJECT")}`,
16931
16959
  children: [
16932
16960
  "Billed to",
16933
16961
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -19601,7 +19629,7 @@ function EventEditorDialog({
19601
19629
  const { notify: notify17, runtimeConfig } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
19602
19630
  const attachmentDocuments = documents.map((document2) => ({
19603
19631
  doc_id: document2.external_id,
19604
- title: chunkBL74GYSA_cjs.toWorkflowFieldDocument(document2).title,
19632
+ title: chunkJGCYM3II_cjs.toWorkflowFieldDocument(document2).title,
19605
19633
  url: chunk725OETK3_cjs.buildDeepLinkUrl(
19606
19634
  { workspaceId: workspaceId ?? void 0, documentId: document2.external_id },
19607
19635
  runtimeConfig.deploymentDomain
@@ -21656,7 +21684,7 @@ var COMPACT_BELOW = 132;
21656
21684
  var NO_DOCUMENTS = [];
21657
21685
  function useFilesWorkspace() {
21658
21686
  const { workspaceId, userId, live } = chunkIWT4QVQL_cjs.useConnectedWorkspace();
21659
- const { members, role } = chunkBL74GYSA_cjs.useConnectedWorkspaceRole();
21687
+ const { members, role } = chunkJGCYM3II_cjs.useConnectedWorkspaceRole();
21660
21688
  const { data: workspaces } = react.useWorkspaces({ enabled: live });
21661
21689
  const workspaceName = workspaces?.find((w) => w.external_id === workspaceId)?.name;
21662
21690
  return {
@@ -22945,9 +22973,9 @@ function ConnectedTagEntity({
22945
22973
  onEditClick();
22946
22974
  }
22947
22975
  };
22948
- const tooltipContent = showTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(chunkH3XAHVDT_cjs.EntityTooltip, { children: [
22976
+ const tooltipContent = showTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(chunk6UZ6YTML_cjs.EntityTooltip, { children: [
22949
22977
  /* @__PURE__ */ jsxRuntime.jsx(
22950
- chunkH3XAHVDT_cjs.EntityTooltipHeader,
22978
+ chunk6UZ6YTML_cjs.EntityTooltipHeader,
22951
22979
  {
22952
22980
  lead: /* @__PURE__ */ jsxRuntime.jsx(
22953
22981
  "span",
@@ -24844,7 +24872,7 @@ function useDocumentFilters({
24844
24872
  [documentFilters]
24845
24873
  );
24846
24874
  const baseFilteredDocuments = React7.useMemo(
24847
- () => chunkRHKFCSFC_cjs.applyInvertedIndexFilter(documents, documentFilters, invertedIndex, getDocId),
24875
+ () => chunkLAGHW4JM_cjs.applyInvertedIndexFilter(documents, documentFilters, invertedIndex, getDocId),
24848
24876
  [documents, documentFilters, invertedIndex]
24849
24877
  );
24850
24878
  const filteredDocuments = React7.useMemo(() => {
@@ -26059,7 +26087,7 @@ function ConnectedFieldsManager({
26059
26087
  ) });
26060
26088
  }
26061
26089
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
26062
- /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.DraggableHeader, { children: [
26090
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.DraggableHeader, { children: [
26063
26091
  /* @__PURE__ */ jsxRuntime.jsx(chunkEWWVKXEQ_cjs.FieldsManagerTitle, { title, className: "px-4 pt-3.5 pb-2" }),
26064
26092
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3", children: tabHeader })
26065
26093
  ] }),
@@ -27102,7 +27130,7 @@ function ConnectedFilesPage({
27102
27130
  const deleteDocuments = react.useDeleteDocuments();
27103
27131
  const isDocumentsPending = isLoading && documents.length === 0;
27104
27132
  const { workspaceId, userId, live } = chunkIWT4QVQL_cjs.useConnectedWorkspace();
27105
- const { role, members } = chunkBL74GYSA_cjs.useConnectedWorkspaceRole();
27133
+ const { role, members } = chunkJGCYM3II_cjs.useConnectedWorkspaceRole();
27106
27134
  const { data: workspaces } = react.useWorkspaces({ enabled: live });
27107
27135
  const workspaceName = workspaces?.find((w) => w.external_id === workspaceId)?.name;
27108
27136
  const isMember = role != null;
@@ -27517,7 +27545,7 @@ function ConnectedFilesPage({
27517
27545
  viewMode === "grid" ? (
27518
27546
  // ‹ n / N › over the table's displayed rows; a step opens the document.
27519
27547
  /* @__PURE__ */ jsxRuntime.jsx(
27520
- chunkH3XAHVDT_cjs.GridRowNavigator,
27548
+ chunk6UZ6YTML_cjs.GridRowNavigator,
27521
27549
  {
27522
27550
  gridApi,
27523
27551
  selectedId: viewingDocumentId ?? selectedDocumentIds[0] ?? null,
@@ -28596,7 +28624,7 @@ function ConnectedMessenger({
28596
28624
  }
28597
28625
  );
28598
28626
  if (!activeId && layout === "panel") {
28599
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PanelFrame, { testId: "dm-messenger", children: [
28627
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PanelFrame, { testId: "dm-messenger", children: [
28600
28628
  list,
28601
28629
  peoplePicker
28602
28630
  ] });
@@ -28606,7 +28634,7 @@ function ConnectedMessenger({
28606
28634
  const presence = activePeer ? host.presenceOf?.(activePeer.external_id) : void 0;
28607
28635
  const threadName = active?.title ?? (activePeer ? react.userDisplayName(activePeer) : null);
28608
28636
  const thread = activeId ? /* @__PURE__ */ jsxRuntime.jsxs(
28609
- chunkRHKFCSFC_cjs.PanelFrame,
28637
+ chunkLAGHW4JM_cjs.PanelFrame,
28610
28638
  {
28611
28639
  testId: isSplit ? "dm-messenger-thread" : "dm-messenger",
28612
28640
  className: isSplit ? "min-w-0 flex-1 bg-card" : void 0,
@@ -28673,7 +28701,7 @@ function ConnectedMessenger({
28673
28701
  groupChat.external_id
28674
28702
  ) : null,
28675
28703
  peoplePicker,
28676
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PanelFrameBody, { className: "flex flex-col overflow-visible", children: active ? /* @__PURE__ */ jsxRuntime.jsx(
28704
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PanelFrameBody, { className: "flex flex-col overflow-visible", children: active ? /* @__PURE__ */ jsxRuntime.jsx(
28677
28705
  ConnectedChatThread,
28678
28706
  {
28679
28707
  chat: active.chat,
@@ -29055,7 +29083,7 @@ function ConnectedConfigForm({ availableModels, ...rest }) {
29055
29083
  ({ value, onChange }) => /* @__PURE__ */ jsxRuntime.jsx(ConnectedModelSelector, { value, onValueChange: onChange, className: "w-full" }),
29056
29084
  []
29057
29085
  );
29058
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConfigForm, { ...rest, renderModelSelect: hasModels ? renderModelSelect : void 0 });
29086
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConfigForm, { ...rest, renderModelSelect: hasModels ? renderModelSelect : void 0 });
29059
29087
  }
29060
29088
  function ConnectedAgentConfigForm({ agentExtId, agentName, onSaved }) {
29061
29089
  const { notify: notify17 } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
@@ -29172,7 +29200,7 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
29172
29200
  }, [name, selectedWorkspaces, role, createAgent, addWorkspaceUsers, arbi, notify17]);
29173
29201
  if (editAgent) {
29174
29202
  return /* @__PURE__ */ jsxRuntime.jsx(
29175
- chunkS4G3DNMA_cjs.AgentEditView,
29203
+ chunkQZTA2M4U_cjs.AgentEditView,
29176
29204
  {
29177
29205
  agentName: editAgent.name,
29178
29206
  config: /* @__PURE__ */ jsxRuntime.jsx(
@@ -29188,7 +29216,7 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
29188
29216
  }
29189
29217
  if (view === "main") {
29190
29218
  return /* @__PURE__ */ jsxRuntime.jsx(
29191
- chunkS4G3DNMA_cjs.AgentMainView,
29219
+ chunkQZTA2M4U_cjs.AgentMainView,
29192
29220
  {
29193
29221
  onConnectExternal: () => setView("connect"),
29194
29222
  config: mainAgent ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -29204,11 +29232,11 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
29204
29232
  }
29205
29233
  if (result) {
29206
29234
  return /* @__PURE__ */ jsxRuntime.jsx(
29207
- chunkS4G3DNMA_cjs.AgentCreatedView,
29235
+ chunkQZTA2M4U_cjs.AgentCreatedView,
29208
29236
  {
29209
29237
  email: result.email,
29210
29238
  signingKey: result.signingKey,
29211
- instructions: /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.AgentConnectInstructions, { email: result.email, signingKey: result.signingKey }),
29239
+ instructions: /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.AgentConnectInstructions, { email: result.email, signingKey: result.signingKey }),
29212
29240
  config: /* @__PURE__ */ jsxRuntime.jsx(ConnectedAgentConfigForm, { agentExtId: result.extId, agentName: result.name }),
29213
29241
  isConfigOpen: configOpen,
29214
29242
  onToggleConfig: () => setConfigOpen((v) => !v),
@@ -29217,7 +29245,7 @@ function ConnectedAuthorizeAgent({ onClose, editAgent }) {
29217
29245
  );
29218
29246
  }
29219
29247
  return /* @__PURE__ */ jsxRuntime.jsx(
29220
- chunkS4G3DNMA_cjs.AgentCreateView,
29248
+ chunkQZTA2M4U_cjs.AgentCreateView,
29221
29249
  {
29222
29250
  name,
29223
29251
  onNameChange: setName,
@@ -29273,7 +29301,7 @@ function DeveloperFooter({
29273
29301
  }, [configVersions, configToLoad, parentMessage?.config_ext_id]);
29274
29302
  const hasLoadedConfig = !!loadedConfigId && loadedConfigId !== "default";
29275
29303
  return /* @__PURE__ */ jsxRuntime.jsx(
29276
- chunkRHKFCSFC_cjs.ConfigSwitcherBar,
29304
+ chunkLAGHW4JM_cjs.ConfigSwitcherBar,
29277
29305
  {
29278
29306
  options: options2,
29279
29307
  value: loadedConfigId || "default",
@@ -29542,8 +29570,8 @@ function ConnectedDeveloperConfig({ modeSwitcher } = {}) {
29542
29570
  handleDeleteConfig,
29543
29571
  handleLoadConfig
29544
29572
  } = useDeveloperConfig();
29545
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkRHKFCSFC_cjs.PanelFrame, { testId: "developer-config", children: [
29546
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
29573
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkLAGHW4JM_cjs.PanelFrame, { testId: "developer-config", children: [
29574
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
29547
29575
  chunkMEMWZ72Y_cjs.TabHeader,
29548
29576
  {
29549
29577
  tabs: [{ id: "config", label: "Developer Config", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code2, { className: "size-4" }) }],
@@ -29553,7 +29581,7 @@ function ConnectedDeveloperConfig({ modeSwitcher } = {}) {
29553
29581
  rightContent: modeSwitcher
29554
29582
  }
29555
29583
  ) }),
29556
- /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PanelFrameBody, { className: "overflow-auto p-4", children: configSchema ? /* @__PURE__ */ jsxRuntime.jsx(
29584
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PanelFrameBody, { className: "overflow-auto p-4", children: configSchema ? /* @__PURE__ */ jsxRuntime.jsx(
29557
29585
  ConnectedConfigForm,
29558
29586
  {
29559
29587
  schema: configSchema,
@@ -29561,7 +29589,7 @@ function ConnectedDeveloperConfig({ modeSwitcher } = {}) {
29561
29589
  onChange: handleConfigChange,
29562
29590
  availableModels: availableModels?.models
29563
29591
  }
29564
- ) : /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.PanelNote, { children: "Loading configuration schema..." }) }),
29592
+ ) : /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.PanelNote, { children: "Loading configuration schema..." }) }),
29565
29593
  /* @__PURE__ */ jsxRuntime.jsx(
29566
29594
  DeveloperFooter,
29567
29595
  {
@@ -29679,7 +29707,7 @@ function ConnectedGrantWorkspaceAccessDialog({
29679
29707
  ...isExternal ? { access_duration_seconds: Number(accessHours) * 3600 } : {}
29680
29708
  });
29681
29709
  const wsName = workspaces.find((w) => w.external_id === wsId)?.name ?? "the workspace";
29682
- const roleLabel = chunkKJVDYWAM_cjs.formatRole(selectedRole).toLowerCase();
29710
+ const roleLabel = chunk6UKNYQ7Q_cjs.formatRole(selectedRole).toLowerCase();
29683
29711
  const expiresAt = Array.isArray(grantedMembers) ? grantedMembers.find((member) => member.user?.email === requester.email)?.access_expires_at : void 0;
29684
29712
  const expiryIso = expiresAt && !/(?:Z|[+-]\d{2}:\d{2})$/i.test(expiresAt) ? `${expiresAt}Z` : expiresAt;
29685
29713
  const expiryZone = expiryIso ? new Intl.DateTimeFormat(void 0, { timeZoneName: "short" }).formatToParts(new Date(expiryIso)).find((part) => part.type === "timeZoneName")?.value : void 0;
@@ -29782,17 +29810,17 @@ function ConnectedGrantWorkspaceAccessDialog({
29782
29810
  onValueChange: (v) => setSelectedRole(v),
29783
29811
  disabled: busy,
29784
29812
  children: [
29785
- /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { "data-testid": "grant-role-select", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkKJVDYWAM_cjs.getRoleBadgeClass(selectedRole), children: chunkKJVDYWAM_cjs.formatRole(selectedRole) }) }) }),
29813
+ /* @__PURE__ */ jsxRuntime.jsx(ui.SelectTrigger, { "data-testid": "grant-role-select", children: /* @__PURE__ */ jsxRuntime.jsx(ui.SelectValue, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunk6UKNYQ7Q_cjs.getRoleBadgeClass(selectedRole), children: chunk6UKNYQ7Q_cjs.formatRole(selectedRole) }) }) }),
29786
29814
  /* @__PURE__ */ jsxRuntime.jsx(ui.SelectContent, { children: GRANTABLE_ROLES.filter((role) => !isExternal || role.value !== "owner").map(
29787
29815
  (role) => /* @__PURE__ */ jsxRuntime.jsx(ui.SelectItem, { value: role.value, children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-2", children: [
29788
- /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunkKJVDYWAM_cjs.getRoleBadgeClass(role.value), children: role.label }),
29816
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { variant: "default", className: chunk6UKNYQ7Q_cjs.getRoleBadgeClass(role.value), children: role.label }),
29789
29817
  role.value === "guest" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Read-only" })
29790
29818
  ] }) }, role.value)
29791
29819
  ) })
29792
29820
  ]
29793
29821
  }
29794
29822
  ),
29795
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-xs text-muted-foreground", children: chunkKJVDYWAM_cjs.getRoleDescription(selectedRole) }),
29823
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-xs text-muted-foreground", children: chunk6UKNYQ7Q_cjs.getRoleDescription(selectedRole) }),
29796
29824
  !canGrant(primaryKind) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-yellow-text", "data-testid": "owner-temporary-warning", children: "Temporary access can\u2019t be owner \u2014 pick another role or grant permanent." })
29797
29825
  ] })
29798
29826
  ] }),
@@ -30005,9 +30033,9 @@ function ConnectedWorkspaceEntity({
30005
30033
  );
30006
30034
  const documentCount2 = (workspace.shared_document_count ?? 0) + (workspace.private_document_count ?? 0);
30007
30035
  const conversationCount = (workspace.shared_conversation_count ?? 0) + (workspace.private_conversation_count ?? 0);
30008
- const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunkH3XAHVDT_cjs.EntityTooltip, { children: [
30036
+ const tooltipContent = /* @__PURE__ */ jsxRuntime.jsxs(chunk6UZ6YTML_cjs.EntityTooltip, { children: [
30009
30037
  /* @__PURE__ */ jsxRuntime.jsx(
30010
- chunkH3XAHVDT_cjs.EntityTooltipHeader,
30038
+ chunk6UZ6YTML_cjs.EntityTooltipHeader,
30011
30039
  {
30012
30040
  lead: /* @__PURE__ */ jsxRuntime.jsx(
30013
30041
  ui.ShieldIcon,
@@ -30020,11 +30048,11 @@ function ConnectedWorkspaceEntity({
30020
30048
  ),
30021
30049
  title: name,
30022
30050
  subtitle: workspace.description,
30023
- trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkKJVDYWAM_cjs.WorkspaceTypeBadge, { workspace, size: "sm" })
30051
+ trailing: /* @__PURE__ */ jsxRuntime.jsx(chunk6UKNYQ7Q_cjs.WorkspaceTypeBadge, { workspace, size: "sm" })
30024
30052
  }
30025
30053
  ),
30026
30054
  /* @__PURE__ */ jsxRuntime.jsx(
30027
- chunkH3XAHVDT_cjs.EntityTooltipStats,
30055
+ chunk6UZ6YTML_cjs.EntityTooltipStats,
30028
30056
  {
30029
30057
  stats: [
30030
30058
  {
@@ -30048,11 +30076,11 @@ function ConnectedWorkspaceEntity({
30048
30076
  ]
30049
30077
  }
30050
30078
  ),
30051
- workspace.updated_at && /* @__PURE__ */ jsxRuntime.jsxs(chunkH3XAHVDT_cjs.EntityTooltipHint, { children: [
30079
+ workspace.updated_at && /* @__PURE__ */ jsxRuntime.jsxs(chunk6UZ6YTML_cjs.EntityTooltipHint, { children: [
30052
30080
  "Updated ",
30053
30081
  ui.formatFriendlyDate(workspace.updated_at)
30054
30082
  ] }),
30055
- interactive && variant !== "icon" && /* @__PURE__ */ jsxRuntime.jsxs(chunkH3XAHVDT_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "WORKSPACE", className: "w-3 h-3" }), children: [
30083
+ interactive && variant !== "icon" && /* @__PURE__ */ jsxRuntime.jsxs(chunk6UZ6YTML_cjs.EntityTooltipHint, { icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "WORKSPACE", className: "w-3 h-3" }), children: [
30056
30084
  "Click to open ",
30057
30085
  ui.getEntityLabel("WORKSPACE").toLowerCase(),
30058
30086
  " settings"
@@ -30120,7 +30148,7 @@ function ConnectedProjectEntity({
30120
30148
  subscription = "none",
30121
30149
  ...props
30122
30150
  }) {
30123
- const { stripeEnabled } = chunkLYF47OXX_cjs.useBillingSupport();
30151
+ const { stripeEnabled } = chunkT67EFI43_cjs.useBillingSupport();
30124
30152
  return /* @__PURE__ */ jsxRuntime.jsx(
30125
30153
  ui.ProjectEntity,
30126
30154
  {
@@ -30154,7 +30182,7 @@ var ConversationEntity = React7.memo(function ConversationEntity2({
30154
30182
  );
30155
30183
  const icon2 = /* @__PURE__ */ jsxRuntime.jsx(ui.ThreadVisibilityIcon, { shared: isShared, className: `${iconSizeClass} shrink-0` });
30156
30184
  return /* @__PURE__ */ jsxRuntime.jsx(
30157
- chunkS4G3DNMA_cjs.EntityChip,
30185
+ chunkQZTA2M4U_cjs.EntityChip,
30158
30186
  {
30159
30187
  variant,
30160
30188
  icon: icon2,
@@ -30176,7 +30204,7 @@ function WorkflowRunStatusCell({ conversation }) {
30176
30204
  });
30177
30205
  const { data: members = [] } = react.useWorkspaceUsers();
30178
30206
  const me = react.useArbiSession().user?.external_id;
30179
- const steps = chunkS4G3DNMA_cjs.fromPlanSteps(conversation.plan?.steps ?? []);
30207
+ const steps = chunkQZTA2M4U_cjs.fromPlanSteps(conversation.plan?.steps ?? []);
30180
30208
  const states = chunkEZLZ3MDU_cjs.stepStatesFromActivity(activity.data ?? []);
30181
30209
  const nameOf = (id) => {
30182
30210
  if (id === me) return "you";
@@ -30184,7 +30212,7 @@ function WorkflowRunStatusCell({ conversation }) {
30184
30212
  return person ? ui.getUserDisplayName(person) : void 0;
30185
30213
  };
30186
30214
  return /* @__PURE__ */ jsxRuntime.jsx(
30187
- chunkS4G3DNMA_cjs.WorkflowRunStatus,
30215
+ chunkQZTA2M4U_cjs.WorkflowRunStatus,
30188
30216
  {
30189
30217
  steps,
30190
30218
  states,
@@ -30218,7 +30246,7 @@ function ConversationStatusCell({ conversation }) {
30218
30246
  if (conversation.plan?.steps?.length && !isLiveGenerating)
30219
30247
  return /* @__PURE__ */ jsxRuntime.jsx(WorkflowRunStatusCell, { conversation });
30220
30248
  return /* @__PURE__ */ jsxRuntime.jsx(
30221
- chunkS4G3DNMA_cjs.ThreadStatusLine,
30249
+ chunkQZTA2M4U_cjs.ThreadStatusLine,
30222
30250
  {
30223
30251
  state: threadStateOf(conversation, isLiveGenerating),
30224
30252
  className: "h-full",
@@ -30550,16 +30578,16 @@ function useConnectedThreadActivity(conversationId) {
30550
30578
  const openWorkflow = chunk2QQUGL2V_cjs.useOpenWorkflow();
30551
30579
  const workspaceExtId = react.useArbiSessionState((s) => s.workspaceId);
30552
30580
  const task = conversations.find((c) => c.external_id === conversationId);
30553
- const latestMessageAt = chunkS4G3DNMA_cjs.latestMessageTime(messageHistory);
30581
+ const latestMessageAt = chunkQZTA2M4U_cjs.latestMessageTime(messageHistory);
30554
30582
  const events = (activity.data ?? []).filter(
30555
- (event) => !chunkS4G3DNMA_cjs.isSupersededStop(event, latestMessageAt)
30583
+ (event) => !chunkQZTA2M4U_cjs.isSupersededStop(event, latestMessageAt)
30556
30584
  );
30557
30585
  const personName = (extId) => {
30558
30586
  const person = members.find((m) => m.user.external_id === extId)?.user;
30559
30587
  return person ? ui.getUserDisplayName(person) : "someone";
30560
30588
  };
30561
- const planSteps = chunkS4G3DNMA_cjs.fromPlanSteps(task?.plan?.steps ?? []);
30562
- const entries = chunkS4G3DNMA_cjs.compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title);
30589
+ const planSteps = chunkQZTA2M4U_cjs.fromPlanSteps(task?.plan?.steps ?? []);
30590
+ const entries = chunkQZTA2M4U_cjs.compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title);
30563
30591
  const items = entries.map(({ event, label, recipients }) => {
30564
30592
  const messageActivity = [
30565
30593
  "created",
@@ -30585,7 +30613,7 @@ function useConnectedThreadActivity(conversationId) {
30585
30613
  const messageId = sourceMessage ?? [...messageHistory].reverse().find((message) => Date.parse(message.created_at ?? "") <= Date.parse(event.created_at))?.external_id ?? messageHistory[0]?.external_id;
30586
30614
  const doc = docId ? docs.find((d) => d.external_id === docId) : void 0;
30587
30615
  const mailDraftId = event.kind === "notified" && event.detail?.event === "mail_draft_ready" && typeof event.detail?.mail_id === "string" ? event.detail.mail_id : void 0;
30588
- const missed = event.kind === "notified" && recipients.length ? chunkS4G3DNMA_cjs.unnotifiedMentions(
30616
+ const missed = event.kind === "notified" && recipients.length ? chunkQZTA2M4U_cjs.unnotifiedMentions(
30589
30617
  messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,
30590
30618
  recipients,
30591
30619
  event.actor_ext_id
@@ -30618,7 +30646,7 @@ function useConnectedThreadActivity(conversationId) {
30618
30646
  ) : void 0,
30619
30647
  docId,
30620
30648
  docTitle: doc ? ui.getDocumentTitle(doc) : void 0,
30621
- label: mailDraftId ? "Left a draft email" : event.kind === "notified" && recipients.length ? chunkS4G3DNMA_cjs.notifiedLabel(recipients.map(personName), missed.map(personName)) : label,
30649
+ label: mailDraftId ? "Left a draft email" : event.kind === "notified" && recipients.length ? chunkQZTA2M4U_cjs.notifiedLabel(recipients.map(personName), missed.map(personName)) : label,
30622
30650
  description: [
30623
30651
  name,
30624
30652
  label,
@@ -30632,7 +30660,7 @@ function useConnectedThreadActivity(conversationId) {
30632
30660
  stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : void 0,
30633
30661
  // No avatar tooltip: the entry is already a button (or titled row) that carries the same
30634
30662
  // details, and a tooltip trigger inside it would be a nested <button>.
30635
- avatar: assistant ? /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.AssistantEntity, { variant: "icon", size: 20, showTooltip: false }) : member ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: member, tooltip: false }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-4 text-muted-foreground" }),
30663
+ avatar: assistant ? /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.AssistantEntity, { variant: "icon", size: 20, showTooltip: false }) : member ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: member, tooltip: false }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { className: "size-4 text-muted-foreground" }),
30636
30664
  time: ui.formatRelativeTime(event.created_at, { style: "short" }),
30637
30665
  exactTime: ui.formatFriendlyDate(event.created_at),
30638
30666
  onOpenDocument: docId && doc ? () => openDocument(docId) : void 0,
@@ -30681,7 +30709,7 @@ function useConnectedThreadActivity(conversationId) {
30681
30709
  onSelect: () => navigateToConversation(source)
30682
30710
  });
30683
30711
  }
30684
- const links = chunkS4G3DNMA_cjs.linkedRunsFromActivity(activity.data);
30712
+ const links = chunkQZTA2M4U_cjs.linkedRunsFromActivity(activity.data);
30685
30713
  const threadName = (id, workflowId) => conversations.find((c) => c.external_id === id)?.title || workflows.find((w) => w.external_id === workflowId)?.name || "Linked thread";
30686
30714
  const signals = links.raised.map((raised) => ({
30687
30715
  step: raised.step,
@@ -30696,7 +30724,7 @@ function useConnectedThreadActivity(conversationId) {
30696
30724
  if (links.startedBy) {
30697
30725
  const { conversationId: parentId, step, signal } = links.startedBy;
30698
30726
  const parent = conversations.find((c) => c.external_id === parentId);
30699
- const parentSteps = chunkS4G3DNMA_cjs.fromPlanSteps(parent?.plan?.steps ?? []);
30727
+ const parentSteps = chunkQZTA2M4U_cjs.fromPlanSteps(parent?.plan?.steps ?? []);
30700
30728
  startedBy = {
30701
30729
  stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? "a step",
30702
30730
  threadTitle: parent?.title || "another thread",
@@ -30729,7 +30757,7 @@ function ConnectedThreadTaskBar({
30729
30757
  const person = members.find((m) => m.user.external_id === id)?.user;
30730
30758
  return person ? ui.getUserDisplayName(person) : void 0;
30731
30759
  };
30732
- const steps = chunkS4G3DNMA_cjs.fromPlanSteps(task?.plan?.steps ?? []);
30760
+ const steps = chunkQZTA2M4U_cjs.fromPlanSteps(task?.plan?.steps ?? []);
30733
30761
  const states = chunkEZLZ3MDU_cjs.stepStatesFromActivity(activity.data ?? []);
30734
30762
  const runInputs = task?.skill_inputs ?? {};
30735
30763
  const stepCall = (body) => actOnStep.mutateAsync({ conversationId, body });
@@ -30755,7 +30783,7 @@ function ConnectedThreadTaskBar({
30755
30783
  task?.plan?.steps?.length ? (
30756
30784
  // A workflow run: its named steps, with what happened in the thread under each.
30757
30785
  /* @__PURE__ */ jsxRuntime.jsx(
30758
- chunkS4G3DNMA_cjs.WorkflowThreadStrip,
30786
+ chunkQZTA2M4U_cjs.WorkflowThreadStrip,
30759
30787
  {
30760
30788
  steps,
30761
30789
  states,
@@ -30782,7 +30810,7 @@ function ConnectedThreadTaskBar({
30782
30810
  renderStepAction: (step, phase) => (
30783
30811
  // A signer or a draft's person acts on their step even on a thread they cannot edit.
30784
30812
  canEdit || phase === "waiting" || phase === "done" ? /* @__PURE__ */ jsxRuntime.jsx(
30785
- chunkS4G3DNMA_cjs.WorkflowStepAction,
30813
+ chunkQZTA2M4U_cjs.WorkflowStepAction,
30786
30814
  {
30787
30815
  step,
30788
30816
  phase,
@@ -30803,8 +30831,8 @@ function ConnectedThreadTaskBar({
30803
30831
  }
30804
30832
  )
30805
30833
  ) : items.length || startedBy ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30806
- startedBy && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.WorkflowThreadStartedBy, { origin: startedBy }),
30807
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.TaskFlow, { items: items.filter((item) => !item.step) })
30834
+ startedBy && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.WorkflowThreadStartedBy, { origin: startedBy }),
30835
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.TaskFlow, { items: items.filter((item) => !item.step) })
30808
30836
  ] }) : (
30809
30837
  // Ordinary chats record no activity events, so an empty ribbon says nothing rather than
30810
30838
  // "No recorded activity yet" while the answer and its steps are right there in the thread.
@@ -30838,7 +30866,7 @@ function ConnectedThreadTaskBar({
30838
30866
  ) }),
30839
30867
  /* @__PURE__ */ jsxRuntime.jsxs(ui.DropdownMenuContent, { align: "end", children: [
30840
30868
  /* @__PURE__ */ jsxRuntime.jsx(
30841
- chunkH3XAHVDT_cjs.ThreadFollowMenuItem,
30869
+ chunk6UZ6YTML_cjs.ThreadFollowMenuItem,
30842
30870
  {
30843
30871
  following: follow.following,
30844
30872
  onFollowingChange: (on) => (
@@ -30889,7 +30917,7 @@ function ConnectedThreadTaskBar({
30889
30917
  ] }),
30890
30918
  error && /* @__PURE__ */ jsxRuntime.jsx("span", { role: "alert", className: "text-xs text-destructive", children: error }),
30891
30919
  /* @__PURE__ */ jsxRuntime.jsx(
30892
- chunkRHKFCSFC_cjs.RenameDialog,
30920
+ chunkLAGHW4JM_cjs.RenameDialog,
30893
30921
  {
30894
30922
  open: renameOpen,
30895
30923
  onClose: () => setRenameOpen(false),
@@ -30917,25 +30945,25 @@ function useSkillsEnabled() {
30917
30945
  // src/connection/workflows/useWorkflowDefinitions.ts
30918
30946
  function useWorkflowDefinitions() {
30919
30947
  const { data: listings } = react.useSkills();
30920
- const usage = chunkS4G3DNMA_cjs.useWorkflowUsage();
30948
+ const usage = chunkQZTA2M4U_cjs.useWorkflowUsage();
30921
30949
  const skillsEnabled = useSkillsEnabled();
30922
30950
  return React7.useMemo(() => {
30923
30951
  const { host: builtins, skills: fromServer } = chunk76L6LOP3_cjs.mergeSkillWorkflows(
30924
- chunkS4G3DNMA_cjs.WEB_WORKFLOWS,
30952
+ chunkQZTA2M4U_cjs.WEB_WORKFLOWS,
30925
30953
  listings ?? []
30926
30954
  );
30927
30955
  const all = [...builtins, ...fromServer];
30928
30956
  const byId = new Map(all.map((w) => [w.id, w]));
30929
- const pinned = chunkS4G3DNMA_cjs.DASHBOARD_PINNED.flatMap((id) => {
30957
+ const pinned = chunkQZTA2M4U_cjs.DASHBOARD_PINNED.flatMap((id) => {
30930
30958
  const w = byId.get(id);
30931
30959
  return w ? [w] : [];
30932
30960
  });
30933
30961
  return {
30934
30962
  skills: all,
30935
30963
  skillsEnabled,
30936
- start: skillsEnabled ? [...builtins, ...chunkS4G3DNMA_cjs.sortByRecentUse(fromServer, usage)] : [],
30937
- dashboard: [...pinned, ...chunkS4G3DNMA_cjs.DASHBOARD_OPERATIONS],
30938
- forTasks: [chunkS4G3DNMA_cjs.CUSTOM_TASK, ...all.filter((w) => w.schedulable), chunkS4G3DNMA_cjs.REMIND_TASK]
30964
+ start: skillsEnabled ? [...builtins, ...chunkQZTA2M4U_cjs.sortByRecentUse(fromServer, usage)] : [],
30965
+ dashboard: [...pinned, ...chunkQZTA2M4U_cjs.DASHBOARD_OPERATIONS],
30966
+ forTasks: [chunkQZTA2M4U_cjs.CUSTOM_TASK, ...all.filter((w) => w.schedulable), chunkQZTA2M4U_cjs.REMIND_TASK]
30939
30967
  };
30940
30968
  }, [listings, usage, skillsEnabled]);
30941
30969
  }
@@ -30963,7 +30991,7 @@ function useWorkflowTasks() {
30963
30991
  );
30964
30992
  const create3 = React7.useCallback(
30965
30993
  async (ctx, forceWorkflow = false) => {
30966
- const request = chunkS4G3DNMA_cjs.taskComposerToCreateRequest(
30994
+ const request = chunkQZTA2M4U_cjs.taskComposerToCreateRequest(
30967
30995
  { ...ctx, documentTitles, plan: ctx.plan ?? null },
30968
30996
  activeWorkspaceId ?? void 0,
30969
30997
  forceWorkflow
@@ -31005,7 +31033,7 @@ function useWorkflowTasks() {
31005
31033
  );
31006
31034
  const update = React7.useCallback(
31007
31035
  async (task, ctx) => {
31008
- const patch = chunkS4G3DNMA_cjs.taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
31036
+ const patch = chunkQZTA2M4U_cjs.taskComposerToUpdateRequest({ ...ctx, plan: ctx.plan ?? null });
31009
31037
  if (task.is_owner === false) delete patch.shared;
31010
31038
  await updateConversation.mutateAsync({ conversationId: task.external_id, patch });
31011
31039
  },
@@ -31013,7 +31041,7 @@ function useWorkflowTasks() {
31013
31041
  );
31014
31042
  const updateWorkflow = React7.useCallback(
31015
31043
  async (workflow, ctx) => {
31016
- const patch = chunkS4G3DNMA_cjs.composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
31044
+ const patch = chunkQZTA2M4U_cjs.composerToWorkflowUpdate({ ...ctx, documentTitles, plan: ctx.plan ?? null });
31017
31045
  if (workflow.is_owner === false) delete patch.shared;
31018
31046
  const workspaceId = workflow.workspace_ext_id ?? activeWorkspaceId;
31019
31047
  const updated = await updateWorkflowMutation.mutateAsync({
@@ -31128,7 +31156,7 @@ function ConnectedTaskComposer({
31128
31156
  const { tasks: allTasks } = react.useWorkItems();
31129
31157
  const { data: documents = [] } = react.useDocuments();
31130
31158
  const { create: create3, update, updateWorkflow, isPending } = useWorkflowTasks();
31131
- const scopeSource = chunkBL74GYSA_cjs.useConnectedWorkflowScopeSource();
31159
+ const scopeSource = chunkJGCYM3II_cjs.useConnectedWorkflowScopeSource();
31132
31160
  const activeWorkspaceId = react.useArbiSessionState((s) => s.workspaceId);
31133
31161
  const activeWorkspace = React7.useMemo(
31134
31162
  () => workspaces.find((w) => w.external_id === activeWorkspaceId) ?? null,
@@ -31145,7 +31173,7 @@ function ConnectedTaskComposer({
31145
31173
  const label = (t) => t.title?.trim() || "Untitled task";
31146
31174
  if (isWorkflow) return allTasks.map((t) => ({ id: t.external_id, name: label(t) }));
31147
31175
  const subject = task ?? { external_id: "__new__" };
31148
- return chunkS4G3DNMA_cjs.moveTargets(
31176
+ return chunkQZTA2M4U_cjs.moveTargets(
31149
31177
  [...allTasks.filter((t) => t.external_id !== subject.external_id), subject],
31150
31178
  subject
31151
31179
  ).map((t) => ({ id: t.external_id, name: label(t) }));
@@ -31160,33 +31188,33 @@ function ConnectedTaskComposer({
31160
31188
  );
31161
31189
  const initialValues = React7.useMemo(() => {
31162
31190
  const ids = {
31163
- customWorkflowId: chunkS4G3DNMA_cjs.CUSTOM_TASK_ID,
31164
- reminderWorkflowId: chunkS4G3DNMA_cjs.REMIND_TASK_ID,
31191
+ customWorkflowId: chunkQZTA2M4U_cjs.CUSTOM_TASK_ID,
31192
+ reminderWorkflowId: chunkQZTA2M4U_cjs.REMIND_TASK_ID,
31165
31193
  definitions: forTasks
31166
31194
  };
31167
31195
  const base = launchWorkflow ? {
31168
- ...chunkS4G3DNMA_cjs.workflowToComposerValues(launchWorkflow, ids),
31196
+ ...chunkQZTA2M4U_cjs.workflowToComposerValues(launchWorkflow, ids),
31169
31197
  when: "once",
31170
31198
  runAt: "",
31171
31199
  rrule: "",
31172
31200
  eventKind: "",
31173
31201
  afterTaskId: "",
31174
31202
  name: ""
31175
- } : editingWorkflow ? chunkS4G3DNMA_cjs.workflowToComposerValues(editingWorkflow, ids) : task ? chunkS4G3DNMA_cjs.taskToComposerValues(task, ids) : isWorkflow ? {
31203
+ } : editingWorkflow ? chunkQZTA2M4U_cjs.workflowToComposerValues(editingWorkflow, ids) : task ? chunkQZTA2M4U_cjs.taskToComposerValues(task, ids) : isWorkflow ? {
31176
31204
  // Run now is the default start; scheduling is the fallback in the same field.
31177
31205
  assignee: "agent",
31178
- workflowId: initialWorkflowId ?? chunkS4G3DNMA_cjs.CUSTOM_TASK_ID,
31206
+ workflowId: initialWorkflowId ?? chunkQZTA2M4U_cjs.CUSTOM_TASK_ID,
31179
31207
  when: startLater ? "once" : "now",
31180
31208
  ...initialPrompt ? {
31181
31209
  inputs: {
31182
- [initialWorkflowId === chunkS4G3DNMA_cjs.REMIND_TASK_ID ? "message" : "instruction"]: initialPrompt
31210
+ [initialWorkflowId === chunkQZTA2M4U_cjs.REMIND_TASK_ID ? "message" : "instruction"]: initialPrompt
31183
31211
  }
31184
31212
  } : {},
31185
31213
  // A scheduled run needs an agent: the owner's Assistant unless another is picked.
31186
31214
  ...startLater && defaultAgentId ? { agentId: defaultAgentId } : {}
31187
31215
  } : initialAgentExtId ? (
31188
31216
  // Assigning an agent means agentic work: the free instruction, and tell me when done.
31189
- { agentId: initialAgentExtId, workflowId: chunkS4G3DNMA_cjs.CUSTOM_TASK_ID, notifyOnComplete: true }
31217
+ { agentId: initialAgentExtId, workflowId: chunkQZTA2M4U_cjs.CUSTOM_TASK_ID, notifyOnComplete: true }
31190
31218
  ) : {};
31191
31219
  return {
31192
31220
  timezone: chunkQUMUAJ2P_cjs.detectTimeZone(),
@@ -31247,7 +31275,7 @@ function ConnectedTaskComposer({
31247
31275
  const ctx = {
31248
31276
  workflow: chosen,
31249
31277
  values: submitted,
31250
- plan: chosen.id === chunkS4G3DNMA_cjs.CUSTOM_TASK_ID ? plan : null
31278
+ plan: chosen.id === chunkQZTA2M4U_cjs.CUSTOM_TASK_ID ? plan : null
31251
31279
  };
31252
31280
  try {
31253
31281
  if (isWorkflow && editingWorkflow && !options2?.runOnce) {
@@ -31283,7 +31311,7 @@ function ConnectedTaskComposer({
31283
31311
  }
31284
31312
  };
31285
31313
  return /* @__PURE__ */ jsxRuntime.jsx(
31286
- chunkS4G3DNMA_cjs.TaskComposer,
31314
+ chunkQZTA2M4U_cjs.TaskComposer,
31287
31315
  {
31288
31316
  open,
31289
31317
  onOpenChange,
@@ -31297,15 +31325,15 @@ function ConnectedTaskComposer({
31297
31325
  tasks: taskOptions,
31298
31326
  initialValues,
31299
31327
  timezones,
31300
- eventOptions: chunkS4G3DNMA_cjs.AUTOMATION_EVENTS,
31328
+ eventOptions: chunkQZTA2M4U_cjs.AUTOMATION_EVENTS,
31301
31329
  eventWorkflowOptions: workspaceAutomations.filter((item) => item.external_id !== editingWorkflow?.external_id).map((item) => ({ id: item.external_id, label: item.name })),
31302
31330
  isPending,
31303
31331
  planDrafting: planWork.isPending,
31304
31332
  hasPlan: plan !== null,
31305
- renderIcon: chunkS4G3DNMA_cjs.renderWorkflowIcon,
31333
+ renderIcon: chunkQZTA2M4U_cjs.renderWorkflowIcon,
31306
31334
  scopeSource,
31307
31335
  renderDocuments: (field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
31308
- chunkBL74GYSA_cjs.ConnectedWorkflowDocumentsField,
31336
+ chunkJGCYM3II_cjs.ConnectedWorkflowDocumentsField,
31309
31337
  {
31310
31338
  field,
31311
31339
  value,
@@ -31336,8 +31364,8 @@ function ConnectedTaskComposer({
31336
31364
  ...plan ? { addAndStart: "Approve plan and start", addAndSchedule: "Approve plan and schedule" } : {}
31337
31365
  },
31338
31366
  onSubmit: submit,
31339
- goal: (values) => values.workflowId === chunkS4G3DNMA_cjs.CUSTOM_TASK_ID ? /* @__PURE__ */ jsxRuntime.jsx(
31340
- chunkS4G3DNMA_cjs.TaskPlan,
31367
+ goal: (values) => values.workflowId === chunkQZTA2M4U_cjs.CUSTOM_TASK_ID ? /* @__PURE__ */ jsxRuntime.jsx(
31368
+ chunkQZTA2M4U_cjs.TaskPlan,
31341
31369
  {
31342
31370
  plan,
31343
31371
  onChange: setPlan,
@@ -31537,7 +31565,7 @@ function ConnectedTaskStartDialog({
31537
31565
  };
31538
31566
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31539
31567
  /* @__PURE__ */ jsxRuntime.jsx(
31540
- chunkS4G3DNMA_cjs.TaskStartDialog,
31568
+ chunkQZTA2M4U_cjs.TaskStartDialog,
31541
31569
  {
31542
31570
  open: open && !later,
31543
31571
  onOpenChange: (next) => {
@@ -31569,7 +31597,7 @@ function ConnectedTaskStartDialog({
31569
31597
  kind: "workflow",
31570
31598
  startLater: true,
31571
31599
  initialPrompt: later.prompt,
31572
- initialWorkflowId: later.todo ? chunkS4G3DNMA_cjs.REMIND_TASK_ID : void 0,
31600
+ initialWorkflowId: later.todo ? chunkQZTA2M4U_cjs.REMIND_TASK_ID : void 0,
31573
31601
  initialShared: later.shared,
31574
31602
  launchWorkflow: later.workflow
31575
31603
  }
@@ -31583,7 +31611,7 @@ function ConnectedThreadLauncher({ autoFocus }) {
31583
31611
  const [later, setLater] = React7.useState(null);
31584
31612
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31585
31613
  /* @__PURE__ */ jsxRuntime.jsx(
31586
- chunkS4G3DNMA_cjs.ThreadLauncher,
31614
+ chunkQZTA2M4U_cjs.ThreadLauncher,
31587
31615
  {
31588
31616
  workflows: task.workflows,
31589
31617
  people: task.people,
@@ -31620,7 +31648,7 @@ function ConnectedThreadLauncher({ autoFocus }) {
31620
31648
  kind: "workflow",
31621
31649
  startLater: true,
31622
31650
  initialPrompt: later.prompt,
31623
- initialWorkflowId: later.todo ? chunkS4G3DNMA_cjs.REMIND_TASK_ID : void 0,
31651
+ initialWorkflowId: later.todo ? chunkQZTA2M4U_cjs.REMIND_TASK_ID : void 0,
31624
31652
  initialShared: later.shared,
31625
31653
  launchWorkflow: later.workflow
31626
31654
  }
@@ -31649,13 +31677,13 @@ function ConnectedNewThreadDialog({
31649
31677
  });
31650
31678
  const parentOptions = React7.useMemo(() => {
31651
31679
  const leaf = { external_id: "__new__" };
31652
- return chunkS4G3DNMA_cjs.moveTargets([...tasks, leaf], leaf).map((t) => ({
31680
+ return chunkQZTA2M4U_cjs.moveTargets([...tasks, leaf], leaf).map((t) => ({
31653
31681
  id: t.external_id,
31654
31682
  name: t.title?.trim() || "Untitled task"
31655
31683
  }));
31656
31684
  }, [tasks]);
31657
31685
  const submit = async (values) => {
31658
- const request = chunkS4G3DNMA_cjs.newThreadToRequest(values);
31686
+ const request = chunkQZTA2M4U_cjs.newThreadToRequest(values);
31659
31687
  try {
31660
31688
  if (!workspaceId) throw new Error("Open a workspace to add a task.");
31661
31689
  if (!request.startAssistant && request.todo) {
@@ -31696,7 +31724,7 @@ function ConnectedNewThreadDialog({
31696
31724
  }
31697
31725
  };
31698
31726
  return /* @__PURE__ */ jsxRuntime.jsx(
31699
- chunkS4G3DNMA_cjs.NewThreadDialog,
31727
+ chunkQZTA2M4U_cjs.NewThreadDialog,
31700
31728
  {
31701
31729
  open,
31702
31730
  onOpenChange,
@@ -31731,7 +31759,7 @@ function useRenderTaskPerson() {
31731
31759
  return React7.useCallback(
31732
31760
  (person) => {
31733
31761
  const user = person.id ? byId.get(person.id) : void 0;
31734
- return user ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkI5RK4WAE_cjs.PersonPill, { person });
31762
+ return user ? /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user, variant: "pill" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkFGZQUH2Y_cjs.PersonPill, { person });
31735
31763
  },
31736
31764
  [byId]
31737
31765
  );
@@ -31741,14 +31769,14 @@ var referencesOf = (inputs) => {
31741
31769
  return value?.documents ?? [];
31742
31770
  };
31743
31771
  var PROMPT_BINDINGS = {
31744
- [chunkS4G3DNMA_cjs.GENERATE_IMAGE_ID]: {
31772
+ [chunkQZTA2M4U_cjs.GENERATE_IMAGE_ID]: {
31745
31773
  attachScope: false,
31746
31774
  tools: (inputs) => {
31747
31775
  const aspectRatio = typeof inputs.aspect_ratio === "string" ? inputs.aspect_ratio : "";
31748
31776
  return {
31749
31777
  retrieval_chunk: browser.buildRetrievalChunkTool([]),
31750
31778
  retrieval_full_context: browser.buildRetrievalFullContextTool(referencesOf(inputs)),
31751
- ...aspectRatio && aspectRatio !== chunkS4G3DNMA_cjs.IMAGE_ASPECT_AUTO ? {
31779
+ ...aspectRatio && aspectRatio !== chunkQZTA2M4U_cjs.IMAGE_ASPECT_AUTO ? {
31752
31780
  image_generation: {
31753
31781
  name: "image_generation",
31754
31782
  description: "image generation",
@@ -31769,7 +31797,7 @@ var text = (inputs, name) => {
31769
31797
  function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
31770
31798
  const { data: documents = [] } = react.useDocuments();
31771
31799
  const { data: workspaceTags = [] } = react.useTags();
31772
- const tags = React7.useMemo(() => chunkI5RK4WAE_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
31800
+ const tags = React7.useMemo(() => chunkFGZQUH2Y_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
31773
31801
  const createTag = react.useCreateTag();
31774
31802
  const updateTag = react.useUpdateTag();
31775
31803
  const generate = react.useGenerateDocTags();
@@ -31780,8 +31808,8 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
31780
31808
  const annotate = React7.useCallback(
31781
31809
  async ({ inputs, scope }) => {
31782
31810
  const description = text(inputs, "description");
31783
- const name = text(inputs, "name") || chunkS4G3DNMA_cjs.deriveAnnotationName(description);
31784
- const matching = chunkI5RK4WAE_cjs.matchWorkflowScope(documents, scope);
31811
+ const name = text(inputs, "name") || chunkQZTA2M4U_cjs.deriveAnnotationName(description);
31812
+ const matching = chunkFGZQUH2Y_cjs.matchWorkflowScope(documents, scope);
31785
31813
  if (!name || !description || matching.length === 0) return;
31786
31814
  try {
31787
31815
  const existing = tags.find((t) => t.name.toLowerCase() === name.toLowerCase());
@@ -31824,9 +31852,9 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
31824
31852
  async (launch) => {
31825
31853
  const { workflow, inputs, scope, agentId } = launch;
31826
31854
  if (workflow.run.kind === "operation") {
31827
- if (workflow.id === chunkS4G3DNMA_cjs.ANNOTATE_ID) {
31855
+ if (workflow.id === chunkQZTA2M4U_cjs.ANNOTATE_ID) {
31828
31856
  await annotate(launch);
31829
- chunkS4G3DNMA_cjs.recordWorkflowUse(workflow.id);
31857
+ chunkQZTA2M4U_cjs.recordWorkflowUse(workflow.id);
31830
31858
  return;
31831
31859
  }
31832
31860
  throw new Error(`No host handler for workflow "${workflow.id}"`);
@@ -31836,7 +31864,7 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
31836
31864
  );
31837
31865
  const prompt = chunk76L6LOP3_cjs.composeWorkflowPrompt(workflow, inputs, { documentTitles });
31838
31866
  if (!prompt) return;
31839
- chunkS4G3DNMA_cjs.recordWorkflowUse(workflow.id);
31867
+ chunkQZTA2M4U_cjs.recordWorkflowUse(workflow.id);
31840
31868
  if (agentId) {
31841
31869
  try {
31842
31870
  const created = await createTask({
@@ -31881,7 +31909,7 @@ function useLaunchWorkflow({ landing: surfaceLanding } = {}) {
31881
31909
  const binding = PROMPT_BINDINGS[workflow.id];
31882
31910
  if (!inPlace) openNewConversation();
31883
31911
  if (binding?.attachScope !== false && !chunk76L6LOP3_cjs.isEmptyWorkflowScope(scope)) {
31884
- const ids = chunkI5RK4WAE_cjs.matchWorkflowScope(documents, scope).map((d) => d.external_id);
31912
+ const ids = chunkFGZQUH2Y_cjs.matchWorkflowScope(documents, scope).map((d) => d.external_id);
31885
31913
  if (ids.length > 0) {
31886
31914
  session.setConversationDocuments(
31887
31915
  inPlace ? session.getState().conversationId ?? "new" : "new",
@@ -31922,7 +31950,7 @@ function resolveLaunchInputs(workflow, request) {
31922
31950
  function useWorkflowLaunch() {
31923
31951
  const { skills } = useWorkflowDefinitions();
31924
31952
  const launch = React7.useCallback(
31925
- (workflowId, options2 = {}) => chunkS4G3DNMA_cjs.openWorkflowLaunch({ workflowId, ...options2 }),
31953
+ (workflowId, options2 = {}) => chunkQZTA2M4U_cjs.openWorkflowLaunch({ workflowId, ...options2 }),
31926
31954
  []
31927
31955
  );
31928
31956
  const itemsFor = React7.useCallback(
@@ -31960,30 +31988,30 @@ function ConnectedWorkflowStart({
31960
31988
  const onLaunch = useLaunchWorkflow({ landing });
31961
31989
  const { openUpload } = chunk2QQUGL2V_cjs.useBlocksEnvironment();
31962
31990
  const { data: workspaceTags = [] } = react.useTags();
31963
- const tags = React7.useMemo(() => chunkI5RK4WAE_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
31991
+ const tags = React7.useMemo(() => chunkFGZQUH2Y_cjs.documentScopeLabels(workspaceTags), [workspaceTags]);
31964
31992
  const fieldPlaceholder = React7.useCallback(
31965
31993
  (field, inputs, workflow) => {
31966
- if (workflow.id !== chunkS4G3DNMA_cjs.ANNOTATE_ID || field.name !== "name") return void 0;
31967
- const derived = chunkS4G3DNMA_cjs.deriveAnnotationName(String(inputs.description ?? ""));
31994
+ if (workflow.id !== chunkQZTA2M4U_cjs.ANNOTATE_ID || field.name !== "name") return void 0;
31995
+ const derived = chunkQZTA2M4U_cjs.deriveAnnotationName(String(inputs.description ?? ""));
31968
31996
  return derived ? `Otherwise \u201C${derived}\u201D` : "Taken from the description";
31969
31997
  },
31970
31998
  []
31971
31999
  );
31972
32000
  return /* @__PURE__ */ jsxRuntime.jsx(
31973
- chunkBL74GYSA_cjs.ConnectedWorkflowLauncher,
32001
+ chunkJGCYM3II_cjs.ConnectedWorkflowLauncher,
31974
32002
  {
31975
32003
  ...rest,
31976
32004
  workflows,
31977
32005
  onLaunch,
31978
- renderIcon: chunkS4G3DNMA_cjs.renderWorkflowIcon,
32006
+ renderIcon: chunkQZTA2M4U_cjs.renderWorkflowIcon,
31979
32007
  onAddFiles: openUpload,
31980
32008
  agentLabels: AGENT_LABELS,
31981
32009
  addFilesAction,
31982
32010
  fieldPlaceholder,
31983
- submitLabel: ({ workflow, matchedCount }) => workflow.id === chunkS4G3DNMA_cjs.ANNOTATE_ID && matchedCount !== null ? `Annotate ${matchedCount} document${matchedCount !== 1 ? "s" : ""}` : void 0,
32011
+ submitLabel: ({ workflow, matchedCount }) => workflow.id === chunkQZTA2M4U_cjs.ANNOTATE_ID && matchedCount !== null ? `Annotate ${matchedCount} document${matchedCount !== 1 ? "s" : ""}` : void 0,
31984
32012
  renderNotice: ({ workflow, inputs }) => {
31985
- if (workflow.id !== chunkS4G3DNMA_cjs.ANNOTATE_ID) return null;
31986
- const name = String(inputs.name ?? "").trim() || chunkS4G3DNMA_cjs.deriveAnnotationName(String(inputs.description ?? ""));
32013
+ if (workflow.id !== chunkQZTA2M4U_cjs.ANNOTATE_ID) return null;
32014
+ const name = String(inputs.name ?? "").trim() || chunkQZTA2M4U_cjs.deriveAnnotationName(String(inputs.description ?? ""));
31987
32015
  const existing = name ? tags.find((t) => t.name.toLowerCase() === name.toLowerCase()) : void 0;
31988
32016
  if (!existing) return null;
31989
32017
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -32007,8 +32035,8 @@ function ConnectedWorkflowStart({
32007
32035
  );
32008
32036
  }
32009
32037
  function Inner() {
32010
- const request = chunkS4G3DNMA_cjs.useWorkflowLaunchRequest();
32011
- const close = chunkS4G3DNMA_cjs.closeWorkflowLaunch;
32038
+ const request = chunkQZTA2M4U_cjs.useWorkflowLaunchRequest();
32039
+ const close = chunkQZTA2M4U_cjs.closeWorkflowLaunch;
32012
32040
  const { skills } = useWorkflowDefinitions();
32013
32041
  const run = useLaunchWorkflow({ landing: request?.landing });
32014
32042
  const workflow = skills.find((w) => w.id === request?.workflowId);
@@ -32046,7 +32074,7 @@ function Inner() {
32046
32074
  );
32047
32075
  }
32048
32076
  function WorkflowLaunchHost() {
32049
- return chunkS4G3DNMA_cjs.useWorkflowLaunchRequest() ? /* @__PURE__ */ jsxRuntime.jsx(Inner, {}) : null;
32077
+ return chunkQZTA2M4U_cjs.useWorkflowLaunchRequest() ? /* @__PURE__ */ jsxRuntime.jsx(Inner, {}) : null;
32050
32078
  }
32051
32079
  var START_VISIBLE = 8;
32052
32080
  var START_SEARCH_ABOVE = 8;
@@ -32066,7 +32094,7 @@ function ConnectedConversationStart() {
32066
32094
  const browse = openSkillsBrowser ? [
32067
32095
  {
32068
32096
  id: "browse-all",
32069
- iconNode: chunkS4G3DNMA_cjs.renderWorkflowIcon("library"),
32097
+ iconNode: chunkQZTA2M4U_cjs.renderWorkflowIcon("library"),
32070
32098
  title: "Browse all",
32071
32099
  description: "See every skill, make a copy, add your own",
32072
32100
  onSelect: () => openSkillsBrowser(),
@@ -32179,7 +32207,7 @@ function getToolParams(detail) {
32179
32207
  return params;
32180
32208
  }
32181
32209
  function StepModelIcon({ modelName, tag }) {
32182
- const cfg = tag === "Premium" ? null : chunkS4G3DNMA_cjs.getModelIcon(modelName, tag);
32210
+ const cfg = tag === "Premium" ? null : chunkQZTA2M4U_cjs.getModelIcon(modelName, tag);
32183
32211
  if (tag !== "Premium" && !cfg) return null;
32184
32212
  return /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
32185
32213
  /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: tag === "Premium" ? /* @__PURE__ */ jsxRuntime.jsx(ui.ProviderIcon, { modelName: modelName ?? void 0, size: 11 }) : cfg && /* @__PURE__ */ jsxRuntime.jsx(cfg.icon, { className: cfg.className, style: { width: 11, height: 11 } }) }) }),
@@ -32294,15 +32322,15 @@ var AgentStepsComponent = ({
32294
32322
  const lastStepIndex = mergedSteps[mergedSteps.length - 1].index;
32295
32323
  const renderRow = (step, depth, isLastInList) => {
32296
32324
  const i = posByIndex.get(step.index);
32297
- const presentation = chunkS4G3DNMA_cjs.getAgentStepPresentation(step, docInfo);
32325
+ const presentation = chunkQZTA2M4U_cjs.getAgentStepPresentation(step, docInfo);
32298
32326
  const { tool, Icon } = presentation;
32299
32327
  const { label, summary, isMultiLine, details } = browser.getStepDisplay(step, docInfo);
32300
- const accent = chunkS4G3DNMA_cjs.stepAccent(step, tool);
32328
+ const accent = chunkQZTA2M4U_cjs.stepAccent(step, tool);
32301
32329
  const duration = stepDurations[i];
32302
32330
  const isLastStep = step.index === lastStepIndex;
32303
32331
  const isActive = step.index === currentStepIndex;
32304
32332
  const tier = step.step === "goal" ? step.model_recommendation : null;
32305
- const TierIcon = tier ? chunkS4G3DNMA_cjs.MODEL_TIER_ICON_MAP[tier] : null;
32333
+ const TierIcon = tier ? chunkQZTA2M4U_cjs.MODEL_TIER_ICON_MAP[tier] : null;
32306
32334
  const useLiveDuration = isLastStep && liveTimer != null && step.t != null;
32307
32335
  const durationNode = useLiveDuration ? /* @__PURE__ */ jsxRuntime.jsx(
32308
32336
  MessageLiveSeconds,
@@ -32326,7 +32354,7 @@ var AgentStepsComponent = ({
32326
32354
  })) : null;
32327
32355
  const folded = childrenByParent.get(step.index);
32328
32356
  return /* @__PURE__ */ jsxRuntime.jsxs(
32329
- chunkS4G3DNMA_cjs.StepRow,
32357
+ chunkQZTA2M4U_cjs.StepRow,
32330
32358
  {
32331
32359
  index: step.index,
32332
32360
  number: displayNumber.get(step.index) ?? String(i + 1),
@@ -32340,7 +32368,7 @@ var AgentStepsComponent = ({
32340
32368
  titleTestId: isActive ? "agent-expanded-current-step-description" : void 0,
32341
32369
  badge: TierIcon ? /* @__PURE__ */ jsxRuntime.jsxs(ui.Tooltip, { children: [
32342
32370
  /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex shrink-0 items-center self-center", children: /* @__PURE__ */ jsxRuntime.jsx(TierIcon, { size: 12, className: accent.fg, "aria-hidden": true }) }) }),
32343
- /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "top", children: chunkS4G3DNMA_cjs.MODEL_TIER_LABELS[tier] ?? tier })
32371
+ /* @__PURE__ */ jsxRuntime.jsx(ui.TooltipContent, { side: "top", children: chunkQZTA2M4U_cjs.MODEL_TIER_LABELS[tier] ?? tier })
32344
32372
  ] }) : void 0,
32345
32373
  meta: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
32346
32374
  isDeveloper && /* @__PURE__ */ jsxRuntime.jsx(StepModelIcon, { modelName: step.usage?.model, tag: getModelTag(step.usage?.model) }),
@@ -32355,14 +32383,14 @@ var AgentStepsComponent = ({
32355
32383
  summary && !isActive && (step.narration ? (
32356
32384
  /* Narration is PROSE (headings, bold, lists): render markdown, not raw asterisks.
32357
32385
  Tool summaries stay plain text: one-line headlines where a clamp matters. */
32358
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.StepNarration, { index: step.index, children: /* @__PURE__ */ jsxRuntime.jsx(chunkWPOQLGKJ_cjs.ConnectedMarkdown, { isStreaming: false, children: summary }) })
32359
- ) : /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.StepSummary, { index: step.index, multiLine: isMultiLine, children: summary })),
32360
- details.map((d, di) => /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.StepDetail, { index: step.index, children: d }, di)),
32361
- showOutcome && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.StepOutcome, { index: step.index, failed: outcomeFailed, children: step.outcome }),
32362
- toolParams.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.StepParams, { children: toolParams.map((p) => `${p.key}=${p.value}`).join(" ") }),
32363
- criteriaView && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.GoalCriteria, { criteria: criteriaView }),
32386
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.StepNarration, { index: step.index, children: /* @__PURE__ */ jsxRuntime.jsx(chunkWPOQLGKJ_cjs.ConnectedMarkdown, { isStreaming: false, children: summary }) })
32387
+ ) : /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.StepSummary, { index: step.index, multiLine: isMultiLine, children: summary })),
32388
+ details.map((d, di) => /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.StepDetail, { index: step.index, children: d }, di)),
32389
+ showOutcome && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.StepOutcome, { index: step.index, failed: outcomeFailed, children: step.outcome }),
32390
+ toolParams.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.StepParams, { children: toolParams.map((p) => `${p.key}=${p.value}`).join(" ") }),
32391
+ criteriaView && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.GoalCriteria, { criteria: criteriaView }),
32364
32392
  folded && folded.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
32365
- chunkS4G3DNMA_cjs.SubStepGroup,
32393
+ chunkQZTA2M4U_cjs.SubStepGroup,
32366
32394
  {
32367
32395
  parentIndex: step.index,
32368
32396
  summary: summariseSubSteps(folded),
@@ -32388,7 +32416,7 @@ var AgentStepsComponent = ({
32388
32416
  leftParts.push(`${browser.formatTokens(totalInputTokens)} in`);
32389
32417
  if (totalOutputTokens > 0) leftParts.push(`${browser.formatTokens(totalOutputTokens)} out`);
32390
32418
  summaryNode = /* @__PURE__ */ jsxRuntime.jsx(
32391
- chunkS4G3DNMA_cjs.StepTraceSummary,
32419
+ chunkQZTA2M4U_cjs.StepTraceSummary,
32392
32420
  {
32393
32421
  left: leftParts.join(" \xB7 "),
32394
32422
  isNearBudget: browser.isNearAiUsageBudget(contextUsage),
@@ -32396,7 +32424,7 @@ var AgentStepsComponent = ({
32396
32424
  }
32397
32425
  );
32398
32426
  }
32399
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.StepTrace, { className, summary: summaryNode, children: displayRows.map((row2, i) => {
32427
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.StepTrace, { className, summary: summaryNode, children: displayRows.map((row2, i) => {
32400
32428
  if (row2.lane) {
32401
32429
  return /* @__PURE__ */ jsxRuntime.jsx(
32402
32430
  LaneBinding,
@@ -32433,7 +32461,7 @@ function LaneBinding({
32433
32461
  const running = !closed && isStreaming;
32434
32462
  const latest = inner[inner.length - 1];
32435
32463
  return /* @__PURE__ */ jsxRuntime.jsx(
32436
- chunkS4G3DNMA_cjs.SubAgentLane,
32464
+ chunkQZTA2M4U_cjs.SubAgentLane,
32437
32465
  {
32438
32466
  handle,
32439
32467
  number,
@@ -32556,7 +32584,7 @@ function AgentBarShell({
32556
32584
  }, [isStepsExpanded, steps]);
32557
32585
  const visibleStepCount = React7.useMemo(() => browser.topLevelAgentSteps(steps ?? []).length, [steps]);
32558
32586
  return /* @__PURE__ */ jsxRuntime.jsx(
32559
- chunkS4G3DNMA_cjs.AgentBar,
32587
+ chunkQZTA2M4U_cjs.AgentBar,
32560
32588
  {
32561
32589
  className,
32562
32590
  testId,
@@ -32612,7 +32640,7 @@ function AgentControlBar({
32612
32640
  const isPaused = controlState === "paused" || controlState === "resuming";
32613
32641
  const steps = agentSteps ?? [];
32614
32642
  const currentStep = browser.getCurrentStep(steps);
32615
- const currentPresentation = chunkS4G3DNMA_cjs.getCurrentAgentStepPresentation(steps);
32643
+ const currentPresentation = chunkQZTA2M4U_cjs.getCurrentAgentStepPresentation(steps);
32616
32644
  const CurrentStepIcon = currentPresentation?.Icon;
32617
32645
  const stepLabel2 = currentPresentation?.description ?? "Agent working\u2026";
32618
32646
  const runningLanes = browser.extractSubagentLanes(steps).filter((l) => l.status === "running");
@@ -32629,7 +32657,7 @@ function AgentControlBar({
32629
32657
  }
32630
32658
  );
32631
32659
  const status = /* @__PURE__ */ jsxRuntime.jsx(
32632
- chunkS4G3DNMA_cjs.AgentBarStatus,
32660
+ chunkQZTA2M4U_cjs.AgentBarStatus,
32633
32661
  {
32634
32662
  state: showState ? controlState : void 0,
32635
32663
  stateLabel: STATE_LABEL[controlState],
@@ -32671,7 +32699,7 @@ function AgentControlBar({
32671
32699
  ];
32672
32700
  const controls = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
32673
32701
  onStop && /* @__PURE__ */ jsxRuntime.jsx(
32674
- chunkS4G3DNMA_cjs.AgentBarIconButton,
32702
+ chunkQZTA2M4U_cjs.AgentBarIconButton,
32675
32703
  {
32676
32704
  onClick: onStop,
32677
32705
  title: "Stop",
@@ -32680,22 +32708,22 @@ function AgentControlBar({
32680
32708
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Square, { className: "h-3 w-3", fill: "currentColor" })
32681
32709
  }
32682
32710
  ),
32683
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.AgentBarMenu, { items: menuItems })
32711
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.AgentBarMenu, { items: menuItems })
32684
32712
  ] });
32685
32713
  const displayedQueuedMessages = (transientQueuedMessages ?? []).filter(
32686
32714
  (message) => !message.serverId || !queuedMessages.some((queued) => queued.external_id === message.serverId)
32687
32715
  );
32688
32716
  const queuedNotes = displayedQueuedMessages.filter((message) => message.content);
32689
- const below = probeAnswer || queuedNotes.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.AgentBarNotes, { children: [
32717
+ const below = probeAnswer || queuedNotes.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.AgentBarNotes, { children: [
32690
32718
  queuedNotes.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx(
32691
- chunkS4G3DNMA_cjs.AgentBarQueuedNote,
32719
+ chunkQZTA2M4U_cjs.AgentBarQueuedNote,
32692
32720
  {
32693
32721
  text: message.content ?? "",
32694
32722
  isAcknowledged: message.acknowledged
32695
32723
  },
32696
32724
  index
32697
32725
  )),
32698
- probeAnswer && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.AgentBarProbeAnswer, { answer: probeAnswer.answer })
32726
+ probeAnswer && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.AgentBarProbeAnswer, { answer: probeAnswer.answer })
32699
32727
  ] }) : null;
32700
32728
  return /* @__PURE__ */ jsxRuntime.jsx(
32701
32729
  AgentBarShell,
@@ -32752,7 +32780,7 @@ function RunningSubagentsRoster({
32752
32780
  if (leafId) selectThread(leafId);
32753
32781
  };
32754
32782
  return /* @__PURE__ */ jsxRuntime.jsx(
32755
- chunkS4G3DNMA_cjs.SubagentRoster,
32783
+ chunkQZTA2M4U_cjs.SubagentRoster,
32756
32784
  {
32757
32785
  lanes: rosterLanes,
32758
32786
  className,
@@ -32876,7 +32904,7 @@ function useOpenChunk() {
32876
32904
  const meta = chunk.metadata;
32877
32905
  if (!meta?.doc_ext_id) return;
32878
32906
  const listed = documents?.find((d) => d.external_id === meta.doc_ext_id);
32879
- openDocument(chunkYD3RN2FY_cjs.citedVersionRef(meta.doc_ext_id, meta.doc_version, listed?.current_version), {
32907
+ openDocument(chunkU72QI2W3_cjs.citedVersionRef(meta.doc_ext_id, meta.doc_version, listed?.current_version), {
32880
32908
  page: meta.page_number ?? void 0,
32881
32909
  passageId: meta.chunk_ext_id ?? void 0
32882
32910
  });
@@ -33088,7 +33116,7 @@ function MessageDetailsModal({
33088
33116
  ]
33089
33117
  }
33090
33118
  ),
33091
- messageDetails && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "message-details-content", children: /* @__PURE__ */ jsxRuntime.jsx(chunkRHKFCSFC_cjs.MessageJsonTree, { data: messageDetails, name: "message", defaultExpanded: true }) })
33119
+ messageDetails && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": "message-details-content", children: /* @__PURE__ */ jsxRuntime.jsx(chunkLAGHW4JM_cjs.MessageJsonTree, { data: messageDetails, name: "message", defaultExpanded: true }) })
33092
33120
  ] })
33093
33121
  ]
33094
33122
  }
@@ -33494,7 +33522,7 @@ function WorkflowStepMessage({
33494
33522
  const { conversations } = react.useConversationItems();
33495
33523
  const activity = react.useConversationActivity(conversationId ?? void 0, { live: true });
33496
33524
  const plan = conversations.find((c) => c.external_id === conversationId)?.plan;
33497
- const steps = chunkS4G3DNMA_cjs.fromPlanSteps(plan?.steps ?? []);
33525
+ const steps = chunkQZTA2M4U_cjs.fromPlanSteps(plan?.steps ?? []);
33498
33526
  const found = steps.find((s) => s.id === step);
33499
33527
  const states = chunkEZLZ3MDU_cjs.stepStatesFromActivity(activity.data ?? []);
33500
33528
  const { data: documents = [] } = react.useDocuments();
@@ -33666,7 +33694,7 @@ var MessageComponent = ({
33666
33694
  const isQueuedAnswer = !isUser && message.status === "queued" && !isGenerating;
33667
33695
  const isAwaitingAnswer = (isGenerating || isRunningOnServer) && !isStopped && !!message.pendingUserInput;
33668
33696
  const showWorkingIndicator = (isGenerating || isRunningOnServer) && !isQueuedAnswer && !responseContent.trim() && !linkedArtifact && !isAwaitingAnswer;
33669
- const workingStepLabel = showWorkingIndicator ? chunkS4G3DNMA_cjs.getCurrentAgentStepPresentation(message.agentSteps ?? [])?.description : void 0;
33697
+ const workingStepLabel = showWorkingIndicator ? chunkQZTA2M4U_cjs.getCurrentAgentStepPresentation(message.agentSteps ?? [])?.description : void 0;
33670
33698
  const workingStepStart = showWorkingIndicator ? browser.getCurrentStep(message.agentSteps ?? [])?.t ?? 0 : 0;
33671
33699
  const showEmptyAnswer = !isUser && !isGenerating && !isRunningOnServer && !isFailed && !isStopped && !responseContent.trim() && !linkedArtifact;
33672
33700
  const isEmptyStopped = isStopped && !responseContent.trim();
@@ -33686,7 +33714,7 @@ var MessageComponent = ({
33686
33714
  else session.setDraft(retry.question.content);
33687
33715
  };
33688
33716
  const factData = React7.useMemo(
33689
- () => chunkYD3RN2FY_cjs.buildFactCitations(responseContent, activeCitations, citationData),
33717
+ () => chunkU72QI2W3_cjs.buildFactCitations(responseContent, activeCitations, citationData),
33690
33718
  [responseContent, activeCitations, citationData]
33691
33719
  );
33692
33720
  const factText = factData.text;
@@ -33789,7 +33817,7 @@ var MessageComponent = ({
33789
33817
  notify17("Cannot create fact: no workspace open", "error");
33790
33818
  return;
33791
33819
  }
33792
- const chronology = chunkYD3RN2FY_cjs.chronologyFactBodies(factText, factData.citations);
33820
+ const chronology = chunkU72QI2W3_cjs.chronologyFactBodies(factText, factData.citations);
33793
33821
  try {
33794
33822
  if (chronology) {
33795
33823
  await createFacts.mutateAsync({ facts: chronology });
@@ -33970,7 +33998,7 @@ var MessageComponent = ({
33970
33998
  },
33971
33999
  "data-testid": `message-model-${messageId}`,
33972
34000
  children: /* @__PURE__ */ jsxRuntime.jsx(
33973
- chunkS4G3DNMA_cjs.AssistantEntity,
34001
+ chunkQZTA2M4U_cjs.AssistantEntity,
33974
34002
  {
33975
34003
  name: modelDisplayName,
33976
34004
  modelName,
@@ -34083,7 +34111,7 @@ var MessageComponent = ({
34083
34111
  // Stays the ARBI identity while streaming: the model name arrives
34084
34112
  // with the first step that reports one and would swap the author
34085
34113
  // mid-answer. The model is shown in the footer once settled.
34086
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.AssistantEntity, { size: 16, pillSize: "sm" })
34114
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.AssistantEntity, { size: 16, pillSize: "sm" })
34087
34115
  ),
34088
34116
  timeLabel,
34089
34117
  isSettled: settledForHeader,
@@ -34548,7 +34576,7 @@ function ConnectedMessageList({ messages }) {
34548
34576
  start: virtualItem.start,
34549
34577
  messageId: entry.id,
34550
34578
  setSize: transcript.length,
34551
- children: entry.item.card ?? /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ThreadActivity, { item: entry.item, children: entry.item.onOpenDocument && /* @__PURE__ */ jsxRuntime.jsx(
34579
+ children: entry.item.card ?? /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ThreadActivity, { item: entry.item, children: entry.item.onOpenDocument && /* @__PURE__ */ jsxRuntime.jsx(
34552
34580
  "button",
34553
34581
  {
34554
34582
  className: "mt-1 hover:underline text-primary",
@@ -35443,7 +35471,7 @@ function ConnectedConversation({
35443
35471
  }, [isGenerating]);
35444
35472
  const slashWorkflows = useSlashSkillWorkflows({ landing: "current-chat" });
35445
35473
  const composerSkills = React7.useMemo(
35446
- () => ({ builtin: chunkS4G3DNMA_cjs.BUILTIN_SKILLS, openFor: slashWorkflows.openFor }),
35474
+ () => ({ builtin: chunkQZTA2M4U_cjs.BUILTIN_SKILLS, openFor: slashWorkflows.openFor }),
35447
35475
  [slashWorkflows.openFor]
35448
35476
  );
35449
35477
  const browseSkills = React7.useMemo(
@@ -35518,7 +35546,7 @@ function ConnectedConversation({
35518
35546
  /* @__PURE__ */ jsxRuntime.jsx(chunkKXSXIQSW_cjs.CallConversationEmpty, { callExtId: meetingCallExtId }),
35519
35547
  /* @__PURE__ */ jsxRuntime.jsx(chunkKXSXIQSW_cjs.ProvisionalSpeakers, { ids: provisionalSpeakers })
35520
35548
  ] })
35521
- ) : currentTask && currentTask.status != null ? /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.TaskEmptyState, { task: currentTask }) : pendingFirstTurn && isGenerating ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedMessageArea, { ref: containerRef, messages: pendingFirstTurn }) : /* @__PURE__ */ jsxRuntime.jsx(
35549
+ ) : currentTask && currentTask.status != null ? /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.TaskEmptyState, { task: currentTask }) : pendingFirstTurn && isGenerating ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedMessageArea, { ref: containerRef, messages: pendingFirstTurn }) : /* @__PURE__ */ jsxRuntime.jsx(
35522
35550
  ConnectedConversationEmpty,
35523
35551
  {
35524
35552
  hasDocuments: allWorkspaceDocuments.length > 0,
@@ -37378,7 +37406,7 @@ function SsoResendVerificationButton({
37378
37406
  onClick: async () => handleResendEmailVerification(),
37379
37407
  disabled: loading || disabled,
37380
37408
  "aria-label": "Resend verification email",
37381
- children: loading ? /* @__PURE__ */ jsxRuntime.jsx(chunkH3XAHVDT_cjs.LoadingIndicator, {}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
37409
+ children: loading ? /* @__PURE__ */ jsxRuntime.jsx(chunk6UZ6YTML_cjs.LoadingIndicator, {}) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
37382
37410
  "Didn't get a verification email? ",
37383
37411
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: "Resend" })
37384
37412
  ] })
@@ -38272,27 +38300,27 @@ function ConnectedOAuthConsentPage({
38272
38300
  oauthErrorRedirect(params.redirectUri, params.state, "access_denied");
38273
38301
  }
38274
38302
  if (error && !params) {
38275
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentMessage, { tone: "error", title: "Invalid Request", children: error }) });
38303
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentMessage, { tone: "error", title: "Invalid Request", children: error }) });
38276
38304
  }
38277
38305
  if (!params) {
38278
38306
  return null;
38279
38307
  }
38280
38308
  if (clientInfo?.isLocalAgentFlow) {
38281
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentMessage, { tone: "warning", title: "Close this tab", children: "This tab opened alongside the correct authorization page. Please close this tab and complete the connection in the other tab that opened at the same time." }) });
38309
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentMessage, { tone: "warning", title: "Close this tab", children: "This tab opened alongside the correct authorization page. Please close this tab and complete the connection in the other tab that opened at the same time." }) });
38282
38310
  }
38283
38311
  if (!isAuthenticated2) {
38284
38312
  return null;
38285
38313
  }
38286
38314
  if (callbackUrl) {
38287
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentCard, { size: "md", children: [
38288
- /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentHeader, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ClipboardList, {}), title: "Almost there", children: [
38315
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentCard, { size: "md", children: [
38316
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentHeader, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ClipboardList, {}), title: "Almost there", children: [
38289
38317
  "A new tab has opened to complete the connection. If it succeeded, you can close this page. If you see a connection error there, paste the URL below into Claude Cowork \u2014",
38290
38318
  " ",
38291
38319
  copied ? "it's already copied to your clipboard." : "copy it first."
38292
38320
  ] }),
38293
- /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentSection, { title: "Callback URL", children: [
38294
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.CopyableUrl, { url: callbackUrl, copied, onCopy: handleCopy }),
38295
- /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentText, { variant: "hint", children: [
38321
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentSection, { title: "Callback URL", children: [
38322
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.CopyableUrl, { url: callbackUrl, copied, onCopy: handleCopy }),
38323
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentText, { variant: "hint", children: [
38296
38324
  "In Claude Code, paste the URL at the prompt that says",
38297
38325
  " ",
38298
38326
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-foreground", children: '"paste the full redirect URL here"' }),
@@ -38301,17 +38329,17 @@ function ConnectedOAuthConsentPage({
38301
38329
  ] })
38302
38330
  ] }) });
38303
38331
  }
38304
- return /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentCard, { children: [
38305
- /* @__PURE__ */ jsxRuntime.jsxs(chunkS4G3DNMA_cjs.ConsentHeader, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link2, {}), title: `Connect to ${appName}`, children: [
38306
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentStrong, { children: clientInfo?.name ?? params.clientId }),
38332
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentPage, { children: /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentCard, { children: [
38333
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkQZTA2M4U_cjs.ConsentHeader, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link2, {}), title: `Connect to ${appName}`, children: [
38334
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentStrong, { children: clientInfo?.name ?? params.clientId }),
38307
38335
  " is requesting access to your ",
38308
38336
  appName,
38309
38337
  " workspace."
38310
38338
  ] }),
38311
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentSection, { title: "This will allow", children: /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentPermissionList, { items: permissions }) }),
38312
- error && /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentNotice, { tone: "error", children: error }),
38313
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentActions, { isLoading: loading, onDeny: handleDeny, onAllow: handleAllow }),
38314
- /* @__PURE__ */ jsxRuntime.jsx(chunkS4G3DNMA_cjs.ConsentFootnote, { children: footnote })
38339
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentSection, { title: "This will allow", children: /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentPermissionList, { items: permissions }) }),
38340
+ error && /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentNotice, { tone: "error", children: error }),
38341
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentActions, { isLoading: loading, onDeny: handleDeny, onAllow: handleAllow }),
38342
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQZTA2M4U_cjs.ConsentFootnote, { children: footnote })
38315
38343
  ] }) });
38316
38344
  }
38317
38345
  function ConnectedSharedFilesPage({
@@ -38377,7 +38405,7 @@ function ConnectedAccountAccessBadge() {
38377
38405
  "Temporary access to shared workspaces. Ask an owner to renew access after it expires."
38378
38406
  ] : user.user_type === "manager" ? [
38379
38407
  "Account manager",
38380
- "You can manage project billing and usage. Workspace access is managed by workspace owners."
38408
+ `You can manage ${ui.entityNoun("PROJECT")} billing and usage. Workspace access is managed by workspace owners.`
38381
38409
  ] : user.user_type === "blocked" ? [
38382
38410
  "Access restricted",
38383
38411
  "Contact your deployment administrator about your account access."
@@ -38411,55 +38439,55 @@ function ConnectedAccountAccessBadge() {
38411
38439
 
38412
38440
  Object.defineProperty(exports, "CAP_REACHED_MESSAGE", {
38413
38441
  enumerable: true,
38414
- get: function () { return chunkLYF47OXX_cjs.CAP_REACHED_MESSAGE; }
38442
+ get: function () { return chunkT67EFI43_cjs.CAP_REACHED_MESSAGE; }
38415
38443
  });
38416
38444
  Object.defineProperty(exports, "ZERO_BUDGET_MESSAGE", {
38417
38445
  enumerable: true,
38418
- get: function () { return chunkLYF47OXX_cjs.ZERO_BUDGET_MESSAGE; }
38446
+ get: function () { return chunkT67EFI43_cjs.ZERO_BUDGET_MESSAGE; }
38419
38447
  });
38420
38448
  Object.defineProperty(exports, "aiUsageResetTimestamp", {
38421
38449
  enumerable: true,
38422
- get: function () { return chunkLYF47OXX_cjs.aiUsageResetTimestamp; }
38450
+ get: function () { return chunkT67EFI43_cjs.aiUsageResetTimestamp; }
38423
38451
  });
38424
38452
  Object.defineProperty(exports, "formatMoney", {
38425
38453
  enumerable: true,
38426
- get: function () { return chunkLYF47OXX_cjs.formatMoney; }
38454
+ get: function () { return chunkT67EFI43_cjs.formatMoney; }
38427
38455
  });
38428
38456
  Object.defineProperty(exports, "formatResetDate", {
38429
38457
  enumerable: true,
38430
- get: function () { return chunkLYF47OXX_cjs.formatResetDate; }
38458
+ get: function () { return chunkT67EFI43_cjs.formatResetDate; }
38431
38459
  });
38432
38460
  Object.defineProperty(exports, "getQuotaItems", {
38433
38461
  enumerable: true,
38434
- get: function () { return chunkLYF47OXX_cjs.getQuotaItems; }
38462
+ get: function () { return chunkT67EFI43_cjs.getQuotaItems; }
38435
38463
  });
38436
38464
  Object.defineProperty(exports, "isAddonBudgetZero", {
38437
38465
  enumerable: true,
38438
- get: function () { return chunkLYF47OXX_cjs.isAddonBudgetZero; }
38466
+ get: function () { return chunkT67EFI43_cjs.isAddonBudgetZero; }
38439
38467
  });
38440
38468
  Object.defineProperty(exports, "isProProject", {
38441
38469
  enumerable: true,
38442
- get: function () { return chunkLYF47OXX_cjs.isProProject; }
38470
+ get: function () { return chunkT67EFI43_cjs.isProProject; }
38443
38471
  });
38444
38472
  Object.defineProperty(exports, "planBadgeView", {
38445
38473
  enumerable: true,
38446
- get: function () { return chunkLYF47OXX_cjs.planBadgeView; }
38474
+ get: function () { return chunkT67EFI43_cjs.planBadgeView; }
38447
38475
  });
38448
38476
  Object.defineProperty(exports, "planName", {
38449
38477
  enumerable: true,
38450
- get: function () { return chunkLYF47OXX_cjs.planName; }
38478
+ get: function () { return chunkT67EFI43_cjs.planName; }
38451
38479
  });
38452
38480
  Object.defineProperty(exports, "projectGroupBilling", {
38453
38481
  enumerable: true,
38454
- get: function () { return chunkLYF47OXX_cjs.projectGroupBilling; }
38482
+ get: function () { return chunkT67EFI43_cjs.projectGroupBilling; }
38455
38483
  });
38456
38484
  Object.defineProperty(exports, "useBillingSupport", {
38457
38485
  enumerable: true,
38458
- get: function () { return chunkLYF47OXX_cjs.useBillingSupport; }
38486
+ get: function () { return chunkT67EFI43_cjs.useBillingSupport; }
38459
38487
  });
38460
38488
  Object.defineProperty(exports, "useRewardBalance", {
38461
38489
  enumerable: true,
38462
- get: function () { return chunkLYF47OXX_cjs.useRewardBalance; }
38490
+ get: function () { return chunkT67EFI43_cjs.useRewardBalance; }
38463
38491
  });
38464
38492
  Object.defineProperty(exports, "ConnectedAssistantDock", {
38465
38493
  enumerable: true,
@@ -38495,43 +38523,43 @@ Object.defineProperty(exports, "useWorkspaceDocs", {
38495
38523
  });
38496
38524
  Object.defineProperty(exports, "ConnectedWorkflowDocumentsField", {
38497
38525
  enumerable: true,
38498
- get: function () { return chunkBL74GYSA_cjs.ConnectedWorkflowDocumentsField; }
38526
+ get: function () { return chunkJGCYM3II_cjs.ConnectedWorkflowDocumentsField; }
38499
38527
  });
38500
38528
  Object.defineProperty(exports, "ConnectedWorkflowLauncher", {
38501
38529
  enumerable: true,
38502
- get: function () { return chunkBL74GYSA_cjs.ConnectedWorkflowLauncher; }
38530
+ get: function () { return chunkJGCYM3II_cjs.ConnectedWorkflowLauncher; }
38503
38531
  });
38504
38532
  Object.defineProperty(exports, "ConnectedWorkflowsTable", {
38505
38533
  enumerable: true,
38506
- get: function () { return chunkBL74GYSA_cjs.ConnectedWorkflowsTable; }
38534
+ get: function () { return chunkJGCYM3II_cjs.ConnectedWorkflowsTable; }
38507
38535
  });
38508
38536
  Object.defineProperty(exports, "DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS", {
38509
38537
  enumerable: true,
38510
- get: function () { return chunkBL74GYSA_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
38538
+ get: function () { return chunkJGCYM3II_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
38511
38539
  });
38512
38540
  Object.defineProperty(exports, "toWorkflowFieldDocument", {
38513
38541
  enumerable: true,
38514
- get: function () { return chunkBL74GYSA_cjs.toWorkflowFieldDocument; }
38542
+ get: function () { return chunkJGCYM3II_cjs.toWorkflowFieldDocument; }
38515
38543
  });
38516
38544
  Object.defineProperty(exports, "useConnectedAgentOptions", {
38517
38545
  enumerable: true,
38518
- get: function () { return chunkBL74GYSA_cjs.useConnectedAgentOptions; }
38546
+ get: function () { return chunkJGCYM3II_cjs.useConnectedAgentOptions; }
38519
38547
  });
38520
38548
  Object.defineProperty(exports, "useConnectedWorkflowScopeSource", {
38521
38549
  enumerable: true,
38522
- get: function () { return chunkBL74GYSA_cjs.useConnectedWorkflowScopeSource; }
38550
+ get: function () { return chunkJGCYM3II_cjs.useConnectedWorkflowScopeSource; }
38523
38551
  });
38524
38552
  Object.defineProperty(exports, "useConnectedWorkspaceRole", {
38525
38553
  enumerable: true,
38526
- get: function () { return chunkBL74GYSA_cjs.useConnectedWorkspaceRole; }
38554
+ get: function () { return chunkJGCYM3II_cjs.useConnectedWorkspaceRole; }
38527
38555
  });
38528
38556
  Object.defineProperty(exports, "useDocxCommentTarget", {
38529
38557
  enumerable: true,
38530
- get: function () { return chunkBL74GYSA_cjs.useDocxCommentTarget; }
38558
+ get: function () { return chunkJGCYM3II_cjs.useDocxCommentTarget; }
38531
38559
  });
38532
38560
  Object.defineProperty(exports, "useNativeDocxSupport", {
38533
38561
  enumerable: true,
38534
- get: function () { return chunkBL74GYSA_cjs.useNativeDocxSupport; }
38562
+ get: function () { return chunkJGCYM3II_cjs.useNativeDocxSupport; }
38535
38563
  });
38536
38564
  Object.defineProperty(exports, "ConnectedDocumentToolsProvider", {
38537
38565
  enumerable: true,