@arbidocs/blocks 0.4.166 → 0.4.167

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 (77) hide show
  1. package/dist/{ConnectedNativeDocxComparison-MSX6OCMN.js → ConnectedNativeDocxComparison-B4OBRJ3O.js} +6 -6
  2. package/dist/{ConnectedNativeDocxComparison-MSX6OCMN.js.map → ConnectedNativeDocxComparison-B4OBRJ3O.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-S4XHG3XN.cjs → ConnectedNativeDocxComparison-HNLBNUI2.cjs} +7 -7
  4. package/dist/{ConnectedNativeDocxComparison-S4XHG3XN.cjs.map → ConnectedNativeDocxComparison-HNLBNUI2.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-4G7LNREO.cjs → ConnectedNativeDocxEditor-4GVGXSDX.cjs} +7 -7
  6. package/dist/{ConnectedNativeDocxEditor-4G7LNREO.cjs.map → ConnectedNativeDocxEditor-4GVGXSDX.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-CTWKXXQQ.js → ConnectedNativeDocxEditor-HC2QTTML.js} +5 -5
  8. package/dist/{ConnectedNativeDocxEditor-CTWKXXQQ.js.map → ConnectedNativeDocxEditor-HC2QTTML.js.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-HIILV2RB.js → ConnectedStreamedWordArtifact-CIBNQO54.js} +6 -6
  10. package/dist/{ConnectedStreamedWordArtifact-HIILV2RB.js.map → ConnectedStreamedWordArtifact-CIBNQO54.js.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-DQGOIULU.cjs → ConnectedStreamedWordArtifact-YEC4HS5C.cjs} +7 -7
  12. package/dist/ConnectedStreamedWordArtifact-YEC4HS5C.cjs.map +1 -0
  13. package/dist/{WorkspaceTableView-CJ3QPV2X.js → WorkspaceTableView-7FYS7LE7.js} +6 -6
  14. package/dist/{WorkspaceTableView-CJ3QPV2X.js.map → WorkspaceTableView-7FYS7LE7.js.map} +1 -1
  15. package/dist/{WorkspaceTableView-VEW6SMZ6.cjs → WorkspaceTableView-GZHE6S24.cjs} +8 -8
  16. package/dist/{WorkspaceTableView-VEW6SMZ6.cjs.map → WorkspaceTableView-GZHE6S24.cjs.map} +1 -1
  17. package/dist/agents/index.cjs +261 -261
  18. package/dist/agents/index.js +4 -4
  19. package/dist/{chunk-DIPB7UR2.js → chunk-3ZMCQJUK.js} +5 -5
  20. package/dist/{chunk-DIPB7UR2.js.map → chunk-3ZMCQJUK.js.map} +1 -1
  21. package/dist/{chunk-MXD2R4HR.js → chunk-4AZ4KKCI.js} +3 -3
  22. package/dist/{chunk-MXD2R4HR.js.map → chunk-4AZ4KKCI.js.map} +1 -1
  23. package/dist/{chunk-4MFSGPEH.js → chunk-4CF65G36.js} +3 -3
  24. package/dist/{chunk-4MFSGPEH.js.map → chunk-4CF65G36.js.map} +1 -1
  25. package/dist/{chunk-SG3OH7ZM.cjs → chunk-FQPGVDYC.cjs} +4 -4
  26. package/dist/{chunk-SG3OH7ZM.cjs.map → chunk-FQPGVDYC.cjs.map} +1 -1
  27. package/dist/{chunk-ZV4DNZ5N.cjs → chunk-HPI4M5YZ.cjs} +3 -3
  28. package/dist/{chunk-ZV4DNZ5N.cjs.map → chunk-HPI4M5YZ.cjs.map} +1 -1
  29. package/dist/{chunk-RMJ6DH7F.js → chunk-I65X6CGT.js} +3 -3
  30. package/dist/{chunk-RMJ6DH7F.js.map → chunk-I65X6CGT.js.map} +1 -1
  31. package/dist/{chunk-APNFKXQ5.cjs → chunk-IGKX5GIL.cjs} +52 -52
  32. package/dist/{chunk-APNFKXQ5.cjs.map → chunk-IGKX5GIL.cjs.map} +1 -1
  33. package/dist/{chunk-PTSTVYQD.cjs → chunk-LSZFVBKG.cjs} +8 -8
  34. package/dist/{chunk-PTSTVYQD.cjs.map → chunk-LSZFVBKG.cjs.map} +1 -1
  35. package/dist/{chunk-KBOA5UFJ.js → chunk-LTMFZQ3A.js} +4 -4
  36. package/dist/{chunk-KBOA5UFJ.js.map → chunk-LTMFZQ3A.js.map} +1 -1
  37. package/dist/{chunk-6E5XJC6L.js → chunk-NCT5EAKD.js} +3 -3
  38. package/dist/{chunk-6E5XJC6L.js.map → chunk-NCT5EAKD.js.map} +1 -1
  39. package/dist/{chunk-ZPE7334Z.js → chunk-NGYCJDR6.js} +3 -3
  40. package/dist/{chunk-ZPE7334Z.js.map → chunk-NGYCJDR6.js.map} +1 -1
  41. package/dist/{chunk-TWVXDRLH.js → chunk-O5V6XKSS.js} +3 -3
  42. package/dist/{chunk-TWVXDRLH.js.map → chunk-O5V6XKSS.js.map} +1 -1
  43. package/dist/{chunk-KS5VQKI2.js → chunk-OCLUNWJ4.js} +3 -3
  44. package/dist/{chunk-KS5VQKI2.js.map → chunk-OCLUNWJ4.js.map} +1 -1
  45. package/dist/{chunk-SYTZ3UAU.cjs → chunk-P7MWWCB3.cjs} +5 -5
  46. package/dist/{chunk-SYTZ3UAU.cjs.map → chunk-P7MWWCB3.cjs.map} +1 -1
  47. package/dist/{chunk-AODZXDEE.cjs → chunk-QMEG2BPQ.cjs} +7 -7
  48. package/dist/{chunk-AODZXDEE.cjs.map → chunk-QMEG2BPQ.cjs.map} +1 -1
  49. package/dist/{chunk-YNSSIULM.cjs → chunk-VBNPS5AK.cjs} +5 -5
  50. package/dist/{chunk-YNSSIULM.cjs.map → chunk-VBNPS5AK.cjs.map} +1 -1
  51. package/dist/{chunk-ECQR3VPP.cjs → chunk-VNUQTUYT.cjs} +4 -4
  52. package/dist/{chunk-ECQR3VPP.cjs.map → chunk-VNUQTUYT.cjs.map} +1 -1
  53. package/dist/{chunk-XGFNZTPO.cjs → chunk-WYOPRJID.cjs} +3 -3
  54. package/dist/{chunk-XGFNZTPO.cjs.map → chunk-WYOPRJID.cjs.map} +1 -1
  55. package/dist/connect/docx.cjs +9 -9
  56. package/dist/connect/docx.js +5 -5
  57. package/dist/connect/index.cjs +412 -412
  58. package/dist/connect/index.js +14 -14
  59. package/dist/connect/viewer.cjs +6 -6
  60. package/dist/connect/viewer.js +6 -6
  61. package/dist/document-tools/viewer/index.cjs +14 -7
  62. package/dist/document-tools/viewer/index.cjs.map +1 -1
  63. package/dist/document-tools/viewer/index.js +15 -8
  64. package/dist/document-tools/viewer/index.js.map +1 -1
  65. package/dist/facts/index.cjs +1 -1
  66. package/dist/facts/index.js +1 -1
  67. package/dist/index.cjs +603 -603
  68. package/dist/index.js +10 -10
  69. package/dist/settings/index.cjs +155 -155
  70. package/dist/settings/index.js +2 -2
  71. package/dist/shell/index.cjs +9 -9
  72. package/dist/shell/index.js +1 -1
  73. package/dist/workflow-canvas/index.cjs +17 -17
  74. package/dist/workflow-canvas/index.js +4 -4
  75. package/node_modules/@arbidocs/coedit/package.json +1 -1
  76. package/package.json +5 -5
  77. package/dist/ConnectedStreamedWordArtifact-DQGOIULU.cjs.map +0 -1
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkYNSSIULM_cjs = require('../chunk-YNSSIULM.cjs');
4
+ var chunkVBNPS5AK_cjs = require('../chunk-VBNPS5AK.cjs');
5
5
  var chunk3CUORKDL_cjs = require('../chunk-3CUORKDL.cjs');
6
6
  var chunkJUUOJP7I_cjs = require('../chunk-JUUOJP7I.cjs');
7
7
  var chunkOHCYJFV2_cjs = require('../chunk-OHCYJFV2.cjs');
8
8
  var chunkOU3RGQFX_cjs = require('../chunk-OU3RGQFX.cjs');
9
9
  require('../chunk-REH7PX3N.cjs');
10
- var chunkXGFNZTPO_cjs = require('../chunk-XGFNZTPO.cjs');
10
+ var chunkWYOPRJID_cjs = require('../chunk-WYOPRJID.cjs');
11
11
  var chunkAYJZRBHG_cjs = require('../chunk-AYJZRBHG.cjs');
12
- var chunkPTSTVYQD_cjs = require('../chunk-PTSTVYQD.cjs');
12
+ var chunkLSZFVBKG_cjs = require('../chunk-LSZFVBKG.cjs');
13
13
  var chunkH5542IOD_cjs = require('../chunk-H5542IOD.cjs');
14
14
  var chunkNUAC5GTQ_cjs = require('../chunk-NUAC5GTQ.cjs');
15
15
  require('../chunk-223D4727.cjs');
@@ -23,27 +23,27 @@ require('../chunk-JPWPR6QU.cjs');
23
23
  var chunkLMQOTLG4_cjs = require('../chunk-LMQOTLG4.cjs');
24
24
  var chunk2WLXQGWC_cjs = require('../chunk-2WLXQGWC.cjs');
25
25
  var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
26
- var chunkSYTZ3UAU_cjs = require('../chunk-SYTZ3UAU.cjs');
26
+ var chunkP7MWWCB3_cjs = require('../chunk-P7MWWCB3.cjs');
27
27
  var chunkXAJIKT6Y_cjs = require('../chunk-XAJIKT6Y.cjs');
28
28
  var chunkGOWXP5KT_cjs = require('../chunk-GOWXP5KT.cjs');
29
29
  var chunkQZTNTP75_cjs = require('../chunk-QZTNTP75.cjs');
30
30
  require('../chunk-PCB2BPN3.cjs');
31
31
  require('../chunk-NWNVWO6L.cjs');
32
- var chunkU7OUZHBH_cjs = require('../chunk-U7OUZHBH.cjs');
33
- require('../chunk-7G2LJMUG.cjs');
34
32
  var chunk5Y6V7F6W_cjs = require('../chunk-5Y6V7F6W.cjs');
35
33
  var chunkV46W7YLI_cjs = require('../chunk-V46W7YLI.cjs');
36
- require('../chunk-VLCY46K6.cjs');
37
34
  var chunkLJJJ6CYH_cjs = require('../chunk-LJJJ6CYH.cjs');
38
35
  var chunkWP4VIOOA_cjs = require('../chunk-WP4VIOOA.cjs');
36
+ var chunkU7OUZHBH_cjs = require('../chunk-U7OUZHBH.cjs');
37
+ require('../chunk-7G2LJMUG.cjs');
38
+ require('../chunk-VLCY46K6.cjs');
39
39
  require('../chunk-D54JXTPG.cjs');
40
40
  var chunkQT3A4PFC_cjs = require('../chunk-QT3A4PFC.cjs');
41
41
  var chunkKMZO5W6D_cjs = require('../chunk-KMZO5W6D.cjs');
42
42
  var chunkVPPX5XUF_cjs = require('../chunk-VPPX5XUF.cjs');
43
43
  var chunkRC25WMVB_cjs = require('../chunk-RC25WMVB.cjs');
44
- var chunkAODZXDEE_cjs = require('../chunk-AODZXDEE.cjs');
44
+ var chunkQMEG2BPQ_cjs = require('../chunk-QMEG2BPQ.cjs');
45
45
  var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
46
- var chunkZV4DNZ5N_cjs = require('../chunk-ZV4DNZ5N.cjs');
46
+ var chunkHPI4M5YZ_cjs = require('../chunk-HPI4M5YZ.cjs');
47
47
  var chunkTNESYDBR_cjs = require('../chunk-TNESYDBR.cjs');
48
48
  var chunk2VHYOTWW_cjs = require('../chunk-2VHYOTWW.cjs');
49
49
  require('../chunk-SIB6C7P7.cjs');
@@ -58,8 +58,6 @@ var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
58
58
  require('../chunk-ADOKTJHV.cjs');
59
59
  var chunkLLYZGH3L_cjs = require('../chunk-LLYZGH3L.cjs');
60
60
  var chunkBIXHB4LV_cjs = require('../chunk-BIXHB4LV.cjs');
61
- var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
62
- var chunkMEMWZ72Y_cjs = require('../chunk-MEMWZ72Y.cjs');
63
61
  var chunk5A2QQAF5_cjs = require('../chunk-5A2QQAF5.cjs');
64
62
  require('../chunk-B6MVQCXW.cjs');
65
63
  var chunkJKB7WT7L_cjs = require('../chunk-JKB7WT7L.cjs');
@@ -68,6 +66,8 @@ require('../chunk-76L6LOP3.cjs');
68
66
  require('../chunk-32HW2Q33.cjs');
69
67
  require('../chunk-7UTB4PHM.cjs');
70
68
  var chunkFX3K6LNZ_cjs = require('../chunk-FX3K6LNZ.cjs');
69
+ var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
70
+ var chunkMEMWZ72Y_cjs = require('../chunk-MEMWZ72Y.cjs');
71
71
  require('../chunk-PPCATBOY.cjs');
72
72
  require('../chunk-MHVNT4J3.cjs');
73
73
  var chunkZMYW5M75_cjs = require('../chunk-ZMYW5M75.cjs');
