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