@arbidocs/blocks 0.4.157 → 0.4.159

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 (127) hide show
  1. package/dist/{ConnectedNativeDocxComparison-S25BPUH5.cjs → ConnectedNativeDocxComparison-R6RU5TZE.cjs} +8 -7
  2. package/dist/{ConnectedNativeDocxComparison-S25BPUH5.cjs.map → ConnectedNativeDocxComparison-R6RU5TZE.cjs.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-2PLOOXSH.js → ConnectedNativeDocxComparison-XMZ5KLD4.js} +7 -6
  4. package/dist/{ConnectedNativeDocxComparison-2PLOOXSH.js.map → ConnectedNativeDocxComparison-XMZ5KLD4.js.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-YA4HWLY4.cjs → ConnectedNativeDocxEditor-LBATSM3M.cjs} +7 -6
  6. package/dist/{ConnectedNativeDocxEditor-YA4HWLY4.cjs.map → ConnectedNativeDocxEditor-LBATSM3M.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-JJAGMHZC.js → ConnectedNativeDocxEditor-NGUK2AX6.js} +5 -4
  8. package/dist/{ConnectedNativeDocxEditor-JJAGMHZC.js.map → ConnectedNativeDocxEditor-NGUK2AX6.js.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-EXYZAU4Y.cjs → ConnectedStreamedWordArtifact-CWFR6A37.cjs} +8 -7
  10. package/dist/ConnectedStreamedWordArtifact-CWFR6A37.cjs.map +1 -0
  11. package/dist/{ConnectedStreamedWordArtifact-YAAXY5KY.js → ConnectedStreamedWordArtifact-IXRJ7MUE.js} +7 -6
  12. package/dist/{ConnectedStreamedWordArtifact-YAAXY5KY.js.map → ConnectedStreamedWordArtifact-IXRJ7MUE.js.map} +1 -1
  13. package/dist/{NativeDocxEditor-M3I776GD.cjs → NativeDocxEditor-T2PJIZMU.cjs} +9 -7
  14. package/dist/{NativeDocxEditor-M3I776GD.cjs.map → NativeDocxEditor-T2PJIZMU.cjs.map} +1 -1
  15. package/dist/{NativeDocxEditor-JBQMH3MP.js → NativeDocxEditor-TBTBD6TC.js} +5 -3
  16. package/dist/{NativeDocxEditor-JBQMH3MP.js.map → NativeDocxEditor-TBTBD6TC.js.map} +1 -1
  17. package/dist/{WorkspaceTableView-5OWX53R5.js → WorkspaceTableView-DWUE4VQF.js} +19 -9
  18. package/dist/WorkspaceTableView-DWUE4VQF.js.map +1 -0
  19. package/dist/{WorkspaceTableView-ZFMAYHUD.cjs → WorkspaceTableView-EYLEUZZT.cjs} +21 -11
  20. package/dist/WorkspaceTableView-EYLEUZZT.cjs.map +1 -0
  21. package/dist/{chunk-IJEISII2.cjs → chunk-2BHDRVVL.cjs} +17 -7
  22. package/dist/chunk-2BHDRVVL.cjs.map +1 -0
  23. package/dist/chunk-2R3GGNPA.js +151 -0
  24. package/dist/chunk-2R3GGNPA.js.map +1 -0
  25. package/dist/{chunk-F3EZDBDJ.js → chunk-3OCNUKGX.js} +4 -4
  26. package/dist/{chunk-F3EZDBDJ.js.map → chunk-3OCNUKGX.js.map} +1 -1
  27. package/dist/{chunk-D3WFIFRY.cjs → chunk-3VW7ZXQ6.cjs} +211 -5
  28. package/dist/chunk-3VW7ZXQ6.cjs.map +1 -0
  29. package/dist/{chunk-JSQEAPTC.cjs → chunk-4GITK3Q5.cjs} +398 -75
  30. package/dist/chunk-4GITK3Q5.cjs.map +1 -0
  31. package/dist/{chunk-2CWM2CFZ.js → chunk-7UENVUA6.js} +4 -4
  32. package/dist/{chunk-2CWM2CFZ.js.map → chunk-7UENVUA6.js.map} +1 -1
  33. package/dist/{chunk-EWCJXUBP.js → chunk-AVXRXPII.js} +3 -3
  34. package/dist/{chunk-EWCJXUBP.js.map → chunk-AVXRXPII.js.map} +1 -1
  35. package/dist/{chunk-7IRSCMNK.js → chunk-BGXWPVHR.js} +3 -3
  36. package/dist/{chunk-7IRSCMNK.js.map → chunk-BGXWPVHR.js.map} +1 -1
  37. package/dist/chunk-DAN7EJ4O.js +482 -0
  38. package/dist/chunk-DAN7EJ4O.js.map +1 -0
  39. package/dist/chunk-E4H5H2C3.cjs +18 -0
  40. package/dist/{chunk-OTU5KGQ6.cjs.map → chunk-E4H5H2C3.cjs.map} +1 -1
  41. package/dist/{chunk-VY4UFXTM.cjs → chunk-ETJFC6MO.cjs} +4 -4
  42. package/dist/{chunk-VY4UFXTM.cjs.map → chunk-ETJFC6MO.cjs.map} +1 -1
  43. package/dist/{chunk-TQIY2SVY.cjs → chunk-GFVIFXWT.cjs} +5 -5
  44. package/dist/{chunk-TQIY2SVY.cjs.map → chunk-GFVIFXWT.cjs.map} +1 -1
  45. package/dist/chunk-JPWPR6QU.cjs +485 -0
  46. package/dist/chunk-JPWPR6QU.cjs.map +1 -0
  47. package/dist/{chunk-KQYPP72K.js → chunk-JTJCCL2E.js} +212 -9
  48. package/dist/chunk-JTJCCL2E.js.map +1 -0
  49. package/dist/{chunk-PGOSIJ2I.js → chunk-KFMRBZQK.js} +15 -5
  50. package/dist/chunk-KFMRBZQK.js.map +1 -0
  51. package/dist/chunk-NMZI3K6R.cjs +159 -0
  52. package/dist/chunk-NMZI3K6R.cjs.map +1 -0
  53. package/dist/{chunk-53RCZPMR.cjs → chunk-P2YM67Y5.cjs} +5 -5
  54. package/dist/{chunk-53RCZPMR.cjs.map → chunk-P2YM67Y5.cjs.map} +1 -1
  55. package/dist/chunk-Q2XGM372.cjs +18 -0
  56. package/dist/{chunk-S74QMZVZ.cjs.map → chunk-Q2XGM372.cjs.map} +1 -1
  57. package/dist/{chunk-7HHYMDPE.js → chunk-RATEAOKT.js} +3 -3
  58. package/dist/{chunk-7HHYMDPE.js.map → chunk-RATEAOKT.js.map} +1 -1
  59. package/dist/{chunk-SN2GZ4ZM.cjs → chunk-TQUYWUEE.cjs} +10 -156
  60. package/dist/chunk-TQUYWUEE.cjs.map +1 -0
  61. package/dist/{chunk-ONTUMV74.js → chunk-XER3JLC7.js} +398 -78
  62. package/dist/chunk-XER3JLC7.js.map +1 -0
  63. package/dist/{chunk-HP2C4MD3.js → chunk-ZDOKJD44.js} +4 -143
  64. package/dist/chunk-ZDOKJD44.js.map +1 -0
  65. package/dist/connect/docx.cjs +11 -10
  66. package/dist/connect/docx.js +7 -6
  67. package/dist/connect/index.cjs +406 -384
  68. package/dist/connect/index.cjs.map +1 -1
  69. package/dist/connect/index.js +69 -47
  70. package/dist/connect/index.js.map +1 -1
  71. package/dist/connect/viewer.cjs +41 -20
  72. package/dist/connect/viewer.cjs.map +1 -1
  73. package/dist/connect/viewer.js +29 -8
  74. package/dist/connect/viewer.js.map +1 -1
  75. package/dist/connection/viewer/ViewerPdfPane.d.ts +7 -1
  76. package/dist/connection/workspace-list/ConnectedWorkspaceList.d.ts +4 -2
  77. package/dist/connection/workspace-list/WorkspaceCardsView.d.ts +3 -2
  78. package/dist/connection/workspace-list/WorkspaceTableView.d.ts +3 -2
  79. package/dist/connection/workspace-list/index.d.ts +1 -1
  80. package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +19 -0
  81. package/dist/connection/workspace-list/workspaceTable.d.ts +3 -1
  82. package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +3 -1
  83. package/dist/document-tools/AdoptSignatureDialog.d.ts +39 -4
  84. package/dist/document-tools/PlaceMySignatureButton.d.ts +16 -0
  85. package/dist/document-tools/SavedSignatureSettings.d.ts +10 -0
  86. package/dist/document-tools/index.cjs +37 -22
  87. package/dist/document-tools/index.d.ts +2 -0
  88. package/dist/document-tools/index.js +5 -2
  89. package/dist/document-tools/viewer/AnnotatedPdfViewer.d.ts +10 -1
  90. package/dist/document-tools/viewer/SignatureRequestEditor.d.ts +7 -4
  91. package/dist/document-tools/viewer/index.cjs +184 -18
  92. package/dist/document-tools/viewer/index.cjs.map +1 -1
  93. package/dist/document-tools/viewer/index.js +184 -18
  94. package/dist/document-tools/viewer/index.js.map +1 -1
  95. package/dist/docx/NativeDocxEditor.d.ts +5 -0
  96. package/dist/docx/index.cjs +61 -47
  97. package/dist/docx/index.d.ts +1 -0
  98. package/dist/docx/index.js +5 -3
  99. package/dist/docx/signatures/SignatureFields.d.ts +50 -0
  100. package/dist/settings/index.cjs +183 -182
  101. package/dist/settings/index.js +2 -1
  102. package/node_modules/@arbidocs/coedit/dist/commands.cjs +109 -16
  103. package/node_modules/@arbidocs/coedit/dist/commands.cjs.map +1 -1
  104. package/node_modules/@arbidocs/coedit/dist/commands.d.cts +84 -1
  105. package/node_modules/@arbidocs/coedit/dist/commands.d.ts +84 -1
  106. package/node_modules/@arbidocs/coedit/dist/commands.js +99 -17
  107. package/node_modules/@arbidocs/coedit/dist/commands.js.map +1 -1
  108. package/node_modules/@arbidocs/coedit/package.json +1 -1
  109. package/package.json +5 -5
  110. package/src/docx/styles.css +50 -0
  111. package/dist/ConnectedStreamedWordArtifact-EXYZAU4Y.cjs.map +0 -1
  112. package/dist/WorkspaceTableView-5OWX53R5.js.map +0 -1
  113. package/dist/WorkspaceTableView-ZFMAYHUD.cjs.map +0 -1
  114. package/dist/chunk-6MG62I5B.cjs +0 -272
  115. package/dist/chunk-6MG62I5B.cjs.map +0 -1
  116. package/dist/chunk-D3WFIFRY.cjs.map +0 -1
  117. package/dist/chunk-EQB3WELX.js +0 -269
  118. package/dist/chunk-EQB3WELX.js.map +0 -1
  119. package/dist/chunk-HP2C4MD3.js.map +0 -1
  120. package/dist/chunk-IJEISII2.cjs.map +0 -1
  121. package/dist/chunk-JSQEAPTC.cjs.map +0 -1
  122. package/dist/chunk-KQYPP72K.js.map +0 -1
  123. package/dist/chunk-ONTUMV74.js.map +0 -1
  124. package/dist/chunk-OTU5KGQ6.cjs +0 -18
  125. package/dist/chunk-PGOSIJ2I.js.map +0 -1
  126. package/dist/chunk-S74QMZVZ.cjs +0 -18
  127. package/dist/chunk-SN2GZ4ZM.cjs.map +0 -1
@@ -1,23 +1,25 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk53RCZPMR_cjs = require('../chunk-53RCZPMR.cjs');
4
+ var chunkP2YM67Y5_cjs = require('../chunk-P2YM67Y5.cjs');
5
5
  var chunkMSFQDELO_cjs = require('../chunk-MSFQDELO.cjs');
6
6
  var chunkJUUOJP7I_cjs = require('../chunk-JUUOJP7I.cjs');
7
7
  var chunkOOU4QLRK_cjs = require('../chunk-OOU4QLRK.cjs');
8
8
  var chunkOU3RGQFX_cjs = require('../chunk-OU3RGQFX.cjs');
9
9
  require('../chunk-REH7PX3N.cjs');
10
- var chunkSN2GZ4ZM_cjs = require('../chunk-SN2GZ4ZM.cjs');
10
+ var chunkTQUYWUEE_cjs = require('../chunk-TQUYWUEE.cjs');
11
11
  var chunkKBO75NLM_cjs = require('../chunk-KBO75NLM.cjs');
12
- var chunkIJEISII2_cjs = require('../chunk-IJEISII2.cjs');
12
+ var chunk2BHDRVVL_cjs = require('../chunk-2BHDRVVL.cjs');
13
13
  var chunk6I6CVX5G_cjs = require('../chunk-6I6CVX5G.cjs');
14
14
  var chunkQJFJ5JBF_cjs = require('../chunk-QJFJ5JBF.cjs');
15
15
  require('../chunk-223D4727.cjs');
16
16
  var chunkCB4TIDEX_cjs = require('../chunk-CB4TIDEX.cjs');
17
17
  var chunkFM3IRQJW_cjs = require('../chunk-FM3IRQJW.cjs');
18
18
  var chunkJH6JTI76_cjs = require('../chunk-JH6JTI76.cjs');
19
+ var chunkNMZI3K6R_cjs = require('../chunk-NMZI3K6R.cjs');
19
20
  require('../chunk-464YPRAE.cjs');
20
- require('../chunk-JSQEAPTC.cjs');
21
+ require('../chunk-4GITK3Q5.cjs');
22
+ require('../chunk-JPWPR6QU.cjs');
21
23
  var chunkB3FMUFAW_cjs = require('../chunk-B3FMUFAW.cjs');
22
24
  var chunk2WLXQGWC_cjs = require('../chunk-2WLXQGWC.cjs');
23
25
  var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
@@ -592,7 +594,7 @@ function NotificationCenter({
592
594
  }
593
595
  ];
594
596
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full bg-background", "data-testid": "notifications-page", children: [
595
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
597
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
596
598
  chunk7RGLTF76_cjs.TabHeader,