@@ -169,7 +169,7 @@ function ConnectedWorkspaceActivity({
169
169
  [feed.data]
170
170
  );
171
171
  return /* @__PURE__ */ jsxRuntime.jsx(
172
- chunkSYTZ3UAU_cjs.WorkspaceActivityList,
172
+ chunkP7MWWCB3_cjs.WorkspaceActivityList,
173
173
  {
174
174
  ...listProps,
175
175
  items,
@@ -597,7 +597,7 @@ function NotificationCenter({
597
597
  }
598
598
  ];
599
599
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full bg-background", "data-testid": "notifications-page", children: [
600
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
600
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
601
601
  chunkMEMWZ72Y_cjs.TabHeader,
602
602
  {
603
603
  tabs,
@@ -847,7 +847,7 @@ function ConnectedWorkspaceNotificationMenu({
847
847
  }, [error, notify14]);
848
848
  if (!workspaceId) return null;
849
849
  return /* @__PURE__ */ jsxRuntime.jsx(
850
- chunkSYTZ3UAU_cjs.WorkspaceNotificationMenu,
850
+ chunkP7MWWCB3_cjs.WorkspaceNotificationMenu,
851
851
  {
852
852
  ...menuProps,
853
853
  level,
@@ -866,7 +866,7 @@ function ConnectedThreadFollow({
866
866
  enabled: live
867
867
  });
868
868
  if (!conversationId) return null;
869
- const Control = as === "menu-item" ? chunkSYTZ3UAU_cjs.ThreadFollowMenuItem : chunkSYTZ3UAU_cjs.ThreadFollowButton;
869
+ const Control = as === "menu-item" ? chunkP7MWWCB3_cjs.ThreadFollowMenuItem : chunkP7MWWCB3_cjs.ThreadFollowButton;
870
870
  return /* @__PURE__ */ jsxRuntime.jsx(
871
871
  Control,
872
872
  {
@@ -939,7 +939,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
939
939
  onChange: (e) => {
940
940
  const file = e.target.files?.[0];
941
941
  e.target.value = "";
942
- if (file) void add(() => chunkAODZXDEE_cjs.importSkillFile(file));
942
+ if (file) void add(() => chunkQMEG2BPQ_cjs.importSkillFile(file));
943
943
  }
944
944
  }
945
945
  ),
@@ -964,7 +964,7 @@ function ConnectedSkillUpload({ onDone, labels, className }) {
964
964
  className: "space-y-2",
965
965
  onSubmit: (e) => {
966
966
  e.preventDefault();
967
- if (url.trim()) void add(() => chunkAODZXDEE_cjs.importSkillFromUrl(url));
967
+ if (url.trim()) void add(() => chunkQMEG2BPQ_cjs.importSkillFromUrl(url));
968
968
  },
969
969
  children: [
970
970
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "skills-add-url", children: l.fromLink }),
@@ -1027,9 +1027,9 @@ function ConnectedSkillsLibrary({
1027
1027
  const [type, setType] = react.useState("all");
1028
1028
  const [view, setView] = react.useState("gallery");
1029
1029
  const [isBusy, setIsBusy] = react.useState(false);
1030
- const all = react.useMemo(() => chunkAODZXDEE_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
1030
+ const all = react.useMemo(() => chunkQMEG2BPQ_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
1031
1031
  const shown = react.useMemo(
1032
- () => chunkAODZXDEE_cjs.filterLibrarySkills(all, { query, source, type }),
1032
+ () => chunkQMEG2BPQ_cjs.filterLibrarySkills(all, { query, source, type }),
1033
1033
  [all, query, source, type]
1034
1034
  );
1035
1035
  const current = all.find((s) => s.slug === selected) ?? null;
@@ -1040,21 +1040,21 @@ function ConnectedSkillsLibrary({
1040
1040
  const count2 = (s) => all.filter((x) => x.source === s).length;
1041
1041
  const sourceOptions = [
1042
1042
  { id: "all", label: "All", count: all.length },
1043
- { id: "builtin", label: chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.builtin, count: count2("builtin") },
1044
- { id: "mine", label: chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.mine, count: count2("mine") },
1045
- { id: "shared", label: chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.shared, count: count2("shared") }
1043
+ { id: "builtin", label: chunkQMEG2BPQ_cjs.SKILL_SOURCE_LABELS.builtin, count: count2("builtin") },
1044
+ { id: "mine", label: chunkQMEG2BPQ_cjs.SKILL_SOURCE_LABELS.mine, count: count2("mine") },
1045
+ { id: "shared", label: chunkQMEG2BPQ_cjs.SKILL_SOURCE_LABELS.shared, count: count2("shared") }
1046
1046
  ];
1047
1047
  const types = [...new Set(all.map((s) => s.type))];
1048
1048
  const typeOptions = [
1049
1049
  { id: "all", label: "Any kind" },
1050
- ...types.map((t) => ({ id: t, label: chunkAODZXDEE_cjs.SKILL_TYPE_LABELS[t] ?? t }))
1050
+ ...types.map((t) => ({ id: t, label: chunkQMEG2BPQ_cjs.SKILL_TYPE_LABELS[t] ?? t }))
1051
1051
  ];
1052
1052
  const pick = (slug) => {
1053
1053
  setSelected(slug);
1054
1054
  setMode("detail");
1055
1055
  };
1056
1056
  const markdownOf = async (skill) => {
1057
- if (!skill.docExtId) return chunkAODZXDEE_cjs.workflowToSkillMarkdown(skill.workflow);
1057
+ if (!skill.docExtId) return chunkQMEG2BPQ_cjs.workflowToSkillMarkdown(skill.workflow);
1058
1058
  const response = await arbi.documents.download(skill.docExtId);
1059
1059
  if (!response.ok) throw new Error(`Could not read the skill (${response.status})`);
1060
1060
  return response.text();
@@ -1118,7 +1118,7 @@ function ConnectedSkillsLibrary({
1118
1118
  try {
1119
1119
  documentTools.downloadBlob(
1120
1120
  new Blob([await markdownOf(skill)], { type: "text/markdown" }),
1121
- chunkAODZXDEE_cjs.SKILL_MAIN_FILENAME
1121
+ chunkQMEG2BPQ_cjs.SKILL_MAIN_FILENAME
1122
1122
  );
1123
1123
  } catch (error) {
1124
1124
  notify14(errorText(error, "Could not export the skill"), "error");
@@ -1159,10 +1159,10 @@ function ConnectedSkillsLibrary({
1159
1159
  }
1160
1160
  )
1161
1161
  ] }),
1162
- /* @__PURE__ */ jsxRuntime.jsx(chunkAODZXDEE_cjs.SkillViewToggle, { value: view, onChange: setView })
1162
+ /* @__PURE__ */ jsxRuntime.jsx(chunkQMEG2BPQ_cjs.SkillViewToggle, { value: view, onChange: setView })
1163
1163
  ] }),
1164
1164
  /* @__PURE__ */ jsxRuntime.jsx(
1165
- chunkAODZXDEE_cjs.SkillFilterChips,
1165
+ chunkQMEG2BPQ_cjs.SkillFilterChips,
1166
1166
  {
1167
1167
  label: "Show",
1168
1168
  value: source,
@@ -1171,7 +1171,7 @@ function ConnectedSkillsLibrary({
1171
1171
  }
1172
1172
  ),
1173
1173
  types.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
1174
- chunkAODZXDEE_cjs.SkillFilterChips,
1174
+ chunkQMEG2BPQ_cjs.SkillFilterChips,
1175
1175
  {
1176
1176
  label: "Kind",
1177
1177
  value: type,
@@ -1218,12 +1218,12 @@ function ConnectedSkillsLibrary({
1218
1218
  view === "gallery" ? "grid grid-cols-[repeat(auto-fill,minmax(9.5rem,1fr))]" : "flex flex-col"
1219
1219
  ),
1220
1220
  children: shown.map((skill) => /* @__PURE__ */ jsxRuntime.jsx(
1221
- chunkAODZXDEE_cjs.SkillTile,
1221
+ chunkQMEG2BPQ_cjs.SkillTile,
1222
1222
  {
1223
1223
  name: skill.title,
1224
1224
  testId: `skill-tile-${skill.slug}`,
1225
1225
  description: skill.description,
1226
- sourceLabel: skill.isShared ? `${chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS[skill.source],
1226
+ sourceLabel: skill.isShared ? `${chunkQMEG2BPQ_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkQMEG2BPQ_cjs.SKILL_SOURCE_LABELS[skill.source],
1227
1227
  type: skill.type,
1228
1228
  icon,
1229
1229
  layout: view,
@@ -1258,7 +1258,7 @@ function ConnectedSkillsLibrary({
1258
1258
  }
1259
1259
  ),
1260
1260
  mode === "new" && /* @__PURE__ */ jsxRuntime.jsx(
1261
- chunkAODZXDEE_cjs.SkillGenerateForm,
1261
+ chunkQMEG2BPQ_cjs.SkillGenerateForm,
1262
1262
  {
1263
1263
  icon,
1264
1264
  onGenerate: (desc) => {
@@ -1285,11 +1285,11 @@ function ConnectedSkillsLibrary({
1285
1285
  ),
1286
1286
  mode === "add" && /* @__PURE__ */ jsxRuntime.jsx(ConnectedSkillUpload, { onDone: done }),
1287
1287
  mode === "detail" && current && /* @__PURE__ */ jsxRuntime.jsx(
1288
- chunkAODZXDEE_cjs.SkillLibraryDetail,
1288
+ chunkQMEG2BPQ_cjs.SkillLibraryDetail,
1289
1289
  {
1290
1290
  skill: current,
1291
1291
  icon,
1292
- instructions: current.docExtId ? currentText ? chunkAODZXDEE_cjs.parseSkillFrontmatter(currentText, chunkAODZXDEE_cjs.SKILL_MAIN_FILENAME).content : "" : current.workflow.run.kind === "prompt" ? current.workflow.run.promptTemplate : "",
1292
+ instructions: current.docExtId ? currentText ? chunkQMEG2BPQ_cjs.parseSkillFrontmatter(currentText, chunkQMEG2BPQ_cjs.SKILL_MAIN_FILENAME).content : "" : current.workflow.run.kind === "prompt" ? current.workflow.run.promptTemplate : "",
1293
1293
  isLoading: !!current.docExtId && textLoading,
1294
1294
  actions: {
1295
1295
  onRun: () => onRun(current.slug),
@@ -1324,7 +1324,7 @@ function SkillEditor({
1324
1324
  const [seeded, setSeeded] = react.useState(!isEditing);
1325
1325
  const [nameError, setNameError] = react.useState(null);
1326
1326
  if (isEditing && !seeded && text !== void 0) {
1327
- const parsed = chunkAODZXDEE_cjs.parseSkillFrontmatter(text, chunkAODZXDEE_cjs.SKILL_MAIN_FILENAME);
1327
+ const parsed = chunkQMEG2BPQ_cjs.parseSkillFrontmatter(text, chunkQMEG2BPQ_cjs.SKILL_MAIN_FILENAME);
1328
1328
  setDescription(parsed.description ?? "");
1329
1329
  setBody(parsed.content ?? "");
1330
1330
  setSeeded(true);
@@ -1338,15 +1338,15 @@ function SkillEditor({
1338
1338
  notify14("Add a short description.", "error");
1339
1339
  return;
1340
1340
  }
1341
- const slug = chunkAODZXDEE_cjs.skillSlug(name);
1341
+ const slug = chunkQMEG2BPQ_cjs.skillSlug(name);
1342
1342
  try {
1343
- await onSave(slug, chunkAODZXDEE_cjs.serializeSkill({ name: slug, description, body }), isEditing);
1343
+ await onSave(slug, chunkQMEG2BPQ_cjs.serializeSkill({ name: slug, description, body }), isEditing);
1344
1344
  } catch (err) {
1345
1345
  notify14(errorText(err, "Could not save the skill"), "error");
1346
1346
  }
1347
1347
  };
1348
1348
  return /* @__PURE__ */ jsxRuntime.jsx(
1349
- chunkAODZXDEE_cjs.SkillEditForm,
1349
+ chunkQMEG2BPQ_cjs.SkillEditForm,
1350
1350
  {
1351
1351
  name,
1352
1352
  onNameChange: setName,
@@ -1382,9 +1382,9 @@ function ConnectedAgentCreator({
1382
1382
  agent,
1383
1383
  initialName,
1384
1384
  onSaved,
1385
- capabilities = chunkAODZXDEE_cjs.DEFAULT_AGENT_CAPABILITIES,
1386
- templates = chunkAODZXDEE_cjs.DEFAULT_AGENT_TEMPLATES,
1387
- types = chunkAODZXDEE_cjs.DEFAULT_AGENT_TYPES,
1385
+ capabilities = chunkQMEG2BPQ_cjs.DEFAULT_AGENT_CAPABILITIES,
1386
+ templates = chunkQMEG2BPQ_cjs.DEFAULT_AGENT_TEMPLATES,
1387
+ types = chunkQMEG2BPQ_cjs.DEFAULT_AGENT_TYPES,
1388
1388
  canRevokeWorkspaces = false,
1389
1389
  labels
1390
1390
  }) {
@@ -1426,7 +1426,7 @@ function ConnectedAgentCreator({
1426
1426
  const initialValues = react.useMemo(
1427
1427
  () => ({
1428
1428
  name: agent?.given_name ?? initialName ?? "",
1429
- persona: isEdit ? chunkAODZXDEE_cjs.stripPersonaPreamble(String(agents.PERSONA ?? "")) : "",
1429
+ persona: isEdit ? chunkQMEG2BPQ_cjs.stripPersonaPreamble(String(agents.PERSONA ?? "")) : "",
1430
1430
  modelName: String(agents.AGENT_MODEL_NAME ?? ""),
1431
1431
  capabilities: Object.fromEntries(capabilities.map(({ key }) => [key, Boolean(agents[key])])),
1432
1432
  type: "builtin",
@@ -1445,7 +1445,7 @@ function ConnectedAgentCreator({
1445
1445
  try {
1446
1446
  let agentExtId = agent?.external_id ?? early?.id ?? "";
1447
1447
  if (!agentExtId) {
1448
- if (!chunkAODZXDEE_cjs.isValidAgentName(values.name)) {
1448
+ if (!chunkQMEG2BPQ_cjs.isValidAgentName(values.name)) {
1449
1449
  notify14("Give the agent a name first.", "error");
1450
1450
  return;
1451
1451
  }
@@ -1481,7 +1481,7 @@ function ConnectedAgentCreator({
1481
1481
  title: `agent-${name}`,
1482
1482
  sections: {
1483
1483
  Agents: {
1484
- PERSONA: chunkAODZXDEE_cjs.composePersona(name, values.persona),
1484
+ PERSONA: chunkQMEG2BPQ_cjs.composePersona(name, values.persona),
1485
1485
  ...values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {},
1486
1486
  ...Object.fromEntries(capabilities.map(({ key }) => [key, !!values.capabilities[key]])),
1487
1487
  ENABLED_SKILLS: values.capabilities.SKILLS_ENABLED && skills.length ? skills : null,
@@ -1504,7 +1504,7 @@ function ConnectedAgentCreator({
1504
1504
  };
1505
1505
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1506
1506
  /* @__PURE__ */ jsxRuntime.jsx(
1507
- chunkAODZXDEE_cjs.AgentCreator,
1507
+ chunkQMEG2BPQ_cjs.AgentCreator,
1508
1508
  {
1509
1509
  open: ready,
1510
1510
  onOpenChange,
@@ -1520,11 +1520,11 @@ function ConnectedAgentCreator({
1520
1520
  ) : void 0,
1521
1521
  revokingWorkspaceId: revokeAccess.isPending ? revokeAccess.variables?.workspaceId : void 0,
1522
1522
  avatar: (values) => /* @__PURE__ */ jsxRuntime.jsx(
1523
- chunkAODZXDEE_cjs.AgentAvatarField,
1523
+ chunkQMEG2BPQ_cjs.AgentAvatarField,
1524
1524
  {
1525
1525
  picture,
1526
1526
  isBusy: avatarBusy,
1527
- canGenerate: isEdit || chunkAODZXDEE_cjs.isValidAgentName(values.name),
1527
+ canGenerate: isEdit || chunkQMEG2BPQ_cjs.isValidAgentName(values.name),
1528
1528
  onGenerate: () => handleGenerateAvatar(values)
1529
1529
  }
1530
1530
  ),
@@ -1576,7 +1576,7 @@ function ConnectedAgentCreator({
1576
1576
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { children: "Connect your agent" }),
1577
1577
  /* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { children: "This key is shown once. Run the script on the machine that will host the agent." })
1578
1578
  ] }),
1579
- connect && /* @__PURE__ */ jsxRuntime.jsx(chunkAODZXDEE_cjs.AgentConnectInstructions, { email: connect.email, signingKey: connect.signingKey })
1579
+ connect && /* @__PURE__ */ jsxRuntime.jsx(chunkQMEG2BPQ_cjs.AgentConnectInstructions, { email: connect.email, signingKey: connect.signingKey })
1580
1580
  ]
1581
1581
  }
1582
1582
  ) })
@@ -1613,7 +1613,7 @@ function ConnectedWorkflowHistory({
1613
1613
  const { openConversation } = chunkEFEFLBRM_cjs.useBlocksEnvironment();
1614
1614
  const { data: runs = [], isLoading } = react$1.useWorkflowRuns(workflow?.external_id);
1615
1615
  return /* @__PURE__ */ jsxRuntime.jsx(
1616
- chunkAODZXDEE_cjs.TaskRunsDialog,
1616
+ chunkQMEG2BPQ_cjs.TaskRunsDialog,
1617
1617
  {
1618
1618
  inline,
1619
1619
  hideHeader,
@@ -1649,14 +1649,14 @@ function ConnectedTaskActivityDialog({
1649
1649
  const activity = react$1.useConversationActivity(conversationId, { live });
1650
1650
  const { data: agents = [] } = react$1.useAgents();
1651
1651
  const { userId } = chunkAYKE6USO_cjs.useConnectedWorkspace();
1652
- const { members } = chunkPTSTVYQD_cjs.useConnectedWorkspaceRole();
1652
+ const { members } = chunkLSZFVBKG_cjs.useConnectedWorkspaceRole();
1653
1653
  const renderPerson = react.useCallback(
1654
1654
  (id) => {
1655
1655
  const isMe = !!id && id === userId;
1656
1656
  const member = members.find((m) => m.user.external_id === id)?.user;
1657
1657
  const name = member && [member.given_name, member.family_name].filter(Boolean).join(" ") || member?.email;
1658
1658
  const person = { id, label: isMe ? "You" : name || "Someone", isMe };
1659
- return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkZV4DNZ5N_cjs.PersonPill, { person });
1659
+ return renderTaskPerson ? renderTaskPerson(person) : /* @__PURE__ */ jsxRuntime.jsx(chunkHPI4M5YZ_cjs.PersonPill, { person });
1660
1660
  },
1661
1661
  [renderTaskPerson, userId, members]
1662
1662
  );
@@ -1665,7 +1665,7 @@ function ConnectedTaskActivityDialog({
1665
1665
  [agents]
1666
1666
  );
1667
1667
  return /* @__PURE__ */ jsxRuntime.jsx(
1668
- chunkAODZXDEE_cjs.TaskActivityDialog,
1668
+ chunkQMEG2BPQ_cjs.TaskActivityDialog,
1669
1669
  {
1670
1670
  open: true,
1671
1671
  onOpenChange: (open) => !open && onClose(),
@@ -1811,7 +1811,7 @@ function useWorkflowThread(workflow, options2 = {}) {
1811
1811
  );
1812
1812
  const conversation = conversations.data?.find((c) => c.external_id === threadId);
1813
1813
  const steps = react.useMemo(
1814
- () => chunkJSTKEZBS_cjs.workflowSteps(workflow).length > 0 ? chunkJSTKEZBS_cjs.workflowSteps(workflow) : chunkAODZXDEE_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
1814
+ () => chunkJSTKEZBS_cjs.workflowSteps(workflow).length > 0 ? chunkJSTKEZBS_cjs.workflowSteps(workflow) : chunkQMEG2BPQ_cjs.fromPlanSteps(conversation?.plan?.steps ?? []),
1815
1815
  [workflow, conversation?.plan?.steps]
1816
1816
  );
1817
1817
  const activity = react$1.useConversationActivity(threadId, { live: !!threadId });
@@ -1871,7 +1871,7 @@ function useWorkflowThread(workflow, options2 = {}) {
1871
1871
  criteria: [],
1872
1872
  max_passes: 3,
1873
1873
  documents: [],
1874
- steps: chunkAODZXDEE_cjs.toPlanSteps(workflow, {
1874
+ steps: chunkQMEG2BPQ_cjs.toPlanSteps(workflow, {
1875
1875
  inputs: values,
1876
1876
  resolveWorkflow: options2.resolveWorkflow,
1877
1877
  compose: options2.compose
@@ -1958,7 +1958,7 @@ function useWorkflowThread(workflow, options2 = {}) {
1958
1958
  const anyRunning = Object.values(states).some((s) => s.status === "running");
1959
1959
  const needsStart = !threadId || idle && !anyRunning;
1960
1960
  const runError = idle ? conversation?.last_error ?? null : null;
1961
- const view = chunkAODZXDEE_cjs.useWorkflowView({
1961
+ const view = chunkQMEG2BPQ_cjs.useWorkflowView({
1962
1962
  steps,
1963
1963
  states,
1964
1964
  inputs,
@@ -2126,7 +2126,7 @@ function WorkflowWordDialog({
2126
2126
  title: title ?? labels.wordTitle,
2127
2127
  size: "xl",
2128
2128
  testId: "workflow-word-dialog",
2129
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkPTSTVYQD_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2129
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkLSZFVBKG_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2130
2130
  }
2131
2131
  );
2132
2132
  }
@@ -2435,7 +2435,7 @@ function ConnectedWorkflowRunner({
2435
2435
  );
2436
2436
  };
2437
2437
  const runner = (compact) => /* @__PURE__ */ jsxRuntime.jsx(
2438
- chunkAODZXDEE_cjs.WorkflowRunner,
2438
+ chunkQMEG2BPQ_cjs.WorkflowRunner,
2439
2439
  {
2440
2440
  people,
2441
2441
  ...runnerProps,
@@ -2481,7 +2481,7 @@ function ConnectedWorkflowRunner({
2481
2481
  ) }),
2482
2482
  inThread && conversationId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2483
2483
  /* @__PURE__ */ jsxRuntime.jsx(
2484
- chunkAODZXDEE_cjs.WorkflowStepBar,
2484
+ chunkQMEG2BPQ_cjs.WorkflowStepBar,
2485
2485
  {
2486
2486
  run: view,
2487
2487
  levels: chunkJSTKEZBS_cjs.stepLevels(view.steps),
@@ -2652,10 +2652,10 @@ function cascadeTagCombination(tags, previous, next) {
2652
2652
  function tagCombinationMatches(combination, items) {
2653
2653
  if (!isCombining(combination)) return void 0;
2654
2654
  const pass = (list) => new Set(
2655
- chunkXGFNZTPO_cjs.applyInvertedIndexFilter(
2655
+ chunkWYOPRJID_cjs.applyInvertedIndexFilter(
2656
2656
  [...list],
2657
2657
  combination,
2658
- chunkXGFNZTPO_cjs.buildInvertedIndex(
2658
+ chunkWYOPRJID_cjs.buildInvertedIndex(
2659
2659
  [...list],
2660
2660
  (item) => item.id,
2661
2661
  (item) => item.tagIds
@@ -2772,7 +2772,7 @@ function ConnectedTagTable({
2772
2772
  const fail = (fallback) => (e) => notify14(browser.refusalReason(e, fallback), "error");
2773
2773
  const snapshot2 = (data) => {
2774
2774
  const title = exportTitle ?? ui.tagKindTitle(kind, { plural: true });
2775
- const bytes = chunkSYTZ3UAU_cjs.tagTableDocx(data, {
2775
+ const bytes = chunkP7MWWCB3_cjs.tagTableDocx(data, {
2776
2776
  title,
2777
2777
  nameOf: (id) => people.find((p) => p.value === id)?.label
2778
2778
  });
@@ -2781,7 +2781,7 @@ function ConnectedTagTable({
2781
2781
  return { blob: new Blob([bytes], { type: chunkQT3A4PFC_cjs.DOCX_MIME_TYPE }), name };
2782
2782
  };
2783
2783
  return /* @__PURE__ */ jsxRuntime.jsx(
2784
- chunkSYTZ3UAU_cjs.TagTable,
2784
+ chunkP7MWWCB3_cjs.TagTable,
2785
2785
  {
2786
2786
  ...props,
2787
2787
  table,
@@ -2919,9 +2919,9 @@ function GlossaryExport({ labelId, nameOf }) {
2919
2919
  const narrowed = agreements.find((a) => a.id === narrowTo);
2920
2920
  const title = narrowed ? `Glossary - ${narrowed.name}` : "Glossary";
2921
2921
  const download = (format) => {
2922
- const entries = chunkSYTZ3UAU_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
2923
- const blob = format === "docx" ? new Blob([chunkSYTZ3UAU_cjs.glossaryDocx(entries, { title })], { type: chunkQT3A4PFC_cjs.DOCX_MIME_TYPE }) : new Blob([chunkSYTZ3UAU_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
2924
- documentTools.downloadBlob(blob, chunkSYTZ3UAU_cjs.glossaryFileName(title, format));
2922
+ const entries = chunkP7MWWCB3_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
2923
+ const blob = format === "docx" ? new Blob([chunkP7MWWCB3_cjs.glossaryDocx(entries, { title })], { type: chunkQT3A4PFC_cjs.DOCX_MIME_TYPE }) : new Blob([chunkP7MWWCB3_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
2924
+ documentTools.downloadBlob(blob, chunkP7MWWCB3_cjs.glossaryFileName(title, format));
2925
2925
  };
2926
2926
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", "data-testid": "tags-glossary", children: [
2927
2927
  agreements.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3722,7 +3722,7 @@ var DocumentSharedCell = react.memo(function DocumentSharedCell2({
3722
3722
  [document2.external_id, onToggle]
3723
3723
  );
3724
3724
  return /* @__PURE__ */ jsxRuntime.jsx(
3725
- chunkSYTZ3UAU_cjs.SharedCell,
3725
+ chunkP7MWWCB3_cjs.SharedCell,
3726
3726
  {
3727
3727
  item: document2,
3728
3728
  onToggle: handleToggle,
@@ -4293,7 +4293,7 @@ function TagFilterChips({
4293
4293
  const name = (id) => tags.find((t) => t.external_id === id)?.name ?? id;
4294
4294
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", "data-testid": "tags-filter-chips", children: [
4295
4295
  set.map(([id, state]) => /* @__PURE__ */ jsxRuntime.jsx(
4296
- chunkXGFNZTPO_cjs.FilterChip,
4296
+ chunkWYOPRJID_cjs.FilterChip,
4297
4297
  {
4298
4298
  label: name(id),
4299
4299
  state,
@@ -4421,7 +4421,7 @@ function KindSection({
4421
4421
  {
4422
4422
  testId: `tags-kind-${kind}`,
4423
4423
  title: ui.tagKindTitle(kind, { plural: true }),
4424
- description: chunkSYTZ3UAU_cjs.tagKindDescription(kind),
4424
+ description: chunkP7MWWCB3_cjs.tagKindDescription(kind),
4425
4425
  actions: picker,
4426
4426
  children: [
4427
4427
  browser.isEntityTag({ kind }) && extractingCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
@@ -4432,9 +4432,9 @@ function KindSection({
4432
4432
  children: [
4433
4433
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "size-4 animate-spin" }),
4434
4434
  "Extracting ",
4435
- chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase(),
4435
+ chunkP7MWWCB3_cjs.entitiesPhrase().toLowerCase(),
4436
4436
  " from ",
4437
- chunkSYTZ3UAU_cjs.documentCount(extractingCount),
4437
+ chunkP7MWWCB3_cjs.documentCount(extractingCount),
4438
4438
  "\u2026"
4439
4439
  ]
4440
4440
  }
@@ -4452,7 +4452,7 @@ function KindSection({
4452
4452
  onOpenDocument: (id) => openDocument(id),
4453
4453
  onOpenFact: ctx.onOpenFact,
4454
4454
  onOpenThread: (id) => openConversation(id),
4455
- labels: chunkSYTZ3UAU_cjs.tagTableLabels(kind),
4455
+ labels: chunkP7MWWCB3_cjs.tagTableLabels(kind),
4456
4456
  testId: `tags-table-${kind}`
4457
4457
  }
4458
4458
  )
@@ -4554,12 +4554,12 @@ function TagSection({
4554
4554
  onOpenDocument: (id) => openDocument(id),
4555
4555
  onOpenFact: ctx.onOpenFact,
4556
4556
  onOpenThread: (id) => openConversation(id),
4557
- labels: chunkSYTZ3UAU_cjs.tagTableLabels(tag.kind),
4557
+ labels: chunkP7MWWCB3_cjs.tagTableLabels(tag.kind),
4558
4558
  testId: "tags-rows"
4559
4559
  }
4560
4560
  ),
4561
4561
  /* @__PURE__ */ jsxRuntime.jsx(
4562
- chunkSYTZ3UAU_cjs.TagDetail,
4562
+ chunkP7MWWCB3_cjs.TagDetail,
4563
4563
  {
4564
4564
  row: detailRow && narrowTagRow(detailRow, ctx.filter.matches),
4565
4565
  fields: schema.data?.fields ?? [],
@@ -4571,10 +4571,10 @@ function TagSection({
4571
4571
  onOpenDocument: (id) => openDocument(id),
4572
4572
  onOpenFact: ctx.onOpenFact,
4573
4573
  onOpenThread: (id) => openConversation(id),
4574
- noteLabel: chunkSYTZ3UAU_cjs.tagNoteLabel(tag.kind),
4574
+ noteLabel: chunkP7MWWCB3_cjs.tagNoteLabel(tag.kind),
4575
4575
  noteIsValue: tag.kind === "annotation",
4576
4576
  renderPassages: (d, label) => renderPassages(d.doc_ext_id, label),
4577
- labels: chunkSYTZ3UAU_cjs.tagDetailLabels(),
4577
+ labels: chunkP7MWWCB3_cjs.tagDetailLabels(),
4578
4578
  testId: "tags-detail"
4579
4579
  }
4580
4580
  )
@@ -4662,7 +4662,7 @@ function ConnectedTagsPage({
4662
4662
  const onDelete = async (t) => {
4663
4663
  const nested = browser.getChildTags([...tags], t.external_id);
4664
4664
  const uses = browser.tagUseCount(t);
4665
- const n2 = chunkSYTZ3UAU_cjs.tagsPageNouns();
4665
+ const n2 = chunkP7MWWCB3_cjs.tagsPageNouns();
4666
4666
  const tagNoun = (count2) => (count2 === 1 ? n2.tag : n2.tags).toLowerCase();
4667
4667
  const carriers = uses === 1 ? `${n2.document}, ${n2.fact} or ${n2.thread}` : `${n2.documents}, ${n2.facts} and ${n2.threads}`;
4668
4668
  const message = `Delete ${ui.tagKindNouns(t.kind).singular} "${t.name}"?` + (uses > 0 ? `
@@ -4683,16 +4683,16 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4683
4683
  try {
4684
4684
  await extract.mutateAsync(docIds);
4685
4685
  notify14(
4686
- `Extracting ${chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase()} from ${chunkSYTZ3UAU_cjs.documentCount(docIds.length)}. You will be notified when it is done.`,
4686
+ `Extracting ${chunkP7MWWCB3_cjs.entitiesPhrase().toLowerCase()} from ${chunkP7MWWCB3_cjs.documentCount(docIds.length)}. You will be notified when it is done.`,
4687
4687
  "info"
4688
4688
  );
4689
4689
  } catch (error) {
4690
- notify14(browser.refusalReason(error, `Could not extract ${chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase()}`), "error");
4690
+ notify14(browser.refusalReason(error, `Could not extract ${chunkP7MWWCB3_cjs.entitiesPhrase().toLowerCase()}`), "error");
4691
4691
  throw error;
4692
4692
  }
4693
4693
  };
4694
4694
  const picker = /* @__PURE__ */ jsxRuntime.jsx(
4695
- chunkSYTZ3UAU_cjs.TagPicker,
4695
+ chunkP7MWWCB3_cjs.TagPicker,
4696
4696
  {
4697
4697
  tags: viewTags,
4698
4698
  selectedId: tag?.external_id,
@@ -4706,10 +4706,10 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4706
4706
  onOpenTag: openTag,
4707
4707
  onOpenFact
4708
4708
  };
4709
- const n = chunkSYTZ3UAU_cjs.tagsPageNouns();
4709
+ const n = chunkP7MWWCB3_cjs.tagsPageNouns();
4710
4710
  const action = view === "person" || view === "organisation" ? {
4711
4711
  label: "Extract",
4712
- title: `Extract ${chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase()} from ${n.documents.toLowerCase()}`,
4712
+ title: `Extract ${chunkP7MWWCB3_cjs.entitiesPhrase().toLowerCase()} from ${n.documents.toLowerCase()}`,
4713
4713
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Sparkles, { className: "h-4 w-4" }),
4714
4714
  run: () => setExtracting(true),
4715
4715
  testId: "tags-extract-entities"
@@ -4859,7 +4859,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
4859
4859
  }
4860
4860
  ),
4861
4861
  /* @__PURE__ */ jsxRuntime.jsx(
4862
- chunkSYTZ3UAU_cjs.ExtractEntitiesDialog,
4862
+ chunkP7MWWCB3_cjs.ExtractEntitiesDialog,
4863
4863
  {
4864
4864
  open: extracting,
4865
4865
  onOpenChange: setExtracting,
@@ -5556,10 +5556,10 @@ function useFactFilters(notes, view, chat) {
5556
5556
  const factFilters = view.filters;
5557
5557
  const setFactFilters = view.setFilters;
5558
5558
  const quickFilteredNotes = react.useMemo(
5559
- () => chunkXGFNZTPO_cjs.applyInvertedIndexFilter(
5559
+ () => chunkWYOPRJID_cjs.applyInvertedIndexFilter(
5560
5560
  notes,
5561
5561
  factFilters,
5562
- chunkXGFNZTPO_cjs.buildInvertedIndex(
5562
+ chunkWYOPRJID_cjs.buildInvertedIndex(
5563
5563
  notes,
5564
5564
  (f) => f.external_id,
5565
5565
  (f) => Object.entries(getFactFilterAttributes(f)).filter(([id, on]) => on && factFilterIds.includes(id)).map(([id]) => id)
@@ -6336,7 +6336,7 @@ function ConnectedFactsPage({
6336
6336
  onNewFact: composing && !editingId ? () => void 0 : composer.startNewFact,
6337
6337
  navSlotRef: setNavSlot,
6338
6338
  navigator: view === "table" ? /* @__PURE__ */ jsxRuntime.jsx(
6339
- chunkSYTZ3UAU_cjs.GridRowNavigator,
6339
+ chunkP7MWWCB3_cjs.GridRowNavigator,
6340
6340
  {
6341
6341
  gridApi,
6342
6342
  selectedId: editingId,
@@ -6655,11 +6655,11 @@ function ConnectedProfileCard({
6655
6655
  const display = profile?.fullName || "Unnamed";
6656
6656
  return /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
6657
6657
  /* @__PURE__ */ jsxRuntime.jsx(
6658
- chunkXGFNZTPO_cjs.ProfileCard,
6658
+ chunkWYOPRJID_cjs.ProfileCard,
6659
6659
  {
6660
6660
  avatar: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6661
6661
  /* @__PURE__ */ jsxRuntime.jsx(
6662
- chunkXGFNZTPO_cjs.AvatarPicker,
6662
+ chunkWYOPRJID_cjs.AvatarPicker,
6663
6663
  {
6664
6664
  pictureUrl: profile?.picture,
6665
6665
  initials: chunkKDG6FER6_cjs.initials(display),
@@ -6706,9 +6706,9 @@ function ConnectedIdentityVerification({
6706
6706
  onNameAccepted: () => notify14("Name updated to match your ID", "success")
6707
6707
  });
6708
6708
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6709
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
6709
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
6710
6710
  /* @__PURE__ */ jsxRuntime.jsx(
6711
- chunkXGFNZTPO_cjs.IdentityVerificationDialog,
6711
+ chunkWYOPRJID_cjs.IdentityVerificationDialog,
6712
6712
  {
6713
6713
  flow,
6714
6714
  accountName: profile?.fullName ?? "",
@@ -6721,7 +6721,7 @@ function ConnectedIdentityVerification({
6721
6721
  function ConnectedRequireVerified({ children, labels }) {
6722
6722
  const { data: profile } = react$1.useProfile();
6723
6723
  const flow = react$1.useIdentityVerification();
6724
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
6724
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
6725
6725
  }
6726
6726
  function defaultUnmetPasswordRequirement(password) {
6727
6727
  if (password.length < 8) return "Minimum 8 characters";
@@ -6754,7 +6754,7 @@ function ConnectedPasswordChangeDialog({
6754
6754
  onRecoveryComplete
6755
6755
  });
6756
6756
  return /* @__PURE__ */ jsxRuntime.jsx(
6757
- chunkXGFNZTPO_cjs.PasswordChangeDialog,
6757
+ chunkWYOPRJID_cjs.PasswordChangeDialog,
6758
6758
  {
6759
6759
  open,
6760
6760
  onClose: form.onCancel,
@@ -6804,23 +6804,23 @@ function ConnectedSecuritySection({
6804
6804
  ] });
6805
6805
  }
6806
6806
  function ConnectedNotificationPreferences({
6807
- categories = chunkXGFNZTPO_cjs.EMAIL_NOTIFICATION_CATEGORIES,
6807
+ categories = chunkWYOPRJID_cjs.EMAIL_NOTIFICATION_CATEGORIES,
6808
6808
  title = "Notifications"
6809
6809
  }) {
6810
6810
  const keys = react.useMemo(
6811
- () => categories === chunkXGFNZTPO_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkXGFNZTPO_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
6811
+ () => categories === chunkWYOPRJID_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkWYOPRJID_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
6812
6812
  [categories]
6813
6813
  );
6814
6814
  const prefs = react$1.useNotificationPreferences(keys);
6815
6815
  return /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
6816
- chunkXGFNZTPO_cjs.NotificationCategoryList,
6816
+ chunkWYOPRJID_cjs.NotificationCategoryList,
6817
6817
  {
6818
6818
  masterId: "emailNotifications",
6819
6819
  masterTitle: "Email Notifications",
6820
6820
  masterDescription: "Email me about activity when I\u2019m away",
6821
6821
  masterChecked: prefs.masterChecked,
6822
6822
  onMasterChange: prefs.setAll,
6823
- categories: chunkXGFNZTPO_cjs.toNotificationCategories(prefs.checked, categories),
6823
+ categories: chunkWYOPRJID_cjs.toNotificationCategories(prefs.checked, categories),
6824
6824
  onCategoryChange: prefs.setCategory
6825
6825
  }
6826
6826
  ) }) });
@@ -6833,7 +6833,7 @@ function ConnectedSessionsRow({
6833
6833
  const sessions = react$1.useSessions({ enabled: open });
6834
6834
  const currentSessionId = react$1.useCurrentSessionId();
6835
6835
  const terminate = react$1.useTerminateSession();
6836
- const views = chunkXGFNZTPO_cjs.toActiveSessionViews(sessions.data ?? [], {
6836
+ const views = chunkWYOPRJID_cjs.toActiveSessionViews(sessions.data ?? [], {
6837
6837
  currentSessionId,
6838
6838
  terminatingId: terminate.isPending ? terminate.variables : null,
6839
6839
  renderIcon: renderSessionIcon
@@ -6862,7 +6862,7 @@ function ConnectedSessionsRow({
6862
6862
  }
6863
6863
  ),
6864
6864
  /* @__PURE__ */ jsxRuntime.jsx(
6865
- chunkXGFNZTPO_cjs.ActiveSessionsDialog,
6865
+ chunkWYOPRJID_cjs.ActiveSessionsDialog,
6866
6866
  {
6867
6867
  open,
6868
6868
  onOpenChange: setOpen,
@@ -6904,7 +6904,7 @@ function ConnectedLogoutDialog({
6904
6904
  signOut.mutate({ everywhere, reason: "manual" });
6905
6905
  };
6906
6906
  return /* @__PURE__ */ jsxRuntime.jsx(
6907
- chunkXGFNZTPO_cjs.LogoutDialog,
6907
+ chunkWYOPRJID_cjs.LogoutDialog,
6908
6908
  {
6909
6909
  open,
6910
6910
  onClose,
@@ -6912,7 +6912,7 @@ function ConnectedLogoutDialog({
6912
6912
  onLogoutAll: () => void run(true),
6913
6913
  canLogoutAll,
6914
6914
  isOnline,
6915
- sessions: chunkXGFNZTPO_cjs.toLogoutSessionViews(sessions.data ?? []),
6915
+ sessions: chunkWYOPRJID_cjs.toLogoutSessionViews(sessions.data ?? []),
6916
6916
  renderSessionIcon
6917
6917
  }
6918
6918
  );
@@ -6954,12 +6954,12 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
6954
6954
  }
6955
6955
  ),
6956
6956
  /* @__PURE__ */ jsxRuntime.jsx(
6957
- chunkXGFNZTPO_cjs.DeleteAccountDialog,
6957
+ chunkWYOPRJID_cjs.DeleteAccountDialog,
6958
6958
  {
6959
6959
  open: dialogOpen,
6960
6960
  onClose: flow.onClose,
6961
6961
  step: flow.step,
6962
- blockers: chunkXGFNZTPO_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
6962
+ blockers: chunkWYOPRJID_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
6963
6963
  onContinue: flow.onContinue,
6964
6964
  onBack: flow.onBack,
6965
6965
  userEmail,
@@ -6974,7 +6974,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
6974
6974
  function ServerConnectionRow({ onRefresh, ...status }) {
6975
6975
  const { runtimeConfig } = chunkEFEFLBRM_cjs.useBlocksEnvironment();
6976
6976
  const [isRefreshing, setIsRefreshing] = react.useState(false);
6977
- const view = chunkXGFNZTPO_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
6977
+ const view = chunkWYOPRJID_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
6978
6978
  const refresh = async () => {
6979
6979
  setIsRefreshing(true);
6980
6980
  try {
@@ -6984,7 +6984,7 @@ function ServerConnectionRow({ onRefresh, ...status }) {
6984
6984
  }
6985
6985
  };
6986
6986
  return /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsRow, { label: "Server connection", description: view.description, children: /* @__PURE__ */ jsxRuntime.jsx(
6987
- chunkXGFNZTPO_cjs.ServerConnectionButton,
6987
+ chunkWYOPRJID_cjs.ServerConnectionButton,
6988
6988
  {
6989
6989
  state: view.state,
6990
6990
  label: view.label,
@@ -7386,13 +7386,13 @@ var COLUMNS = [
7386
7386
  flex: 1,
7387
7387
  minWidth: 120,
7388
7388
  cellRenderer: (params) => isStandard(params.data) ? /* @__PURE__ */ jsxRuntime.jsx(
7389
- chunkXGFNZTPO_cjs.ModelProviderLabel,
7389
+ chunkWYOPRJID_cjs.ModelProviderLabel,
7390
7390
  {
7391
7391
  logo: /* @__PURE__ */ jsxRuntime.jsx(ui.ArbiIcon, { size: 14, "aria-label": "ARBI", className: "flex-shrink-0 rounded-sm" }),
7392
7392
  children: "ARBI CITY"
7393
7393
  }
7394
7394
  ) : /* @__PURE__ */ jsxRuntime.jsx(
7395
- chunkXGFNZTPO_cjs.ModelProviderLabel,
7395
+ chunkWYOPRJID_cjs.ModelProviderLabel,
7396
7396
  {
7397
7397
  logo: /* @__PURE__ */ jsxRuntime.jsx(react$1.ProviderIcon, { modelName: params.data?.model_name, provider: params.value, size: 14 }),
7398
7398
  children: PROVIDER_NAMES[params.value ?? ""] || params.value || "\u2014"
@@ -7469,7 +7469,7 @@ function ConnectedPremiumModels() {
7469
7469
  );
7470
7470
  if (premiumModels.length === 0) return null;
7471
7471
  return /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsPanel, { className: "max-w-2xl space-y-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsSection, { title: "Premium models", children: /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
7472
- chunkXGFNZTPO_cjs.PremiumModelsFrame,
7472
+ chunkWYOPRJID_cjs.PremiumModelsFrame,
7473
7473
  {
7474
7474
  enabled: premiumModel !== "",
7475
7475
  onEnabledChange: (enabled) => {
@@ -7598,10 +7598,10 @@ function ConnectedAppsSettings({
7598
7598
  }
7599
7599
  };
7600
7600
  if (isLoading) {
7601
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
7601
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
7602
7602
  }
7603
7603
  if (catalogError) {
7604
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
7604
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
7605
7605
  }
7606
7606
  const visibleCatalog = catalog.filter((c) => isVendorVisible(c.vendor_key));
7607
7607
  const sharePointVisible = isVendorVisible("microsoft_sharepoint");
@@ -7610,7 +7610,7 @@ function ConnectedAppsSettings({
7610
7610
  (c) => !react$1.isMailboxSyncVendor(c.vendor_key) && !react$1.isSharePointVendor(c.vendor_key)
7611
7611
  );
7612
7612
  const renderCard = (entry) => /* @__PURE__ */ jsxRuntime.jsx(
7613
- chunkXGFNZTPO_cjs.ConnectionCard,
7613
+ chunkWYOPRJID_cjs.ConnectionCard,
7614
7614
  {
7615
7615
  connection: toConnectionCardView(entry, connectedByVendor[entry.vendor_key], {
7616
7616
  isDisconnecting: disconnect.isPending && disconnect.variables?.vendorKey === entry.vendor_key,
@@ -7738,7 +7738,7 @@ function ConnectedAppsSettings({
7738
7738
  }
7739
7739
  )
7740
7740
  ] }),
7741
- catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7741
+ catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7742
7742
  renderGroup("Email & Drive", EMAIL_AND_DRIVE_SUBTITLE, /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, {}), emailCatalog),
7743
7743
  renderGroup(
7744
7744
  "Apps & Integrations (MCP)",
@@ -7815,7 +7815,7 @@ function ConnectedSettingsPage({
7815
7815
  }, [requested]);
7816
7816
  const controlled = section !== void 0;
7817
7817
  return /* @__PURE__ */ jsxRuntime.jsx(
7818
- chunkXGFNZTPO_cjs.SettingsPage,
7818
+ chunkWYOPRJID_cjs.SettingsPage,
7819
7819
  {
7820
7820
  ...page,
7821
7821
  sections,
@@ -8241,13 +8241,13 @@ function ConnectedWorkspaceSettings({
8241
8241
  const [membersExpanded, setMembersExpanded] = react.useState(false);
8242
8242
  const [shareOpen, setShareOpen] = react.useState(false);
8243
8243
  if (!workspace) {
8244
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3CUORKDL_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkSYTZ3UAU_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
8244
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk3CUORKDL_cjs.PageLoading, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkP7MWWCB3_cjs.LoadingIndicator, { message: "Loading workspace..." }) });
8245
8245
  }
8246
8246
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8247
8247
  /* @__PURE__ */ jsxRuntime.jsxs(chunk3CUORKDL_cjs.WorkspacePageFrame, { testId, children: [
8248
8248
  /* @__PURE__ */ jsxRuntime.jsxs(chunk3CUORKDL_cjs.WorkspaceIdentityPanel, { children: [
8249
8249
  /* @__PURE__ */ jsxRuntime.jsx(
8250
- chunkSYTZ3UAU_cjs.EntityIdentityBar,
8250
+ chunkP7MWWCB3_cjs.EntityIdentityBar,
8251
8251
  {
8252
8252
  testId: "workspace-identity-bar",
8253
8253
  canEdit: isOwner,
@@ -8264,7 +8264,7 @@ function ConnectedWorkspaceSettings({
8264
8264
  label: "Name",
8265
8265
  value: workspace.name,
8266
8266
  placeholder: "Untitled",
8267
- maxLength: chunkSYTZ3UAU_cjs.IDENTITY_NAME_MAX_LENGTH,
8267
+ maxLength: chunkP7MWWCB3_cjs.IDENTITY_NAME_MAX_LENGTH,
8268
8268
  valueClassName: "truncate text-base font-semibold",
8269
8269
  testId: "workspace-home-title",
8270
8270
  hideLabel: true,
@@ -8558,9 +8558,9 @@ function ConnectedMailboxSyncDialog({
8558
8558
  showDescription: true,
8559
8559
  className: "w-[92vw] sm:max-w-lg",
8560
8560
  children: [
8561
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncDialogBody, { children: [
8562
- !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
8563
- chunkXGFNZTPO_cjs.SyncSelect,
8561
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncDialogBody, { children: [
8562
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
8563
+ chunkWYOPRJID_cjs.SyncSelect,
8564
8564
  {
8565
8565
  id: "sync-workspace",
8566
8566
  value: workspaceExtId,
@@ -8569,9 +8569,9 @@ function ConnectedMailboxSyncDialog({
8569
8569
  options: memberWorkspaces.map((w) => ({ value: w.external_id, label: w.name }))
8570
8570
  }
8571
8571
  ) }),
8572
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
8572
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
8573
8573
  /* @__PURE__ */ jsxRuntime.jsx(
8574
- chunkXGFNZTPO_cjs.SyncSelect,
8574
+ chunkWYOPRJID_cjs.SyncSelect,
8575
8575
  {
8576
8576
  id: "sync-backfill",
8577
8577
  value: backfill,
@@ -8591,17 +8591,17 @@ function ConnectedMailboxSyncDialog({
8591
8591
  "aria-label": "Import emails since date"
8592
8592
  }
8593
8593
  ),
8594
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
8594
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
8595
8595
  ] })
8596
8596
  ] }),
8597
8597
  /* @__PURE__ */ jsxRuntime.jsx(
8598
- chunkXGFNZTPO_cjs.SyncField,
8598
+ chunkWYOPRJID_cjs.SyncField,
8599
8599
  {
8600
8600
  label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
8601
8601
  hint: "Select at least one folder to import.",
8602
- actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncLinkRow, { children: [
8602
+ actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncLinkRow, { children: [
8603
8603
  /* @__PURE__ */ jsxRuntime.jsx(
8604
- chunkXGFNZTPO_cjs.SyncLinkButton,
8604
+ chunkWYOPRJID_cjs.SyncLinkButton,
8605
8605
  {
8606
8606
  onClick: () => setExpandAllNonce((n) => n + 1),
8607
8607
  testId: "mail-folders-expand-all",
@@ -8609,20 +8609,20 @@ function ConnectedMailboxSyncDialog({
8609
8609
  }
8610
8610
  ),
8611
8611
  /* @__PURE__ */ jsxRuntime.jsx(
8612
- chunkXGFNZTPO_cjs.SyncLinkButton,
8612
+ chunkWYOPRJID_cjs.SyncLinkButton,
8613
8613
  {
8614
8614
  onClick: () => setCollapseAllNonce((n) => n + 1),
8615
8615
  testId: "mail-folders-collapse-all",
8616
8616
  children: "Collapse all"
8617
8617
  }
8618
8618
  ),
8619
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
8619
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
8620
8620
  ] }),
8621
- children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
8621
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
8622
8622
  // A failed fetch is not an empty mailbox: it hides auth/scope errors (e.g. a Gmail
8623
8623
  // account needing reconnect).
8624
8624
  /* @__PURE__ */ jsxRuntime.jsx(
8625
- chunkXGFNZTPO_cjs.SyncReconnectNotice,
8625
+ chunkWYOPRJID_cjs.SyncReconnectNotice,
8626
8626
  {
8627
8627
  message: `Couldn\u2019t load folders from ${catalog.display_name}. Reconnect the account and try again.`,
8628
8628
  onReconnect: () => void reconnect(),
@@ -8630,7 +8630,7 @@ function ConnectedMailboxSyncDialog({
8630
8630
  testId: "folders-reconnect"
8631
8631
  }
8632
8632
  )
8633
- ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
8633
+ ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
8634
8634
  chunkU7OUZHBH_cjs.MailFolderTree,
8635
8635
  {
8636
8636
  nodes: folderTree,
@@ -8642,9 +8642,9 @@ function ConnectedMailboxSyncDialog({
8642
8642
  ) })
8643
8643
  }
8644
8644
  ),
8645
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncOptions, { children: [
8645
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncOptions, { children: [
8646
8646
  /* @__PURE__ */ jsxRuntime.jsx(
8647
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8647
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8648
8648
  {
8649
8649
  checked: skipDuplicates,
8650
8650
  onCheckedChange: setSkipDuplicates,
@@ -8654,7 +8654,7 @@ function ConnectedMailboxSyncDialog({
8654
8654
  }
8655
8655
  ),
8656
8656
  /* @__PURE__ */ jsxRuntime.jsx(
8657
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8657
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8658
8658
  {
8659
8659
  checked: autoRename,
8660
8660
  onCheckedChange: setAutoRename,
@@ -8664,7 +8664,7 @@ function ConnectedMailboxSyncDialog({
8664
8664
  }
8665
8665
  ),
8666
8666
  /* @__PURE__ */ jsxRuntime.jsx(
8667
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8667
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8668
8668
  {
8669
8669
  checked: shared,
8670
8670
  onCheckedChange: setShared,
@@ -8674,7 +8674,7 @@ function ConnectedMailboxSyncDialog({
8674
8674
  }
8675
8675
  ),
8676
8676
  /* @__PURE__ */ jsxRuntime.jsx(
8677
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8677
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8678
8678
  {
8679
8679
  checked: autoSync,
8680
8680
  onCheckedChange: setAutoSync,
@@ -8686,7 +8686,7 @@ function ConnectedMailboxSyncDialog({
8686
8686
  ] })
8687
8687
  ] }),
8688
8688
  /* @__PURE__ */ jsxRuntime.jsx(
8689
- chunkXGFNZTPO_cjs.SyncDialogFooter,
8689
+ chunkWYOPRJID_cjs.SyncDialogFooter,
8690
8690
  {
8691
8691
  onCancel: () => onOpenChange(false),
8692
8692
  onSave: handleEnableSubmit,
@@ -8748,7 +8748,7 @@ function DriveFolderNode({
8748
8748
  const mightHaveChildren = docCount == null || docCount > 0;
8749
8749
  const orderedChildren = [...children].sort((a, b) => a.name.localeCompare(b.name));
8750
8750
  return /* @__PURE__ */ jsxRuntime.jsx(
8751
- chunkXGFNZTPO_cjs.SyncFolderRow,
8751
+ chunkWYOPRJID_cjs.SyncFolderRow,
8752
8752
  {
8753
8753
  id: folder.id,
8754
8754
  name: folder.name,
@@ -8762,7 +8762,7 @@ function DriveFolderNode({
8762
8762
  onCheckedChange: () => onToggle(folder.id),
8763
8763
  count: typeof docCount === "number" ? docCount : void 0,
8764
8764
  isCountLoading: isSelectable && countLoading,
8765
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
8765
+ children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
8766
8766
  DriveFolderNode,
8767
8767
  {
8768
8768
  vendorKey,
@@ -8908,9 +8908,9 @@ function ConnectedDriveSyncDialog({
8908
8908
  showDescription: true,
8909
8909
  className: "w-[92vw] sm:max-w-lg",
8910
8910
  children: [
8911
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncDialogBody, { children: [
8912
- !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
8913
- chunkXGFNZTPO_cjs.SyncSelect,
8911
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncDialogBody, { children: [
8912
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
8913
+ chunkWYOPRJID_cjs.SyncSelect,
8914
8914
  {
8915
8915
  id: "drive-sync-workspace",
8916
8916
  value: workspaceExtId,
@@ -8920,13 +8920,13 @@ function ConnectedDriveSyncDialog({
8920
8920
  }
8921
8921
  ) }),
8922
8922
  /* @__PURE__ */ jsxRuntime.jsx(
8923
- chunkXGFNZTPO_cjs.SyncField,
8923
+ chunkWYOPRJID_cjs.SyncField,
8924
8924
  {
8925
8925
  label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
8926
8926
  hint: "Select at least one folder. Importing a folder includes everything inside it.",
8927
- actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncLinkRow, { children: [
8927
+ actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncLinkRow, { children: [
8928
8928
  /* @__PURE__ */ jsxRuntime.jsx(
8929
- chunkXGFNZTPO_cjs.SyncLinkButton,
8929
+ chunkWYOPRJID_cjs.SyncLinkButton,
8930
8930
  {
8931
8931
  onClick: () => setExpandAllNonce((n) => n + 1),
8932
8932
  testId: "drive-folders-expand-all",
@@ -8934,7 +8934,7 @@ function ConnectedDriveSyncDialog({
8934
8934
  }
8935
8935
  ),
8936
8936
  /* @__PURE__ */ jsxRuntime.jsx(
8937
- chunkXGFNZTPO_cjs.SyncLinkButton,
8937
+ chunkWYOPRJID_cjs.SyncLinkButton,
8938
8938
  {
8939
8939
  onClick: () => setCollapseAllNonce((n) => n + 1),
8940
8940
  testId: "drive-folders-collapse-all",
@@ -8942,19 +8942,19 @@ function ConnectedDriveSyncDialog({
8942
8942
  }
8943
8943
  )
8944
8944
  ] }),
8945
- children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
8946
- chunkXGFNZTPO_cjs.SyncReconnectNotice,
8945
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
8946
+ chunkWYOPRJID_cjs.SyncReconnectNotice,
8947
8947
  {
8948
8948
  ...reconnectButtonProps,
8949
8949
  message: `Reconnect ${catalog.display_name} to enable ${productName} \u2014 your account needs to grant file access.`
8950
8950
  }
8951
8951
  ) : foldersError ? /* @__PURE__ */ jsxRuntime.jsx(
8952
- chunkXGFNZTPO_cjs.SyncReconnectNotice,
8952
+ chunkWYOPRJID_cjs.SyncReconnectNotice,
8953
8953
  {
8954
8954
  ...reconnectButtonProps,
8955
8955
  message: `Couldn\u2019t load folders from ${productName}. Reconnect the account and try again.`
8956
8956
  }
8957
- ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
8957
+ ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
8958
8958
  DriveFolderNode,
8959
8959
  {
8960
8960
  vendorKey: catalog.vendor_key,
@@ -8971,9 +8971,9 @@ function ConnectedDriveSyncDialog({
8971
8971
  )) }) })
8972
8972
  }
8973
8973
  ),
8974
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.SyncOptions, { children: [
8974
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.SyncOptions, { children: [
8975
8975
  /* @__PURE__ */ jsxRuntime.jsx(
8976
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8976
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8977
8977
  {
8978
8978
  checked: skipDuplicates,
8979
8979
  onCheckedChange: setSkipDuplicates,
@@ -8982,7 +8982,7 @@ function ConnectedDriveSyncDialog({
8982
8982
  }
8983
8983
  ),
8984
8984
  /* @__PURE__ */ jsxRuntime.jsx(
8985
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8985
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8986
8986
  {
8987
8987
  checked: autoRename,
8988
8988
  onCheckedChange: setAutoRename,
@@ -8991,7 +8991,7 @@ function ConnectedDriveSyncDialog({
8991
8991
  }
8992
8992
  ),
8993
8993
  /* @__PURE__ */ jsxRuntime.jsx(
8994
- chunkXGFNZTPO_cjs.SyncOptionToggle,
8994
+ chunkWYOPRJID_cjs.SyncOptionToggle,
8995
8995
  {
8996
8996
  checked: shared,
8997
8997
  onCheckedChange: setShared,
@@ -9000,7 +9000,7 @@ function ConnectedDriveSyncDialog({
9000
9000
  }
9001
9001
  ),
9002
9002
  /* @__PURE__ */ jsxRuntime.jsx(
9003
- chunkXGFNZTPO_cjs.SyncOptionToggle,
9003
+ chunkWYOPRJID_cjs.SyncOptionToggle,
9004
9004
  {
9005
9005
  checked: autoSync,
9006
9006
  onCheckedChange: setAutoSync,
@@ -9012,7 +9012,7 @@ function ConnectedDriveSyncDialog({
9012
9012
  ] })
9013
9013
  ] }),
9014
9014
  /* @__PURE__ */ jsxRuntime.jsx(
9015
- chunkXGFNZTPO_cjs.SyncDialogFooter,
9015
+ chunkWYOPRJID_cjs.SyncDialogFooter,
9016
9016
  {
9017
9017
  onCancel: () => onOpenChange(false),
9018
9018
  onSave: handleEnableSubmit,
@@ -9044,7 +9044,7 @@ function BillingProjectEntity({
9044
9044
  subscription = "none",
9045
9045
  ...props
9046
9046
  }) {
9047
- const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
9047
+ const { stripeEnabled } = chunkVBNPS5AK_cjs.useBillingSupport();
9048
9048
  const isPaid2 = stripeEnabled && (subscription === "active" || subscription === "past_due" || subscription === "dev");
9049
9049
  return /* @__PURE__ */ jsxRuntime.jsx(ui.ProjectEntity, { ...props, subscription, isPaid: isPaid2 });
9050
9050
  }
@@ -9071,8 +9071,8 @@ function InvoicesModal({
9071
9071
  key: inv.number ?? String(i),
9072
9072
  date: formatInvoiceDate(inv.date),
9073
9073
  kind: KIND_LABELS[inv.kind],
9074
- amount: chunkYNSSIULM_cjs.formatMoney(inv.amount, inv.currency),
9075
- amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunkYNSSIULM_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
9074
+ amount: chunkVBNPS5AK_cjs.formatMoney(inv.amount, inv.currency),
9075
+ amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunkVBNPS5AK_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
9076
9076
  status: inv.status,
9077
9077
  isPaid: isPaid2,
9078
9078
  href: inv.hosted_invoice_url ?? inv.url ?? inv.pdf_url ?? void 0,
@@ -9080,7 +9080,7 @@ function InvoicesModal({
9080
9080
  };
9081
9081
  });
9082
9082
  return /* @__PURE__ */ jsxRuntime.jsx(
9083
- chunkXGFNZTPO_cjs.InvoicesDialog,
9083
+ chunkWYOPRJID_cjs.InvoicesDialog,
9084
9084
  {
9085
9085
  open,
9086
9086
  onOpenChange,
@@ -9107,7 +9107,7 @@ function StripeCheckoutModal({
9107
9107
  const [clientSecret, setClientSecret] = react.useState(null);
9108
9108
  const [isCreating, setIsCreating] = react.useState(false);
9109
9109
  const [stripe, setStripe] = react.useState(null);
9110
- const { stripeEnabled, checkout } = chunkYNSSIULM_cjs.useBillingSupport();
9110
+ const { stripeEnabled, checkout } = chunkVBNPS5AK_cjs.useBillingSupport();
9111
9111
  const createCheckout = react$1.useCreateProjectCheckout();
9112
9112
  const refreshProject = react$1.useRefreshProject();
9113
9113
  const invalidateProjects = react$1.useInvalidateProjects();
@@ -9134,7 +9134,7 @@ function StripeCheckoutModal({
9134
9134
  projectExtId,
9135
9135
  body: {
9136
9136
  interval,
9137
- packs: chunkYNSSIULM_cjs.PRO_PACKS,
9137
+ packs: chunkVBNPS5AK_cjs.PRO_PACKS,
9138
9138
  ai_blocks: aiBlocks,
9139
9139
  storage_blocks: storageBlocks,
9140
9140
  addon_budget_pence: addonBudgetPence,
@@ -9150,7 +9150,7 @@ function StripeCheckoutModal({
9150
9150
  },
9151
9151
  onError: (error) => {
9152
9152
  console.error("Failed to create checkout session:", error);
9153
- const reason = chunkYNSSIULM_cjs.apiErrorDetail(error)?.message;
9153
+ const reason = chunkVBNPS5AK_cjs.apiErrorDetail(error)?.message;
9154
9154
  shell.notify.error(
9155
9155
  reason ? `Checkout didn't start: ${reason}` : "Checkout didn't start. Try again."
9156
9156
  );
@@ -9183,9 +9183,9 @@ function StripeCheckoutModal({
9183
9183
  }
9184
9184
  }, [open]);
9185
9185
  const isStripeConfigured = stripeEnabled;
9186
- const vatNote = quote ? `${chunkYNSSIULM_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunkYNSSIULM_cjs.quoteTotalLine(quote)}` : null;
9186
+ const vatNote = quote ? `${chunkVBNPS5AK_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunkVBNPS5AK_cjs.quoteTotalLine(quote)}` : null;
9187
9187
  return /* @__PURE__ */ jsxRuntime.jsx(
9188
- chunkXGFNZTPO_cjs.CheckoutDialogFrame,
9188
+ chunkWYOPRJID_cjs.CheckoutDialogFrame,
9189
9189
  {
9190
9190
  open,
9191
9191
  onOpenChange,
@@ -9195,7 +9195,7 @@ function StripeCheckoutModal({
9195
9195
  children: clientSecret && !!stripe && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9196
9196
  vatNote && /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-vat-note", className: "mb-4 text-sm text-muted-foreground", children: vatNote }),
9197
9197
  checkout?.render(stripe, { clientSecret, onComplete: handleComplete }),
9198
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.MoreInfo, { title: "Paying", label: "Payment help", testId: "checkout-payment-help", children: [
9198
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.MoreInfo, { title: "Paying", label: "Payment help", testId: "checkout-payment-help", children: [
9199
9199
  /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-decline-note", children: "Card declined? Nothing was charged. Try again or use another card." }),
9200
9200
  /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-vat-id-note", children: "No VAT number? Leave \u2018purchasing as a business\u2019 unticked." }),
9201
9201
  /* @__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." })
@@ -9237,31 +9237,31 @@ function defaultBillingCountry(languages = typeof navigator === "undefined" ? []
9237
9237
  }
9238
9238
  var choiceForPacks = (packs) => packs > 0 ? "pro" : "free";
9239
9239
  function proCard(selected, isAnnual, prices) {
9240
- const packs = chunkYNSSIULM_cjs.PLAN_CHOICE_PACKS.pro;
9240
+ const packs = chunkVBNPS5AK_cjs.PLAN_CHOICE_PACKS.pro;
9241
9241
  const currency = prices.monthly?.currency ?? prices.annual?.currency ?? "gbp";
9242
- const monthly = chunkYNSSIULM_cjs.packPrice(prices.monthly, packs);
9243
- const annual = chunkYNSSIULM_cjs.packPrice(prices.annual, packs);
9242
+ const monthly = chunkVBNPS5AK_cjs.packPrice(prices.monthly, packs);
9243
+ const annual = chunkVBNPS5AK_cjs.packPrice(prices.annual, packs);
9244
9244
  const current = isAnnual ? annual : monthly;
9245
9245
  const effectiveMonthly = current ? isAnnual ? current.amount_ex_vat / 12 : current.amount_ex_vat : null;
9246
9246
  return {
9247
9247
  id: packs,
9248
- name: chunkYNSSIULM_cjs.planNameForPacks(packs),
9248
+ name: chunkVBNPS5AK_cjs.planNameForPacks(packs),
9249
9249
  isSelected: selected === "pro",
9250
9250
  price: current && effectiveMonthly != null ? {
9251
9251
  annual: isAnnual,
9252
- yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current.amount_ex_vat ? chunkYNSSIULM_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
9253
- yearlyTotal: isAnnual ? chunkYNSSIULM_cjs.formatMoney(current.amount_ex_vat, currency) : void 0,
9252
+ yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current.amount_ex_vat ? chunkVBNPS5AK_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
9253
+ yearlyTotal: isAnnual ? chunkVBNPS5AK_cjs.formatMoney(current.amount_ex_vat, currency) : void 0,
9254
9254
  intervalLabel: isAnnual ? "/yr + VAT" : "/mo",
9255
- monthly: chunkYNSSIULM_cjs.formatMoney(Math.round(effectiveMonthly), currency),
9255
+ monthly: chunkVBNPS5AK_cjs.formatMoney(Math.round(effectiveMonthly), currency),
9256
9256
  taxLabel: "+ VAT",
9257
9257
  // The inclusive figure for a UK customer, right under the headline.
9258
- note: `${chunkYNSSIULM_cjs.formatMoney(current.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
9258
+ note: `${chunkVBNPS5AK_cjs.formatMoney(current.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
9259
9259
  } : void 0,
9260
9260
  features: [
9261
- `${react$1.formatGbp(chunkYNSSIULM_cjs.PRO_AI_GBP)} of AI usage / month`,
9262
- `${chunkYNSSIULM_cjs.PRO_STORAGE_GB} GB storage`,
9261
+ `${react$1.formatGbp(chunkVBNPS5AK_cjs.PRO_AI_GBP)} of AI usage / month`,
9262
+ `${chunkVBNPS5AK_cjs.PRO_STORAGE_GB} GB storage`,
9263
9263
  "Unlimited collaborators",
9264
- ...isAnnual ? [chunkYNSSIULM_cjs.ANNUAL_PREMIUM_AI_NOTE] : []
9264
+ ...isAnnual ? [chunkVBNPS5AK_cjs.ANNUAL_PREMIUM_AI_NOTE] : []
9265
9265
  ]
9266
9266
  };
9267
9267
  }
@@ -9273,9 +9273,9 @@ function buildPlanCards(selected, isAnnual, prices, isOnFree) {
9273
9273
  isCurrent: isOnFree,
9274
9274
  isSelected: selected === "free" && !isOnFree,
9275
9275
  features: [
9276
- `${react$1.formatGbp(chunkYNSSIULM_cjs.FREE_AI_GBP)} of AI usage / month`,
9277
- `${chunkYNSSIULM_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
9278
- chunkYNSSIULM_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunkYNSSIULM_cjs.FREE_COLLABORATORS} collaborators`
9276
+ `${react$1.formatGbp(chunkVBNPS5AK_cjs.FREE_AI_GBP)} of AI usage / month`,
9277
+ `${chunkVBNPS5AK_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
9278
+ chunkVBNPS5AK_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunkVBNPS5AK_cjs.FREE_COLLABORATORS} collaborators`
9279
9279
  ]
9280
9280
  };
9281
9281
  return [free, proCard(selected, isAnnual, prices)];
@@ -9288,7 +9288,7 @@ function PlanChoiceCards({
9288
9288
  isOnFree = false
9289
9289
  }) {
9290
9290
  return /* @__PURE__ */ jsxRuntime.jsx(
9291
- chunkXGFNZTPO_cjs.PlanCardGrid,
9291
+ chunkWYOPRJID_cjs.PlanCardGrid,
9292
9292
  {
9293
9293
  plans: buildPlanCards(selected, isAnnual, prices, isOnFree),
9294
9294
  onSelect: (id) => onSelect(choiceForPacks(id))
@@ -9297,13 +9297,13 @@ function PlanChoiceCards({
9297
9297
  }
9298
9298
  function PlanInfoPopover2() {
9299
9299
  const { openSettings } = chunkEFEFLBRM_cjs.useBlocksEnvironment();
9300
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanInfoPopover, { onOpenModelList: () => openSettings("chat") });
9300
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanInfoPopover, { onOpenModelList: () => openSettings("chat") });
9301
9301
  }
9302
9302
  function CheckoutAddonBudget({
9303
9303
  value,
9304
9304
  onChange
9305
9305
  }) {
9306
- const budget = chunkYNSSIULM_cjs.parseBudgetPounds(value);
9306
+ const budget = chunkVBNPS5AK_cjs.parseBudgetPounds(value);
9307
9307
  return /* @__PURE__ */ jsxRuntime.jsxs(
9308
9308
  "div",
9309
9309
  {
@@ -9326,7 +9326,7 @@ function CheckoutAddonBudget({
9326
9326
  step: 25,
9327
9327
  className: "h-8 w-24",
9328
9328
  value,
9329
- placeholder: String(chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
9329
+ placeholder: String(chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
9330
9330
  onChange: (e) => onChange(e.target.value),
9331
9331
  "aria-invalid": budget === void 0,
9332
9332
  "data-testid": "checkout-addon-budget-input"
@@ -9344,7 +9344,7 @@ function BlockStepper({
9344
9344
  onChange,
9345
9345
  testId
9346
9346
  }) {
9347
- const set = (n) => onChange(Math.max(0, Math.min(chunkYNSSIULM_cjs.MAX_CHECKOUT_BLOCKS, n)));
9347
+ const set = (n) => onChange(Math.max(0, Math.min(chunkVBNPS5AK_cjs.MAX_CHECKOUT_BLOCKS, n)));
9348
9348
  return /* @__PURE__ */ jsxRuntime.jsxs(
9349
9349
  "div",
9350
9350
  {
@@ -9388,7 +9388,7 @@ function BlockStepper({
9388
9388
  className: "size-8",
9389
9389
  "aria-label": `More: ${label}`,
9390
9390
  onClick: () => set(value + 1),
9391
- disabled: value >= chunkYNSSIULM_cjs.MAX_CHECKOUT_BLOCKS,
9391
+ disabled: value >= chunkVBNPS5AK_cjs.MAX_CHECKOUT_BLOCKS,
9392
9392
  "data-testid": `${testId}-increment`,
9393
9393
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" })
9394
9394
  }
@@ -9405,8 +9405,8 @@ function CheckoutAddonBlocks({
9405
9405
  onStorageBlocksChange,
9406
9406
  price
9407
9407
  }) {
9408
- const ai = chunkYNSSIULM_cjs.addonPrice(price, "ai_usage");
9409
- const storage = chunkYNSSIULM_cjs.addonPrice(price, "storage");
9408
+ const ai = chunkVBNPS5AK_cjs.addonPrice(price, "ai_usage");
9409
+ const storage = chunkVBNPS5AK_cjs.addonPrice(price, "storage");
9410
9410
  return /* @__PURE__ */ jsxRuntime.jsxs(
9411
9411
  "div",
9412
9412
  {
@@ -9416,8 +9416,8 @@ function CheckoutAddonBlocks({
9416
9416
  /* @__PURE__ */ jsxRuntime.jsx(
9417
9417
  BlockStepper,
9418
9418
  {
9419
- label: `+${react$1.formatGbp(ai?.ai_gbp || chunkYNSSIULM_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
9420
- priceText: chunkYNSSIULM_cjs.checkoutBlockPriceText(price, "ai_usage"),
9419
+ label: `+${react$1.formatGbp(ai?.ai_gbp || chunkVBNPS5AK_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
9420
+ priceText: chunkVBNPS5AK_cjs.checkoutBlockPriceText(price, "ai_usage"),
9421
9421
  value: aiBlocks,
9422
9422
  onChange: onAiBlocksChange,
9423
9423
  testId: "checkout-ai-blocks"
@@ -9426,8 +9426,8 @@ function CheckoutAddonBlocks({
9426
9426
  /* @__PURE__ */ jsxRuntime.jsx(
9427
9427
  BlockStepper,
9428
9428
  {
9429
- label: `+${storage?.storage_gb || chunkYNSSIULM_cjs.STORAGE_BLOCK_GB} GB storage`,
9430
- priceText: chunkYNSSIULM_cjs.checkoutBlockPriceText(price, "storage"),
9429
+ label: `+${storage?.storage_gb || chunkVBNPS5AK_cjs.STORAGE_BLOCK_GB} GB storage`,
9430
+ priceText: chunkVBNPS5AK_cjs.checkoutBlockPriceText(price, "storage"),
9431
9431
  value: storageBlocks,
9432
9432
  onChange: onStorageBlocksChange,
9433
9433
  testId: "checkout-storage-blocks"
@@ -9482,14 +9482,14 @@ function ReferralRewardSummary2({
9482
9482
  if (!reward) return null;
9483
9483
  const applied = totalCents != null && currency ? applyReferralReward(totalCents, reward, currency) : null;
9484
9484
  return /* @__PURE__ */ jsxRuntime.jsx(
9485
- chunkXGFNZTPO_cjs.ReferralRewardSummary,
9485
+ chunkWYOPRJID_cjs.ReferralRewardSummary,
9486
9486
  {
9487
- amountLabel: chunkYNSSIULM_cjs.formatMoney(reward.amount, reward.currency),
9487
+ amountLabel: chunkVBNPS5AK_cjs.formatMoney(reward.amount, reward.currency),
9488
9488
  breakdown: applied && totalCents != null && currency ? {
9489
- subtotal: chunkYNSSIULM_cjs.formatMoney(totalCents, currency),
9490
- reward: chunkYNSSIULM_cjs.formatMoney(applied.bonus, currency),
9491
- youPay: chunkYNSSIULM_cjs.formatMoney(applied.youPay, currency),
9492
- rollover: applied.remaining > 0 ? chunkYNSSIULM_cjs.formatMoney(applied.remaining, currency) : void 0
9489
+ subtotal: chunkVBNPS5AK_cjs.formatMoney(totalCents, currency),
9490
+ reward: chunkVBNPS5AK_cjs.formatMoney(applied.bonus, currency),
9491
+ youPay: chunkVBNPS5AK_cjs.formatMoney(applied.youPay, currency),
9492
+ rollover: applied.remaining > 0 ? chunkVBNPS5AK_cjs.formatMoney(applied.remaining, currency) : void 0
9493
9493
  } : void 0
9494
9494
  }
9495
9495
  );
@@ -9497,7 +9497,7 @@ function ReferralRewardSummary2({
9497
9497
  function ReferralRewardNote2() {
9498
9498
  const reward = useReferralReward();
9499
9499
  if (!reward) return null;
9500
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.ReferralRewardNote, { amountLabel: chunkYNSSIULM_cjs.formatMoney(reward.amount, reward.currency) });
9500
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.ReferralRewardNote, { amountLabel: chunkVBNPS5AK_cjs.formatMoney(reward.amount, reward.currency) });
9501
9501
  }
9502
9502
  function CheckoutTotal({
9503
9503
  state,
@@ -9526,7 +9526,7 @@ function CheckoutTotal({
9526
9526
  className: "text-sm font-medium text-foreground",
9527
9527
  "data-testid": "checkout-total",
9528
9528
  "aria-live": "polite",
9529
- children: state.quote && !state.isLoading ? chunkYNSSIULM_cjs.quoteTotalLine(state.quote) : state.isLoading ? "Calculating total\u2026" : state.error
9529
+ children: state.quote && !state.isLoading ? chunkVBNPS5AK_cjs.quoteTotalLine(state.quote) : state.isLoading ? "Calculating total\u2026" : state.error
9530
9530
  }
9531
9531
  )
9532
9532
  ] });
@@ -9559,13 +9559,13 @@ function useCheckoutQuote({
9559
9559
  ...aiBlocks || storageBlocks ? { addons: { ai_usage: aiBlocks, storage: storageBlocks } } : {}
9560
9560
  } : null
9561
9561
  );
9562
- const { code, message } = query.isError ? chunkYNSSIULM_cjs.quoteError(query.error) : {};
9563
- const locationInvalid = code === chunkYNSSIULM_cjs.TAX_LOCATION_INVALID;
9562
+ const { code, message } = query.isError ? chunkVBNPS5AK_cjs.quoteError(query.error) : {};
9563
+ const locationInvalid = code === chunkVBNPS5AK_cjs.TAX_LOCATION_INVALID;
9564
9564
  const isLoading = enabled && (query.isLoading || postal !== postalCode.trim());
9565
9565
  return {
9566
9566
  quote: query.data,
9567
9567
  isLoading,
9568
- showPostcode: chunkYNSSIULM_cjs.POSTCODE_COUNTRIES.includes(country) || locationInvalid || postalCode !== "",
9568
+ showPostcode: chunkVBNPS5AK_cjs.POSTCODE_COUNTRIES.includes(country) || locationInvalid || postalCode !== "",
9569
9569
  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,
9570
9570
  canContinue: !isLoading && (!!query.data || query.isError && !locationInvalid)
9571
9571
  };
@@ -9574,7 +9574,7 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
9574
9574
  const { data: products, isLoading, error } = react$1.useProducts();
9575
9575
  const [isAnnual, setIsAnnual] = react.useState(false);
9576
9576
  const [promoCode, setPromoCode] = react.useState("");
9577
- const [addonBudget, setAddonBudget] = react.useState(String(chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
9577
+ const [addonBudget, setAddonBudget] = react.useState(String(chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
9578
9578
  const [checkoutBudget, setCheckoutBudget] = react.useState(null);
9579
9579
  const [aiBlocks, setAiBlocks] = react.useState(0);
9580
9580
  const [storageBlocks, setStorageBlocks] = react.useState(0);
@@ -9592,31 +9592,31 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
9592
9592
  storageBlocks,
9593
9593
  enabled: !!products?.length
9594
9594
  });
9595
- if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { children: "Loading plans\u2026" });
9596
- if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
9597
- if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { children: "No plans available." });
9598
- const prices = chunkYNSSIULM_cjs.findProPrices(products);
9595
+ if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { children: "Loading plans\u2026" });
9596
+ if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
9597
+ if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { children: "No plans available." });
9598
+ const prices = chunkVBNPS5AK_cjs.findProPrices(products);
9599
9599
  const intervalPrice = isAnnual ? prices.annual : prices.monthly;
9600
- const selectedPrice = chunkYNSSIULM_cjs.packPrice(intervalPrice);
9600
+ const selectedPrice = chunkVBNPS5AK_cjs.packPrice(intervalPrice);
9601
9601
  if (!intervalPrice) return null;
9602
9602
  const interval = isAnnual ? "year" : "month";
9603
- const savingsPercent = chunkYNSSIULM_cjs.calcSavingsPercent(prices.monthly, prices.annual);
9603
+ const savingsPercent = chunkVBNPS5AK_cjs.calcSavingsPercent(prices.monthly, prices.annual);
9604
9604
  const handleSubscribe = () => {
9605
9605
  setCheckoutInterval(interval);
9606
- const parsed = chunkYNSSIULM_cjs.parseBudgetPounds(addonBudget);
9607
- setCheckoutBudget(parsed == null || parsed === chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed);
9606
+ const parsed = chunkVBNPS5AK_cjs.parseBudgetPounds(addonBudget);
9607
+ setCheckoutBudget(parsed == null || parsed === chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed);
9608
9608
  setCheckoutQuote(quote.quote);
9609
9609
  setIsCheckoutModalOpen(true);
9610
9610
  };
9611
9611
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9612
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanStack, { children: [
9612
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanStack, { children: [
9613
9613
  /* @__PURE__ */ jsxRuntime.jsx(
9614
- chunkXGFNZTPO_cjs.PlanPickerHeader,
9614
+ chunkWYOPRJID_cjs.PlanPickerHeader,
9615
9615
  {
9616
9616
  title: "Plan",
9617
9617
  info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
9618
9618
  toggle: /* @__PURE__ */ jsxRuntime.jsx(
9619
- chunkXGFNZTPO_cjs.PricingToggle,
9619
+ chunkWYOPRJID_cjs.PricingToggle,
9620
9620
  {
9621
9621
  isAnnual,
9622
9622
  onToggle: () => setIsAnnual(!isAnnual),
@@ -9653,7 +9653,7 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
9653
9653
  currency: intervalPrice.currency
9654
9654
  }
9655
9655
  ),
9656
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
9656
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
9657
9657
  /* @__PURE__ */ jsxRuntime.jsx(
9658
9658
  CheckoutCountrySelect,
9659
9659
  {
@@ -9665,9 +9665,9 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
9665
9665
  }
9666
9666
  ),
9667
9667
  /* @__PURE__ */ jsxRuntime.jsx(CheckoutTotal, { state: quote, postalCode, onPostalCodeChange: setPostalCode }),
9668
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanActionRow, { children: [
9668
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanActionRow, { children: [
9669
9669
  onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
9670
- chunkXGFNZTPO_cjs.PlanActionButton,
9670
+ chunkWYOPRJID_cjs.PlanActionButton,
9671
9671
  {
9672
9672
  tone: "muted",
9673
9673
  fill: true,
@@ -9678,11 +9678,11 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
9678
9678
  }
9679
9679
  ),
9680
9680
  /* @__PURE__ */ jsxRuntime.jsx(
9681
- chunkXGFNZTPO_cjs.PlanActionButton,
9681
+ chunkWYOPRJID_cjs.PlanActionButton,
9682
9682
  {
9683
9683
  fill: true,
9684
9684
  onClick: handleSubscribe,
9685
- disabled: !selectedPrice || chunkYNSSIULM_cjs.parseBudgetPounds(addonBudget) === void 0 || !quote.canContinue,
9685
+ disabled: !selectedPrice || chunkVBNPS5AK_cjs.parseBudgetPounds(addonBudget) === void 0 || !quote.canContinue,
9686
9686
  size: "sm",
9687
9687
  "data-testid": "subscribe-button",
9688
9688
  children: "Continue to payment"
@@ -9722,7 +9722,7 @@ var FALLBACK_MESSAGES = {
9722
9722
  BILLING_ADDRESS_REQUIRED: "Add a billing address first."
9723
9723
  };
9724
9724
  function addonErrorMessage(error) {
9725
- const detail = chunkYNSSIULM_cjs.apiErrorDetail(error);
9725
+ const detail = chunkVBNPS5AK_cjs.apiErrorDetail(error);
9726
9726
  if (detail && typeof detail === "object") {
9727
9727
  const { code, message } = detail;
9728
9728
  if (message) return message;
@@ -9744,18 +9744,18 @@ function chargeRefusalMessage(error) {
9744
9744
  return code ? REFUSALS[code] : null;
9745
9745
  }
9746
9746
  function addonErrorCode(error) {
9747
- const detail = chunkYNSSIULM_cjs.apiErrorDetail(error);
9747
+ const detail = chunkVBNPS5AK_cjs.apiErrorDetail(error);
9748
9748
  if (detail && typeof detail === "object") {
9749
9749
  const code = detail.code;
9750
9750
  if (code && code in FALLBACK_MESSAGES) return code;
9751
9751
  }
9752
9752
  return null;
9753
9753
  }
9754
- var addedMessage = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `${react$1.formatGbp(blockAiGbp ?? chunkYNSSIULM_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunkYNSSIULM_cjs.STORAGE_BLOCK_GB} GB added`;
9754
+ var addedMessage = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `${react$1.formatGbp(blockAiGbp ?? chunkVBNPS5AK_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunkVBNPS5AK_cjs.STORAGE_BLOCK_GB} GB added`;
9755
9755
  function useAddonPurchase() {
9756
9756
  const addBlock = react$1.useAddProjectAddonBlock();
9757
9757
  const { mutate } = addBlock;
9758
- const { onAddonBlocksBought } = chunkYNSSIULM_cjs.useBillingSupport();
9758
+ const { onAddonBlocksBought } = chunkVBNPS5AK_cjs.useBillingSupport();
9759
9759
  const buy = react.useCallback(
9760
9760
  (kind, projectExtId, options2) => {
9761
9761
  mutate(
@@ -9799,7 +9799,7 @@ function PlanChangeLines({
9799
9799
  isError,
9800
9800
  className
9801
9801
  }) {
9802
- const lines = preview ? chunkYNSSIULM_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunkYNSSIULM_cjs.PAY_TODAY_UNPRICED : "Checking price\u2026" }];
9802
+ const lines = preview ? chunkVBNPS5AK_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunkVBNPS5AK_cjs.PAY_TODAY_UNPRICED : "Checking price\u2026" }];
9803
9803
  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)) });
9804
9804
  }
9805
9805
  var BANK_CONFIRM_PLAN_CHANGE = "Confirm with your bank. Nothing is charged until you do.";
@@ -9807,13 +9807,13 @@ function notifyPlanChange(data, fallback, planName2) {
9807
9807
  const outcome = data?.plan_change;
9808
9808
  switch (outcome?.result) {
9809
9809
  case "upgraded": {
9810
- const plan = chunkYNSSIULM_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
9811
- const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunkYNSSIULM_cjs.formatMoney(outcome.charged_pence, "gbp")} charged` : "";
9810
+ const plan = chunkVBNPS5AK_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
9811
+ const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunkVBNPS5AK_cjs.formatMoney(outcome.charged_pence, "gbp")} charged` : "";
9812
9812
  shell.notify.success(`Upgraded to ${plan}${charged}`);
9813
9813
  break;
9814
9814
  }
9815
9815
  case "scheduled": {
9816
- const when2 = chunkYNSSIULM_cjs.formatPeriodEnd(data?.addons?.period_end ?? data?.current_period_end);
9816
+ const when2 = chunkVBNPS5AK_cjs.formatPeriodEnd(data?.addons?.period_end ?? data?.current_period_end);
9817
9817
  shell.notify.success(when2 ? `Scheduled for ${when2}` : fallback);
9818
9818
  break;
9819
9819
  }
@@ -9846,23 +9846,23 @@ function ChangeProPlan({
9846
9846
  const { data: products } = react$1.useProducts();
9847
9847
  const changePlan = react$1.useChangeProjectPlan();
9848
9848
  const cancel = react$1.useCancelProjectSubscription();
9849
- const prices = chunkYNSSIULM_cjs.findProPrices(products);
9849
+ const prices = chunkVBNPS5AK_cjs.findProPrices(products);
9850
9850
  const addons = project.addons;
9851
9851
  const isCanceling = project.cancel_at_period_end === true || project.subscription === "canceled";
9852
- const currentPacks = Math.max(addons?.packs ?? project.packs ?? chunkYNSSIULM_cjs.PRO_PACKS, chunkYNSSIULM_cjs.PRO_PACKS);
9853
- const isLegacyMultiPack = currentPacks > chunkYNSSIULM_cjs.PRO_PACKS;
9852
+ const currentPacks = Math.max(addons?.packs ?? project.packs ?? chunkVBNPS5AK_cjs.PRO_PACKS, chunkVBNPS5AK_cjs.PRO_PACKS);
9853
+ const isLegacyMultiPack = currentPacks > chunkVBNPS5AK_cjs.PRO_PACKS;
9854
9854
  const currentInterval = project.plan_interval === "year" ? "year" : "month";
9855
9855
  const scheduledPacks = isCanceling ? 0 : addons?.packs_next ?? currentPacks;
9856
9856
  const scheduledInterval = addons?.pending_interval ?? currentInterval;
9857
9857
  const [targetPacks, setTargetPacks] = react.useState(scheduledPacks);
9858
9858
  const [chosenInterval, setChosenInterval] = react.useState(scheduledInterval);
9859
- const targetInterval = targetPacks > chunkYNSSIULM_cjs.PRO_PACKS ? currentInterval : chosenInterval;
9859
+ const targetInterval = targetPacks > chunkVBNPS5AK_cjs.PRO_PACKS ? currentInterval : chosenInterval;
9860
9860
  const periodEnd = formatDate(addons?.period_end ?? project.current_period_end);
9861
9861
  const when2 = periodEnd ?? "the end of the period";
9862
9862
  const shortWhen = periodEnd ? periodEnd.replace(/ \d{4}$/, "") : "period end";
9863
9863
  const isPending = changePlan.isPending || cancel.isPending;
9864
9864
  const sameAsScheduled = targetPacks === scheduledPacks && (targetPacks === 0 || targetInterval === scheduledInterval);
9865
- const packOptions = isLegacyMultiPack ? [currentPacks, chunkYNSSIULM_cjs.PRO_PACKS, 0] : [chunkYNSSIULM_cjs.PRO_PACKS, 0];
9865
+ const packOptions = isLegacyMultiPack ? [currentPacks, chunkVBNPS5AK_cjs.PRO_PACKS, 0] : [chunkVBNPS5AK_cjs.PRO_PACKS, 0];
9866
9866
  const intervalPrice = targetInterval === "year" ? prices.annual : prices.monthly;
9867
9867
  const currency = intervalPrice?.currency ?? project.currency ?? "gbp";
9868
9868
  const preview = react$1.usePreviewProjectPlanChange(
@@ -9870,7 +9870,7 @@ function ChangeProPlan({
9870
9870
  sameAsScheduled || targetPacks === 0 ? null : { packs: targetPacks, interval: targetInterval }
9871
9871
  );
9872
9872
  const noChange = sameAsScheduled || preview.data?.unchanged === true;
9873
- const nameFor = (packs) => packs === currentPacks && packs > 0 ? chunkYNSSIULM_cjs.proTierName(project) : chunkYNSSIULM_cjs.planNameForPacks(packs);
9873
+ const nameFor = (packs) => packs === currentPacks && packs > 0 ? chunkVBNPS5AK_cjs.proTierName(project) : chunkVBNPS5AK_cjs.planNameForPacks(packs);
9874
9874
  const effects = [];
9875
9875
  const target = nameFor(targetPacks);
9876
9876
  if (targetPacks === 0) {
@@ -9880,7 +9880,7 @@ function ChangeProPlan({
9880
9880
  if (targetPacks < currentPacks) {
9881
9881
  effects.push(`Changes to one Pro licence on ${when2}. No refund.`);
9882
9882
  } else if (!isCanceling && addons?.packs_next != null) {
9883
- effects.push(`Cancels the change to ${chunkYNSSIULM_cjs.planNameForPacks(addons.packs_next)}.`);
9883
+ effects.push(`Cancels the change to ${chunkVBNPS5AK_cjs.planNameForPacks(addons.packs_next)}.`);
9884
9884
  }
9885
9885
  if (targetInterval !== currentInterval) {
9886
9886
  effects.push(`${targetInterval === "year" ? "Annual" : "Monthly"} billing from ${when2}.`);
@@ -9919,33 +9919,33 @@ function ChangeProPlan({
9919
9919
  if (packs === 0) {
9920
9920
  return {
9921
9921
  total: "\xA30",
9922
- summary: `${react$1.formatGbp(chunkYNSSIULM_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunkYNSSIULM_cjs.FREE_STORAGE_MB} MB \xB7 just you`
9922
+ summary: `${react$1.formatGbp(chunkVBNPS5AK_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunkVBNPS5AK_cjs.FREE_STORAGE_MB} MB \xB7 just you`
9923
9923
  };
9924
9924
  }
9925
- const allowance = `${react$1.formatGbp(chunkYNSSIULM_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunkYNSSIULM_cjs.PRO_STORAGE_GB * packs} GB`;
9926
- const legacy = packs > chunkYNSSIULM_cjs.PRO_PACKS;
9927
- const exVat = legacy ? project.amount_ex_vat : chunkYNSSIULM_cjs.packPrice(intervalPrice)?.amount_ex_vat;
9925
+ const allowance = `${react$1.formatGbp(chunkVBNPS5AK_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunkVBNPS5AK_cjs.PRO_STORAGE_GB * packs} GB`;
9926
+ const legacy = packs > chunkVBNPS5AK_cjs.PRO_PACKS;
9927
+ const exVat = legacy ? project.amount_ex_vat : chunkVBNPS5AK_cjs.packPrice(intervalPrice)?.amount_ex_vat;
9928
9928
  return {
9929
- total: exVat != null ? chunkYNSSIULM_cjs.plusVat(exVat, currency) : void 0,
9929
+ total: exVat != null ? chunkVBNPS5AK_cjs.plusVat(exVat, currency) : void 0,
9930
9930
  summary: allowance
9931
9931
  };
9932
9932
  };
9933
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanStack, { gap: 4, testId: "change-pro-plan", children: [
9933
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanStack, { gap: 4, testId: "change-pro-plan", children: [
9934
9934
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
9935
9935
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-foreground", children: "Billing" }),
9936
- targetPacks > chunkYNSSIULM_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(
9937
- chunkXGFNZTPO_cjs.PricingToggle,
9936
+ targetPacks > chunkVBNPS5AK_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(
9937
+ chunkWYOPRJID_cjs.PricingToggle,
9938
9938
  {
9939
9939
  isAnnual: targetInterval === "year",
9940
9940
  onToggle: () => setChosenInterval(targetInterval === "year" ? "month" : "year"),
9941
- savingsPercent: chunkYNSSIULM_cjs.calcSavingsPercent(prices.monthly, prices.annual)
9941
+ savingsPercent: chunkVBNPS5AK_cjs.calcSavingsPercent(prices.monthly, prices.annual)
9942
9942
  }
9943
9943
  )
9944
9944
  ] }),
9945
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
9945
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
9946
9946
  const { total, summary } = optionFor(packs);
9947
9947
  return /* @__PURE__ */ jsxRuntime.jsx(
9948
- chunkXGFNZTPO_cjs.PlanTierOption,
9948
+ chunkWYOPRJID_cjs.PlanTierOption,
9949
9949
  {
9950
9950
  onSelect: setTargetPacks,
9951
9951
  option: {
@@ -9962,13 +9962,13 @@ function ChangeProPlan({
9962
9962
  );
9963
9963
  }) }),
9964
9964
  isLegacyMultiPack && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1", children: [
9965
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
9966
- chunkYNSSIULM_cjs.proTierName(project),
9965
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
9966
+ chunkVBNPS5AK_cjs.proTierName(project),
9967
9967
  " is no longer sold"
9968
9968
  ] }),
9969
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
9969
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
9970
9970
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
9971
- chunkYNSSIULM_cjs.proTierName(project),
9971
+ chunkVBNPS5AK_cjs.proTierName(project),
9972
9972
  " keeps renewing at its own price, with its allowance and add-ons, until you change it."
9973
9973
  ] }),
9974
9974
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
@@ -9989,7 +9989,7 @@ function ChangeProPlan({
9989
9989
  ),
9990
9990
  targetPacks > 0 && /* @__PURE__ */ jsxRuntime.jsx(ReferralRewardNote2, {}),
9991
9991
  /* @__PURE__ */ jsxRuntime.jsx(
9992
- chunkXGFNZTPO_cjs.PlanActionButton,
9992
+ chunkWYOPRJID_cjs.PlanActionButton,
9993
9993
  {
9994
9994
  onClick: apply,
9995
9995
  disabled: noChange || isPending,
@@ -10000,9 +10000,9 @@ function ChangeProPlan({
10000
10000
  ] });
10001
10001
  }
10002
10002
  function ChangePlanDialog({ project, open, onOpenChange }) {
10003
- const isPro = !!project && chunkYNSSIULM_cjs.isProProject(project);
10003
+ const isPro = !!project && chunkVBNPS5AK_cjs.isProProject(project);
10004
10004
  return /* @__PURE__ */ jsxRuntime.jsx(
10005
- chunkXGFNZTPO_cjs.PlanDialogFrame,
10005
+ chunkWYOPRJID_cjs.PlanDialogFrame,
10006
10006
  {
10007
10007
  open,
10008
10008
  onOpenChange,
@@ -10022,14 +10022,14 @@ function ChangePlanDialog({ project, open, onOpenChange }) {
10022
10022
  }
10023
10023
  function ProjectsTable() {
10024
10024
  const { data: projects, isLoading } = react$1.useProjects();
10025
- const currentUserExtId = chunkYNSSIULM_cjs.useSelfExtId();
10025
+ const currentUserExtId = chunkVBNPS5AK_cjs.useSelfExtId();
10026
10026
  const { openProject } = chunkEFEFLBRM_cjs.useBlocksEnvironment();
10027
10027
  const updateProject = react$1.useUpdateProjectFields();
10028
10028
  const [renameTarget, setRenameTarget] = react.useState(null);
10029
10029
  const [renameValue, setRenameValue] = react.useState("");
10030
10030
  const [invoicesTarget, setInvoicesTarget] = react.useState(null);
10031
10031
  const [upgradeTarget, setUpgradeTarget] = react.useState(null);
10032
- const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
10032
+ const { stripeEnabled } = chunkVBNPS5AK_cjs.useBillingSupport();
10033
10033
  const ownedProjects = react.useMemo(
10034
10034
  () => (projects ?? []).filter((p) => p.created_by === currentUserExtId),
10035
10035
  [projects, currentUserExtId]
@@ -10068,13 +10068,13 @@ function ProjectsTable() {
10068
10068
  const hasPaid = p.subscription === "active" || p.subscription === "past_due";
10069
10069
  const canUpgrade = stripeEnabled && !hasPaid && p.subscription !== "canceled" && p.subscription !== "dev";
10070
10070
  return /* @__PURE__ */ jsxRuntime.jsx(
10071
- chunkXGFNZTPO_cjs.ProjectRow,
10071
+ chunkWYOPRJID_cjs.ProjectRow,
10072
10072
  {
10073
10073
  testId: `project-row-${p.external_id}`,
10074
10074
  onOpen: () => openProject(p.external_id),
10075
10075
  identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "mine", subscription: p.subscription, size: "sm" }),
10076
- summary: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanBadge, { ...chunkYNSSIULM_cjs.planBadgeView(p) }) }) : void 0,
10077
- usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.QuotaMeter, { items: chunkYNSSIULM_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
10076
+ summary: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanBadge, { ...chunkVBNPS5AK_cjs.planBadgeView(p) }) }) : void 0,
10077
+ usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.QuotaMeter, { items: chunkVBNPS5AK_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
10078
10078
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10079
10079
  canUpgrade && /* @__PURE__ */ jsxRuntime.jsxs(
10080
10080
  ui.Button,
@@ -10108,9 +10108,9 @@ function ProjectsTable() {
10108
10108
  );
10109
10109
  };
10110
10110
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10111
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
10111
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
10112
10112
  /* @__PURE__ */ jsxRuntime.jsx(
10113
- chunkXGFNZTPO_cjs.RenameDialog,
10113
+ chunkWYOPRJID_cjs.RenameDialog,
10114
10114
  {
10115
10115
  open: !!renameTarget,
10116
10116
  onClose: () => setRenameTarget(null),
@@ -10141,7 +10141,7 @@ function ProjectsTable() {
10141
10141
  }
10142
10142
  function SharedProjects() {
10143
10143
  const { data: projects } = react$1.useProjects();
10144
- const currentUserExtId = chunkYNSSIULM_cjs.useSelfExtId();
10144
+ const currentUserExtId = chunkVBNPS5AK_cjs.useSelfExtId();
10145
10145
  const { data: usageToday } = react$1.useUserUsageToday();
10146
10146
  const shared = react.useMemo(
10147
10147
  () => (projects ?? []).filter((p) => p.created_by !== currentUserExtId),
@@ -10149,10 +10149,10 @@ function SharedProjects() {
10149
10149
  );
10150
10150
  if (shared.length === 0) return null;
10151
10151
  const usedToday = usageToday?.used_gbp ?? 0;
10152
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SharedProjectsSection, { footnote: "Your daily AI usage allowance in projects other people run \u2014 their plan and billing are theirs.", children: shared.map((p) => {
10152
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.SharedProjectsSection, { footnote: "Your daily AI usage allowance in projects other people run \u2014 their plan and billing are theirs.", children: shared.map((p) => {
10153
10153
  const cap = p.daily_cap_per_user;
10154
10154
  return /* @__PURE__ */ jsxRuntime.jsx(
10155
- chunkXGFNZTPO_cjs.SharedProjectRow,
10155
+ chunkWYOPRJID_cjs.SharedProjectRow,
10156
10156
  {
10157
10157
  testId: `shared-project-${p.external_id}`,
10158
10158
  identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "other", size: "sm" }),
@@ -10196,7 +10196,7 @@ function DailyCapEditor({ project }) {
10196
10196
  );
10197
10197
  };
10198
10198
  return /* @__PURE__ */ jsxRuntime.jsx(
10199
- chunkXGFNZTPO_cjs.DailyCapField,
10199
+ chunkWYOPRJID_cjs.DailyCapField,
10200
10200
  {
10201
10201
  value,
10202
10202
  onChange: setValue,
@@ -10209,11 +10209,11 @@ function DailyCapEditor({ project }) {
10209
10209
  function SubscriptionStatus({ project }) {
10210
10210
  const { quotas, cancel_at_period_end, subscription, current_period_end, addons } = project;
10211
10211
  return /* @__PURE__ */ jsxRuntime.jsx(
10212
- chunkXGFNZTPO_cjs.SubscriptionStatusView,
10212
+ chunkWYOPRJID_cjs.SubscriptionStatusView,
10213
10213
  {
10214
- resetDate: chunkYNSSIULM_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
10214
+ resetDate: chunkVBNPS5AK_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
10215
10215
  isCanceling: subscription === "canceled" || cancel_at_period_end === true,
10216
- meters: chunkYNSSIULM_cjs.getQuotaItems(quotas).map((q) => ({
10216
+ meters: chunkVBNPS5AK_cjs.getQuotaItems(quotas).map((q) => ({
10217
10217
  key: q.key,
10218
10218
  icon: q.icon,
10219
10219
  label: q.label,
@@ -10277,7 +10277,7 @@ function PendingChange({
10277
10277
  }
10278
10278
  );
10279
10279
  }
10280
- var titleFor = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `Add ${react$1.formatGbp(blockAiGbp ?? chunkYNSSIULM_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunkYNSSIULM_cjs.STORAGE_BLOCK_GB} GB storage`;
10280
+ var titleFor = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `Add ${react$1.formatGbp(blockAiGbp ?? chunkVBNPS5AK_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunkVBNPS5AK_cjs.STORAGE_BLOCK_GB} GB storage`;
10281
10281
  var blocksOf = (kind, project) => (kind === "ai_usage" ? project.addons?.ai_blocks : project.addons?.storage_blocks) ?? 0;
10282
10282
  function Row({ label, children }) {
10283
10283
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline justify-between gap-4", children: [
@@ -10298,11 +10298,11 @@ function AddAddonDialog({
10298
10298
  const addons = project.addons;
10299
10299
  if (!addons) return null;
10300
10300
  const isAnnual = project.plan_interval === "year";
10301
- const price = chunkYNSSIULM_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
10302
- const nextCharge = chunkYNSSIULM_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
10303
- const now = quote.data ? chunkYNSSIULM_cjs.quoteParts(quote.data.now) : null;
10304
- const renewal = quote.data ? chunkYNSSIULM_cjs.quoteParts(quote.data.renewal) : null;
10305
- const today = now ? { total: chunkYNSSIULM_cjs.money2(now.total), detail: chunkYNSSIULM_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
10301
+ const price = chunkVBNPS5AK_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
10302
+ const nextCharge = chunkVBNPS5AK_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
10303
+ const now = quote.data ? chunkVBNPS5AK_cjs.quoteParts(quote.data.now) : null;
10304
+ const renewal = quote.data ? chunkVBNPS5AK_cjs.quoteParts(quote.data.renewal) : null;
10305
+ const today = now ? { total: chunkVBNPS5AK_cjs.money2(now.total), detail: chunkVBNPS5AK_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
10306
10306
  const pricing = quote.isLoading;
10307
10307
  const confirm = () => {
10308
10308
  const before = blocksOf(kind, project);
@@ -10341,8 +10341,8 @@ function AddAddonDialog({
10341
10341
  isAnnual ? "yearly" : "monthly",
10342
10342
  " \xB7 no refund"
10343
10343
  ] }),
10344
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
10345
- chunkXGFNZTPO_cjs.MoreInfoList,
10344
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
10345
+ chunkWYOPRJID_cjs.MoreInfoList,
10346
10346
  {
10347
10347
  items: [
10348
10348
  {
@@ -10357,7 +10357,7 @@ function AddAddonDialog({
10357
10357
  term: "Usage cap",
10358
10358
  text: "Adding by hand is never blocked by the usage cap; the cap limits automatic top-ups only."
10359
10359
  },
10360
- ...isAnnual && kind === "ai_usage" ? [{ term: "Annual", text: `${chunkYNSSIULM_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : []
10360
+ ...isAnnual && kind === "ai_usage" ? [{ term: "Annual", text: `${chunkVBNPS5AK_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : []
10361
10361
  ]
10362
10362
  }
10363
10363
  ) })
@@ -10380,7 +10380,7 @@ function AddAddonDialog({
10380
10380
  )
10381
10381
  ] }) }),
10382
10382
  !pricing && /* @__PURE__ */ jsxRuntime.jsxs(Row, { label: "Next charge", children: [
10383
- renewal ? chunkYNSSIULM_cjs.totalWithTaxWord(renewal) : price.then.replace(/\/(month|year)/, ""),
10383
+ renewal ? chunkVBNPS5AK_cjs.totalWithTaxWord(renewal) : price.then.replace(/\/(month|year)/, ""),
10384
10384
  nextCharge ? ` on ${nextCharge}` : " at renewal"
10385
10385
  ] })
10386
10386
  ] }) }),
@@ -10411,11 +10411,11 @@ function ReduceAddonDialog({
10411
10411
  const update = react$1.useUpdateProjectNextPeriodAddons();
10412
10412
  const addons = project.addons;
10413
10413
  if (!addons) return null;
10414
- const { min, next } = chunkYNSSIULM_cjs.reduceBounds(kind, addons);
10414
+ const { min, next } = chunkVBNPS5AK_cjs.reduceBounds(kind, addons);
10415
10415
  const keep = Math.max(min, next - 1);
10416
- const size = chunkYNSSIULM_cjs.nextRemovedBlockSize(kind, addons);
10417
- const what = chunkYNSSIULM_cjs.stepLabel(kind, size);
10418
- const from = chunkYNSSIULM_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
10416
+ const size = chunkVBNPS5AK_cjs.nextRemovedBlockSize(kind, addons);
10417
+ const what = chunkVBNPS5AK_cjs.stepLabel(kind, size);
10418
+ const from = chunkVBNPS5AK_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
10419
10419
  const fromShort = from.replace(/ \d{4}$/, "");
10420
10420
  const allowanceNext = kind === "ai_usage" ? addons.ai_allowance_next_gbp - size : addons.storage_allowance_next_gb - size;
10421
10421
  const allowanceNow = kind === "ai_usage" ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -10423,7 +10423,7 @@ function ReduceAddonDialog({
10423
10423
  const save = () => update.mutate(
10424
10424
  {
10425
10425
  projectExtId: project.external_id,
10426
- body: chunkYNSSIULM_cjs.nextPeriodBody(kind, keep)
10426
+ body: chunkVBNPS5AK_cjs.nextPeriodBody(kind, keep)
10427
10427
  },
10428
10428
  {
10429
10429
  onSuccess: () => {
@@ -10451,7 +10451,7 @@ function ReduceAddonDialog({
10451
10451
  fromShort,
10452
10452
  " \xB7 no refund"
10453
10453
  ] }),
10454
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.MoreInfo, { title: "Reducing a top-up", testId: "reduce-addon-more-info", children: [
10454
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.MoreInfo, { title: "Reducing a top-up", testId: "reduce-addon-more-info", children: [
10455
10455
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
10456
10456
  "The reduction applies from your next renewal (",
10457
10457
  from,
@@ -10490,7 +10490,7 @@ function ReduceAddonDialog({
10490
10490
  }
10491
10491
  ) });
10492
10492
  }
10493
- var gbp = (pence) => chunkYNSSIULM_cjs.formatMoney(pence, "gbp");
10493
+ var gbp = (pence) => chunkVBNPS5AK_cjs.formatMoney(pence, "gbp");
10494
10494
  var gb2 = (n) => `${Math.round(n * 10) / 10} GB`;
10495
10495
  var pct = (used, limit) => limit > 0 ? Math.min(100, used / limit * 100) : 0;
10496
10496
  function formatShortDate(unix) {
@@ -10502,20 +10502,20 @@ function AutoTopupThreshold({
10502
10502
  addons
10503
10503
  }) {
10504
10504
  const updateSettings = react$1.useUpdateProjectAddonSettings();
10505
- const min = addons.min_auto_topup_threshold_gbp || chunkYNSSIULM_cjs.MIN_AUTO_TOPUP_THRESHOLD_GBP;
10505
+ const min = addons.min_auto_topup_threshold_gbp || chunkVBNPS5AK_cjs.MIN_AUTO_TOPUP_THRESHOLD_GBP;
10506
10506
  const saved = addons.auto_topup_threshold_gbp;
10507
10507
  const [value, setValue] = react.useState(String(saved));
10508
10508
  react.useEffect(() => setValue(String(saved)), [saved]);
10509
10509
  const parsed = Number(value);
10510
10510
  const valid = Number.isFinite(parsed) && parsed >= min;
10511
10511
  const dirty = valid && parsed !== saved;
10512
- const off = chunkYNSSIULM_cjs.isAddonBudgetZero(addons);
10512
+ const off = chunkVBNPS5AK_cjs.isAddonBudgetZero(addons);
10513
10513
  const save = () => {
10514
10514
  if (!dirty) return;
10515
10515
  updateSettings.mutate(
10516
10516
  {
10517
10517
  projectExtId: project.external_id,
10518
- body: chunkYNSSIULM_cjs.addonSettingsBody(addons, { auto_topup_threshold_gbp: parsed })
10518
+ body: chunkVBNPS5AK_cjs.addonSettingsBody(addons, { auto_topup_threshold_gbp: parsed })
10519
10519
  },
10520
10520
  {
10521
10521
  onSuccess: () => shell.notify.success(`Auto-add below ${react$1.formatGbp(parsed)} of AI usage left`),
@@ -10612,10 +10612,10 @@ function ResourceMeter({
10612
10612
  const update = react$1.useUpdateProjectNextPeriodAddons();
10613
10613
  const isAi = kind === "ai_usage";
10614
10614
  const slug = isAi ? "ai-usage" : "storage";
10615
- const periodEnd = chunkYNSSIULM_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
10615
+ const periodEnd = chunkVBNPS5AK_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
10616
10616
  const from = periodEnd ?? "your next renewal";
10617
10617
  const fromShort = formatShortDate(addons.period_end ?? project.current_period_end) ?? "renewal";
10618
- const { min, current, next } = chunkYNSSIULM_cjs.reduceBounds(kind, addons);
10618
+ const { min, current, next } = chunkVBNPS5AK_cjs.reduceBounds(kind, addons);
10619
10619
  const fmt = (n) => isAi ? react$1.formatGbp(n) : gb2(n);
10620
10620
  const used = isAi ? addons.ai_used_gbp : addons.storage_used_gb;
10621
10621
  const allowance = isAi ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -10623,15 +10623,15 @@ function ResourceMeter({
10623
10623
  const plan = isAi ? addons.plan_ai_gbp : addons.plan_storage_gb;
10624
10624
  const topUps = Math.max(0, allowance - plan);
10625
10625
  const blocks = isAi ? addons.ai_blocks : addons.storage_blocks;
10626
- const hasLegacy = chunkYNSSIULM_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
10627
- const room = chunkYNSSIULM_cjs.autoRoom(kind, addons);
10628
- const capZero = chunkYNSSIULM_cjs.isAddonBudgetZero(addons);
10629
- const resets = isAi ? formatShortDate(chunkYNSSIULM_cjs.aiUsageResetTimestamp(project)) : null;
10630
- const removeSize = chunkYNSSIULM_cjs.nextRemovedBlockSize(kind, addons);
10626
+ const hasLegacy = chunkVBNPS5AK_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
10627
+ const room = chunkVBNPS5AK_cjs.autoRoom(kind, addons);
10628
+ const capZero = chunkVBNPS5AK_cjs.isAddonBudgetZero(addons);
10629
+ const resets = isAi ? formatShortDate(chunkVBNPS5AK_cjs.aiUsageResetTimestamp(project)) : null;
10630
+ const removeSize = chunkVBNPS5AK_cjs.nextRemovedBlockSize(kind, addons);
10631
10631
  const undo = () => update.mutate(
10632
10632
  {
10633
10633
  projectExtId: project.external_id,
10634
- body: chunkYNSSIULM_cjs.nextPeriodBody(kind, current)
10634
+ body: chunkVBNPS5AK_cjs.nextPeriodBody(kind, current)
10635
10635
  },
10636
10636
  {
10637
10637
  onSuccess: () => shell.notify.success("Kept"),
@@ -10648,7 +10648,7 @@ function ResourceMeter({
10648
10648
  allowance: { used, plan, topUps, autoRoom: capZero ? 0 : room },
10649
10649
  legend: {
10650
10650
  plan: `Plan ${fmt(plan)}`,
10651
- topUps: topUps > 0 ? `Top-ups ${fmt(topUps)}${hasLegacy ? ` (${chunkYNSSIULM_cjs.blocksLabel(kind, blocks, addons)})` : ""}` : void 0,
10651
+ topUps: topUps > 0 ? `Top-ups ${fmt(topUps)}${hasLegacy ? ` (${chunkVBNPS5AK_cjs.blocksLabel(kind, blocks, addons)})` : ""}` : void 0,
10652
10652
  autoRoom: room != null && room > 0 && !capZero ? `Automatic up to ${fmt(room)}` : void 0
10653
10653
  },
10654
10654
  testId: `usage-meter-${slug}`,
@@ -10677,9 +10677,9 @@ function ResourceMeter({
10677
10677
  {
10678
10678
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-3.5" }),
10679
10679
  label: isAi ? react$1.formatGbp(addons.block_ai_gbp) : `${addons.block_storage_gb} GB`,
10680
- caption: chunkYNSSIULM_cjs.addStepCaption(kind, addons),
10680
+ caption: chunkVBNPS5AK_cjs.addStepCaption(kind, addons),
10681
10681
  onClick: onAdd,
10682
- ariaLabel: `Add ${chunkYNSSIULM_cjs.stepLabel(kind, isAi ? addons.block_ai_gbp : addons.block_storage_gb)}`,
10682
+ ariaLabel: `Add ${chunkVBNPS5AK_cjs.stepLabel(kind, isAi ? addons.block_ai_gbp : addons.block_storage_gb)}`,
10683
10683
  testId: isAi ? "add-ai-block-button" : "add-storage-block-button"
10684
10684
  }
10685
10685
  ),
@@ -10690,7 +10690,7 @@ function ResourceMeter({
10690
10690
  label: isAi ? react$1.formatGbp(removeSize) : `${removeSize} GB`,
10691
10691
  caption: `from ${fromShort}`,
10692
10692
  onClick: onReduce,
10693
- ariaLabel: `Remove ${chunkYNSSIULM_cjs.stepLabel(kind, removeSize)} from ${from}`,
10693
+ ariaLabel: `Remove ${chunkVBNPS5AK_cjs.stepLabel(kind, removeSize)} from ${from}`,
10694
10694
  testId: `reduce-${slug}-button`
10695
10695
  }
10696
10696
  )
@@ -10729,10 +10729,10 @@ function UsageCapEditor({ project, addons }) {
10729
10729
  updateSettings.mutate(
10730
10730
  {
10731
10731
  projectExtId: project.external_id,
10732
- body: chunkYNSSIULM_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
10732
+ body: chunkVBNPS5AK_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
10733
10733
  },
10734
10734
  {
10735
- onSuccess: () => shell.notify.success(chunkYNSSIULM_cjs.budgetSavedMessage(nextCap)),
10735
+ onSuccess: () => shell.notify.success(chunkVBNPS5AK_cjs.budgetSavedMessage(nextCap)),
10736
10736
  onError: (error) => shell.notify.error(addonErrorMessage(error))
10737
10737
  }
10738
10738
  );
@@ -10743,14 +10743,14 @@ function UsageCapEditor({ project, addons }) {
10743
10743
  /* @__PURE__ */ jsxRuntime.jsx(
10744
10744
  chunkQZTNTP75_cjs.UsageMeter,
10745
10745
  {
10746
- label: chunkYNSSIULM_cjs.USAGE_CAP_LABEL,
10746
+ label: chunkVBNPS5AK_cjs.USAGE_CAP_LABEL,
10747
10747
  hint: spendResets && savedCap !== 0 ? `resets ${spendResets}` : void 0,
10748
10748
  value: readout,
10749
10749
  pct: savedCap != null && savedCap > 0 ? pct(spent, savedCap) : 0,
10750
10750
  testId: "addon-spend"
10751
10751
  }
10752
10752
  ),
10753
- addons.cap_reached && savedCap != null && savedCap > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-cap-reached", children: chunkYNSSIULM_cjs.CAP_REACHED_MESSAGE }),
10753
+ addons.cap_reached && savedCap != null && savedCap > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-cap-reached", children: chunkVBNPS5AK_cjs.CAP_REACHED_MESSAGE }),
10754
10754
  addons.manual_spent_pence > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-manual-spend", children: [
10755
10755
  "Added by hand this month: ",
10756
10756
  gbp(addons.manual_spent_pence),
@@ -10771,7 +10771,7 @@ function UsageCapEditor({ project, addons }) {
10771
10771
  step: 25,
10772
10772
  className: "h-9 w-28",
10773
10773
  value: noCap ? "" : value,
10774
- placeholder: noCap ? "No limit" : String(chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
10774
+ placeholder: noCap ? "No limit" : String(chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
10775
10775
  disabled: noCap,
10776
10776
  onChange: (e) => setValue(e.target.value),
10777
10777
  onKeyDown: (e) => e.key === "Enter" && save(),
@@ -10797,7 +10797,7 @@ function UsageCapEditor({ project, addons }) {
10797
10797
  checked: noCap,
10798
10798
  onCheckedChange: (checked) => {
10799
10799
  setNoCap(checked);
10800
- if (!checked && value === "") setValue(String(chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
10800
+ if (!checked && value === "") setValue(String(chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
10801
10801
  },
10802
10802
  "data-testid": "no-cap-switch"
10803
10803
  }
@@ -10810,8 +10810,8 @@ function UsageCapEditor({ project, addons }) {
10810
10810
  function UsageInfo({ addons, isAnnual }) {
10811
10811
  const period = isAnnual ? "year" : "month";
10812
10812
  const legacy = (addons.legacy_ai_blocks ?? 0) > 0 || (addons.legacy_storage_blocks ?? 0) > 0;
10813
- return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
10814
- chunkXGFNZTPO_cjs.MoreInfoList,
10813
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
10814
+ chunkWYOPRJID_cjs.MoreInfoList,
10815
10815
  {
10816
10816
  items: [
10817
10817
  {
@@ -10826,7 +10826,7 @@ function UsageInfo({ addons, isAnnual }) {
10826
10826
  term: "Automatic top-ups",
10827
10827
  text: "One step is added when AI usage drops below your auto top-up level, or when an upload needs more storage."
10828
10828
  },
10829
- { term: "Usage cap", text: chunkYNSSIULM_cjs.USAGE_CAP_HELP },
10829
+ { term: "Usage cap", text: chunkVBNPS5AK_cjs.USAGE_CAP_HELP },
10830
10830
  {
10831
10831
  term: "Reducing",
10832
10832
  text: "\u2212 removes one step from your next renewal. You keep this period's allowance. No refunds."
@@ -10837,7 +10837,7 @@ function UsageInfo({ addons, isAnnual }) {
10837
10837
  text: "Top-ups bought on an earlier price keep their size and price until removed; they are removed last."
10838
10838
  }
10839
10839
  ] : [],
10840
- ...isAnnual ? [{ term: "Annual", text: `${chunkYNSSIULM_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : [],
10840
+ ...isAnnual ? [{ term: "Annual", text: `${chunkVBNPS5AK_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : [],
10841
10841
  {
10842
10842
  term: "Prices",
10843
10843
  text: "Shown ex VAT. The confirm step shows the total with VAT before you pay."
@@ -10929,7 +10929,7 @@ function formatShortDate2(unix) {
10929
10929
  if (!unix) return null;
10930
10930
  return new Date(unix * 1e3).toLocaleDateString("en-GB", { day: "numeric", month: "short" });
10931
10931
  }
10932
- var gbp2 = (pence) => chunkYNSSIULM_cjs.formatMoney(pence, "gbp");
10932
+ var gbp2 = (pence) => chunkVBNPS5AK_cjs.formatMoney(pence, "gbp");
10933
10933
  var gbNum = (n) => `${Math.round(n * 10) / 10}`;
10934
10934
  var pct2 = (used, limit) => limit > 0 ? Math.min(100, used / limit * 100) : 0;
10935
10935
  function Meter({
@@ -10947,15 +10947,15 @@ function Meter({
10947
10947
  ] });
10948
10948
  }
10949
10949
  function usePlanPrice(project) {
10950
- const { data: products } = react$1.useProducts({ enabled: chunkYNSSIULM_cjs.isProProject(project) });
10951
- if (!chunkYNSSIULM_cjs.isProProject(project)) return null;
10950
+ const { data: products } = react$1.useProducts({ enabled: chunkVBNPS5AK_cjs.isProProject(project) });
10951
+ if (!chunkVBNPS5AK_cjs.isProProject(project)) return null;
10952
10952
  const isAnnual = project.plan_interval === "year";
10953
10953
  if (project.amount != null) {
10954
10954
  return { incl: project.amount, ex: project.amount_ex_vat ?? null, isAnnual };
10955
10955
  }
10956
- if ((project.packs ?? chunkYNSSIULM_cjs.PRO_PACKS) > chunkYNSSIULM_cjs.PRO_PACKS) return null;
10957
- const prices = chunkYNSSIULM_cjs.findProPrices(products);
10958
- const pp = chunkYNSSIULM_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
10956
+ if ((project.packs ?? chunkVBNPS5AK_cjs.PRO_PACKS) > chunkVBNPS5AK_cjs.PRO_PACKS) return null;
10957
+ const prices = chunkVBNPS5AK_cjs.findProPrices(products);
10958
+ const pp = chunkVBNPS5AK_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
10959
10959
  return pp ? { incl: pp.amount, ex: pp.amount_ex_vat, isAnnual } : null;
10960
10960
  }
10961
10961
  function paidLine(payment, addons) {
@@ -10968,11 +10968,11 @@ function ProjectPlanCard({
10968
10968
  onChangePlan
10969
10969
  }) {
10970
10970
  const { quotas, addons } = project;
10971
- const isPro = chunkYNSSIULM_cjs.isProProject(project);
10971
+ const isPro = chunkVBNPS5AK_cjs.isProProject(project);
10972
10972
  const used = quotas?.ai_usage?.used ?? 0;
10973
10973
  const limit = quotas?.ai_usage?.limit ?? 0;
10974
- const resetDate = formatShortDate2(chunkYNSSIULM_cjs.aiUsageResetTimestamp(project));
10975
- const periodEnd = chunkYNSSIULM_cjs.formatPeriodEnd(addons?.period_end ?? project.current_period_end);
10974
+ const resetDate = formatShortDate2(chunkVBNPS5AK_cjs.aiUsageResetTimestamp(project));
10975
+ const periodEnd = chunkVBNPS5AK_cjs.formatPeriodEnd(addons?.period_end ?? project.current_period_end);
10976
10976
  const when2 = periodEnd ?? "the end of the period";
10977
10977
  const storageUsed = quotas?.storage_gb?.used ?? 0;
10978
10978
  const storageLimit = quotas?.storage_gb?.limit ?? 0;
@@ -10988,7 +10988,7 @@ function ProjectPlanCard({
10988
10988
  project.external_id,
10989
10989
  hasScheduledChange && addons ? { packs: packsNext ?? addons.packs, interval: pending ?? currentInterval } : null
10990
10990
  ).data;
10991
- const tier = isPro ? chunkYNSSIULM_cjs.proTierName(project) : project.subscription === "dev" ? "Dev" : "Free";
10991
+ const tier = isPro ? chunkVBNPS5AK_cjs.proTierName(project) : project.subscription === "dev" ? "Dev" : "Free";
10992
10992
  const pendingPayment = addons?.payment?.status === "pending" ? addons.payment : null;
10993
10993
  const confirmUrl = pendingPayment?.confirm_url ?? addons?.confirm_url;
10994
10994
  const paidPayment = addons?.payment?.status === "paid" ? addons.payment : null;
@@ -11022,7 +11022,7 @@ function ProjectPlanCard({
11022
11022
  isPro && " ",
11023
11023
  isPro && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-sm font-normal text-muted-foreground", children: currentInterval === "year" ? "Annual" : "Monthly" })
11024
11024
  ] }),
11025
- 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 ${chunkYNSSIULM_cjs.totalWithTaxWord({
11025
+ 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 ${chunkVBNPS5AK_cjs.totalWithTaxWord({
11026
11026
  subtotal: nextBill.next_renewal_ex_vat_pence,
11027
11027
  tax: nextBill.next_renewal_tax_pence,
11028
11028
  total: nextBill.next_renewal_pence,
@@ -11031,7 +11031,7 @@ function ProjectPlanCard({
11031
11031
  ] }),
11032
11032
  price && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto text-right", "data-testid": "project-plan-price", children: [
11033
11033
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg font-semibold tabular-nums text-foreground", children: [
11034
- price.ex != null ? chunkYNSSIULM_cjs.plusVat(price.ex) : gbp2(price.incl),
11034
+ price.ex != null ? chunkVBNPS5AK_cjs.plusVat(price.ex) : gbp2(price.incl),
11035
11035
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-normal text-muted-foreground", children: price.isAnnual ? "/year" : "/month" })
11036
11036
  ] }),
11037
11037
  price.ex != null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground", children: [
@@ -11069,7 +11069,7 @@ function ProjectPlanCard({
11069
11069
  undoTestId: "undo-plan-change-button",
11070
11070
  children: [
11071
11071
  "Changes to ",
11072
- chunkYNSSIULM_cjs.planNameForPacks(packsNext),
11072
+ chunkVBNPS5AK_cjs.planNameForPacks(packsNext),
11073
11073
  " on ",
11074
11074
  when2,
11075
11075
  "."
@@ -11114,8 +11114,8 @@ function ProjectPlanCard({
11114
11114
  }
11115
11115
  )
11116
11116
  ] }),
11117
- addons?.billing_error && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
11118
- confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanNotice, { testId: "plan-payment-state", children: [
11117
+ addons?.billing_error && /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
11118
+ confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanNotice, { testId: "plan-payment-state", children: [
11119
11119
  "Waiting for your bank",
11120
11120
  pendingPayment?.amount_pence ? ` \xB7 ${gbp2(pendingPayment.amount_pence)}` : "",
11121
11121
  " \xB7",
@@ -11133,7 +11133,7 @@ function ProjectPlanCard({
11133
11133
  ]
11134
11134
  }
11135
11135
  )
11136
- ] }) : paidPayment && addons && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { testId: "plan-payment-state", children: paidLine(paidPayment, addons) }),
11136
+ ] }) : paidPayment && addons && /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { testId: "plan-payment-state", children: paidLine(paidPayment, addons) }),
11137
11137
  isPro && /* @__PURE__ */ jsxRuntime.jsxs(
11138
11138
  "button",
11139
11139
  {
@@ -11160,7 +11160,7 @@ function ProjectBilling({
11160
11160
  const { addons } = project;
11161
11161
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", "data-testid": "project-billing", children: [
11162
11162
  /* @__PURE__ */ jsxRuntime.jsx(ProjectPlanCard, { project, onChangePlan }),
11163
- addons && chunkYNSSIULM_cjs.isProProject(project) && /* @__PURE__ */ jsxRuntime.jsx(ProjectUsageCard, { project, addons })
11163
+ addons && chunkVBNPS5AK_cjs.isProProject(project) && /* @__PURE__ */ jsxRuntime.jsx(ProjectUsageCard, { project, addons })
11164
11164
  ] });
11165
11165
  }
11166
11166
  var BREAKDOWN_LABELS = {
@@ -11291,13 +11291,13 @@ function ProjectUsageContent({
11291
11291
  };
11292
11292
  const quotaPct = effectiveUsage && aiUsageLimit ? Math.round(effectiveUsage.total_spend / aiUsageLimit * 100) : 0;
11293
11293
  return /* @__PURE__ */ jsxRuntime.jsx(
11294
- chunkXGFNZTPO_cjs.UsagePanel,
11294
+ chunkWYOPRJID_cjs.UsagePanel,
11295
11295
  {
11296
11296
  state,
11297
11297
  dateRange,
11298
11298
  emptyMessage: `No usage ${period === "current" ? "yet this month" : "last month"}.`,
11299
11299
  period: /* @__PURE__ */ jsxRuntime.jsx(
11300
- chunkXGFNZTPO_cjs.UsageToggle,
11300
+ chunkWYOPRJID_cjs.UsageToggle,
11301
11301
  {
11302
11302
  ariaLabel: "Period",
11303
11303
  value: period,
@@ -11310,7 +11310,7 @@ function ProjectUsageContent({
11310
11310
  ),
11311
11311
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11312
11312
  effectiveUsage?.invoice_pdf && /* @__PURE__ */ jsxRuntime.jsx(
11313
- chunkXGFNZTPO_cjs.UsageActionButton,
11313
+ chunkWYOPRJID_cjs.UsageActionButton,
11314
11314
  {
11315
11315
  label: "Download Stripe invoice PDF",
11316
11316
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "size-3.5" }),
@@ -11318,7 +11318,7 @@ function ProjectUsageContent({
11318
11318
  }
11319
11319
  ),
11320
11320
  /* @__PURE__ */ jsxRuntime.jsx(
11321
- chunkXGFNZTPO_cjs.UsageActionButton,
11321
+ chunkWYOPRJID_cjs.UsageActionButton,
11322
11322
  {
11323
11323
  label: "Print usage summary",
11324
11324
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Printer, { className: "size-3.5" }),
@@ -11328,7 +11328,7 @@ function ProjectUsageContent({
11328
11328
  ] }),
11329
11329
  children: effectiveUsage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11330
11330
  /* @__PURE__ */ jsxRuntime.jsx(
11331
- chunkXGFNZTPO_cjs.UsageSummary,
11331
+ chunkWYOPRJID_cjs.UsageSummary,
11332
11332
  {
11333
11333
  stats: [
11334
11334
  {
@@ -11336,7 +11336,7 @@ function ProjectUsageContent({
11336
11336
  value: /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: react$1.formatGbp(effectiveUsage.total_spend) }),
11337
11337
  label: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11338
11338
  "AI usage",
11339
- quotaPct > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.UsageQuotaHint, { children: [
11339
+ quotaPct > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.UsageQuotaHint, { children: [
11340
11340
  "(",
11341
11341
  quotaPct,
11342
11342
  "% of quota)"
@@ -11357,7 +11357,7 @@ function ProjectUsageContent({
11357
11357
  }
11358
11358
  ),
11359
11359
  /* @__PURE__ */ jsxRuntime.jsx(
11360
- chunkXGFNZTPO_cjs.UsageToggle,
11360
+ chunkWYOPRJID_cjs.UsageToggle,
11361
11361
  {
11362
11362
  ariaLabel: "Breakdown by",
11363
11363
  size: "fill",
@@ -11370,12 +11370,12 @@ function ProjectUsageContent({
11370
11370
  }
11371
11371
  ),
11372
11372
  /* @__PURE__ */ jsxRuntime.jsx(
11373
- chunkXGFNZTPO_cjs.UsageSection,
11373
+ chunkWYOPRJID_cjs.UsageSection,
11374
11374
  {
11375
- footer: /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.UsageLegend, { series }),
11375
+ footer: /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.UsageLegend, { series }),
11376
11376
  title: `Daily AI usage${breakdown === "model" ? ` by ${BREAKDOWN_LABELS[breakdown]}` : ""}`,
11377
11377
  children: /* @__PURE__ */ jsxRuntime.jsx(
11378
- chunkXGFNZTPO_cjs.UsageLineChart,
11378
+ chunkWYOPRJID_cjs.UsageLineChart,
11379
11379
  {
11380
11380
  dates,
11381
11381
  series,
@@ -11386,12 +11386,12 @@ function ProjectUsageContent({
11386
11386
  }
11387
11387
  ),
11388
11388
  /* @__PURE__ */ jsxRuntime.jsx(
11389
- chunkXGFNZTPO_cjs.UsageSection,
11389
+ chunkWYOPRJID_cjs.UsageSection,
11390
11390
  {
11391
11391
  title: "Breakdown",
11392
11392
  gap: "md",
11393
11393
  action: /* @__PURE__ */ jsxRuntime.jsx(
11394
- chunkXGFNZTPO_cjs.UsageToggle,
11394
+ chunkWYOPRJID_cjs.UsageToggle,
11395
11395
  {
11396
11396
  ariaLabel: "Breakdown metric",
11397
11397
  value: metric,
@@ -11403,7 +11403,7 @@ function ProjectUsageContent({
11403
11403
  }
11404
11404
  ),
11405
11405
  children: /* @__PURE__ */ jsxRuntime.jsx(
11406
- chunkXGFNZTPO_cjs.UsageProportionBar,
11406
+ chunkWYOPRJID_cjs.UsageProportionBar,
11407
11407
  {
11408
11408
  metric,
11409
11409
  items: breakdownItems.map((item) => ({
@@ -11421,13 +11421,13 @@ function ProjectUsageContent({
11421
11421
  );
11422
11422
  }
11423
11423
  function ProjectDetail({ projectExtId, storage }) {
11424
- const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
11424
+ const { stripeEnabled } = chunkVBNPS5AK_cjs.useBillingSupport();
11425
11425
  const [planOpen, setPlanOpen] = react.useState(false);
11426
11426
  const [renameOpen, setRenameOpen] = react.useState(false);
11427
11427
  const [renameValue, setRenameValue] = react.useState("");
11428
11428
  const updateProject = react$1.useUpdateProjectFields();
11429
11429
  const { data: projects, isLoading } = react$1.useProjects();
11430
- const currentUserExtId = chunkYNSSIULM_cjs.useSelfExtId();
11430
+ const currentUserExtId = chunkVBNPS5AK_cjs.useSelfExtId();
11431
11431
  const project = projects?.find((p) => p.external_id === projectExtId);
11432
11432
  const handleSaveRename = react.useCallback(() => {
11433
11433
  const trimmed = renameValue.trim();
@@ -11461,7 +11461,7 @@ function ProjectDetail({ projectExtId, storage }) {
11461
11461
  }
11462
11462
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-6 space-y-6 max-w-4xl", "data-testid": `project-detail-${project.external_id}`, children: [
11463
11463
  /* @__PURE__ */ jsxRuntime.jsx(
11464
- chunkXGFNZTPO_cjs.ProjectDetailHeader,
11464
+ chunkWYOPRJID_cjs.ProjectDetailHeader,
11465
11465
  {
11466
11466
  icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "PROJECT" }),
11467
11467
  name: project.name,
@@ -11469,11 +11469,11 @@ function ProjectDetail({ projectExtId, storage }) {
11469
11469
  setRenameValue(project.name);
11470
11470
  setRenameOpen(true);
11471
11471
  },
11472
- badge: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanBadge, { ...chunkYNSSIULM_cjs.planBadgeView(project), size: "md" }) : void 0
11472
+ badge: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanBadge, { ...chunkVBNPS5AK_cjs.planBadgeView(project), size: "md" }) : void 0
11473
11473
  }
11474
11474
  ),
11475
11475
  hasBilling && /* @__PURE__ */ jsxRuntime.jsx(ProjectBilling, { project, onChangePlan: () => setPlanOpen(true) }),
11476
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.ProjectDetailSection, { title: hasBilling ? "Collaborator limits" : "Plan limits", children: [
11476
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.ProjectDetailSection, { title: hasBilling ? "Collaborator limits" : "Plan limits", children: [
11477
11477
  !hasBilling && /* @__PURE__ */ jsxRuntime.jsx(SubscriptionStatus, { project }),
11478
11478
  /* @__PURE__ */ jsxRuntime.jsxs(
11479
11479
  "div",
@@ -11489,7 +11489,7 @@ function ProjectDetail({ projectExtId, storage }) {
11489
11489
  }
11490
11490
  )
11491
11491
  ] }),
11492
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.ProjectDetailSection, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(
11492
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.ProjectDetailSection, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(
11493
11493
  ProjectUsageContent,
11494
11494
  {
11495
11495
  projectExtId: project.external_id,
@@ -11499,7 +11499,7 @@ function ProjectDetail({ projectExtId, storage }) {
11499
11499
  ) }),
11500
11500
  storage,
11501
11501
  /* @__PURE__ */ jsxRuntime.jsx(
11502
- chunkXGFNZTPO_cjs.RenameDialog,
11502
+ chunkWYOPRJID_cjs.RenameDialog,
11503
11503
  {
11504
11504
  open: renameOpen,
11505
11505
  onClose: () => setRenameOpen(false),
@@ -11514,7 +11514,7 @@ function ProjectDetail({ projectExtId, storage }) {
11514
11514
  ] });
11515
11515
  }
11516
11516
  function createProjectErrorMessage(error, fallback = "Failed to create project") {
11517
- const detail = chunkYNSSIULM_cjs.apiErrorDetail(error);
11517
+ const detail = chunkVBNPS5AK_cjs.apiErrorDetail(error);
11518
11518
  if (typeof detail === "string" && detail) return detail;
11519
11519
  const message = detail?.message;
11520
11520
  return typeof message === "string" && message ? message : fallback;
@@ -11524,7 +11524,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11524
11524
  const [plan, setPlan] = react.useState("pro");
11525
11525
  const [isAnnual, setIsAnnual] = react.useState(false);
11526
11526
  const [promoCode, setPromoCode] = react.useState("");
11527
- const [addonBudget, setAddonBudget] = react.useState(String(chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
11527
+ const [addonBudget, setAddonBudget] = react.useState(String(chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
11528
11528
  const [checkoutBudget, setCheckoutBudget] = react.useState(null);
11529
11529
  const [aiBlocks, setAiBlocks] = react.useState(0);
11530
11530
  const [storageBlocks, setStorageBlocks] = react.useState(0);
@@ -11538,7 +11538,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11538
11538
  const [checkoutProjectName, setCheckoutProjectName] = react.useState("");
11539
11539
  const [checkoutInterval, setCheckoutInterval] = react.useState("month");
11540
11540
  const paymentCompletedRef = react.useRef(false);
11541
- const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
11541
+ const { stripeEnabled } = chunkVBNPS5AK_cjs.useBillingSupport();
11542
11542
  const { data: products, isLoading: productsLoading } = react$1.useProducts({
11543
11543
  enabled: stripeEnabled
11544
11544
  });
@@ -11567,18 +11567,18 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11567
11567
  setPlan("pro");
11568
11568
  setPromoCode("");
11569
11569
  setPostalCode("");
11570
- setAddonBudget(String(chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
11570
+ setAddonBudget(String(chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
11571
11571
  setAiBlocks(0);
11572
11572
  setStorageBlocks(0);
11573
11573
  setIsCreating(false);
11574
11574
  }
11575
11575
  onOpenChange(newOpen);
11576
11576
  };
11577
- const prices = chunkYNSSIULM_cjs.findProPrices(products);
11577
+ const prices = chunkVBNPS5AK_cjs.findProPrices(products);
11578
11578
  const intervalPrice = isAnnual ? prices.annual : prices.monthly;
11579
- const selectedPrice = chunkYNSSIULM_cjs.packPrice(intervalPrice);
11579
+ const selectedPrice = chunkVBNPS5AK_cjs.packPrice(intervalPrice);
11580
11580
  const currency = intervalPrice?.currency ?? "gbp";
11581
- const savingsPercent = chunkYNSSIULM_cjs.calcSavingsPercent(prices.monthly, prices.annual);
11581
+ const savingsPercent = chunkVBNPS5AK_cjs.calcSavingsPercent(prices.monthly, prices.annual);
11582
11582
  const isPro = stripeEnabled && plan !== "free";
11583
11583
  const quote = useCheckoutQuote({
11584
11584
  interval: isAnnual ? "year" : "month",
@@ -11588,14 +11588,14 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11588
11588
  storageBlocks,
11589
11589
  enabled: open && isPro && !!selectedPrice
11590
11590
  });
11591
- const canSubmit = !!projectName.trim() && !isCreating && !createProject.isPending && (!isPro || !!selectedPrice && chunkYNSSIULM_cjs.parseBudgetPounds(addonBudget) !== void 0 && quote.canContinue);
11591
+ const canSubmit = !!projectName.trim() && !isCreating && !createProject.isPending && (!isPro || !!selectedPrice && chunkVBNPS5AK_cjs.parseBudgetPounds(addonBudget) !== void 0 && quote.canContinue);
11592
11592
  const handleCreateFree = () => {
11593
11593
  setIsCreating(true);
11594
11594
  createProject.mutate(
11595
11595
  {
11596
11596
  name: projectName.trim(),
11597
11597
  plan: "free",
11598
- daily_cap_per_user: chunkYNSSIULM_cjs.SUGGESTED_DAILY_CAP_PER_USER
11598
+ daily_cap_per_user: chunkVBNPS5AK_cjs.SUGGESTED_DAILY_CAP_PER_USER
11599
11599
  },
11600
11600
  {
11601
11601
  onSuccess: () => {
@@ -11612,14 +11612,14 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11612
11612
  };
11613
11613
  const handleSubscribe = () => {
11614
11614
  const interval = isAnnual ? "year" : "month";
11615
- const parsed = chunkYNSSIULM_cjs.parseBudgetPounds(addonBudget);
11616
- const budgetToSend = parsed == null || parsed === chunkYNSSIULM_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed;
11615
+ const parsed = chunkVBNPS5AK_cjs.parseBudgetPounds(addonBudget);
11616
+ const budgetToSend = parsed == null || parsed === chunkVBNPS5AK_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed;
11617
11617
  setIsCreating(true);
11618
11618
  createProject.mutate(
11619
11619
  {
11620
11620
  name: projectName.trim(),
11621
11621
  plan: "pro",
11622
- daily_cap_per_user: chunkYNSSIULM_cjs.SUGGESTED_DAILY_CAP_PER_USER
11622
+ daily_cap_per_user: chunkVBNPS5AK_cjs.SUGGESTED_DAILY_CAP_PER_USER
11623
11623
  },
11624
11624
  {
11625
11625
  onSuccess: (newProject) => {
@@ -11660,8 +11660,8 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11660
11660
  description: stripeEnabled ? "Name it and pick a plan." : "Projects group your workspaces.",
11661
11661
  showDescription: true,
11662
11662
  size: "xl",
11663
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanStack, { gap: 5, children: [
11664
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanStack, { gap: 2, children: [
11663
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanStack, { gap: 5, children: [
11664
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanStack, { gap: 2, children: [
11665
11665
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "new-project-name", children: "Name" }),
11666
11666
  /* @__PURE__ */ jsxRuntime.jsx(
11667
11667
  ui.Input,
@@ -11677,16 +11677,16 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11677
11677
  }
11678
11678
  )
11679
11679
  ] }),
11680
- stripeEnabled && (productsLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11681
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanPickerCard, { children: [
11680
+ stripeEnabled && (productsLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11681
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PlanPickerCard, { children: [
11682
11682
  /* @__PURE__ */ jsxRuntime.jsx(
11683
- chunkXGFNZTPO_cjs.PlanPickerHeader,
11683
+ chunkWYOPRJID_cjs.PlanPickerHeader,
11684
11684
  {
11685
11685
  title: "Plan",
11686
11686
  info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
11687
11687
  infoPlacement: "toggle",
11688
11688
  toggle: plan !== "free" ? /* @__PURE__ */ jsxRuntime.jsx(
11689
- chunkXGFNZTPO_cjs.PricingToggle,
11689
+ chunkWYOPRJID_cjs.PricingToggle,
11690
11690
  {
11691
11691
  isAnnual,
11692
11692
  onToggle: () => setIsAnnual(!isAnnual),
@@ -11724,7 +11724,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11724
11724
  currency
11725
11725
  }
11726
11726
  ),
11727
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
11727
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
11728
11728
  /* @__PURE__ */ jsxRuntime.jsx(
11729
11729
  CheckoutCountrySelect,
11730
11730
  {
@@ -11743,10 +11743,10 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11743
11743
  onPostalCodeChange: setPostalCode
11744
11744
  }
11745
11745
  )
11746
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { children: "Pro isn't available right now." }))
11746
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { children: "Pro isn't available right now." }))
11747
11747
  ] })),
11748
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : "Create project" }),
11749
- isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
11748
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : "Create project" }),
11749
+ isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
11750
11750
  ] })
11751
11751
  }
11752
11752
  ),
@@ -11774,7 +11774,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
11774
11774
  function useAutoRefreshPendingProjects() {
11775
11775
  const { data: projects } = react$1.useProjects();
11776
11776
  const refreshProject = react$1.useRefreshProject();
11777
- const currentUserExtId = chunkYNSSIULM_cjs.useSelfExtId();
11777
+ const currentUserExtId = chunkVBNPS5AK_cjs.useSelfExtId();
11778
11778
  const refreshedRef = react.useRef(/* @__PURE__ */ new Set());
11779
11779
  react.useEffect(() => {
11780
11780
  if (!projects || !currentUserExtId) return;
@@ -11820,7 +11820,7 @@ function WorkspaceCardsView({
11820
11820
  createDisabledReason,
11821
11821
  workspaceState
11822
11822
  }) {
11823
- const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
11823
+ const { stripeEnabled } = chunkVBNPS5AK_cjs.useBillingSupport();
11824
11824
  const workspaceLabel = ui.getEntityLabel("WORKSPACE");
11825
11825
  const projectLabel = ui.getEntityLabel("PROJECT").toLowerCase();
11826
11826
  const { groups, projects, selfId } = list;
@@ -11839,7 +11839,7 @@ function WorkspaceCardsView({
11839
11839
  }
11840
11840
  return /* @__PURE__ */ jsxRuntime.jsx(chunk3CUORKDL_cjs.WorkspaceList, { testId: "workspace-cards-list", children: groups.map((group) => {
11841
11841
  const project = projects.find((p) => p.external_id === group.projectExtId);
11842
- const { breakdown, readout } = chunkYNSSIULM_cjs.projectGroupBilling(project, {
11842
+ const { breakdown, readout } = chunkVBNPS5AK_cjs.projectGroupBilling(project, {
11843
11843
  isOwned: group.isOwned,
11844
11844
  stripeEnabled
11845
11845
  });
@@ -11998,7 +11998,7 @@ function useConnectedWorkspaceList({
11998
11998
  [selfId, pinned]
11999
11999
  );
12000
12000
  const filtered = react.useMemo(
12001
- () => chunkXGFNZTPO_cjs.applyTriStateFilters(workspaces, filterMap, attributesOf),
12001
+ () => chunkWYOPRJID_cjs.applyTriStateFilters(workspaces, filterMap, attributesOf),
12002
12002
  [workspaces, filterMap, attributesOf]
12003
12003
  );
12004
12004
  const groups = react.useMemo(
@@ -12063,7 +12063,7 @@ function useConnectedWorkspaceList({
12063
12063
  };
12064
12064
  }
12065
12065
  var WorkspaceTableView = react.lazy(
12066
- () => import('../WorkspaceTableView-VEW6SMZ6.cjs').then((m) => ({ default: m.WorkspaceTableView }))
12066
+ () => import('../WorkspaceTableView-GZHE6S24.cjs').then((m) => ({ default: m.WorkspaceTableView }))
12067
12067
  );
12068
12068
  var WORKSPACES_TAB_ID = "workspaces";
12069
12069
  var defaultRenderMember2 = (user, size) => {
@@ -12115,7 +12115,7 @@ function ConnectedWorkspaceList({
12115
12115
  else void openWorkspace(workspace.external_id, { name: workspace.name });
12116
12116
  };
12117
12117
  const createDisabledReason = list.canCreateProjects === false ? react$1.PROJECT_CREATION_DENIED_REASON : void 0;
12118
- if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkSYTZ3UAU_cjs.LoadingIndicator, { message: "Loading workspaces..." });
12118
+ if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkP7MWWCB3_cjs.LoadingIndicator, { message: "Loading workspaces..." });
12119
12119
  if (list.error) {
12120
12120
  return /* @__PURE__ */ jsxRuntime.jsx(
12121
12121
  chunkOHCYJFV2_cjs.HomeLoadError,
@@ -12188,7 +12188,7 @@ function ConnectedWorkspaceList({
12188
12188
  workspaceState
12189
12189
  }
12190
12190
  ) })
12191
- ) : /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkSYTZ3UAU_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunkOHCYJFV2_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
12191
+ ) : /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkP7MWWCB3_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunkOHCYJFV2_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
12192
12192
  WorkspaceTableView,
12193
12193
  {
12194
12194
  list,
@@ -12234,7 +12234,7 @@ function ConnectedProjectsPanel({
12234
12234
  const { data: projects } = react$1.useProjects();
12235
12235
  const canCreateProjects = react$1.useCanCreateProjects();
12236
12236
  const { userId } = chunkAYKE6USO_cjs.useConnectedWorkspace();
12237
- const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
12237
+ const { stripeEnabled } = chunkVBNPS5AK_cjs.useBillingSupport();
12238
12238
  const billingPortal = useOpenBillingPortal();
12239
12239
  const [newProjectOpen, setNewProjectOpen] = react.useState(false);
12240
12240
  useAutoRefreshPendingProjects();
@@ -12261,15 +12261,15 @@ function ConnectedProjectsPanel({
12261
12261
  [ownedCount, tabs, projects]
12262
12262
  );
12263
12263
  const paidProject = projects?.find(isPaid);
12264
- const panel = /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PanelFrame, { className, testId: "projects-panel", children: [
12265
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
12264
+ const panel = /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PanelFrame, { className, testId: "projects-panel", children: [
12265
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
12266
12266
  chunkMEMWZ72Y_cjs.TabHeader,
12267
12267
  {
12268
12268
  tabs: headerTabs,
12269
12269
  activeTabId: activeProjectId ?? PROJECTS_BASE_TAB_ID,
12270
12270
  onTabChange: (id) => tabs.onSelect(id === PROJECTS_BASE_TAB_ID ? null : id),
12271
12271
  afterTabs: (isCompact) => /* @__PURE__ */ jsxRuntime.jsx(
12272
- chunkXGFNZTPO_cjs.PanelAddButton,
12272
+ chunkWYOPRJID_cjs.PanelAddButton,
12273
12273
  {
12274
12274
  label: "New project",
12275
12275
  onClick: () => setNewProjectOpen(true),
@@ -12284,15 +12284,15 @@ function ConnectedProjectsPanel({
12284
12284
  compactBreakpoint: 360
12285
12285
  }
12286
12286
  ) }),
12287
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PanelScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
12287
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PanelScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
12288
12288
  ProjectDetail,
12289
12289
  {
12290
12290
  projectExtId: activeProjectId,
12291
12291
  storage: projectStorage?.(activeProjectId)
12292
12292
  }
12293
- ) }) : /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PanelScroll, { variant: "padded", children: [
12293
+ ) }) : /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PanelScroll, { variant: "padded", children: [
12294
12294
  /* @__PURE__ */ jsxRuntime.jsx(ProjectsTable, {}),
12295
- stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PanelActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsxs(
12295
+ stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PanelActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsxs(
12296
12296
  ui.Button,
12297
12297
  {
12298
12298
  onClick: () => billingPortal.open(paidProject.external_id),
@@ -13035,7 +13035,7 @@ function recentConversations(conversations) {
13035
13035
  return [...conversations].sort((a, b) => time(b.updated_at) - time(a.updated_at)).slice(0, RECENT_ROWS).map((c) => ({
13036
13036
  id: c.external_id,
13037
13037
  title: c.title?.trim() || "Untitled thread",
13038
- subtitle: c.status ? [chunkAODZXDEE_cjs.STATUS_LABELS[chunkAODZXDEE_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"}`,
13038
+ subtitle: c.status ? [chunkQMEG2BPQ_cjs.STATUS_LABELS[chunkQMEG2BPQ_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"}`,
13039
13039
  time: timeAndDate(c.updated_at)
13040
13040
  }));
13041
13041
  }
@@ -18911,7 +18911,7 @@ var COMPACT_BELOW = 132;
18911
18911
  var NO_DOCUMENTS = [];
18912
18912
  function useFilesWorkspace() {
18913
18913
  const { workspaceId, userId, live } = chunkAYKE6USO_cjs.useConnectedWorkspace();
18914
- const { members, role } = chunkPTSTVYQD_cjs.useConnectedWorkspaceRole();
18914
+ const { members, role } = chunkLSZFVBKG_cjs.useConnectedWorkspaceRole();
18915
18915
  const { data: workspaces } = react$1.useWorkspaces({ enabled: live });
18916
18916
  const workspaceName = workspaces?.find((w) => w.external_id === workspaceId)?.name;
18917
18917
  return {
@@ -20200,9 +20200,9 @@ function ConnectedTagEntity({
20200
20200
  onEditClick();
20201
20201
  }
20202
20202
  };
20203
- const tooltipContent = showTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(chunkSYTZ3UAU_cjs.EntityTooltip, { children: [
20203
+ const tooltipContent = showTooltip ? /* @__PURE__ */ jsxRuntime.jsxs(chunkP7MWWCB3_cjs.EntityTooltip, { children: [
20204
20204
  /* @__PURE__ */ jsxRuntime.jsx(
20205
- chunkSYTZ3UAU_cjs.EntityTooltipHeader,
20205
+ chunkP7MWWCB3_cjs.EntityTooltipHeader,
20206
20206
  {
20207
20207
  lead: /* @__PURE__ */ jsxRuntime.jsx(
20208
20208
  "span",
@@ -22102,7 +22102,7 @@ function useDocumentFilters({
22102
22102
  [documentFilters]
22103
22103
  );
22104
22104
  const baseFilteredDocuments = react.useMemo(
22105
- () => chunkXGFNZTPO_cjs.applyInvertedIndexFilter(documents, documentFilters, invertedIndex, getDocId),
22105
+ () => chunkWYOPRJID_cjs.applyInvertedIndexFilter(documents, documentFilters, invertedIndex, getDocId),
22106
22106
  [documents, documentFilters, invertedIndex]
22107
22107
  );
22108
22108
  const filteredDocuments = react.useMemo(() => {
@@ -23316,7 +23316,7 @@ function ConnectedFieldsManager({
23316
23316
  ) });
23317
23317
  }
23318
23318
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
23319
- /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.DraggableHeader, { children: [
23319
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.DraggableHeader, { children: [
23320
23320
  /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldsManagerTitle, { title, className: "px-4 pt-3.5 pb-2" }),
23321
23321
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3", children: tabHeader })
23322
23322
  ] }),
@@ -24353,7 +24353,7 @@ function ConnectedFilesPage({
24353
24353
  const deleteDocuments = react$1.useDeleteDocuments();
24354
24354
  const isDocumentsPending = isLoading && documents.length === 0;
24355
24355
  const { workspaceId, userId, live } = chunkAYKE6USO_cjs.useConnectedWorkspace();
24356
- const { role, members } = chunkPTSTVYQD_cjs.useConnectedWorkspaceRole();
24356
+ const { role, members } = chunkLSZFVBKG_cjs.useConnectedWorkspaceRole();
24357
24357
  const { data: workspaces } = react$1.useWorkspaces({ enabled: live });
24358
24358
  const workspaceName = workspaces?.find((w) => w.external_id === workspaceId)?.name;
24359
24359
  const isMember = role != null;
@@ -24750,7 +24750,7 @@ function ConnectedFilesPage({
24750
24750
  viewMode === "grid" ? (
24751
24751
  // ‹ n / N › over the table's displayed rows; a step opens the document.
24752
24752
  /* @__PURE__ */ jsxRuntime.jsx(
24753
- chunkSYTZ3UAU_cjs.GridRowNavigator,
24753
+ chunkP7MWWCB3_cjs.GridRowNavigator,
24754
24754
  {
24755
24755
  gridApi,
24756
24756
  selectedId: viewingDocumentId ?? selectedDocumentIds[0] ?? null,
@@ -25747,7 +25747,7 @@ function ConnectedMessenger({
25747
25747
  ) : null;
25748
25748
  const emptyState = isLoading ? "Loading conversations\u2026" : "No one to message yet \u2014 invite a colleague above.";
25749
25749
  if (!activeId) {
25750
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PanelFrame, { testId: "dm-messenger", children: [
25750
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PanelFrame, { testId: "dm-messenger", children: [
25751
25751
  /* @__PURE__ */ jsxRuntime.jsx(
25752
25752
  react$1.ConversationList,
25753
25753
  {
@@ -25777,7 +25777,7 @@ function ConnectedMessenger({
25777
25777
  const groupChat = activeIsGroup ? active.chat : null;
25778
25778
  const groupTitle = active?.title ?? null;
25779
25779
  const presence = activePeer ? host.presenceOf?.(activePeer.external_id) : void 0;
25780
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PanelFrame, { testId: "dm-messenger", children: [
25780
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkWYOPRJID_cjs.PanelFrame, { testId: "dm-messenger", children: [
25781
25781
  groupChat ? /* @__PURE__ */ jsxRuntime.jsx(
25782
25782
  chunkU7OUZHBH_cjs.DmThreadHeader,
25783
25783
  {
@@ -25826,7 +25826,7 @@ function ConnectedMessenger({
25826
25826
  groupChat.external_id
25827
25827
  ) : null,
25828
25828
  peoplePicker,
25829
- /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PanelFrameBody, { className: "flex flex-col overflow-visible", children: active ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedChatThread, { chat: active.chat, peer: activePeer, host }, activeId) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-4 text-sm text-muted-foreground", children: isLoading ? "Loading conversation\u2026" : "This conversation is no longer available." }) })
25829
+ /* @__PURE__ */ jsxRuntime.jsx(chunkWYOPRJID_cjs.PanelFrameBody, { className: "flex flex-col overflow-visible", children: active ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedChatThread, { chat: active.chat, peer: activePeer, host }, activeId) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-4 text-sm text-muted-foreground", children: isLoading ? "Loading conversation\u2026" : "This conversation is no longer available." }) })
25830
25830
  ] });
25831
25831
  }
25832
25832
  function ActiveChat({ agentId, workspaceId }) {
@@ -25898,55 +25898,55 @@ function ConnectedAgentChatPanel({
25898
25898
 
25899
25899
  Object.defineProperty(exports, "CAP_REACHED_MESSAGE", {
25900
25900
  enumerable: true,
25901
- get: function () { return chunkYNSSIULM_cjs.CAP_REACHED_MESSAGE; }
25901
+ get: function () { return chunkVBNPS5AK_cjs.CAP_REACHED_MESSAGE; }
25902
25902
  });
25903
25903
  Object.defineProperty(exports, "ZERO_BUDGET_MESSAGE", {
25904
25904
  enumerable: true,
25905
- get: function () { return chunkYNSSIULM_cjs.ZERO_BUDGET_MESSAGE; }
25905
+ get: function () { return chunkVBNPS5AK_cjs.ZERO_BUDGET_MESSAGE; }
25906
25906
  });
25907
25907
  Object.defineProperty(exports, "aiUsageResetTimestamp", {
25908
25908
  enumerable: true,
25909
- get: function () { return chunkYNSSIULM_cjs.aiUsageResetTimestamp; }
25909
+ get: function () { return chunkVBNPS5AK_cjs.aiUsageResetTimestamp; }
25910
25910
  });
25911
25911
  Object.defineProperty(exports, "formatMoney", {
25912
25912
  enumerable: true,
25913
- get: function () { return chunkYNSSIULM_cjs.formatMoney; }
25913
+ get: function () { return chunkVBNPS5AK_cjs.formatMoney; }
25914
25914
  });
25915
25915
  Object.defineProperty(exports, "formatResetDate", {
25916
25916
  enumerable: true,
25917
- get: function () { return chunkYNSSIULM_cjs.formatResetDate; }
25917
+ get: function () { return chunkVBNPS5AK_cjs.formatResetDate; }
25918
25918
  });
25919
25919
  Object.defineProperty(exports, "getQuotaItems", {
25920
25920
  enumerable: true,
25921
- get: function () { return chunkYNSSIULM_cjs.getQuotaItems; }
25921
+ get: function () { return chunkVBNPS5AK_cjs.getQuotaItems; }
25922
25922
  });
25923
25923
  Object.defineProperty(exports, "isAddonBudgetZero", {
25924
25924
  enumerable: true,
25925
- get: function () { return chunkYNSSIULM_cjs.isAddonBudgetZero; }
25925
+ get: function () { return chunkVBNPS5AK_cjs.isAddonBudgetZero; }
25926
25926
  });
25927
25927
  Object.defineProperty(exports, "isProProject", {
25928
25928
  enumerable: true,
25929
- get: function () { return chunkYNSSIULM_cjs.isProProject; }
25929
+ get: function () { return chunkVBNPS5AK_cjs.isProProject; }
25930
25930
  });
25931
25931
  Object.defineProperty(exports, "planBadgeView", {
25932
25932
  enumerable: true,
25933
- get: function () { return chunkYNSSIULM_cjs.planBadgeView; }
25933
+ get: function () { return chunkVBNPS5AK_cjs.planBadgeView; }
25934
25934
  });
25935
25935
  Object.defineProperty(exports, "planName", {
25936
25936
  enumerable: true,
25937
- get: function () { return chunkYNSSIULM_cjs.planName; }
25937
+ get: function () { return chunkVBNPS5AK_cjs.planName; }
25938
25938
  });
25939
25939
  Object.defineProperty(exports, "projectGroupBilling", {
25940
25940
  enumerable: true,
25941
- get: function () { return chunkYNSSIULM_cjs.projectGroupBilling; }
25941
+ get: function () { return chunkVBNPS5AK_cjs.projectGroupBilling; }
25942
25942
  });
25943
25943
  Object.defineProperty(exports, "useBillingSupport", {
25944
25944
  enumerable: true,
25945
- get: function () { return chunkYNSSIULM_cjs.useBillingSupport; }
25945
+ get: function () { return chunkVBNPS5AK_cjs.useBillingSupport; }
25946
25946
  });
25947
25947
  Object.defineProperty(exports, "useRewardBalance", {
25948
25948
  enumerable: true,
25949
- get: function () { return chunkYNSSIULM_cjs.useRewardBalance; }
25949
+ get: function () { return chunkVBNPS5AK_cjs.useRewardBalance; }
25950
25950
  });
25951
25951
  Object.defineProperty(exports, "ConnectedAssistantDock", {
25952
25952
  enumerable: true,
@@ -25982,43 +25982,43 @@ Object.defineProperty(exports, "useWorkspaceDocs", {
25982
25982
  });
25983
25983
  Object.defineProperty(exports, "ConnectedWorkflowDocumentsField", {
25984
25984
  enumerable: true,
25985
- get: function () { return chunkPTSTVYQD_cjs.ConnectedWorkflowDocumentsField; }
25985
+ get: function () { return chunkLSZFVBKG_cjs.ConnectedWorkflowDocumentsField; }
25986
25986
  });
25987
25987
  Object.defineProperty(exports, "ConnectedWorkflowLauncher", {
25988
25988
  enumerable: true,
25989
- get: function () { return chunkPTSTVYQD_cjs.ConnectedWorkflowLauncher; }
25989
+ get: function () { return chunkLSZFVBKG_cjs.ConnectedWorkflowLauncher; }
25990
25990
  });
25991
25991
  Object.defineProperty(exports, "ConnectedWorkflowsTable", {
25992
25992
  enumerable: true,
25993
- get: function () { return chunkPTSTVYQD_cjs.ConnectedWorkflowsTable; }
25993
+ get: function () { return chunkLSZFVBKG_cjs.ConnectedWorkflowsTable; }
25994
25994
  });
25995
25995
  Object.defineProperty(exports, "DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS", {
25996
25996
  enumerable: true,
25997
- get: function () { return chunkPTSTVYQD_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
25997
+ get: function () { return chunkLSZFVBKG_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
25998
25998
  });
25999
25999
  Object.defineProperty(exports, "toWorkflowFieldDocument", {
26000
26000
  enumerable: true,
26001
- get: function () { return chunkPTSTVYQD_cjs.toWorkflowFieldDocument; }
26001
+ get: function () { return chunkLSZFVBKG_cjs.toWorkflowFieldDocument; }
26002
26002
  });
26003
26003
  Object.defineProperty(exports, "useConnectedAgentOptions", {
26004
26004
  enumerable: true,
26005
- get: function () { return chunkPTSTVYQD_cjs.useConnectedAgentOptions; }
26005
+ get: function () { return chunkLSZFVBKG_cjs.useConnectedAgentOptions; }
26006
26006
  });
26007
26007
  Object.defineProperty(exports, "useConnectedWorkflowScopeSource", {
26008
26008
  enumerable: true,
26009
- get: function () { return chunkPTSTVYQD_cjs.useConnectedWorkflowScopeSource; }
26009
+ get: function () { return chunkLSZFVBKG_cjs.useConnectedWorkflowScopeSource; }
26010
26010
  });
26011
26011
  Object.defineProperty(exports, "useConnectedWorkspaceRole", {
26012
26012
  enumerable: true,
26013
- get: function () { return chunkPTSTVYQD_cjs.useConnectedWorkspaceRole; }
26013
+ get: function () { return chunkLSZFVBKG_cjs.useConnectedWorkspaceRole; }
26014
26014
  });
26015
26015
  Object.defineProperty(exports, "useDocxCommentTarget", {
26016
26016
  enumerable: true,
26017
- get: function () { return chunkPTSTVYQD_cjs.useDocxCommentTarget; }
26017
+ get: function () { return chunkLSZFVBKG_cjs.useDocxCommentTarget; }
26018
26018
  });
26019
26019
  Object.defineProperty(exports, "useNativeDocxSupport", {
26020
26020
  enumerable: true,
26021
- get: function () { return chunkPTSTVYQD_cjs.useNativeDocxSupport; }
26021
+ get: function () { return chunkLSZFVBKG_cjs.useNativeDocxSupport; }
26022
26022
  });
26023
26023
  Object.defineProperty(exports, "ConnectedDocumentToolsProvider", {
26024
26024
  enumerable: true,