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