@arbidocs/blocks 0.4.165 → 0.4.166
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-7WXIDRDY.js → ConnectedNativeDocxComparison-MSX6OCMN.js} +16 -16
- package/dist/{ConnectedNativeDocxComparison-7WXIDRDY.js.map → ConnectedNativeDocxComparison-MSX6OCMN.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-XV2UHRBQ.cjs → ConnectedNativeDocxComparison-S4XHG3XN.cjs} +17 -17
- package/dist/{ConnectedNativeDocxComparison-XV2UHRBQ.cjs.map → ConnectedNativeDocxComparison-S4XHG3XN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-Z7KSH5RK.cjs → ConnectedNativeDocxEditor-4G7LNREO.cjs} +16 -16
- package/dist/{ConnectedNativeDocxEditor-Z7KSH5RK.cjs.map → ConnectedNativeDocxEditor-4G7LNREO.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-X3FEGMRT.js → ConnectedNativeDocxEditor-CTWKXXQQ.js} +14 -14
- package/dist/{ConnectedNativeDocxEditor-X3FEGMRT.js.map → ConnectedNativeDocxEditor-CTWKXXQQ.js.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-UNZIAYWQ.cjs → ConnectedStreamedWordArtifact-DQGOIULU.cjs} +17 -17
- package/dist/ConnectedStreamedWordArtifact-DQGOIULU.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-JV56WYWK.js → ConnectedStreamedWordArtifact-HIILV2RB.js} +16 -16
- package/dist/{ConnectedStreamedWordArtifact-JV56WYWK.js.map → ConnectedStreamedWordArtifact-HIILV2RB.js.map} +1 -1
- package/dist/{NativeDocxEditor-WAUI2YRU.cjs → NativeDocxEditor-T2PJIZMU.cjs} +8 -8
- package/dist/{NativeDocxEditor-WAUI2YRU.cjs.map → NativeDocxEditor-T2PJIZMU.cjs.map} +1 -1
- package/dist/{NativeDocxEditor-XEDC4UFE.js → NativeDocxEditor-TBTBD6TC.js} +4 -4
- package/dist/{NativeDocxEditor-XEDC4UFE.js.map → NativeDocxEditor-TBTBD6TC.js.map} +1 -1
- package/dist/{WorkspaceTableView-QVOLTH5Z.js → WorkspaceTableView-CJ3QPV2X.js} +10 -10
- package/dist/{WorkspaceTableView-QVOLTH5Z.js.map → WorkspaceTableView-CJ3QPV2X.js.map} +1 -1
- package/dist/{WorkspaceTableView-OMBC2G5K.cjs → WorkspaceTableView-VEW6SMZ6.cjs} +12 -12
- package/dist/{WorkspaceTableView-OMBC2G5K.cjs.map → WorkspaceTableView-VEW6SMZ6.cjs.map} +1 -1
- package/dist/agents/index.cjs +270 -270
- package/dist/agents/index.js +13 -13
- package/dist/calls/index.cjs +1 -1
- package/dist/calls/index.js +1 -1
- package/dist/chat/index.cjs +140 -140
- package/dist/chat/index.js +6 -6
- package/dist/{chunk-R2N5VIVI.cjs → chunk-3VW7ZXQ6.cjs} +4 -4
- package/dist/{chunk-R2N5VIVI.cjs.map → chunk-3VW7ZXQ6.cjs.map} +1 -1
- package/dist/{chunk-HCAXURWO.cjs → chunk-4GITK3Q5.cjs} +3 -3
- package/dist/{chunk-HCAXURWO.cjs.map → chunk-4GITK3Q5.cjs.map} +1 -1
- package/dist/{chunk-A7HNGO5F.js → chunk-4MFSGPEH.js} +3 -3
- package/dist/{chunk-A7HNGO5F.js.map → chunk-4MFSGPEH.js.map} +1 -1
- package/dist/{chunk-C45WOKZW.cjs → chunk-5A2QQAF5.cjs} +3 -3
- package/dist/{chunk-C45WOKZW.cjs.map → chunk-5A2QQAF5.cjs.map} +1 -1
- package/dist/{chunk-C3GS4WQE.cjs → chunk-5C7DRQQE.cjs} +4 -4
- package/dist/{chunk-C3GS4WQE.cjs.map → chunk-5C7DRQQE.cjs.map} +1 -1
- package/dist/{chunk-HQYN5EFX.js → chunk-5WLORPGX.js} +3 -3
- package/dist/{chunk-HQYN5EFX.js.map → chunk-5WLORPGX.js.map} +1 -1
- package/dist/{chunk-YG3BXG5M.js → chunk-6E5XJC6L.js} +4 -4
- package/dist/{chunk-YG3BXG5M.js.map → chunk-6E5XJC6L.js.map} +1 -1
- package/dist/{chunk-HDJSU5IS.js → chunk-6XIXNH26.js} +3 -3
- package/dist/{chunk-HDJSU5IS.js.map → chunk-6XIXNH26.js.map} +1 -1
- package/dist/{chunk-OGQSYL3P.cjs → chunk-AODZXDEE.cjs} +12 -12
- package/dist/{chunk-OGQSYL3P.cjs.map → chunk-AODZXDEE.cjs.map} +1 -1
- package/dist/{chunk-V24UHHL4.cjs → chunk-APNFKXQ5.cjs} +61 -61
- package/dist/{chunk-V24UHHL4.cjs.map → chunk-APNFKXQ5.cjs.map} +1 -1
- package/dist/{chunk-EJHJQKUF.js → chunk-AVXRXPII.js} +3 -3
- package/dist/{chunk-EJHJQKUF.js.map → chunk-AVXRXPII.js.map} +1 -1
- package/dist/{chunk-YMWMVV4H.cjs → chunk-AYJZRBHG.cjs} +4 -4
- package/dist/{chunk-YMWMVV4H.cjs.map → chunk-AYJZRBHG.cjs.map} +1 -1
- package/dist/{chunk-HZJQQVKL.js → chunk-BGXWPVHR.js} +3 -3
- package/dist/{chunk-HZJQQVKL.js.map → chunk-BGXWPVHR.js.map} +1 -1
- package/dist/{chunk-2NTQH63V.js → chunk-DIPB7UR2.js} +12 -12
- package/dist/{chunk-2NTQH63V.js.map → chunk-DIPB7UR2.js.map} +1 -1
- package/dist/chunk-ECQR3VPP.cjs +18 -0
- package/dist/{chunk-OSWZ4K34.cjs.map → chunk-ECQR3VPP.cjs.map} +1 -1
- package/dist/{chunk-MPXUHCEV.cjs → chunk-ETJFC6MO.cjs} +4 -4
- package/dist/{chunk-MPXUHCEV.cjs.map → chunk-ETJFC6MO.cjs.map} +1 -1
- package/dist/{chunk-YNLWAD57.cjs → chunk-GFVIFXWT.cjs} +5 -5
- package/dist/{chunk-YNLWAD57.cjs.map → chunk-GFVIFXWT.cjs.map} +1 -1
- package/dist/{chunk-KCIYZ76I.js → chunk-GWSGIZQ5.js} +3 -3
- package/dist/{chunk-KCIYZ76I.js.map → chunk-GWSGIZQ5.js.map} +1 -1
- package/dist/{chunk-QARJQJAX.js → chunk-J7YHBMBB.js} +3 -3
- package/dist/{chunk-QARJQJAX.js.map → chunk-J7YHBMBB.js.map} +1 -1
- package/dist/{chunk-SLLNLFFP.js → chunk-JTJCCL2E.js} +4 -4
- package/dist/{chunk-SLLNLFFP.js.map → chunk-JTJCCL2E.js.map} +1 -1
- package/dist/{chunk-6RKMFTUJ.js → chunk-KBOA5UFJ.js} +8 -8
- package/dist/{chunk-6RKMFTUJ.js.map → chunk-KBOA5UFJ.js.map} +1 -1
- package/dist/{chunk-FPFMKSSB.js → chunk-KM7P35MJ.js} +3 -3
- package/dist/{chunk-FPFMKSSB.js.map → chunk-KM7P35MJ.js.map} +1 -1
- package/dist/{chunk-UKKTT3JE.js → chunk-KNCJSPXV.js} +6 -6
- package/dist/{chunk-UKKTT3JE.js.map → chunk-KNCJSPXV.js.map} +1 -1
- package/dist/{chunk-XBTOPW6B.js → chunk-KS5VQKI2.js} +4 -4
- package/dist/{chunk-XBTOPW6B.js.map → chunk-KS5VQKI2.js.map} +1 -1
- package/dist/{chunk-WE5DABTC.cjs → chunk-LMQOTLG4.cjs} +3 -3
- package/dist/{chunk-WE5DABTC.cjs.map → chunk-LMQOTLG4.cjs.map} +1 -1
- package/dist/{chunk-XA6QWXOQ.js → chunk-MXD2R4HR.js} +4 -4
- package/dist/{chunk-XA6QWXOQ.js.map → chunk-MXD2R4HR.js.map} +1 -1
- package/dist/{chunk-WLFMHGHK.cjs → chunk-NS7NVX4E.cjs} +6 -6
- package/dist/{chunk-WLFMHGHK.cjs.map → chunk-NS7NVX4E.cjs.map} +1 -1
- package/dist/{chunk-JB4EXO3V.cjs → chunk-NUAC5GTQ.cjs} +6 -6
- package/dist/{chunk-JB4EXO3V.cjs.map → chunk-NUAC5GTQ.cjs.map} +1 -1
- package/dist/{chunk-HHNYVJV3.cjs → chunk-OHCYJFV2.cjs} +7 -7
- package/dist/{chunk-HHNYVJV3.cjs.map → chunk-OHCYJFV2.cjs.map} +1 -1
- package/dist/{chunk-M7C4FHLU.cjs → chunk-PTSTVYQD.cjs} +12 -12
- package/dist/{chunk-M7C4FHLU.cjs.map → chunk-PTSTVYQD.cjs.map} +1 -1
- package/dist/{chunk-6SOWJFWJ.js → chunk-RMJ6DH7F.js} +4 -4
- package/dist/{chunk-6SOWJFWJ.js.map → chunk-RMJ6DH7F.js.map} +1 -1
- package/dist/{chunk-ZSDL36BI.js → chunk-RY2SODRN.js} +4 -4
- package/dist/{chunk-ZSDL36BI.js.map → chunk-RY2SODRN.js.map} +1 -1
- package/dist/chunk-SG3OH7ZM.cjs +18 -0
- package/dist/{chunk-PMHAJRKF.cjs.map → chunk-SG3OH7ZM.cjs.map} +1 -1
- package/dist/{chunk-X6Z6IWRY.cjs → chunk-SYTZ3UAU.cjs} +6 -6
- package/dist/{chunk-X6Z6IWRY.cjs.map → chunk-SYTZ3UAU.cjs.map} +1 -1
- package/dist/{chunk-AXCTDWFH.cjs → chunk-TNESYDBR.cjs} +3 -3
- package/dist/{chunk-AXCTDWFH.cjs.map → chunk-TNESYDBR.cjs.map} +1 -1
- package/dist/{chunk-GMJZ4FO7.js → chunk-TWVXDRLH.js} +4 -4
- package/dist/{chunk-GMJZ4FO7.js.map → chunk-TWVXDRLH.js.map} +1 -1
- package/dist/{chunk-I4HFM5HB.js → chunk-UORU5S7Y.js} +3 -3
- package/dist/{chunk-I4HFM5HB.js.map → chunk-UORU5S7Y.js.map} +1 -1
- package/dist/{chunk-VTTDCHBZ.js → chunk-XER3JLC7.js} +3 -3
- package/dist/{chunk-VTTDCHBZ.js.map → chunk-XER3JLC7.js.map} +1 -1
- package/dist/{chunk-VIV56KDN.cjs → chunk-XGFNZTPO.cjs} +4 -4
- package/dist/{chunk-VIV56KDN.cjs.map → chunk-XGFNZTPO.cjs.map} +1 -1
- package/dist/{chunk-IHPQO2TG.cjs → chunk-YNSSIULM.cjs} +5 -5
- package/dist/{chunk-IHPQO2TG.cjs.map → chunk-YNSSIULM.cjs.map} +1 -1
- package/dist/{chunk-5BKVKWKQ.js → chunk-ZPE7334Z.js} +6 -6
- package/dist/{chunk-5BKVKWKQ.js.map → chunk-ZPE7334Z.js.map} +1 -1
- package/dist/{chunk-2MX3RAF4.cjs → chunk-ZV4DNZ5N.cjs} +11 -11
- package/dist/{chunk-2MX3RAF4.cjs.map → chunk-ZV4DNZ5N.cjs.map} +1 -1
- package/dist/citations/index.cjs +1 -1
- package/dist/citations/index.js +1 -1
- package/dist/connect/docx.cjs +20 -20
- package/dist/connect/docx.js +16 -16
- package/dist/connect/index.cjs +681 -681
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +36 -36
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +70 -70
- package/dist/connect/viewer.js +19 -19
- package/dist/connection/ConnectedWorkflowsTable.d.ts +1 -0
- package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +2 -0
- package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +4 -0
- package/dist/document-tools/index.cjs +20 -20
- package/dist/document-tools/index.js +3 -3
- package/dist/docx/index.cjs +51 -51
- package/dist/docx/index.js +4 -4
- package/dist/facts/index.cjs +58 -58
- package/dist/facts/index.js +8 -8
- package/dist/files/index.cjs +241 -241
- package/dist/files/index.js +9 -9
- package/dist/home/index.cjs +30 -30
- package/dist/home/index.js +5 -5
- package/dist/index.cjs +920 -920
- package/dist/index.js +24 -24
- package/dist/retrieval/index.cjs +1 -1
- package/dist/retrieval/index.js +1 -1
- package/dist/settings/index.cjs +174 -174
- package/dist/settings/index.js +5 -5
- package/dist/shell/index.cjs +12 -12
- package/dist/shell/index.js +4 -4
- package/dist/studio/index.cjs +7 -7
- package/dist/studio/index.js +6 -6
- package/dist/workflow-canvas/index.cjs +26 -26
- package/dist/workflow-canvas/index.js +13 -13
- package/dist/workspaces/index.cjs +2 -2
- package/dist/workspaces/index.js +2 -2
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ConnectedStreamedWordArtifact-UNZIAYWQ.cjs.map +0 -1
- package/dist/chunk-OSWZ4K34.cjs +0 -18
- package/dist/chunk-PMHAJRKF.cjs +0 -18
package/dist/connect/index.cjs
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkYNSSIULM_cjs = require('../chunk-YNSSIULM.cjs');
|
|
5
5
|
var chunk3CUORKDL_cjs = require('../chunk-3CUORKDL.cjs');
|
|
6
6
|
var chunkJUUOJP7I_cjs = require('../chunk-JUUOJP7I.cjs');
|
|
7
|
-
var
|
|
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
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var chunkM7C4FHLU_cjs = require('../chunk-M7C4FHLU.cjs');
|
|
10
|
+
var chunkXGFNZTPO_cjs = require('../chunk-XGFNZTPO.cjs');
|
|
11
|
+
var chunkAYJZRBHG_cjs = require('../chunk-AYJZRBHG.cjs');
|
|
12
|
+
var chunkPTSTVYQD_cjs = require('../chunk-PTSTVYQD.cjs');
|
|
14
13
|
var chunkH5542IOD_cjs = require('../chunk-H5542IOD.cjs');
|
|
14
|
+
var chunkNUAC5GTQ_cjs = require('../chunk-NUAC5GTQ.cjs');
|
|
15
|
+
require('../chunk-223D4727.cjs');
|
|
15
16
|
var chunkBGJZVJJM_cjs = require('../chunk-BGJZVJJM.cjs');
|
|
16
17
|
var chunkAYKE6USO_cjs = require('../chunk-AYKE6USO.cjs');
|
|
17
18
|
var chunkJH6JTI76_cjs = require('../chunk-JH6JTI76.cjs');
|
|
18
19
|
var chunkNMZI3K6R_cjs = require('../chunk-NMZI3K6R.cjs');
|
|
19
|
-
var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
|
|
20
20
|
require('../chunk-464YPRAE.cjs');
|
|
21
|
-
require('../chunk-
|
|
22
|
-
var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
|
|
21
|
+
require('../chunk-4GITK3Q5.cjs');
|
|
23
22
|
require('../chunk-JPWPR6QU.cjs');
|
|
24
|
-
var
|
|
23
|
+
var chunkLMQOTLG4_cjs = require('../chunk-LMQOTLG4.cjs');
|
|
25
24
|
var chunk2WLXQGWC_cjs = require('../chunk-2WLXQGWC.cjs');
|
|
26
|
-
require('../chunk-
|
|
27
|
-
var
|
|
25
|
+
var chunk5FYU7ZIU_cjs = require('../chunk-5FYU7ZIU.cjs');
|
|
26
|
+
var chunkSYTZ3UAU_cjs = require('../chunk-SYTZ3UAU.cjs');
|
|
28
27
|
var chunkXAJIKT6Y_cjs = require('../chunk-XAJIKT6Y.cjs');
|
|
29
28
|
var chunkGOWXP5KT_cjs = require('../chunk-GOWXP5KT.cjs');
|
|
30
|
-
var chunkKMZO5W6D_cjs = require('../chunk-KMZO5W6D.cjs');
|
|
31
29
|
var chunkQZTNTP75_cjs = require('../chunk-QZTNTP75.cjs');
|
|
32
30
|
require('../chunk-PCB2BPN3.cjs');
|
|
33
31
|
require('../chunk-NWNVWO6L.cjs');
|
|
34
|
-
var
|
|
32
|
+
var chunkU7OUZHBH_cjs = require('../chunk-U7OUZHBH.cjs');
|
|
33
|
+
require('../chunk-7G2LJMUG.cjs');
|
|
34
|
+
var chunk5Y6V7F6W_cjs = require('../chunk-5Y6V7F6W.cjs');
|
|
35
35
|
var chunkV46W7YLI_cjs = require('../chunk-V46W7YLI.cjs');
|
|
36
|
+
require('../chunk-VLCY46K6.cjs');
|
|
36
37
|
var chunkLJJJ6CYH_cjs = require('../chunk-LJJJ6CYH.cjs');
|
|
37
38
|
var chunkWP4VIOOA_cjs = require('../chunk-WP4VIOOA.cjs');
|
|
38
39
|
require('../chunk-D54JXTPG.cjs');
|
|
39
40
|
var chunkQT3A4PFC_cjs = require('../chunk-QT3A4PFC.cjs');
|
|
41
|
+
var chunkKMZO5W6D_cjs = require('../chunk-KMZO5W6D.cjs');
|
|
42
|
+
var chunkVPPX5XUF_cjs = require('../chunk-VPPX5XUF.cjs');
|
|
40
43
|
var chunkRC25WMVB_cjs = require('../chunk-RC25WMVB.cjs');
|
|
41
|
-
var
|
|
42
|
-
var chunkOGQSYL3P_cjs = require('../chunk-OGQSYL3P.cjs');
|
|
44
|
+
var chunkAODZXDEE_cjs = require('../chunk-AODZXDEE.cjs');
|
|
43
45
|
var chunkRFIBUWLF_cjs = require('../chunk-RFIBUWLF.cjs');
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
+
var chunkZV4DNZ5N_cjs = require('../chunk-ZV4DNZ5N.cjs');
|
|
47
|
+
var chunkTNESYDBR_cjs = require('../chunk-TNESYDBR.cjs');
|
|
46
48
|
var chunk2VHYOTWW_cjs = require('../chunk-2VHYOTWW.cjs');
|
|
47
|
-
require('../chunk-AHDJXIUB.cjs');
|
|
48
|
-
require('../chunk-ZW6FPIFC.cjs');
|
|
49
|
-
var chunkMEMWZ72Y_cjs = require('../chunk-MEMWZ72Y.cjs');
|
|
50
49
|
require('../chunk-SIB6C7P7.cjs');
|
|
51
50
|
require('../chunk-DVUZTGVL.cjs');
|
|
51
|
+
require('../chunk-AHDJXIUB.cjs');
|
|
52
|
+
require('../chunk-ZW6FPIFC.cjs');
|
|
53
|
+
require('../chunk-HUNX4CQG.cjs');
|
|
52
54
|
var chunkV4ISCZJ7_cjs = require('../chunk-V4ISCZJ7.cjs');
|
|
53
55
|
var chunk2EI7NCUA_cjs = require('../chunk-2EI7NCUA.cjs');
|
|
54
|
-
require('../chunk-
|
|
56
|
+
var chunkC2CWWEHO_cjs = require('../chunk-C2CWWEHO.cjs');
|
|
55
57
|
var chunkQVBZESYQ_cjs = require('../chunk-QVBZESYQ.cjs');
|
|
56
58
|
require('../chunk-ADOKTJHV.cjs');
|
|
57
59
|
var chunkLLYZGH3L_cjs = require('../chunk-LLYZGH3L.cjs');
|
|
58
60
|
var chunkBIXHB4LV_cjs = require('../chunk-BIXHB4LV.cjs');
|
|
59
|
-
var
|
|
61
|
+
var chunkDWZXSPMB_cjs = require('../chunk-DWZXSPMB.cjs');
|
|
62
|
+
var chunkMEMWZ72Y_cjs = require('../chunk-MEMWZ72Y.cjs');
|
|
63
|
+
var chunk5A2QQAF5_cjs = require('../chunk-5A2QQAF5.cjs');
|
|
60
64
|
require('../chunk-B6MVQCXW.cjs');
|
|
61
65
|
var chunkJKB7WT7L_cjs = require('../chunk-JKB7WT7L.cjs');
|
|
62
66
|
var chunkJSTKEZBS_cjs = require('../chunk-JSTKEZBS.cjs');
|
|
63
67
|
require('../chunk-76L6LOP3.cjs');
|
|
64
|
-
require('../chunk-7UTB4PHM.cjs');
|
|
65
68
|
require('../chunk-32HW2Q33.cjs');
|
|
69
|
+
require('../chunk-7UTB4PHM.cjs');
|
|
70
|
+
var chunkFX3K6LNZ_cjs = require('../chunk-FX3K6LNZ.cjs');
|
|
66
71
|
require('../chunk-PPCATBOY.cjs');
|
|
72
|
+
require('../chunk-MHVNT4J3.cjs');
|
|
67
73
|
var chunkZMYW5M75_cjs = require('../chunk-ZMYW5M75.cjs');
|
|
68
74
|
var chunkEFEFLBRM_cjs = require('../chunk-EFEFLBRM.cjs');
|
|
69
|
-
var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
|
|
70
|
-
var chunkU7OUZHBH_cjs = require('../chunk-U7OUZHBH.cjs');
|
|
71
|
-
require('../chunk-7G2LJMUG.cjs');
|
|
72
|
-
require('../chunk-VLCY46K6.cjs');
|
|
73
|
-
var chunkC2CWWEHO_cjs = require('../chunk-C2CWWEHO.cjs');
|
|
74
|
-
var chunkFX3K6LNZ_cjs = require('../chunk-FX3K6LNZ.cjs');
|
|
75
|
-
require('../chunk-MHVNT4J3.cjs');
|
|
76
75
|
var chunkULWRNGGE_cjs = require('../chunk-ULWRNGGE.cjs');
|
|
76
|
+
var chunkKDG6FER6_cjs = require('../chunk-KDG6FER6.cjs');
|
|
77
77
|
require('../chunk-DES3K4SD.cjs');
|
|
78
78
|
var reactQuery = require('@tanstack/react-query');
|
|
79
79
|
var react$1 = require('@arbidocs/react');
|
|
@@ -169,7 +169,7 @@ function ConnectedWorkspaceActivity({
|
|
|
169
169
|
[feed.data]
|
|
170
170
|
);
|
|
171
171
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
172
|
-
|
|
172
|
+
chunkSYTZ3UAU_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(chunkXGFNZTPO_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
|
+
chunkSYTZ3UAU_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" ? chunkSYTZ3UAU_cjs.ThreadFollowMenuItem : chunkSYTZ3UAU_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(() => chunkAODZXDEE_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(() => chunkAODZXDEE_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(() => chunkAODZXDEE_cjs.buildLibrarySkills(builtins, listings ?? []), [builtins, listings]);
|
|
1031
1031
|
const shown = react.useMemo(
|
|
1032
|
-
() =>
|
|
1032
|
+
() => chunkAODZXDEE_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: chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.builtin, count: count2("builtin") },
|
|
1044
|
+
{ id: "mine", label: chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.mine, count: count2("mine") },
|
|
1045
|
+
{ id: "shared", label: chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.shared, count: count2("shared") }
|
|
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: chunkAODZXDEE_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 chunkAODZXDEE_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
|
+
chunkAODZXDEE_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(chunkAODZXDEE_cjs.SkillViewToggle, { value: view, onChange: setView })
|
|
1163
1163
|
] }),
|
|
1164
1164
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1165
|
-
|
|
1165
|
+
chunkAODZXDEE_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
|
+
chunkAODZXDEE_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
|
+
chunkAODZXDEE_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 ? `${chunkAODZXDEE_cjs.SKILL_SOURCE_LABELS.mine}, shared` : chunkAODZXDEE_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
|
+
chunkAODZXDEE_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
|
+
chunkAODZXDEE_cjs.SkillLibraryDetail,
|
|
1289
1289
|
{
|
|
1290
1290
|
skill: current,
|
|
1291
1291
|
icon,
|
|
1292
|
-
instructions: current.docExtId ? currentText ?
|
|
1292
|
+
instructions: current.docExtId ? currentText ? chunkAODZXDEE_cjs.parseSkillFrontmatter(currentText, chunkAODZXDEE_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 = chunkAODZXDEE_cjs.parseSkillFrontmatter(text, chunkAODZXDEE_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 = chunkAODZXDEE_cjs.skillSlug(name);
|
|
1342
1342
|
try {
|
|
1343
|
-
await onSave(slug,
|
|
1343
|
+
await onSave(slug, chunkAODZXDEE_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
|
+
chunkAODZXDEE_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 = chunkAODZXDEE_cjs.DEFAULT_AGENT_CAPABILITIES,
|
|
1386
|
+
templates = chunkAODZXDEE_cjs.DEFAULT_AGENT_TEMPLATES,
|
|
1387
|
+
types = chunkAODZXDEE_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 ? chunkAODZXDEE_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 (!chunkAODZXDEE_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: chunkAODZXDEE_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
|
+
chunkAODZXDEE_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
|
+
chunkAODZXDEE_cjs.AgentAvatarField,
|
|
1524
1524
|
{
|
|
1525
1525
|
picture,
|
|
1526
1526
|
isBusy: avatarBusy,
|
|
1527
|
-
canGenerate: isEdit ||
|
|
1527
|
+
canGenerate: isEdit || chunkAODZXDEE_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(chunkAODZXDEE_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
|
+
chunkAODZXDEE_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 } = chunkPTSTVYQD_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(chunkZV4DNZ5N_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
|
+
chunkAODZXDEE_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) : chunkAODZXDEE_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: chunkAODZXDEE_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 = chunkAODZXDEE_cjs.useWorkflowView({
|
|
1962
1962
|
steps,
|
|
1963
1963
|
states,
|
|
1964
1964
|
inputs,
|
|
@@ -2001,7 +2001,7 @@ function WorkflowRunThread({
|
|
|
2001
2001
|
if (listed && activeThreadId !== conversationId) selectThread(conversationId);
|
|
2002
2002
|
}, [listed, activeThreadId, conversationId, selectThread]);
|
|
2003
2003
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2004
|
-
|
|
2004
|
+
chunk5A2QQAF5_cjs.ChatPage,
|
|
2005
2005
|
{
|
|
2006
2006
|
chat: { ...chat, threads: chat.threads.filter((t) => t.id === conversationId) },
|
|
2007
2007
|
singleThread: true,
|
|
@@ -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(chunkPTSTVYQD_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
|
+
chunkAODZXDEE_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
|
+
chunkAODZXDEE_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
|
+
chunkXGFNZTPO_cjs.applyInvertedIndexFilter(
|
|
2656
2656
|
[...list],
|
|
2657
2657
|
combination,
|
|
2658
|
-
|
|
2658
|
+
chunkXGFNZTPO_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 = chunkSYTZ3UAU_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
|
+
chunkSYTZ3UAU_cjs.TagTable,
|
|
2785
2785
|
{
|
|
2786
2786
|
...props,
|
|
2787
2787
|
table,
|
|
@@ -2822,7 +2822,7 @@ function DocTagPassages({ docId, tagId, label, docOf, testId }) {
|
|
|
2822
2822
|
const [open, setOpen] = react.useState(false);
|
|
2823
2823
|
const doctag = docOf(docId)?.doctags?.find((dt) => dt.tag_ext_id === tagId);
|
|
2824
2824
|
const citations = react.useMemo(
|
|
2825
|
-
() =>
|
|
2825
|
+
() => chunkLMQOTLG4_cjs.toFactCitations(doctag?.citations) ?? [],
|
|
2826
2826
|
[doctag?.citations]
|
|
2827
2827
|
);
|
|
2828
2828
|
const { quoteFor, orderOf } = react$1.usePassageQuotes(
|
|
@@ -2831,7 +2831,7 @@ function DocTagPassages({ docId, tagId, label, docOf, testId }) {
|
|
|
2831
2831
|
const { openDocument } = chunkEFEFLBRM_cjs.useBlocksEnvironment();
|
|
2832
2832
|
const viewingPassageId = react$1.useArbiSessionState((s) => s.viewingDocument?.passageId ?? null);
|
|
2833
2833
|
const id = testId ?? `doctag-passages-${docId}`;
|
|
2834
|
-
const refOf = (cited) =>
|
|
2834
|
+
const refOf = (cited) => chunkLMQOTLG4_cjs.citedVersionRef(cited.doc_ext_id, cited.version, docOf(cited.doc_ext_id)?.current_version);
|
|
2835
2835
|
const ordered = (cited) => [...cited.chunks].sort((a, b) => {
|
|
2836
2836
|
const oa = orderOf(a.chunk_id);
|
|
2837
2837
|
const ob = orderOf(b.chunk_id);
|
|
@@ -2862,7 +2862,7 @@ function DocTagPassages({ docId, tagId, label, docOf, testId }) {
|
|
|
2862
2862
|
const doc = docOf(cited.doc_ext_id);
|
|
2863
2863
|
const passages = ordered(cited);
|
|
2864
2864
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2865
|
-
|
|
2865
|
+
chunkLMQOTLG4_cjs.FactSourceGroup,
|
|
2866
2866
|
{
|
|
2867
2867
|
docId: cited.doc_ext_id,
|
|
2868
2868
|
hasPassages: passages.length > 0,
|
|
@@ -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 = chunkSYTZ3UAU_cjs.glossaryEntries(sources, { labelId: narrowed?.id });
|
|
2923
|
+
const blob = format === "docx" ? new Blob([chunkSYTZ3UAU_cjs.glossaryDocx(entries, { title })], { type: chunkQT3A4PFC_cjs.DOCX_MIME_TYPE }) : new Blob([chunkSYTZ3UAU_cjs.glossaryMarkdown(entries, { title })], { type: "text/markdown" });
|
|
2924
|
+
documentTools.downloadBlob(blob, chunkSYTZ3UAU_cjs.glossaryFileName(title, format));
|
|
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(
|
|
@@ -3025,7 +3025,7 @@ function TileStatusBadge({ doc, status }) {
|
|
|
3025
3025
|
case "failed":
|
|
3026
3026
|
tone = "danger";
|
|
3027
3027
|
icon2 = /* @__PURE__ */ jsxRuntime.jsx(
|
|
3028
|
-
|
|
3028
|
+
chunkNUAC5GTQ_cjs.FailedStageIcon,
|
|
3029
3029
|
{
|
|
3030
3030
|
stage: doc.failed_stage ?? null,
|
|
3031
3031
|
errorMessage: doc.error_message,
|
|
@@ -3052,7 +3052,7 @@ function TileStatusBadge({ doc, status }) {
|
|
|
3052
3052
|
return null;
|
|
3053
3053
|
}
|
|
3054
3054
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3055
|
-
|
|
3055
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3056
3056
|
{
|
|
3057
3057
|
tone,
|
|
3058
3058
|
icon: icon2,
|
|
@@ -3064,11 +3064,11 @@ function TileStatusBadge({ doc, status }) {
|
|
|
3064
3064
|
function TileVisibilityBadge({ doc }) {
|
|
3065
3065
|
const shared = !!doc.shared;
|
|
3066
3066
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3067
|
-
|
|
3067
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3068
3068
|
{
|
|
3069
3069
|
icon: /* @__PURE__ */ jsxRuntime.jsx(ui.VisibilityIcon, { isShared: shared, className: "size-3.5", "aria-hidden": true }),
|
|
3070
3070
|
label: shared ? ui.getEntityLabel("WORKSPACE") : "Only you",
|
|
3071
|
-
title:
|
|
3071
|
+
title: chunkNUAC5GTQ_cjs.visibilityAudience(shared),
|
|
3072
3072
|
testId: `explorer-file-visibility-${doc.external_id}`
|
|
3073
3073
|
}
|
|
3074
3074
|
);
|
|
@@ -3095,7 +3095,7 @@ function FileTooltipContent({
|
|
|
3095
3095
|
}) {
|
|
3096
3096
|
const labels = (doc.doctags ?? []).map((dt) => tagNameById.get(dt.tag_ext_id)).filter((name) => !!name);
|
|
3097
3097
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3098
|
-
|
|
3098
|
+
chunkNUAC5GTQ_cjs.ExplorerFileTooltip,
|
|
3099
3099
|
{
|
|
3100
3100
|
title: ui.getDocumentTitle(doc, doc.file_name ?? ""),
|
|
3101
3101
|
summary: ui.getDocumentSubject(doc),
|
|
@@ -3104,7 +3104,7 @@ function FileTooltipContent({
|
|
|
3104
3104
|
shared: !!doc.shared,
|
|
3105
3105
|
visibilityIcon: /* @__PURE__ */ jsxRuntime.jsx(ui.VisibilityIcon, { isShared: !!doc.shared, className: "h-3 w-3" }),
|
|
3106
3106
|
labels,
|
|
3107
|
-
uiLabels: { shared:
|
|
3107
|
+
uiLabels: { shared: chunkNUAC5GTQ_cjs.visibilityAudience(true), private: chunkNUAC5GTQ_cjs.visibilityAudience(false) }
|
|
3108
3108
|
}
|
|
3109
3109
|
);
|
|
3110
3110
|
}
|
|
@@ -3216,7 +3216,7 @@ var FileTile = react.memo(function FileTile2({
|
|
|
3216
3216
|
];
|
|
3217
3217
|
const tooltip = renaming || dndActive ? void 0 : /* @__PURE__ */ jsxRuntime.jsx(FileTooltipContent, { doc, modifiedBy, tagNameById });
|
|
3218
3218
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3219
|
-
|
|
3219
|
+
chunkNUAC5GTQ_cjs.ExplorerFileTile,
|
|
3220
3220
|
{
|
|
3221
3221
|
id: doc.external_id,
|
|
3222
3222
|
title: ui.getDocumentTitle(doc, doc.file_name ?? ""),
|
|
@@ -3310,17 +3310,17 @@ var FolderTile = react.memo(function FolderTile2({
|
|
|
3310
3310
|
}
|
|
3311
3311
|
] : []
|
|
3312
3312
|
];
|
|
3313
|
-
const displayName = folder.path.length === 1 ?
|
|
3314
|
-
const providerIcon = folder.path.length === 1 &&
|
|
3313
|
+
const displayName = folder.path.length === 1 ? chunkNUAC5GTQ_cjs.formatFolderSegment(folder.name) : folder.name;
|
|
3314
|
+
const providerIcon = folder.path.length === 1 && chunkNUAC5GTQ_cjs.hasFolderProviderIcon(folder.name) ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
3315
3315
|
"span",
|
|
3316
3316
|
{
|
|
3317
3317
|
className: "flex items-center justify-center drop-shadow-sm",
|
|
3318
3318
|
style: { width: iconSize, height: iconSize },
|
|
3319
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3319
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FolderProviderIcon, { folderPath: folder.name, className: "h-full w-full" })
|
|
3320
3320
|
}
|
|
3321
3321
|
) : void 0;
|
|
3322
3322
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3323
|
-
|
|
3323
|
+
chunkNUAC5GTQ_cjs.ExplorerFolderTile,
|
|
3324
3324
|
{
|
|
3325
3325
|
name: folder.name,
|
|
3326
3326
|
displayName: displayName === "" ? null : displayName,
|
|
@@ -3414,7 +3414,7 @@ function describeGlyph(resolved, doc) {
|
|
|
3414
3414
|
}
|
|
3415
3415
|
return {
|
|
3416
3416
|
node: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3417
|
-
|
|
3417
|
+
chunkNUAC5GTQ_cjs.FailedStageIcon,
|
|
3418
3418
|
{
|
|
3419
3419
|
stage: resolved.failedStage,
|
|
3420
3420
|
errorMessage: doc.error_message,
|
|
@@ -3459,7 +3459,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3459
3459
|
if (isPendingSync) {
|
|
3460
3460
|
return cell(
|
|
3461
3461
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3462
|
-
|
|
3462
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3463
3463
|
{
|
|
3464
3464
|
tone: "warning",
|
|
3465
3465
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { className: "size-3.5" }),
|
|
@@ -3474,7 +3474,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3474
3474
|
case "completed":
|
|
3475
3475
|
return cell(
|
|
3476
3476
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3477
|
-
|
|
3477
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3478
3478
|
{
|
|
3479
3479
|
tone: "success",
|
|
3480
3480
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle, { className: "size-3.5" }),
|
|
@@ -3487,7 +3487,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3487
3487
|
case "skipped":
|
|
3488
3488
|
return cell(
|
|
3489
3489
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3490
|
-
|
|
3490
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3491
3491
|
{
|
|
3492
3492
|
tone: "neutral",
|
|
3493
3493
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SkipForward, { className: "size-3.5" }),
|
|
@@ -3500,7 +3500,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3500
3500
|
case "empty":
|
|
3501
3501
|
return cell(
|
|
3502
3502
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3503
|
-
|
|
3503
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3504
3504
|
{
|
|
3505
3505
|
tone: "warning",
|
|
3506
3506
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileX, { className: "size-3.5" }),
|
|
@@ -3513,7 +3513,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3513
3513
|
case "low-content":
|
|
3514
3514
|
return cell(
|
|
3515
3515
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3516
|
-
|
|
3516
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3517
3517
|
{
|
|
3518
3518
|
tone: "warning",
|
|
3519
3519
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, { className: "size-3.5" }),
|
|
@@ -3528,7 +3528,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3528
3528
|
if (quota) {
|
|
3529
3529
|
return cell(
|
|
3530
3530
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3531
|
-
|
|
3531
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3532
3532
|
{
|
|
3533
3533
|
tone: "warning",
|
|
3534
3534
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Zap, { className: "size-3.5" }),
|
|
@@ -3541,11 +3541,11 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3541
3541
|
}
|
|
3542
3542
|
return cell(
|
|
3543
3543
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3544
|
-
|
|
3544
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3545
3545
|
{
|
|
3546
3546
|
tone: "danger",
|
|
3547
3547
|
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3548
|
-
|
|
3548
|
+
chunkNUAC5GTQ_cjs.FailedStageIcon,
|
|
3549
3549
|
{
|
|
3550
3550
|
stage: failedStage,
|
|
3551
3551
|
errorMessage: doc.error_message,
|
|
@@ -3562,7 +3562,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3562
3562
|
const isDocx = doc.file_name?.toLowerCase().endsWith(".docx");
|
|
3563
3563
|
return cell(
|
|
3564
3564
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3565
|
-
|
|
3565
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3566
3566
|
{
|
|
3567
3567
|
tone: "neutral",
|
|
3568
3568
|
label: isDocx ? "Uploaded" : "Queued",
|
|
@@ -3579,7 +3579,7 @@ var StatusCell = react.memo(function StatusCell2({
|
|
|
3579
3579
|
case "analysing":
|
|
3580
3580
|
return cell(
|
|
3581
3581
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3582
|
-
|
|
3582
|
+
chunkNUAC5GTQ_cjs.StatusPill,
|
|
3583
3583
|
{
|
|
3584
3584
|
tone: "info",
|
|
3585
3585
|
label: PROCESSING_LABELS[status],
|
|
@@ -3662,7 +3662,7 @@ var DocumentNameCell = react.memo(function DocumentNameCell2({
|
|
|
3662
3662
|
}
|
|
3663
3663
|
};
|
|
3664
3664
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3665
|
-
|
|
3665
|
+
chunkNUAC5GTQ_cjs.DocumentNameCellFrame,
|
|
3666
3666
|
{
|
|
3667
3667
|
testId: `open-document-viewer-button-${doc.external_id}`,
|
|
3668
3668
|
isViewing,
|
|
@@ -3691,7 +3691,7 @@ var DocumentNameCell = react.memo(function DocumentNameCell2({
|
|
|
3691
3691
|
openTimerRef.current = window.setTimeout(onOpen, OPEN_AFTER_DOUBLE_CLICK_WINDOW_MS);
|
|
3692
3692
|
},
|
|
3693
3693
|
actions: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3694
|
-
|
|
3694
|
+
chunkNUAC5GTQ_cjs.DocumentRowMenu,
|
|
3695
3695
|
{
|
|
3696
3696
|
canEdit,
|
|
3697
3697
|
onOpen,
|
|
@@ -3722,14 +3722,14 @@ var DocumentSharedCell = react.memo(function DocumentSharedCell2({
|
|
|
3722
3722
|
[document2.external_id, onToggle]
|
|
3723
3723
|
);
|
|
3724
3724
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3725
|
-
|
|
3725
|
+
chunkSYTZ3UAU_cjs.SharedCell,
|
|
3726
3726
|
{
|
|
3727
3727
|
item: document2,
|
|
3728
3728
|
onToggle: handleToggle,
|
|
3729
3729
|
disabled,
|
|
3730
3730
|
disabledTooltip,
|
|
3731
|
-
tooltipActive:
|
|
3732
|
-
tooltipInactive:
|
|
3731
|
+
tooltipActive: chunkNUAC5GTQ_cjs.visibilityToggleTooltip(true),
|
|
3732
|
+
tooltipInactive: chunkNUAC5GTQ_cjs.visibilityToggleTooltip(false),
|
|
3733
3733
|
workspaceLabel: ui.getEntityLabel("WORKSPACE")
|
|
3734
3734
|
}
|
|
3735
3735
|
);
|
|
@@ -3743,7 +3743,7 @@ function useDocumentFolders(documents, value) {
|
|
|
3743
3743
|
}, [documents, value]);
|
|
3744
3744
|
}
|
|
3745
3745
|
function folderSegments(folder) {
|
|
3746
|
-
return folder.split("/").map((part, i) => i === 0 ?
|
|
3746
|
+
return folder.split("/").map((part, i) => i === 0 ? chunkNUAC5GTQ_cjs.formatFolderSegment(part) : part).filter((part, i) => i > 0 || part !== "");
|
|
3747
3747
|
}
|
|
3748
3748
|
var DocumentFolderCell = react.memo(
|
|
3749
3749
|
function DocumentFolderCell2({
|
|
@@ -3755,14 +3755,14 @@ var DocumentFolderCell = react.memo(
|
|
|
3755
3755
|
const folder = document2.folder;
|
|
3756
3756
|
const folders = useDocumentFolders(allDocuments, folder);
|
|
3757
3757
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3758
|
-
|
|
3758
|
+
chunkNUAC5GTQ_cjs.FolderCell,
|
|
3759
3759
|
{
|
|
3760
3760
|
folder,
|
|
3761
3761
|
segments: folder ? folderSegments(folder) : [],
|
|
3762
|
-
icon: folder &&
|
|
3762
|
+
icon: folder && chunkNUAC5GTQ_cjs.hasFolderProviderIcon(folder) ? /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FolderProviderIcon, { folderPath: folder, className: "h-3.5 w-3.5 flex-none shrink-0" }) : void 0,
|
|
3763
3763
|
isEditable,
|
|
3764
3764
|
picker: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3765
|
-
|
|
3765
|
+
chunkNUAC5GTQ_cjs.FolderCommandList,
|
|
3766
3766
|
{
|
|
3767
3767
|
folders,
|
|
3768
3768
|
value: folder,
|
|
@@ -3797,7 +3797,7 @@ var RelatedDocumentsCell = react.memo(function RelatedDocumentsCell2({
|
|
|
3797
3797
|
onCompare
|
|
3798
3798
|
}) {
|
|
3799
3799
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3800
|
-
|
|
3800
|
+
chunkNUAC5GTQ_cjs.RelatedDocsCell,
|
|
3801
3801
|
{
|
|
3802
3802
|
parent: related.parent,
|
|
3803
3803
|
attachments: related.children,
|
|
@@ -4025,9 +4025,9 @@ function ConnectedTagForm({
|
|
|
4025
4025
|
});
|
|
4026
4026
|
}
|
|
4027
4027
|
}
|
|
4028
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4028
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.TagFormRoot, { children: [
|
|
4029
4029
|
!nameOnRow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4030
|
-
|
|
4030
|
+
chunkNUAC5GTQ_cjs.TagFormNameField,
|
|
4031
4031
|
{
|
|
4032
4032
|
label: group || nameByKind ? `${ui.tagKindTitle(kind)} Name` : `${columnLabel} Name`,
|
|
4033
4033
|
placeholder: `Enter ${kindNoun ?? columnLabel.toLowerCase()} name...`,
|
|
@@ -4037,7 +4037,7 @@ function ConnectedTagForm({
|
|
|
4037
4037
|
}
|
|
4038
4038
|
),
|
|
4039
4039
|
kinds.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4040
|
-
|
|
4040
|
+
chunkNUAC5GTQ_cjs.TagFormSelectField,
|
|
4041
4041
|
{
|
|
4042
4042
|
label: "Kind",
|
|
4043
4043
|
testId: "inline-tag-form-kind-field",
|
|
@@ -4052,7 +4052,7 @@ function ConnectedTagForm({
|
|
|
4052
4052
|
}
|
|
4053
4053
|
),
|
|
4054
4054
|
kind === "annotation" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4055
|
-
|
|
4055
|
+
chunkNUAC5GTQ_cjs.TagFormSelectField,
|
|
4056
4056
|
{
|
|
4057
4057
|
label: group === "annotation" ? "Value type" : "Field Type",
|
|
4058
4058
|
testId: "inline-tag-form-type-field",
|
|
@@ -4064,7 +4064,7 @@ function ConnectedTagForm({
|
|
|
4064
4064
|
}
|
|
4065
4065
|
),
|
|
4066
4066
|
showParentPicker && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4067
|
-
|
|
4067
|
+
chunkNUAC5GTQ_cjs.TagFormSelectField,
|
|
4068
4068
|
{
|
|
4069
4069
|
label: "Nested Under",
|
|
4070
4070
|
value: parentId,
|
|
@@ -4088,14 +4088,14 @@ function ConnectedTagForm({
|
|
|
4088
4088
|
hint: !canClearParent ? "This field can move to a different parent, but the API has no way to move it back to the top level." : void 0
|
|
4089
4089
|
}
|
|
4090
4090
|
),
|
|
4091
|
-
nestingEnabled && hasChildren && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4091
|
+
nestingEnabled && hasChildren && /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.TagFormNote, { testId: "inline-tag-form-parent-locked", children: [
|
|
4092
4092
|
"Other fields are nested under this one, so it cannot itself be nested \u2014 fields nest",
|
|
4093
4093
|
" ",
|
|
4094
4094
|
browser.TAG_NESTING_MAX_DEPTH,
|
|
4095
4095
|
" levels deep."
|
|
4096
4096
|
] }),
|
|
4097
4097
|
tagType === "select" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4098
|
-
|
|
4098
|
+
chunkNUAC5GTQ_cjs.TagFormOptionsEditor,
|
|
4099
4099
|
{
|
|
4100
4100
|
label: "Options",
|
|
4101
4101
|
options: options2,
|
|
@@ -4108,7 +4108,7 @@ function ConnectedTagForm({
|
|
|
4108
4108
|
}
|
|
4109
4109
|
),
|
|
4110
4110
|
tagType === "text" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4111
|
-
|
|
4111
|
+
chunkNUAC5GTQ_cjs.TagFormInstructionField,
|
|
4112
4112
|
{
|
|
4113
4113
|
label: "AI Instruction",
|
|
4114
4114
|
optionalLabel: "(optional)",
|
|
@@ -4118,12 +4118,12 @@ function ConnectedTagForm({
|
|
|
4118
4118
|
onChange: setInstruction
|
|
4119
4119
|
}
|
|
4120
4120
|
),
|
|
4121
|
-
metaLines.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4121
|
+
metaLines.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.TagFormMeta, { lines: metaLines }),
|
|
4122
4122
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4123
|
-
|
|
4123
|
+
chunkNUAC5GTQ_cjs.TagFormFooter,
|
|
4124
4124
|
{
|
|
4125
4125
|
sharedToggle: isCreate ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4126
|
-
|
|
4126
|
+
chunkNUAC5GTQ_cjs.TagFormSharedToggle,
|
|
4127
4127
|
{
|
|
4128
4128
|
label: "Shared with workspace",
|
|
4129
4129
|
toggle: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -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
|
+
chunkXGFNZTPO_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: chunkSYTZ3UAU_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
|
+
chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase(),
|
|
4436
4436
|
" from ",
|
|
4437
|
-
|
|
4437
|
+
chunkSYTZ3UAU_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: chunkSYTZ3UAU_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: chunkSYTZ3UAU_cjs.tagTableLabels(tag.kind),
|
|
4558
4558
|
testId: "tags-rows"
|
|
4559
4559
|
}
|
|
4560
4560
|
),
|
|
4561
4561
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4562
|
-
|
|
4562
|
+
chunkSYTZ3UAU_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: chunkSYTZ3UAU_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: chunkSYTZ3UAU_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 = chunkSYTZ3UAU_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 ${chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase()} from ${chunkSYTZ3UAU_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 ${chunkSYTZ3UAU_cjs.entitiesPhrase().toLowerCase()}`), "error");
|
|
4691
4691
|
throw error;
|
|
4692
4692
|
}
|
|
4693
4693
|
};
|
|
4694
4694
|
const picker = /* @__PURE__ */ jsxRuntime.jsx(
|
|
4695
|
-
|
|
4695
|
+
chunkSYTZ3UAU_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 = chunkSYTZ3UAU_cjs.tagsPageNouns();
|
|
4710
4710
|
const action = view === "person" || view === "organisation" ? {
|
|
4711
4711
|
label: "Extract",
|
|
4712
|
-
title: `Extract ${
|
|
4712
|
+
title: `Extract ${chunkSYTZ3UAU_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"
|
|
@@ -4749,7 +4749,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
|
|
|
4749
4749
|
onTabChange: () => {
|
|
4750
4750
|
},
|
|
4751
4751
|
variant: "underline",
|
|
4752
|
-
firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4752
|
+
firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FilesFilterBar, { className: "flex-none", "data-testid": "tags-header-actions", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4753
4753
|
chunk2EI7NCUA_cjs.FilterInput,
|
|
4754
4754
|
{
|
|
4755
4755
|
value: filterText,
|
|
@@ -4777,7 +4777,7 @@ ${nested.length} nested ${tagNoun(nested.length)} ${nested.length === 1 ? "moves
|
|
|
4777
4777
|
)
|
|
4778
4778
|
}
|
|
4779
4779
|
) }),
|
|
4780
|
-
centerContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4780
|
+
centerContent: /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FilesViewCenter, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4781
4781
|
chunk2WLXQGWC_cjs.ViewToggle,
|
|
4782
4782
|
{
|
|
4783
4783
|
options: browser.TAG_KINDS.map((k) => ({
|
|
@@ -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
|
+
chunkSYTZ3UAU_cjs.ExtractEntitiesDialog,
|
|
4863
4863
|
{
|
|
4864
4864
|
open: extracting,
|
|
4865
4865
|
onOpenChange: setExtracting,
|
|
@@ -4920,7 +4920,7 @@ function FactSourcesPopover({
|
|
|
4920
4920
|
reset();
|
|
4921
4921
|
}
|
|
4922
4922
|
};
|
|
4923
|
-
const refOf = (docId) =>
|
|
4923
|
+
const refOf = (docId) => chunkLMQOTLG4_cjs.citedVersionRef(
|
|
4924
4924
|
docId,
|
|
4925
4925
|
citations.find((d) => d.doc_ext_id === docId)?.version,
|
|
4926
4926
|
citedDocs?.[docId]?.current_version
|
|
@@ -4950,7 +4950,7 @@ function FactSourcesPopover({
|
|
|
4950
4950
|
const olderVersion = refOf(docId) !== docId ? refOf(docId).split("@v")[1] : null;
|
|
4951
4951
|
const cited = passagesOf(docId);
|
|
4952
4952
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4953
|
-
|
|
4953
|
+
chunkLMQOTLG4_cjs.FactSourceGroup,
|
|
4954
4954
|
{
|
|
4955
4955
|
docId,
|
|
4956
4956
|
isViewing,
|
|
@@ -5019,8 +5019,8 @@ function FactMarkdownEditor({
|
|
|
5019
5019
|
citationContainer,
|
|
5020
5020
|
"data-testid": dataTestId
|
|
5021
5021
|
}) {
|
|
5022
|
-
const sources = react.useMemo(() =>
|
|
5023
|
-
const docIds =
|
|
5022
|
+
const sources = react.useMemo(() => chunkLMQOTLG4_cjs.toFactCitations(citations) ?? [], [citations]);
|
|
5023
|
+
const docIds = chunkLMQOTLG4_cjs.docIdsOf(sources);
|
|
5024
5024
|
const hasSources = docIds.length > 0;
|
|
5025
5025
|
const { quoteFor, orderOf } = react$1.usePassageQuotes(
|
|
5026
5026
|
react.useMemo(() => sources.filter((d) => d.chunks.length > 0).map((d) => d.doc_ext_id), [sources])
|
|
@@ -5039,7 +5039,7 @@ function FactMarkdownEditor({
|
|
|
5039
5039
|
const editorRef = react.useRef(null);
|
|
5040
5040
|
react.useEffect(() => {
|
|
5041
5041
|
if (!editorRef.current) return;
|
|
5042
|
-
return
|
|
5042
|
+
return chunkLMQOTLG4_cjs.enableFactTableColumnResize(editorRef.current);
|
|
5043
5043
|
}, []);
|
|
5044
5044
|
react.useEffect(() => {
|
|
5045
5045
|
if (!editing) return;
|
|
@@ -5054,14 +5054,14 @@ function FactMarkdownEditor({
|
|
|
5054
5054
|
return () => document.removeEventListener("pointerdown", onPointerDown, true);
|
|
5055
5055
|
}, [editing]);
|
|
5056
5056
|
const removeDoc = (docExtId) => {
|
|
5057
|
-
const remaining =
|
|
5057
|
+
const remaining = chunkLMQOTLG4_cjs.withoutDoc(sources, docExtId);
|
|
5058
5058
|
if (!remaining) setSourcesOpen(false);
|
|
5059
5059
|
onChange(value, remaining);
|
|
5060
5060
|
};
|
|
5061
5061
|
const citeDocument = (docExtId) => onCiteDocument(docExtId, { toggle: false });
|
|
5062
5062
|
const handleToggleDoc = (docExtId) => {
|
|
5063
5063
|
if (docIds.includes(docExtId)) removeDoc(docExtId);
|
|
5064
|
-
else onChange(value,
|
|
5064
|
+
else onChange(value, chunkLMQOTLG4_cjs.withDoc(sources, docExtId));
|
|
5065
5065
|
};
|
|
5066
5066
|
const expandToggle = /* @__PURE__ */ jsxRuntime.jsx(
|
|
5067
5067
|
"button",
|
|
@@ -5280,7 +5280,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5280
5280
|
const [composing, setComposing] = react.useState(false);
|
|
5281
5281
|
const [draft, setDraft] = react.useState("");
|
|
5282
5282
|
const [baselineText, setBaselineText] = react.useState("");
|
|
5283
|
-
const [draftDateFields, setDraftDateFields] = react.useState(
|
|
5283
|
+
const [draftDateFields, setDraftDateFields] = react.useState(chunkLMQOTLG4_cjs.EMPTY_FACT_DATE_FIELDS);
|
|
5284
5284
|
const [composerError, setComposerError] = react.useState(null);
|
|
5285
5285
|
const [editingId, setEditingId] = react.useState(null);
|
|
5286
5286
|
const [draftShared, setDraftShared] = react.useState(false);
|
|
@@ -5337,9 +5337,9 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5337
5337
|
if (!collector || !picked?.length || !collectingFor || !docBeingCollected) return;
|
|
5338
5338
|
const docExtId = docBeingCollected;
|
|
5339
5339
|
const apply = (prev) => {
|
|
5340
|
-
let next =
|
|
5340
|
+
let next = chunkLMQOTLG4_cjs.toFactCitations(prev);
|
|
5341
5341
|
for (const pending of picked) {
|
|
5342
|
-
next =
|
|
5342
|
+
next = chunkLMQOTLG4_cjs.withChunk(next, docExtId, { chunk_id: pending.chunk_id, page: pending.page ?? null });
|
|
5343
5343
|
}
|
|
5344
5344
|
return next ?? [];
|
|
5345
5345
|
};
|
|
@@ -5350,8 +5350,8 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5350
5350
|
react.useEffect(() => {
|
|
5351
5351
|
if (!collector || !unpicked?.length || !collectingFor) return;
|
|
5352
5352
|
setDraftCitations((prev) => {
|
|
5353
|
-
let next =
|
|
5354
|
-
for (const chunkId of unpicked) next =
|
|
5353
|
+
let next = chunkLMQOTLG4_cjs.toFactCitations(prev);
|
|
5354
|
+
for (const chunkId of unpicked) next = chunkLMQOTLG4_cjs.withoutChunk(next, chunkId);
|
|
5355
5355
|
return next;
|
|
5356
5356
|
});
|
|
5357
5357
|
collector.consumeUnpicked();
|
|
@@ -5361,7 +5361,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5361
5361
|
setBaselineText("");
|
|
5362
5362
|
setDraftCitations(null);
|
|
5363
5363
|
setDraftTagIds([]);
|
|
5364
|
-
setDraftDateFields(
|
|
5364
|
+
setDraftDateFields(chunkLMQOTLG4_cjs.EMPTY_FACT_DATE_FIELDS);
|
|
5365
5365
|
setDraftShared(false);
|
|
5366
5366
|
setDraftConfirmed(true);
|
|
5367
5367
|
setComposerError(null);
|
|
@@ -5375,7 +5375,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5375
5375
|
setBaselineText("");
|
|
5376
5376
|
setDraftCitations(null);
|
|
5377
5377
|
setDraftTagIds([]);
|
|
5378
|
-
setDraftDateFields(
|
|
5378
|
+
setDraftDateFields(chunkLMQOTLG4_cjs.EMPTY_FACT_DATE_FIELDS);
|
|
5379
5379
|
setDraftShared(false);
|
|
5380
5380
|
setDraftConfirmed(true);
|
|
5381
5381
|
setComposerError(null);
|
|
@@ -5386,7 +5386,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5386
5386
|
const content = chunkRC25WMVB_cjs.decodeWhitespaceEntities(draft).trim();
|
|
5387
5387
|
if (!content) return;
|
|
5388
5388
|
setComposerError(null);
|
|
5389
|
-
const span =
|
|
5389
|
+
const span = chunkLMQOTLG4_cjs.factDateFieldsToSpan(draftDateFields);
|
|
5390
5390
|
try {
|
|
5391
5391
|
let saved;
|
|
5392
5392
|
if (editingId) {
|
|
@@ -5424,7 +5424,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5424
5424
|
setBaselineText(draft);
|
|
5425
5425
|
setDraftCitations(saved.citations ?? null);
|
|
5426
5426
|
setDraftTagIds(saved.tags.map((t) => t.tag_ext_id));
|
|
5427
|
-
setDraftDateFields(
|
|
5427
|
+
setDraftDateFields(chunkLMQOTLG4_cjs.factDateSpanToFields(saved.date_start, saved.date_end, saved.timezone));
|
|
5428
5428
|
setDraftShared(saved.shared ?? false);
|
|
5429
5429
|
setDraftConfirmed(saved.confirmed ?? true);
|
|
5430
5430
|
}
|
|
@@ -5449,7 +5449,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5449
5449
|
setBaselineText(m.text);
|
|
5450
5450
|
setDraftCitations(m.citations ?? null);
|
|
5451
5451
|
setDraftTagIds(m.tags.map((t) => t.tag_ext_id));
|
|
5452
|
-
setDraftDateFields(
|
|
5452
|
+
setDraftDateFields(chunkLMQOTLG4_cjs.factDateSpanToFields(m.date_start, m.date_end, m.timezone));
|
|
5453
5453
|
setDraftShared(m.shared ?? false);
|
|
5454
5454
|
setDraftConfirmed(m.confirmed ?? true);
|
|
5455
5455
|
setComposerError(null);
|
|
@@ -5463,7 +5463,7 @@ function useFactComposer(notes, remove, gridApiRef, collector, composeRequested,
|
|
|
5463
5463
|
const textChanged = draft.trim() !== baselineText.trim();
|
|
5464
5464
|
const citationsChanged = JSON.stringify(draftCitations ?? null) !== JSON.stringify(f.citations ?? null);
|
|
5465
5465
|
const tagsChanged = JSON.stringify([...draftTagIds].sort()) !== JSON.stringify(f.tags.map((t) => t.tag_ext_id).sort());
|
|
5466
|
-
const dateChanged = JSON.stringify(draftDateFields) !== JSON.stringify(
|
|
5466
|
+
const dateChanged = JSON.stringify(draftDateFields) !== JSON.stringify(chunkLMQOTLG4_cjs.factDateSpanToFields(f.date_start, f.date_end, f.timezone));
|
|
5467
5467
|
const sharedChanged = draftShared !== (f.shared ?? false);
|
|
5468
5468
|
const confirmedChanged = draftConfirmed !== (f.confirmed ?? true);
|
|
5469
5469
|
return textChanged || citationsChanged || tagsChanged || dateChanged || sharedChanged || confirmedChanged;
|
|
@@ -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
|
+
() => chunkXGFNZTPO_cjs.applyInvertedIndexFilter(
|
|
5560
5560
|
notes,
|
|
5561
5561
|
factFilters,
|
|
5562
|
-
|
|
5562
|
+
chunkXGFNZTPO_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)
|
|
@@ -5637,8 +5637,8 @@ function useFactFilters(notes, view, chat) {
|
|
|
5637
5637
|
const makeTagPicker = react.useCallback(
|
|
5638
5638
|
(selected, setSelected, opts) => {
|
|
5639
5639
|
const applied = new Set(selected);
|
|
5640
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5641
|
-
|
|
5640
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkLMQOTLG4_cjs.FactFieldRow, { label: "Labels", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
5641
|
+
chunkNUAC5GTQ_cjs.FieldLabelsSelect,
|
|
5642
5642
|
{
|
|
5643
5643
|
options: labelOptions,
|
|
5644
5644
|
appliedIds: applied,
|
|
@@ -5828,14 +5828,14 @@ function useFactSelection(notes, gridApiRef, setFactTags, chat) {
|
|
|
5828
5828
|
}
|
|
5829
5829
|
function renderSourcesCell(params) {
|
|
5830
5830
|
const fact = params.data;
|
|
5831
|
-
const count2 =
|
|
5831
|
+
const count2 = chunkLMQOTLG4_cjs.sourceDocCount(fact);
|
|
5832
5832
|
if (!fact || count2 === 0) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\u2014" });
|
|
5833
5833
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5834
5834
|
"button",
|
|
5835
5835
|
{
|
|
5836
5836
|
type: "button",
|
|
5837
5837
|
onClick: () => params.context?.openEdit?.(fact),
|
|
5838
|
-
title:
|
|
5838
|
+
title: chunkLMQOTLG4_cjs.DEFAULT_FACT_COLUMN_LABELS.sourcedFrom(count2),
|
|
5839
5839
|
"data-testid": `facts-grid-sources-${fact.external_id}`,
|
|
5840
5840
|
className: "inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground",
|
|
5841
5841
|
children: [
|
|
@@ -5864,7 +5864,7 @@ var FactHeader = react.memo(function FactHeader2({
|
|
|
5864
5864
|
if (params.enableSorting) params.progressSort(e.shiftKey);
|
|
5865
5865
|
},
|
|
5866
5866
|
children: [
|
|
5867
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5867
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FilterButton, { params, colId }),
|
|
5868
5868
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "order-2 min-w-0 flex-1 truncate", children: params.displayName }),
|
|
5869
5869
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ag-sort-indicator-container order-2 flex-shrink-0", "aria-hidden": "true", children: [
|
|
5870
5870
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5892,14 +5892,14 @@ function createFactPageColumns({
|
|
|
5892
5892
|
onToggleConfirmed,
|
|
5893
5893
|
onToggleShared
|
|
5894
5894
|
}) {
|
|
5895
|
-
const columns =
|
|
5895
|
+
const columns = chunkLMQOTLG4_cjs.createFactColumns({
|
|
5896
5896
|
onToggleInChat,
|
|
5897
5897
|
isInChat,
|
|
5898
5898
|
renderHeader: (params, colId) => /* @__PURE__ */ jsxRuntime.jsx(FactHeader, { params, colId }),
|
|
5899
5899
|
renderRowActions: (fact, params) => {
|
|
5900
5900
|
const ctx = params.context;
|
|
5901
5901
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5902
|
-
|
|
5902
|
+
chunkLMQOTLG4_cjs.FactRowActions,
|
|
5903
5903
|
{
|
|
5904
5904
|
onEdit: () => ctx?.openEdit?.(fact),
|
|
5905
5905
|
canEdit: ctx?.canRewrite?.(fact) !== false,
|
|
@@ -6029,7 +6029,7 @@ function useFactsGrid({
|
|
|
6029
6029
|
);
|
|
6030
6030
|
const renderFactTags = react.useCallback(
|
|
6031
6031
|
(fact, rowHeight) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6032
|
-
|
|
6032
|
+
chunkLMQOTLG4_cjs.FactLabelsCell,
|
|
6033
6033
|
{
|
|
6034
6034
|
options: labelOptions,
|
|
6035
6035
|
selectedIds: fact.tags.map((t) => t.tag_ext_id),
|
|
@@ -6128,7 +6128,7 @@ function useFactsGrid({
|
|
|
6128
6128
|
var DEFAULT_TIMELINE_LABEL_WIDTH = 240;
|
|
6129
6129
|
function useFactsPageView() {
|
|
6130
6130
|
const [view, setView] = react.useState("table");
|
|
6131
|
-
const [rowHeight, setRowHeight] = react.useState(
|
|
6131
|
+
const [rowHeight, setRowHeight] = react.useState(chunkNUAC5GTQ_cjs.ROW_MIN);
|
|
6132
6132
|
const [labelWidth, setLabelWidth] = react.useState(DEFAULT_TIMELINE_LABEL_WIDTH);
|
|
6133
6133
|
const [zoom, setZoom] = react.useState(1);
|
|
6134
6134
|
const [filterText, setFilterText] = react.useState("");
|
|
@@ -6161,7 +6161,7 @@ var citedDocIdsCache = /* @__PURE__ */ new WeakMap();
|
|
|
6161
6161
|
function citedDocIds(m) {
|
|
6162
6162
|
const cached = citedDocIdsCache.get(m);
|
|
6163
6163
|
if (cached) return cached;
|
|
6164
|
-
const ids =
|
|
6164
|
+
const ids = chunkLMQOTLG4_cjs.docIdsOf(chunkLMQOTLG4_cjs.toFactCitations(m.citations));
|
|
6165
6165
|
citedDocIdsCache.set(m, ids);
|
|
6166
6166
|
return ids;
|
|
6167
6167
|
}
|
|
@@ -6253,7 +6253,7 @@ function ConnectedFactsPage({
|
|
|
6253
6253
|
const citedDocs = react.useMemo(() => {
|
|
6254
6254
|
const wanted = /* @__PURE__ */ new Set([
|
|
6255
6255
|
...notes.flatMap((n) => citedDocIds(n)),
|
|
6256
|
-
...
|
|
6256
|
+
...chunkLMQOTLG4_cjs.docIdsOf(chunkLMQOTLG4_cjs.toFactCitations(composer.draftCitations))
|
|
6257
6257
|
]);
|
|
6258
6258
|
return Object.fromEntries(
|
|
6259
6259
|
documents.filter((d) => wanted.has(d.external_id)).map((d) => [d.external_id, d])
|
|
@@ -6282,7 +6282,7 @@ function ConnectedFactsPage({
|
|
|
6282
6282
|
setView(request.view === "list" ? "table" : request.view);
|
|
6283
6283
|
onRequestHandled?.("view");
|
|
6284
6284
|
}, [request?.view]);
|
|
6285
|
-
const factsRowHeight = pageView.rowHeight ===
|
|
6285
|
+
const factsRowHeight = pageView.rowHeight === chunkNUAC5GTQ_cjs.ROW_MIN ? chunkNUAC5GTQ_cjs.ROW_MIN : chunkNUAC5GTQ_cjs.rowHeightForLines(chunkNUAC5GTQ_cjs.linesForRowHeight(pageView.rowHeight));
|
|
6286
6286
|
const [isExportOpen, setIsExportOpen] = react.useState(false);
|
|
6287
6287
|
const [filterOpen, setFilterOpen] = react.useState(false);
|
|
6288
6288
|
const [factSection, setFactSection] = react.useState(null);
|
|
@@ -6307,7 +6307,7 @@ function ConnectedFactsPage({
|
|
|
6307
6307
|
};
|
|
6308
6308
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: setFactSection, className: "relative flex h-full flex-col", "data-testid": "facts-page", children: [
|
|
6309
6309
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6310
|
-
|
|
6310
|
+
chunkLMQOTLG4_cjs.FactsToolbar,
|
|
6311
6311
|
{
|
|
6312
6312
|
count: filteredNotes.length,
|
|
6313
6313
|
hasActiveFilters: filters.hasActiveFilters,
|
|
@@ -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
|
+
chunkSYTZ3UAU_cjs.GridRowNavigator,
|
|
6340
6340
|
{
|
|
6341
6341
|
gridApi,
|
|
6342
6342
|
selectedId: editingId,
|
|
@@ -6347,9 +6347,9 @@ function ConnectedFactsPage({
|
|
|
6347
6347
|
) : null,
|
|
6348
6348
|
showToolbarRow: view !== "smart_search",
|
|
6349
6349
|
tools: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
6350
|
-
view === "table" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6350
|
+
view === "table" && /* @__PURE__ */ jsxRuntime.jsx(chunkLMQOTLG4_cjs.FactsFieldsButton, { getGridApi: () => gridApiRef.current }),
|
|
6351
6351
|
view === "table" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6352
|
-
|
|
6352
|
+
chunkNUAC5GTQ_cjs.RowDensityControl,
|
|
6353
6353
|
{
|
|
6354
6354
|
rowHeight: factsRowHeight,
|
|
6355
6355
|
onRowHeightChange: pageView.setRowHeight,
|
|
@@ -6368,7 +6368,7 @@ function ConnectedFactsPage({
|
|
|
6368
6368
|
}
|
|
6369
6369
|
),
|
|
6370
6370
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6371
|
-
|
|
6371
|
+
chunkLMQOTLG4_cjs.FactComposer,
|
|
6372
6372
|
{
|
|
6373
6373
|
isOpen: composing,
|
|
6374
6374
|
isEditing: !!editingId,
|
|
@@ -6401,7 +6401,7 @@ function ConnectedFactsPage({
|
|
|
6401
6401
|
reserveSourcesSpace: view === "gantt" || view === "calendar",
|
|
6402
6402
|
citationContainer: factSection,
|
|
6403
6403
|
renderDocumentPicker: (onSelect, selectedIds, onOpen, sourcesToggle, sourcesOpen) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6404
|
-
|
|
6404
|
+
chunkLMQOTLG4_cjs.FactSourcesRow,
|
|
6405
6405
|
{
|
|
6406
6406
|
toggle: sourcesToggle,
|
|
6407
6407
|
picker: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6447,7 +6447,7 @@ function ConnectedFactsPage({
|
|
|
6447
6447
|
}
|
|
6448
6448
|
),
|
|
6449
6449
|
dateInput: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6450
|
-
|
|
6450
|
+
chunkLMQOTLG4_cjs.FactDateInput,
|
|
6451
6451
|
{
|
|
6452
6452
|
value: composer.draftDateFields,
|
|
6453
6453
|
onChange: composer.setDraftDateFields,
|
|
@@ -6457,13 +6457,13 @@ function ConnectedFactsPage({
|
|
|
6457
6457
|
}
|
|
6458
6458
|
),
|
|
6459
6459
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "scrollbar-subtle flex-1 overflow-y-auto pb-2", children: [
|
|
6460
|
-
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6460
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkLMQOTLG4_cjs.FactsLoading, {}) : isError ? /* @__PURE__ */ jsxRuntime.jsx(chunkLMQOTLG4_cjs.FactsLoadError, { onRetry: () => refetch() }) : smartSearch ? (
|
|
6461
6461
|
// Searches facts only (never documents). Kept before the empty-state guard so the
|
|
6462
6462
|
// search UI is reachable even in an empty workspace.
|
|
6463
6463
|
smartSearch({ selectedFactId: editingId, onOpenFact: openFactById })
|
|
6464
6464
|
) : notes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-full flex-col items-center justify-center", children: [
|
|
6465
6465
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6466
|
-
|
|
6466
|
+
chunkLMQOTLG4_cjs.FactsEmptyState,
|
|
6467
6467
|
{
|
|
6468
6468
|
onUseExample: (text) => {
|
|
6469
6469
|
composer.setDraft(text);
|
|
@@ -6474,7 +6474,7 @@ function ConnectedFactsPage({
|
|
|
6474
6474
|
),
|
|
6475
6475
|
emptyStateExtra
|
|
6476
6476
|
] }) : view === "calendar" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6477
|
-
|
|
6477
|
+
chunkLMQOTLG4_cjs.FactsCalendar,
|
|
6478
6478
|
{
|
|
6479
6479
|
facts: filteredNotes,
|
|
6480
6480
|
onSelect: (n) => openEditIfAllowed(n),
|
|
@@ -6483,7 +6483,7 @@ function ConnectedFactsPage({
|
|
|
6483
6483
|
navigatorTotal: filteredNotes.length
|
|
6484
6484
|
}
|
|
6485
6485
|
) : view === "gantt" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
6486
|
-
|
|
6486
|
+
chunkLMQOTLG4_cjs.FactsGanttPane,
|
|
6487
6487
|
{
|
|
6488
6488
|
items: ganttItems,
|
|
6489
6489
|
labelWidth: pageView.labelWidth,
|
|
@@ -6533,7 +6533,7 @@ function ConnectedFactsPage({
|
|
|
6533
6533
|
)
|
|
6534
6534
|
] }),
|
|
6535
6535
|
selectable && notes.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6536
|
-
|
|
6536
|
+
chunkLMQOTLG4_cjs.FactsBulkBar,
|
|
6537
6537
|
{
|
|
6538
6538
|
count: selection.selectedFacts.length,
|
|
6539
6539
|
onClear: selection.clearSelection,
|
|
@@ -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
|
+
chunkXGFNZTPO_cjs.ProfileCard,
|
|
6659
6659
|
{
|
|
6660
6660
|
avatar: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
6661
6661
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6662
|
-
|
|
6662
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.IdentityVerificationCard, { flow, labels, onManageBilling }),
|
|
6710
6710
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6711
|
-
|
|
6711
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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 = chunkXGFNZTPO_cjs.EMAIL_NOTIFICATION_CATEGORIES,
|
|
6808
6808
|
title = "Notifications"
|
|
6809
6809
|
}) {
|
|
6810
6810
|
const keys = react.useMemo(
|
|
6811
|
-
() => categories ===
|
|
6811
|
+
() => categories === chunkXGFNZTPO_cjs.EMAIL_NOTIFICATION_CATEGORIES ? chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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: chunkXGFNZTPO_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 = chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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: chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_cjs.DeleteAccountDialog,
|
|
6958
6958
|
{
|
|
6959
6959
|
open: dialogOpen,
|
|
6960
6960
|
onClose: flow.onClose,
|
|
6961
6961
|
step: flow.step,
|
|
6962
|
-
blockers:
|
|
6962
|
+
blockers: chunkXGFNZTPO_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 = chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.ConnectionsLoading, { message: "Loading connected apps\u2026" });
|
|
7602
7602
|
}
|
|
7603
7603
|
if (catalogError) {
|
|
7604
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7604
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_cjs.SettingsPage,
|
|
7819
7819
|
{
|
|
7820
7820
|
...page,
|
|
7821
7821
|
sections,
|
|
@@ -8094,7 +8094,7 @@ function ConnectedWorkspaceMembers({
|
|
|
8094
8094
|
canChange: !lock,
|
|
8095
8095
|
isPending: updateRoles.isPending,
|
|
8096
8096
|
onChange: (value) => void setRoles([row], value),
|
|
8097
|
-
temporaryHint: row.is_temporary ? "Temporary
|
|
8097
|
+
temporaryHint: row.is_temporary ? row.access_expires_at ? `Temporary access expires ${new Date(row.access_expires_at).toLocaleString()}.` : "Temporary access \u2014 expires with the session." : void 0
|
|
8098
8098
|
}
|
|
8099
8099
|
);
|
|
8100
8100
|
}
|
|
@@ -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(chunkSYTZ3UAU_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
|
+
chunkSYTZ3UAU_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: chunkSYTZ3UAU_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(chunkXGFNZTPO_cjs.SyncDialogBody, { children: [
|
|
8562
|
+
!lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncField, { label: "Target workspace", htmlFor: "sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8563
|
+
chunkXGFNZTPO_cjs.SyncSelect,
|
|
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(chunkXGFNZTPO_cjs.SyncField, { label: "Backfill window", htmlFor: "sync-backfill", children: [
|
|
8573
8573
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8574
|
-
|
|
8574
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncLinkRow, { children: [
|
|
8603
8603
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8604
|
-
|
|
8604
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncLinkButton, { onClick: toggleAllFolders, children: allSelected ? "Clear all" : "Select all" })
|
|
8620
8620
|
] }),
|
|
8621
|
-
children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8621
|
+
children: foldersLoading ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncOptions, { children: [
|
|
8646
8646
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8647
|
-
|
|
8647
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncFolderStatus, { depth, kind: "loading" }) : orderedChildren.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncDialogBody, { children: [
|
|
8912
|
+
!lockedWorkspaceExtId && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncField, { label: "Target workspace", htmlFor: "drive-sync-workspace", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8913
|
+
chunkXGFNZTPO_cjs.SyncSelect,
|
|
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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncLinkRow, { children: [
|
|
8928
8928
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8929
|
-
|
|
8929
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncLoading, { children: "Loading folders\u2026" }) : needsReconnect ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
8946
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.SyncNote, { children: "No folders found." }) : /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.SyncTreeFrame, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-0.5", "data-testid": "drive-folder-tree", children: orderedFolders.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
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(chunkXGFNZTPO_cjs.SyncOptions, { children: [
|
|
8975
8975
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8976
|
-
|
|
8976
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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 } = chunkYNSSIULM_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: chunkYNSSIULM_cjs.formatMoney(inv.amount, inv.currency),
|
|
9075
|
+
amountNote: inv.amount_ex_vat != null && inv.amount_ex_vat !== inv.amount ? `${chunkYNSSIULM_cjs.formatMoney(inv.amount_ex_vat, inv.currency)} ex VAT` : void 0,
|
|
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
|
+
chunkXGFNZTPO_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 } = chunkYNSSIULM_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: chunkYNSSIULM_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 = chunkYNSSIULM_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 ? `${chunkYNSSIULM_cjs.checkoutItemsLabel(aiBlocks, storageBlocks)} \xB7 ${chunkYNSSIULM_cjs.quoteTotalLine(quote)}` : null;
|
|
9187
9187
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9188
|
-
|
|
9188
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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 = chunkYNSSIULM_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 = chunkYNSSIULM_cjs.packPrice(prices.monthly, packs);
|
|
9243
|
+
const annual = chunkYNSSIULM_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: chunkYNSSIULM_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 ? chunkYNSSIULM_cjs.formatMoney(monthly.amount_ex_vat * 12, currency) : void 0,
|
|
9253
|
+
yearlyTotal: isAnnual ? chunkYNSSIULM_cjs.formatMoney(current.amount_ex_vat, currency) : void 0,
|
|
9254
9254
|
intervalLabel: isAnnual ? "/yr + VAT" : "/mo",
|
|
9255
|
-
monthly:
|
|
9255
|
+
monthly: chunkYNSSIULM_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: `${chunkYNSSIULM_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(chunkYNSSIULM_cjs.PRO_AI_GBP)} of AI usage / month`,
|
|
9262
|
+
`${chunkYNSSIULM_cjs.PRO_STORAGE_GB} GB storage`,
|
|
9263
9263
|
"Unlimited collaborators",
|
|
9264
|
-
...isAnnual ? [
|
|
9264
|
+
...isAnnual ? [chunkYNSSIULM_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(chunkYNSSIULM_cjs.FREE_AI_GBP)} of AI usage / month`,
|
|
9277
|
+
`${chunkYNSSIULM_cjs.FREE_STORAGE_MB.toLocaleString("en-US")} MB storage`,
|
|
9278
|
+
chunkYNSSIULM_cjs.FREE_COLLABORATORS === 0 ? "Just you" : `${chunkYNSSIULM_cjs.FREE_COLLABORATORS} collaborators`
|
|
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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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 = chunkYNSSIULM_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(chunkYNSSIULM_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(chunkYNSSIULM_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 >= chunkYNSSIULM_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 = chunkYNSSIULM_cjs.addonPrice(price, "ai_usage");
|
|
9409
|
+
const storage = chunkYNSSIULM_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 || chunkYNSSIULM_cjs.ADDON_BLOCK_AI_GBP)} of AI usage`,
|
|
9420
|
+
priceText: chunkYNSSIULM_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 || chunkYNSSIULM_cjs.STORAGE_BLOCK_GB} GB storage`,
|
|
9430
|
+
priceText: chunkYNSSIULM_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
|
+
chunkXGFNZTPO_cjs.ReferralRewardSummary,
|
|
9486
9486
|
{
|
|
9487
|
-
amountLabel:
|
|
9487
|
+
amountLabel: chunkYNSSIULM_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: chunkYNSSIULM_cjs.formatMoney(totalCents, currency),
|
|
9490
|
+
reward: chunkYNSSIULM_cjs.formatMoney(applied.bonus, currency),
|
|
9491
|
+
youPay: chunkYNSSIULM_cjs.formatMoney(applied.youPay, currency),
|
|
9492
|
+
rollover: applied.remaining > 0 ? chunkYNSSIULM_cjs.formatMoney(applied.remaining, currency) : void 0
|
|
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(chunkXGFNZTPO_cjs.ReferralRewardNote, { amountLabel: chunkYNSSIULM_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 ? chunkYNSSIULM_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 ? chunkYNSSIULM_cjs.quoteError(query.error) : {};
|
|
9563
|
+
const locationInvalid = code === chunkYNSSIULM_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: chunkYNSSIULM_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(chunkYNSSIULM_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(chunkXGFNZTPO_cjs.PlanNotice, { children: "Loading plans\u2026" });
|
|
9596
|
+
if (error) return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { tone: "error", children: "Plans didn't load. Try again." });
|
|
9597
|
+
if (!products || products.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { children: "No plans available." });
|
|
9598
|
+
const prices = chunkYNSSIULM_cjs.findProPrices(products);
|
|
9599
9599
|
const intervalPrice = isAnnual ? prices.annual : prices.monthly;
|
|
9600
|
-
const selectedPrice =
|
|
9600
|
+
const selectedPrice = chunkYNSSIULM_cjs.packPrice(intervalPrice);
|
|
9601
9601
|
if (!intervalPrice) return null;
|
|
9602
9602
|
const interval = isAnnual ? "year" : "month";
|
|
9603
|
-
const savingsPercent =
|
|
9603
|
+
const savingsPercent = chunkYNSSIULM_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 = chunkYNSSIULM_cjs.parseBudgetPounds(addonBudget);
|
|
9607
|
+
setCheckoutBudget(parsed == null || parsed === chunkYNSSIULM_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(chunkXGFNZTPO_cjs.PlanStack, { children: [
|
|
9613
9613
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9614
|
-
|
|
9614
|
+
chunkXGFNZTPO_cjs.PlanPickerHeader,
|
|
9615
9615
|
{
|
|
9616
9616
|
title: "Plan",
|
|
9617
9617
|
info: /* @__PURE__ */ jsxRuntime.jsx(PlanInfoPopover2, {}),
|
|
9618
9618
|
toggle: /* @__PURE__ */ jsxRuntime.jsx(
|
|
9619
|
-
|
|
9619
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PlanActionRow, { children: [
|
|
9669
9669
|
onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
|
|
9670
|
-
|
|
9670
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_cjs.PlanActionButton,
|
|
9682
9682
|
{
|
|
9683
9683
|
fill: true,
|
|
9684
9684
|
onClick: handleSubscribe,
|
|
9685
|
-
disabled: !selectedPrice ||
|
|
9685
|
+
disabled: !selectedPrice || chunkYNSSIULM_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 = chunkYNSSIULM_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 = chunkYNSSIULM_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 ?? chunkYNSSIULM_cjs.ADDON_BLOCK_AI_GBP)} of AI usage added` : `${blockStorageGb ?? chunkYNSSIULM_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 } = chunkYNSSIULM_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 ? chunkYNSSIULM_cjs.planPreviewLines(preview) : [{ id: "pay-today", text: isError ? chunkYNSSIULM_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 = chunkYNSSIULM_cjs.planNameForPacks(data?.addons?.packs ?? data?.packs);
|
|
9811
|
+
const charged = outcome.charged_pence > 0 ? ` \xB7 ${chunkYNSSIULM_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 = chunkYNSSIULM_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 = chunkYNSSIULM_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 ?? chunkYNSSIULM_cjs.PRO_PACKS, chunkYNSSIULM_cjs.PRO_PACKS);
|
|
9853
|
+
const isLegacyMultiPack = currentPacks > chunkYNSSIULM_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 > chunkYNSSIULM_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, chunkYNSSIULM_cjs.PRO_PACKS, 0] : [chunkYNSSIULM_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 ? chunkYNSSIULM_cjs.proTierName(project) : chunkYNSSIULM_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 ${chunkYNSSIULM_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(chunkYNSSIULM_cjs.FREE_AI_GBP)} of AI usage \xB7 ${chunkYNSSIULM_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(chunkYNSSIULM_cjs.PRO_AI_GBP * packs)} of AI usage \xB7 ${chunkYNSSIULM_cjs.PRO_STORAGE_GB * packs} GB`;
|
|
9926
|
+
const legacy = packs > chunkYNSSIULM_cjs.PRO_PACKS;
|
|
9927
|
+
const exVat = legacy ? project.amount_ex_vat : chunkYNSSIULM_cjs.packPrice(intervalPrice)?.amount_ex_vat;
|
|
9928
9928
|
return {
|
|
9929
|
-
total: exVat != null ?
|
|
9929
|
+
total: exVat != null ? chunkYNSSIULM_cjs.plusVat(exVat, currency) : void 0,
|
|
9930
9930
|
summary: allowance
|
|
9931
9931
|
};
|
|
9932
9932
|
};
|
|
9933
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9933
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_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 > chunkYNSSIULM_cjs.PRO_PACKS ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", "data-testid": "change-plan-interval-fixed", children: currentInterval === "year" ? "Annual" : "Monthly" }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
9937
|
+
chunkXGFNZTPO_cjs.PricingToggle,
|
|
9938
9938
|
{
|
|
9939
9939
|
isAnnual: targetInterval === "year",
|
|
9940
9940
|
onToggle: () => setChosenInterval(targetInterval === "year" ? "month" : "year"),
|
|
9941
|
-
savingsPercent:
|
|
9941
|
+
savingsPercent: chunkYNSSIULM_cjs.calcSavingsPercent(prices.monthly, prices.annual)
|
|
9942
9942
|
}
|
|
9943
9943
|
)
|
|
9944
9944
|
] }),
|
|
9945
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
9945
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanStack, { gap: 2, children: packOptions.map((packs) => {
|
|
9946
9946
|
const { total, summary } = optionFor(packs);
|
|
9947
9947
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
9948
|
-
|
|
9948
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PlanNotice, { className: "text-xs", testId: "change-plan-legacy-note", children: [
|
|
9966
|
+
chunkYNSSIULM_cjs.proTierName(project),
|
|
9967
9967
|
" is no longer sold"
|
|
9968
9968
|
] }),
|
|
9969
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9969
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.MoreInfo, { title: "Legacy plan", testId: "change-plan-legacy-more-info", children: [
|
|
9970
9970
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
|
|
9971
|
-
|
|
9971
|
+
chunkYNSSIULM_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
|
+
chunkXGFNZTPO_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 && chunkYNSSIULM_cjs.isProProject(project);
|
|
10004
10004
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10005
|
-
|
|
10005
|
+
chunkXGFNZTPO_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 = chunkYNSSIULM_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 } = chunkYNSSIULM_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PlanBadge, { ...chunkYNSSIULM_cjs.planBadgeView(p) }) }) : void 0,
|
|
10077
|
+
usage: p.quotas ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.QuotaMeter, { items: chunkYNSSIULM_cjs.getQuotaItems(p.quotas), size: "lg" }) : void 0,
|
|
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(chunkXGFNZTPO_cjs.ProjectList, { isLoading, isEmpty: ownedProjects.length === 0, isFilteredOut: false, children: ownedProjects.map(renderRow) }),
|
|
10112
10112
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10113
|
-
|
|
10113
|
+
chunkXGFNZTPO_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 = chunkYNSSIULM_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(chunkXGFNZTPO_cjs.SharedProjectsSection, { footnote: "Your daily AI usage allowance in projects other people run \u2014 their plan and billing are theirs.", children: shared.map((p) => {
|
|
10153
10153
|
const cap = p.daily_cap_per_user;
|
|
10154
10154
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10155
|
-
|
|
10155
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_cjs.SubscriptionStatusView,
|
|
10213
10213
|
{
|
|
10214
|
-
resetDate:
|
|
10214
|
+
resetDate: chunkYNSSIULM_cjs.formatResetDate(addons?.ai_usage_reset_at ?? current_period_end),
|
|
10215
10215
|
isCanceling: subscription === "canceled" || cancel_at_period_end === true,
|
|
10216
|
-
meters:
|
|
10216
|
+
meters: chunkYNSSIULM_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 ?? chunkYNSSIULM_cjs.ADDON_BLOCK_AI_GBP)} of AI usage` : `Add ${blockStorageGb ?? chunkYNSSIULM_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 = chunkYNSSIULM_cjs.addonCharge(kind, addons, isAnnual, addons.period_end ?? project.current_period_end);
|
|
10302
|
+
const nextCharge = chunkYNSSIULM_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end);
|
|
10303
|
+
const now = quote.data ? chunkYNSSIULM_cjs.quoteParts(quote.data.now) : null;
|
|
10304
|
+
const renewal = quote.data ? chunkYNSSIULM_cjs.quoteParts(quote.data.renewal) : null;
|
|
10305
|
+
const today = now ? { total: chunkYNSSIULM_cjs.money2(now.total), detail: chunkYNSSIULM_cjs.taxDetail(now) } : { total: price.now, detail: `incl. VAT (${price.nowExVat} + ${price.nowVat} VAT)` };
|
|
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(chunkXGFNZTPO_cjs.MoreInfo, { title: "Adding a top-up", testId: "add-addon-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
10345
|
+
chunkXGFNZTPO_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: `${chunkYNSSIULM_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 ? chunkYNSSIULM_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 } = chunkYNSSIULM_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 = chunkYNSSIULM_cjs.nextRemovedBlockSize(kind, addons);
|
|
10417
|
+
const what = chunkYNSSIULM_cjs.stepLabel(kind, size);
|
|
10418
|
+
const from = chunkYNSSIULM_cjs.formatPeriodEnd(addons.period_end ?? project.current_period_end) ?? "your next renewal";
|
|
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: chunkYNSSIULM_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(chunkXGFNZTPO_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) => chunkYNSSIULM_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 || chunkYNSSIULM_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 = chunkYNSSIULM_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: chunkYNSSIULM_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 = chunkYNSSIULM_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 } = chunkYNSSIULM_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 = chunkYNSSIULM_cjs.splitBlocks(kind, blocks, addons).legacy > 0;
|
|
10627
|
+
const room = chunkYNSSIULM_cjs.autoRoom(kind, addons);
|
|
10628
|
+
const capZero = chunkYNSSIULM_cjs.isAddonBudgetZero(addons);
|
|
10629
|
+
const resets = isAi ? formatShortDate(chunkYNSSIULM_cjs.aiUsageResetTimestamp(project)) : null;
|
|
10630
|
+
const removeSize = chunkYNSSIULM_cjs.nextRemovedBlockSize(kind, addons);
|
|
10631
10631
|
const undo = () => update.mutate(
|
|
10632
10632
|
{
|
|
10633
10633
|
projectExtId: project.external_id,
|
|
10634
|
-
body:
|
|
10634
|
+
body: chunkYNSSIULM_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 ? ` (${chunkYNSSIULM_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: chunkYNSSIULM_cjs.addStepCaption(kind, addons),
|
|
10681
10681
|
onClick: onAdd,
|
|
10682
|
-
ariaLabel: `Add ${
|
|
10682
|
+
ariaLabel: `Add ${chunkYNSSIULM_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 ${chunkYNSSIULM_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: chunkYNSSIULM_cjs.addonSettingsBody(addons, { spend_cap_pence: nextCap })
|
|
10733
10733
|
},
|
|
10734
10734
|
{
|
|
10735
|
-
onSuccess: () => shell.notify.success(
|
|
10735
|
+
onSuccess: () => shell.notify.success(chunkYNSSIULM_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: chunkYNSSIULM_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: chunkYNSSIULM_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(chunkYNSSIULM_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(chunkYNSSIULM_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(chunkXGFNZTPO_cjs.MoreInfo, { title: "Usage and top-ups", testId: "usage-more-info", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
10814
|
+
chunkXGFNZTPO_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: chunkYNSSIULM_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: `${chunkYNSSIULM_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) => chunkYNSSIULM_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: chunkYNSSIULM_cjs.isProProject(project) });
|
|
10951
|
+
if (!chunkYNSSIULM_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 ?? chunkYNSSIULM_cjs.PRO_PACKS) > chunkYNSSIULM_cjs.PRO_PACKS) return null;
|
|
10957
|
+
const prices = chunkYNSSIULM_cjs.findProPrices(products);
|
|
10958
|
+
const pp = chunkYNSSIULM_cjs.packPrice(isAnnual ? prices.annual : prices.monthly);
|
|
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 = chunkYNSSIULM_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(chunkYNSSIULM_cjs.aiUsageResetTimestamp(project));
|
|
10975
|
+
const periodEnd = chunkYNSSIULM_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 ? chunkYNSSIULM_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 ${chunkYNSSIULM_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 ? chunkYNSSIULM_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
|
+
chunkYNSSIULM_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(chunkXGFNZTPO_cjs.PlanNotice, { tone: "error", testId: "plan-billing-error", children: addons.billing_error }),
|
|
11118
|
+
confirmUrl ? /* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanNotice, { testId: "plan-payment-state", children: [
|
|
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(chunkXGFNZTPO_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 && chunkYNSSIULM_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_cjs.UsageSection,
|
|
11374
11374
|
{
|
|
11375
|
-
footer: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11375
|
+
footer: /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.UsageLegend, { series }),
|
|
11376
11376
|
title: `Daily AI usage${breakdown === "model" ? ` by ${BREAKDOWN_LABELS[breakdown]}` : ""}`,
|
|
11377
11377
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11378
|
-
|
|
11378
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_cjs.UsageSection,
|
|
11390
11390
|
{
|
|
11391
11391
|
title: "Breakdown",
|
|
11392
11392
|
gap: "md",
|
|
11393
11393
|
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11394
|
-
|
|
11394
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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 } = chunkYNSSIULM_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 = chunkYNSSIULM_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PlanBadge, { ...chunkYNSSIULM_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(chunkXGFNZTPO_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(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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 = chunkYNSSIULM_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(chunkYNSSIULM_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 } = chunkYNSSIULM_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(chunkYNSSIULM_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 = chunkYNSSIULM_cjs.findProPrices(products);
|
|
11578
11578
|
const intervalPrice = isAnnual ? prices.annual : prices.monthly;
|
|
11579
|
-
const selectedPrice =
|
|
11579
|
+
const selectedPrice = chunkYNSSIULM_cjs.packPrice(intervalPrice);
|
|
11580
11580
|
const currency = intervalPrice?.currency ?? "gbp";
|
|
11581
|
-
const savingsPercent =
|
|
11581
|
+
const savingsPercent = chunkYNSSIULM_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 && chunkYNSSIULM_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: chunkYNSSIULM_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 = chunkYNSSIULM_cjs.parseBudgetPounds(addonBudget);
|
|
11616
|
+
const budgetToSend = parsed == null || parsed === chunkYNSSIULM_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: chunkYNSSIULM_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(chunkXGFNZTPO_cjs.PlanStack, { gap: 5, children: [
|
|
11664
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PlanNotice, { children: "Loading plans\u2026" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11681
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.PlanPickerCard, { children: [
|
|
11682
11682
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11683
|
-
|
|
11683
|
+
chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PlanNotice, { children: "Pro isn't available right now." }))
|
|
11747
11747
|
] })),
|
|
11748
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11749
|
-
isSlow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
11748
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanActionButton, { onClick: submit, disabled: !canSubmit, children: isCreating ? "Creating\u2026" : isPro ? "Continue to payment" : "Create project" }),
|
|
11749
|
+
isSlow && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_cjs.PlanNotice, { className: "text-xs", testId: "new-project-still-working", children: "Still working. We'll update here." })
|
|
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 = chunkYNSSIULM_cjs.useSelfExtId();
|
|
11778
11778
|
const refreshedRef = react.useRef(/* @__PURE__ */ new Set());
|
|
11779
11779
|
react.useEffect(() => {
|
|
11780
11780
|
if (!projects || !currentUserExtId) return;
|
|
@@ -11820,13 +11820,13 @@ function WorkspaceCardsView({
|
|
|
11820
11820
|
createDisabledReason,
|
|
11821
11821
|
workspaceState
|
|
11822
11822
|
}) {
|
|
11823
|
-
const { stripeEnabled } =
|
|
11823
|
+
const { stripeEnabled } = chunkYNSSIULM_cjs.useBillingSupport();
|
|
11824
11824
|
const workspaceLabel = ui.getEntityLabel("WORKSPACE");
|
|
11825
11825
|
const projectLabel = ui.getEntityLabel("PROJECT").toLowerCase();
|
|
11826
11826
|
const { groups, projects, selfId } = list;
|
|
11827
11827
|
if (groups.length === 0) {
|
|
11828
11828
|
return /* @__PURE__ */ jsxRuntime.jsx(chunk3CUORKDL_cjs.WorkspaceList, { testId: "workspace-cards-list", className: "gap-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
11829
|
-
|
|
11829
|
+
chunkOHCYJFV2_cjs.CreateTile,
|
|
11830
11830
|
{
|
|
11831
11831
|
label: `New ${workspaceLabel.toLowerCase()}`,
|
|
11832
11832
|
ariaLabel: `Create ${workspaceLabel}`,
|
|
@@ -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 } = chunkYNSSIULM_cjs.projectGroupBilling(project, {
|
|
11843
11843
|
isOwned: group.isOwned,
|
|
11844
11844
|
stripeEnabled
|
|
11845
11845
|
});
|
|
@@ -11871,7 +11871,7 @@ function WorkspaceCardsView({
|
|
|
11871
11871
|
onToggle: () => list.toggleGroup(group.key),
|
|
11872
11872
|
children: [
|
|
11873
11873
|
group.isOwned && group.projectExtId && /* @__PURE__ */ jsxRuntime.jsx(
|
|
11874
|
-
|
|
11874
|
+
chunkOHCYJFV2_cjs.CreateTile,
|
|
11875
11875
|
{
|
|
11876
11876
|
label: `New ${workspaceLabel.toLowerCase()}`,
|
|
11877
11877
|
ariaLabel: `Create ${workspaceLabel}`,
|
|
@@ -11998,7 +11998,7 @@ function useConnectedWorkspaceList({
|
|
|
11998
11998
|
[selfId, pinned]
|
|
11999
11999
|
);
|
|
12000
12000
|
const filtered = react.useMemo(
|
|
12001
|
-
() =>
|
|
12001
|
+
() => chunkXGFNZTPO_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-VEW6SMZ6.cjs').then((m) => ({ default: m.WorkspaceTableView }))
|
|
12067
12067
|
);
|
|
12068
12068
|
var WORKSPACES_TAB_ID = "workspaces";
|
|
12069
12069
|
var defaultRenderMember2 = (user, size) => {
|
|
@@ -12115,10 +12115,10 @@ 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(chunkSYTZ3UAU_cjs.LoadingIndicator, { message: "Loading workspaces..." });
|
|
12119
12119
|
if (list.error) {
|
|
12120
12120
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12121
|
-
|
|
12121
|
+
chunkOHCYJFV2_cjs.HomeLoadError,
|
|
12122
12122
|
{
|
|
12123
12123
|
title: "Unable to load workspaces",
|
|
12124
12124
|
body: "Failed to connect to the server. Please check your connection and try again."
|
|
@@ -12138,7 +12138,7 @@ function ConnectedWorkspaceList({
|
|
|
12138
12138
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "mr-0.5 size-4" }),
|
|
12139
12139
|
"New"
|
|
12140
12140
|
] });
|
|
12141
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12141
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkOHCYJFV2_cjs.HomeFrame, { children: [
|
|
12142
12142
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12143
12143
|
chunkMEMWZ72Y_cjs.TabHeader,
|
|
12144
12144
|
{
|
|
@@ -12174,9 +12174,9 @@ function ConnectedWorkspaceList({
|
|
|
12174
12174
|
),
|
|
12175
12175
|
showList && // Above whichever view shows: both draw the same filtered groups.
|
|
12176
12176
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto w-full max-w-6xl px-4 pb-3 sm:px-8", children: /* @__PURE__ */ jsxRuntime.jsx(WorkspaceFilterMenu, { list }) }),
|
|
12177
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12177
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkOHCYJFV2_cjs.HomeMain, { children: !showList ? children : shownView === "cards" ? (
|
|
12178
12178
|
// Full-width scroller (its scrollbar rides the window edge) around a centred column.
|
|
12179
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12179
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkOHCYJFV2_cjs.HomeCenteredScroll, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
12180
12180
|
WorkspaceCardsView,
|
|
12181
12181
|
{
|
|
12182
12182
|
list,
|
|
@@ -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(chunkSYTZ3UAU_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 } = chunkYNSSIULM_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(chunkXGFNZTPO_cjs.PanelFrame, { className, testId: "projects-panel", children: [
|
|
12265
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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
|
+
chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PanelFrameBody, { children: activeProjectId ? /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PanelScroll, { variant: "padded", children: [
|
|
12294
12294
|
/* @__PURE__ */ jsxRuntime.jsx(ProjectsTable, {}),
|
|
12295
|
-
stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(
|
|
12295
|
+
stripeEnabled && paidProject && /* @__PURE__ */ jsxRuntime.jsx(chunkXGFNZTPO_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 ? [chunkAODZXDEE_cjs.STATUS_LABELS[chunkAODZXDEE_cjs.asTaskStatus(c.status)], c.due_at ? `due ${shortDate(c.due_at)}` : null].filter(Boolean).join(" \xB7 ") : `${c.message_count} ${c.message_count === 1 ? "message" : "messages"}`,
|
|
13039
13039
|
time: timeAndDate(c.updated_at)
|
|
13040
13040
|
}));
|
|
13041
13041
|
}
|
|
@@ -13101,19 +13101,19 @@ function ConnectedWorkspaceDashboard({
|
|
|
13101
13101
|
const { upcoming: upcoming2, recent: recent2 } = splitFacts(facts);
|
|
13102
13102
|
const toRow = (row) => ({
|
|
13103
13103
|
...row,
|
|
13104
|
-
leading: /* @__PURE__ */ jsxRuntime.jsx(
|
|
13104
|
+
leading: /* @__PURE__ */ jsxRuntime.jsx(chunkOHCYJFV2_cjs.FactMark, {}),
|
|
13105
13105
|
// The item, not the list: the Facts page scrolls to this fact.
|
|
13106
13106
|
onSelect: () => actions.openFact(row.id)
|
|
13107
13107
|
});
|
|
13108
13108
|
return { upcoming: upcoming2.map(toRow), recent: recent2.map(toRow) };
|
|
13109
13109
|
}, [facts, actions]);
|
|
13110
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13111
|
-
start && /* @__PURE__ */ jsxRuntime.jsx(
|
|
13112
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
13113
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13114
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
13110
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkOHCYJFV2_cjs.DashboardRoot, { testId, children: [
|
|
13111
|
+
start && /* @__PURE__ */ jsxRuntime.jsx(chunkOHCYJFV2_cjs.DashboardBand, { kind: "start", children: start }),
|
|
13112
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkOHCYJFV2_cjs.DashboardBand, { kind: "recent", children: [
|
|
13113
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkTNESYDBR_cjs.SectionLabel, { testId: `${testId}-recent-caption`, children: "Recent" }),
|
|
13114
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkOHCYJFV2_cjs.DashboardColumns, { children: [
|
|
13115
13115
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13116
|
-
|
|
13116
|
+
chunkOHCYJFV2_cjs.RecentList,
|
|
13117
13117
|
{
|
|
13118
13118
|
testId: `${testId}-docs`,
|
|
13119
13119
|
icon: lucideReact.FileText,
|
|
@@ -13132,7 +13132,7 @@ function ConnectedWorkspaceDashboard({
|
|
|
13132
13132
|
}
|
|
13133
13133
|
),
|
|
13134
13134
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13135
|
-
|
|
13135
|
+
chunkOHCYJFV2_cjs.RecentList,
|
|
13136
13136
|
{
|
|
13137
13137
|
testId: `${testId}-chats`,
|
|
13138
13138
|
icon: lucideReact.MessagesSquare,
|
|
@@ -13141,7 +13141,7 @@ function ConnectedWorkspaceDashboard({
|
|
|
13141
13141
|
onOpen: () => actions.openSection("threads"),
|
|
13142
13142
|
action: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
13143
13143
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13144
|
-
|
|
13144
|
+
chunkOHCYJFV2_cjs.DashboardAction,
|
|
13145
13145
|
{
|
|
13146
13146
|
emphasis: "primary",
|
|
13147
13147
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" }),
|
|
@@ -13151,7 +13151,7 @@ function ConnectedWorkspaceDashboard({
|
|
|
13151
13151
|
}
|
|
13152
13152
|
),
|
|
13153
13153
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13154
|
-
|
|
13154
|
+
chunkOHCYJFV2_cjs.DashboardAction,
|
|
13155
13155
|
{
|
|
13156
13156
|
emphasis: "quiet",
|
|
13157
13157
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" }),
|
|
@@ -13173,9 +13173,9 @@ function ConnectedWorkspaceDashboard({
|
|
|
13173
13173
|
)
|
|
13174
13174
|
] })
|
|
13175
13175
|
] }),
|
|
13176
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
13176
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkOHCYJFV2_cjs.DashboardColumns, { children: [
|
|
13177
13177
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13178
|
-
|
|
13178
|
+
chunkOHCYJFV2_cjs.FactsStrip,
|
|
13179
13179
|
{
|
|
13180
13180
|
testId: `${testId}-facts`,
|
|
13181
13181
|
icon: lucideReact.Milestone,
|
|
@@ -13183,7 +13183,7 @@ function ConnectedWorkspaceDashboard({
|
|
|
13183
13183
|
count: facts.length,
|
|
13184
13184
|
onOpen: () => actions.openSection("facts"),
|
|
13185
13185
|
action: /* @__PURE__ */ jsxRuntime.jsx(
|
|
13186
|
-
|
|
13186
|
+
chunkOHCYJFV2_cjs.DashboardAction,
|
|
13187
13187
|
{
|
|
13188
13188
|
emphasis: "quiet",
|
|
13189
13189
|
icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plus, { className: "size-4" }),
|
|
@@ -13961,7 +13961,7 @@ var MailBodyEditor = react.lazy(
|
|
|
13961
13961
|
}))
|
|
13962
13962
|
);
|
|
13963
13963
|
var NativeDocxEditor = react.lazy(
|
|
13964
|
-
() => import('../NativeDocxEditor-
|
|
13964
|
+
() => import('../NativeDocxEditor-T2PJIZMU.cjs').then((m) => ({ default: m.NativeDocxEditor }))
|
|
13965
13965
|
);
|
|
13966
13966
|
var NO_WORD = {
|
|
13967
13967
|
adapter: {
|
|
@@ -15136,7 +15136,7 @@ function ConnectedMailbox({
|
|
|
15136
15136
|
onTabChange: () => {
|
|
15137
15137
|
},
|
|
15138
15138
|
compactBreakpoint: 360,
|
|
15139
|
-
firstTabContent: account ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
15139
|
+
firstTabContent: account ? /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FilesFilterBar, { children: [
|
|
15140
15140
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
15141
15141
|
chunk2EI7NCUA_cjs.FilterInput,
|
|
15142
15142
|
{
|
|
@@ -15171,7 +15171,7 @@ function ConnectedMailbox({
|
|
|
15171
15171
|
}
|
|
15172
15172
|
),
|
|
15173
15173
|
folderList && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
15174
|
-
|
|
15174
|
+
chunkNUAC5GTQ_cjs.FolderFilterButton,
|
|
15175
15175
|
{
|
|
15176
15176
|
label: folderList.find((f) => f.id === folderId)?.name ?? "Folders",
|
|
15177
15177
|
isActive: false,
|
|
@@ -15179,7 +15179,7 @@ function ConnectedMailbox({
|
|
|
15179
15179
|
onOpenChange: setFolderMenuOpen,
|
|
15180
15180
|
testId: "mail-folder-button",
|
|
15181
15181
|
children: folderList.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
15182
|
-
|
|
15182
|
+
chunkNUAC5GTQ_cjs.FolderPickerRow,
|
|
15183
15183
|
{
|
|
15184
15184
|
label: item.name,
|
|
15185
15185
|
count: item.unread > 0 ? item.unread : void 0,
|
|
@@ -18855,7 +18855,7 @@ var useFilesPrefs = zustand.create()(
|
|
|
18855
18855
|
viewMode: "explorer",
|
|
18856
18856
|
setViewMode: (viewMode) => set({ viewMode }),
|
|
18857
18857
|
// New users start at the compact minimum (more rows at once).
|
|
18858
|
-
rowHeight:
|
|
18858
|
+
rowHeight: chunkNUAC5GTQ_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
|
|
18859
18859
|
setRowHeight: (rowHeight) => set({ rowHeight })
|
|
18860
18860
|
}),
|
|
18861
18861
|
{
|
|
@@ -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 } = chunkPTSTVYQD_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 {
|
|
@@ -18986,8 +18986,8 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
18986
18986
|
const { folders, files } = react.useMemo(() => {
|
|
18987
18987
|
const result = isSearching ? {
|
|
18988
18988
|
folders: [],
|
|
18989
|
-
files:
|
|
18990
|
-
} :
|
|
18989
|
+
files: chunkNUAC5GTQ_cjs.searchExplorerDocuments(documents, search, sort)
|
|
18990
|
+
} : chunkNUAC5GTQ_cjs.buildExplorerEntries(documents, currentPath, sort, [...pendingFolders]);
|
|
18991
18991
|
if (sortReversed) result.files = [...result.files].reverse();
|
|
18992
18992
|
return result;
|
|
18993
18993
|
}, [documents, currentPath, sort, isSearching, search, sortReversed, pendingFolders]);
|
|
@@ -18998,7 +18998,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
18998
18998
|
const orderedFileIds = react.useMemo(() => files.map((d) => d.external_id), [files]);
|
|
18999
18999
|
const folderDocs = react.useMemo(() => {
|
|
19000
19000
|
const map = /* @__PURE__ */ new Map();
|
|
19001
|
-
for (const f of folders) map.set(f.path.join("/"),
|
|
19001
|
+
for (const f of folders) map.set(f.path.join("/"), chunkNUAC5GTQ_cjs.collectFolderDocs(documents, f.path));
|
|
19002
19002
|
return map;
|
|
19003
19003
|
}, [folders, documents]);
|
|
19004
19004
|
const folderSelection = react.useMemo(() => {
|
|
@@ -19146,7 +19146,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19146
19146
|
let name = base;
|
|
19147
19147
|
let i = 2;
|
|
19148
19148
|
while (siblings.has(name.toLowerCase())) name = `${base} ${i++}`;
|
|
19149
|
-
const path =
|
|
19149
|
+
const path = chunkNUAC5GTQ_cjs.joinFolderPath([...currentPath, name]);
|
|
19150
19150
|
if (!path) return;
|
|
19151
19151
|
addPendingFolder(wsId, path);
|
|
19152
19152
|
setEditingFolderPath(path);
|
|
@@ -19182,10 +19182,10 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19182
19182
|
notify14(`A folder named "${name}" already exists here.`, "error");
|
|
19183
19183
|
return;
|
|
19184
19184
|
}
|
|
19185
|
-
const oldPath =
|
|
19185
|
+
const oldPath = chunkNUAC5GTQ_cjs.joinFolderPath(folder.path);
|
|
19186
19186
|
const newPrefix = [...folder.path.slice(0, -1), name];
|
|
19187
|
-
const newPath =
|
|
19188
|
-
const docs =
|
|
19187
|
+
const newPath = chunkNUAC5GTQ_cjs.joinFolderPath(newPrefix);
|
|
19188
|
+
const docs = chunkNUAC5GTQ_cjs.collectFolderDocs(documents, folder.path);
|
|
19189
19189
|
try {
|
|
19190
19190
|
if (await renameFolder(docs, folder.path, newPrefix) > 0) {
|
|
19191
19191
|
notify14(`Renamed folder to "${name}"`, "success");
|
|
@@ -19244,7 +19244,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19244
19244
|
const handleToggleFolder = react.useCallback(
|
|
19245
19245
|
(folder, e) => {
|
|
19246
19246
|
e.stopPropagation();
|
|
19247
|
-
const ids =
|
|
19247
|
+
const ids = chunkNUAC5GTQ_cjs.collectFolderDocs(documents, folder.path).map((d) => d.external_id);
|
|
19248
19248
|
if (ids.length === 0) return;
|
|
19249
19249
|
if (ids.every((id) => selectedSet.has(id))) {
|
|
19250
19250
|
const remove = new Set(ids);
|
|
@@ -19305,9 +19305,9 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19305
19305
|
);
|
|
19306
19306
|
const handleDelete = react.useCallback(
|
|
19307
19307
|
async (doc) => {
|
|
19308
|
-
const name =
|
|
19308
|
+
const name = chunkNUAC5GTQ_cjs.getExplorerDisplayName(doc);
|
|
19309
19309
|
const confirmed = await confirm({
|
|
19310
|
-
message: `Delete "${name}"? ${
|
|
19310
|
+
message: `Delete "${name}"? ${chunkNUAC5GTQ_cjs.RECENTLY_DELETED_HINT}`,
|
|
19311
19311
|
title: "Delete file"
|
|
19312
19312
|
});
|
|
19313
19313
|
if (!confirmed) return;
|
|
@@ -19327,7 +19327,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19327
19327
|
);
|
|
19328
19328
|
const handleFolderDownload = react.useCallback(
|
|
19329
19329
|
(folder) => {
|
|
19330
|
-
const docs =
|
|
19330
|
+
const docs = chunkNUAC5GTQ_cjs.collectFolderDocs(documents, folder.path);
|
|
19331
19331
|
if (docs.length > 0) void downloadDocuments(docs);
|
|
19332
19332
|
},
|
|
19333
19333
|
[documents, downloadDocuments]
|
|
@@ -19336,7 +19336,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19336
19336
|
if (onFolderMove) return onFolderMove;
|
|
19337
19337
|
if (!onMoveSelected) return void 0;
|
|
19338
19338
|
return (folder) => {
|
|
19339
|
-
const ids =
|
|
19339
|
+
const ids = chunkNUAC5GTQ_cjs.collectFolderDocs(documents, folder.path).map((d) => d.external_id);
|
|
19340
19340
|
if (ids.length === 0) return;
|
|
19341
19341
|
onSelectionChange(ids);
|
|
19342
19342
|
onMoveSelected();
|
|
@@ -19344,14 +19344,14 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19344
19344
|
}, [documents, onFolderMove, onMoveSelected, onSelectionChange]);
|
|
19345
19345
|
const handleFolderDelete = react.useCallback(
|
|
19346
19346
|
async (folder) => {
|
|
19347
|
-
const docs =
|
|
19347
|
+
const docs = chunkNUAC5GTQ_cjs.collectFolderDocs(documents, folder.path);
|
|
19348
19348
|
if (docs.length === 0) {
|
|
19349
|
-
const path =
|
|
19349
|
+
const path = chunkNUAC5GTQ_cjs.joinFolderPath(folder.path);
|
|
19350
19350
|
if (wsId && path) removePendingFolder(wsId, path);
|
|
19351
19351
|
return;
|
|
19352
19352
|
}
|
|
19353
19353
|
const confirmed = await confirm({
|
|
19354
|
-
message: `Delete folder "${folder.name}" and its ${docs.length} item${docs.length === 1 ? "" : "s"}? ${
|
|
19354
|
+
message: `Delete folder "${folder.name}" and its ${docs.length} item${docs.length === 1 ? "" : "s"}? ${chunkNUAC5GTQ_cjs.RECENTLY_DELETED_HINT_PLURAL}`,
|
|
19355
19355
|
title: "Delete folder"
|
|
19356
19356
|
});
|
|
19357
19357
|
if (!confirmed) return;
|
|
@@ -19368,8 +19368,8 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19368
19368
|
[confirm, documents, deleteDocuments, onSelectionChange, removePendingFolder, wsId, notify14]
|
|
19369
19369
|
);
|
|
19370
19370
|
const canDeleteFolder = react.useCallback(
|
|
19371
|
-
(folder) => canUpload &&
|
|
19372
|
-
(doc) =>
|
|
19371
|
+
(folder) => canUpload && chunkNUAC5GTQ_cjs.collectFolderDocs(documents, folder.path).every(
|
|
19372
|
+
(doc) => chunkNUAC5GTQ_cjs.canDeleteDocument(doc, userId, role)
|
|
19373
19373
|
),
|
|
19374
19374
|
[canUpload, documents, userId, role]
|
|
19375
19375
|
);
|
|
@@ -19428,7 +19428,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19428
19428
|
setActiveDragId(null);
|
|
19429
19429
|
const data = event.over?.data.current;
|
|
19430
19430
|
if (data?.type === "folder" && data.path) {
|
|
19431
|
-
const targetFolder =
|
|
19431
|
+
const targetFolder = chunkNUAC5GTQ_cjs.joinFolderPath(data.path);
|
|
19432
19432
|
const moving = dragIdsRef.current.filter((id) => {
|
|
19433
19433
|
const doc = documents.find((d) => d.external_id === id);
|
|
19434
19434
|
return doc && (doc.folder ?? null) !== targetFolder;
|
|
@@ -19468,7 +19468,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19468
19468
|
const dropped = Array.from(e.dataTransfer.files ?? []);
|
|
19469
19469
|
if (dropped.length > 0) {
|
|
19470
19470
|
e.preventDefault();
|
|
19471
|
-
onUploadFiles(dropped,
|
|
19471
|
+
onUploadFiles(dropped, chunkNUAC5GTQ_cjs.joinFolderPath(currentPath));
|
|
19472
19472
|
}
|
|
19473
19473
|
},
|
|
19474
19474
|
[canUpload, currentPath, onUploadFiles]
|
|
@@ -19485,9 +19485,9 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19485
19485
|
onDragEnd: handleDragEnd,
|
|
19486
19486
|
onDragCancel: () => setActiveDragId(null),
|
|
19487
19487
|
children: [
|
|
19488
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19488
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.ExplorerFrame, { "data-testid": "documents-explorer", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.ExplorerStage, { children: [
|
|
19489
19489
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19490
|
-
|
|
19490
|
+
chunkNUAC5GTQ_cjs.ExplorerScroller,
|
|
19491
19491
|
{
|
|
19492
19492
|
ref: scrollRef,
|
|
19493
19493
|
onClick: handleBackgroundClick,
|
|
@@ -19497,15 +19497,15 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19497
19497
|
onDragLeave: handleNativeDragLeave,
|
|
19498
19498
|
onDrop: handleNativeDrop,
|
|
19499
19499
|
"data-testid": "explorer-scroll",
|
|
19500
|
-
children: isLoading && documents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19501
|
-
|
|
19500
|
+
children: isLoading && documents.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.ExplorerLoadingTiles, {}) : entries.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19501
|
+
chunkNUAC5GTQ_cjs.ExplorerEmpty,
|
|
19502
19502
|
{
|
|
19503
19503
|
title: isSearching ? `No files match "${search.trim()}"` : "This folder is empty",
|
|
19504
19504
|
description: isSearching ? "Try a different search." : canUpload ? "Drop files here or use Upload to add documents." : "No documents here yet."
|
|
19505
19505
|
}
|
|
19506
19506
|
) : containerWidth === 0 ? (
|
|
19507
19507
|
// Not measured yet: rendering now would flash one stretched column.
|
|
19508
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19508
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.ExplorerLoadingTiles, {})
|
|
19509
19509
|
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
19510
19510
|
"div",
|
|
19511
19511
|
{
|
|
@@ -19566,7 +19566,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19566
19566
|
dragging: activeDragId === doc.external_id,
|
|
19567
19567
|
dndActive: activeDragId !== null,
|
|
19568
19568
|
renaming: renamingId === doc.external_id,
|
|
19569
|
-
canDelete:
|
|
19569
|
+
canDelete: chunkNUAC5GTQ_cjs.canDeleteDocument(doc, userId, role),
|
|
19570
19570
|
thumbnailUrl: thumbnailsById.get(doc.external_id),
|
|
19571
19571
|
modifiedBy: userById.get(
|
|
19572
19572
|
doc.updated_by_ext_id ?? doc.created_by_ext_id
|
|
@@ -19595,9 +19595,9 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19595
19595
|
)
|
|
19596
19596
|
}
|
|
19597
19597
|
),
|
|
19598
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19598
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.ExplorerMarquee, { ref: marqueeOverlayRef, "data-testid": "explorer-marquee" }),
|
|
19599
19599
|
isFileDragOver && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19600
|
-
|
|
19600
|
+
chunkNUAC5GTQ_cjs.ExplorerDropOverlay,
|
|
19601
19601
|
{
|
|
19602
19602
|
label: `Drop to upload${currentPath.length > 0 ? ` to "${currentPath[currentPath.length - 1]}"` : ""}`
|
|
19603
19603
|
}
|
|
@@ -19611,7 +19611,7 @@ var ConnectedFilesExplorer = react.forwardRef(function ConnectedFilesExplorer2({
|
|
|
19611
19611
|
function DragPreview({ doc, count: count2 }) {
|
|
19612
19612
|
const Icon = ui.getFileTypeIcon(doc.file_name, { mime: doc.file_type });
|
|
19613
19613
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
19614
|
-
|
|
19614
|
+
chunkNUAC5GTQ_cjs.ExplorerDragPreview,
|
|
19615
19615
|
{
|
|
19616
19616
|
icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { size: 20 }),
|
|
19617
19617
|
title: ui.getDocumentTitle(doc, doc.file_name ?? "Untitled"),
|
|
@@ -19697,7 +19697,7 @@ function ConnectedUploadDropzone({
|
|
|
19697
19697
|
const onFiles = browse(fileInputRef);
|
|
19698
19698
|
const onFolder = browse(folderInputRef);
|
|
19699
19699
|
const dropTarget = /* @__PURE__ */ jsxRuntime.jsx(
|
|
19700
|
-
|
|
19700
|
+
chunkNUAC5GTQ_cjs.UploadDropArea,
|
|
19701
19701
|
{
|
|
19702
19702
|
isActive: dragActive,
|
|
19703
19703
|
isDisabled: disabled,
|
|
@@ -19711,11 +19711,11 @@ function ConnectedUploadDropzone({
|
|
|
19711
19711
|
onClick: (e) => {
|
|
19712
19712
|
if (e.target === e.currentTarget) onFiles();
|
|
19713
19713
|
},
|
|
19714
|
-
actions: compact ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19714
|
+
actions: compact ? /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadBrowseButtons, { onFiles, onFolder, isDisabled: disabled }) : void 0
|
|
19715
19715
|
}
|
|
19716
19716
|
);
|
|
19717
19717
|
const urlDialog = (trigger) => onUrlsSubmit ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
19718
|
-
|
|
19718
|
+
chunkNUAC5GTQ_cjs.UrlInputDialog,
|
|
19719
19719
|
{
|
|
19720
19720
|
onUrlsSubmit,
|
|
19721
19721
|
processing: disabled,
|
|
@@ -19728,12 +19728,12 @@ function ConnectedUploadDropzone({
|
|
|
19728
19728
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
19729
19729
|
dropTarget,
|
|
19730
19730
|
compactLeadingAction,
|
|
19731
|
-
onUrlsSubmit && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19731
|
+
onUrlsSubmit && /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadSourceSection, { isIsolated: true, className: "flex flex-wrap justify-center gap-2", children: urlDialog(/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadUrlButton, { isDisabled: disabled, isCompact: true })) })
|
|
19732
19732
|
] });
|
|
19733
19733
|
}
|
|
19734
19734
|
if (!source) {
|
|
19735
19735
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
19736
|
-
|
|
19736
|
+
chunkNUAC5GTQ_cjs.UploadSourcePicker,
|
|
19737
19737
|
{
|
|
19738
19738
|
isDisabled: disabled,
|
|
19739
19739
|
options: [
|
|
@@ -19769,14 +19769,14 @@ function ConnectedUploadDropzone({
|
|
|
19769
19769
|
}
|
|
19770
19770
|
if (source === "computer") {
|
|
19771
19771
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19772
|
-
|
|
19772
|
+
chunkNUAC5GTQ_cjs.UploadSourceSection,
|
|
19773
19773
|
{
|
|
19774
19774
|
testId: "upload-source-computer",
|
|
19775
19775
|
className: "flex w-full flex-col gap-3 pointer-coarse:flex-col-reverse",
|
|
19776
19776
|
children: [
|
|
19777
19777
|
dropTarget,
|
|
19778
19778
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19779
|
-
|
|
19779
|
+
chunkNUAC5GTQ_cjs.UploadBrowseButtons,
|
|
19780
19780
|
{
|
|
19781
19781
|
layout: "grid",
|
|
19782
19782
|
onFiles,
|
|
@@ -19789,15 +19789,15 @@ function ConnectedUploadDropzone({
|
|
|
19789
19789
|
);
|
|
19790
19790
|
}
|
|
19791
19791
|
if (source === "internet" && onUrlsSubmit) {
|
|
19792
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
19792
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadSourceSection, { testId: "upload-source-internet", className: "flex flex-wrap gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadSourceSection, { isIsolated: true, children: urlDialog(/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadUrlButton, { isDisabled: disabled })) }) });
|
|
19793
19793
|
}
|
|
19794
19794
|
if (source === "email" && accounts) {
|
|
19795
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
19795
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadSourceSection, { testId: "upload-source-email", isIsolated: true, children: accounts });
|
|
19796
19796
|
}
|
|
19797
19797
|
return null;
|
|
19798
19798
|
})();
|
|
19799
19799
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19800
|
-
|
|
19800
|
+
chunkNUAC5GTQ_cjs.UploadFrame,
|
|
19801
19801
|
{
|
|
19802
19802
|
isCompact: compact,
|
|
19803
19803
|
isDimmed: disabled || processingMessage !== null,
|
|
@@ -19904,7 +19904,7 @@ function plural2(count2) {
|
|
|
19904
19904
|
function DefaultFooter({ submit, shared, onSharedChange }) {
|
|
19905
19905
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center justify-end gap-4 border-t border-border px-4 py-3 sm:px-6", children: [
|
|
19906
19906
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19907
|
-
|
|
19907
|
+
chunkNUAC5GTQ_cjs.ShareToggle,
|
|
19908
19908
|
{
|
|
19909
19909
|
isVisible: shared,
|
|
19910
19910
|
onToggle: onSharedChange,
|
|
@@ -20069,7 +20069,7 @@ ${summary}`,
|
|
|
20069
20069
|
}
|
|
20070
20070
|
);
|
|
20071
20071
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col", "data-testid": "upload-documents", children: [
|
|
20072
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-2", children: uploading === null ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
20072
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-y-auto pb-2", children: uploading === null ? /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.UploadContainer, { className: "w-full px-4 pb-4 pt-2 sm:px-6", children: [
|
|
20073
20073
|
files.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
20074
20074
|
ConnectedUploadDropzone,
|
|
20075
20075
|
{
|
|
@@ -20085,7 +20085,7 @@ ${summary}`,
|
|
|
20085
20085
|
}
|
|
20086
20086
|
),
|
|
20087
20087
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20088
|
-
|
|
20088
|
+
chunkNUAC5GTQ_cjs.SelectedFilesList,
|
|
20089
20089
|
{
|
|
20090
20090
|
renderFileIcon,
|
|
20091
20091
|
files,
|
|
@@ -20094,10 +20094,10 @@ ${summary}`,
|
|
|
20094
20094
|
formatFileSize
|
|
20095
20095
|
}
|
|
20096
20096
|
),
|
|
20097
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20098
|
-
error && /* @__PURE__ */ jsxRuntime.jsx(
|
|
20099
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
20100
|
-
|
|
20097
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.RejectedFilesList, { files: refused, onClear: () => setRefused([]) }),
|
|
20098
|
+
error && /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadErrorMessage, { message: error })
|
|
20099
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.UploadContainer, { className: "w-full p-4 sm:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20100
|
+
chunkNUAC5GTQ_cjs.UploadProgress,
|
|
20101
20101
|
{
|
|
20102
20102
|
fileCount: count2,
|
|
20103
20103
|
entityLabel: plural2(count2),
|
|
@@ -20139,7 +20139,7 @@ function AddFromAccountsButton({
|
|
|
20139
20139
|
className: "gap-2",
|
|
20140
20140
|
"data-testid": dataTestId,
|
|
20141
20141
|
children: [
|
|
20142
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1", children: marks.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
20142
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center gap-1", children: marks.map((m) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.VendorLogo, { vendorKey: m.vendorKey, product: m.product, className: "h-4 w-4" }, m.key)) }),
|
|
20143
20143
|
"Add from accounts"
|
|
20144
20144
|
]
|
|
20145
20145
|
}
|
|
@@ -20169,7 +20169,7 @@ function EmptyWorkspaceUpload({
|
|
|
20169
20169
|
compactLeadingAction: onImportFromEmail && /* @__PURE__ */ jsxRuntime.jsx(AddFromAccountsButton, { onImportFromEmail })
|
|
20170
20170
|
}
|
|
20171
20171
|
),
|
|
20172
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20172
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.PrivacyExplainerModal, {})
|
|
20173
20173
|
] })
|
|
20174
20174
|
}
|
|
20175
20175
|
);
|
|
@@ -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(chunkSYTZ3UAU_cjs.EntityTooltip, { children: [
|
|
20204
20204
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20205
|
-
|
|
20205
|
+
chunkSYTZ3UAU_cjs.EntityTooltipHeader,
|
|
20206
20206
|
{
|
|
20207
20207
|
lead: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20208
20208
|
"span",
|
|
@@ -20277,7 +20277,7 @@ var CheckboxCellRenderer = react.memo(function CheckboxCellRenderer2({
|
|
|
20277
20277
|
if (!params.data) return null;
|
|
20278
20278
|
const isChecked = params.value === true;
|
|
20279
20279
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
20280
|
-
|
|
20280
|
+
chunkNUAC5GTQ_cjs.CheckboxCell,
|
|
20281
20281
|
{
|
|
20282
20282
|
isChecked,
|
|
20283
20283
|
color: tagColor,
|
|
@@ -20300,12 +20300,12 @@ var TagHeaderComponent = react.memo(function TagHeaderComponent2({
|
|
|
20300
20300
|
return () => params.column.removeEventListener("sortChanged", updateSort);
|
|
20301
20301
|
}, [params.column]);
|
|
20302
20302
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
20303
|
-
|
|
20303
|
+
chunkNUAC5GTQ_cjs.TagColumnHeader,
|
|
20304
20304
|
{
|
|
20305
20305
|
isCentered: isCheckbox,
|
|
20306
20306
|
sort,
|
|
20307
20307
|
onSort: params.enableSorting ? (additive) => params.progressSort(additive) : void 0,
|
|
20308
|
-
filter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20308
|
+
filter: /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FilterButton, { params, colId: tag.external_id }),
|
|
20309
20309
|
label: /* @__PURE__ */ jsxRuntime.jsx(ConnectedTagEntity, { tag, size: "sm" })
|
|
20310
20310
|
}
|
|
20311
20311
|
);
|
|
@@ -20394,7 +20394,7 @@ function createTagColumn({
|
|
|
20394
20394
|
}
|
|
20395
20395
|
) : void 0,
|
|
20396
20396
|
// Use default rendering for text/number/select - shows value with truncation
|
|
20397
|
-
cellEditor: isSelect ?
|
|
20397
|
+
cellEditor: isSelect ? chunkNUAC5GTQ_cjs.MultiSelectCellEditor : isText ? "agLargeTextCellEditor" : void 0,
|
|
20398
20398
|
cellEditorParams: isSelect ? createMultiSelectCellEditorParams(tag.tag_type.options || []) : isText ? { rows: 8, cols: 50 } : void 0,
|
|
20399
20399
|
cellEditorPopup: isText || isSelect,
|
|
20400
20400
|
// Text and Select tags use popup editor for better UX
|
|
@@ -20511,8 +20511,8 @@ function createDocumentColumns({
|
|
|
20511
20511
|
onToggleShared,
|
|
20512
20512
|
notify: notify14
|
|
20513
20513
|
}) {
|
|
20514
|
-
const isRowEditableByOwner = (params) =>
|
|
20515
|
-
const isRowEditableByMember = (params) =>
|
|
20514
|
+
const isRowEditableByOwner = (params) => chunkNUAC5GTQ_cjs.canChangeVisibility(params.data, currentUserExtId);
|
|
20515
|
+
const isRowEditableByMember = (params) => chunkNUAC5GTQ_cjs.canEditDocumentFields(params.data, currentUserExtId, workspaceRole);
|
|
20516
20516
|
const documentNameCellRenderer = (params) => {
|
|
20517
20517
|
const doc = params.data;
|
|
20518
20518
|
if (!doc) return null;
|
|
@@ -20717,7 +20717,7 @@ function createDocumentColumns({
|
|
|
20717
20717
|
singleClickEdit: true,
|
|
20718
20718
|
cellEditor: "agSelectCellEditor",
|
|
20719
20719
|
cellEditorParams: {
|
|
20720
|
-
values: [...
|
|
20720
|
+
values: [...chunkNUAC5GTQ_cjs.DOCUMENT_TYPE_OPTIONS]
|
|
20721
20721
|
},
|
|
20722
20722
|
context: { icon: lucideReact.Sparkles },
|
|
20723
20723
|
valueGetter: (params) => ui.getDocumentNature(params.data) || "",
|
|
@@ -21255,7 +21255,7 @@ function useDocumentTable({
|
|
|
21255
21255
|
}
|
|
21256
21256
|
const stabilizedTagIds = prevTagIdsRef.current;
|
|
21257
21257
|
const stabilizedTagNames = prevTagNamesRef.current;
|
|
21258
|
-
const defaultVisibleColumns = react.useMemo(() => [...
|
|
21258
|
+
const defaultVisibleColumns = react.useMemo(() => [...chunkNUAC5GTQ_cjs.DEFAULT_DOCUMENT_COLUMNS], []);
|
|
21259
21259
|
const toggleShared = react.useCallback((docId, shared) => {
|
|
21260
21260
|
updateDocRef.current.mutate({ documents: [{ external_id: docId, shared }] });
|
|
21261
21261
|
}, []);
|
|
@@ -21518,10 +21518,10 @@ function ConnectedFilesBulkActions({
|
|
|
21518
21518
|
const bulk = useDocumentBulkActions(selectedDocuments);
|
|
21519
21519
|
const count2 = selectedDocuments.length;
|
|
21520
21520
|
const noun = ui.getEntityLabel("DOCUMENT", count2 === 1 ? "SINGULAR" : "PLURAL");
|
|
21521
|
-
const shareState =
|
|
21521
|
+
const shareState = chunkNUAC5GTQ_cjs.shareStateOf(bulk.freshSelectedDocuments);
|
|
21522
21522
|
const handleToggleShare = async (shouldShare) => {
|
|
21523
21523
|
if (shouldShare) return bulk.share();
|
|
21524
|
-
const confirmed = await
|
|
21524
|
+
const confirmed = await chunkNUAC5GTQ_cjs.confirmHideFromMembers(
|
|
21525
21525
|
confirm,
|
|
21526
21526
|
bulk.freshSelectedDocuments.length,
|
|
21527
21527
|
members
|
|
@@ -21544,7 +21544,7 @@ function ConnectedFilesBulkActions({
|
|
|
21544
21544
|
const { openDocumentsChat, openFieldsManager } = actions;
|
|
21545
21545
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
21546
21546
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21547
|
-
|
|
21547
|
+
chunkNUAC5GTQ_cjs.BulkActionsBar,
|
|
21548
21548
|
{
|
|
21549
21549
|
count: count2,
|
|
21550
21550
|
onClear: onClearSelection,
|
|
@@ -21569,7 +21569,7 @@ function ConnectedFilesBulkActions({
|
|
|
21569
21569
|
onDelete: () => setConfirming("delete"),
|
|
21570
21570
|
shareState,
|
|
21571
21571
|
shareLabels: shareState === "shared" ? { share: "Make private" } : void 0,
|
|
21572
|
-
shareTooltip:
|
|
21572
|
+
shareTooltip: chunkNUAC5GTQ_cjs.shareTooltipFor(shareState, bulk.freshSelectedDocuments.length === 1),
|
|
21573
21573
|
onToggleShare: (shouldShare) => void handleToggleShare(shouldShare)
|
|
21574
21574
|
}
|
|
21575
21575
|
),
|
|
@@ -21584,7 +21584,7 @@ function ConnectedFilesBulkActions({
|
|
|
21584
21584
|
onClearSelection();
|
|
21585
21585
|
},
|
|
21586
21586
|
title: `Delete ${count2} ${noun}`,
|
|
21587
|
-
description: `Delete ${namedTargets(selectedDocuments)}? ${count2 === 1 ?
|
|
21587
|
+
description: `Delete ${namedTargets(selectedDocuments)}? ${count2 === 1 ? chunkNUAC5GTQ_cjs.RECENTLY_DELETED_HINT : chunkNUAC5GTQ_cjs.RECENTLY_DELETED_HINT_PLURAL}`,
|
|
21588
21588
|
confirmText: "Delete",
|
|
21589
21589
|
variant: "destructive"
|
|
21590
21590
|
}
|
|
@@ -22102,7 +22102,7 @@ function useDocumentFilters({
|
|
|
22102
22102
|
[documentFilters]
|
|
22103
22103
|
);
|
|
22104
22104
|
const baseFilteredDocuments = react.useMemo(
|
|
22105
|
-
() =>
|
|
22105
|
+
() => chunkXGFNZTPO_cjs.applyInvertedIndexFilter(documents, documentFilters, invertedIndex, getDocId),
|
|
22106
22106
|
[documents, documentFilters, invertedIndex]
|
|
22107
22107
|
);
|
|
22108
22108
|
const filteredDocuments = react.useMemo(() => {
|
|
@@ -22284,7 +22284,7 @@ function useDocumentFilters({
|
|
|
22284
22284
|
const folderPath = react.useMemo(() => {
|
|
22285
22285
|
for (const [key, state] of documentFilters) {
|
|
22286
22286
|
if (key.startsWith("folder:") && key !== "folder:none" && state === "include") {
|
|
22287
|
-
return
|
|
22287
|
+
return chunkNUAC5GTQ_cjs.parseFolderSegments(key.slice("folder:".length));
|
|
22288
22288
|
}
|
|
22289
22289
|
}
|
|
22290
22290
|
return [];
|
|
@@ -22293,7 +22293,7 @@ function useDocumentFilters({
|
|
|
22293
22293
|
(path) => {
|
|
22294
22294
|
const next = new Map(documentFilters);
|
|
22295
22295
|
for (const key of next.keys()) if (key.startsWith("folder:")) next.set(key, null);
|
|
22296
|
-
const joined =
|
|
22296
|
+
const joined = chunkNUAC5GTQ_cjs.joinFolderPath(path);
|
|
22297
22297
|
if (joined) next.set(`folder:${joined}`, "include");
|
|
22298
22298
|
setDocumentFilters(next);
|
|
22299
22299
|
},
|
|
@@ -22585,7 +22585,7 @@ function ConnectedAiReview({
|
|
|
22585
22585
|
}, [kind]);
|
|
22586
22586
|
const description = phase === "ask" ? `Ask one question \u2014 ARBI answers it for each of the ${docCount} ${scope} document${plural4(docCount)}.` : aiCellsTotal > 0 ? reviewProgress(aiCellsDone, aiCellsEmpty, aiCellsTotal) : `Applied to ${rows.length} document${plural4(rows.length)}`;
|
|
22587
22587
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22588
|
-
|
|
22588
|
+
chunkNUAC5GTQ_cjs.AiReviewDialogView,
|
|
22589
22589
|
{
|
|
22590
22590
|
open,
|
|
22591
22591
|
onOpenChange: handleOpenChange,
|
|
@@ -22653,12 +22653,12 @@ function ConnectedMoveToFolder({
|
|
|
22653
22653
|
setIsSubmitting(true);
|
|
22654
22654
|
try {
|
|
22655
22655
|
if (folderToMove) {
|
|
22656
|
-
const docsInFolder =
|
|
22656
|
+
const docsInFolder = chunkNUAC5GTQ_cjs.collectFolderDocs(allDocs, folderToMove.path);
|
|
22657
22657
|
if (docsInFolder.length === 0) {
|
|
22658
22658
|
onClose();
|
|
22659
22659
|
return;
|
|
22660
22660
|
}
|
|
22661
|
-
const newPrefixSegments = targetFolder ? [...
|
|
22661
|
+
const newPrefixSegments = targetFolder ? [...chunkNUAC5GTQ_cjs.parseFolderSegments(targetFolder), folderToMove.name] : [folderToMove.name];
|
|
22662
22662
|
await renameFolder(docsInFolder, folderToMove.path, newPrefixSegments);
|
|
22663
22663
|
const dest = targetFolder ? `"${targetFolder}/${folderToMove.name}"` : `"${folderToMove.name}" (root)`;
|
|
22664
22664
|
notify14(`Moved folder to ${dest}`, "success");
|
|
@@ -22685,7 +22685,7 @@ function ConnectedMoveToFolder({
|
|
|
22685
22685
|
const isFolderMode = !!folderToMove;
|
|
22686
22686
|
const folders = useDocumentFolders(allDocs, targetFolder);
|
|
22687
22687
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22688
|
-
|
|
22688
|
+
chunkNUAC5GTQ_cjs.MoveToFolderDialog,
|
|
22689
22689
|
{
|
|
22690
22690
|
open: isOpen,
|
|
22691
22691
|
onClose,
|
|
@@ -22695,7 +22695,7 @@ function ConnectedMoveToFolder({
|
|
|
22695
22695
|
isSubmitting,
|
|
22696
22696
|
onConfirm: handleMove,
|
|
22697
22697
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
22698
|
-
|
|
22698
|
+
chunkNUAC5GTQ_cjs.FolderCommandList,
|
|
22699
22699
|
{
|
|
22700
22700
|
folders,
|
|
22701
22701
|
value: targetFolder,
|
|
@@ -23090,7 +23090,7 @@ function ConnectedFieldsEditor({
|
|
|
23090
23090
|
const [sortBy, setSortBy] = react.useState("name-asc");
|
|
23091
23091
|
const [filterText, setFilterText] = react.useState("");
|
|
23092
23092
|
const fieldRows = react.useMemo(
|
|
23093
|
-
() => browser.flattenTagTree(
|
|
23093
|
+
() => browser.flattenTagTree(chunkNUAC5GTQ_cjs.sortFields(chunkNUAC5GTQ_cjs.filterFieldsByName(tags, filterText), sortBy)),
|
|
23094
23094
|
[tags, filterText, sortBy]
|
|
23095
23095
|
);
|
|
23096
23096
|
const exportItems = react.useMemo(
|
|
@@ -23110,7 +23110,7 @@ function ConnectedFieldsEditor({
|
|
|
23110
23110
|
setIsDeleting(false);
|
|
23111
23111
|
}
|
|
23112
23112
|
};
|
|
23113
|
-
const copy =
|
|
23113
|
+
const copy = chunkNUAC5GTQ_cjs.fieldsApplyBarCopy({
|
|
23114
23114
|
nouns,
|
|
23115
23115
|
targetNoun,
|
|
23116
23116
|
fieldCount,
|
|
@@ -23119,9 +23119,9 @@ function ConnectedFieldsEditor({
|
|
|
23119
23119
|
isApplying,
|
|
23120
23120
|
isClearing
|
|
23121
23121
|
});
|
|
23122
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
23122
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FieldsEditorRoot, { children: [
|
|
23123
23123
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23124
|
-
|
|
23124
|
+
chunkNUAC5GTQ_cjs.FieldsEditorToolbar,
|
|
23125
23125
|
{
|
|
23126
23126
|
nouns,
|
|
23127
23127
|
onNew: () => {
|
|
@@ -23149,11 +23149,11 @@ function ConnectedFieldsEditor({
|
|
|
23149
23149
|
onSortByChange: setSortBy
|
|
23150
23150
|
}
|
|
23151
23151
|
),
|
|
23152
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
23152
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FieldsEditorList, { children: [
|
|
23153
23153
|
fieldRows.map(({ tag, depth, childCount }) => {
|
|
23154
23154
|
const isEditingThis = editingTagId === tag.external_id;
|
|
23155
23155
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
23156
|
-
|
|
23156
|
+
chunkNUAC5GTQ_cjs.FieldRow,
|
|
23157
23157
|
{
|
|
23158
23158
|
tagId: tag.external_id,
|
|
23159
23159
|
name: tag.name,
|
|
@@ -23206,10 +23206,10 @@ function ConnectedFieldsEditor({
|
|
|
23206
23206
|
tag.external_id
|
|
23207
23207
|
);
|
|
23208
23208
|
}),
|
|
23209
|
-
fieldRows.length === 0 && !isCreatingTag && /* @__PURE__ */ jsxRuntime.jsx(
|
|
23209
|
+
fieldRows.length === 0 && !isCreatingTag && /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldsEmptyState, { children: chunkNUAC5GTQ_cjs.fieldsEmptyText({ nouns, filterText, hasKind: !!kind }) })
|
|
23210
23210
|
] }),
|
|
23211
23211
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23212
|
-
|
|
23212
|
+
chunkNUAC5GTQ_cjs.FieldsApplyBar,
|
|
23213
23213
|
{
|
|
23214
23214
|
hint: copy.hint,
|
|
23215
23215
|
applyLabel: copy.applyLabel,
|
|
@@ -23286,8 +23286,8 @@ function ConnectedFieldsManager({
|
|
|
23286
23286
|
}
|
|
23287
23287
|
);
|
|
23288
23288
|
const body = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
23289
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23290
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23289
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldsManagerDefinition, { children: DEFINITIONS[activeKind] }),
|
|
23290
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldsManagerBody, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
23291
23291
|
ConnectedFieldsEditor,
|
|
23292
23292
|
{
|
|
23293
23293
|
group: activeKind,
|
|
@@ -23306,7 +23306,7 @@ function ConnectedFieldsManager({
|
|
|
23306
23306
|
"data-testid": "fields-manager-dialog",
|
|
23307
23307
|
children: [
|
|
23308
23308
|
/* @__PURE__ */ jsxRuntime.jsxs(ui.DialogHeader, { className: "px-4 py-3 border-b", children: [
|
|
23309
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
23309
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogTitle, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldsManagerTitle, { title }) }),
|
|
23310
23310
|
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "sr-only", children: "Create, edit, and delete labels and annotations for your workspace documents." })
|
|
23311
23311
|
] }),
|
|
23312
23312
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-2 border-b", children: tabHeader }),
|
|
@@ -23316,8 +23316,8 @@ function ConnectedFieldsManager({
|
|
|
23316
23316
|
) });
|
|
23317
23317
|
}
|
|
23318
23318
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
|
|
23319
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
23320
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23319
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXGFNZTPO_cjs.DraggableHeader, { children: [
|
|
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
|
] }),
|
|
23323
23323
|
body
|
|
@@ -23570,7 +23570,7 @@ function ConnectedBulkTagEditor({
|
|
|
23570
23570
|
const documentsLabel = ui.getEntityLabel("DOCUMENT", "PLURAL").toLowerCase();
|
|
23571
23571
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
23572
23572
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23573
|
-
|
|
23573
|
+
chunkNUAC5GTQ_cjs.BulkTagEditorDialog,
|
|
23574
23574
|
{
|
|
23575
23575
|
open,
|
|
23576
23576
|
onClose,
|
|
@@ -23628,7 +23628,7 @@ function ConnectedBulkTagEditor({
|
|
|
23628
23628
|
}
|
|
23629
23629
|
),
|
|
23630
23630
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23631
|
-
|
|
23631
|
+
chunkNUAC5GTQ_cjs.BulkReplaceDialog,
|
|
23632
23632
|
{
|
|
23633
23633
|
open: showGenerateConfirmation,
|
|
23634
23634
|
onClose: () => setShowGenerateConfirmation(false),
|
|
@@ -23658,7 +23658,7 @@ function FolderPicker({
|
|
|
23658
23658
|
onSelect
|
|
23659
23659
|
}) {
|
|
23660
23660
|
const folders = useDocumentFolders(documents, value);
|
|
23661
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
23661
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FolderCommandList, { folders, value, onSelect, showRemove: !!value });
|
|
23662
23662
|
}
|
|
23663
23663
|
function RelatedDocuments({
|
|
23664
23664
|
doc,
|
|
@@ -23691,7 +23691,7 @@ function DocTagAttribution({ doctag }) {
|
|
|
23691
23691
|
updater && `Updated ${ui.formatFriendlyDate(doctag.updated_at)} by ${updater.given_name || updater.email}`
|
|
23692
23692
|
].filter((line) => !!line);
|
|
23693
23693
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
23694
|
-
|
|
23694
|
+
chunkNUAC5GTQ_cjs.FieldAttribution,
|
|
23695
23695
|
{
|
|
23696
23696
|
avatar: /* @__PURE__ */ jsxRuntime.jsx(DocumentUser, { user: lastUser, tooltip: false }),
|
|
23697
23697
|
date: ui.formatFriendlyDate(updater ? doctag.updated_at : doctag.created_at),
|
|
@@ -23721,7 +23721,7 @@ function LabelsCombobox({
|
|
|
23721
23721
|
else if (!appliedTagIds.has(existing.external_id)) onToggle(existing);
|
|
23722
23722
|
};
|
|
23723
23723
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
23724
|
-
|
|
23724
|
+
chunkNUAC5GTQ_cjs.FieldLabelsSelect,
|
|
23725
23725
|
{
|
|
23726
23726
|
options: options2,
|
|
23727
23727
|
appliedIds: appliedTagIds,
|
|
@@ -23743,15 +23743,15 @@ var METADATA_FIELDS = {
|
|
|
23743
23743
|
};
|
|
23744
23744
|
var INPUT_CLASS = "text-sm bg-muted/40 focus:bg-background transition-colors";
|
|
23745
23745
|
var READ_ONLY_FIELDS = {
|
|
23746
|
-
file_name: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23747
|
-
status: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23748
|
-
n_pages: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23749
|
-
created_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23750
|
-
updated_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23751
|
-
file_type: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23752
|
-
file_size: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23753
|
-
doc_id: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23754
|
-
content_hash: (doc) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23746
|
+
file_name: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "strong", children: doc.file_name || "N/A" }),
|
|
23747
|
+
status: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", children: doc.status || "N/A" }),
|
|
23748
|
+
n_pages: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", children: doc.n_pages || "N/A" }),
|
|
23749
|
+
created_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", children: doc.created_at ? ui.formatFriendlyDate(doc.created_at) : "N/A" }),
|
|
23750
|
+
updated_at: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", children: doc.updated_at ? ui.formatFriendlyDate(doc.updated_at) : "N/A" }),
|
|
23751
|
+
file_type: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", children: ui.friendlyFileType(doc.file_type, doc.file_name) }),
|
|
23752
|
+
file_size: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", children: doc.file_size ? `${Math.round(doc.file_size / 1024)} KB` : "N/A" }),
|
|
23753
|
+
doc_id: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", isMono: true, children: doc.external_id || "N/A" }),
|
|
23754
|
+
content_hash: (doc) => /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { tone: "muted", isMono: true, isTruncated: true, children: doc.content_hash || "N/A" })
|
|
23755
23755
|
};
|
|
23756
23756
|
function documentFieldContent(options2) {
|
|
23757
23757
|
const { columnId, doc, canEdit, workspaceTags, getColumnLabel, getColumnIcon } = options2;
|
|
@@ -23774,7 +23774,7 @@ function documentFieldContent(options2) {
|
|
|
23774
23774
|
placeholder: `Add ${getColumnLabel(columnId).toLowerCase()}\u2026`,
|
|
23775
23775
|
className: INPUT_CLASS
|
|
23776
23776
|
}
|
|
23777
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
23777
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldValue, { children: metadata(doc) || "N/A" })
|
|
23778
23778
|
);
|
|
23779
23779
|
}
|
|
23780
23780
|
const readOnly = READ_ONLY_FIELDS[columnId];
|
|
@@ -23783,7 +23783,7 @@ function documentFieldContent(options2) {
|
|
|
23783
23783
|
if (columnId === "folder") {
|
|
23784
23784
|
return standard(
|
|
23785
23785
|
canEdit ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
23786
|
-
|
|
23786
|
+
chunkNUAC5GTQ_cjs.FieldFolderSelect,
|
|
23787
23787
|
{
|
|
23788
23788
|
folder: doc.folder,
|
|
23789
23789
|
picker: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -23795,7 +23795,7 @@ function documentFieldContent(options2) {
|
|
|
23795
23795
|
}
|
|
23796
23796
|
)
|
|
23797
23797
|
}
|
|
23798
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
23798
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldFolderValue, { folder: doc.folder })
|
|
23799
23799
|
);
|
|
23800
23800
|
}
|
|
23801
23801
|
if (columnId === "related") {
|
|
@@ -23837,7 +23837,7 @@ function documentFieldContent(options2) {
|
|
|
23837
23837
|
let value;
|
|
23838
23838
|
if (tag.tag_type.type === "select") {
|
|
23839
23839
|
value = /* @__PURE__ */ jsxRuntime.jsx(
|
|
23840
|
-
|
|
23840
|
+
chunkNUAC5GTQ_cjs.FieldNativeSelect,
|
|
23841
23841
|
{
|
|
23842
23842
|
value: doctag?.note || "",
|
|
23843
23843
|
options: tag.tag_type.options,
|
|
@@ -23871,7 +23871,7 @@ function documentFieldContent(options2) {
|
|
|
23871
23871
|
return {
|
|
23872
23872
|
label: tag.name,
|
|
23873
23873
|
tag,
|
|
23874
|
-
children: doctag ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
23874
|
+
children: doctag ? /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FieldWithAttribution, { attribution: /* @__PURE__ */ jsxRuntime.jsx(DocTagAttribution, { doctag }), children: value }) : value
|
|
23875
23875
|
};
|
|
23876
23876
|
}
|
|
23877
23877
|
|
|
@@ -23974,7 +23974,7 @@ function ViewSelector({
|
|
|
23974
23974
|
columns: defaultColumns,
|
|
23975
23975
|
icon: lucideReact.Table,
|
|
23976
23976
|
// Both built-ins load at the minimal (compact) row height.
|
|
23977
|
-
rowHeight:
|
|
23977
|
+
rowHeight: chunkNUAC5GTQ_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
|
|
23978
23978
|
// [] = loading this view unpins everything.
|
|
23979
23979
|
pinnedLeft: []
|
|
23980
23980
|
},
|
|
@@ -23985,15 +23985,15 @@ function ViewSelector({
|
|
|
23985
23985
|
// batch-select checkbox and Title stay fixed left while scrolling.
|
|
23986
23986
|
columns: defaultColumns,
|
|
23987
23987
|
icon: lucideReact.Columns3,
|
|
23988
|
-
rowHeight:
|
|
23988
|
+
rowHeight: chunkNUAC5GTQ_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
|
|
23989
23989
|
pinnedLeft: DOCUMENT_VIEW_PINNED
|
|
23990
23990
|
},
|
|
23991
23991
|
{
|
|
23992
23992
|
key: "email-default",
|
|
23993
23993
|
label: "Email view",
|
|
23994
|
-
columns: [...
|
|
23994
|
+
columns: [...chunkNUAC5GTQ_cjs.EMAIL_VIEW_COLUMNS],
|
|
23995
23995
|
icon: lucideReact.Mail,
|
|
23996
|
-
rowHeight:
|
|
23996
|
+
rowHeight: chunkNUAC5GTQ_cjs.DOCUMENTS_ROW_HEIGHT_INITIAL,
|
|
23997
23997
|
pinnedLeft: []
|
|
23998
23998
|
}
|
|
23999
23999
|
],
|
|
@@ -24017,7 +24017,7 @@ function ViewSelector({
|
|
|
24017
24017
|
},
|
|
24018
24018
|
[confirm, workspaceId, deleteView, notify14]
|
|
24019
24019
|
);
|
|
24020
|
-
const menu =
|
|
24020
|
+
const menu = chunkNUAC5GTQ_cjs.useGridViews({
|
|
24021
24021
|
getGridApi,
|
|
24022
24022
|
defaultColumns,
|
|
24023
24023
|
builtins,
|
|
@@ -24032,7 +24032,7 @@ function ViewSelector({
|
|
|
24032
24032
|
onDeleteView,
|
|
24033
24033
|
isSaving
|
|
24034
24034
|
});
|
|
24035
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
24035
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.ViewSelectorMenu, { ...menu });
|
|
24036
24036
|
}
|
|
24037
24037
|
function DocumentsFilterBarActions({
|
|
24038
24038
|
isModal,
|
|
@@ -24072,7 +24072,7 @@ function DocumentsFilterBarActions({
|
|
|
24072
24072
|
),
|
|
24073
24073
|
documentsViewMode === "grid" && // The phone list is a fixed two-line layout, so row density only applies from sm up.
|
|
24074
24074
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden sm:block", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
24075
|
-
|
|
24075
|
+
chunkNUAC5GTQ_cjs.RowDensityControl,
|
|
24076
24076
|
{
|
|
24077
24077
|
rowHeight: documentsRowHeight,
|
|
24078
24078
|
onRowHeightChange: onDocumentsRowHeightChange
|
|
@@ -24240,7 +24240,7 @@ function DocumentsUploadButton({
|
|
|
24240
24240
|
[hasAccountProviders, onSelectSource, onEmailWorkspace, onCreateNew, onTakePhoto]
|
|
24241
24241
|
);
|
|
24242
24242
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
24243
|
-
|
|
24243
|
+
chunkNUAC5GTQ_cjs.FilesAddMenu,
|
|
24244
24244
|
{
|
|
24245
24245
|
items,
|
|
24246
24246
|
isCompact,
|
|
@@ -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 } = chunkPTSTVYQD_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;
|
|
@@ -24445,17 +24445,17 @@ function ConnectedFilesPage({
|
|
|
24445
24445
|
}, [relatedDocsMap, onRelatedDocsChange]);
|
|
24446
24446
|
const defaultVisibleColumns = react.useMemo(
|
|
24447
24447
|
() => [
|
|
24448
|
-
...
|
|
24448
|
+
...chunkNUAC5GTQ_cjs.DEFAULT_DOCUMENT_COLUMNS,
|
|
24449
24449
|
...allTags.filter(browser.isAnnotationTag).map((tag) => tag.external_id)
|
|
24450
24450
|
],
|
|
24451
24451
|
[allTags]
|
|
24452
24452
|
);
|
|
24453
24453
|
const handleReorderColumns = react.useCallback((ids, gridApi2) => {
|
|
24454
|
-
if (gridApi2)
|
|
24454
|
+
if (gridApi2) chunkNUAC5GTQ_cjs.applyColumnLayout(gridApi2, ids);
|
|
24455
24455
|
}, []);
|
|
24456
24456
|
const handleLoadView = react.useCallback(
|
|
24457
24457
|
(view, gridApi2) => {
|
|
24458
|
-
|
|
24458
|
+
chunkNUAC5GTQ_cjs.applyViewColumns(gridApi2, view, handleReorderColumns);
|
|
24459
24459
|
if (typeof view.tile_size === "number") setExplorerTileSize(view.tile_size);
|
|
24460
24460
|
if (typeof view.row_height === "number") setRowHeight(view.row_height);
|
|
24461
24461
|
},
|
|
@@ -24548,7 +24548,7 @@ function ConnectedFilesPage({
|
|
|
24548
24548
|
);
|
|
24549
24549
|
const currentDocument = viewingDocumentId ? filteredDocuments.find((d) => d.external_id === viewingDocumentId) ?? documents.find((d) => d.external_id === viewingDocumentId) ?? null : null;
|
|
24550
24550
|
const navigatorDocuments = react.useMemo(
|
|
24551
|
-
() =>
|
|
24551
|
+
() => chunkNUAC5GTQ_cjs.sortExplorerFiles(filteredDocuments, explorerSort, explorerSortReversed),
|
|
24552
24552
|
[filteredDocuments, explorerSort, explorerSortReversed]
|
|
24553
24553
|
);
|
|
24554
24554
|
const navigatorOnNavigate = react.useCallback(
|
|
@@ -24615,7 +24615,7 @@ function ConnectedFilesPage({
|
|
|
24615
24615
|
},
|
|
24616
24616
|
rowHeight
|
|
24617
24617
|
};
|
|
24618
|
-
const documentsTabActions = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
24618
|
+
const documentsTabActions = /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FilesFilterBar, { children: [
|
|
24619
24619
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24620
24620
|
chunk2EI7NCUA_cjs.FilterInput,
|
|
24621
24621
|
{
|
|
@@ -24650,7 +24650,7 @@ function ConnectedFilesPage({
|
|
|
24650
24650
|
),
|
|
24651
24651
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
24652
24652
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24653
|
-
|
|
24653
|
+
chunkNUAC5GTQ_cjs.DocumentsFolderButton,
|
|
24654
24654
|
{
|
|
24655
24655
|
documents,
|
|
24656
24656
|
documentFilters,
|
|
@@ -24658,7 +24658,7 @@ function ConnectedFilesPage({
|
|
|
24658
24658
|
onNewFolder: canUpload ? handleNewFolder : void 0
|
|
24659
24659
|
}
|
|
24660
24660
|
),
|
|
24661
|
-
onOpenTags && /* @__PURE__ */ jsxRuntime.jsx(
|
|
24661
|
+
onOpenTags && /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FilesTagsButton, { onClick: onOpenTags }),
|
|
24662
24662
|
headerExtras
|
|
24663
24663
|
] })
|
|
24664
24664
|
] });
|
|
@@ -24681,9 +24681,9 @@ function ConnectedFilesPage({
|
|
|
24681
24681
|
);
|
|
24682
24682
|
const reviewGridId = isModal ? "documents-modal-grid-v6" : "documents-main-grid-v6";
|
|
24683
24683
|
const showBulkBar = (viewMode === "grid" || viewMode === "explorer" || viewMode === "navigator") && documents.length > 0;
|
|
24684
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
24684
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FilesPage, { isModal, ref: setPageEl, children: [
|
|
24685
24685
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24686
|
-
|
|
24686
|
+
chunkNUAC5GTQ_cjs.UrlInputDialog,
|
|
24687
24687
|
{
|
|
24688
24688
|
open: urlDialogOpen,
|
|
24689
24689
|
onOpenChange: setUrlDialogOpen,
|
|
@@ -24692,7 +24692,7 @@ function ConnectedFilesPage({
|
|
|
24692
24692
|
titleIcon: workspaceIcon
|
|
24693
24693
|
}
|
|
24694
24694
|
),
|
|
24695
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
24695
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FilesPageHeader, { children: [
|
|
24696
24696
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24697
24697
|
chunkMEMWZ72Y_cjs.TabHeader,
|
|
24698
24698
|
{
|
|
@@ -24713,7 +24713,7 @@ function ConnectedFilesPage({
|
|
|
24713
24713
|
activeTabId: "documents",
|
|
24714
24714
|
onTabChange: () => handleViewModeChange(lastDocsViewRef.current),
|
|
24715
24715
|
firstTabContent: isNarrowFilterRow ? null : documentsTabActions,
|
|
24716
|
-
centerContent: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
24716
|
+
centerContent: /* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FilesViewCenter, { className: isNarrowFilterRow ? "min-w-0" : void 0, children: [
|
|
24717
24717
|
!isNarrowFilterRow && viewToggle,
|
|
24718
24718
|
/* @__PURE__ */ jsxRuntime.jsx(ProgressiveLoadingChip, {})
|
|
24719
24719
|
] }),
|
|
@@ -24743,14 +24743,14 @@ function ConnectedFilesPage({
|
|
|
24743
24743
|
}
|
|
24744
24744
|
),
|
|
24745
24745
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24746
|
-
|
|
24746
|
+
chunkNUAC5GTQ_cjs.FilesToolbar,
|
|
24747
24747
|
{
|
|
24748
24748
|
className: "px-3 pb-2",
|
|
24749
24749
|
rightActions: viewMode === "grid" || viewMode === "explorer" || viewMode === "navigator" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
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
|
+
chunkSYTZ3UAU_cjs.GridRowNavigator,
|
|
24754
24754
|
{
|
|
24755
24755
|
gridApi,
|
|
24756
24756
|
selectedId: viewingDocumentId ?? selectedDocumentIds[0] ?? null,
|
|
@@ -24765,7 +24765,7 @@ function ConnectedFilesPage({
|
|
|
24765
24765
|
) : viewMode === "explorer" ? (
|
|
24766
24766
|
// The same over the explorer's tiles.
|
|
24767
24767
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24768
|
-
|
|
24768
|
+
chunkNUAC5GTQ_cjs.ExplorerFileNavigator,
|
|
24769
24769
|
{
|
|
24770
24770
|
fileIds: explorerFileIds,
|
|
24771
24771
|
selectedId: viewingDocumentId ?? selectedDocumentIds[0] ?? null,
|
|
@@ -24804,7 +24804,7 @@ function ConnectedFilesPage({
|
|
|
24804
24804
|
}
|
|
24805
24805
|
),
|
|
24806
24806
|
viewMode === "navigator" && currentDocument && /* @__PURE__ */ jsxRuntime.jsx(
|
|
24807
|
-
|
|
24807
|
+
chunkNUAC5GTQ_cjs.NavigatorPickerBar,
|
|
24808
24808
|
{
|
|
24809
24809
|
currentDocument,
|
|
24810
24810
|
documents: navigatorDocuments,
|
|
@@ -24816,11 +24816,11 @@ function ConnectedFilesPage({
|
|
|
24816
24816
|
}
|
|
24817
24817
|
)
|
|
24818
24818
|
] }),
|
|
24819
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
24819
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkNUAC5GTQ_cjs.FilesPageMain, { children: [
|
|
24820
24820
|
viewMode === "grid" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
24821
|
-
|
|
24821
|
+
chunkNUAC5GTQ_cjs.DocumentGrid,
|
|
24822
24822
|
{
|
|
24823
|
-
layout:
|
|
24823
|
+
layout: chunkNUAC5GTQ_cjs.resolveDocumentGridLayout(isNarrowFilterRow, isModal, isTabletWidth),
|
|
24824
24824
|
presets: gridPresets,
|
|
24825
24825
|
GridComponent,
|
|
24826
24826
|
showEmptyWorkspace: documents.length === 0 && !isLoading && isMember,
|
|
@@ -24913,7 +24913,7 @@ function ConnectedFilesPage({
|
|
|
24913
24913
|
onProduce
|
|
24914
24914
|
}
|
|
24915
24915
|
),
|
|
24916
|
-
isModal && onClose && /* @__PURE__ */ jsxRuntime.jsx(
|
|
24916
|
+
isModal && onClose && /* @__PURE__ */ jsxRuntime.jsx(chunkNUAC5GTQ_cjs.FilesModalFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "outline", onClick: onClose, children: "Close" }) }),
|
|
24917
24917
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
24918
24918
|
chunkDWZXSPMB_cjs.ConfirmDialog,
|
|
24919
24919
|
{
|
|
@@ -24924,7 +24924,7 @@ function ConnectedFilesPage({
|
|
|
24924
24924
|
requestDelete(null);
|
|
24925
24925
|
},
|
|
24926
24926
|
title: "Delete Document",
|
|
24927
|
-
description: deleteRequest ? `Delete "${ui.getDocumentTitle(deleteRequest, "this document")}"? ${
|
|
24927
|
+
description: deleteRequest ? `Delete "${ui.getDocumentTitle(deleteRequest, "this document")}"? ${chunkNUAC5GTQ_cjs.RECENTLY_DELETED_HINT}` : "",
|
|
24928
24928
|
confirmText: "Delete",
|
|
24929
24929
|
variant: "destructive"
|
|
24930
24930
|
}
|
|
@@ -25327,7 +25327,7 @@ function ConnectedChatThread({
|
|
|
25327
25327
|
}
|
|
25328
25328
|
return /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
|
|
25329
25329
|
isFirstOfDay && /* @__PURE__ */ jsxRuntime.jsx(react$1.DateSeparator, { children: formatDay(msg.created_at) }),
|
|
25330
|
-
!isSent && startsPeerRun(i) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
25330
|
+
!isSent && startsPeerRun(i) && /* @__PURE__ */ jsxRuntime.jsx(chunk5A2QQAF5_cjs.MessageAuthor, { children: renderUser2(memberById(msg.sender_ext_id) ?? null) }),
|
|
25331
25331
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25332
25332
|
react$1.ChatBubble,
|
|
25333
25333
|
{
|
|
@@ -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(chunkXGFNZTPO_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(chunkXGFNZTPO_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(chunkXGFNZTPO_cjs.PanelFrameBody, { className: "flex flex-col overflow-visible", children: active ? /* @__PURE__ */ jsxRuntime.jsx(ConnectedChatThread, { chat: active.chat, peer: activePeer, host }, activeId) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "p-4 text-sm text-muted-foreground", children: isLoading ? "Loading conversation\u2026" : "This conversation is no longer available." }) })
|
|
25830
25830
|
] });
|
|
25831
25831
|
}
|
|
25832
25832
|
function ActiveChat({ agentId, workspaceId }) {
|
|
@@ -25836,7 +25836,7 @@ function ActiveChat({ agentId, workspaceId }) {
|
|
|
25836
25836
|
activeArtifact: () => chunkJKB7WT7L_cjs.takeOpenDocumentForTurn({ workspaceId })
|
|
25837
25837
|
});
|
|
25838
25838
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
25839
|
-
|
|
25839
|
+
chunk5A2QQAF5_cjs.ChatPage,
|
|
25840
25840
|
{
|
|
25841
25841
|
chat: { ...chat, assistantMode: void 0, setAssistantMode: void 0 },
|
|
25842
25842
|
documentsRequired: false,
|
|
@@ -25898,127 +25898,127 @@ function ConnectedAgentChatPanel({
|
|
|
25898
25898
|
|
|
25899
25899
|
Object.defineProperty(exports, "CAP_REACHED_MESSAGE", {
|
|
25900
25900
|
enumerable: true,
|
|
25901
|
-
get: function () { return
|
|
25901
|
+
get: function () { return chunkYNSSIULM_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 chunkYNSSIULM_cjs.ZERO_BUDGET_MESSAGE; }
|
|
25906
25906
|
});
|
|
25907
25907
|
Object.defineProperty(exports, "aiUsageResetTimestamp", {
|
|
25908
25908
|
enumerable: true,
|
|
25909
|
-
get: function () { return
|
|
25909
|
+
get: function () { return chunkYNSSIULM_cjs.aiUsageResetTimestamp; }
|
|
25910
25910
|
});
|
|
25911
25911
|
Object.defineProperty(exports, "formatMoney", {
|
|
25912
25912
|
enumerable: true,
|
|
25913
|
-
get: function () { return
|
|
25913
|
+
get: function () { return chunkYNSSIULM_cjs.formatMoney; }
|
|
25914
25914
|
});
|
|
25915
25915
|
Object.defineProperty(exports, "formatResetDate", {
|
|
25916
25916
|
enumerable: true,
|
|
25917
|
-
get: function () { return
|
|
25917
|
+
get: function () { return chunkYNSSIULM_cjs.formatResetDate; }
|
|
25918
25918
|
});
|
|
25919
25919
|
Object.defineProperty(exports, "getQuotaItems", {
|
|
25920
25920
|
enumerable: true,
|
|
25921
|
-
get: function () { return
|
|
25921
|
+
get: function () { return chunkYNSSIULM_cjs.getQuotaItems; }
|
|
25922
25922
|
});
|
|
25923
25923
|
Object.defineProperty(exports, "isAddonBudgetZero", {
|
|
25924
25924
|
enumerable: true,
|
|
25925
|
-
get: function () { return
|
|
25925
|
+
get: function () { return chunkYNSSIULM_cjs.isAddonBudgetZero; }
|
|
25926
25926
|
});
|
|
25927
25927
|
Object.defineProperty(exports, "isProProject", {
|
|
25928
25928
|
enumerable: true,
|
|
25929
|
-
get: function () { return
|
|
25929
|
+
get: function () { return chunkYNSSIULM_cjs.isProProject; }
|
|
25930
25930
|
});
|
|
25931
25931
|
Object.defineProperty(exports, "planBadgeView", {
|
|
25932
25932
|
enumerable: true,
|
|
25933
|
-
get: function () { return
|
|
25933
|
+
get: function () { return chunkYNSSIULM_cjs.planBadgeView; }
|
|
25934
25934
|
});
|
|
25935
25935
|
Object.defineProperty(exports, "planName", {
|
|
25936
25936
|
enumerable: true,
|
|
25937
|
-
get: function () { return
|
|
25937
|
+
get: function () { return chunkYNSSIULM_cjs.planName; }
|
|
25938
25938
|
});
|
|
25939
25939
|
Object.defineProperty(exports, "projectGroupBilling", {
|
|
25940
25940
|
enumerable: true,
|
|
25941
|
-
get: function () { return
|
|
25941
|
+
get: function () { return chunkYNSSIULM_cjs.projectGroupBilling; }
|
|
25942
25942
|
});
|
|
25943
25943
|
Object.defineProperty(exports, "useBillingSupport", {
|
|
25944
25944
|
enumerable: true,
|
|
25945
|
-
get: function () { return
|
|
25945
|
+
get: function () { return chunkYNSSIULM_cjs.useBillingSupport; }
|
|
25946
25946
|
});
|
|
25947
25947
|
Object.defineProperty(exports, "useRewardBalance", {
|
|
25948
25948
|
enumerable: true,
|
|
25949
|
-
get: function () { return
|
|
25949
|
+
get: function () { return chunkYNSSIULM_cjs.useRewardBalance; }
|
|
25950
25950
|
});
|
|
25951
25951
|
Object.defineProperty(exports, "ConnectedAssistantDock", {
|
|
25952
25952
|
enumerable: true,
|
|
25953
|
-
get: function () { return
|
|
25953
|
+
get: function () { return chunkAYJZRBHG_cjs.ConnectedAssistantDock; }
|
|
25954
25954
|
});
|
|
25955
25955
|
Object.defineProperty(exports, "redlineStats", {
|
|
25956
25956
|
enumerable: true,
|
|
25957
|
-
get: function () { return
|
|
25957
|
+
get: function () { return chunkAYJZRBHG_cjs.redlineStats; }
|
|
25958
25958
|
});
|
|
25959
25959
|
Object.defineProperty(exports, "textToArtifact", {
|
|
25960
25960
|
enumerable: true,
|
|
25961
|
-
get: function () { return
|
|
25961
|
+
get: function () { return chunkAYJZRBHG_cjs.textToArtifact; }
|
|
25962
25962
|
});
|
|
25963
25963
|
Object.defineProperty(exports, "toRedlineMarkdown", {
|
|
25964
25964
|
enumerable: true,
|
|
25965
|
-
get: function () { return
|
|
25965
|
+
get: function () { return chunkAYJZRBHG_cjs.toRedlineMarkdown; }
|
|
25966
25966
|
});
|
|
25967
25967
|
Object.defineProperty(exports, "useConnectedAiTask", {
|
|
25968
25968
|
enumerable: true,
|
|
25969
|
-
get: function () { return
|
|
25969
|
+
get: function () { return chunkAYJZRBHG_cjs.useConnectedAiTask; }
|
|
25970
25970
|
});
|
|
25971
25971
|
Object.defineProperty(exports, "useConnectedChat", {
|
|
25972
25972
|
enumerable: true,
|
|
25973
|
-
get: function () { return
|
|
25973
|
+
get: function () { return chunkAYJZRBHG_cjs.useConnectedChat; }
|
|
25974
25974
|
});
|
|
25975
25975
|
Object.defineProperty(exports, "useSemanticSearch", {
|
|
25976
25976
|
enumerable: true,
|
|
25977
|
-
get: function () { return
|
|
25977
|
+
get: function () { return chunkAYJZRBHG_cjs.useSemanticSearch; }
|
|
25978
25978
|
});
|
|
25979
25979
|
Object.defineProperty(exports, "useWorkspaceDocs", {
|
|
25980
25980
|
enumerable: true,
|
|
25981
|
-
get: function () { return
|
|
25981
|
+
get: function () { return chunkAYJZRBHG_cjs.useWorkspaceDocs; }
|
|
25982
25982
|
});
|
|
25983
25983
|
Object.defineProperty(exports, "ConnectedWorkflowDocumentsField", {
|
|
25984
25984
|
enumerable: true,
|
|
25985
|
-
get: function () { return
|
|
25985
|
+
get: function () { return chunkPTSTVYQD_cjs.ConnectedWorkflowDocumentsField; }
|
|
25986
25986
|
});
|
|
25987
25987
|
Object.defineProperty(exports, "ConnectedWorkflowLauncher", {
|
|
25988
25988
|
enumerable: true,
|
|
25989
|
-
get: function () { return
|
|
25989
|
+
get: function () { return chunkPTSTVYQD_cjs.ConnectedWorkflowLauncher; }
|
|
25990
25990
|
});
|
|
25991
25991
|
Object.defineProperty(exports, "ConnectedWorkflowsTable", {
|
|
25992
25992
|
enumerable: true,
|
|
25993
|
-
get: function () { return
|
|
25993
|
+
get: function () { return chunkPTSTVYQD_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 chunkPTSTVYQD_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 chunkPTSTVYQD_cjs.toWorkflowFieldDocument; }
|
|
26002
26002
|
});
|
|
26003
26003
|
Object.defineProperty(exports, "useConnectedAgentOptions", {
|
|
26004
26004
|
enumerable: true,
|
|
26005
|
-
get: function () { return
|
|
26005
|
+
get: function () { return chunkPTSTVYQD_cjs.useConnectedAgentOptions; }
|
|
26006
26006
|
});
|
|
26007
26007
|
Object.defineProperty(exports, "useConnectedWorkflowScopeSource", {
|
|
26008
26008
|
enumerable: true,
|
|
26009
|
-
get: function () { return
|
|
26009
|
+
get: function () { return chunkPTSTVYQD_cjs.useConnectedWorkflowScopeSource; }
|
|
26010
26010
|
});
|
|
26011
26011
|
Object.defineProperty(exports, "useConnectedWorkspaceRole", {
|
|
26012
26012
|
enumerable: true,
|
|
26013
|
-
get: function () { return
|
|
26013
|
+
get: function () { return chunkPTSTVYQD_cjs.useConnectedWorkspaceRole; }
|
|
26014
26014
|
});
|
|
26015
26015
|
Object.defineProperty(exports, "useDocxCommentTarget", {
|
|
26016
26016
|
enumerable: true,
|
|
26017
|
-
get: function () { return
|
|
26017
|
+
get: function () { return chunkPTSTVYQD_cjs.useDocxCommentTarget; }
|
|
26018
26018
|
});
|
|
26019
26019
|
Object.defineProperty(exports, "useNativeDocxSupport", {
|
|
26020
26020
|
enumerable: true,
|
|
26021
|
-
get: function () { return
|
|
26021
|
+
get: function () { return chunkPTSTVYQD_cjs.useNativeDocxSupport; }
|
|
26022
26022
|
});
|
|
26023
26023
|
Object.defineProperty(exports, "ConnectedDocumentToolsProvider", {
|
|
26024
26024
|
enumerable: true,
|