@dxos/plugin-space 0.7.4 → 0.7.5-feature-compute.4d9d99a
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/lib/browser/app-graph-builder-5D2QB43K.mjs +365 -0
- package/dist/lib/browser/app-graph-builder-5D2QB43K.mjs.map +7 -0
- package/dist/lib/browser/app-graph-serializer-VNWPLPDF.mjs +80 -0
- package/dist/lib/browser/app-graph-serializer-VNWPLPDF.mjs.map +7 -0
- package/dist/lib/browser/chunk-5TBRONF6.mjs +133 -0
- package/dist/lib/browser/chunk-5TBRONF6.mjs.map +7 -0
- package/dist/lib/browser/chunk-6SWQRWOD.mjs +1672 -0
- package/dist/lib/browser/chunk-6SWQRWOD.mjs.map +7 -0
- package/dist/lib/browser/chunk-HCXWKGTE.mjs +316 -0
- package/dist/lib/browser/chunk-HCXWKGTE.mjs.map +7 -0
- package/dist/lib/browser/chunk-SOXNANA6.mjs +12 -0
- package/dist/lib/browser/chunk-SOXNANA6.mjs.map +7 -0
- package/dist/lib/browser/chunk-UH5P4UL3.mjs +21 -0
- package/dist/lib/browser/chunk-UH5P4UL3.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZBKFJNHH.mjs +523 -0
- package/dist/lib/browser/chunk-ZBKFJNHH.mjs.map +7 -0
- package/dist/lib/browser/identity-created-EC5FOCX2.mjs +28 -0
- package/dist/lib/browser/identity-created-EC5FOCX2.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +192 -3521
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intent-resolver-VBL572N7.mjs +459 -0
- package/dist/lib/browser/intent-resolver-VBL572N7.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-AZJFNTKK.mjs +28 -0
- package/dist/lib/browser/react-root-AZJFNTKK.mjs.map +7 -0
- package/dist/lib/browser/react-surface-E2VSYVNZ.mjs +238 -0
- package/dist/lib/browser/react-surface-E2VSYVNZ.mjs.map +7 -0
- package/dist/lib/browser/settings-ASFF5BZL.mjs +24 -0
- package/dist/lib/browser/settings-ASFF5BZL.mjs.map +7 -0
- package/dist/lib/browser/spaces-ready-4SFNS5JQ.mjs +200 -0
- package/dist/lib/browser/spaces-ready-4SFNS5JQ.mjs.map +7 -0
- package/dist/lib/browser/state-MS4KYJWI.mjs +47 -0
- package/dist/lib/browser/state-MS4KYJWI.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +14 -5
- package/dist/lib/node/app-graph-builder-ZQ5S62YR.cjs +368 -0
- package/dist/lib/node/app-graph-builder-ZQ5S62YR.cjs.map +7 -0
- package/dist/lib/node/app-graph-serializer-72S7P33H.cjs +88 -0
- package/dist/lib/node/app-graph-serializer-72S7P33H.cjs.map +7 -0
- package/dist/lib/node/chunk-56NGXG2A.cjs +41 -0
- package/dist/lib/node/chunk-56NGXG2A.cjs.map +7 -0
- package/dist/lib/node/{meta.cjs → chunk-AO4EW2RX.cjs} +12 -13
- package/dist/lib/node/chunk-AO4EW2RX.cjs.map +7 -0
- package/dist/lib/node/chunk-BQRNTKSQ.cjs +150 -0
- package/dist/lib/node/chunk-BQRNTKSQ.cjs.map +7 -0
- package/dist/lib/node/chunk-DDZYVNVP.cjs +345 -0
- package/dist/lib/node/chunk-DDZYVNVP.cjs.map +7 -0
- package/dist/lib/node/chunk-M64YG2FY.cjs +1669 -0
- package/dist/lib/node/chunk-M64YG2FY.cjs.map +7 -0
- package/dist/lib/node/chunk-Z34MTEU7.cjs +551 -0
- package/dist/lib/node/chunk-Z34MTEU7.cjs.map +7 -0
- package/dist/lib/node/identity-created-IMDS4A6A.cjs +44 -0
- package/dist/lib/node/identity-created-IMDS4A6A.cjs.map +7 -0
- package/dist/lib/node/index.cjs +175 -3506
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/intent-resolver-S4HZABYI.cjs +458 -0
- package/dist/lib/node/intent-resolver-S4HZABYI.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react-root-RB3OM3QG.cjs +50 -0
- package/dist/lib/node/react-root-RB3OM3QG.cjs.map +7 -0
- package/dist/lib/node/react-surface-TLKQEHHT.cjs +233 -0
- package/dist/lib/node/react-surface-TLKQEHHT.cjs.map +7 -0
- package/dist/lib/node/settings-QLCKAUHK.cjs +38 -0
- package/dist/lib/node/settings-QLCKAUHK.cjs.map +7 -0
- package/dist/lib/node/spaces-ready-RZTKEXOL.cjs +211 -0
- package/dist/lib/node/spaces-ready-RZTKEXOL.cjs.map +7 -0
- package/dist/lib/node/state-4UIOUKLJ.cjs +61 -0
- package/dist/lib/node/state-4UIOUKLJ.cjs.map +7 -0
- package/dist/lib/node/types/index.cjs +23 -14
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/app-graph-builder-CD6IYPSS.mjs +366 -0
- package/dist/lib/node-esm/app-graph-builder-CD6IYPSS.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-serializer-CFXS6ZE2.mjs +81 -0
- package/dist/lib/node-esm/app-graph-serializer-CFXS6ZE2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-375RB3CZ.mjs +22 -0
- package/dist/lib/node-esm/chunk-375RB3CZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7FUVU45N.mjs +14 -0
- package/dist/lib/node-esm/chunk-7FUVU45N.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CLGCKZ2D.mjs +317 -0
- package/dist/lib/node-esm/chunk-CLGCKZ2D.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CMKML5IN.mjs +1673 -0
- package/dist/lib/node-esm/chunk-CMKML5IN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FUMGYUD3.mjs +524 -0
- package/dist/lib/node-esm/chunk-FUMGYUD3.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-M4XTHK35.mjs +134 -0
- package/dist/lib/node-esm/chunk-M4XTHK35.mjs.map +7 -0
- package/dist/lib/node-esm/identity-created-SJYZZ7Q3.mjs +29 -0
- package/dist/lib/node-esm/identity-created-SJYZZ7Q3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +192 -3521
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/intent-resolver-OIQH7HN7.mjs +460 -0
- package/dist/lib/node-esm/intent-resolver-OIQH7HN7.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-root-WKJWCHXR.mjs +29 -0
- package/dist/lib/node-esm/react-root-WKJWCHXR.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-RVEHOSAD.mjs +239 -0
- package/dist/lib/node-esm/react-surface-RVEHOSAD.mjs.map +7 -0
- package/dist/lib/node-esm/settings-WLVEO4JM.mjs +25 -0
- package/dist/lib/node-esm/settings-WLVEO4JM.mjs.map +7 -0
- package/dist/lib/node-esm/spaces-ready-ITGYYT5A.mjs +201 -0
- package/dist/lib/node-esm/spaces-ready-ITGYYT5A.mjs.map +7 -0
- package/dist/lib/node-esm/state-BMISGQ2O.mjs +48 -0
- package/dist/lib/node-esm/state-BMISGQ2O.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +14 -5
- package/dist/types/src/SpacePlugin.d.ts +1 -24
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +4 -0
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -0
- package/dist/types/src/capabilities/capabilities.d.ts +15 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/identity-created.d.ts +4 -0
- package/dist/types/src/capabilities/identity-created.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +195 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts +8 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root.d.ts +7 -0
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +7 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings.d.ts +4 -0
- package/dist/types/src/capabilities/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/spaces-ready.d.ts +4 -0
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +5 -0
- package/dist/types/src/capabilities/state.d.ts.map +1 -0
- package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts +7 -0
- package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts +8 -0
- package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +1 -0
- package/dist/types/src/components/AdvancedObjectSettings/index.d.ts +2 -0
- package/dist/types/src/components/AdvancedObjectSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
- package/dist/types/src/components/BaseObjectSettings.d.ts +7 -0
- package/dist/types/src/components/BaseObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +5 -4
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -6
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -0
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts +1 -0
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +1 -0
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -0
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
- package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.d.ts +9 -6
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +1 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts +1 -0
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +4 -3
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts +3 -3
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +2 -2
- package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +5 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +2 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/usePath.d.ts +11 -0
- package/dist/types/src/hooks/usePath.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -27
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +18 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/collection.d.ts +8 -12
- package/dist/types/src/types/collection.d.ts.map +1 -1
- package/dist/types/src/types/thread.d.ts +180 -186
- package/dist/types/src/types/thread.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +228 -16
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +9 -8
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +38 -46
- package/src/SpacePlugin.tsx +119 -1541
- package/src/capabilities/app-graph-builder.ts +392 -0
- package/src/capabilities/app-graph-serializer.ts +73 -0
- package/src/capabilities/capabilities.ts +23 -0
- package/src/capabilities/identity-created.ts +26 -0
- package/src/capabilities/index.ts +17 -0
- package/src/capabilities/intent-resolver.ts +420 -0
- package/src/capabilities/react-root.tsx +20 -0
- package/src/capabilities/react-surface.tsx +234 -0
- package/src/capabilities/settings.ts +17 -0
- package/src/capabilities/spaces-ready.ts +231 -0
- package/src/capabilities/state.ts +45 -0
- package/src/components/AdvancedObjectSettings/AdvancedObjectSettings.tsx +72 -0
- package/src/components/AdvancedObjectSettings/ForeignKeys.tsx +51 -0
- package/src/components/AdvancedObjectSettings/index.ts +5 -0
- package/src/components/AwaitingObject.tsx +15 -19
- package/src/components/{DefaultObjectSettings.tsx → BaseObjectSettings.tsx} +2 -2
- package/src/components/CreateDialog/CreateObjectDialog.tsx +36 -25
- package/src/components/CreateDialog/CreateObjectPanel.tsx +61 -24
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +10 -14
- package/src/components/JoinDialog.tsx +18 -34
- package/src/components/PersistenceStatus.tsx +1 -1
- package/src/components/PopoverRenameObject.tsx +2 -0
- package/src/components/PopoverRenameSpace.tsx +2 -0
- package/src/components/ShareSpaceButton.tsx +5 -4
- package/src/components/SpacePluginSettings.tsx +2 -13
- package/src/components/SpacePresence.stories.tsx +25 -17
- package/src/components/SpacePresence.tsx +42 -21
- package/src/components/SpaceSettings/SpaceSettingsDialog.stories.tsx +2 -3
- package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +3 -1
- package/src/components/SpaceSettings/SpaceSettingsPanel.stories.tsx +7 -5
- package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +6 -5
- package/src/components/SyncStatus/InlineSyncStatus.tsx +37 -27
- package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +55 -51
- package/src/components/index.ts +2 -1
- package/src/events.ts +12 -0
- package/src/hooks/index.ts +5 -0
- package/src/hooks/usePath.ts +44 -0
- package/src/index.ts +3 -7
- package/src/meta.ts +1 -29
- package/src/translations.ts +7 -2
- package/src/types/collection.ts +3 -3
- package/src/types/thread.ts +6 -6
- package/src/types/types.ts +177 -42
- package/src/util.tsx +77 -64
- package/dist/lib/browser/chunk-FTKV32QZ.mjs +0 -43
- package/dist/lib/browser/chunk-FTKV32QZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-MWKXNS5S.mjs +0 -124
- package/dist/lib/browser/chunk-MWKXNS5S.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -15
- package/dist/lib/browser/meta.mjs.map +0 -7
- package/dist/lib/node/chunk-6SNOZF7Y.cjs +0 -152
- package/dist/lib/node/chunk-6SNOZF7Y.cjs.map +0 -7
- package/dist/lib/node/chunk-QNVEU2UD.cjs +0 -69
- package/dist/lib/node/chunk-QNVEU2UD.cjs.map +0 -7
- package/dist/lib/node/meta.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-OHEAWSCA.mjs +0 -126
- package/dist/lib/node-esm/chunk-OHEAWSCA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UMV7XREB.mjs +0 -45
- package/dist/lib/node-esm/chunk-UMV7XREB.mjs.map +0 -7
- package/dist/lib/node-esm/meta.mjs +0 -16
- package/dist/lib/node-esm/meta.mjs.map +0 -7
- package/dist/types/src/components/DefaultObjectSettings.d.ts +0 -7
- package/dist/types/src/components/DefaultObjectSettings.d.ts.map +0 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.stories.d.ts +0 -6
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.stories.d.ts.map +0 -1
- package/src/components/SyncStatus/InlineSyncStatus.stories.tsx +0 -57
|
@@ -8,16 +8,17 @@ import { log } from '@dxos/log';
|
|
|
8
8
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
9
9
|
import { useClient } from '@dxos/react-client';
|
|
10
10
|
import { type Space } from '@dxos/react-client/echo';
|
|
11
|
-
import { Input, useTranslation } from '@dxos/react-ui';
|
|
11
|
+
import { type ThemedClassName, Input, useTranslation } from '@dxos/react-ui';
|
|
12
12
|
import { DeprecatedFormInput } from '@dxos/react-ui-form';
|
|
13
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
13
14
|
|
|
14
15
|
import { SPACE_PLUGIN } from '../../meta';
|
|
15
16
|
|
|
16
|
-
export type SpaceSettingsPanelProps = {
|
|
17
|
+
export type SpaceSettingsPanelProps = ThemedClassName<{
|
|
17
18
|
space: Space;
|
|
18
|
-
}
|
|
19
|
+
}>;
|
|
19
20
|
|
|
20
|
-
export const SpaceSettingsPanel = ({ space }: SpaceSettingsPanelProps) => {
|
|
21
|
+
export const SpaceSettingsPanel = ({ classNames, space }: SpaceSettingsPanelProps) => {
|
|
21
22
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
22
23
|
|
|
23
24
|
const client = useClient();
|
|
@@ -40,7 +41,7 @@ export const SpaceSettingsPanel = ({ space }: SpaceSettingsPanelProps) => {
|
|
|
40
41
|
);
|
|
41
42
|
|
|
42
43
|
return (
|
|
43
|
-
<div role='form' className='flex flex-col'>
|
|
44
|
+
<div role='form' className={mx('flex flex-col', classNames)}>
|
|
44
45
|
<DeprecatedFormInput label={t('name label')}>
|
|
45
46
|
<Input.TextInput
|
|
46
47
|
placeholder={t('unnamed space label')}
|
|
@@ -2,15 +2,18 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, {
|
|
5
|
+
import React, { useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
|
+
import { useGraph } from '@dxos/plugin-graph';
|
|
7
8
|
import { QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
8
9
|
import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
|
|
9
10
|
import { useClient } from '@dxos/react-client';
|
|
10
11
|
import { type Space } from '@dxos/react-client/echo';
|
|
11
|
-
import {
|
|
12
|
+
import { Tooltip, useTranslation } from '@dxos/react-ui';
|
|
13
|
+
import { AttentionGlyph, useAttended, useAttention } from '@dxos/react-ui-attention';
|
|
12
14
|
|
|
13
15
|
import { useSpaceSyncState } from './sync-state';
|
|
16
|
+
import { usePath } from '../../hooks';
|
|
14
17
|
import { SPACE_PLUGIN } from '../../meta';
|
|
15
18
|
|
|
16
19
|
const useEdgeStatus = (): QueryEdgeStatusResponse.EdgeStatus => {
|
|
@@ -26,36 +29,43 @@ const useEdgeStatus = (): QueryEdgeStatusResponse.EdgeStatus => {
|
|
|
26
29
|
return status;
|
|
27
30
|
};
|
|
28
31
|
|
|
29
|
-
export const InlineSyncStatus = ({ space }: { space: Space }) => {
|
|
32
|
+
export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean }) => {
|
|
33
|
+
const { t } = useTranslation(SPACE_PLUGIN);
|
|
34
|
+
const id = space.id;
|
|
35
|
+
const { hasAttention, isAncestor, isRelated } = useAttention(id);
|
|
36
|
+
const isAttended = hasAttention || isAncestor || isRelated;
|
|
37
|
+
|
|
38
|
+
// TODO(wittjosiah): If the attended node is deep in the graph and the graph is not fully loaded
|
|
39
|
+
// this will result in an empty path until the graph is connected.
|
|
40
|
+
// TODO(wittjosiah): Consider using this indicator for all open nodes instead of just attended.
|
|
41
|
+
const { graph } = useGraph();
|
|
42
|
+
const attended = useAttended();
|
|
43
|
+
const startOfAttention = attended.at(-1);
|
|
44
|
+
const path = usePath(graph, startOfAttention);
|
|
45
|
+
const containsAttended = !open && !isAttended && id && path ? path.includes(id) : false;
|
|
46
|
+
|
|
30
47
|
const connectedToEdge = useEdgeStatus() === QueryEdgeStatusResponse.EdgeStatus.CONNECTED;
|
|
31
48
|
// TODO(wittjosiah): This is not reactive.
|
|
32
49
|
const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;
|
|
33
50
|
const syncState = useSpaceSyncState(space);
|
|
34
|
-
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return <InlineSyncStatusIndicator />;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export const InlineSyncStatusIndicator = () => {
|
|
42
|
-
const { t } = useTranslation(SPACE_PLUGIN);
|
|
43
|
-
const animationProps = useMemo<CSSProperties>(
|
|
44
|
-
() => ({
|
|
45
|
-
// Synchronize animations.
|
|
46
|
-
animationDelay: `-${Date.now() % 2_000}ms`,
|
|
47
|
-
}),
|
|
48
|
-
[],
|
|
49
|
-
);
|
|
51
|
+
const syncing = connectedToEdge && edgeSyncEnabled && syncState && syncState.missingOnLocal > 0;
|
|
50
52
|
|
|
51
53
|
return (
|
|
52
|
-
<
|
|
53
|
-
<
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
<Tooltip.Root>
|
|
55
|
+
<Tooltip.Trigger asChild>
|
|
56
|
+
<AttentionGlyph
|
|
57
|
+
syncing={syncing}
|
|
58
|
+
attended={isAttended}
|
|
59
|
+
containsAttended={containsAttended}
|
|
60
|
+
classNames='self-center mie-1'
|
|
61
|
+
/>
|
|
62
|
+
</Tooltip.Trigger>
|
|
63
|
+
<Tooltip.Portal>
|
|
64
|
+
<Tooltip.Content side='bottom' classNames='z-[70]'>
|
|
65
|
+
<span>{t('syncing label')}</span>
|
|
66
|
+
<Tooltip.Arrow />
|
|
67
|
+
</Tooltip.Content>
|
|
68
|
+
</Tooltip.Portal>
|
|
69
|
+
</Tooltip.Root>
|
|
60
70
|
);
|
|
61
71
|
};
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
7
|
import { type Meta, type StoryObj } from '@storybook/react';
|
|
8
|
-
import React from 'react';
|
|
8
|
+
import React, { useState } from 'react';
|
|
9
9
|
|
|
10
|
+
import { type Client } from '@dxos/client';
|
|
10
11
|
import { faker } from '@dxos/random';
|
|
11
|
-
import {
|
|
12
|
+
import { useClient } from '@dxos/react-client';
|
|
13
|
+
import { withClientProvider } from '@dxos/react-client/testing';
|
|
14
|
+
import { useAsyncEffect } from '@dxos/react-ui';
|
|
12
15
|
import { withTheme, withLayout } from '@dxos/storybook-utils';
|
|
13
16
|
|
|
14
17
|
import { SyncStatusDetail } from './SyncStatus';
|
|
@@ -17,56 +20,47 @@ import translations from '../../translations';
|
|
|
17
20
|
|
|
18
21
|
const random = ({ min, max }: { min: number; max: number }) => min + Math.floor(Math.random() * (max - min));
|
|
19
22
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const { state } = useStoryClientData<{ state: SpaceSyncStateMap }>();
|
|
23
|
+
const createSpaceSyncStateMap = async (client: Client): Promise<SpaceSyncStateMap> => {
|
|
24
|
+
const spaces = await Promise.all(
|
|
25
|
+
Array.from({ length: 10 }).map(() => client.spaces.create({ name: faker.company.name() })),
|
|
26
|
+
);
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
return spaces.reduce<SpaceSyncStateMap>((map, space, i) => {
|
|
29
|
+
if (i > 4) {
|
|
30
|
+
const total = random({ min: 10, max: 500 });
|
|
31
|
+
map[space.id] = {
|
|
32
|
+
localDocumentCount: total,
|
|
33
|
+
remoteDocumentCount: total,
|
|
34
|
+
missingOnLocal: 0,
|
|
35
|
+
missingOnRemote: 0,
|
|
36
|
+
differentDocuments: 0,
|
|
37
|
+
};
|
|
38
|
+
return map;
|
|
39
|
+
}
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return map;
|
|
49
|
-
}
|
|
41
|
+
const total = random({ min: 10, max: 500 });
|
|
42
|
+
const haveLocal = random({ min: 0, max: total });
|
|
43
|
+
const haveRemote = random({ min: 0, max: total });
|
|
44
|
+
map[space.id] = {
|
|
45
|
+
localDocumentCount: haveLocal,
|
|
46
|
+
remoteDocumentCount: haveRemote,
|
|
47
|
+
missingOnLocal: total - haveLocal,
|
|
48
|
+
missingOnRemote: total - haveRemote,
|
|
49
|
+
differentDocuments: 0,
|
|
50
|
+
};
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
map[space.id] = {
|
|
55
|
-
localDocumentCount: haveLocal,
|
|
56
|
-
remoteDocumentCount: haveRemote,
|
|
57
|
-
missingOnLocal: total - haveLocal,
|
|
58
|
-
missingOnRemote: total - haveRemote,
|
|
59
|
-
differentDocuments: 0,
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
return map;
|
|
63
|
-
}, {});
|
|
52
|
+
return map;
|
|
53
|
+
}, {});
|
|
54
|
+
};
|
|
64
55
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
],
|
|
69
|
-
parameters: {
|
|
56
|
+
const meta: Meta<typeof SyncStatusDetail> = {
|
|
57
|
+
title: 'plugins/plugin-space/SyncStatusDetail',
|
|
58
|
+
component: SyncStatusDetail,
|
|
59
|
+
decorators: [withTheme, withLayout(), withClientProvider({ createIdentity: true })],
|
|
60
|
+
parameters: {
|
|
61
|
+
translations,
|
|
62
|
+
layout: 'centered',
|
|
63
|
+
},
|
|
70
64
|
args: {
|
|
71
65
|
classNames: 'm-2 border border-separator rounded-md',
|
|
72
66
|
},
|
|
@@ -76,10 +70,20 @@ export default meta;
|
|
|
76
70
|
|
|
77
71
|
type Story = StoryObj<typeof SyncStatusDetail>;
|
|
78
72
|
|
|
79
|
-
export const Default: Story = {
|
|
80
|
-
|
|
81
|
-
export const Empty: Story = {
|
|
73
|
+
export const Default: Story = {
|
|
82
74
|
render: (args) => {
|
|
83
75
|
return <SyncStatusDetail {...args} state={{}} />;
|
|
84
76
|
},
|
|
85
77
|
};
|
|
78
|
+
|
|
79
|
+
export const Sync: Story = {
|
|
80
|
+
render: (args) => {
|
|
81
|
+
const client = useClient();
|
|
82
|
+
const [state, setState] = useState<SpaceSyncStateMap>({});
|
|
83
|
+
useAsyncEffect(async () => {
|
|
84
|
+
setState(await createSpaceSyncStateMap(client));
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return <SyncStatusDetail {...args} state={state} summary={getSyncSummary(state)} />;
|
|
88
|
+
},
|
|
89
|
+
};
|
package/src/components/index.ts
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
export * from './AdvancedObjectSettings';
|
|
5
6
|
export * from './AwaitingObject';
|
|
7
|
+
export * from './BaseObjectSettings';
|
|
6
8
|
export * from './CreateDialog';
|
|
7
9
|
export * from './CollectionMain';
|
|
8
10
|
export * from './CollectionSection';
|
|
9
|
-
export * from './DefaultObjectSettings';
|
|
10
11
|
export * from './JoinDialog';
|
|
11
12
|
export * from './MenuFooter';
|
|
12
13
|
export * from './PersistenceStatus';
|
package/src/events.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { defineEvent } from '@dxos/app-framework';
|
|
6
|
+
|
|
7
|
+
import { SPACE_PLUGIN } from './meta';
|
|
8
|
+
|
|
9
|
+
export namespace SpaceEvents {
|
|
10
|
+
export const StateReady = defineEvent(`${SPACE_PLUGIN}/event/state-ready`);
|
|
11
|
+
export const DefaultSpaceReady = defineEvent(`${SPACE_PLUGIN}/event/default-space-ready`);
|
|
12
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type Graph } from '@dxos/plugin-graph';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* React hook to get a path from the graph.
|
|
11
|
+
*
|
|
12
|
+
* @param graph Graph to find the node in.
|
|
13
|
+
* @param id Id of the node to find a path to.
|
|
14
|
+
* @param timeout Optional timeout in milliseconds to wait for the node to be found.
|
|
15
|
+
* @returns Path if found, undefined otherwise.
|
|
16
|
+
*/
|
|
17
|
+
// TODO(wittjosiah): Factor out.
|
|
18
|
+
export const usePath = (graph: Graph, id?: string, timeout?: number): string[] | undefined => {
|
|
19
|
+
const [pathState, setPathState] = useState<string[] | undefined>(id ? graph.getPath({ target: id }) : undefined);
|
|
20
|
+
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!id && pathState) {
|
|
23
|
+
setPathState(undefined);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (pathState?.at(-1) === id || !id) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Set timeout did not seem to effectively not block the UI thread.
|
|
31
|
+
const frame = requestAnimationFrame(async () => {
|
|
32
|
+
try {
|
|
33
|
+
const path = await graph.waitForPath({ target: id }, { timeout });
|
|
34
|
+
if (path) {
|
|
35
|
+
setPathState(path);
|
|
36
|
+
}
|
|
37
|
+
} catch {}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return () => cancelAnimationFrame(frame);
|
|
41
|
+
}, [graph, id, timeout, pathState]);
|
|
42
|
+
|
|
43
|
+
return pathState;
|
|
44
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -2,14 +2,10 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export default SpacePlugin;
|
|
5
|
+
export { SpaceCapabilities, ThreadCapabilities } from './capabilities';
|
|
6
|
+
export { SpaceEvents } from './events';
|
|
8
7
|
|
|
9
8
|
export * from './components';
|
|
10
9
|
export * from './meta';
|
|
11
|
-
export * from './types';
|
|
12
|
-
export * from './util';
|
|
13
|
-
export { default as translations } from './translations';
|
|
14
|
-
|
|
15
10
|
export * from './SpacePlugin';
|
|
11
|
+
export * from './util';
|
package/src/meta.ts
CHANGED
|
@@ -5,36 +5,8 @@
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
7
|
export const SPACE_PLUGIN = 'dxos.org/plugin/space';
|
|
8
|
-
export const SPACE_PLUGIN_SHORT_ID = 'space';
|
|
9
8
|
|
|
10
|
-
export
|
|
9
|
+
export const meta = {
|
|
11
10
|
id: SPACE_PLUGIN,
|
|
12
|
-
shortId: SPACE_PLUGIN_SHORT_ID,
|
|
13
11
|
name: 'Spaces',
|
|
14
12
|
} satisfies PluginMeta;
|
|
15
|
-
|
|
16
|
-
const SPACE_ACTION = `${SPACE_PLUGIN}/action`;
|
|
17
|
-
export enum SpaceAction {
|
|
18
|
-
OPEN_CREATE_SPACE = `${SPACE_ACTION}/open-create-space`,
|
|
19
|
-
CREATE = `${SPACE_ACTION}/create`,
|
|
20
|
-
JOIN = `${SPACE_ACTION}/join`,
|
|
21
|
-
SHARE = `${SPACE_ACTION}/share`,
|
|
22
|
-
LOCK = `${SPACE_ACTION}/lock`,
|
|
23
|
-
UNLOCK = `${SPACE_ACTION}/unlock`,
|
|
24
|
-
RENAME = `${SPACE_ACTION}/rename`,
|
|
25
|
-
OPEN = `${SPACE_ACTION}/open`,
|
|
26
|
-
CLOSE = `${SPACE_ACTION}/close`,
|
|
27
|
-
MIGRATE = `${SPACE_ACTION}/migrate`,
|
|
28
|
-
OPEN_CREATE_OBJECT = `${SPACE_ACTION}/open-create-object`,
|
|
29
|
-
ADD_OBJECT = `${SPACE_ACTION}/add-object`,
|
|
30
|
-
REMOVE_OBJECTS = `${SPACE_ACTION}/remove-objects`,
|
|
31
|
-
RENAME_OBJECT = `${SPACE_ACTION}/rename-object`,
|
|
32
|
-
DUPLICATE_OBJECT = `${SPACE_ACTION}/duplicate-object`,
|
|
33
|
-
WAIT_FOR_OBJECT = `${SPACE_ACTION}/wait-for-object`,
|
|
34
|
-
TOGGLE_HIDDEN = `${SPACE_ACTION}/toggle-hidden`,
|
|
35
|
-
OPEN_SETTINGS = `${SPACE_ACTION}/open-settings`,
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export enum CollectionAction {
|
|
39
|
-
CREATE = 'dxos.org/plugin/collection/action/create',
|
|
40
|
-
}
|
package/src/translations.ts
CHANGED
|
@@ -105,10 +105,11 @@ export default [
|
|
|
105
105
|
'offline persisted label': 'Saved to disk (offline)',
|
|
106
106
|
'remote synced label': 'Synced with peers',
|
|
107
107
|
'open settings panel label': 'Show Settings',
|
|
108
|
+
'settings panel label': 'Settings',
|
|
108
109
|
'open space settings label': 'Space Settings',
|
|
109
110
|
'members tab label': 'Members',
|
|
110
111
|
'settings tab label': 'Settings',
|
|
111
|
-
'syncing
|
|
112
|
+
'syncing label': 'Space syncing',
|
|
112
113
|
'show all label': 'Show all',
|
|
113
114
|
'no sync status label': 'No space with missing objects.',
|
|
114
115
|
'create space dialog title': 'Create Space',
|
|
@@ -116,9 +117,13 @@ export default [
|
|
|
116
117
|
'space input placeholder': 'Select space',
|
|
117
118
|
'schema input placeholder': 'Select object type',
|
|
118
119
|
'creating object type label': 'Type',
|
|
119
|
-
'creating in space label': '
|
|
120
|
+
'creating in space label': 'Location',
|
|
120
121
|
'creating in collection label': 'In Collection',
|
|
121
122
|
'clear input label': 'Clear',
|
|
123
|
+
'expose object label': 'Expose in navtree',
|
|
124
|
+
'advanced settings label': 'Advanced',
|
|
125
|
+
'foreign keys': 'Foreign Keys',
|
|
126
|
+
'add key': 'Add Key',
|
|
122
127
|
},
|
|
123
128
|
},
|
|
124
129
|
},
|
package/src/types/collection.ts
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Expando,
|
|
5
|
+
import { Expando, Ref, S, TypedObject } from '@dxos/echo-schema';
|
|
6
6
|
|
|
7
7
|
export class CollectionType extends TypedObject({ typename: 'dxos.org/type/Collection', version: '0.1.0' })({
|
|
8
8
|
name: S.optional(S.String),
|
|
9
|
-
objects: S.mutable(S.Array(
|
|
9
|
+
objects: S.mutable(S.Array(Ref(Expando))),
|
|
10
10
|
// Key is schema typename and value is reference to a view object of the associated schema.
|
|
11
11
|
// Having collection reference the views rather than vice versa ensures that the state converges to a single view per key (i.e. type).
|
|
12
12
|
// This also leaves open a future where this key could be changed to allow for multiple stack views per section.
|
|
13
13
|
// TODO(wittjosiah): Any way to make this more type safe?
|
|
14
14
|
// TODO(wittjosiah): Should the views be separate objects or just be schemas for view data in this record?
|
|
15
|
-
views: S.mutable(S.Record({ key: S.String, value:
|
|
15
|
+
views: S.mutable(S.Record({ key: S.String, value: Ref(Expando) })),
|
|
16
16
|
}) {}
|
package/src/types/thread.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Expando,
|
|
5
|
+
import { Expando, Ref, S, TypedObject } from '@dxos/echo-schema';
|
|
6
6
|
|
|
7
7
|
// TODO(wittjosiah): These types were placed here rather than in @dxos/plugin-thread
|
|
8
8
|
// in order to avoid a circular dependency between threads and other objects that use threads.
|
|
@@ -22,7 +22,7 @@ export class ContactType extends TypedObject({ typename: 'dxos.org/type/Contact'
|
|
|
22
22
|
|
|
23
23
|
export const ActorSchema = S.mutable(
|
|
24
24
|
S.Struct({
|
|
25
|
-
contact: S.optional(
|
|
25
|
+
contact: S.optional(Ref(ContactType)),
|
|
26
26
|
// TODO(wittjosiah): Should the below fields just be the contact schema?
|
|
27
27
|
// i.e. it should either be a reference to an existing contact or an inline contact schema.
|
|
28
28
|
identityKey: S.optional(S.String),
|
|
@@ -51,7 +51,7 @@ export class MessageType extends TypedObject({ typename: 'dxos.org/type/Message'
|
|
|
51
51
|
/** Text content of the message. */
|
|
52
52
|
text: S.String,
|
|
53
53
|
/** Non-text content sent with a message (e.g., files, polls, etc.) */
|
|
54
|
-
parts: S.optional(S.mutable(S.Array(
|
|
54
|
+
parts: S.optional(S.mutable(S.Array(Ref(Expando)))),
|
|
55
55
|
/** Custom properties for specific message types (e.g. email subject or cc fields). */
|
|
56
56
|
properties: S.optional(S.mutable(S.Record({ key: S.String, value: S.Any }))),
|
|
57
57
|
// TODO(wittjosiah): Add read status:
|
|
@@ -59,7 +59,7 @@ export class MessageType extends TypedObject({ typename: 'dxos.org/type/Message'
|
|
|
59
59
|
// - Read receipts don't need to be added to schema until they being implemented.
|
|
60
60
|
/** Context of the application when message was created. */
|
|
61
61
|
// TODO(burdon): Evolve "attention object" to be current UX state? E.g., of Deck?
|
|
62
|
-
context: S.optional(
|
|
62
|
+
context: S.optional(Ref(Expando)),
|
|
63
63
|
}) {}
|
|
64
64
|
|
|
65
65
|
export const ThreadStatus = S.Union(S.Literal('staged'), S.Literal('active'), S.Literal('resolved'));
|
|
@@ -69,10 +69,10 @@ export class ThreadType extends TypedObject({ typename: 'dxos.org/type/Thread',
|
|
|
69
69
|
/** AM cursor-range: 'from:to'. */
|
|
70
70
|
anchor: S.optional(S.String),
|
|
71
71
|
status: S.optional(ThreadStatus),
|
|
72
|
-
messages: S.mutable(S.Array(
|
|
72
|
+
messages: S.mutable(S.Array(Ref(MessageType))),
|
|
73
73
|
}) {}
|
|
74
74
|
|
|
75
75
|
export class ChannelType extends TypedObject({ typename: 'dxos.org/type/Channel', version: '0.1.0' })({
|
|
76
76
|
name: S.optional(S.String),
|
|
77
|
-
threads: S.mutable(S.Array(
|
|
77
|
+
threads: S.mutable(S.Array(Ref(ThreadType))),
|
|
78
78
|
}) {}
|