597
599
  {
598
600
  tabs,
@@ -1652,7 +1654,7 @@ function ConnectedTaskActivityDialog({
1652
1654
  const activity = react$1.useConversationActivity(conversationId, { live });
1653
1655
  const { data: agents = [] } = react$1.useAgents();
1654
1656
  const { userId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
1655
- const { members } = chunkIJEISII2_cjs.useConnectedWorkspaceRole();
1657
+ const { members } = chunk2BHDRVVL_cjs.useConnectedWorkspaceRole();
1656
1658
  const renderPerson = react.useCallback(
1657
1659
  (id) => {
1658
1660
  const isMe = !!id && id === userId;
@@ -2129,7 +2131,7 @@ function WorkflowWordDialog({
2129
2131
  title: title ?? labels.wordTitle,
2130
2132
  size: "xl",
2131
2133
  testId: "workflow-word-dialog",
2132
- children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunkIJEISII2_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2134
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunkULWRNGGE_cjs.ModalScaffold.Body, { className: "h-[70dvh] p-0", children: /* @__PURE__ */ jsxRuntime.jsx(chunk2BHDRVVL_cjs.ConnectedNativeDocxEditor, { documentId: id, title: title ?? labels.wordTitle }) })
2133
2135
  }
2134
2136
  );
2135
2137
  }
@@ -2655,10 +2657,10 @@ function cascadeTagCombination(tags, previous, next) {
2655
2657
  function tagCombinationMatches(combination, items) {
2656
2658
  if (!isCombining(combination)) return void 0;
2657
2659
  const pass = (list) => new Set(
2658
- chunkSN2GZ4ZM_cjs.applyInvertedIndexFilter(
2660
+ chunkTQUYWUEE_cjs.applyInvertedIndexFilter(
2659
2661
  [...list],
2660
2662
  combination,
2661
- chunkSN2GZ4ZM_cjs.buildInvertedIndex(
2663
+ chunkTQUYWUEE_cjs.buildInvertedIndex(
2662
2664
  [...list],
2663
2665
  (item) => item.id,
2664
2666
  (item) => item.tagIds
@@ -3015,7 +3017,7 @@ function TagFilterChips({
3015
3017
  const name = (id) => tags.find((t) => t.external_id === id)?.name ?? id;
3016
3018
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-1.5", "data-testid": "tags-filter-chips", children: [
3017
3019
  set.map(([id, state]) => /* @__PURE__ */ jsxRuntime.jsx(
3018
- chunkSN2GZ4ZM_cjs.FilterChip,
3020
+ chunkTQUYWUEE_cjs.FilterChip,
3019
3021
  {
3020
3022
  label: name(id),
3021
3023
  state,
@@ -4276,10 +4278,10 @@ function useFactFilters(notes, view, chat) {
4276
4278
  const factFilters = view.filters;
4277
4279
  const setFactFilters = view.setFilters;
4278
4280
  const quickFilteredNotes = react.useMemo(
4279
- () => chunkSN2GZ4ZM_cjs.applyInvertedIndexFilter(
4281
+ () => chunkTQUYWUEE_cjs.applyInvertedIndexFilter(
4280
4282
  notes,
4281
4283
  factFilters,
4282
- chunkSN2GZ4ZM_cjs.buildInvertedIndex(
4284
+ chunkTQUYWUEE_cjs.buildInvertedIndex(
4283
4285
  notes,
4284
4286
  (f) => f.external_id,
4285
4287
  (f) => Object.entries(getFactFilterAttributes(f)).filter(([id, on]) => on && factFilterIds.includes(id)).map(([id]) => id)
@@ -5373,13 +5375,13 @@ function ConnectedProfileCard({
5373
5375
  }
5374
5376
  });
5375
5377
  const display = profile?.fullName || "Unnamed";
5376
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
5378
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserCircle, {}), title, children: [
5377
5379
  /* @__PURE__ */ jsxRuntime.jsx(
5378
- chunkSN2GZ4ZM_cjs.ProfileCard,
5380
+ chunkTQUYWUEE_cjs.ProfileCard,
5379
5381
  {
5380
5382
  avatar: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5381
5383
  /* @__PURE__ */ jsxRuntime.jsx(
5382
- chunkSN2GZ4ZM_cjs.AvatarPicker,
5384
+ chunkTQUYWUEE_cjs.AvatarPicker,
5383
5385
  {
5384
5386
  pictureUrl: profile?.picture,
5385
5387
  initials: chunkKDG6FER6_cjs.initials(display),
@@ -5426,9 +5428,9 @@ function ConnectedIdentityVerification({
5426
5428
  onNameAccepted: () => notify14("Name updated to match your ID", "success")
5427
5429
  });
5428
5430
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5429
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
5431
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
5430
5432
  /* @__PURE__ */ jsxRuntime.jsx(
5431
- chunkSN2GZ4ZM_cjs.IdentityVerificationDialog,
5433
+ chunkTQUYWUEE_cjs.IdentityVerificationDialog,
5432
5434
  {
5433
5435
  flow,
5434
5436
  accountName: profile?.fullName ?? "",
@@ -5441,7 +5443,7 @@ function ConnectedIdentityVerification({
5441
5443
  function ConnectedRequireVerified({ children, labels }) {
5442
5444
  const { data: profile } = react$1.useProfile();
5443
5445
  const flow = react$1.useIdentityVerification();
5444
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
5446
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.RequireVerified, { flow, accountName: profile?.fullName ?? "", labels, children });
5445
5447
  }
5446
5448
  function defaultUnmetPasswordRequirement(password) {
5447
5449
  if (password.length < 8) return "Minimum 8 characters";
@@ -5474,7 +5476,7 @@ function ConnectedPasswordChangeDialog({
5474
5476
  onRecoveryComplete
5475
5477
  });
5476
5478
  return /* @__PURE__ */ jsxRuntime.jsx(
5477
- chunkSN2GZ4ZM_cjs.PasswordChangeDialog,
5479
+ chunkTQUYWUEE_cjs.PasswordChangeDialog,
5478
5480
  {
5479
5481
  open,
5480
5482
  onClose: form.onCancel,
@@ -5500,10 +5502,10 @@ function ConnectedSecuritySection({
5500
5502
  children
5501
5503
  }) {
5502
5504
  const [open, setOpen] = react.useState(false);
5503
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), title: "Security", children: [
5504
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsCard, { padding: "sm", children: [
5505
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRound, {}), title: "Security", children: [
5506
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsCard, { padding: "sm", children: [
5505
5507
  /* @__PURE__ */ jsxRuntime.jsx(
5506
- chunkSN2GZ4ZM_cjs.SettingsActionRow,
5508
+ chunkNMZI3K6R_cjs.SettingsActionRow,
5507
5509
  {
5508
5510
  title: "Change password",
5509
5511
  description: "Used to sign in and to unlock your account key. Changing it keeps everything readable and re-encrypts nothing.",
@@ -5524,23 +5526,23 @@ function ConnectedSecuritySection({
5524
5526
  ] });
5525
5527
  }
5526
5528
  function ConnectedNotificationPreferences({
5527
- categories = chunkSN2GZ4ZM_cjs.EMAIL_NOTIFICATION_CATEGORIES,
5529
+ categories = chunkTQUYWUEE_cjs.EMAIL_NOTIFICATION_CATEGORIES,
5528
5530
  title = "Notifications"
5529
5531
  }) {
5530
5532
  const keys = react.useMemo(
5531
- () => categories === chunkSN2GZ4ZM_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkSN2GZ4ZM_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
5533
+ () => categories === chunkTQUYWUEE_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkTQUYWUEE_cjs.EMAIL_NOTIFICATION_KEYS : categories.map((c) => c.key),
5532
5534
  [categories]
5533
5535
  );
5534
5536
  const prefs = react$1.useNotificationPreferences(keys);
5535
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
5536
- chunkSN2GZ4ZM_cjs.NotificationCategoryList,
5537
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsSection, { title, children: /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
5538
+ chunkTQUYWUEE_cjs.NotificationCategoryList,
5537
5539
  {
5538
5540
  masterId: "emailNotifications",
5539
5541
  masterTitle: "Email Notifications",
5540
5542
  masterDescription: "Email me about activity when I\u2019m away",
5541
5543
  masterChecked: prefs.masterChecked,
5542
5544
  onMasterChange: prefs.setAll,
5543
- categories: chunkSN2GZ4ZM_cjs.toNotificationCategories(prefs.checked, categories),
5545
+ categories: chunkTQUYWUEE_cjs.toNotificationCategories(prefs.checked, categories),
5544
5546
  onCategoryChange: prefs.setCategory
5545
5547
  }
5546
5548
  ) }) });
@@ -5553,14 +5555,14 @@ function ConnectedSessionsRow({
5553
5555
  const sessions = react$1.useSessions({ enabled: open });
5554
5556
  const currentSessionId = react$1.useCurrentSessionId();
5555
5557
  const terminate = react$1.useTerminateSession();
5556
- const views = chunkSN2GZ4ZM_cjs.toActiveSessionViews(sessions.data ?? [], {
5558
+ const views = chunkTQUYWUEE_cjs.toActiveSessionViews(sessions.data ?? [], {
5557
5559
  currentSessionId,
5558
5560
  terminatingId: terminate.isPending ? terminate.variables : null,
5559
5561
  renderIcon: renderSessionIcon
5560
5562
  });
5561
5563
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5562
5564
  /* @__PURE__ */ jsxRuntime.jsx(
5563
- chunkSN2GZ4ZM_cjs.SettingsRow,
5565
+ chunkNMZI3K6R_cjs.SettingsRow,
5564
5566
  {
5565
5567
  label: "Active sessions",
5566
5568
  description: "Devices and agents currently signed in to your account.",
@@ -5582,7 +5584,7 @@ function ConnectedSessionsRow({
5582
5584
  }
5583
5585
  ),
5584
5586
  /* @__PURE__ */ jsxRuntime.jsx(
5585
- chunkSN2GZ4ZM_cjs.ActiveSessionsDialog,
5587
+ chunkTQUYWUEE_cjs.ActiveSessionsDialog,
5586
5588
  {
5587
5589
  open,
5588
5590
  onOpenChange: setOpen,
@@ -5624,7 +5626,7 @@ function ConnectedLogoutDialog({
5624
5626
  signOut.mutate({ everywhere, reason: "manual" });
5625
5627
  };
5626
5628
  return /* @__PURE__ */ jsxRuntime.jsx(
5627
- chunkSN2GZ4ZM_cjs.LogoutDialog,
5629
+ chunkTQUYWUEE_cjs.LogoutDialog,
5628
5630
  {
5629
5631
  open,
5630
5632
  onClose,
@@ -5632,7 +5634,7 @@ function ConnectedLogoutDialog({
5632
5634
  onLogoutAll: () => void run(true),
5633
5635
  canLogoutAll,
5634
5636
  isOnline,
5635
- sessions: chunkSN2GZ4ZM_cjs.toLogoutSessionViews(sessions.data ?? []),
5637
+ sessions: chunkTQUYWUEE_cjs.toLogoutSessionViews(sessions.data ?? []),
5636
5638
  renderSessionIcon
5637
5639
  }
5638
5640
  );
@@ -5654,7 +5656,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
5654
5656
  });
5655
5657
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5656
5658
  /* @__PURE__ */ jsxRuntime.jsx(
5657
- chunkSN2GZ4ZM_cjs.SettingsDangerZone,
5659
+ chunkNMZI3K6R_cjs.SettingsDangerZone,
5658
5660
  {
5659
5661
  isOpen: zoneOpen,
5660
5662
  onToggle: () => setZoneOpen((o) => !o),
@@ -5674,12 +5676,12 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
5674
5676
  }
5675
5677
  ),
5676
5678
  /* @__PURE__ */ jsxRuntime.jsx(
5677
- chunkSN2GZ4ZM_cjs.DeleteAccountDialog,
5679
+ chunkTQUYWUEE_cjs.DeleteAccountDialog,
5678
5680
  {
5679
5681
  open: dialogOpen,
5680
5682
  onClose: flow.onClose,
5681
5683
  step: flow.step,
5682
- blockers: chunkSN2GZ4ZM_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
5684
+ blockers: chunkTQUYWUEE_cjs.toDeleteBlockerViews(flow.blockers, renderSubscriptionLink),
5683
5685
  onContinue: flow.onContinue,
5684
5686
  onBack: flow.onBack,
5685
5687
  userEmail,
@@ -5694,7 +5696,7 @@ function ConnectedDangerZone({ renderSubscriptionLink }) {
5694
5696
  function ServerConnectionRow({ onRefresh, ...status }) {
5695
5697
  const { runtimeConfig } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
5696
5698
  const [isRefreshing, setIsRefreshing] = react.useState(false);
5697
- const view = chunkSN2GZ4ZM_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
5699
+ const view = chunkTQUYWUEE_cjs.serverConnectionView(status, runtimeConfig.deploymentDomain || "server");
5698
5700
  const refresh = async () => {
5699
5701
  setIsRefreshing(true);
5700
5702
  try {
@@ -5703,8 +5705,8 @@ function ServerConnectionRow({ onRefresh, ...status }) {
5703
5705
  setIsRefreshing(false);
5704
5706
  }
5705
5707
  };
5706
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsRow, { label: "Server connection", description: view.description, children: /* @__PURE__ */ jsxRuntime.jsx(
5707
- chunkSN2GZ4ZM_cjs.ServerConnectionButton,
5708
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsRow, { label: "Server connection", description: view.description, children: /* @__PURE__ */ jsxRuntime.jsx(
5709
+ chunkTQUYWUEE_cjs.ServerConnectionButton,
5708
5710
  {
5709
5711
  state: view.state,
5710
5712
  label: view.label,
@@ -5726,7 +5728,7 @@ function ConnectedAccountSettings({
5726
5728
  renderSubscriptionLink
5727
5729
  }) {
5728
5730
  const [logoutOpen, setLogoutOpen] = react.useState(false);
5729
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsPanel, { className: "max-w-2xl", children: [
5731
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsPanel, { className: "max-w-2xl", children: [
5730
5732
  /* @__PURE__ */ jsxRuntime.jsx(ConnectedProfileCard, { avatarClassName, children: /* @__PURE__ */ jsxRuntime.jsx(
5731
5733
  ConnectedIdentityVerification,
5732
5734
  {
@@ -5736,10 +5738,10 @@ function ConnectedAccountSettings({
5736
5738
  ) }),
5737
5739
  afterProfile,
5738
5740
  /* @__PURE__ */ jsxRuntime.jsx(ConnectedSecuritySection, { getUnmetRequirement: getUnmetPasswordRequirement, children: securityRows }),
5739
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wifi, {}), title: "Session", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsCard, { children: [
5741
+ /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsSection, { icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Wifi, {}), title: "Session", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsCard, { children: [
5740
5742
  connection && /* @__PURE__ */ jsxRuntime.jsx(ServerConnectionRow, { ...connection }),
5741
5743
  /* @__PURE__ */ jsxRuntime.jsx(ConnectedSessionsRow, { renderSessionIcon }),
5742
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsRow, { label: "Logout", description: "Sign out of your account on this device.", children: /* @__PURE__ */ jsxRuntime.jsxs(
5744
+ /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsRow, { label: "Logout", description: "Sign out of your account on this device.", children: /* @__PURE__ */ jsxRuntime.jsxs(
5743
5745
  ui.Button,
5744
5746
  {
5745
5747
  type: "button",
@@ -6021,10 +6023,10 @@ function ConnectedPrivacySettings({
6021
6023
  const update = react$1.useUpdateUserSettings();
6022
6024
  const hideOnlineStatus = settings?.hide_online_status ?? false;
6023
6025
  const dismissedTips = settings?.dismissed_tips ?? [];
6024
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsPanel, { className: "max-w-2xl", children: [
6025
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsSection, { title: "Privacy and tips", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsCard, { children: [
6026
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsPanel, { className: "max-w-2xl", children: [
6027
+ /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsSection, { title: "Privacy and tips", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsCard, { children: [
6026
6028
  /* @__PURE__ */ jsxRuntime.jsx(
6027
- chunkSN2GZ4ZM_cjs.SettingsRow,
6029
+ chunkNMZI3K6R_cjs.SettingsRow,
6028
6030
  {
6029
6031
  label: "Show Online Status",
6030
6032
  labelFor: "showOnlineStatus",
@@ -6042,7 +6044,7 @@ function ConnectedPrivacySettings({
6042
6044
  ),
6043
6045
  rows,
6044
6046
  showTipsReset && /* @__PURE__ */ jsxRuntime.jsx(
6045
- chunkSN2GZ4ZM_cjs.SettingsRow,
6047
+ chunkNMZI3K6R_cjs.SettingsRow,
6046
6048
  {
6047
6049
  label: "Hidden tips",
6048
6050
  description: "Restore any Smart Tips you\u2019ve hidden with \u201Cdon\u2019t show again\u201D.",
@@ -6106,13 +6108,13 @@ var COLUMNS = [
6106
6108
  flex: 1,
6107
6109
  minWidth: 120,
6108
6110
  cellRenderer: (params) => isStandard(params.data) ? /* @__PURE__ */ jsxRuntime.jsx(
6109
- chunkSN2GZ4ZM_cjs.ModelProviderLabel,
6111
+ chunkTQUYWUEE_cjs.ModelProviderLabel,
6110
6112
  {
6111
6113
  logo: /* @__PURE__ */ jsxRuntime.jsx("img", { src: "/favicon.svg", alt: "ARBI", className: "size-3.5 flex-shrink-0 rounded-sm" }),
6112
6114
  children: "ARBI CITY"
6113
6115
  }
6114
6116
  ) : /* @__PURE__ */ jsxRuntime.jsx(
6115
- chunkSN2GZ4ZM_cjs.ModelProviderLabel,
6117
+ chunkTQUYWUEE_cjs.ModelProviderLabel,
6116
6118
  {
6117
6119
  logo: /* @__PURE__ */ jsxRuntime.jsx(react$1.ProviderIcon, { modelName: params.data?.model_name, provider: params.value, size: 14 }),
6118
6120
  children: PROVIDER_NAMES[params.value ?? ""] || params.value || "\u2014"
@@ -6188,8 +6190,8 @@ function ConnectedPremiumModels() {
6188
6190
  [save]
6189
6191
  );
6190
6192
  if (premiumModels.length === 0) return null;
6191
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsPanel, { className: "max-w-2xl space-y-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsSection, { title: "Premium models", children: /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsCard, { className: "space-y-0", children: /* @__PURE__ */ jsxRuntime.jsx(
6192
- chunkSN2GZ4ZM_cjs.PremiumModelsFrame,
6193
+ 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(
6194
+ chunkTQUYWUEE_cjs.PremiumModelsFrame,
6193
6195
  {
6194
6196
  enabled: premiumModel !== "",
6195
6197
  onEnabledChange: (enabled) => {
@@ -6318,10 +6320,10 @@ function ConnectedAppsSettings({
6318
6320
  }
6319
6321
  };
6320
6322
  if (isLoading) {
6321
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
6323
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
6322
6324
  }
6323
6325
  if (catalogError) {
6324
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
6326
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.ConnectionsError, { message: "Failed to load connector catalog. Please refresh and try again." });
6325
6327
  }
6326
6328
  const visibleCatalog = catalog.filter((c) => isVendorVisible(c.vendor_key));
6327
6329
  const sharePointVisible = isVendorVisible("microsoft_sharepoint");
@@ -6330,7 +6332,7 @@ function ConnectedAppsSettings({
6330
6332
  (c) => !react$1.isMailboxSyncVendor(c.vendor_key) && !react$1.isSharePointVendor(c.vendor_key)
6331
6333
  );
6332
6334
  const renderCard = (entry) => /* @__PURE__ */ jsxRuntime.jsx(
6333
- chunkSN2GZ4ZM_cjs.ConnectionCard,
6335
+ chunkTQUYWUEE_cjs.ConnectionCard,
6334
6336
  {
6335
6337
  connection: toConnectionCardView(entry, connectedByVendor[entry.vendor_key], {
6336
6338
  isDisconnecting: disconnect.isPending && disconnect.variables?.vendorKey === entry.vendor_key,
@@ -6347,12 +6349,12 @@ function ConnectedAppsSettings({
6347
6349
  );
6348
6350
  const renderGroup = (title, subtitle, icon2, entries) => {
6349
6351
  if (entries.length === 0) return null;
6350
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsSection, { icon: icon2, title, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsCard, { className: "space-y-3", children: [
6352
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsSection, { icon: icon2, title, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsCard, { className: "space-y-3", children: [
6351
6353
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: subtitle }),
6352
6354
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: entries.map(renderCard) })
6353
6355
  ] }) });
6354
6356
  };
6355
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SettingsPanel, { className: "max-w-2xl", children: [
6357
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkNMZI3K6R_cjs.SettingsPanel, { className: "max-w-2xl", children: [
6356
6358
  /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-border bg-card px-5 py-4", children: [
6357
6359
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4", children: [
6358
6360
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-border bg-background text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, { className: "h-5 w-5" }) }),
@@ -6458,7 +6460,7 @@ function ConnectedAppsSettings({
6458
6460
  }
6459
6461
  )
6460
6462
  ] }),
6461
- catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6463
+ catalog.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkNMZI3K6R_cjs.SettingsCard, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.ConnectionsEmpty, { message: "No connectors available yet." }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6462
6464
  renderGroup("Email & Drive", EMAIL_AND_DRIVE_SUBTITLE, /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Mail, {}), emailCatalog),
6463
6465
  renderGroup(
6464
6466
  "Apps & Integrations (MCP)",
@@ -6535,7 +6537,7 @@ function ConnectedSettingsPage({
6535
6537
  }, [requested]);
6536
6538
  const controlled = section !== void 0;
6537
6539
  return /* @__PURE__ */ jsxRuntime.jsx(
6538
- chunkSN2GZ4ZM_cjs.SettingsPage,
6540
+ chunkTQUYWUEE_cjs.SettingsPage,
6539
6541
  {
6540
6542
  ...page,
6541
6543
  sections,
@@ -6943,6 +6945,7 @@ function ConnectedWorkspaceSettings({
6943
6945
  shareDialog,
6944
6946
  children,
6945
6947
  onExport,
6948
+ footerActions,
6946
6949
  onOpenActivity,
6947
6950
  onLeft,
6948
6951
  testId = "workspace-settings-page"
@@ -7079,19 +7082,22 @@ function ConnectedWorkspaceSettings({
7079
7082
  )
7080
7083
  ] }),
7081
7084
  children,
7082
- isMember && onExport && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end px-4 pb-4", children: /* @__PURE__ */ jsxRuntime.jsxs(
7083
- ui.Button,
7084
- {
7085
- variant: "outline",
7086
- size: "sm",
7087
- onClick: onExport,
7088
- "data-testid": "workspace-transfer-button",
7089
- children: [
7090
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderInput, { className: "size-4" }),
7091
- "Export, copy or move\u2026"
7092
- ]
7093
- }
7094
- ) }),
7085
+ isMember && (onExport || footerActions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2 px-4 pb-4", children: [
7086
+ footerActions,
7087
+ onExport && /* @__PURE__ */ jsxRuntime.jsxs(
7088
+ ui.Button,
7089
+ {
7090
+ variant: "outline",
7091
+ size: "sm",
7092
+ onClick: onExport,
7093
+ "data-testid": "workspace-transfer-button",
7094
+ children: [
7095
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FolderInput, { className: "size-4" }),
7096
+ "Export, copy or move\u2026"
7097
+ ]
7098
+ }
7099
+ )
7100
+ ] }),
7095
7101
  !isOwner && /* @__PURE__ */ jsxRuntime.jsx(
7096
7102
  chunkMSFQDELO_cjs.LeaveFooter,
7097
7103
  {
@@ -7274,9 +7280,9 @@ function ConnectedMailboxSyncDialog({
7274
7280
  showDescription: true,
7275
7281
  className: "w-[92vw] sm:max-w-lg",
7276
7282
  children: [
7277
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncDialogBody, { children: [
7278
- !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
7279
- chunkSN2GZ4ZM_cjs.SyncSelect,
7283
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncDialogBody, { children: [
7284
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
7285
+ chunkTQUYWUEE_cjs.SyncSelect,
7280
7286
  {
7281
7287
  id: "sync-workspace",
7282
7288
  value: workspaceExtId,
@@ -7285,9 +7291,9 @@ function ConnectedMailboxSyncDialog({
7285
7291
  options: memberWorkspaces.map((w) => ({ value: w.external_id, label: w.name }))
7286
7292
  }
7287
7293
  ) }),
7288
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
7294
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
7289
7295
  /* @__PURE__ */ jsxRuntime.jsx(
7290
- chunkSN2GZ4ZM_cjs.SyncSelect,
7296
+ chunkTQUYWUEE_cjs.SyncSelect,
7291
7297
  {
7292
7298
  id: "sync-backfill",
7293
7299
  value: backfill,
@@ -7307,17 +7313,17 @@ function ConnectedMailboxSyncDialog({
7307
7313
  "aria-label": "Import emails since date"
7308
7314
  }
7309
7315
  ),
7310
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
7316
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncSmallNote, { children: "Emails are always imported from this date onward \u2014 the start point never moves." })
7311
7317
  ] })
7312
7318
  ] }),
7313
7319
  /* @__PURE__ */ jsxRuntime.jsx(
7314
- chunkSN2GZ4ZM_cjs.SyncField,
7320
+ chunkTQUYWUEE_cjs.SyncField,
7315
7321
  {
7316
7322
  label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
7317
7323
  hint: "Select at least one folder to import.",
7318
- actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncLinkRow, { children: [
7324
+ actions: folders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncLinkRow, { children: [
7319
7325
  /* @__PURE__ */ jsxRuntime.jsx(
7320
- chunkSN2GZ4ZM_cjs.SyncLinkButton,
7326
+ chunkTQUYWUEE_cjs.SyncLinkButton,
7321
7327
  {
7322
7328
  onClick: () => setExpandAllNonce((n) => n + 1),
7323
7329
  testId: "mail-folders-expand-all",
@@ -7325,20 +7331,20 @@ function ConnectedMailboxSyncDialog({
7325
7331
  }
7326
7332
  ),
7327
7333
  /* @__PURE__ */ jsxRuntime.jsx(
7328
- chunkSN2GZ4ZM_cjs.SyncLinkButton,
7334
+ chunkTQUYWUEE_cjs.SyncLinkButton,
7329
7335
  {
7330
7336
  onClick: () => setCollapseAllNonce((n) => n + 1),
7331
7337
  testId: "mail-folders-collapse-all",
7332
7338
  children: "Collapse all"
7333
7339
  }
7334
7340
  ),
7335
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
7341
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
7336
7342
  ] }),
7337
- children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
7343
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncLoading, { children: "Loading folders\u2026" }) : foldersError ? (
7338
7344
  // A failed fetch is not an empty mailbox: it hides auth/scope errors (e.g. a Gmail
7339
7345
  // account needing reconnect).
7340
7346
  /* @__PURE__ */ jsxRuntime.jsx(
7341
- chunkSN2GZ4ZM_cjs.SyncReconnectNotice,
7347
+ chunkTQUYWUEE_cjs.SyncReconnectNotice,
7342
7348
  {
7343
7349
  message: `Couldn\u2019t load folders from ${catalog.display_name}. Reconnect the account and try again.`,
7344
7350
  onReconnect: () => void reconnect(),
@@ -7346,7 +7352,7 @@ function ConnectedMailboxSyncDialog({
7346
7352
  testId: "folders-reconnect"
7347
7353
  }
7348
7354
  )
7349
- ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
7355
+ ) : folders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx(
7350
7356
  chunkCROGFB46_cjs.MailFolderTree,
7351
7357
  {
7352
7358
  nodes: folderTree,
@@ -7358,9 +7364,9 @@ function ConnectedMailboxSyncDialog({
7358
7364
  ) })
7359
7365
  }
7360
7366
  ),
7361
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncOptions, { children: [
7367
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncOptions, { children: [
7362
7368
  /* @__PURE__ */ jsxRuntime.jsx(
7363
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7369
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7364
7370
  {
7365
7371
  checked: skipDuplicates,
7366
7372
  onCheckedChange: setSkipDuplicates,
@@ -7370,7 +7376,7 @@ function ConnectedMailboxSyncDialog({
7370
7376
  }
7371
7377
  ),
7372
7378
  /* @__PURE__ */ jsxRuntime.jsx(
7373
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7379
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7374
7380
  {
7375
7381
  checked: autoRename,
7376
7382
  onCheckedChange: setAutoRename,
@@ -7380,7 +7386,7 @@ function ConnectedMailboxSyncDialog({
7380
7386
  }
7381
7387
  ),
7382
7388
  /* @__PURE__ */ jsxRuntime.jsx(
7383
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7389
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7384
7390
  {
7385
7391
  checked: shared,
7386
7392
  onCheckedChange: setShared,
@@ -7390,7 +7396,7 @@ function ConnectedMailboxSyncDialog({
7390
7396
  }
7391
7397
  ),
7392
7398
  /* @__PURE__ */ jsxRuntime.jsx(
7393
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7399
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7394
7400
  {
7395
7401
  checked: autoSync,
7396
7402
  onCheckedChange: setAutoSync,
@@ -7402,7 +7408,7 @@ function ConnectedMailboxSyncDialog({
7402
7408
  ] })
7403
7409
  ] }),
7404
7410
  /* @__PURE__ */ jsxRuntime.jsx(
7405
- chunkSN2GZ4ZM_cjs.SyncDialogFooter,
7411
+ chunkTQUYWUEE_cjs.SyncDialogFooter,
7406
7412
  {
7407
7413
  onCancel: () => onOpenChange(false),
7408
7414
  onSave: handleEnableSubmit,
@@ -7464,7 +7470,7 @@ function DriveFolderNode({
7464
7470
  const mightHaveChildren = docCount == null || docCount > 0;
7465
7471
  const orderedChildren = [...children].sort((a, b) => a.name.localeCompare(b.name));
7466
7472
  return /* @__PURE__ */ jsxRuntime.jsx(
7467
- chunkSN2GZ4ZM_cjs.SyncFolderRow,
7473
+ chunkTQUYWUEE_cjs.SyncFolderRow,
7468
7474
  {
7469
7475
  id: folder.id,
7470
7476
  name: folder.name,
@@ -7478,7 +7484,7 @@ function DriveFolderNode({
7478
7484
  onCheckedChange: () => onToggle(folder.id),
7479
7485
  count: typeof docCount === "number" ? docCount : void 0,
7480
7486
  isCountLoading: isSelectable && countLoading,
7481
- children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
7487
+ children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncFolderStatus, { depth, kind: "empty" }) : orderedChildren.map((child) => /* @__PURE__ */ jsxRuntime.jsx(
7482
7488
  DriveFolderNode,
7483
7489
  {
7484
7490
  vendorKey,
@@ -7624,9 +7630,9 @@ function ConnectedDriveSyncDialog({
7624
7630
  showDescription: true,
7625
7631
  className: "w-[92vw] sm:max-w-lg",
7626
7632
  children: [
7627
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncDialogBody, { children: [
7628
- !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
7629
- chunkSN2GZ4ZM_cjs.SyncSelect,
7633
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncDialogBody, { children: [
7634
+ !lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
7635
+ chunkTQUYWUEE_cjs.SyncSelect,
7630
7636
  {
7631
7637
  id: "drive-sync-workspace",
7632
7638
  value: workspaceExtId,
@@ -7636,13 +7642,13 @@ function ConnectedDriveSyncDialog({
7636
7642
  }
7637
7643
  ) }),
7638
7644
  /* @__PURE__ */ jsxRuntime.jsx(
7639
- chunkSN2GZ4ZM_cjs.SyncField,
7645
+ chunkTQUYWUEE_cjs.SyncField,
7640
7646
  {
7641
7647
  label: `Folders to import${selectedFolders.length > 0 ? ` (${selectedFolders.length})` : ""}`,
7642
7648
  hint: "Select at least one folder. Importing a folder includes everything inside it.",
7643
- actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncLinkRow, { children: [
7649
+ actions: orderedFolders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncLinkRow, { children: [
7644
7650
  /* @__PURE__ */ jsxRuntime.jsx(
7645
- chunkSN2GZ4ZM_cjs.SyncLinkButton,
7651
+ chunkTQUYWUEE_cjs.SyncLinkButton,
7646
7652
  {
7647
7653
  onClick: () => setExpandAllNonce((n) => n + 1),
7648
7654
  testId: "drive-folders-expand-all",
@@ -7650,7 +7656,7 @@ function ConnectedDriveSyncDialog({
7650
7656
  }
7651
7657
  ),
7652
7658
  /* @__PURE__ */ jsxRuntime.jsx(
7653
- chunkSN2GZ4ZM_cjs.SyncLinkButton,
7659
+ chunkTQUYWUEE_cjs.SyncLinkButton,
7654
7660
  {
7655
7661
  onClick: () => setCollapseAllNonce((n) => n + 1),
7656
7662
  testId: "drive-folders-collapse-all",
@@ -7658,19 +7664,19 @@ function ConnectedDriveSyncDialog({
7658
7664
  }
7659
7665
  )
7660
7666
  ] }),
7661
- children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
7662
- chunkSN2GZ4ZM_cjs.SyncReconnectNotice,
7667
+ children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
7668
+ chunkTQUYWUEE_cjs.SyncReconnectNotice,
7663
7669
  {
7664
7670
  ...reconnectButtonProps,
7665
7671
  message: `Reconnect ${catalog.display_name} to enable ${productName} \u2014 your account needs to grant file access.`
7666
7672
  }
7667
7673
  ) : foldersError ? /* @__PURE__ */ jsxRuntime.jsx(
7668
- chunkSN2GZ4ZM_cjs.SyncReconnectNotice,
7674
+ chunkTQUYWUEE_cjs.SyncReconnectNotice,
7669
7675
  {
7670
7676
  ...reconnectButtonProps,
7671
7677
  message: `Couldn\u2019t load folders from ${productName}. Reconnect the account and try again.`
7672
7678
  }
7673
- ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
7679
+ ) : orderedFolders.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
7674
7680
  DriveFolderNode,
7675
7681
  {
7676
7682
  vendorKey: catalog.vendor_key,
@@ -7687,9 +7693,9 @@ function ConnectedDriveSyncDialog({
7687
7693
  )) }) })
7688
7694
  }
7689
7695
  ),
7690
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.SyncOptions, { children: [
7696
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.SyncOptions, { children: [
7691
7697
  /* @__PURE__ */ jsxRuntime.jsx(
7692
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7698
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7693
7699
  {
7694
7700
  checked: skipDuplicates,
7695
7701
  onCheckedChange: setSkipDuplicates,
@@ -7698,7 +7704,7 @@ function ConnectedDriveSyncDialog({
7698
7704
  }
7699
7705
  ),
7700
7706
  /* @__PURE__ */ jsxRuntime.jsx(
7701
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7707
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7702
7708
  {
7703
7709
  checked: autoRename,
7704
7710
  onCheckedChange: setAutoRename,
@@ -7707,7 +7713,7 @@ function ConnectedDriveSyncDialog({
7707
7713
  }
7708
7714
  ),
7709
7715
  /* @__PURE__ */ jsxRuntime.jsx(
7710
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7716
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7711
7717
  {
7712
7718
  checked: shared,
7713
7719
  onCheckedChange: setShared,
@@ -7716,7 +7722,7 @@ function ConnectedDriveSyncDialog({
7716
7722
  }
7717
7723
  ),
7718
7724
  /* @__PURE__ */ jsxRuntime.jsx(
7719
- chunkSN2GZ4ZM_cjs.SyncOptionToggle,
7725
+ chunkTQUYWUEE_cjs.SyncOptionToggle,
7720
7726
  {
7721
7727
  checked: autoSync,
7722
7728
  onCheckedChange: setAutoSync,
@@ -7728,7 +7734,7 @@ function ConnectedDriveSyncDialog({
7728
7734
  ] })
7729
7735
  ] }),
7730
7736
  /* @__PURE__ */ jsxRuntime.jsx(
7731
- chunkSN2GZ4ZM_cjs.SyncDialogFooter,
7737
+ chunkTQUYWUEE_cjs.SyncDialogFooter,
7732
7738
  {
7733
7739
  onCancel: () => onOpenChange(false),
7734
7740
  onSave: handleEnableSubmit,
@@ -7760,7 +7766,7 @@ function BillingProjectEntity({
7760
7766
  subscription = "none",
7761
7767
  ...props
7762
7768
  }) {
7763
- const { stripeEnabled } = chunk53RCZPMR_cjs.useBillingSupport();
7769
+ const { stripeEnabled } = chunkP2YM67Y5_cjs.useBillingSupport();
7764
7770
  const isPaid2 = stripeEnabled && (subscription === "active" || subscription === "past_due" || subscription === "dev");
7765
7771
  return /* @__PURE__ */ jsxRuntime.jsx(ui.ProjectEntity, { ...props, subscription, isPaid: isPaid2 });
7766
7772
  }
@@ -7787,8 +7793,8 @@ function InvoicesModal({
7787
7793
  key: inv.number ?? String(i),
7788
7794
  date: formatInvoiceDate(inv.date),
7789
7795
  kind: KIND_LABELS[inv.kind],
7790
- amount: chunk53RCZPMR_cjs.formatMoney(inv.amount, inv.currency),
7791
- amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunk53RCZPMR_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
7796
+ amount: chunkP2YM67Y5_cjs.formatMoney(inv.amount, inv.currency),
7797
+ amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunkP2YM67Y5_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
7792
7798
  status: inv.status,
7793
7799
  isPaid: isPaid2,
7794
7800
  href: inv.hosted_invoice_url ?? inv.url ?? inv.pdf_url ?? void 0,
@@ -7796,7 +7802,7 @@ function InvoicesModal({
7796
7802
  };
7797
7803
  });
7798
7804
  return /* @__PURE__ */ jsxRuntime.jsx(
7799
- chunkSN2GZ4ZM_cjs.InvoicesDialog,
7805
+ chunkTQUYWUEE_cjs.InvoicesDialog,
7800
7806
  {
7801
7807
  open,
7802
7808
  onOpenChange,
@@ -7823,7 +7829,7 @@ function StripeCheckoutModal({
7823
7829
  const [clientSecret, setClientSecret] = react.useState(null);
7824
7830
  const [isCreating, setIsCreating] = react.useState(false);
7825
7831
  const [stripe, setStripe] = react.useState(null);
7826
- const { stripeEnabled, checkout } = chunk53RCZPMR_cjs.useBillingSupport();
7832
+ const { stripeEnabled, checkout } = chunkP2YM67Y5_cjs.useBillingSupport();
7827
7833
  const createCheckout = react$1.useCreateProjectCheckout();
7828
7834
  const refreshProject = react$1.useRefreshProject();
7829
7835
  const invalidateProjects = react$1.useInvalidateProjects();
@@ -7850,7 +7856,7 @@ function StripeCheckoutModal({
7850
7856
  projectExtId,
7851
7857
  body: {
7852
7858
  interval,
7853
- packs: chunk53RCZPMR_cjs.PRO_PACKS,
7859
+ packs: chunkP2YM67Y5_cjs.PRO_PACKS,
7854
7860
  ai_blocks: aiBlocks,
7855
7861
  storage_blocks: storageBlocks,
7856
7862
  addon_budget_pence: addonBudgetPence,
@@ -7866,7 +7872,7 @@ function StripeCheckoutModal({
7866
7872
  },
7867
7873
  onError: (error) => {
7868
7874
  console.error("Failed to create checkout session:", error);
7869
- const reason = chunk53RCZPMR_cjs.apiErrorDetail(error)?.message;
7875
+ const reason = chunkP2YM67Y5_cjs.apiErrorDetail(error)?.message;
7870
7876
  shell.notify.error(
7871
7877
  reason ? `Checkout didn't start: ${reason}` : "Checkout didn't start. Try again."
7872
7878
  );
@@ -7899,9 +7905,9 @@ function StripeCheckoutModal({
7899
7905
  }
7900
7906
  }, [open]);
7901
7907
  const isStripeConfigured = stripeEnabled;
7902
- const vatNote = quote ? `${chunk53RCZPMR_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunk53RCZPMR_cjs.quoteTotalLine(quote)}` : null;
7908
+ const vatNote = quote ? `${chunkP2YM67Y5_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunkP2YM67Y5_cjs.quoteTotalLine(quote)}` : null;
7903
7909
  return /* @__PURE__ */ jsxRuntime.jsx(
7904
- chunkSN2GZ4ZM_cjs.CheckoutDialogFrame,
7910
+ chunkTQUYWUEE_cjs.CheckoutDialogFrame,
7905
7911
  {
7906
7912
  open,
7907
7913
  onOpenChange,
@@ -7911,7 +7917,7 @@ function StripeCheckoutModal({
7911
7917
  children: clientSecret && !!stripe && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7912
7918
  vatNote && /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-vat-note", className: "mb-4 text-sm text-muted-foreground", children: vatNote }),
7913
7919
  checkout?.render(stripe, { clientSecret, onComplete: handleComplete }),
7914
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.MoreInfo, { title: "Paying", label: "Payment help", testId: "checkout-payment-help", children: [
7920
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.MoreInfo, { title: "Paying", label: "Payment help", testId: "checkout-payment-help", children: [
7915
7921
  /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-decline-note", children: "Card declined? Nothing was charged. Try again or use another card." }),
7916
7922
  /* @__PURE__ */ jsxRuntime.jsx("p", { "data-testid": "checkout-vat-id-note", children: "No VAT number? Leave \u2018purchasing as a business\u2019 unticked." }),
7917
7923
  /* @__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." })
@@ -7953,31 +7959,31 @@ function defaultBillingCountry(languages = typeof navigator === "undefined" ? []
7953
7959
  }
7954
7960
  var choiceForPacks = (packs) => packs > 0 ? "pro" : "free";
7955
7961
  function proCard(selected, isAnnual, prices) {
7956
- const packs = chunk53RCZPMR_cjs.PLAN_CHOICE_PACKS.pro;
7962
+ const packs = chunkP2YM67Y5_cjs.PLAN_CHOICE_PACKS.pro;
7957
7963
  const currency = prices.monthly?.currency ?? prices.annual?.currency ?? "gbp";
7958
- const monthly = chunk53RCZPMR_cjs.packPrice(prices.monthly, packs);
7959
- const annual = chunk53RCZPMR_cjs.packPrice(prices.annual, packs);
7964
+ const monthly = chunkP2YM67Y5_cjs.packPrice(prices.monthly, packs);
7965
+ const annual = chunkP2YM67Y5_cjs.packPrice(prices.annual, packs);
7960
7966
  const current = isAnnual ? annual : monthly;
7961
7967
  const effectiveMonthly = current ? isAnnual ? current.amount_ex_vat / 12 : current.amount_ex_vat : null;
7962
7968
  return {
7963
7969
  id: packs,
7964
- name: chunk53RCZPMR_cjs.planNameForPacks(packs),
7970
+ name: chunkP2YM67Y5_cjs.planNameForPacks(packs),
7965
7971
  isSelected: selected === "pro",
7966
7972
  price: current && effectiveMonthly != null ? {
7967
7973
  annual: isAnnual,
7968
- yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current.amount_ex_vat ? chunk53RCZPMR_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
7969
- yearlyTotal: isAnnual ? chunk53RCZPMR_cjs.formatMoney(current.amount_ex_vat, currency) : void 0,
7974
+ yearlyStrike: isAnnual && monthly && monthly.amount_ex_vat * 12 > current.amount_ex_vat ? chunkP2YM67Y5_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
7975
+ yearlyTotal: isAnnual ? chunkP2YM67Y5_cjs.formatMoney(current.amount_ex_vat, currency) : void 0,
7970
7976
  intervalLabel: isAnnual ? "/yr + VAT" : "/mo",
7971
- monthly: chunk53RCZPMR_cjs.formatMoney(Math.round(effectiveMonthly), currency),
7977
+ monthly: chunkP2YM67Y5_cjs.formatMoney(Math.round(effectiveMonthly), currency),
7972
7978
  taxLabel: "+ VAT",
7973
7979
  // The inclusive figure for a UK customer, right under the headline.
7974
- note: `${chunk53RCZPMR_cjs.formatMoney(current.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
7980
+ note: `${chunkP2YM67Y5_cjs.formatMoney(current.amount, currency)}${isAnnual ? "/yr" : "/mo"} incl. UK VAT`
7975
7981
  } : void 0,
7976
7982
  features: [
7977
- `${react$1.formatGbp(chunk53RCZPMR_cjs.PRO_AI_GBP)} of AI usage / month`,
7978
- `${chunk53RCZPMR_cjs.PRO_STORAGE_GB} GB storage`,
7983
+ `${react$1.formatGbp(chunkP2YM67Y5_cjs.PRO_AI_GBP)} of AI usage / month`,
7984
+ `${chunkP2YM67Y5_cjs.PRO_STORAGE_GB} GB storage`,
7979
7985
  "Unlimited collaborators",
7980
- ...isAnnual ? [chunk53RCZPMR_cjs.ANNUAL_PREMIUM_AI_NOTE] : []
7986
+ ...isAnnual ? [chunkP2YM67Y5_cjs.ANNUAL_PREMIUM_AI_NOTE] : []
7981
7987
  ]
7982
7988
  };
7983
7989
  }
@@ -7989,9 +7995,9 @@ function buildPlanCards(selected, isAnnual, prices, isOnFree) {
7989
7995
  isCurrent: isOnFree,
7990
7996
  isSelected: selected === "free" && !isOnFree,
7991
7997
  features: [
7992
- `${react$1.formatGbp(chunk53RCZPMR_cjs.FREE_AI_GBP)} of AI usage / month`,
7993
- `${chunk53RCZPMR_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
7994
- chunk53RCZPMR_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunk53RCZPMR_cjs.FREE_COLLABORATORS} collaborators`
7998
+ `${react$1.formatGbp(chunkP2YM67Y5_cjs.FREE_AI_GBP)} of AI usage / month`,
7999
+ `${chunkP2YM67Y5_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
8000
+ chunkP2YM67Y5_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunkP2YM67Y5_cjs.FREE_COLLABORATORS} collaborators`
7995
8001
  ]
7996
8002
  };
7997
8003
  return [free, proCard(selected, isAnnual, prices)];
@@ -8004,7 +8010,7 @@ function PlanChoiceCards({
8004
8010
  isOnFree = false
8005
8011
  }) {
8006
8012
  return /* @__PURE__ */ jsxRuntime.jsx(
8007
- chunkSN2GZ4ZM_cjs.PlanCardGrid,
8013
+ chunkTQUYWUEE_cjs.PlanCardGrid,
8008
8014
  {
8009
8015
  plans: buildPlanCards(selected, isAnnual, prices, isOnFree),
8010
8016
  onSelect: (id) => onSelect(choiceForPacks(id))
@@ -8013,13 +8019,13 @@ function PlanChoiceCards({
8013
8019
  }
8014
8020
  function PlanInfoPopover2() {
8015
8021
  const { openSettings } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
8016
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanInfoPopover, { onOpenModelList: () => openSettings("chat") });
8022
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanInfoPopover, { onOpenModelList: () => openSettings("chat") });
8017
8023
  }
8018
8024
  function CheckoutAddonBudget({
8019
8025
  value,
8020
8026
  onChange
8021
8027
  }) {
8022
- const budget = chunk53RCZPMR_cjs.parseBudgetPounds(value);
8028
+ const budget = chunkP2YM67Y5_cjs.parseBudgetPounds(value);
8023
8029
  return /* @__PURE__ */ jsxRuntime.jsxs(
8024
8030
  "div",
8025
8031
  {
@@ -8042,7 +8048,7 @@ function CheckoutAddonBudget({
8042
8048
  step: 25,
8043
8049
  className: "h-8 w-24",
8044
8050
  value,
8045
- placeholder: String(chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
8051
+ placeholder: String(chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
8046
8052
  onChange: (e) => onChange(e.target.value),
8047
8053
  "aria-invalid": budget === void 0,
8048
8054
  "data-testid": "checkout-addon-budget-input"
@@ -8060,7 +8066,7 @@ function BlockStepper({
8060
8066
  onChange,
8061
8067
  testId
8062
8068
  }) {
8063
- const set = (n) => onChange(Math.max(0, Math.min(chunk53RCZPMR_cjs.MAX_CHECKOUT_BLOCKS, n)));
8069
+ const set = (n) => onChange(Math.max(0, Math.min(chunkP2YM67Y5_cjs.MAX_CHECKOUT_BLOCKS, n)));
8064
8070
  return /* @__PURE__ */ jsxRuntime.jsxs(
8065
8071
  "div",
8066
8072
  {
@@ -8104,7 +8110,7 @@ function BlockStepper({
8104
8110
  className: "size-8",
8105
8111
  "aria-label": `More: ${label}`,
8106
8112
  onClick: () => set(value + 1),
8107
- disabled: value >= chunk53RCZPMR_cjs.MAX_CHECKOUT_BLOCKS,
8113
+ disabled: value >= chunkP2YM67Y5_cjs.MAX_CHECKOUT_BLOCKS,
8108
8114
  "data-testid": `${testId}-increment`,
8109
8115
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" })
8110
8116
  }
@@ -8121,8 +8127,8 @@ function CheckoutAddonBlocks({
8121
8127
  onStorageBlocksChange,
8122
8128
  price
8123
8129
  }) {
8124
- const ai = chunk53RCZPMR_cjs.addonPrice(price, "ai_usage");
8125
- const storage = chunk53RCZPMR_cjs.addonPrice(price, "storage");
8130
+ const ai = chunkP2YM67Y5_cjs.addonPrice(price, "ai_usage");
8131
+ const storage = chunkP2YM67Y5_cjs.addonPrice(price, "storage");
8126
8132
  return /* @__PURE__ */ jsxRuntime.jsxs(
8127
8133
  "div",
8128
8134
  {
@@ -8132,8 +8138,8 @@ function CheckoutAddonBlocks({
8132
8138
  /* @__PURE__ */ jsxRuntime.jsx(
8133
8139
  BlockStepper,
8134
8140
  {
8135
- label: `+${react$1.formatGbp(ai?.ai_gbp || chunk53RCZPMR_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
8136
- priceText: chunk53RCZPMR_cjs.checkoutBlockPriceText(price, "ai_usage"),
8141
+ label: `+${react$1.formatGbp(ai?.ai_gbp || chunkP2YM67Y5_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
8142
+ priceText: chunkP2YM67Y5_cjs.checkoutBlockPriceText(price, "ai_usage"),
8137
8143
  value: aiBlocks,
8138
8144
  onChange: onAiBlocksChange,
8139
8145
  testId: "checkout-ai-blocks"
@@ -8142,8 +8148,8 @@ function CheckoutAddonBlocks({
8142
8148
  /* @__PURE__ */ jsxRuntime.jsx(
8143
8149
  BlockStepper,
8144
8150
  {
8145
- label: `+${storage?.storage_gb || chunk53RCZPMR_cjs.STORAGE_BLOCK_GB} GB storage`,
8146
- priceText: chunk53RCZPMR_cjs.checkoutBlockPriceText(price, "storage"),
8151
+ label: `+${storage?.storage_gb || chunkP2YM67Y5_cjs.STORAGE_BLOCK_GB} GB storage`,
8152
+ priceText: chunkP2YM67Y5_cjs.checkoutBlockPriceText(price, "storage"),
8147
8153
  value: storageBlocks,
8148
8154
  onChange: onStorageBlocksChange,
8149
8155
  testId: "checkout-storage-blocks"
@@ -8198,14 +8204,14 @@ function ReferralRewardSummary2({
8198
8204
  if (!reward) return null;
8199
8205
  const applied = totalCents != null && currency ? applyReferralReward(totalCents, reward, currency) : null;
8200
8206
  return /* @__PURE__ */ jsxRuntime.jsx(
8201
- chunkSN2GZ4ZM_cjs.ReferralRewardSummary,
8207
+ chunkTQUYWUEE_cjs.ReferralRewardSummary,
8202
8208
  {
8203
- amountLabel: chunk53RCZPMR_cjs.formatMoney(reward.amount, reward.currency),
8209
+ amountLabel: chunkP2YM67Y5_cjs.formatMoney(reward.amount, reward.currency),
8204
8210
  breakdown: applied && totalCents != null && currency ? {
8205
- subtotal: chunk53RCZPMR_cjs.formatMoney(totalCents, currency),
8206
- reward: chunk53RCZPMR_cjs.formatMoney(applied.bonus, currency),
8207
- youPay: chunk53RCZPMR_cjs.formatMoney(applied.youPay, currency),
8208
- rollover: applied.remaining > 0 ? chunk53RCZPMR_cjs.formatMoney(applied.remaining, currency) : void 0
8211
+ subtotal: chunkP2YM67Y5_cjs.formatMoney(totalCents, currency),
8212
+ reward: chunkP2YM67Y5_cjs.formatMoney(applied.bonus, currency),
8213
+ youPay: chunkP2YM67Y5_cjs.formatMoney(applied.youPay, currency),
8214
+ rollover: applied.remaining > 0 ? chunkP2YM67Y5_cjs.formatMoney(applied.remaining, currency) : void 0
8209
8215
  } : void 0
8210
8216
  }
8211
8217
  );
@@ -8213,7 +8219,7 @@ function ReferralRewardSummary2({
8213
8219
  function ReferralRewardNote2() {
8214
8220
  const reward = useReferralReward();
8215
8221
  if (!reward) return null;
8216
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.ReferralRewardNote, { amountLabel: chunk53RCZPMR_cjs.formatMoney(reward.amount, reward.currency) });
8222
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.ReferralRewardNote, { amountLabel: chunkP2YM67Y5_cjs.formatMoney(reward.amount, reward.currency) });
8217
8223
  }
8218
8224
  function CheckoutTotal({
8219
8225
  state,
@@ -8242,7 +8248,7 @@ function CheckoutTotal({
8242
8248
  className: "text-sm font-medium text-foreground",
8243
8249
  "data-testid": "checkout-total",
8244
8250
  "aria-live": "polite",
8245
- children: state.quote && !state.isLoading ? chunk53RCZPMR_cjs.quoteTotalLine(state.quote) : state.isLoading ? "Calculating total\u2026" : state.error
8251
+ children: state.quote && !state.isLoading ? chunkP2YM67Y5_cjs.quoteTotalLine(state.quote) : state.isLoading ? "Calculating total\u2026" : state.error
8246
8252
  }
8247
8253
  )
8248
8254
  ] });
@@ -8275,13 +8281,13 @@ function useCheckoutQuote({
8275
8281
  ...aiBlocks || storageBlocks ? { addons: { ai_usage: aiBlocks, storage: storageBlocks } } : {}
8276
8282
  } : null
8277
8283
  );
8278
- const { code, message } = query.isError ? chunk53RCZPMR_cjs.quoteError(query.error) : {};
8279
- const locationInvalid = code === chunk53RCZPMR_cjs.TAX_LOCATION_INVALID;
8284
+ const { code, message } = query.isError ? chunkP2YM67Y5_cjs.quoteError(query.error) : {};
8285
+ const locationInvalid = code === chunkP2YM67Y5_cjs.TAX_LOCATION_INVALID;
8280
8286
  const isLoading = enabled && (query.isLoading || postal !== postalCode.trim());
8281
8287
  return {
8282
8288
  quote: query.data,
8283
8289
  isLoading,
8284
- showPostcode: chunk53RCZPMR_cjs.POSTCODE_COUNTRIES.includes(country) || locationInvalid || postalCode !== "",
8290
+ showPostcode: chunkP2YM67Y5_cjs.POSTCODE_COUNTRIES.includes(country) || locationInvalid || postalCode !== "",
8285
8291
  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,
8286
8292
  canContinue: !isLoading && (!!query.data || query.isError && !locationInvalid)
8287
8293
  };
@@ -8290,7 +8296,7 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
8290
8296
  const { data: products, isLoading, error } = react$1.useProducts();
8291
8297
  const [isAnnual, setIsAnnual] = react.useState(false);
8292
8298
  const [promoCode, setPromoCode] = react.useState("");
8293
- const [addonBudget, setAddonBudget] = react.useState(String(chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
8299
+ const [addonBudget, setAddonBudget] = react.useState(String(chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
8294
8300
  const [checkoutBudget, setCheckoutBudget] = react.useState(null);
8295
8301
  const [aiBlocks, setAiBlocks] = react.useState(0);
8296
8302
  const [storageBlocks, setStorageBlocks] = react.useState(0);
@@ -8308,31 +8314,31 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
8308
8314
  storageBlocks,
8309
8315
  enabled: !!products?.length
8310
8316
  });
8311
- if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { children: "Loading plans\u2026" });
8312
- if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
8313
- if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { children: "No plans available." });
8314
- const prices = chunk53RCZPMR_cjs.findProPrices(products);
8317
+ if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { children: "Loading plans\u2026" });
8318
+ if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
8319
+ if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { children: "No plans available." });
8320
+ const prices = chunkP2YM67Y5_cjs.findProPrices(products);
8315
8321
  const intervalPrice = isAnnual ? prices.annual : prices.monthly;
8316
- const selectedPrice = chunk53RCZPMR_cjs.packPrice(intervalPrice);
8322
+ const selectedPrice = chunkP2YM67Y5_cjs.packPrice(intervalPrice);
8317
8323
  if (!intervalPrice) return null;
8318
8324
  const interval = isAnnual ? "year" : "month";
8319
- const savingsPercent = chunk53RCZPMR_cjs.calcSavingsPercent(prices.monthly, prices.annual);
8325
+ const savingsPercent = chunkP2YM67Y5_cjs.calcSavingsPercent(prices.monthly, prices.annual);
8320
8326
  const handleSubscribe = () => {
8321
8327
  setCheckoutInterval(interval);
8322
- const parsed = chunk53RCZPMR_cjs.parseBudgetPounds(addonBudget);
8323
- setCheckoutBudget(parsed == null || parsed === chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed);
8328
+ const parsed = chunkP2YM67Y5_cjs.parseBudgetPounds(addonBudget);
8329
+ setCheckoutBudget(parsed == null || parsed === chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed);
8324
8330
  setCheckoutQuote(quote.quote);
8325
8331
  setIsCheckoutModalOpen(true);
8326
8332
  };
8327
8333
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8328
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanStack, { children: [
8334
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanStack, { children: [
8329
8335
  /* @__PURE__ */ jsxRuntime.jsx(
8330
- chunkSN2GZ4ZM_cjs.PlanPickerHeader,
8336
+ chunkTQUYWUEE_cjs.PlanPickerHeader,
8331
8337
  {
8332
8338
  title: "Plan",
8333
8339
  info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
8334
8340
  toggle: /* @__PURE__ */ jsxRuntime.jsx(
8335
- chunkSN2GZ4ZM_cjs.PricingToggle,
8341
+ chunkTQUYWUEE_cjs.PricingToggle,
8336
8342
  {
8337
8343
  isAnnual,
8338
8344
  onToggle: () => setIsAnnual(!isAnnual),
@@ -8369,7 +8375,7 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
8369
8375
  currency: intervalPrice.currency
8370
8376
  }
8371
8377
  ),
8372
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
8378
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
8373
8379
  /* @__PURE__ */ jsxRuntime.jsx(
8374
8380
  CheckoutCountrySelect,
8375
8381
  {
@@ -8381,9 +8387,9 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
8381
8387
  }
8382
8388
  ),
8383
8389
  /* @__PURE__ */ jsxRuntime.jsx(CheckoutTotal, { state: quote, postalCode, onPostalCodeChange: setPostalCode }),
8384
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanActionRow, { children: [
8390
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanActionRow, { children: [
8385
8391
  onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
8386
- chunkSN2GZ4ZM_cjs.PlanActionButton,
8392
+ chunkTQUYWUEE_cjs.PlanActionButton,
8387
8393
  {
8388
8394
  tone: "muted",
8389
8395
  fill: true,
@@ -8394,11 +8400,11 @@ function SubscriptionPlans({ projectExtId, onDismiss }) {
8394
8400
  }
8395
8401
  ),
8396
8402
  /* @__PURE__ */ jsxRuntime.jsx(
8397
- chunkSN2GZ4ZM_cjs.PlanActionButton,
8403
+ chunkTQUYWUEE_cjs.PlanActionButton,
8398
8404
  {
8399
8405
  fill: true,
8400
8406
  onClick: handleSubscribe,
8401
- disabled: !selectedPrice || chunk53RCZPMR_cjs.parseBudgetPounds(addonBudget) === void 0 || !quote.canContinue,
8407
+ disabled: !selectedPrice || chunkP2YM67Y5_cjs.parseBudgetPounds(addonBudget) === void 0 || !quote.canContinue,
8402
8408
  size: "sm",
8403
8409
  "data-testid": "subscribe-button",
8404
8410
  children: "Continue to payment"
@@ -8438,7 +8444,7 @@ var FALLBACK_MESSAGES = {
8438
8444
  BILLING_ADDRESS_REQUIRED: "Add a billing address first."
8439
8445
  };
8440
8446
  function addonErrorMessage(error) {
8441
- const detail = chunk53RCZPMR_cjs.apiErrorDetail(error);
8447
+ const detail = chunkP2YM67Y5_cjs.apiErrorDetail(error);
8442
8448
  if (detail && typeof detail === "object") {
8443
8449
  const { code, message } = detail;
8444
8450
  if (message) return message;
@@ -8460,18 +8466,18 @@ function chargeRefusalMessage(error) {
8460
8466
  return code ? REFUSALS[code] : null;
8461
8467
  }
8462
8468
  function addonErrorCode(error) {
8463
- const detail = chunk53RCZPMR_cjs.apiErrorDetail(error);
8469
+ const detail = chunkP2YM67Y5_cjs.apiErrorDetail(error);
8464
8470
  if (detail && typeof detail === "object") {
8465
8471
  const code = detail.code;
8466
8472
  if (code && code in FALLBACK_MESSAGES) return code;
8467
8473
  }
8468
8474
  return null;
8469
8475
  }
8470
- var addedMessage = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `${react$1.formatGbp(blockAiGbp ?? chunk53RCZPMR_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunk53RCZPMR_cjs.STORAGE_BLOCK_GB} GB added`;
8476
+ var addedMessage = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `${react$1.formatGbp(blockAiGbp ?? chunkP2YM67Y5_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunkP2YM67Y5_cjs.STORAGE_BLOCK_GB} GB added`;
8471
8477
  function useAddonPurchase() {
8472
8478
  const addBlock = react$1.useAddProjectAddonBlock();
8473
8479
  const { mutate } = addBlock;
8474
- const { onAddonBlocksBought } = chunk53RCZPMR_cjs.useBillingSupport();
8480
+ const { onAddonBlocksBought } = chunkP2YM67Y5_cjs.useBillingSupport();
8475
8481
  const buy = react.useCallback(
8476
8482
  (kind, projectExtId, options2) => {
8477
8483
  mutate(
@@ -8515,7 +8521,7 @@ function PlanChangeLines({
8515
8521
  isError,
8516
8522
  className
8517
8523
  }) {
8518
- const lines = preview ? chunk53RCZPMR_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunk53RCZPMR_cjs.PAY_TODAY_UNPRICED : "Checking price\u2026" }];
8524
+ const lines = preview ? chunkP2YM67Y5_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunkP2YM67Y5_cjs.PAY_TODAY_UNPRICED : "Checking price\u2026" }];
8519
8525
  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)) });
8520
8526
  }
8521
8527
  var BANK_CONFIRM_PLAN_CHANGE = "Confirm with your bank. Nothing is charged until you do.";
@@ -8523,13 +8529,13 @@ function notifyPlanChange(data, fallback, planName2) {
8523
8529
  const outcome = data?.plan_change;
8524
8530
  switch (outcome?.result) {
8525
8531
  case "upgraded": {
8526
- const plan = chunk53RCZPMR_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
8527
- const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunk53RCZPMR_cjs.formatMoney(outcome.charged_pence, "gbp")} charged` : "";
8532
+ const plan = chunkP2YM67Y5_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
8533
+ const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunkP2YM67Y5_cjs.formatMoney(outcome.charged_pence, "gbp")} charged` : "";
8528
8534
  shell.notify.success(`Upgraded to ${plan}${charged}`);
8529
8535
  break;
8530
8536
  }
8531
8537
  case "scheduled": {
8532
- const when2 = chunk53RCZPMR_cjs.formatPeriodEnd(data?.addons?.period_end ?? data?.current_period_end);
8538
+ const when2 = chunkP2YM67Y5_cjs.formatPeriodEnd(data?.addons?.period_end ?? data?.current_period_end);
8533
8539
  shell.notify.success(when2 ? `Scheduled for ${when2}` : fallback);
8534
8540
  break;
8535
8541
  }
@@ -8562,23 +8568,23 @@ function ChangeProPlan({
8562
8568
  const { data: products } = react$1.useProducts();
8563
8569
  const changePlan = react$1.useChangeProjectPlan();
8564
8570
  const cancel = react$1.useCancelProjectSubscription();
8565
- const prices = chunk53RCZPMR_cjs.findProPrices(products);
8571
+ const prices = chunkP2YM67Y5_cjs.findProPrices(products);
8566
8572
  const addons = project.addons;
8567
8573
  const isCanceling = project.cancel_at_period_end === true || project.subscription === "canceled";
8568
- const currentPacks = Math.max(addons?.packs ?? project.packs ?? chunk53RCZPMR_cjs.PRO_PACKS, chunk53RCZPMR_cjs.PRO_PACKS);
8569
- const isLegacyMultiPack = currentPacks > chunk53RCZPMR_cjs.PRO_PACKS;
8574
+ const currentPacks = Math.max(addons?.packs ?? project.packs ?? chunkP2YM67Y5_cjs.PRO_PACKS, chunkP2YM67Y5_cjs.PRO_PACKS);
8575
+ const isLegacyMultiPack = currentPacks > chunkP2YM67Y5_cjs.PRO_PACKS;
8570
8576
  const currentInterval = project.plan_interval === "year" ? "year" : "month";
8571
8577
  const scheduledPacks = isCanceling ? 0 : addons?.packs_next ?? currentPacks;
8572
8578
  const scheduledInterval = addons?.pending_interval ?? currentInterval;
8573
8579
  const [targetPacks, setTargetPacks] = react.useState(scheduledPacks);
8574
8580
  const [chosenInterval, setChosenInterval] = react.useState(scheduledInterval);
8575
- const targetInterval = targetPacks > chunk53RCZPMR_cjs.PRO_PACKS ? currentInterval : chosenInterval;
8581
+ const targetInterval = targetPacks > chunkP2YM67Y5_cjs.PRO_PACKS ? currentInterval : chosenInterval;
8576
8582
  const periodEnd = formatDate(addons?.period_end ?? project.current_period_end);
8577
8583
  const when2 = periodEnd ?? "the end of the period";
8578
8584
  const shortWhen = periodEnd ? periodEnd.replace(/ \d{4}$/, "") : "period end";
8579
8585
  const isPending = changePlan.isPending || cancel.isPending;
8580
8586
  const sameAsScheduled = targetPacks === scheduledPacks && (targetPacks === 0 || targetInterval === scheduledInterval);
8581
- const packOptions = isLegacyMultiPack ? [currentPacks, chunk53RCZPMR_cjs.PRO_PACKS, 0] : [chunk53RCZPMR_cjs.PRO_PACKS, 0];
8587
+ const packOptions = isLegacyMultiPack ? [currentPacks, chunkP2YM67Y5_cjs.PRO_PACKS, 0] : [chunkP2YM67Y5_cjs.PRO_PACKS, 0];
8582
8588
  const intervalPrice = targetInterval === "year" ? prices.annual : prices.monthly;
8583
8589
  const currency = intervalPrice?.currency ?? project.currency ?? "gbp";
8584
8590
  const preview = react$1.usePreviewProjectPlanChange(
@@ -8586,7 +8592,7 @@ function ChangeProPlan({
8586
8592
  sameAsScheduled || targetPacks === 0 ? null : { packs: targetPacks, interval: targetInterval }
8587
8593
  );
8588
8594
  const noChange = sameAsScheduled || preview.data?.unchanged === true;
8589
- const nameFor = (packs) => packs === currentPacks && packs > 0 ? chunk53RCZPMR_cjs.proTierName(project) : chunk53RCZPMR_cjs.planNameForPacks(packs);
8595
+ const nameFor = (packs) => packs === currentPacks && packs > 0 ? chunkP2YM67Y5_cjs.proTierName(project) : chunkP2YM67Y5_cjs.planNameForPacks(packs);
8590
8596
  const effects = [];
8591
8597
  const target = nameFor(targetPacks);
8592
8598
  if (targetPacks === 0) {
@@ -8596,7 +8602,7 @@ function ChangeProPlan({
8596
8602
  if (targetPacks < currentPacks) {
8597
8603
  effects.push(`Changes to one Pro licence on ${when2}. No refund.`);
8598
8604
  } else if (!isCanceling && addons?.packs_next != null) {
8599
- effects.push(`Cancels the change to ${chunk53RCZPMR_cjs.planNameForPacks(addons.packs_next)}.`);
8605
+ effects.push(`Cancels the change to ${chunkP2YM67Y5_cjs.planNameForPacks(addons.packs_next)}.`);
8600
8606
  }
8601
8607
  if (targetInterval !== currentInterval) {
8602
8608
  effects.push(`${targetInterval === "year" ? "Annual" : "Monthly"} billing from ${when2}.`);
@@ -8635,33 +8641,33 @@ function ChangeProPlan({
8635
8641
  if (packs === 0) {
8636
8642
  return {
8637
8643
  total: "\xA30",
8638
- summary: `${react$1.formatGbp(chunk53RCZPMR_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunk53RCZPMR_cjs.FREE_STORAGE_MB} MB \xB7 just you`
8644
+ summary: `${react$1.formatGbp(chunkP2YM67Y5_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunkP2YM67Y5_cjs.FREE_STORAGE_MB} MB \xB7 just you`
8639
8645
  };
8640
8646
  }
8641
- const allowance = `${react$1.formatGbp(chunk53RCZPMR_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunk53RCZPMR_cjs.PRO_STORAGE_GB * packs} GB`;
8642
- const legacy = packs > chunk53RCZPMR_cjs.PRO_PACKS;
8643
- const exVat = legacy ? project.amount_ex_vat : chunk53RCZPMR_cjs.packPrice(intervalPrice)?.amount_ex_vat;
8647
+ const allowance = `${react$1.formatGbp(chunkP2YM67Y5_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunkP2YM67Y5_cjs.PRO_STORAGE_GB * packs} GB`;
8648
+ const legacy = packs > chunkP2YM67Y5_cjs.PRO_PACKS;
8649
+ const exVat = legacy ? project.amount_ex_vat : chunkP2YM67Y5_cjs.packPrice(intervalPrice)?.amount_ex_vat;
8644
8650
  return {
8645
- total: exVat != null ? chunk53RCZPMR_cjs.plusVat(exVat, currency) : void 0,
8651
+ total: exVat != null ? chunkP2YM67Y5_cjs.plusVat(exVat, currency) : void 0,
8646
8652
  summary: allowance
8647
8653
  };
8648
8654
  };
8649
- return /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanStack, { gap: 4, testId: "change-pro-plan", children: [
8655
+ return /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanStack, { gap: 4, testId: "change-pro-plan", children: [
8650
8656
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
8651
8657
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-foreground", children: "Billing" }),
8652
- targetPacks > chunk53RCZPMR_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(
8653
- chunkSN2GZ4ZM_cjs.PricingToggle,
8658
+ targetPacks > chunkP2YM67Y5_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(
8659
+ chunkTQUYWUEE_cjs.PricingToggle,
8654
8660
  {
8655
8661
  isAnnual: targetInterval === "year",
8656
8662
  onToggle: () => setChosenInterval(targetInterval === "year" ? "month" : "year"),
8657
- savingsPercent: chunk53RCZPMR_cjs.calcSavingsPercent(prices.monthly, prices.annual)
8663
+ savingsPercent: chunkP2YM67Y5_cjs.calcSavingsPercent(prices.monthly, prices.annual)
8658
8664
  }
8659
8665
  )
8660
8666
  ] }),
8661
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
8667
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
8662
8668
  const { total, summary } = optionFor(packs);
8663
8669
  return /* @__PURE__ */ jsxRuntime.jsx(
8664
- chunkSN2GZ4ZM_cjs.PlanTierOption,
8670
+ chunkTQUYWUEE_cjs.PlanTierOption,
8665
8671
  {
8666
8672
  onSelect: setTargetPacks,
8667
8673
  option: {
@@ -8678,13 +8684,13 @@ function ChangeProPlan({
8678
8684
  );
8679
8685
  }) }),
8680
8686
  isLegacyMultiPack && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1", children: [
8681
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
8682
- chunk53RCZPMR_cjs.proTierName(project),
8687
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
8688
+ chunkP2YM67Y5_cjs.proTierName(project),
8683
8689
  " is no longer sold"
8684
8690
  ] }),
8685
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
8691
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
8686
8692
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
8687
- chunk53RCZPMR_cjs.proTierName(project),
8693
+ chunkP2YM67Y5_cjs.proTierName(project),
8688
8694
  " keeps renewing at its own price, with its allowance and add-ons, until you change it."
8689
8695
  ] }),
8690
8696
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
@@ -8705,7 +8711,7 @@ function ChangeProPlan({
8705
8711
  ),
8706
8712
  targetPacks > 0 && /* @__PURE__ */ jsxRuntime.jsx(ReferralRewardNote2, {}),
8707
8713
  /* @__PURE__ */ jsxRuntime.jsx(
8708
- chunkSN2GZ4ZM_cjs.PlanActionButton,
8714
+ chunkTQUYWUEE_cjs.PlanActionButton,
8709
8715
  {
8710
8716
  onClick: apply,
8711
8717
  disabled: noChange || isPending,
@@ -8716,9 +8722,9 @@ function ChangeProPlan({
8716
8722
  ] });
8717
8723
  }
8718
8724
  function ChangePlanDialog({ project, open, onOpenChange }) {
8719
- const isPro = !!project && chunk53RCZPMR_cjs.isProProject(project);
8725
+ const isPro = !!project && chunkP2YM67Y5_cjs.isProProject(project);
8720
8726
  return /* @__PURE__ */ jsxRuntime.jsx(
8721
- chunkSN2GZ4ZM_cjs.PlanDialogFrame,
8727
+ chunkTQUYWUEE_cjs.PlanDialogFrame,
8722
8728
  {
8723
8729
  open,
8724
8730
  onOpenChange,
@@ -8738,14 +8744,14 @@ function ChangePlanDialog({ project, open, onOpenChange }) {
8738
8744
  }
8739
8745
  function ProjectsTable() {
8740
8746
  const { data: projects, isLoading } = react$1.useProjects();
8741
- const currentUserExtId = chunk53RCZPMR_cjs.useSelfExtId();
8747
+ const currentUserExtId = chunkP2YM67Y5_cjs.useSelfExtId();
8742
8748
  const { openProject } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
8743
8749
  const updateProject = react$1.useUpdateProjectFields();
8744
8750
  const [renameTarget, setRenameTarget] = react.useState(null);
8745
8751
  const [renameValue, setRenameValue] = react.useState("");
8746
8752
  const [invoicesTarget, setInvoicesTarget] = react.useState(null);
8747
8753
  const [upgradeTarget, setUpgradeTarget] = react.useState(null);
8748
- const { stripeEnabled } = chunk53RCZPMR_cjs.useBillingSupport();
8754
+ const { stripeEnabled } = chunkP2YM67Y5_cjs.useBillingSupport();
8749
8755
  const ownedProjects = react.useMemo(
8750
8756
  () => (projects ?? []).filter((p) => p.created_by === currentUserExtId),
8751
8757
  [projects, currentUserExtId]
@@ -8784,13 +8790,13 @@ function ProjectsTable() {
8784
8790
  const hasPaid = p.subscription === "active" || p.subscription === "past_due";
8785
8791
  const canUpgrade = stripeEnabled && !hasPaid && p.subscription !== "canceled" && p.subscription !== "dev";
8786
8792
  return /* @__PURE__ */ jsxRuntime.jsx(
8787
- chunkSN2GZ4ZM_cjs.ProjectRow,
8793
+ chunkTQUYWUEE_cjs.ProjectRow,
8788
8794
  {
8789
8795
  testId: `project-row-${p.external_id}`,
8790
8796
  onOpen: () => openProject(p.external_id),
8791
8797
  identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "mine", subscription: p.subscription, size: "sm" }),
8792
- summary: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanBadge, { ...chunk53RCZPMR_cjs.planBadgeView(p) }) }) : void 0,
8793
- usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.QuotaMeter, { items: chunk53RCZPMR_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
8798
+ summary: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center whitespace-nowrap", children: /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanBadge, { ...chunkP2YM67Y5_cjs.planBadgeView(p) }) }) : void 0,
8799
+ usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.QuotaMeter, { items: chunkP2YM67Y5_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
8794
8800
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8795
8801
  canUpgrade && /* @__PURE__ */ jsxRuntime.jsxs(
8796
8802
  ui.Button,
@@ -8824,9 +8830,9 @@ function ProjectsTable() {
8824
8830
  );
8825
8831
  };
8826
8832
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8827
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
8833
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
8828
8834
  /* @__PURE__ */ jsxRuntime.jsx(
8829
- chunkSN2GZ4ZM_cjs.RenameDialog,
8835
+ chunkTQUYWUEE_cjs.RenameDialog,
8830
8836
  {
8831
8837
  open: !!renameTarget,
8832
8838
  onClose: () => setRenameTarget(null),
@@ -8857,7 +8863,7 @@ function ProjectsTable() {
8857
8863
  }
8858
8864
  function SharedProjects() {
8859
8865
  const { data: projects } = react$1.useProjects();
8860
- const currentUserExtId = chunk53RCZPMR_cjs.useSelfExtId();
8866
+ const currentUserExtId = chunkP2YM67Y5_cjs.useSelfExtId();
8861
8867
  const { data: usageToday } = react$1.useUserUsageToday();
8862
8868
  const shared = react.useMemo(
8863
8869
  () => (projects ?? []).filter((p) => p.created_by !== currentUserExtId),
@@ -8865,10 +8871,10 @@ function SharedProjects() {
8865
8871
  );
8866
8872
  if (shared.length === 0) return null;
8867
8873
  const usedToday = usageToday?.used_gbp ?? 0;
8868
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.SharedProjectsSection, { footnote: "Your daily AI usage allowance in projects other people run \u2014 their plan and billing are theirs.", children: shared.map((p) => {
8874
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.SharedProjectsSection, { footnote: "Your daily AI usage allowance in projects other people run \u2014 their plan and billing are theirs.", children: shared.map((p) => {
8869
8875
  const cap = p.daily_cap_per_user;
8870
8876
  return /* @__PURE__ */ jsxRuntime.jsx(
8871
- chunkSN2GZ4ZM_cjs.SharedProjectRow,
8877
+ chunkTQUYWUEE_cjs.SharedProjectRow,
8872
8878
  {
8873
8879
  testId: `shared-project-${p.external_id}`,
8874
8880
  identity: /* @__PURE__ */ jsxRuntime.jsx(BillingProjectEntity, { name: p.name, relation: "other", size: "sm" }),
@@ -8912,7 +8918,7 @@ function DailyCapEditor({ project }) {
8912
8918
  );
8913
8919
  };
8914
8920
  return /* @__PURE__ */ jsxRuntime.jsx(
8915
- chunkSN2GZ4ZM_cjs.DailyCapField,
8921
+ chunkTQUYWUEE_cjs.DailyCapField,
8916
8922
  {
8917
8923
  value,
8918
8924
  onChange: setValue,
@@ -8925,11 +8931,11 @@ function DailyCapEditor({ project }) {
8925
8931
  function SubscriptionStatus({ project }) {
8926
8932
  const { quotas, cancel_at_period_end, subscription, current_period_end, addons } = project;
8927
8933
  return /* @__PURE__ */ jsxRuntime.jsx(
8928
- chunkSN2GZ4ZM_cjs.SubscriptionStatusView,
8934
+ chunkTQUYWUEE_cjs.SubscriptionStatusView,
8929
8935
  {
8930
- resetDate: chunk53RCZPMR_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
8936
+ resetDate: chunkP2YM67Y5_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
8931
8937
  isCanceling: subscription === "canceled" || cancel_at_period_end === true,
8932
- meters: chunk53RCZPMR_cjs.getQuotaItems(quotas).map((q) => ({
8938
+ meters: chunkP2YM67Y5_cjs.getQuotaItems(quotas).map((q) => ({
8933
8939
  key: q.key,
8934
8940
  icon: q.icon,
8935
8941
  label: q.label,
@@ -8993,7 +8999,7 @@ function PendingChange({
8993
8999
  }
8994
9000
  );
8995
9001
  }
8996
- var titleFor = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `Add ${react$1.formatGbp(blockAiGbp ?? chunk53RCZPMR_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunk53RCZPMR_cjs.STORAGE_BLOCK_GB} GB storage`;
9002
+ var titleFor = (kind, blockAiGbp, blockStorageGb) => kind === "ai_usage" ? `Add ${react$1.formatGbp(blockAiGbp ?? chunkP2YM67Y5_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunkP2YM67Y5_cjs.STORAGE_BLOCK_GB} GB storage`;
8997
9003
  var blocksOf = (kind, project) => (kind === "ai_usage" ? project.addons?.ai_blocks : project.addons?.storage_blocks) ?? 0;
8998
9004
  function Row({ label, children }) {
8999
9005
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline justify-between gap-4", children: [
@@ -9014,11 +9020,11 @@ function AddAddonDialog({
9014
9020
  const addons = project.addons;
9015
9021
  if (!addons) return null;
9016
9022
  const isAnnual = project.plan_interval === "year";
9017
- const price = chunk53RCZPMR_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
9018
- const nextCharge = chunk53RCZPMR_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
9019
- const now = quote.data ? chunk53RCZPMR_cjs.quoteParts(quote.data.now) : null;
9020
- const renewal = quote.data ? chunk53RCZPMR_cjs.quoteParts(quote.data.renewal) : null;
9021
- const today = now ? { total: chunk53RCZPMR_cjs.money2(now.total), detail: chunk53RCZPMR_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
9023
+ const price = chunkP2YM67Y5_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
9024
+ const nextCharge = chunkP2YM67Y5_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
9025
+ const now = quote.data ? chunkP2YM67Y5_cjs.quoteParts(quote.data.now) : null;
9026
+ const renewal = quote.data ? chunkP2YM67Y5_cjs.quoteParts(quote.data.renewal) : null;
9027
+ const today = now ? { total: chunkP2YM67Y5_cjs.money2(now.total), detail: chunkP2YM67Y5_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
9022
9028
  const pricing = quote.isLoading;
9023
9029
  const confirm = () => {
9024
9030
  const before = blocksOf(kind, project);
@@ -9057,8 +9063,8 @@ function AddAddonDialog({
9057
9063
  isAnnual ? "yearly" : "monthly",
9058
9064
  " \xB7 no refund"
9059
9065
  ] }),
9060
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
9061
- chunkSN2GZ4ZM_cjs.MoreInfoList,
9066
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
9067
+ chunkTQUYWUEE_cjs.MoreInfoList,
9062
9068
  {
9063
9069
  items: [
9064
9070
  {
@@ -9073,7 +9079,7 @@ function AddAddonDialog({
9073
9079
  term: "Usage cap",
9074
9080
  text: "Adding by hand is never blocked by the usage cap; the cap limits automatic top-ups only."
9075
9081
  },
9076
- ...isAnnual && kind === "ai_usage" ? [{ term: "Annual", text: `${chunk53RCZPMR_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : []
9082
+ ...isAnnual && kind === "ai_usage" ? [{ term: "Annual", text: `${chunkP2YM67Y5_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : []
9077
9083
  ]
9078
9084
  }
9079
9085
  ) })
@@ -9096,7 +9102,7 @@ function AddAddonDialog({
9096
9102
  )
9097
9103
  ] }) }),
9098
9104
  !pricing && /* @__PURE__ */ jsxRuntime.jsxs(Row, { label: "Next charge", children: [
9099
- renewal ? chunk53RCZPMR_cjs.totalWithTaxWord(renewal) : price.then.replace(/\/(month|year)/, ""),
9105
+ renewal ? chunkP2YM67Y5_cjs.totalWithTaxWord(renewal) : price.then.replace(/\/(month|year)/, ""),
9100
9106
  nextCharge ? ` on ${nextCharge}` : " at renewal"
9101
9107
  ] })
9102
9108
  ] }) }),
@@ -9127,11 +9133,11 @@ function ReduceAddonDialog({
9127
9133
  const update = react$1.useUpdateProjectNextPeriodAddons();
9128
9134
  const addons = project.addons;
9129
9135
  if (!addons) return null;
9130
- const { min, next } = chunk53RCZPMR_cjs.reduceBounds(kind, addons);
9136
+ const { min, next } = chunkP2YM67Y5_cjs.reduceBounds(kind, addons);
9131
9137
  const keep = Math.max(min, next - 1);
9132
- const size = chunk53RCZPMR_cjs.nextRemovedBlockSize(kind, addons);
9133
- const what = chunk53RCZPMR_cjs.stepLabel(kind, size);
9134
- const from = chunk53RCZPMR_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
9138
+ const size = chunkP2YM67Y5_cjs.nextRemovedBlockSize(kind, addons);
9139
+ const what = chunkP2YM67Y5_cjs.stepLabel(kind, size);
9140
+ const from = chunkP2YM67Y5_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
9135
9141
  const fromShort = from.replace(/ \d{4}$/, "");
9136
9142
  const allowanceNext = kind === "ai_usage" ? addons.ai_allowance_next_gbp - size : addons.storage_allowance_next_gb - size;
9137
9143
  const allowanceNow = kind === "ai_usage" ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -9139,7 +9145,7 @@ function ReduceAddonDialog({
9139
9145
  const save = () => update.mutate(
9140
9146
  {
9141
9147
  projectExtId: project.external_id,
9142
- body: chunk53RCZPMR_cjs.nextPeriodBody(kind, keep)
9148
+ body: chunkP2YM67Y5_cjs.nextPeriodBody(kind, keep)
9143
9149
  },
9144
9150
  {
9145
9151
  onSuccess: () => {
@@ -9167,7 +9173,7 @@ function ReduceAddonDialog({
9167
9173
  fromShort,
9168
9174
  " \xB7 no refund"
9169
9175
  ] }),
9170
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.MoreInfo, { title: "Reducing a top-up", testId: "reduce-addon-more-info", children: [
9176
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.MoreInfo, { title: "Reducing a top-up", testId: "reduce-addon-more-info", children: [
9171
9177
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
9172
9178
  "The reduction applies from your next renewal (",
9173
9179
  from,
@@ -9206,7 +9212,7 @@ function ReduceAddonDialog({
9206
9212
  }
9207
9213
  ) });
9208
9214
  }
9209
- var gbp = (pence) => chunk53RCZPMR_cjs.formatMoney(pence, "gbp");
9215
+ var gbp = (pence) => chunkP2YM67Y5_cjs.formatMoney(pence, "gbp");
9210
9216
  var gb2 = (n) => `${Math.round(n * 10) / 10} GB`;
9211
9217
  var pct = (used, limit) => limit > 0 ? Math.min(100, used / limit * 100) : 0;
9212
9218
  function formatShortDate(unix) {
@@ -9218,20 +9224,20 @@ function AutoTopupThreshold({
9218
9224
  addons
9219
9225
  }) {
9220
9226
  const updateSettings = react$1.useUpdateProjectAddonSettings();
9221
- const min = addons.min_auto_topup_threshold_gbp || chunk53RCZPMR_cjs.MIN_AUTO_TOPUP_THRESHOLD_GBP;
9227
+ const min = addons.min_auto_topup_threshold_gbp || chunkP2YM67Y5_cjs.MIN_AUTO_TOPUP_THRESHOLD_GBP;
9222
9228
  const saved = addons.auto_topup_threshold_gbp;
9223
9229
  const [value, setValue] = react.useState(String(saved));
9224
9230
  react.useEffect(() => setValue(String(saved)), [saved]);
9225
9231
  const parsed = Number(value);
9226
9232
  const valid = Number.isFinite(parsed) && parsed >= min;
9227
9233
  const dirty = valid && parsed !== saved;
9228
- const off = chunk53RCZPMR_cjs.isAddonBudgetZero(addons);
9234
+ const off = chunkP2YM67Y5_cjs.isAddonBudgetZero(addons);
9229
9235
  const save = () => {
9230
9236
  if (!dirty) return;
9231
9237
  updateSettings.mutate(
9232
9238
  {
9233
9239
  projectExtId: project.external_id,
9234
- body: chunk53RCZPMR_cjs.addonSettingsBody(addons, { auto_topup_threshold_gbp: parsed })
9240
+ body: chunkP2YM67Y5_cjs.addonSettingsBody(addons, { auto_topup_threshold_gbp: parsed })
9235
9241
  },
9236
9242
  {
9237
9243
  onSuccess: () => shell.notify.success(`Auto-add below ${react$1.formatGbp(parsed)} of AI usage left`),
@@ -9328,10 +9334,10 @@ function ResourceMeter({
9328
9334
  const update = react$1.useUpdateProjectNextPeriodAddons();
9329
9335
  const isAi = kind === "ai_usage";
9330
9336
  const slug = isAi ? "ai-usage" : "storage";
9331
- const periodEnd = chunk53RCZPMR_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
9337
+ const periodEnd = chunkP2YM67Y5_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
9332
9338
  const from = periodEnd ?? "your next renewal";
9333
9339
  const fromShort = formatShortDate(addons.period_end ?? project.current_period_end) ?? "renewal";
9334
- const { min, current, next } = chunk53RCZPMR_cjs.reduceBounds(kind, addons);
9340
+ const { min, current, next } = chunkP2YM67Y5_cjs.reduceBounds(kind, addons);
9335
9341
  const fmt = (n) => isAi ? react$1.formatGbp(n) : gb2(n);
9336
9342
  const used = isAi ? addons.ai_used_gbp : addons.storage_used_gb;
9337
9343
  const allowance = isAi ? addons.ai_allowance_gbp : addons.storage_allowance_gb;
@@ -9339,15 +9345,15 @@ function ResourceMeter({
9339
9345
  const plan = isAi ? addons.plan_ai_gbp : addons.plan_storage_gb;
9340
9346
  const topUps = Math.max(0, allowance - plan);
9341
9347
  const blocks = isAi ? addons.ai_blocks : addons.storage_blocks;
9342
- const hasLegacy = chunk53RCZPMR_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
9343
- const room = chunk53RCZPMR_cjs.autoRoom(kind, addons);
9344
- const capZero = chunk53RCZPMR_cjs.isAddonBudgetZero(addons);
9345
- const resets = isAi ? formatShortDate(chunk53RCZPMR_cjs.aiUsageResetTimestamp(project)) : null;
9346
- const removeSize = chunk53RCZPMR_cjs.nextRemovedBlockSize(kind, addons);
9348
+ const hasLegacy = chunkP2YM67Y5_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
9349
+ const room = chunkP2YM67Y5_cjs.autoRoom(kind, addons);
9350
+ const capZero = chunkP2YM67Y5_cjs.isAddonBudgetZero(addons);
9351
+ const resets = isAi ? formatShortDate(chunkP2YM67Y5_cjs.aiUsageResetTimestamp(project)) : null;
9352
+ const removeSize = chunkP2YM67Y5_cjs.nextRemovedBlockSize(kind, addons);
9347
9353
  const undo = () => update.mutate(
9348
9354
  {
9349
9355
  projectExtId: project.external_id,
9350
- body: chunk53RCZPMR_cjs.nextPeriodBody(kind, current)
9356
+ body: chunkP2YM67Y5_cjs.nextPeriodBody(kind, current)
9351
9357
  },
9352
9358
  {
9353
9359
  onSuccess: () => shell.notify.success("Kept"),
@@ -9364,7 +9370,7 @@ function ResourceMeter({
9364
9370
  allowance: { used, plan, topUps, autoRoom: capZero ? 0 : room },
9365
9371
  legend: {
9366
9372
  plan: `Plan ${fmt(plan)}`,
9367
- topUps: topUps > 0 ? `Top-ups ${fmt(topUps)}${hasLegacy ? ` (${chunk53RCZPMR_cjs.blocksLabel(kind, blocks, addons)})` : ""}` : void 0,
9373
+ topUps: topUps > 0 ? `Top-ups ${fmt(topUps)}${hasLegacy ? ` (${chunkP2YM67Y5_cjs.blocksLabel(kind, blocks, addons)})` : ""}` : void 0,
9368
9374
  autoRoom: room != null && room > 0 && !capZero ? `Automatic up to ${fmt(room)}` : void 0
9369
9375
  },
9370
9376
  testId: `usage-meter-${slug}`,
@@ -9393,9 +9399,9 @@ function ResourceMeter({
9393
9399
  {
9394
9400
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-3.5" }),
9395
9401
  label: isAi ? react$1.formatGbp(addons.block_ai_gbp) : `${addons.block_storage_gb} GB`,
9396
- caption: chunk53RCZPMR_cjs.addStepCaption(kind, addons),
9402
+ caption: chunkP2YM67Y5_cjs.addStepCaption(kind, addons),
9397
9403
  onClick: onAdd,
9398
- ariaLabel: `Add ${chunk53RCZPMR_cjs.stepLabel(kind, isAi ? addons.block_ai_gbp : addons.block_storage_gb)}`,
9404
+ ariaLabel: `Add ${chunkP2YM67Y5_cjs.stepLabel(kind, isAi ? addons.block_ai_gbp : addons.block_storage_gb)}`,
9399
9405
  testId: isAi ? "add-ai-block-button" : "add-storage-block-button"
9400
9406
  }
9401
9407
  ),
@@ -9406,7 +9412,7 @@ function ResourceMeter({
9406
9412
  label: isAi ? react$1.formatGbp(removeSize) : `${removeSize} GB`,
9407
9413
  caption: `from ${fromShort}`,
9408
9414
  onClick: onReduce,
9409
- ariaLabel: `Remove ${chunk53RCZPMR_cjs.stepLabel(kind, removeSize)} from ${from}`,
9415
+ ariaLabel: `Remove ${chunkP2YM67Y5_cjs.stepLabel(kind, removeSize)} from ${from}`,
9410
9416
  testId: `reduce-${slug}-button`
9411
9417
  }
9412
9418
  )
@@ -9445,10 +9451,10 @@ function UsageCapEditor({ project, addons }) {
9445
9451
  updateSettings.mutate(
9446
9452
  {
9447
9453
  projectExtId: project.external_id,
9448
- body: chunk53RCZPMR_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
9454
+ body: chunkP2YM67Y5_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
9449
9455
  },
9450
9456
  {
9451
- onSuccess: () => shell.notify.success(chunk53RCZPMR_cjs.budgetSavedMessage(nextCap)),
9457
+ onSuccess: () => shell.notify.success(chunkP2YM67Y5_cjs.budgetSavedMessage(nextCap)),
9452
9458
  onError: (error) => shell.notify.error(addonErrorMessage(error))
9453
9459
  }
9454
9460
  );
@@ -9459,14 +9465,14 @@ function UsageCapEditor({ project, addons }) {
9459
9465
  /* @__PURE__ */ jsxRuntime.jsx(
9460
9466
  chunkQZTNTP75_cjs.UsageMeter,
9461
9467
  {
9462
- label: chunk53RCZPMR_cjs.USAGE_CAP_LABEL,
9468
+ label: chunkP2YM67Y5_cjs.USAGE_CAP_LABEL,
9463
9469
  hint: spendResets && savedCap !== 0 ? `resets ${spendResets}` : void 0,
9464
9470
  value: readout,
9465
9471
  pct: savedCap != null && savedCap > 0 ? pct(spent, savedCap) : 0,
9466
9472
  testId: "addon-spend"
9467
9473
  }
9468
9474
  ),
9469
- addons.cap_reached && savedCap != null && savedCap > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-cap-reached", children: chunk53RCZPMR_cjs.CAP_REACHED_MESSAGE }),
9475
+ addons.cap_reached && savedCap != null && savedCap > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-cap-reached", children: chunkP2YM67Y5_cjs.CAP_REACHED_MESSAGE }),
9470
9476
  addons.manual_spent_pence > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground", "data-testid": "addon-manual-spend", children: [
9471
9477
  "Added by hand this month: ",
9472
9478
  gbp(addons.manual_spent_pence),
@@ -9487,7 +9493,7 @@ function UsageCapEditor({ project, addons }) {
9487
9493
  step: 25,
9488
9494
  className: "h-9 w-28",
9489
9495
  value: noCap ? "" : value,
9490
- placeholder: noCap ? "No limit" : String(chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
9496
+ placeholder: noCap ? "No limit" : String(chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE / 100),
9491
9497
  disabled: noCap,
9492
9498
  onChange: (e) => setValue(e.target.value),
9493
9499
  onKeyDown: (e) => e.key === "Enter" && save(),
@@ -9513,7 +9519,7 @@ function UsageCapEditor({ project, addons }) {
9513
9519
  checked: noCap,
9514
9520
  onCheckedChange: (checked) => {
9515
9521
  setNoCap(checked);
9516
- if (!checked && value === "") setValue(String(chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
9522
+ if (!checked && value === "") setValue(String(chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
9517
9523
  },
9518
9524
  "data-testid": "no-cap-switch"
9519
9525
  }
@@ -9526,8 +9532,8 @@ function UsageCapEditor({ project, addons }) {
9526
9532
  function UsageInfo({ addons, isAnnual }) {
9527
9533
  const period = isAnnual ? "year" : "month";
9528
9534
  const legacy = (addons.legacy_ai_blocks ?? 0) > 0 || (addons.legacy_storage_blocks ?? 0) > 0;
9529
- return /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
9530
- chunkSN2GZ4ZM_cjs.MoreInfoList,
9535
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
9536
+ chunkTQUYWUEE_cjs.MoreInfoList,
9531
9537
  {
9532
9538
  items: [
9533
9539
  {
@@ -9542,7 +9548,7 @@ function UsageInfo({ addons, isAnnual }) {
9542
9548
  term: "Automatic top-ups",
9543
9549
  text: "One step is added when AI usage drops below your auto top-up level, or when an upload needs more storage."
9544
9550
  },
9545
- { term: "Usage cap", text: chunk53RCZPMR_cjs.USAGE_CAP_HELP },
9551
+ { term: "Usage cap", text: chunkP2YM67Y5_cjs.USAGE_CAP_HELP },
9546
9552
  {
9547
9553
  term: "Reducing",
9548
9554
  text: "\u2212 removes one step from your next renewal. You keep this period's allowance. No refunds."
@@ -9553,7 +9559,7 @@ function UsageInfo({ addons, isAnnual }) {
9553
9559
  text: "Top-ups bought on an earlier price keep their size and price until removed; they are removed last."
9554
9560
  }
9555
9561
  ] : [],
9556
- ...isAnnual ? [{ term: "Annual", text: `${chunk53RCZPMR_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : [],
9562
+ ...isAnnual ? [{ term: "Annual", text: `${chunkP2YM67Y5_cjs.ANNUAL_PREMIUM_AI_NOTE}.` }] : [],
9557
9563
  {
9558
9564
  term: "Prices",
9559
9565
  text: "Shown ex VAT. The confirm step shows the total with VAT before you pay."
@@ -9645,7 +9651,7 @@ function formatShortDate2(unix) {
9645
9651
  if (!unix) return null;
9646
9652
  return new Date(unix * 1e3).toLocaleDateString("en-GB", { day: "numeric", month: "short" });
9647
9653
  }
9648
- var gbp2 = (pence) => chunk53RCZPMR_cjs.formatMoney(pence, "gbp");
9654
+ var gbp2 = (pence) => chunkP2YM67Y5_cjs.formatMoney(pence, "gbp");
9649
9655
  var gbNum = (n) => `${Math.round(n * 10) / 10}`;
9650
9656
  var pct2 = (used, limit) => limit > 0 ? Math.min(100, used / limit * 100) : 0;
9651
9657
  function Meter({
@@ -9663,15 +9669,15 @@ function Meter({
9663
9669
  ] });
9664
9670
  }
9665
9671
  function usePlanPrice(project) {
9666
- const { data: products } = react$1.useProducts({ enabled: chunk53RCZPMR_cjs.isProProject(project) });
9667
- if (!chunk53RCZPMR_cjs.isProProject(project)) return null;
9672
+ const { data: products } = react$1.useProducts({ enabled: chunkP2YM67Y5_cjs.isProProject(project) });
9673
+ if (!chunkP2YM67Y5_cjs.isProProject(project)) return null;
9668
9674
  const isAnnual = project.plan_interval === "year";
9669
9675
  if (project.amount != null) {
9670
9676
  return { incl: project.amount, ex: project.amount_ex_vat ?? null, isAnnual };
9671
9677
  }
9672
- if ((project.packs ?? chunk53RCZPMR_cjs.PRO_PACKS) > chunk53RCZPMR_cjs.PRO_PACKS) return null;
9673
- const prices = chunk53RCZPMR_cjs.findProPrices(products);
9674
- const pp = chunk53RCZPMR_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
9678
+ if ((project.packs ?? chunkP2YM67Y5_cjs.PRO_PACKS) > chunkP2YM67Y5_cjs.PRO_PACKS) return null;
9679
+ const prices = chunkP2YM67Y5_cjs.findProPrices(products);
9680
+ const pp = chunkP2YM67Y5_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
9675
9681
  return pp ? { incl: pp.amount, ex: pp.amount_ex_vat, isAnnual } : null;
9676
9682
  }
9677
9683
  function paidLine(payment, addons) {
@@ -9684,11 +9690,11 @@ function ProjectPlanCard({
9684
9690
  onChangePlan
9685
9691
  }) {
9686
9692
  const { quotas, addons } = project;
9687
- const isPro = chunk53RCZPMR_cjs.isProProject(project);
9693
+ const isPro = chunkP2YM67Y5_cjs.isProProject(project);
9688
9694
  const used = quotas?.ai_usage?.used ?? 0;
9689
9695
  const limit = quotas?.ai_usage?.limit ?? 0;
9690
- const resetDate = formatShortDate2(chunk53RCZPMR_cjs.aiUsageResetTimestamp(project));
9691
- const periodEnd = chunk53RCZPMR_cjs.formatPeriodEnd(addons?.period_end ?? project.current_period_end);
9696
+ const resetDate = formatShortDate2(chunkP2YM67Y5_cjs.aiUsageResetTimestamp(project));
9697
+ const periodEnd = chunkP2YM67Y5_cjs.formatPeriodEnd(addons?.period_end ?? project.current_period_end);
9692
9698
  const when2 = periodEnd ?? "the end of the period";
9693
9699
  const storageUsed = quotas?.storage_gb?.used ?? 0;
9694
9700
  const storageLimit = quotas?.storage_gb?.limit ?? 0;
@@ -9704,7 +9710,7 @@ function ProjectPlanCard({
9704
9710
  project.external_id,
9705
9711
  hasScheduledChange && addons ? { packs: packsNext ?? addons.packs, interval: pending ?? currentInterval } : null
9706
9712
  ).data;
9707
- const tier = isPro ? chunk53RCZPMR_cjs.proTierName(project) : project.subscription === "dev" ? "Dev" : "Free";
9713
+ const tier = isPro ? chunkP2YM67Y5_cjs.proTierName(project) : project.subscription === "dev" ? "Dev" : "Free";
9708
9714
  const pendingPayment = addons?.payment?.status === "pending" ? addons.payment : null;
9709
9715
  const confirmUrl = pendingPayment?.confirm_url ?? addons?.confirm_url;
9710
9716
  const paidPayment = addons?.payment?.status === "paid" ? addons.payment : null;
@@ -9738,7 +9744,7 @@ function ProjectPlanCard({
9738
9744
  isPro && " ",
9739
9745
  isPro && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-sm font-normal text-muted-foreground", children: currentInterval === "year" ? "Annual" : "Monthly" })
9740
9746
  ] }),
9741
- 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 ${chunk53RCZPMR_cjs.totalWithTaxWord({
9747
+ 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 ${chunkP2YM67Y5_cjs.totalWithTaxWord({
9742
9748
  subtotal: nextBill.next_renewal_ex_vat_pence,
9743
9749
  tax: nextBill.next_renewal_tax_pence,
9744
9750
  total: nextBill.next_renewal_pence,
@@ -9747,7 +9753,7 @@ function ProjectPlanCard({
9747
9753
  ] }),
9748
9754
  price && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto text-right", "data-testid": "project-plan-price", children: [
9749
9755
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg font-semibold tabular-nums text-foreground", children: [
9750
- price.ex != null ? chunk53RCZPMR_cjs.plusVat(price.ex) : gbp2(price.incl),
9756
+ price.ex != null ? chunkP2YM67Y5_cjs.plusVat(price.ex) : gbp2(price.incl),
9751
9757
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-normal text-muted-foreground", children: price.isAnnual ? "/year" : "/month" })
9752
9758
  ] }),
9753
9759
  price.ex != null && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground", children: [
@@ -9785,7 +9791,7 @@ function ProjectPlanCard({
9785
9791
  undoTestId: "undo-plan-change-button",
9786
9792
  children: [
9787
9793
  "Changes to ",
9788
- chunk53RCZPMR_cjs.planNameForPacks(packsNext),
9794
+ chunkP2YM67Y5_cjs.planNameForPacks(packsNext),
9789
9795
  " on ",
9790
9796
  when2,
9791
9797
  "."
@@ -9830,8 +9836,8 @@ function ProjectPlanCard({
9830
9836
  }
9831
9837
  )
9832
9838
  ] }),
9833
- addons?.billing_error && /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
9834
- confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanNotice, { testId: "plan-payment-state", children: [
9839
+ addons?.billing_error && /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
9840
+ confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanNotice, { testId: "plan-payment-state", children: [
9835
9841
  "Waiting for your bank",
9836
9842
  pendingPayment?.amount_pence ? ` \xB7 ${gbp2(pendingPayment.amount_pence)}` : "",
9837
9843
  " \xB7",
@@ -9849,7 +9855,7 @@ function ProjectPlanCard({
9849
9855
  ]
9850
9856
  }
9851
9857
  )
9852
- ] }) : paidPayment && addons && /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { testId: "plan-payment-state", children: paidLine(paidPayment, addons) }),
9858
+ ] }) : paidPayment && addons && /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { testId: "plan-payment-state", children: paidLine(paidPayment, addons) }),
9853
9859
  isPro && /* @__PURE__ */ jsxRuntime.jsxs(
9854
9860
  "button",
9855
9861
  {
@@ -9876,7 +9882,7 @@ function ProjectBilling({
9876
9882
  const { addons } = project;
9877
9883
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", "data-testid": "project-billing", children: [
9878
9884
  /* @__PURE__ */ jsxRuntime.jsx(ProjectPlanCard, { project, onChangePlan }),
9879
- addons && chunk53RCZPMR_cjs.isProProject(project) && /* @__PURE__ */ jsxRuntime.jsx(ProjectUsageCard, { project, addons })
9885
+ addons && chunkP2YM67Y5_cjs.isProProject(project) && /* @__PURE__ */ jsxRuntime.jsx(ProjectUsageCard, { project, addons })
9880
9886
  ] });
9881
9887
  }
9882
9888
  var BREAKDOWN_LABELS = {
@@ -10007,13 +10013,13 @@ function ProjectUsageContent({
10007
10013
  };
10008
10014
  const quotaPct = effectiveUsage && aiUsageLimit ? Math.round(effectiveUsage.total_spend / aiUsageLimit * 100) : 0;
10009
10015
  return /* @__PURE__ */ jsxRuntime.jsx(
10010
- chunkSN2GZ4ZM_cjs.UsagePanel,
10016
+ chunkTQUYWUEE_cjs.UsagePanel,
10011
10017
  {
10012
10018
  state,
10013
10019
  dateRange,
10014
10020
  emptyMessage: `No usage ${period === "current" ? "yet this month" : "last month"}.`,
10015
10021
  period: /* @__PURE__ */ jsxRuntime.jsx(
10016
- chunkSN2GZ4ZM_cjs.UsageToggle,
10022
+ chunkTQUYWUEE_cjs.UsageToggle,
10017
10023
  {
10018
10024
  ariaLabel: "Period",
10019
10025
  value: period,
@@ -10026,7 +10032,7 @@ function ProjectUsageContent({
10026
10032
  ),
10027
10033
  actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10028
10034
  effectiveUsage?.invoice_pdf && /* @__PURE__ */ jsxRuntime.jsx(
10029
- chunkSN2GZ4ZM_cjs.UsageActionButton,
10035
+ chunkTQUYWUEE_cjs.UsageActionButton,
10030
10036
  {
10031
10037
  label: "Download Stripe invoice PDF",
10032
10038
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Download, { className: "size-3.5" }),
@@ -10034,7 +10040,7 @@ function ProjectUsageContent({
10034
10040
  }
10035
10041
  ),
10036
10042
  /* @__PURE__ */ jsxRuntime.jsx(
10037
- chunkSN2GZ4ZM_cjs.UsageActionButton,
10043
+ chunkTQUYWUEE_cjs.UsageActionButton,
10038
10044
  {
10039
10045
  label: "Print usage summary",
10040
10046
  icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Printer, { className: "size-3.5" }),
@@ -10044,7 +10050,7 @@ function ProjectUsageContent({
10044
10050
  ] }),
10045
10051
  children: effectiveUsage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10046
10052
  /* @__PURE__ */ jsxRuntime.jsx(
10047
- chunkSN2GZ4ZM_cjs.UsageSummary,
10053
+ chunkTQUYWUEE_cjs.UsageSummary,
10048
10054
  {
10049
10055
  stats: [
10050
10056
  {
@@ -10052,7 +10058,7 @@ function ProjectUsageContent({
10052
10058
  value: /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: react$1.formatGbp(effectiveUsage.total_spend) }),
10053
10059
  label: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10054
10060
  "AI usage",
10055
- quotaPct > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.UsageQuotaHint, { children: [
10061
+ quotaPct > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.UsageQuotaHint, { children: [
10056
10062
  "(",
10057
10063
  quotaPct,
10058
10064
  "% of quota)"
@@ -10073,7 +10079,7 @@ function ProjectUsageContent({
10073
10079
  }
10074
10080
  ),
10075
10081
  /* @__PURE__ */ jsxRuntime.jsx(
10076
- chunkSN2GZ4ZM_cjs.UsageToggle,
10082
+ chunkTQUYWUEE_cjs.UsageToggle,
10077
10083
  {
10078
10084
  ariaLabel: "Breakdown by",
10079
10085
  size: "fill",
@@ -10086,12 +10092,12 @@ function ProjectUsageContent({
10086
10092
  }
10087
10093
  ),
10088
10094
  /* @__PURE__ */ jsxRuntime.jsx(
10089
- chunkSN2GZ4ZM_cjs.UsageSection,
10095
+ chunkTQUYWUEE_cjs.UsageSection,
10090
10096
  {
10091
- footer: /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.UsageLegend, { series }),
10097
+ footer: /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.UsageLegend, { series }),
10092
10098
  title: `Daily AI usage${breakdown === "model" ? ` by ${BREAKDOWN_LABELS[breakdown]}` : ""}`,
10093
10099
  children: /* @__PURE__ */ jsxRuntime.jsx(
10094
- chunkSN2GZ4ZM_cjs.UsageLineChart,
10100
+ chunkTQUYWUEE_cjs.UsageLineChart,
10095
10101
  {
10096
10102
  dates,
10097
10103
  series,
@@ -10102,12 +10108,12 @@ function ProjectUsageContent({
10102
10108
  }
10103
10109
  ),
10104
10110
  /* @__PURE__ */ jsxRuntime.jsx(
10105
- chunkSN2GZ4ZM_cjs.UsageSection,
10111
+ chunkTQUYWUEE_cjs.UsageSection,
10106
10112
  {
10107
10113
  title: "Breakdown",
10108
10114
  gap: "md",
10109
10115
  action: /* @__PURE__ */ jsxRuntime.jsx(
10110
- chunkSN2GZ4ZM_cjs.UsageToggle,
10116
+ chunkTQUYWUEE_cjs.UsageToggle,
10111
10117
  {
10112
10118
  ariaLabel: "Breakdown metric",
10113
10119
  value: metric,
@@ -10119,7 +10125,7 @@ function ProjectUsageContent({
10119
10125
  }
10120
10126
  ),
10121
10127
  children: /* @__PURE__ */ jsxRuntime.jsx(
10122
- chunkSN2GZ4ZM_cjs.UsageProportionBar,
10128
+ chunkTQUYWUEE_cjs.UsageProportionBar,
10123
10129
  {
10124
10130
  metric,
10125
10131
  items: breakdownItems.map((item) => ({
@@ -10137,13 +10143,13 @@ function ProjectUsageContent({
10137
10143
  );
10138
10144
  }
10139
10145
  function ProjectDetail({ projectExtId, storage }) {
10140
- const { stripeEnabled } = chunk53RCZPMR_cjs.useBillingSupport();
10146
+ const { stripeEnabled } = chunkP2YM67Y5_cjs.useBillingSupport();
10141
10147
  const [planOpen, setPlanOpen] = react.useState(false);
10142
10148
  const [renameOpen, setRenameOpen] = react.useState(false);
10143
10149
  const [renameValue, setRenameValue] = react.useState("");
10144
10150
  const updateProject = react$1.useUpdateProjectFields();
10145
10151
  const { data: projects, isLoading } = react$1.useProjects();
10146
- const currentUserExtId = chunk53RCZPMR_cjs.useSelfExtId();
10152
+ const currentUserExtId = chunkP2YM67Y5_cjs.useSelfExtId();
10147
10153
  const project = projects?.find((p) => p.external_id === projectExtId);
10148
10154
  const handleSaveRename = react.useCallback(() => {
10149
10155
  const trimmed = renameValue.trim();
@@ -10177,7 +10183,7 @@ function ProjectDetail({ projectExtId, storage }) {
10177
10183
  }
10178
10184
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-6 space-y-6 max-w-4xl", "data-testid": `project-detail-${project.external_id}`, children: [
10179
10185
  /* @__PURE__ */ jsxRuntime.jsx(
10180
- chunkSN2GZ4ZM_cjs.ProjectDetailHeader,
10186
+ chunkTQUYWUEE_cjs.ProjectDetailHeader,
10181
10187
  {
10182
10188
  icon: /* @__PURE__ */ jsxRuntime.jsx(ui.EntityIcon, { entityType: "PROJECT" }),
10183
10189
  name: project.name,
@@ -10185,11 +10191,11 @@ function ProjectDetail({ projectExtId, storage }) {
10185
10191
  setRenameValue(project.name);
10186
10192
  setRenameOpen(true);
10187
10193
  },
10188
- badge: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanBadge, { ...chunk53RCZPMR_cjs.planBadgeView(project), size: "md" }) : void 0
10194
+ badge: stripeEnabled ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanBadge, { ...chunkP2YM67Y5_cjs.planBadgeView(project), size: "md" }) : void 0
10189
10195
  }
10190
10196
  ),
10191
10197
  hasBilling && /* @__PURE__ */ jsxRuntime.jsx(ProjectBilling, { project, onChangePlan: () => setPlanOpen(true) }),
10192
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.ProjectDetailSection, { title: hasBilling ? "Collaborator limits" : "Plan limits", children: [
10198
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.ProjectDetailSection, { title: hasBilling ? "Collaborator limits" : "Plan limits", children: [
10193
10199
  !hasBilling && /* @__PURE__ */ jsxRuntime.jsx(SubscriptionStatus, { project }),
10194
10200
  /* @__PURE__ */ jsxRuntime.jsxs(
10195
10201
  "div",
@@ -10205,7 +10211,7 @@ function ProjectDetail({ projectExtId, storage }) {
10205
10211
  }
10206
10212
  )
10207
10213
  ] }),
10208
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.ProjectDetailSection, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(
10214
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.ProjectDetailSection, { title: "Usage", children: /* @__PURE__ */ jsxRuntime.jsx(
10209
10215
  ProjectUsageContent,
10210
10216
  {
10211
10217
  projectExtId: project.external_id,
@@ -10215,7 +10221,7 @@ function ProjectDetail({ projectExtId, storage }) {
10215
10221
  ) }),
10216
10222
  storage,
10217
10223
  /* @__PURE__ */ jsxRuntime.jsx(
10218
- chunkSN2GZ4ZM_cjs.RenameDialog,
10224
+ chunkTQUYWUEE_cjs.RenameDialog,
10219
10225
  {
10220
10226
  open: renameOpen,
10221
10227
  onClose: () => setRenameOpen(false),
@@ -10230,7 +10236,7 @@ function ProjectDetail({ projectExtId, storage }) {
10230
10236
  ] });
10231
10237
  }
10232
10238
  function createProjectErrorMessage(error, fallback = "Failed to create project") {
10233
- const detail = chunk53RCZPMR_cjs.apiErrorDetail(error);
10239
+ const detail = chunkP2YM67Y5_cjs.apiErrorDetail(error);
10234
10240
  if (typeof detail === "string" && detail) return detail;
10235
10241
  const message = detail?.message;
10236
10242
  return typeof message === "string" && message ? message : fallback;
@@ -10240,7 +10246,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10240
10246
  const [plan, setPlan] = react.useState("pro");
10241
10247
  const [isAnnual, setIsAnnual] = react.useState(false);
10242
10248
  const [promoCode, setPromoCode] = react.useState("");
10243
- const [addonBudget, setAddonBudget] = react.useState(String(chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
10249
+ const [addonBudget, setAddonBudget] = react.useState(String(chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
10244
10250
  const [checkoutBudget, setCheckoutBudget] = react.useState(null);
10245
10251
  const [aiBlocks, setAiBlocks] = react.useState(0);
10246
10252
  const [storageBlocks, setStorageBlocks] = react.useState(0);
@@ -10254,7 +10260,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10254
10260
  const [checkoutProjectName, setCheckoutProjectName] = react.useState("");
10255
10261
  const [checkoutInterval, setCheckoutInterval] = react.useState("month");
10256
10262
  const paymentCompletedRef = react.useRef(false);
10257
- const { stripeEnabled } = chunk53RCZPMR_cjs.useBillingSupport();
10263
+ const { stripeEnabled } = chunkP2YM67Y5_cjs.useBillingSupport();
10258
10264
  const { data: products, isLoading: productsLoading } = react$1.useProducts({
10259
10265
  enabled: stripeEnabled
10260
10266
  });
@@ -10283,18 +10289,18 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10283
10289
  setPlan("pro");
10284
10290
  setPromoCode("");
10285
10291
  setPostalCode("");
10286
- setAddonBudget(String(chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
10292
+ setAddonBudget(String(chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE / 100));
10287
10293
  setAiBlocks(0);
10288
10294
  setStorageBlocks(0);
10289
10295
  setIsCreating(false);
10290
10296
  }
10291
10297
  onOpenChange(newOpen);
10292
10298
  };
10293
- const prices = chunk53RCZPMR_cjs.findProPrices(products);
10299
+ const prices = chunkP2YM67Y5_cjs.findProPrices(products);
10294
10300
  const intervalPrice = isAnnual ? prices.annual : prices.monthly;
10295
- const selectedPrice = chunk53RCZPMR_cjs.packPrice(intervalPrice);
10301
+ const selectedPrice = chunkP2YM67Y5_cjs.packPrice(intervalPrice);
10296
10302
  const currency = intervalPrice?.currency ?? "gbp";
10297
- const savingsPercent = chunk53RCZPMR_cjs.calcSavingsPercent(prices.monthly, prices.annual);
10303
+ const savingsPercent = chunkP2YM67Y5_cjs.calcSavingsPercent(prices.monthly, prices.annual);
10298
10304
  const isPro = stripeEnabled && plan !== "free";
10299
10305
  const quote = useCheckoutQuote({
10300
10306
  interval: isAnnual ? "year" : "month",
@@ -10304,14 +10310,14 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10304
10310
  storageBlocks,
10305
10311
  enabled: open && isPro && !!selectedPrice
10306
10312
  });
10307
- const canSubmit = !!projectName.trim() && !isCreating && !createProject.isPending && (!isPro || !!selectedPrice && chunk53RCZPMR_cjs.parseBudgetPounds(addonBudget) !== void 0 && quote.canContinue);
10313
+ const canSubmit = !!projectName.trim() && !isCreating && !createProject.isPending && (!isPro || !!selectedPrice && chunkP2YM67Y5_cjs.parseBudgetPounds(addonBudget) !== void 0 && quote.canContinue);
10308
10314
  const handleCreateFree = () => {
10309
10315
  setIsCreating(true);
10310
10316
  createProject.mutate(
10311
10317
  {
10312
10318
  name: projectName.trim(),
10313
10319
  plan: "free",
10314
- daily_cap_per_user: chunk53RCZPMR_cjs.SUGGESTED_DAILY_CAP_PER_USER
10320
+ daily_cap_per_user: chunkP2YM67Y5_cjs.SUGGESTED_DAILY_CAP_PER_USER
10315
10321
  },
10316
10322
  {
10317
10323
  onSuccess: () => {
@@ -10328,14 +10334,14 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10328
10334
  };
10329
10335
  const handleSubscribe = () => {
10330
10336
  const interval = isAnnual ? "year" : "month";
10331
- const parsed = chunk53RCZPMR_cjs.parseBudgetPounds(addonBudget);
10332
- const budgetToSend = parsed == null || parsed === chunk53RCZPMR_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed;
10337
+ const parsed = chunkP2YM67Y5_cjs.parseBudgetPounds(addonBudget);
10338
+ const budgetToSend = parsed == null || parsed === chunkP2YM67Y5_cjs.DEFAULT_SPEND_CAP_PENCE ? null : parsed;
10333
10339
  setIsCreating(true);
10334
10340
  createProject.mutate(
10335
10341
  {
10336
10342
  name: projectName.trim(),
10337
10343
  plan: "pro",
10338
- daily_cap_per_user: chunk53RCZPMR_cjs.SUGGESTED_DAILY_CAP_PER_USER
10344
+ daily_cap_per_user: chunkP2YM67Y5_cjs.SUGGESTED_DAILY_CAP_PER_USER
10339
10345
  },
10340
10346
  {
10341
10347
  onSuccess: (newProject) => {
@@ -10376,8 +10382,8 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10376
10382
  description: stripeEnabled ? "Name it and pick a plan." : "Projects group your workspaces.",
10377
10383
  showDescription: true,
10378
10384
  size: "xl",
10379
- children: /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanStack, { gap: 5, children: [
10380
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanStack, { gap: 2, children: [
10385
+ children: /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanStack, { gap: 5, children: [
10386
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanStack, { gap: 2, children: [
10381
10387
  /* @__PURE__ */ jsxRuntime.jsx(ui.Label, { htmlFor: "new-project-name", children: "Name" }),
10382
10388
  /* @__PURE__ */ jsxRuntime.jsx(
10383
10389
  ui.Input,
@@ -10393,16 +10399,16 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10393
10399
  }
10394
10400
  )
10395
10401
  ] }),
10396
- stripeEnabled && (productsLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10397
- /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PlanPickerCard, { children: [
10402
+ stripeEnabled && (productsLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10403
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PlanPickerCard, { children: [
10398
10404
  /* @__PURE__ */ jsxRuntime.jsx(
10399
- chunkSN2GZ4ZM_cjs.PlanPickerHeader,
10405
+ chunkTQUYWUEE_cjs.PlanPickerHeader,
10400
10406
  {
10401
10407
  title: "Plan",
10402
10408
  info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
10403
10409
  infoPlacement: "toggle",
10404
10410
  toggle: plan !== "free" ? /* @__PURE__ */ jsxRuntime.jsx(
10405
- chunkSN2GZ4ZM_cjs.PricingToggle,
10411
+ chunkTQUYWUEE_cjs.PricingToggle,
10406
10412
  {
10407
10413
  isAnnual,
10408
10414
  onToggle: () => setIsAnnual(!isAnnual),
@@ -10440,7 +10446,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10440
10446
  currency
10441
10447
  }
10442
10448
  ),
10443
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
10449
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PromoCodeInput, { value: promoCode, onChange: setPromoCode }),
10444
10450
  /* @__PURE__ */ jsxRuntime.jsx(
10445
10451
  CheckoutCountrySelect,
10446
10452
  {
@@ -10459,10 +10465,10 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10459
10465
  onPostalCodeChange: setPostalCode
10460
10466
  }
10461
10467
  )
10462
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { children: "Pro isn't available right now." }))
10468
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { children: "Pro isn't available right now." }))
10463
10469
  ] })),
10464
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : "Create project" }),
10465
- isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
10470
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : "Create project" }),
10471
+ isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
10466
10472
  ] })
10467
10473
  }
10468
10474
  ),
@@ -10490,7 +10496,7 @@ function NewProjectFlow({ open, onOpenChange, defaultName }) {
10490
10496
  function useAutoRefreshPendingProjects() {
10491
10497
  const { data: projects } = react$1.useProjects();
10492
10498
  const refreshProject = react$1.useRefreshProject();
10493
- const currentUserExtId = chunk53RCZPMR_cjs.useSelfExtId();
10499
+ const currentUserExtId = chunkP2YM67Y5_cjs.useSelfExtId();
10494
10500
  const refreshedRef = react.useRef(/* @__PURE__ */ new Set());
10495
10501
  react.useEffect(() => {
10496
10502
  if (!projects || !currentUserExtId) return;
@@ -10533,9 +10539,10 @@ function WorkspaceCardsView({
10533
10539
  onOpenWorkspace,
10534
10540
  onOpenProject,
10535
10541
  onCreateWorkspace,
10536
- createDisabledReason
10542
+ createDisabledReason,
10543
+ workspaceState
10537
10544
  }) {
10538
- const { stripeEnabled } = chunk53RCZPMR_cjs.useBillingSupport();
10545
+ const { stripeEnabled } = chunkP2YM67Y5_cjs.useBillingSupport();
10539
10546
  const workspaceLabel = ui.getEntityLabel("WORKSPACE");
10540
10547
  const projectLabel = ui.getEntityLabel("PROJECT").toLowerCase();
10541
10548
  const { groups, projects, selfId } = list;
@@ -10554,7 +10561,7 @@ function WorkspaceCardsView({
10554
10561
  }
10555
10562
  return /* @__PURE__ */ jsxRuntime.jsx(chunkMSFQDELO_cjs.WorkspaceList, { testId: "workspace-cards-list", children: groups.map((group) => {
10556
10563
  const project = projects.find((p) => p.external_id === group.projectExtId);
10557
- const { breakdown, readout } = chunk53RCZPMR_cjs.projectGroupBilling(project, {
10564
+ const { breakdown, readout } = chunkP2YM67Y5_cjs.projectGroupBilling(project, {
10558
10565
  isOwned: group.isOwned,
10559
10566
  stripeEnabled
10560
10567
  });
@@ -10596,27 +10603,35 @@ function WorkspaceCardsView({
10596
10603
  testId: "add-workspace-button"
10597
10604
  }
10598
10605
  ),
10599
- [...group.workspaces].sort(chunkJUUOJP7I_cjs.byRecentUpdate).map((workspace) => /* @__PURE__ */ jsxRuntime.jsx(
10600
- chunkMSFQDELO_cjs.WorkspaceCard,
10601
- {
10602
- workspace: toWorkspaceSummary(workspace, selfId),
10603
- current: currentWorkspaceId === workspace.external_id,
10604
- onSelect: () => onOpenWorkspace(workspace),
10605
- href: chunkLJJJ6CYH_cjs.buildDeepLinkPath({ workspaceId: workspace.external_id }),
10606
- mark: /* @__PURE__ */ jsxRuntime.jsx(
10607
- ui.ShieldIcon,
10608
- {
10609
- char: workspace.name.charAt(0),
10610
- workspaceColor: chunkV46W7YLI_cjs.workspaceKindColor(react$1.getWorkspaceKind(workspace)),
10611
- size: 28,
10612
- isSelected: true
10613
- }
10614
- ),
10615
- testId: `workspace-card-${workspace.external_id}`,
10616
- openCueTestId: `workspace-open-${workspace.external_id}`
10617
- },
10618
- workspace.external_id
10619
- ))
10606
+ [...group.workspaces].sort(chunkJUUOJP7I_cjs.byRecentUpdate).map((workspace) => {
10607
+ const state = workspaceState?.(workspace);
10608
+ const selectLabel = state?.selectLabel;
10609
+ return /* @__PURE__ */ jsxRuntime.jsx(
10610
+ chunkMSFQDELO_cjs.WorkspaceCard,
10611
+ {
10612
+ workspace: {
10613
+ ...toWorkspaceSummary(workspace, selfId),
10614
+ ...state?.status != null && { subtitle: state.status }
10615
+ },
10616
+ current: currentWorkspaceId === workspace.external_id,
10617
+ onSelect: () => onOpenWorkspace(workspace),
10618
+ href: state?.onSelect ? void 0 : chunkLJJJ6CYH_cjs.buildDeepLinkPath({ workspaceId: workspace.external_id }),
10619
+ labels: selectLabel ? { openWorkspace: () => selectLabel } : void 0,
10620
+ mark: /* @__PURE__ */ jsxRuntime.jsx(
10621
+ ui.ShieldIcon,
10622
+ {
10623
+ char: workspace.name.charAt(0),
10624
+ workspaceColor: chunkV46W7YLI_cjs.workspaceKindColor(react$1.getWorkspaceKind(workspace)),
10625
+ size: 28,
10626
+ isSelected: true
10627
+ }
10628
+ ),
10629
+ testId: `workspace-card-${workspace.external_id}`,
10630
+ openCueTestId: `workspace-open-${workspace.external_id}`
10631
+ },
10632
+ workspace.external_id
10633
+ );
10634
+ })
10620
10635
  ]
10621
10636
  },
10622
10637
  group.key
@@ -10705,7 +10720,7 @@ function useConnectedWorkspaceList({
10705
10720
  [selfId, pinned]
10706
10721
  );
10707
10722
  const filtered = react.useMemo(
10708
- () => chunkSN2GZ4ZM_cjs.applyTriStateFilters(workspaces, filterMap, attributesOf),
10723
+ () => chunkTQUYWUEE_cjs.applyTriStateFilters(workspaces, filterMap, attributesOf),
10709
10724
  [workspaces, filterMap, attributesOf]
10710
10725
  );
10711
10726
  const groups = react.useMemo(
@@ -10770,7 +10785,7 @@ function useConnectedWorkspaceList({
10770
10785
  };
10771
10786
  }
10772
10787
  var WorkspaceTableView = react.lazy(
10773
- () => import('../WorkspaceTableView-ZFMAYHUD.cjs').then((m) => ({ default: m.WorkspaceTableView }))
10788
+ () => import('../WorkspaceTableView-EYLEUZZT.cjs').then((m) => ({ default: m.WorkspaceTableView }))
10774
10789
  );
10775
10790
  var WORKSPACES_TAB_ID = "workspaces";
10776
10791
  var defaultRenderMember2 = (user, size) => {
@@ -10801,7 +10816,8 @@ function ConnectedWorkspaceList({
10801
10816
  activeTab = WORKSPACES_TAB_ID,
10802
10817
  onTabChange,
10803
10818
  children,
10804
- labels
10819
+ labels,
10820
+ workspaceState
10805
10821
  }) {
10806
10822
  const list = useConnectedWorkspaceList({ filters, onFiltersChange, labels });
10807
10823
  const { openProject } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
@@ -10815,7 +10831,11 @@ function ConnectedWorkspaceList({
10815
10831
  onViewChange?.(next);
10816
10832
  if (controlledView === void 0) setLocalView(next);
10817
10833
  };
10818
- const open = (workspace) => void openWorkspace(workspace.external_id, { name: workspace.name });
10834
+ const open = (workspace) => {
10835
+ const select = workspaceState?.(workspace)?.onSelect;
10836
+ if (select) select();
10837
+ else void openWorkspace(workspace.external_id, { name: workspace.name });
10838
+ };
10819
10839
  const createDisabledReason = list.canCreateProjects === false ? react$1.PROJECT_CREATION_DENIED_REASON : void 0;
10820
10840
  if (list.isLoading) return /* @__PURE__ */ jsxRuntime.jsx(chunkGC2FSPSQ_cjs.LoadingIndicator, { message: "Loading workspaces..." });
10821
10841
  if (list.error) {
@@ -10886,7 +10906,8 @@ function ConnectedWorkspaceList({
10886
10906
  onOpenWorkspace: open,
10887
10907
  onOpenProject: openProject,
10888
10908
  onCreateWorkspace,
10889
- createDisabledReason
10909
+ createDisabledReason,
10910
+ workspaceState
10890
10911
  }
10891
10912
  ) })
10892
10913
  ) : /* @__PURE__ */ jsxRuntime.jsx(react.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkGC2FSPSQ_cjs.LoadingIndicator, { message: "Loading grid..." }), children: /* @__PURE__ */ jsxRuntime.jsx(chunkOOU4QLRK_cjs.HomeCenteredColumn, { children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -10897,7 +10918,8 @@ function ConnectedWorkspaceList({
10897
10918
  onOpenProject: openProject,
10898
10919
  renderMember,
10899
10920
  gridState,
10900
- onGridStateChange
10921
+ onGridStateChange,
10922
+ workspaceState
10901
10923
  }
10902
10924
  ) }) }) })
10903
10925
  ] });
@@ -10932,7 +10954,7 @@ function ConnectedProjectsPanel({
10932
10954
  const { data: projects } = react$1.useProjects();
10933
10955
  const canCreateProjects = react$1.useCanCreateProjects();
10934
10956
  const { userId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
10935
- const { stripeEnabled } = chunk53RCZPMR_cjs.useBillingSupport();
10957
+ const { stripeEnabled } = chunkP2YM67Y5_cjs.useBillingSupport();
10936
10958
  const billingPortal = useOpenBillingPortal();
10937
10959
  const [newProjectOpen, setNewProjectOpen] = react.useState(false);
10938
10960
  useAutoRefreshPendingProjects();
@@ -10959,15 +10981,15 @@ function ConnectedProjectsPanel({
10959
10981
  [ownedCount, tabs, projects]
10960
10982
  );
10961
10983
  const paidProject = projects?.find(isPaid);
10962
- const panel = /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PanelFrame, { className, testId: "projects-panel", children: [
10963
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
10984
+ const panel = /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PanelFrame, { className, testId: "projects-panel", children: [
10985
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.DraggableHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(
10964
10986
  chunk7RGLTF76_cjs.TabHeader,
10965
10987
  {
10966
10988
  tabs: headerTabs,
10967
10989
  activeTabId: activeProjectId ?? PROJECTS_BASE_TAB_ID,
10968
10990
  onTabChange: (id) => tabs.onSelect(id === PROJECTS_BASE_TAB_ID ? null : id),
10969
10991
  afterTabs: (isCompact) => /* @__PURE__ */ jsxRuntime.jsx(
10970
- chunkSN2GZ4ZM_cjs.PanelAddButton,
10992
+ chunkTQUYWUEE_cjs.PanelAddButton,
10971
10993
  {
10972
10994
  label: "New project",
10973
10995
  onClick: () => setNewProjectOpen(true),
@@ -10982,15 +11004,15 @@ function ConnectedProjectsPanel({
10982
11004
  compactBreakpoint: 360
10983
11005
  }
10984
11006
  ) }),
10985
- /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PanelScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
11007
+ /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PanelScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
10986
11008
  ProjectDetail,
10987
11009
  {
10988
11010
  projectExtId: activeProjectId,
10989
11011
  storage: projectStorage?.(activeProjectId)
10990
11012
  }
10991
- ) }) : /* @__PURE__ */ jsxRuntime.jsxs(chunkSN2GZ4ZM_cjs.PanelScroll, { variant: "padded", children: [
11013
+ ) }) : /* @__PURE__ */ jsxRuntime.jsxs(chunkTQUYWUEE_cjs.PanelScroll, { variant: "padded", children: [
10992
11014
  /* @__PURE__ */ jsxRuntime.jsx(ProjectsTable, {}),
10993
- stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkSN2GZ4ZM_cjs.PanelActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsxs(
11015
+ stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkTQUYWUEE_cjs.PanelActionsRow, { children: /* @__PURE__ */ jsxRuntime.jsxs(
10994
11016
  ui.Button,
10995
11017
  {
10996
11018
  onClick: () => billingPortal.open(paidProject.external_id),
@@ -11962,7 +11984,7 @@ var MailBodyEditor = react.lazy(
11962
11984
  }))
11963
11985
  );
11964
11986
  var NativeDocxEditor = react.lazy(
11965
- () => import('../NativeDocxEditor-M3I776GD.cjs').then((m) => ({ default: m.NativeDocxEditor }))
11987
+ () => import('../NativeDocxEditor-T2PJIZMU.cjs').then((m) => ({ default: m.NativeDocxEditor }))
11966
11988
  );
11967
11989
  var NO_WORD = {
11968
11990
  adapter: {
@@ -17256,7 +17278,7 @@ var COMPACT_BELOW = 132;
17256
17278
  var NO_DOCUMENTS = [];
17257
17279
  function useFilesWorkspace() {
17258
17280
  const { workspaceId, userId, live } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
17259
- const { members, role } = chunkIJEISII2_cjs.useConnectedWorkspaceRole();
17281
+ const { members, role } = chunk2BHDRVVL_cjs.useConnectedWorkspaceRole();
17260
17282
  const { data: workspaces } = react$1.useWorkspaces({ enabled: live });
17261
17283
  const workspaceName = workspaces?.find((w) => w.external_id === workspaceId)?.name;
17262
17284
  return {
@@ -18585,59 +18607,59 @@ function ConnectedAgentChatPanel({
18585
18607
 
18586
18608
  Object.defineProperty(exports, "BillingSupportProvider", {
18587
18609
  enumerable: true,
18588
- get: function () { return chunk53RCZPMR_cjs.BillingSupportProvider; }
18610
+ get: function () { return chunkP2YM67Y5_cjs.BillingSupportProvider; }
18589
18611
  });
18590
18612
  Object.defineProperty(exports, "CAP_REACHED_MESSAGE", {
18591
18613
  enumerable: true,
18592
- get: function () { return chunk53RCZPMR_cjs.CAP_REACHED_MESSAGE; }
18614
+ get: function () { return chunkP2YM67Y5_cjs.CAP_REACHED_MESSAGE; }
18593
18615
  });
18594
18616
  Object.defineProperty(exports, "ZERO_BUDGET_MESSAGE", {
18595
18617
  enumerable: true,
18596
- get: function () { return chunk53RCZPMR_cjs.ZERO_BUDGET_MESSAGE; }
18618
+ get: function () { return chunkP2YM67Y5_cjs.ZERO_BUDGET_MESSAGE; }
18597
18619
  });
18598
18620
  Object.defineProperty(exports, "aiUsageResetTimestamp", {
18599
18621
  enumerable: true,
18600
- get: function () { return chunk53RCZPMR_cjs.aiUsageResetTimestamp; }
18622
+ get: function () { return chunkP2YM67Y5_cjs.aiUsageResetTimestamp; }
18601
18623
  });
18602
18624
  Object.defineProperty(exports, "formatMoney", {
18603
18625
  enumerable: true,
18604
- get: function () { return chunk53RCZPMR_cjs.formatMoney; }
18626
+ get: function () { return chunkP2YM67Y5_cjs.formatMoney; }
18605
18627
  });
18606
18628
  Object.defineProperty(exports, "formatResetDate", {
18607
18629
  enumerable: true,
18608
- get: function () { return chunk53RCZPMR_cjs.formatResetDate; }
18630
+ get: function () { return chunkP2YM67Y5_cjs.formatResetDate; }
18609
18631
  });
18610
18632
  Object.defineProperty(exports, "getQuotaItems", {
18611
18633
  enumerable: true,
18612
- get: function () { return chunk53RCZPMR_cjs.getQuotaItems; }
18634
+ get: function () { return chunkP2YM67Y5_cjs.getQuotaItems; }
18613
18635
  });
18614
18636
  Object.defineProperty(exports, "isAddonBudgetZero", {
18615
18637
  enumerable: true,
18616
- get: function () { return chunk53RCZPMR_cjs.isAddonBudgetZero; }
18638
+ get: function () { return chunkP2YM67Y5_cjs.isAddonBudgetZero; }
18617
18639
  });
18618
18640
  Object.defineProperty(exports, "isProProject", {
18619
18641
  enumerable: true,
18620
- get: function () { return chunk53RCZPMR_cjs.isProProject; }
18642
+ get: function () { return chunkP2YM67Y5_cjs.isProProject; }
18621
18643
  });
18622
18644
  Object.defineProperty(exports, "planBadgeView", {
18623
18645
  enumerable: true,
18624
- get: function () { return chunk53RCZPMR_cjs.planBadgeView; }
18646
+ get: function () { return chunkP2YM67Y5_cjs.planBadgeView; }
18625
18647
  });
18626
18648
  Object.defineProperty(exports, "planName", {
18627
18649
  enumerable: true,
18628
- get: function () { return chunk53RCZPMR_cjs.planName; }
18650
+ get: function () { return chunkP2YM67Y5_cjs.planName; }
18629
18651
  });
18630
18652
  Object.defineProperty(exports, "projectGroupBilling", {
18631
18653
  enumerable: true,
18632
- get: function () { return chunk53RCZPMR_cjs.projectGroupBilling; }
18654
+ get: function () { return chunkP2YM67Y5_cjs.projectGroupBilling; }
18633
18655
  });
18634
18656
  Object.defineProperty(exports, "useBillingSupport", {
18635
18657
  enumerable: true,
18636
- get: function () { return chunk53RCZPMR_cjs.useBillingSupport; }
18658
+ get: function () { return chunkP2YM67Y5_cjs.useBillingSupport; }
18637
18659
  });
18638
18660
  Object.defineProperty(exports, "useRewardBalance", {
18639
18661
  enumerable: true,
18640
- get: function () { return chunk53RCZPMR_cjs.useRewardBalance; }
18662
+ get: function () { return chunkP2YM67Y5_cjs.useRewardBalance; }
18641
18663
  });
18642
18664
  Object.defineProperty(exports, "ConnectedAssistantDock", {
18643
18665
  enumerable: true,
@@ -18673,43 +18695,43 @@ Object.defineProperty(exports, "useWorkspaceDocs", {
18673
18695
  });
18674
18696
  Object.defineProperty(exports, "ConnectedWorkflowDocumentsField", {
18675
18697
  enumerable: true,
18676
- get: function () { return chunkIJEISII2_cjs.ConnectedWorkflowDocumentsField; }
18698
+ get: function () { return chunk2BHDRVVL_cjs.ConnectedWorkflowDocumentsField; }
18677
18699
  });
18678
18700
  Object.defineProperty(exports, "ConnectedWorkflowLauncher", {
18679
18701
  enumerable: true,
18680
- get: function () { return chunkIJEISII2_cjs.ConnectedWorkflowLauncher; }
18702
+ get: function () { return chunk2BHDRVVL_cjs.ConnectedWorkflowLauncher; }
18681
18703
  });
18682
18704
  Object.defineProperty(exports, "ConnectedWorkflowsTable", {
18683
18705
  enumerable: true,
18684
- get: function () { return chunkIJEISII2_cjs.ConnectedWorkflowsTable; }
18706
+ get: function () { return chunk2BHDRVVL_cjs.ConnectedWorkflowsTable; }
18685
18707
  });
18686
18708
  Object.defineProperty(exports, "DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS", {
18687
18709
  enumerable: true,
18688
- get: function () { return chunkIJEISII2_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
18710
+ get: function () { return chunk2BHDRVVL_cjs.DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS; }
18689
18711
  });
18690
18712
  Object.defineProperty(exports, "NativeDocxSupportProvider", {
18691
18713
  enumerable: true,
18692
- get: function () { return chunkIJEISII2_cjs.NativeDocxSupportProvider; }
18714
+ get: function () { return chunk2BHDRVVL_cjs.NativeDocxSupportProvider; }
18693
18715
  });
18694
18716
  Object.defineProperty(exports, "toWorkflowFieldDocument", {
18695
18717
  enumerable: true,
18696
- get: function () { return chunkIJEISII2_cjs.toWorkflowFieldDocument; }
18718
+ get: function () { return chunk2BHDRVVL_cjs.toWorkflowFieldDocument; }
18697
18719
  });
18698
18720
  Object.defineProperty(exports, "useConnectedAgentOptions", {
18699
18721
  enumerable: true,
18700
- get: function () { return chunkIJEISII2_cjs.useConnectedAgentOptions; }
18722
+ get: function () { return chunk2BHDRVVL_cjs.useConnectedAgentOptions; }
18701
18723
  });
18702
18724
  Object.defineProperty(exports, "useConnectedWorkflowScopeSource", {
18703
18725
  enumerable: true,
18704
- get: function () { return chunkIJEISII2_cjs.useConnectedWorkflowScopeSource; }
18726
+ get: function () { return chunk2BHDRVVL_cjs.useConnectedWorkflowScopeSource; }
18705
18727
  });
18706
18728
  Object.defineProperty(exports, "useConnectedWorkspaceRole", {
18707
18729
  enumerable: true,
18708
- get: function () { return chunkIJEISII2_cjs.useConnectedWorkspaceRole; }
18730
+ get: function () { return chunk2BHDRVVL_cjs.useConnectedWorkspaceRole; }
18709
18731
  });
18710
18732
  Object.defineProperty(exports, "useNativeDocxSupport", {
18711
18733
  enumerable: true,
18712
- get: function () { return chunkIJEISII2_cjs.useNativeDocxSupport; }
18734
+ get: function () { return chunk2BHDRVVL_cjs.useNativeDocxSupport; }
18713
18735
  });
18714
18736
  Object.defineProperty(exports, "DocumentViewerSupportProvider", {
18715
18737
  enumerable: true,