@arbidocs/blocks 0.4.153 → 0.4.155
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-OFPIXNJB.js → ConnectedNativeDocxComparison-OLWRQSRS.js} +11 -11
- package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js.map → ConnectedNativeDocxComparison-OLWRQSRS.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs → ConnectedNativeDocxComparison-YORMOPPN.cjs} +12 -12
- package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs.map → ConnectedNativeDocxComparison-YORMOPPN.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js → ConnectedNativeDocxEditor-34EBIIFS.js} +10 -10
- package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js.map → ConnectedNativeDocxEditor-34EBIIFS.js.map} +1 -1
- package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs → ConnectedNativeDocxEditor-EHTWGGX3.cjs} +12 -12
- package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs.map → ConnectedNativeDocxEditor-EHTWGGX3.cjs.map} +1 -1
- package/dist/{ConnectedStreamedWordArtifact-QW74LKHN.cjs → ConnectedStreamedWordArtifact-5DK6QGYN.cjs} +12 -12
- package/dist/ConnectedStreamedWordArtifact-5DK6QGYN.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js → ConnectedStreamedWordArtifact-GLIDLSAS.js} +11 -11
- package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js.map → ConnectedStreamedWordArtifact-GLIDLSAS.js.map} +1 -1
- package/dist/WorkspaceTableView-5OWX53R5.js +376 -0
- package/dist/WorkspaceTableView-5OWX53R5.js.map +1 -0
- package/dist/WorkspaceTableView-ZFMAYHUD.cjs +378 -0
- package/dist/WorkspaceTableView-ZFMAYHUD.cjs.map +1 -0
- package/dist/agents/index.cjs +282 -282
- package/dist/agents/index.js +7 -7
- package/dist/{chunk-RQ2Y7USX.cjs → chunk-2VHYOTWW.cjs} +3 -3
- package/dist/chunk-2VHYOTWW.cjs.map +1 -0
- package/dist/{chunk-DTROMMDX.cjs → chunk-3VULDTNL.cjs} +4 -4
- package/dist/{chunk-DTROMMDX.cjs.map → chunk-3VULDTNL.cjs.map} +1 -1
- package/dist/{chunk-UTTTJSQU.cjs → chunk-4RPBUMHB.cjs} +4 -4
- package/dist/{chunk-UTTTJSQU.cjs.map → chunk-4RPBUMHB.cjs.map} +1 -1
- package/dist/chunk-53RCZPMR.cjs +496 -0
- package/dist/chunk-53RCZPMR.cjs.map +1 -0
- package/dist/chunk-5TDGVOR5.js +142 -0
- package/dist/chunk-5TDGVOR5.js.map +1 -0
- package/dist/chunk-6HMCF4AJ.js +1720 -0
- package/dist/chunk-6HMCF4AJ.js.map +1 -0
- package/dist/{chunk-CU2O32Z4.cjs → chunk-6QAAIDQQ.cjs} +62 -99
- package/dist/chunk-6QAAIDQQ.cjs.map +1 -0
- package/dist/chunk-7HHYMDPE.js +431 -0
- package/dist/chunk-7HHYMDPE.js.map +1 -0
- package/dist/{chunk-SMN32BQ3.cjs → chunk-7NL6WJER.cjs} +3 -160
- package/dist/chunk-7NL6WJER.cjs.map +1 -0
- package/dist/{chunk-IXWJGOM2.js → chunk-BQ77KSXU.js} +3 -3
- package/dist/{chunk-IXWJGOM2.js.map → chunk-BQ77KSXU.js.map} +1 -1
- package/dist/chunk-BTF4AZMG.js +148 -0
- package/dist/chunk-BTF4AZMG.js.map +1 -0
- package/dist/{chunk-HALD6ZB5.cjs → chunk-C3SMTA3C.cjs} +4 -4
- package/dist/{chunk-HALD6ZB5.cjs.map → chunk-C3SMTA3C.cjs.map} +1 -1
- package/dist/{chunk-GAYMJWTC.cjs → chunk-CB4TIDEX.cjs} +6 -6
- package/dist/{chunk-GAYMJWTC.cjs.map → chunk-CB4TIDEX.cjs.map} +1 -1
- package/dist/{chunk-KPZZ5FHE.cjs → chunk-CNHUJRQ4.cjs} +10 -6
- package/dist/chunk-CNHUJRQ4.cjs.map +1 -0
- package/dist/{chunk-Q4BY2CQQ.cjs → chunk-CQCNU5KT.cjs} +28 -28
- package/dist/{chunk-Q4BY2CQQ.cjs.map → chunk-CQCNU5KT.cjs.map} +1 -1
- package/dist/{chunk-GRGS5M6O.cjs → chunk-CROGFB46.cjs} +160 -3
- package/dist/chunk-CROGFB46.cjs.map +1 -0
- package/dist/{chunk-QN47Q4N7.js → chunk-CU6LDQ57.js} +3 -3
- package/dist/{chunk-QN47Q4N7.js.map → chunk-CU6LDQ57.js.map} +1 -1
- package/dist/{chunk-EF4ZLKRM.js → chunk-DEPF5LQI.js} +3 -3
- package/dist/{chunk-EF4ZLKRM.js.map → chunk-DEPF5LQI.js.map} +1 -1
- package/dist/{chunk-JAANWQGB.js → chunk-ETZ5A3GU.js} +3 -3
- package/dist/{chunk-JAANWQGB.js.map → chunk-ETZ5A3GU.js.map} +1 -1
- package/dist/{chunk-TBEVGWY3.js → chunk-F57LNUSZ.js} +10 -6
- package/dist/chunk-F57LNUSZ.js.map +1 -0
- package/dist/{chunk-GFNELPDP.cjs → chunk-FM3IRQJW.cjs} +10 -5
- package/dist/chunk-FM3IRQJW.cjs.map +1 -0
- package/dist/chunk-FPHTSNOE.js +465 -0
- package/dist/chunk-FPHTSNOE.js.map +1 -0
- package/dist/{chunk-OVR3XMYL.js → chunk-FYZXDZM7.js} +3 -3
- package/dist/{chunk-OVR3XMYL.js.map → chunk-FYZXDZM7.js.map} +1 -1
- package/dist/{chunk-2FLWPM3B.cjs → chunk-GC2FSPSQ.cjs} +7 -7
- package/dist/{chunk-2FLWPM3B.cjs.map → chunk-GC2FSPSQ.cjs.map} +1 -1
- package/dist/{chunk-DB2OXRQC.js → chunk-GO3BN76C.js} +7 -7
- package/dist/{chunk-DB2OXRQC.js.map → chunk-GO3BN76C.js.map} +1 -1
- package/dist/{chunk-XZIYRKLW.cjs → chunk-H32DV7XS.cjs} +5 -139
- package/dist/chunk-H32DV7XS.cjs.map +1 -0
- package/dist/{chunk-4236BRZK.js → chunk-HP2C4MD3.js} +29 -3
- package/dist/chunk-HP2C4MD3.js.map +1 -0
- package/dist/{chunk-ZP6Q3KXU.cjs → chunk-HUATKA3M.cjs} +4 -4
- package/dist/{chunk-ZP6Q3KXU.cjs.map → chunk-HUATKA3M.cjs.map} +1 -1
- package/dist/chunk-ISHFVKVU.js +304 -0
- package/dist/chunk-ISHFVKVU.js.map +1 -0
- package/dist/chunk-JUUOJP7I.cjs +164 -0
- package/dist/chunk-JUUOJP7I.cjs.map +1 -0
- package/dist/{chunk-4KMLM3GY.cjs → chunk-KBO75NLM.cjs} +7 -7
- package/dist/{chunk-4KMLM3GY.cjs.map → chunk-KBO75NLM.cjs.map} +1 -1
- package/dist/{chunk-Z4NQ3TED.js → chunk-KCSIX7CY.js} +3 -3
- package/dist/{chunk-Z4NQ3TED.js.map → chunk-KCSIX7CY.js.map} +1 -1
- package/dist/{chunk-DN2KI4BU.js → chunk-KDLX5AA7.js} +3 -3
- package/dist/{chunk-DN2KI4BU.js.map → chunk-KDLX5AA7.js.map} +1 -1
- package/dist/{chunk-WFA2GVZJ.js → chunk-MF5KQ4PS.js} +3 -3
- package/dist/{chunk-WFA2GVZJ.js.map → chunk-MF5KQ4PS.js.map} +1 -1
- package/dist/{chunk-YXNNNP57.js → chunk-MNG7N6M2.js} +4 -4
- package/dist/{chunk-YXNNNP57.js.map → chunk-MNG7N6M2.js.map} +1 -1
- package/dist/chunk-MSFQDELO.cjs +482 -0
- package/dist/chunk-MSFQDELO.cjs.map +1 -0
- package/dist/{chunk-T74Q3MCZ.cjs → chunk-MUDEL7UL.cjs} +25 -884
- package/dist/chunk-MUDEL7UL.cjs.map +1 -0
- package/dist/{chunk-KSHKTOY2.js → chunk-NUSBINUM.js} +3 -3
- package/dist/chunk-NUSBINUM.js.map +1 -0
- package/dist/{chunk-EYKISBDO.cjs → chunk-OALEDG67.cjs} +5 -5
- package/dist/{chunk-EYKISBDO.cjs.map → chunk-OALEDG67.cjs.map} +1 -1
- package/dist/{chunk-COCGRJLA.cjs → chunk-OFV3PRF2.cjs} +7 -7
- package/dist/{chunk-COCGRJLA.cjs.map → chunk-OFV3PRF2.cjs.map} +1 -1
- package/dist/chunk-OOU4QLRK.cjs +319 -0
- package/dist/chunk-OOU4QLRK.cjs.map +1 -0
- package/dist/chunk-OU3RGQFX.cjs +136 -0
- package/dist/chunk-OU3RGQFX.cjs.map +1 -0
- package/dist/{chunk-3PCBYOIZ.js → chunk-P6RIBIVN.js} +38 -7
- package/dist/chunk-P6RIBIVN.js.map +1 -0
- package/dist/{chunk-LXTOOUEN.cjs → chunk-Q7CQYYZW.cjs} +5 -5
- package/dist/{chunk-LXTOOUEN.cjs.map → chunk-Q7CQYYZW.cjs.map} +1 -1
- package/dist/{chunk-CROTH2BS.js → chunk-QKR5LWDO.js} +9 -40
- package/dist/{chunk-CROTH2BS.js.map → chunk-QKR5LWDO.js.map} +1 -1
- package/dist/chunk-REH7PX3N.cjs +145 -0
- package/dist/chunk-REH7PX3N.cjs.map +1 -0
- package/dist/chunk-RQKWYKZY.js +127 -0
- package/dist/chunk-RQKWYKZY.js.map +1 -0
- package/dist/{chunk-U6JQ4KMX.cjs → chunk-SN2GZ4ZM.cjs} +29 -2
- package/dist/chunk-SN2GZ4ZM.cjs.map +1 -0
- package/dist/{chunk-R6VCPDPF.js → chunk-SZSJGZSO.js} +156 -6
- package/dist/chunk-SZSJGZSO.js.map +1 -0
- package/dist/{chunk-US3S4DCB.js → chunk-TF7HN5EU.js} +10 -5
- package/dist/chunk-TF7HN5EU.js.map +1 -0
- package/dist/{chunk-YKQ2DPIP.js → chunk-VF5EUAIV.js} +3 -3
- package/dist/{chunk-YKQ2DPIP.js.map → chunk-VF5EUAIV.js.map} +1 -1
- package/dist/{chunk-KMZWKSKO.cjs → chunk-VZPFYZZU.cjs} +4 -4
- package/dist/{chunk-KMZWKSKO.cjs.map → chunk-VZPFYZZU.cjs.map} +1 -1
- package/dist/{chunk-HUJF2XM2.js → chunk-W7CWGURO.js} +28 -873
- package/dist/chunk-W7CWGURO.js.map +1 -0
- package/dist/{chunk-ZLEYLCE4.js → chunk-WK6FVIF7.js} +6 -156
- package/dist/chunk-WK6FVIF7.js.map +1 -0
- package/dist/chunk-WV4TD2HZ.cjs +1785 -0
- package/dist/chunk-WV4TD2HZ.cjs.map +1 -0
- package/dist/{chunk-COA3S3CZ.js → chunk-XI37A7HH.js} +4 -4
- package/dist/{chunk-COA3S3CZ.js.map → chunk-XI37A7HH.js.map} +1 -1
- package/dist/{chunk-LGBAZD37.js → chunk-XRL4R2TT.js} +7 -139
- package/dist/chunk-XRL4R2TT.js.map +1 -0
- package/dist/{chunk-4JNKXOFZ.cjs → chunk-YBJ4QGNH.cjs} +11 -11
- package/dist/{chunk-4JNKXOFZ.cjs.map → chunk-YBJ4QGNH.cjs.map} +1 -1
- package/dist/{chunk-GFOEWPAP.cjs → chunk-YF3QUHKN.cjs} +49 -12
- package/dist/chunk-YF3QUHKN.cjs.map +1 -0
- package/dist/{chunk-H4D7WKDY.js → chunk-YNMO3DSR.js} +3 -3
- package/dist/{chunk-H4D7WKDY.js.map → chunk-YNMO3DSR.js.map} +1 -1
- package/dist/citations/index.cjs +10 -10
- package/dist/citations/index.js +2 -2
- package/dist/collaboration/index.cjs +77 -77
- package/dist/collaboration/index.js +2 -2
- package/dist/connect/docx.cjs +14 -14
- package/dist/connect/docx.js +10 -10
- package/dist/connect/index.cjs +2820 -1043
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +4 -0
- package/dist/connect/index.js +2216 -504
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/viewer.cjs +68 -72
- package/dist/connect/viewer.cjs.map +1 -1
- package/dist/connect/viewer.js +11 -15
- package/dist/connect/viewer.js.map +1 -1
- package/dist/connection/ConnectionProvider.d.ts +7 -0
- package/dist/connection/files/DocumentSyncGlyph.d.ts +28 -0
- package/dist/connection/files/explorer/ConnectedFilesExplorer.d.ts +56 -0
- package/dist/connection/files/explorer/FileTiles.d.ts +87 -0
- package/dist/connection/files/index.d.ts +5 -0
- package/dist/connection/files/store.d.ts +27 -0
- package/dist/connection/files/support.d.ts +38 -0
- package/dist/connection/projects/ConnectedProjectsPanel.d.ts +34 -0
- package/dist/connection/projects/index.d.ts +1 -0
- package/dist/connection/workspace-dashboard/ConnectedWorkspaceDashboard.d.ts +37 -0
- package/dist/connection/workspace-dashboard/dashboard-rows.d.ts +42 -0
- package/dist/connection/workspace-dashboard/index.d.ts +1 -0
- package/dist/connection/workspace-list/ConnectedWorkspaceList.d.ts +37 -0
- package/dist/connection/workspace-list/WorkspaceCardsView.d.ts +15 -0
- package/dist/connection/workspace-list/WorkspaceFilterMenu.d.ts +4 -0
- package/dist/connection/workspace-list/WorkspaceTableView.d.ts +13 -0
- package/dist/connection/workspace-list/index.d.ts +5 -0
- package/dist/connection/workspace-list/projectBilling.d.ts +21 -0
- package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +251 -0
- package/dist/connection/workspace-list/workspaceTable.d.ts +58 -0
- package/dist/connection/workspace-settings/ConnectedWorkspaceMembers.d.ts +26 -0
- package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +7 -9
- package/dist/connection/workspace-settings/index.d.ts +2 -1
- package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +0 -1
- package/dist/facts/index.cjs +3 -3
- package/dist/facts/index.js +2 -2
- package/dist/files/DocStatusIcon.d.ts +5 -4
- package/dist/files/FailedStageIcon.d.ts +26 -0
- package/dist/files/folders/FolderProviderIcon.d.ts +29 -0
- package/dist/files/folders/folderPaths.d.ts +86 -0
- package/dist/files/folders/index.d.ts +2 -0
- package/dist/files/index.cjs +328 -240
- package/dist/files/index.d.ts +5 -0
- package/dist/files/index.js +4 -4
- package/dist/files/permissions.d.ts +28 -0
- package/dist/files/recently-deleted.d.ts +7 -0
- package/dist/files/visibility.d.ts +31 -0
- package/dist/home/index.cjs +119 -459
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +13 -419
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +480 -480
- package/dist/index.js +16 -16
- package/dist/provider/BlocksProvider.d.ts +9 -1
- package/dist/retrieval/index.cjs +4 -4
- package/dist/retrieval/index.js +2 -2
- package/dist/settings/index.cjs +169 -165
- package/dist/settings/index.d.ts +1 -0
- package/dist/settings/index.js +2 -2
- package/dist/settings/tri-state-filters.d.ts +13 -0
- package/dist/shell/index.cjs +44 -44
- package/dist/shell/index.js +3 -3
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +14 -14
- package/dist/studio/index.js +6 -6
- package/dist/workflow-canvas/index.cjs +27 -27
- package/dist/workflow-canvas/index.js +9 -9
- package/dist/workspaces/index.cjs +110 -369
- package/dist/workspaces/index.cjs.map +1 -1
- package/dist/workspaces/index.d.ts +2 -0
- package/dist/workspaces/index.js +12 -350
- package/dist/workspaces/index.js.map +1 -1
- package/dist/workspaces/workspace-groups.d.ts +90 -0
- package/dist/workspaces/workspace-roles.d.ts +11 -0
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +6 -5
- package/dist/ConnectedStreamedWordArtifact-QW74LKHN.cjs.map +0 -1
- package/dist/chunk-3PCBYOIZ.js.map +0 -1
- package/dist/chunk-4236BRZK.js.map +0 -1
- package/dist/chunk-CU2O32Z4.cjs.map +0 -1
- package/dist/chunk-EV7W64B6.js +0 -134
- package/dist/chunk-EV7W64B6.js.map +0 -1
- package/dist/chunk-GFNELPDP.cjs.map +0 -1
- package/dist/chunk-GFOEWPAP.cjs.map +0 -1
- package/dist/chunk-GRGS5M6O.cjs.map +0 -1
- package/dist/chunk-HUJF2XM2.js.map +0 -1
- package/dist/chunk-JGOST4IL.js +0 -648
- package/dist/chunk-JGOST4IL.js.map +0 -1
- package/dist/chunk-KPZZ5FHE.cjs.map +0 -1
- package/dist/chunk-KSHKTOY2.js.map +0 -1
- package/dist/chunk-LGBAZD37.js.map +0 -1
- package/dist/chunk-R6VCPDPF.js.map +0 -1
- package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
- package/dist/chunk-RXK3XP62.cjs +0 -144
- package/dist/chunk-RXK3XP62.cjs.map +0 -1
- package/dist/chunk-SMN32BQ3.cjs.map +0 -1
- package/dist/chunk-T74Q3MCZ.cjs.map +0 -1
- package/dist/chunk-TBEVGWY3.js.map +0 -1
- package/dist/chunk-U6JQ4KMX.cjs.map +0 -1
- package/dist/chunk-US3S4DCB.js.map +0 -1
- package/dist/chunk-XZIYRKLW.cjs.map +0 -1
- package/dist/chunk-YAEXSCUW.cjs +0 -677
- package/dist/chunk-YAEXSCUW.cjs.map +0 -1
- package/dist/chunk-ZLEYLCE4.js.map +0 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
// src/workspaces/workspace-type.ts
|
|
3
|
+
function getHumanUserCount(users) {
|
|
4
|
+
if (!users) return 0;
|
|
5
|
+
return users.filter((u) => !u.agent_ext_id).length;
|
|
6
|
+
}
|
|
7
|
+
function getWorkspaceTypeInfo(isPublic, userCount) {
|
|
8
|
+
if (isPublic) {
|
|
9
|
+
return { type: "Common", variant: "gray" };
|
|
10
|
+
}
|
|
11
|
+
if (userCount > 1) {
|
|
12
|
+
return { type: "Group", variant: "secondary" };
|
|
13
|
+
}
|
|
14
|
+
return { type: "Individual", variant: "primary" };
|
|
15
|
+
}
|
|
16
|
+
function getVariantBgClass(variant) {
|
|
17
|
+
switch (variant) {
|
|
18
|
+
case "primary":
|
|
19
|
+
return "bg-primary";
|
|
20
|
+
case "secondary":
|
|
21
|
+
return "bg-secondary";
|
|
22
|
+
case "gray":
|
|
23
|
+
return "bg-gray-600";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function getVariantBorderClass(variant) {
|
|
27
|
+
switch (variant) {
|
|
28
|
+
case "primary":
|
|
29
|
+
return "border-primary";
|
|
30
|
+
case "secondary":
|
|
31
|
+
return "border-secondary";
|
|
32
|
+
case "gray":
|
|
33
|
+
return "border-gray-600";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// src/workspaces/workspace-groups.ts
|
|
38
|
+
var NO_PROJECT_GROUP_KEY = "__none__";
|
|
39
|
+
var isListedWorkspace = (workspace) => workspace.workspace_type !== "skills";
|
|
40
|
+
var byPinThenName = (pinned) => (a, b) => {
|
|
41
|
+
const aPinned = pinned.has(a.external_id);
|
|
42
|
+
const bPinned = pinned.has(b.external_id);
|
|
43
|
+
if (aPinned !== bPinned) return aPinned ? -1 : 1;
|
|
44
|
+
return a.name.localeCompare(b.name);
|
|
45
|
+
};
|
|
46
|
+
function groupWorkspacesByProject(workspaces, {
|
|
47
|
+
selfId,
|
|
48
|
+
pinned = /* @__PURE__ */ new Set(),
|
|
49
|
+
projects = [],
|
|
50
|
+
workspacesLabel = "Workspaces"
|
|
51
|
+
}) {
|
|
52
|
+
const byProject = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const workspace of workspaces) {
|
|
54
|
+
const key = workspace.project_ext_id ?? null;
|
|
55
|
+
const list = byProject.get(key);
|
|
56
|
+
if (list) list.push(workspace);
|
|
57
|
+
else byProject.set(key, [workspace]);
|
|
58
|
+
}
|
|
59
|
+
const projectById = new Map(projects.map((p) => [p.external_id, p]));
|
|
60
|
+
const groups = [];
|
|
61
|
+
for (const [projectExtId, list] of byProject) {
|
|
62
|
+
const first = list[0];
|
|
63
|
+
const isOwned = !!projectExtId && first.project_owner_ext_id === selfId;
|
|
64
|
+
const isCommon = !projectExtId && !list.some((w) => w.is_member);
|
|
65
|
+
const name = projectExtId ? projectById.get(projectExtId)?.name || first.project_name || null : null;
|
|
66
|
+
groups.push({
|
|
67
|
+
key: projectExtId ?? NO_PROJECT_GROUP_KEY,
|
|
68
|
+
projectExtId,
|
|
69
|
+
title: projectExtId ? name || (isOwned ? "Personal" : "Unnamed project") : isCommon ? "Common" : workspacesLabel,
|
|
70
|
+
isOwned,
|
|
71
|
+
isCommon,
|
|
72
|
+
workspaces: [...list].sort(byPinThenName(pinned))
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
groups.sort((a, b) => {
|
|
76
|
+
if (!a.projectExtId !== !b.projectExtId) return a.projectExtId ? -1 : 1;
|
|
77
|
+
if (a.isOwned !== b.isOwned) return a.isOwned ? -1 : 1;
|
|
78
|
+
return a.title.localeCompare(b.title);
|
|
79
|
+
});
|
|
80
|
+
const empty = projects.filter((p) => p.created_by === selfId && !byProject.has(p.external_id)).map((p) => ({
|
|
81
|
+
key: p.external_id,
|
|
82
|
+
projectExtId: p.external_id,
|
|
83
|
+
title: p.name || "Personal",
|
|
84
|
+
isOwned: true,
|
|
85
|
+
isCommon: false,
|
|
86
|
+
workspaces: []
|
|
87
|
+
}));
|
|
88
|
+
const ownedCount = groups.filter((g) => g.isOwned).length;
|
|
89
|
+
groups.splice(ownedCount, 0, ...empty);
|
|
90
|
+
return groups;
|
|
91
|
+
}
|
|
92
|
+
function byRecentUpdate(a, b) {
|
|
93
|
+
const time = (w) => {
|
|
94
|
+
const t = Date.parse(w.updated_at ?? "");
|
|
95
|
+
return Number.isNaN(t) ? 0 : t;
|
|
96
|
+
};
|
|
97
|
+
return time(b) - time(a);
|
|
98
|
+
}
|
|
99
|
+
var workspaceDocumentCount = (w) => (w.shared_document_count ?? 0) + (w.private_document_count ?? 0);
|
|
100
|
+
var workspaceConversationCount = (w) => (w.shared_conversation_count ?? 0) + (w.private_conversation_count ?? 0);
|
|
101
|
+
var isAgentAccount = (user) => user.external_id.startsWith("agt-");
|
|
102
|
+
function workspaceGroupStats(workspaces) {
|
|
103
|
+
let documents = 0;
|
|
104
|
+
let conversations = 0;
|
|
105
|
+
let updatedAt = "";
|
|
106
|
+
const members = /* @__PURE__ */ new Set();
|
|
107
|
+
for (const workspace of workspaces) {
|
|
108
|
+
documents += workspaceDocumentCount(workspace);
|
|
109
|
+
conversations += workspaceConversationCount(workspace);
|
|
110
|
+
const at = workspace.updated_at || workspace.created_at || "";
|
|
111
|
+
if (at > updatedAt) updatedAt = at;
|
|
112
|
+
for (const member of workspace.users ?? []) {
|
|
113
|
+
if (isAgentAccount(member.user)) continue;
|
|
114
|
+
members.add(member.user.external_id || member.user.email);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
workspaces: workspaces.length,
|
|
119
|
+
documents,
|
|
120
|
+
conversations,
|
|
121
|
+
members: members.size,
|
|
122
|
+
updatedAt
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
var WORKSPACE_CATEGORY_FILTERS = [
|
|
126
|
+
{ id: "owned", label: "Owned by me" },
|
|
127
|
+
{ id: "pinned", label: "Pinned" },
|
|
128
|
+
{ id: "individual", label: "Individual" },
|
|
129
|
+
{ id: "group", label: "Group" },
|
|
130
|
+
{ id: "common", label: "Common" }
|
|
131
|
+
];
|
|
132
|
+
var projectFilterId = (projectExtId) => `project:${projectExtId}`;
|
|
133
|
+
function workspaceFilterAttributes(workspace, { selfId, pinned }) {
|
|
134
|
+
const { type } = getWorkspaceTypeInfo(workspace.is_public, getHumanUserCount(workspace.users));
|
|
135
|
+
const attributes = {
|
|
136
|
+
individual: type === "Individual",
|
|
137
|
+
group: type === "Group",
|
|
138
|
+
common: type === "Common",
|
|
139
|
+
pinned: pinned.has(workspace.external_id),
|
|
140
|
+
owned: workspace.created_by_ext_id === selfId
|
|
141
|
+
};
|
|
142
|
+
if (workspace.project_ext_id) attributes[projectFilterId(workspace.project_ext_id)] = true;
|
|
143
|
+
return attributes;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export { NO_PROJECT_GROUP_KEY, WORKSPACE_CATEGORY_FILTERS, byRecentUpdate, getHumanUserCount, getVariantBgClass, getVariantBorderClass, getWorkspaceTypeInfo, groupWorkspacesByProject, isAgentAccount, isListedWorkspace, projectFilterId, workspaceConversationCount, workspaceDocumentCount, workspaceFilterAttributes, workspaceGroupStats };
|
|
147
|
+
//# sourceMappingURL=chunk-BTF4AZMG.js.map
|
|
148
|
+
//# sourceMappingURL=chunk-BTF4AZMG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/workspaces/workspace-type.ts","../src/workspaces/workspace-groups.ts"],"names":[],"mappings":"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","file":"chunk-BTF4AZMG.js","sourcesContent":["/**\n * Workspace Type Utilities\n *\n * Helper functions for determining workspace type information.\n */\n\nexport type WorkspaceVariant = 'primary' | 'secondary' | 'gray'\n\n/**\n * Count non-agent users in a workspace.\n * Workspace users with agent_ext_id are agents and should not count\n * for determining workspace type (individual vs group).\n */\nexport function getHumanUserCount(users?: { agent_ext_id?: string | null }[]): number {\n if (!users) return 0\n return users.filter((u) => !u.agent_ext_id).length\n}\n\n/**\n * Helper to determine workspace type and variant\n */\nexport function getWorkspaceTypeInfo(\n isPublic: boolean,\n userCount: number\n): { type: string; variant: WorkspaceVariant } {\n if (isPublic) {\n return { type: 'Common', variant: 'gray' }\n }\n if (userCount > 1) {\n return { type: 'Group', variant: 'secondary' }\n }\n return { type: 'Individual', variant: 'primary' }\n}\n\n/**\n * Returns the Tailwind background color class for a workspace type variant\n */\nexport function getVariantBgClass(variant: WorkspaceVariant): string {\n switch (variant) {\n case 'primary':\n return 'bg-primary'\n case 'secondary':\n return 'bg-secondary'\n case 'gray':\n return 'bg-gray-600'\n }\n}\n\n/**\n * Returns the Tailwind border color class for a workspace type variant\n */\nexport function getVariantBorderClass(variant: WorkspaceVariant): string {\n switch (variant) {\n case 'primary':\n return 'border-primary'\n case 'secondary':\n return 'border-secondary'\n case 'gray':\n return 'border-gray-600'\n }\n}\n","/**\n * The user's workspaces grouped by project, as the workspace list shows them (cards and table\n * alike): one group per project, the user's own projects first (an owned project with no\n * workspace yet still gets its group, to invite the first one), other people's projects by name,\n * and the workspaces with no visible project last. Plus the tri-state filter over the list\n * (projects and workspace categories) and the totals a group's heading shows.\n *\n * Pure: a host maps nothing; these read the API's workspace and project records as they come.\n */\nimport type { components } from '@arbidocs/client'\nimport { getHumanUserCount, getWorkspaceTypeInfo } from './workspace-type'\n\nexport type GroupedWorkspace = components['schemas']['WorkspaceResponse']\ntype Project = Pick<\n components['schemas']['ProjectResponse'],\n 'external_id' | 'name' | 'subscription' | 'created_by'\n>\n\n/** Group key of the workspaces that have no visible project. */\nexport const NO_PROJECT_GROUP_KEY = '__none__'\n\nexport interface WorkspaceProjectGroup {\n /** Stable key (the project's id, or `NO_PROJECT_GROUP_KEY`): collapse state and row ids. */\n key: string\n projectExtId: string | null\n /** The project's name with the fallbacks applied (\"Personal\", \"Common\", \"Workspaces\"…). */\n title: string\n /** The user owns the project. */\n isOwned: boolean\n /**\n * The no-project group of public workspaces the user is not a member of (\"Common\"): shared\n * with everyone, so it starts collapsed.\n */\n isCommon: boolean\n /** Pinned first, then by name. */\n workspaces: GroupedWorkspace[]\n}\n\nexport interface GroupWorkspacesOptions {\n /** The signed-in user (`usr-…`): whose projects and workspaces are \"own\". */\n selfId: string | undefined\n /** Pinned workspace ids: first within their group. */\n pinned?: ReadonlySet<string>\n /** The user's projects: fresher names, and a group for each owned project with no workspace. */\n projects?: readonly Project[]\n /** The plural word for workspaces (the own no-project group's title). */\n workspacesLabel?: string\n}\n\n/** The skills marketplace is a system workspace: reached through the skills UI, never listed. */\nexport const isListedWorkspace = (workspace: Pick<GroupedWorkspace, 'workspace_type'>): boolean =>\n workspace.workspace_type !== 'skills'\n\nconst byPinThenName =\n (pinned: ReadonlySet<string>) => (a: GroupedWorkspace, b: GroupedWorkspace) => {\n const aPinned = pinned.has(a.external_id)\n const bPinned = pinned.has(b.external_id)\n if (aPinned !== bPinned) return aPinned ? -1 : 1\n return a.name.localeCompare(b.name)\n }\n\n/**\n * Group `workspaces` (already filtered) by project. The order: own projects (by name, then the\n * own projects with no workspace), other people's projects by name, the no-project group last.\n */\nexport function groupWorkspacesByProject(\n workspaces: readonly GroupedWorkspace[],\n {\n selfId,\n pinned = new Set(),\n projects = [],\n workspacesLabel = 'Workspaces',\n }: GroupWorkspacesOptions\n): WorkspaceProjectGroup[] {\n const byProject = new Map<string | null, GroupedWorkspace[]>()\n for (const workspace of workspaces) {\n const key = workspace.project_ext_id ?? null\n const list = byProject.get(key)\n if (list) list.push(workspace)\n else byProject.set(key, [workspace])\n }\n\n const projectById = new Map(projects.map((p) => [p.external_id, p]))\n const groups: WorkspaceProjectGroup[] = []\n for (const [projectExtId, list] of byProject) {\n const first = list[0]\n const isOwned = !!projectExtId && first.project_owner_ext_id === selfId\n const isCommon = !projectExtId && !list.some((w) => w.is_member)\n const name = projectExtId\n ? projectById.get(projectExtId)?.name || first.project_name || null\n : null\n groups.push({\n key: projectExtId ?? NO_PROJECT_GROUP_KEY,\n projectExtId,\n title: projectExtId\n ? name || (isOwned ? 'Personal' : 'Unnamed project')\n : isCommon\n ? 'Common'\n : workspacesLabel,\n isOwned,\n isCommon,\n workspaces: [...list].sort(byPinThenName(pinned)),\n })\n }\n\n groups.sort((a, b) => {\n if (!a.projectExtId !== !b.projectExtId) return a.projectExtId ? -1 : 1\n if (a.isOwned !== b.isOwned) return a.isOwned ? -1 : 1\n return a.title.localeCompare(b.title)\n })\n\n // An own project with no workspace yet keeps its group (after the own projects with some).\n const empty = projects\n .filter((p) => p.created_by === selfId && !byProject.has(p.external_id))\n .map<WorkspaceProjectGroup>((p) => ({\n key: p.external_id,\n projectExtId: p.external_id,\n title: p.name || 'Personal',\n isOwned: true,\n isCommon: false,\n workspaces: [],\n }))\n const ownedCount = groups.filter((g) => g.isOwned).length\n groups.splice(ownedCount, 0, ...empty)\n return groups\n}\n\n/** Most recently updated first (the cards' order within a group). */\nexport function byRecentUpdate(a: GroupedWorkspace, b: GroupedWorkspace): number {\n const time = (w: GroupedWorkspace) => {\n const t = Date.parse(w.updated_at ?? '')\n return Number.isNaN(t) ? 0 : t\n }\n return time(b) - time(a)\n}\n\n/** What a group's heading reports about its workspaces: sums, and distinct people (no agents). */\nexport interface WorkspaceGroupStats {\n workspaces: number\n documents: number\n conversations: number\n members: number\n /** The most recent activity (ISO), `''` when none. */\n updatedAt: string\n}\n\nexport const workspaceDocumentCount = (w: GroupedWorkspace): number =>\n (w.shared_document_count ?? 0) + (w.private_document_count ?? 0)\n\nexport const workspaceConversationCount = (w: GroupedWorkspace): number =>\n (w.shared_conversation_count ?? 0) + (w.private_conversation_count ?? 0)\n\n/** An agent account (`agt-…`): kept out of member counts and faces. */\nexport const isAgentAccount = (user: { external_id: string }): boolean =>\n user.external_id.startsWith('agt-')\n\nexport function workspaceGroupStats(workspaces: readonly GroupedWorkspace[]): WorkspaceGroupStats {\n let documents = 0\n let conversations = 0\n let updatedAt = ''\n const members = new Set<string>()\n for (const workspace of workspaces) {\n documents += workspaceDocumentCount(workspace)\n conversations += workspaceConversationCount(workspace)\n const at = workspace.updated_at || workspace.created_at || ''\n if (at > updatedAt) updatedAt = at\n for (const member of workspace.users ?? []) {\n if (isAgentAccount(member.user)) continue\n members.add(member.user.external_id || member.user.email)\n }\n }\n return {\n workspaces: workspaces.length,\n documents,\n conversations,\n members: members.size,\n updatedAt,\n }\n}\n\n// ── Filtering ────────────────────────────────────────────────────────────────\n\n/** The category filters, in menu order. */\nexport const WORKSPACE_CATEGORY_FILTERS = [\n { id: 'owned', label: 'Owned by me' },\n { id: 'pinned', label: 'Pinned' },\n { id: 'individual', label: 'Individual' },\n { id: 'group', label: 'Group' },\n { id: 'common', label: 'Common' },\n] as const\n\n/** A project filter's id. */\nexport const projectFilterId = (projectExtId: string): string => `project:${projectExtId}`\n\n/** Which filters a workspace matches: its category, pinned, owned, and its project. */\nexport function workspaceFilterAttributes(\n workspace: GroupedWorkspace,\n { selfId, pinned }: { selfId: string | undefined; pinned: ReadonlySet<string> }\n): Record<string, boolean> {\n const { type } = getWorkspaceTypeInfo(workspace.is_public, getHumanUserCount(workspace.users))\n const attributes: Record<string, boolean> = {\n individual: type === 'Individual',\n group: type === 'Group',\n common: type === 'Common',\n pinned: pinned.has(workspace.external_id),\n owned: workspace.created_by_ext_id === selfId,\n }\n if (workspace.project_ext_id) attributes[projectFilterId(workspace.project_ext_id)] = true\n return attributes\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkCQCNU5KT_cjs = require('./chunk-CQCNU5KT.cjs');
|
|
5
5
|
var chunkKUT2Y7JF_cjs = require('./chunk-KUT2Y7JF.cjs');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
|
|
@@ -9,10 +9,10 @@ function ConnectedStreamedWordArtifact({
|
|
|
9
9
|
fontBaseUrl,
|
|
10
10
|
...props
|
|
11
11
|
}) {
|
|
12
|
-
const adapter =
|
|
12
|
+
const adapter = chunkCQCNU5KT_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
|
|
13
13
|
return /* @__PURE__ */ jsxRuntime.jsx(chunkKUT2Y7JF_cjs.StreamedWordArtifact, { ...props, adapter });
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
exports.ConnectedStreamedWordArtifact = ConnectedStreamedWordArtifact;
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
18
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-C3SMTA3C.cjs.map
|
|
18
|
+
//# sourceMappingURL=chunk-C3SMTA3C.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/docx/ConnectedStreamedWordArtifact.tsx"],"names":["useConnectedNativeDocxAdapter","jsx","StreamedWordArtifact"],"mappings":";;;;;;AAMO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0E;AACxE,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,uBAAOC,cAAA,CAACC,sCAAA,EAAA,EAAsB,GAAG,KAAA,EAAO,OAAA,EAAkB,CAAA;AAC5D","file":"chunk-C3SMTA3C.cjs","sourcesContent":["import { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\nimport {\n StreamedWordArtifact,\n type StreamedWordArtifactProps,\n} from '../../docx/StreamedWordArtifact'\n\nexport function ConnectedStreamedWordArtifact({\n fontBaseUrl,\n ...props\n}: Omit<StreamedWordArtifactProps, 'adapter'> & { fontBaseUrl?: string }) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n return <StreamedWordArtifact {...props} adapter={adapter} />\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkFM3IRQJW_cjs = require('./chunk-FM3IRQJW.cjs');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var react$1 = require('@arbidocs/react');
|
|
7
7
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -26,7 +26,7 @@ function useList(hosted, own) {
|
|
|
26
26
|
);
|
|
27
27
|
}
|
|
28
28
|
function useConnectedDocuments() {
|
|
29
|
-
const { workspaceId } =
|
|
29
|
+
const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
30
30
|
const { data, isFetched } = react$1.useDocuments(workspaceId);
|
|
31
31
|
return react.useMemo(
|
|
32
32
|
() => ({ data: data ?? EMPTY, loaded: isFetched }),
|
|
@@ -35,13 +35,13 @@ function useConnectedDocuments() {
|
|
|
35
35
|
}
|
|
36
36
|
function useConnectedTags() {
|
|
37
37
|
const hosted = react.useContext(WorkspaceDataContext).tags;
|
|
38
|
-
const { workspaceId } =
|
|
38
|
+
const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
39
39
|
const own = react$1.useTags(workspaceId ?? void 0, { enabled: !hosted });
|
|
40
40
|
return useList(hosted, own);
|
|
41
41
|
}
|
|
42
42
|
function useConnectedConversations(options) {
|
|
43
43
|
const hosted = react.useContext(WorkspaceDataContext).conversations;
|
|
44
|
-
const { workspaceId } =
|
|
44
|
+
const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
45
45
|
const own = react$1.useConversations(workspaceId ?? void 0, { enabled: !hosted, live: options?.live });
|
|
46
46
|
return useList(hosted, own);
|
|
47
47
|
}
|
|
@@ -50,5 +50,5 @@ exports.ConnectedWorkspaceDataProvider = ConnectedWorkspaceDataProvider;
|
|
|
50
50
|
exports.useConnectedConversations = useConnectedConversations;
|
|
51
51
|
exports.useConnectedDocuments = useConnectedDocuments;
|
|
52
52
|
exports.useConnectedTags = useConnectedTags;
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-CB4TIDEX.cjs.map
|
|
54
|
+
//# sourceMappingURL=chunk-CB4TIDEX.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/connection/workspaceData.tsx"],"names":["createContext","useMemo","jsx","useConnectedWorkspace","useDocuments","useContext","useTags","useConversations"],"mappings":";;;;;;;AA+BA,IAAM,oBAAA,GAAuBA,mBAAA,CAAsC,EAAE,CAAA;AAE9D,SAAS,8BAAA,CAA+B;AAAA,EAC7C,IAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAqD;AACnD,EAAA,MAAM,KAAA,GAAQC,aAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,eAAc,CAAA,EAAI,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAC5E,EAAA,uBAAOC,cAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,OAAe,QAAA,EAAS,CAAA;AAChE;AASA,IAAM,QAAiB,EAAC;AAExB,SAAS,OAAA,CACP,QACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAA,IAAU,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAS,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,GAAA,CAAI,OAAA;AAC9C,EAAA,OAAOD,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,WAAW,OAAA,EAAQ,CAAA;AAAA,IACjD,CAAC,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,OAAO;AAAA,GAClC;AACF;AAGO,SAAS,qBAAA,GAAgE;AAC9E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIE,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIC,qBAAa,WAAW,CAAA;AACpD,EAAA,OAAOH,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,IAAA,IAAS,KAAA,EAA+B,QAAQ,SAAA,EAAU,CAAA;AAAA,IACzE,CAAC,MAAM,SAAS;AAAA,GAClB;AACF;AAGO,SAAS,gBAAA,GAAsD;AACpE,EAAA,MAAM,MAAA,GAASI,gBAAA,CAAW,oBAAoB,CAAA,CAAE,IAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMG,gBAAQ,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,QAAQ,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B;AAMO,SAAS,0BAA0B,OAAA,EAEK;AAC7C,EAAA,MAAM,MAAA,GAASD,gBAAA,CAAW,oBAAoB,CAAA,CAAE,aAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMI,wBAAA,CAAiB,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,CAAA;AAChG,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/connection/workspaceData.tsx"],"names":["createContext","useMemo","jsx","useConnectedWorkspace","useDocuments","useContext","useTags","useConversations"],"mappings":";;;;;;;AA+BA,IAAM,oBAAA,GAAuBA,mBAAA,CAAsC,EAAE,CAAA;AAE9D,SAAS,8BAAA,CAA+B;AAAA,EAC7C,IAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAqD;AACnD,EAAA,MAAM,KAAA,GAAQC,aAAA,CAAQ,OAAO,EAAE,IAAA,EAAM,eAAc,CAAA,EAAI,CAAC,IAAA,EAAM,aAAa,CAAC,CAAA;AAC5E,EAAA,uBAAOC,cAAA,CAAC,oBAAA,CAAqB,QAAA,EAArB,EAA8B,OAAe,QAAA,EAAS,CAAA;AAChE;AASA,IAAM,QAAiB,EAAC;AAExB,SAAS,OAAA,CACP,QACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAA,IAAU,GAAA;AACzB,EAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAS,KAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,GAAA,CAAI,OAAA;AAC9C,EAAA,OAAOD,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,WAAW,OAAA,EAAQ,CAAA;AAAA,IACjD,CAAC,IAAA,EAAM,MAAA,CAAO,SAAA,EAAW,OAAO;AAAA,GAClC;AACF;AAGO,SAAS,qBAAA,GAAgE;AAC9E,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIE,uCAAA,EAAsB;AAC9C,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIC,qBAAa,WAAW,CAAA;AACpD,EAAA,OAAOH,aAAA;AAAA,IACL,OAAO,EAAE,IAAA,EAAM,IAAA,IAAS,KAAA,EAA+B,QAAQ,SAAA,EAAU,CAAA;AAAA,IACzE,CAAC,MAAM,SAAS;AAAA,GAClB;AACF;AAGO,SAAS,gBAAA,GAAsD;AACpE,EAAA,MAAM,MAAA,GAASI,gBAAA,CAAW,oBAAoB,CAAA,CAAE,IAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMG,gBAAQ,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,QAAQ,CAAA;AAClE,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B;AAMO,SAAS,0BAA0B,OAAA,EAEK;AAC7C,EAAA,MAAM,MAAA,GAASD,gBAAA,CAAW,oBAAoB,CAAA,CAAE,aAAA;AAChD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIF,uCAAA,EAAsB;AAC9C,EAAA,MAAM,GAAA,GAAMI,wBAAA,CAAiB,WAAA,IAAe,MAAA,EAAW,EAAE,OAAA,EAAS,CAAC,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,CAAA;AAChG,EAAA,OAAO,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAC5B","file":"chunk-CB4TIDEX.cjs","sourcesContent":["/**\n * The open workspace's documents, tags and conversations for the connected kits. Each kit reads them\n * through the `@arbidocs/react` hooks; the documents always come from `useDocuments` (read once,\n * progressively, then patched in place by every write and event, so a kit never re-reads it). A\n * host that already keeps tags or conversations live in its own cache passes them once through\n * `ConnectedWorkspaceDataProvider`, so the kits show the same list and nothing is fetched twice.\n */\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { useConversations, useDocuments, useTags } from '@arbidocs/react'\nimport { useConnectedWorkspace } from './ConnectionProvider'\n\nexport type ConnectedDocument = NonNullable<ReturnType<typeof useDocuments>['data']>[number]\nexport type ConnectedTag = NonNullable<ReturnType<typeof useTags>['data']>[number]\nexport type ConnectedConversation = NonNullable<ReturnType<typeof useConversations>['data']>[number]\n\n/**\n * A list the host keeps: its rows, whether it has arrived, and how to read it again (absent: the\n * host keeps it current itself, so a kit never re-reads it).\n */\nexport interface ConnectedList<T> {\n data: T[] | undefined\n isFetched: boolean\n refetch?: () => unknown\n}\n\nexport interface ConnectedWorkspaceData {\n tags?: ConnectedList<ConnectedTag>\n conversations?: ConnectedList<ConnectedConversation>\n}\n\nconst WorkspaceDataContext = createContext<ConnectedWorkspaceData>({})\n\nexport function ConnectedWorkspaceDataProvider({\n tags,\n conversations,\n children,\n}: ConnectedWorkspaceData & { children: ReactNode }) {\n const value = useMemo(() => ({ tags, conversations }), [tags, conversations])\n return <WorkspaceDataContext.Provider value={value}>{children}</WorkspaceDataContext.Provider>\n}\n\nexport interface ConnectedListResult<T> {\n data: T[]\n loaded: boolean\n /** Read the list again after a change made here; absent when the host keeps it current. */\n refetch?: () => unknown\n}\n\nconst EMPTY: never[] = []\n\nfunction useList<T>(\n hosted: ConnectedList<T> | undefined,\n own: { data?: T[]; isFetched: boolean; refetch: () => unknown }\n): ConnectedListResult<T> {\n const source = hosted ?? own\n const data = source.data ?? (EMPTY as T[])\n const refetch = hosted ? hosted.refetch : own.refetch\n return useMemo(\n () => ({ data, loaded: source.isFetched, refetch }),\n [data, source.isFetched, refetch]\n )\n}\n\n/** The open workspace's documents (`useDocuments`: the one list every host and kit shares). */\nexport function useConnectedDocuments(): ConnectedListResult<ConnectedDocument> {\n const { workspaceId } = useConnectedWorkspace()\n const { data, isFetched } = useDocuments(workspaceId)\n return useMemo(\n () => ({ data: data ?? (EMPTY as ConnectedDocument[]), loaded: isFetched }),\n [data, isFetched]\n )\n}\n\n/** The open workspace's tags: the host's list when it gives one, else read here. */\nexport function useConnectedTags(): ConnectedListResult<ConnectedTag> {\n const hosted = useContext(WorkspaceDataContext).tags\n const { workspaceId } = useConnectedWorkspace()\n const own = useTags(workspaceId ?? undefined, { enabled: !hosted })\n return useList(hosted, own)\n}\n\n/**\n * The open workspace's conversations (threads and tasks): the host's list when it gives one, else\n * read here (`live`: re-read while shown, as a run moves on by itself).\n */\nexport function useConnectedConversations(options?: {\n live?: boolean\n}): ConnectedListResult<ConnectedConversation> {\n const hosted = useContext(WorkspaceDataContext).conversations\n const { workspaceId } = useConnectedWorkspace()\n const own = useConversations(workspaceId ?? undefined, { enabled: !hosted, live: options?.live })\n return useList(hosted, own)\n}\n"]}
|
|
@@ -125,7 +125,8 @@ var defaultEnvironment = {
|
|
|
125
125
|
openDocument: noop,
|
|
126
126
|
openConversation: noop,
|
|
127
127
|
openSettings: requestSettingsSection,
|
|
128
|
-
openProject: noop
|
|
128
|
+
openProject: noop,
|
|
129
|
+
openWorkspace: noop
|
|
129
130
|
};
|
|
130
131
|
var BlocksContext = react.createContext(defaultEnvironment);
|
|
131
132
|
function BlocksProvider({
|
|
@@ -139,7 +140,8 @@ function BlocksProvider({
|
|
|
139
140
|
openDocument,
|
|
140
141
|
openConversation,
|
|
141
142
|
openSettings,
|
|
142
|
-
openProject
|
|
143
|
+
openProject,
|
|
144
|
+
openWorkspace
|
|
143
145
|
}) {
|
|
144
146
|
const parent = react.useContext(BlocksContext);
|
|
145
147
|
const value = react.useMemo(
|
|
@@ -156,7 +158,8 @@ function BlocksProvider({
|
|
|
156
158
|
requestSettingsSection(section);
|
|
157
159
|
openSettings(section);
|
|
158
160
|
} : parent.openSettings,
|
|
159
|
-
openProject: openProject ?? parent.openProject
|
|
161
|
+
openProject: openProject ?? parent.openProject,
|
|
162
|
+
openWorkspace: openWorkspace ?? parent.openWorkspace
|
|
160
163
|
}),
|
|
161
164
|
[
|
|
162
165
|
parent,
|
|
@@ -169,7 +172,8 @@ function BlocksProvider({
|
|
|
169
172
|
openDocument,
|
|
170
173
|
openConversation,
|
|
171
174
|
openSettings,
|
|
172
|
-
openProject
|
|
175
|
+
openProject,
|
|
176
|
+
openWorkspace
|
|
173
177
|
]
|
|
174
178
|
);
|
|
175
179
|
return /* @__PURE__ */ jsxRuntime.jsx(BlocksContext.Provider, { value, children });
|
|
@@ -182,5 +186,5 @@ exports.BlocksProvider = BlocksProvider;
|
|
|
182
186
|
exports.requestSettingsSection = requestSettingsSection;
|
|
183
187
|
exports.useBlocksEnvironment = useBlocksEnvironment;
|
|
184
188
|
exports.useRequestedSettingsSection = useRequestedSettingsSection;
|
|
185
|
-
//# sourceMappingURL=chunk-
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
189
|
+
//# sourceMappingURL=chunk-CNHUJRQ4.cjs.map
|
|
190
|
+
//# sourceMappingURL=chunk-CNHUJRQ4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider/dialogs.tsx","../src/provider/settings-section.ts","../src/provider/BlocksProvider.tsx"],"names":["request","useState","jsx","ModalScaffold","Info","AlertCircle","Button","useSyncExternalStore","notifyStore","createContext","useContext","useMemo"],"mappings":"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","file":"chunk-CNHUJRQ4.cjs","sourcesContent":["/**\n * Promise-based prompt dialogs — the blocks replacement for `window.confirm` / `window.alert`.\n * Each call mounts its own short-lived React root, so it works from any event handler with no\n * dialog host in the tree. Hosts reach these through `useBlocksEnvironment().confirm` / `.choose`\n * (the defaults), which lets an app swap in its own dialogs without touching callers.\n *\n * For a confirmation with a loading state, render the declarative {@link ConfirmDialog} instead.\n */\nimport { useState, type ReactElement } from 'react'\nimport { AlertCircle, Info } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { ModalScaffold } from '../settings/ModalScaffold'\n\ntype ChoiceVariant = 'default' | 'destructive' | 'outline'\n\nexport interface PromptChoice<T extends string> {\n label: string\n value: T\n variant?: ChoiceVariant\n}\n\n/** A dialog offering arbitrary choices (e.g. Overwrite / Skip / Cancel). */\nexport interface ChoiceRequest<T extends string> {\n message: string\n title?: string\n choices: PromptChoice<T>[]\n icon?: 'alert' | 'info'\n /** Dialog test id; each button is `${testId}-${value}-button`. Default `choice-modal`. */\n testId?: string\n}\n\n/**\n * `confirm` — Cancel / Confirm (destructive); `yesno` — No / Yes; `alert` — a single OK\n * (resolves true once acknowledged).\n */\nexport type ConfirmKind = 'confirm' | 'yesno' | 'alert'\n\nexport interface ConfirmRequest {\n message: string\n /** Default: \"Alert\" for `alert`, else \"Confirm\". */\n title?: string\n kind?: ConfirmKind\n}\n\n/** Close animation length before the root is unmounted. */\nconst UNMOUNT_DELAY_MS = 300\n\nfunction PromptDialog<T extends string>({\n request,\n onSettle,\n}: {\n request: ChoiceRequest<T>\n onSettle: (value: T | null) => void\n}): ReactElement {\n const [open, setOpen] = useState(true)\n const { message, title = 'Confirm', choices, icon = 'alert', testId = 'choice-modal' } = request\n const settle = (value: T | null) => {\n setOpen(false)\n onSettle(value)\n }\n return (\n <ModalScaffold\n open={open}\n onOpenChange={(next) => {\n if (!next) settle(null)\n }}\n title={title}\n icon={\n icon === 'info' ? (\n <Info className=\"h-5 w-5 text-blue-text\" aria-hidden=\"true\" />\n ) : (\n <AlertCircle className=\"h-5 w-5\" aria-hidden=\"true\" />\n )\n }\n description={<span className=\"whitespace-pre-line\">{message}</span>}\n showDescription\n testId={testId}\n >\n <ModalScaffold.Footer>\n {choices.map((choice) => (\n <Button\n key={choice.value}\n variant={choice.variant ?? 'default'}\n onClick={() => settle(choice.value)}\n data-testid={`${testId}-${choice.value.toLowerCase()}-button`}\n >\n {choice.label}\n </Button>\n ))}\n </ModalScaffold.Footer>\n </ModalScaffold>\n )\n}\n\n/** Show a choice dialog; resolves with the chosen `value`, or `null` when dismissed. */\nexport function choiceDialog<T extends string>(request: ChoiceRequest<T>): Promise<T | null> {\n if (typeof document === 'undefined') return Promise.resolve(null)\n return new Promise((resolve) => {\n const container = document.createElement('div')\n document.body.appendChild(container)\n let settled = false\n void import('react-dom/client').then(({ createRoot }) => {\n const root = createRoot(container)\n const onSettle = (value: T | null) => {\n if (settled) return\n settled = true\n resolve(value)\n setTimeout(() => {\n root.unmount()\n container.remove()\n }, UNMOUNT_DELAY_MS)\n }\n root.render(<PromptDialog request={request} onSettle={onSettle} />)\n })\n })\n}\n\nconst CONFIRM_CHOICES: Record<\n ConfirmKind,\n PromptChoice<'confirm' | 'cancel' | 'yes' | 'no' | 'ok'>[]\n> = {\n confirm: [\n { label: 'Cancel', value: 'cancel', variant: 'outline' },\n { label: 'Confirm', value: 'confirm', variant: 'destructive' },\n ],\n yesno: [\n { label: 'No', value: 'no', variant: 'outline' },\n { label: 'Yes', value: 'yes' },\n ],\n alert: [{ label: 'OK', value: 'ok' }],\n}\n\nconst CONFIRM_TEST_ID: Record<ConfirmKind, string> = {\n confirm: 'confirmation-modal',\n yesno: 'yes-no-modal',\n alert: 'alert-modal',\n}\n\n/** Show a confirmation; resolves true on Confirm / Yes / OK, false on cancel or dismissal. */\nexport async function confirmDialog(request: ConfirmRequest): Promise<boolean> {\n const kind = request.kind ?? 'confirm'\n const choice = await choiceDialog({\n message: request.message,\n title: request.title ?? (kind === 'alert' ? 'Alert' : 'Confirm'),\n choices: CONFIRM_CHOICES[kind],\n icon: kind === 'alert' ? 'info' : 'alert',\n testId: CONFIRM_TEST_ID[kind],\n })\n return choice === 'confirm' || choice === 'yes' || choice === 'ok'\n}\n","/**\n * The settings section asked for last, so `openSettings(section)` opens that section in every host.\n *\n * `BlocksEnvironment.openSettings` records the section here before the host shows its settings\n * (a panel, a route); a `ConnectedSettingsPage` without its own `section` prop opens at it and\n * follows every later request, even one for the section asked for before. A host that keeps the\n * open section itself (`section` + `onSectionChange`) routes `openSettings` to its own state.\n */\nimport { useSyncExternalStore } from 'react'\n\nexport interface SettingsSectionRequest {\n section: string\n /** Increases with every request, so asking again for the same section is a new request. */\n seq: number\n}\n\nlet request: SettingsSectionRequest | undefined\nconst listeners = new Set<() => void>()\n\n/** Ask for a settings section; no section asks for none (the page stays where it is). */\nexport function requestSettingsSection(section?: string): void {\n if (!section) return\n request = { section, seq: (request?.seq ?? 0) + 1 }\n listeners.forEach((listener) => listener())\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener)\n return () => listeners.delete(listener)\n}\n\nconst snapshot = () => request\n\n/** The last settings-section request (`undefined` until there is one). */\nexport function useRequestedSettingsSection(): SettingsSectionRequest | undefined {\n return useSyncExternalStore(subscribe, snapshot, snapshot)\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport {\n notify as notifyStore,\n type NotifyOptions,\n type NotifyVariant,\n} from '@arbidocs/react/shell'\nimport type { BlockLinkComponent } from '../components/blockLink'\nimport { choiceDialog, confirmDialog, type ChoiceRequest, type ConfirmRequest } from './dialogs'\nimport { requestSettingsSection } from './settings-section'\n\n/** What blocks need from the host's runtime configuration (the app's `config.json`). */\nexport interface BlocksRuntimeConfig {\n /** Origin of the ARBI API; `''` means the page's own origin. */\n apiBaseUrl: string\n /** The deployment's domain, e.g. `www.arbidocs.com` (deep links, key derivation, labels). */\n deploymentDomain: string\n}\n\nexport interface OpenDocumentOptions {\n /** 1-based page to scroll to. */\n page?: number\n /** Passage (chunk) to highlight. */\n passageId?: string\n}\n\n/**\n * The only way blocks reach the host app's environment. Blocks never import a router, a toast\n * library or an app store; the host injects what it has, and every field has a safe default so a\n * block renders correctly with no provider at all. A nested provider overrides only the fields\n * it is given and inherits the rest.\n */\nexport interface BlocksEnvironment {\n /** Router-aware link (keeps navigation in-SPA). Default: a plain `<a href>`. */\n linkComponent?: BlockLinkComponent\n /** Imperative navigation for buttons and keyboard shortcuts. Default: `window.location.assign`. */\n navigate: (href: string) => void\n /** Surface a transient message (and record it in the notification centre). Default: the shared\n * `@arbidocs/react` notify store, rendered by its `<Toaster/>`. */\n notify: (message: ReactNode, kind?: NotifyVariant, options?: NotifyOptions) => void\n /** Ask the user to confirm. Default: the blocks prompt dialog. */\n confirm: (request: ConfirmRequest) => Promise<boolean>\n /** Ask the user to pick one of several choices; `null` when dismissed. Default: the blocks\n * prompt dialog. */\n choose: <T extends string>(request: ChoiceRequest<T>) => Promise<T | null>\n /** Deployment configuration. Default: same-origin API on the page's own host. */\n runtimeConfig: BlocksRuntimeConfig\n /** Open a document (optionally at a page / passage) wherever the host shows documents.\n * Default: no-op. */\n openDocument: (documentId: string, options?: OpenDocumentOptions) => void\n /** Open a conversation thread, optionally scrolled to a message. Default: no-op. */\n openConversation: (conversationId: string, options?: { messageId?: string }) => void\n /**\n * Open the user's settings, optionally at a section (a `ConnectedSettingsPage` section id).\n * The section is always recorded for `ConnectedSettingsPage` first (`requestSettingsSection`);\n * the host's handler then shows its settings. Default: only that record.\n */\n openSettings: (section?: string) => void\n /** Open a project. Default: no-op. */\n openProject: (projectId: string) => void\n /**\n * Show a workspace (its own page). Under a `ConnectionProvider` the kits select it first\n * (`useConnectedWorkspace().openWorkspace`); a host that keeps its own session switches to it\n * here. `name` is for the host's messages. Default: no-op.\n */\n openWorkspace: (workspaceId: string, options?: { name?: string }) => void\n}\n\nconst noop = () => {}\n\nconst defaultEnvironment: BlocksEnvironment = {\n navigate: (href) => {\n if (typeof window !== 'undefined') window.location.assign(href)\n },\n notify: (message, kind = 'info', options) => {\n notifyStore[kind](message, options)\n },\n confirm: confirmDialog,\n choose: choiceDialog,\n runtimeConfig: {\n apiBaseUrl: '',\n deploymentDomain: typeof window !== 'undefined' ? window.location.host : '',\n },\n openDocument: noop,\n openConversation: noop,\n openSettings: requestSettingsSection,\n openProject: noop,\n openWorkspace: noop,\n}\n\nconst BlocksContext = createContext<BlocksEnvironment>(defaultEnvironment)\n\nexport interface BlocksProviderProps extends Partial<BlocksEnvironment> {\n children: ReactNode\n}\n\nexport function BlocksProvider({\n children,\n linkComponent,\n navigate,\n notify,\n confirm,\n choose,\n runtimeConfig,\n openDocument,\n openConversation,\n openSettings,\n openProject,\n openWorkspace,\n}: BlocksProviderProps) {\n const parent = useContext(BlocksContext)\n const value = useMemo<BlocksEnvironment>(\n () => ({\n linkComponent: linkComponent ?? parent.linkComponent,\n navigate: navigate ?? parent.navigate,\n notify: notify ?? parent.notify,\n confirm: confirm ?? parent.confirm,\n choose: choose ?? parent.choose,\n runtimeConfig: runtimeConfig ?? parent.runtimeConfig,\n openDocument: openDocument ?? parent.openDocument,\n openConversation: openConversation ?? parent.openConversation,\n openSettings: openSettings\n ? (section?: string) => {\n requestSettingsSection(section)\n openSettings(section)\n }\n : parent.openSettings,\n openProject: openProject ?? parent.openProject,\n openWorkspace: openWorkspace ?? parent.openWorkspace,\n }),\n [\n parent,\n linkComponent,\n navigate,\n notify,\n confirm,\n choose,\n runtimeConfig,\n openDocument,\n openConversation,\n openSettings,\n openProject,\n openWorkspace,\n ]\n )\n return <BlocksContext.Provider value={value}>{children}</BlocksContext.Provider>\n}\n\nexport function useBlocksEnvironment(): BlocksEnvironment {\n return useContext(BlocksContext)\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkCB4TIDEX_cjs = require('./chunk-CB4TIDEX.cjs');
|
|
5
|
+
var chunkFM3IRQJW_cjs = require('./chunk-FM3IRQJW.cjs');
|
|
6
6
|
var chunk464YPRAE_cjs = require('./chunk-464YPRAE.cjs');
|
|
7
7
|
var chunkNPR5BGFF_cjs = require('./chunk-NPR5BGFF.cjs');
|
|
8
8
|
var chunkLJJJ6CYH_cjs = require('./chunk-LJJJ6CYH.cjs');
|
|
9
|
-
var
|
|
10
|
-
var
|
|
9
|
+
var chunkYBJ4QGNH_cjs = require('./chunk-YBJ4QGNH.cjs');
|
|
10
|
+
var chunk2VHYOTWW_cjs = require('./chunk-2VHYOTWW.cjs');
|
|
11
11
|
var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
|
|
12
|
-
var
|
|
12
|
+
var chunkCNHUJRQ4_cjs = require('./chunk-CNHUJRQ4.cjs');
|
|
13
13
|
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
14
14
|
var react = require('react');
|
|
15
15
|
var reactQuery = require('@tanstack/react-query');
|
|
@@ -41,9 +41,9 @@ function toWorkflowFieldDocument(doc) {
|
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
function useConnectedWorkflowScopeSource() {
|
|
44
|
-
const { data: docs } =
|
|
45
|
-
const { data: tags } =
|
|
46
|
-
return react.useMemo(() =>
|
|
44
|
+
const { data: docs } = chunkCB4TIDEX_cjs.useConnectedDocuments();
|
|
45
|
+
const { data: tags } = chunkCB4TIDEX_cjs.useConnectedTags();
|
|
46
|
+
return react.useMemo(() => chunkYBJ4QGNH_cjs.buildWorkflowScopeSource(docs, chunkYBJ4QGNH_cjs.documentScopeLabels(tags)), [docs, tags]);
|
|
47
47
|
}
|
|
48
48
|
function useConnectedAgentOptions() {
|
|
49
49
|
const { data: agents } = react$1.useAgents();
|
|
@@ -59,9 +59,9 @@ function ConnectedWorkflowDocumentsField({
|
|
|
59
59
|
onAddFiles,
|
|
60
60
|
labels
|
|
61
61
|
}) {
|
|
62
|
-
const { notify } =
|
|
63
|
-
const { ensureWorkspaceOpen } =
|
|
64
|
-
const { data: docs, loaded } =
|
|
62
|
+
const { notify } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
|
|
63
|
+
const { ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
64
|
+
const { data: docs, loaded } = chunkCB4TIDEX_cjs.useConnectedDocuments();
|
|
65
65
|
const uploadDocuments = react$1.useUploadDocuments();
|
|
66
66
|
const documents = react.useMemo(() => docs.map(toWorkflowFieldDocument), [docs]);
|
|
67
67
|
const chosen = value.documents ?? [];
|
|
@@ -100,7 +100,7 @@ function ConnectedWorkflowDocumentsField({
|
|
|
100
100
|
}
|
|
101
101
|
),
|
|
102
102
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
103
|
-
|
|
103
|
+
chunkYBJ4QGNH_cjs.WorkflowDocumentsField,
|
|
104
104
|
{
|
|
105
105
|
field,
|
|
106
106
|
value,
|
|
@@ -122,7 +122,7 @@ function ConnectedWorkflowLauncher({
|
|
|
122
122
|
const scopeSource = useConnectedWorkflowScopeSource();
|
|
123
123
|
const agents = useConnectedAgentOptions();
|
|
124
124
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
125
|
-
|
|
125
|
+
chunkYBJ4QGNH_cjs.WorkflowLauncher,
|
|
126
126
|
{
|
|
127
127
|
...props,
|
|
128
128
|
scopeSource,
|
|
@@ -151,7 +151,7 @@ function ReferencePicker({
|
|
|
151
151
|
}, [documents]);
|
|
152
152
|
const selected = groups[0].docs.find((d) => d.id === selectedId);
|
|
153
153
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
154
|
-
|
|
154
|
+
chunk2VHYOTWW_cjs.DocumentPicker,
|
|
155
155
|
{
|
|
156
156
|
groups,
|
|
157
157
|
value: selectedId ?? "",
|
|
@@ -163,9 +163,9 @@ function ReferencePicker({
|
|
|
163
163
|
}
|
|
164
164
|
function useConnectedDocxReferences() {
|
|
165
165
|
const arbi = react$1.useArbi();
|
|
166
|
-
const { workspaceId } =
|
|
167
|
-
const { openDocument, runtimeConfig } =
|
|
168
|
-
const { data: documents } =
|
|
166
|
+
const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
167
|
+
const { openDocument, runtimeConfig } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
|
|
168
|
+
const { data: documents } = chunkCB4TIDEX_cjs.useConnectedDocuments();
|
|
169
169
|
const documentsRef = react.useRef(documents);
|
|
170
170
|
documentsRef.current = documents;
|
|
171
171
|
return react.useMemo(
|
|
@@ -216,7 +216,7 @@ function useConnectedDocxReferences() {
|
|
|
216
216
|
);
|
|
217
217
|
}
|
|
218
218
|
function useConnectedWorkspaceRole() {
|
|
219
|
-
const { workspaceId, live, userId, ensureWorkspaceOpen } =
|
|
219
|
+
const { workspaceId, live, userId, ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
220
220
|
const { data: members = [] } = react$1.useWorkspaceUsers(workspaceId ?? void 0, {
|
|
221
221
|
enabled: live && !!workspaceId,
|
|
222
222
|
beforeFetch: ensureWorkspaceOpen
|
|
@@ -244,17 +244,17 @@ var DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS = {
|
|
|
244
244
|
var messageOf = (error) => error instanceof Error ? error.message : "";
|
|
245
245
|
function ConnectedWorkflowsTable({
|
|
246
246
|
filter,
|
|
247
|
-
describeTrigger = (w) =>
|
|
247
|
+
describeTrigger = (w) => chunkYBJ4QGNH_cjs.workflowTriggerType(w).replaceAll("_", " "),
|
|
248
248
|
formatDate = chunkKDG6FER6_cjs.fmtDate,
|
|
249
249
|
onViewRuns,
|
|
250
250
|
connectedLabels,
|
|
251
251
|
...tableProps
|
|
252
252
|
}) {
|
|
253
253
|
const l = { ...DEFAULT_CONNECTED_WORKFLOWS_TABLE_LABELS, ...connectedLabels };
|
|
254
|
-
const { notify, confirm, openConversation } =
|
|
254
|
+
const { notify, confirm, openConversation } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
|
|
255
255
|
const { canEditShared, isWorkspaceOwner } = useConnectedWorkspaceRole();
|
|
256
256
|
const { data: saved = [], isLoading } = react$1.useWorkflows({ live: true });
|
|
257
|
-
const { data: conversations, refetch } =
|
|
257
|
+
const { data: conversations, refetch } = chunkCB4TIDEX_cjs.useConnectedConversations({ live: true });
|
|
258
258
|
const { data: agents = [] } = react$1.useAgents();
|
|
259
259
|
const update = react$1.useUpdateWorkflow();
|
|
260
260
|
const remove = react$1.useDeleteWorkflow();
|
|
@@ -306,7 +306,7 @@ function ConnectedWorkflowsTable({
|
|
|
306
306
|
await act(workflow, () => remove.mutateAsync(workflow.external_id));
|
|
307
307
|
};
|
|
308
308
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
309
|
-
|
|
309
|
+
chunkYBJ4QGNH_cjs.WorkflowsTable,
|
|
310
310
|
{
|
|
311
311
|
...tableProps,
|
|
312
312
|
workflows,
|
|
@@ -356,7 +356,7 @@ function ConnectedWorkflowsTable({
|
|
|
356
356
|
function useConnectedHouseTemplate() {
|
|
357
357
|
const arbi = react$1.useArbi();
|
|
358
358
|
const { mutateAsync: setWorkspaceTemplate } = react$1.useSetWorkspaceHouseTemplate();
|
|
359
|
-
const { workspaceId, live, ensureWorkspaceOpen } =
|
|
359
|
+
const { workspaceId, live, ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
360
360
|
const { data: workspaces } = react$1.useWorkspaces({ enabled: live });
|
|
361
361
|
const workspace = workspaces?.find((w) => w.external_id === workspaceId);
|
|
362
362
|
const { isWorkspaceOwner } = useConnectedWorkspaceRole();
|
|
@@ -408,7 +408,7 @@ function ConnectedNativeDocxEditor({
|
|
|
408
408
|
...props
|
|
409
409
|
}) {
|
|
410
410
|
const adapter = useConnectedNativeDocxAdapter(fontBaseUrl);
|
|
411
|
-
const { workspaceId } =
|
|
411
|
+
const { workspaceId } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
412
412
|
const { commentTarget } = useNativeDocxSupport();
|
|
413
413
|
const [openFailed, setOpenFailed] = react.useState(false);
|
|
414
414
|
const hasOpened = react.useRef(false);
|
|
@@ -459,9 +459,9 @@ function tokenChanges(arbi) {
|
|
|
459
459
|
}
|
|
460
460
|
function useConnectedNativeDocxAdapter(fontBaseUrl = "/native-docx/fonts") {
|
|
461
461
|
const arbi = react$1.useArbi();
|
|
462
|
-
const { workspaceId, live, user, ensureWorkspaceOpen } =
|
|
462
|
+
const { workspaceId, live, user, ensureWorkspaceOpen } = chunkFM3IRQJW_cjs.useConnectedWorkspace();
|
|
463
463
|
const queries = reactQuery.useQueryClient();
|
|
464
|
-
const { notify } =
|
|
464
|
+
const { notify } = chunkCNHUJRQ4_cjs.useBlocksEnvironment();
|
|
465
465
|
const tools = documentTools.useOptionalDocumentTools();
|
|
466
466
|
const support = useNativeDocxSupport();
|
|
467
467
|
const references = useConnectedDocxReferences();
|
|
@@ -553,5 +553,5 @@ exports.useConnectedNativeDocxAdapter = useConnectedNativeDocxAdapter;
|
|
|
553
553
|
exports.useConnectedWorkflowScopeSource = useConnectedWorkflowScopeSource;
|
|
554
554
|
exports.useConnectedWorkspaceRole = useConnectedWorkspaceRole;
|
|
555
555
|
exports.useNativeDocxSupport = useNativeDocxSupport;
|
|
556
|
-
//# sourceMappingURL=chunk-
|
|
557
|
-
//# sourceMappingURL=chunk-
|
|
556
|
+
//# sourceMappingURL=chunk-CQCNU5KT.cjs.map
|
|
557
|
+
//# sourceMappingURL=chunk-CQCNU5KT.cjs.map
|