@dxos/plugin-space 0.7.3-staging.cc8dd3e → 0.7.3
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/index.mjs +77 -76
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +63 -61
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +77 -76
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts +1 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts +1 -0
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.stories.d.ts +6 -0
- package/dist/types/src/components/SyncStatus/InlineSyncStatus.stories.d.ts.map +1 -0
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +3 -2
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +3 -2
- package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +1 -1
- package/package.json +38 -38
- package/src/SpacePlugin.tsx +35 -53
- package/src/components/CreateDialog/CreateObjectDialog.tsx +3 -2
- package/src/components/JoinDialog.tsx +3 -1
- package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +4 -4
- package/src/components/SyncStatus/InlineSyncStatus.stories.tsx +57 -0
- package/src/components/SyncStatus/InlineSyncStatus.tsx +20 -4
- package/src/components/SyncStatus/SyncStatus.stories.tsx +15 -13
- package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +10 -8
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/SpacePlugin.tsx", "../../../src/components/AwaitingObject.tsx", "../../../src/components/CreateDialog/CreateObjectDialog.tsx", "../../../src/components/CreateDialog/CreateObjectPanel.tsx", "../../../src/util.tsx", "../../../src/components/CreateDialog/CreateSpaceDialog.tsx", "../../../src/components/CollectionMain.tsx", "../../../src/components/CollectionSection.tsx", "../../../src/components/DefaultObjectSettings.tsx", "../../../src/components/JoinDialog.tsx", "../../../src/components/MenuFooter.tsx", "../../../src/components/PersistenceStatus.tsx", "../../../src/components/PopoverRenameObject.tsx", "../../../src/components/PopoverRenameSpace.tsx", "../../../src/components/ShareSpaceButton.tsx", "../../../src/components/SpacePresence.tsx", "../../../src/components/SpacePluginSettings.tsx", "../../../src/components/SpaceSettings/SpaceSettingsDialog.tsx", "../../../src/components/SpaceSettings/SpaceSettingsPanel.tsx", "../../../src/components/SyncStatus/InlineSyncStatus.tsx", "../../../src/components/SyncStatus/sync-state.ts", "../../../src/components/SyncStatus/SyncStatus.tsx", "../../../src/components/SyncStatus/Space.tsx", "../../../src/components/SyncStatus/save-tracker.ts", "../../../src/components/SyncStatus/status.ts", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport React from 'react';\n\nimport {\n type GraphProvides,\n type IntentDispatcher,\n type IntentPluginProvides,\n LayoutAction,\n type LayoutProvides,\n type LocationProvides,\n type MetadataResolverProvides,\n NavigationAction,\n type Plugin,\n type PluginDefinition,\n Surface,\n filterPlugins,\n findPlugin,\n firstIdInPart,\n openIds,\n parseGraphPlugin,\n parseIntentPlugin,\n parseLayoutPlugin,\n parseMetadataResolverPlugin,\n parseNavigationPlugin,\n resolvePlugin,\n} from '@dxos/app-framework';\nimport { EventSubscriptions, type Trigger, type UnsubscribeCallback } from '@dxos/async';\nimport { S, type AbstractTypedObject, type HasId } from '@dxos/echo-schema';\nimport { scheduledEffect } from '@dxos/echo-signals/core';\nimport { invariant } from '@dxos/invariant';\nimport { create, isDeleted, isReactiveObject } from '@dxos/live-object';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\nimport { Migrations } from '@dxos/migrations';\nimport { type AttentionPluginProvides, parseAttentionPlugin } from '@dxos/plugin-attention';\nimport { type ClientPluginProvides, parseClientPlugin } from '@dxos/plugin-client';\nimport { type Node, createExtension, memoize, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { type Client, PublicKey } from '@dxos/react-client';\nimport {\n Expando,\n FQ_ID_LENGTH,\n Filter,\n OBJECT_ID_LENGTH,\n type ReactiveEchoObject,\n SPACE_ID_LENGTH,\n type Space,\n SpaceState,\n fullyQualifiedId,\n getSpace,\n getTypename,\n isEchoObject,\n isSpace,\n loadObjectReferences,\n parseFullyQualifiedId,\n parseId,\n} from '@dxos/react-client/echo';\nimport { type JoinPanelProps, osTranslations } from '@dxos/shell/react';\nimport { ComplexMap, nonNullable, reduceGroupBy } from '@dxos/util';\n\nimport {\n AwaitingObject,\n CollectionMain,\n CollectionSection,\n CreateObjectDialog,\n type CreateObjectDialogProps,\n CreateSpaceDialog,\n DefaultObjectSettings,\n JoinDialog,\n InlineSyncStatus,\n MenuFooter,\n PopoverRenameObject,\n PopoverRenameSpace,\n ShareSpaceButton,\n SmallPresence,\n SmallPresenceLive,\n SpacePluginSettings,\n SpacePresence,\n SpaceSettingsDialog,\n SpaceSettingsPanel,\n SyncStatus,\n type SpaceSettingsDialogProps,\n} from './components';\nimport meta, { CollectionAction, SPACE_PLUGIN, SpaceAction } from './meta';\nimport translations from './translations';\nimport {\n CollectionType,\n parseSchemaPlugin,\n SpaceForm,\n type PluginState,\n type SpacePluginProvides,\n type SpaceSettingsProps,\n} from './types';\nimport {\n COMPOSER_SPACE_LOCK,\n SHARED,\n SPACES,\n SPACE_TYPE,\n cloneObject,\n constructObjectActions,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n getNestedObjects,\n memoizeQuery,\n} from './util';\n\nconst ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;\nconst WAIT_FOR_OBJECT_TIMEOUT = 1000;\nconst SPACE_MAX_OBJECTS = 500;\n// https://stackoverflow.com/a/19016910\nconst DIRECTORY_TYPE = 'text/directory';\n\nexport const parseSpacePlugin = (plugin?: Plugin) =>\n Array.isArray((plugin?.provides as any).space?.enabled) ? (plugin as Plugin<SpacePluginProvides>) : undefined;\n\nexport type SpacePluginOptions = {\n /**\n * Base URL for the invitation link.\n */\n invitationUrl?: string;\n\n /**\n * Query parameter for the invitation code.\n */\n invitationParam?: string;\n\n /**\n * Fired when first run logic should be executed.\n *\n * This trigger is invoked once the HALO identity is created but must only be run in one instance of the application.\n * As such it cannot depend directly on the HALO identity event.\n */\n firstRun?: Trigger<void>;\n\n /**\n * Root collection structure is created on application first run if it does not yet exist.\n * This callback is invoked immediately following the creation of the root collection structure.\n *\n * @param params.client DXOS Client\n * @param params.dispatch Function to dispatch intents\n */\n onFirstRun?: (params: { client: Client; dispatch: IntentDispatcher }) => Promise<void>;\n};\n\nexport const SpacePlugin = ({\n invitationUrl = window.location.origin,\n invitationParam = 'spaceInvitationCode',\n firstRun,\n onFirstRun,\n}: SpacePluginOptions = {}): PluginDefinition<SpacePluginProvides> => {\n const settings = new LocalStorageStore<SpaceSettingsProps>(SPACE_PLUGIN, {});\n const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {\n awaiting: undefined,\n spaceNames: {},\n viewersByObject: {},\n // TODO(wittjosiah): Stop using (Complex)Map inside reactive object.\n viewersByIdentity: new ComplexMap(PublicKey.hash),\n sdkMigrationRunning: {},\n navigableCollections: false,\n enabledEdgeReplication: false,\n });\n const subscriptions = new EventSubscriptions();\n const spaceSubscriptions = new EventSubscriptions();\n const graphSubscriptions = new Map<string, UnsubscribeCallback>();\n const schemas: AbstractTypedObject[] = [];\n\n let clientPlugin: Plugin<ClientPluginProvides> | undefined;\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let intentPlugin: Plugin<IntentPluginProvides> | undefined;\n let layoutPlugin: Plugin<LayoutProvides> | undefined;\n let navigationPlugin: Plugin<LocationProvides> | undefined;\n let attentionPlugin: Plugin<AttentionPluginProvides> | undefined;\n let metadataPlugin: Plugin<MetadataResolverProvides> | undefined;\n\n const createSpaceInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationUrl);\n baseUrl.searchParams.set(invitationParam, invitationCode);\n return baseUrl.toString();\n };\n\n const onSpaceReady = async () => {\n if (!clientPlugin || !intentPlugin || !graphPlugin || !navigationPlugin || !layoutPlugin || !attentionPlugin) {\n return;\n }\n\n const client = clientPlugin.provides.client;\n const dispatch = intentPlugin.provides.intent.dispatch;\n const graph = graphPlugin.provides.graph;\n const location = navigationPlugin.provides.location;\n const layout = layoutPlugin.provides.layout;\n const attention = attentionPlugin.provides.attention;\n const defaultSpace = client.spaces.default;\n\n // Initialize space sharing lock in default space.\n if (typeof defaultSpace.properties[COMPOSER_SPACE_LOCK] !== 'boolean') {\n defaultSpace.properties[COMPOSER_SPACE_LOCK] = true;\n }\n\n const {\n objects: [spacesOrder],\n } = await defaultSpace.db.query(Filter.schema(Expando, { key: SHARED })).run();\n if (!spacesOrder) {\n // TODO(wittjosiah): Cannot be a Folder because Spaces are not TypedObjects so can't be saved in the database.\n // Instead, we store order as an array of space ids.\n defaultSpace.db.add(create({ key: SHARED, order: [] }));\n }\n\n // Await missing objects.\n subscriptions.add(\n scheduledEffect(\n () => ({\n layoutMode: layout.layoutMode,\n soloPart: location.active.solo?.[0],\n }),\n ({ layoutMode, soloPart }) => {\n if (layoutMode !== 'solo' || !soloPart) {\n return;\n }\n\n const node = graph.findNode(soloPart.id);\n if (!node && soloPart.id.length === FQ_ID_LENGTH) {\n const timeout = setTimeout(async () => {\n const node = graph.findNode(soloPart.id);\n if (!node) {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.WAIT_FOR_OBJECT,\n data: { id: soloPart.id },\n });\n }\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n return () => clearTimeout(timeout);\n }\n },\n ),\n );\n\n // Cache space names.\n subscriptions.add(\n client.spaces.subscribe(async (spaces) => {\n // TODO(wittjosiah): Remove. This is a hack to be able to migrate the default space properties.\n if (defaultSpace.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {\n await defaultSpace.internal.migrate();\n }\n\n spaces\n .filter((space) => space.state.get() === SpaceState.SPACE_READY)\n .forEach((space) => {\n subscriptions.add(\n scheduledEffect(\n () => ({ name: space.properties.name }),\n ({ name }) => (state.values.spaceNames[space.id] = name),\n ),\n );\n });\n }).unsubscribe,\n );\n\n // Broadcast active node to other peers in the space.\n subscriptions.add(\n scheduledEffect(\n () => ({\n open: openIds(location.active, layout.layoutMode === 'solo' ? ['solo'] : ['main']),\n closed: [...location.closed],\n }),\n ({ open, closed }) => {\n const send = () => {\n const spaces = client.spaces.get();\n const identity = client.halo.identity.get();\n if (identity && location.active) {\n // Group parts by space for efficient messaging.\n const idsBySpace = reduceGroupBy(open, (id) => {\n try {\n const [spaceId] = parseFullyQualifiedId(id);\n return spaceId;\n } catch {\n return null;\n }\n });\n\n const removedBySpace = reduceGroupBy(closed, (id) => {\n try {\n const [spaceId] = parseFullyQualifiedId(id);\n return spaceId;\n } catch {\n return null;\n }\n });\n\n // NOTE: Ensure all spaces are included so that we send the correct `removed` object arrays.\n for (const space of spaces) {\n if (!idsBySpace.has(space.id)) {\n idsBySpace.set(space.id, []);\n }\n }\n\n for (const [spaceId, added] of idsBySpace) {\n const removed = removedBySpace.get(spaceId) ?? [];\n const space = spaces.find((space) => space.id === spaceId);\n if (!space) {\n continue;\n }\n\n void space\n .postMessage('viewing', {\n identityKey: identity.identityKey.toHex(),\n attended: attention.attended ? [...attention.attended] : [],\n added,\n removed,\n })\n // TODO(burdon): This seems defensive; why would this fail? Backoff interval.\n .catch((err) => {\n log.warn('Failed to broadcast active node for presence.', { err: err.message });\n });\n }\n }\n };\n\n send();\n // Send at interval to allow peers to expire entries if they become disconnected.\n const interval = setInterval(() => send(), ACTIVE_NODE_BROADCAST_INTERVAL);\n return () => clearInterval(interval);\n },\n ),\n );\n\n // Listen for active nodes from other peers in the space.\n subscriptions.add(\n client.spaces.subscribe((spaces) => {\n spaceSubscriptions.clear();\n spaces.forEach((space) => {\n spaceSubscriptions.add(\n space.listen('viewing', (message) => {\n const { added, removed, attended } = message.payload;\n\n const identityKey = PublicKey.safeFrom(message.payload.identityKey);\n const currentIdentity = client.halo.identity.get();\n if (\n identityKey &&\n !currentIdentity?.identityKey.equals(identityKey) &&\n Array.isArray(added) &&\n Array.isArray(removed)\n ) {\n added.forEach((id) => {\n if (typeof id === 'string') {\n if (!(id in state.values.viewersByObject)) {\n state.values.viewersByObject[id] = new ComplexMap(PublicKey.hash);\n }\n state.values.viewersByObject[id]!.set(identityKey, {\n lastSeen: Date.now(),\n currentlyAttended: new Set(attended).has(id),\n });\n if (!state.values.viewersByIdentity.has(identityKey)) {\n state.values.viewersByIdentity.set(identityKey, new Set());\n }\n state.values.viewersByIdentity.get(identityKey)!.add(id);\n }\n });\n\n removed.forEach((id) => {\n if (typeof id === 'string') {\n state.values.viewersByObject[id]?.delete(identityKey);\n state.values.viewersByIdentity.get(identityKey)?.delete(id);\n // It’s okay for these to be empty sets/maps, reduces churn.\n }\n });\n }\n }),\n );\n });\n }).unsubscribe,\n );\n };\n\n const setEdgeReplicationDefault = async (client: Client) => {\n try {\n await Promise.all(\n client.spaces.get().map((space) => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED)),\n );\n state.values.enabledEdgeReplication = true;\n } catch (err) {\n log.catch(err);\n }\n };\n\n return {\n meta,\n ready: async (plugins) => {\n settings.prop({ key: 'showHidden', type: LocalStorageStore.bool({ allowUndefined: true }) });\n state\n .prop({ key: 'spaceNames', type: LocalStorageStore.json<Record<string, string>>() })\n .prop({ key: 'enabledEdgeReplication', type: LocalStorageStore.bool() });\n\n // TODO(wittjosiah): Hardcoded due to circular dependency.\n // Should be based on a provides interface.\n if (findPlugin(plugins, 'dxos.org/plugin/stack')) {\n state.values.navigableCollections = true;\n }\n\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n layoutPlugin = resolvePlugin(plugins, parseLayoutPlugin);\n metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);\n navigationPlugin = resolvePlugin(plugins, parseNavigationPlugin);\n attentionPlugin = resolvePlugin(plugins, parseAttentionPlugin);\n clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n if (!clientPlugin || !intentPlugin) {\n return;\n }\n\n const client = clientPlugin.provides.client;\n const dispatch = intentPlugin.provides.intent.dispatch;\n\n schemas.push(\n ...filterPlugins(plugins, parseSchemaPlugin)\n .map((plugin) => plugin.provides.echo.schema)\n .filter(nonNullable)\n .reduce((acc, schema) => {\n return [...acc, ...schema];\n }),\n );\n client.addTypes(schemas);\n filterPlugins(plugins, parseSchemaPlugin).forEach((plugin) => {\n if (plugin.provides.echo.system) {\n client.addTypes(plugin.provides.echo.system);\n }\n });\n\n const handleFirstRun = async () => {\n const defaultSpace = client.spaces.default;\n\n // Create root collection structure.\n defaultSpace.properties[CollectionType.typename] = create(CollectionType, { objects: [], views: {} });\n if (Migrations.versionProperty) {\n defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;\n }\n await onFirstRun?.({ client, dispatch });\n };\n\n subscriptions.add(\n client.spaces.isReady.subscribe(async (ready) => {\n if (ready) {\n await clientPlugin?.provides.client.spaces.default.waitUntilReady();\n if (firstRun) {\n void firstRun?.wait().then(handleFirstRun);\n } else {\n await handleFirstRun();\n }\n\n await onSpaceReady();\n await setEdgeReplicationDefault(client);\n }\n }).unsubscribe,\n );\n },\n unload: async () => {\n settings.close();\n spaceSubscriptions.clear();\n subscriptions.clear();\n graphSubscriptions.forEach((cb) => cb());\n graphSubscriptions.clear();\n },\n provides: {\n space: state.values,\n settings: settings.values,\n translations: [...translations, osTranslations],\n complementary: {\n panels: [\n { id: 'settings', label: ['open settings panel label', { ns: SPACE_PLUGIN }], icon: 'ph--gear--regular' },\n ],\n },\n root: () => (state.values.awaiting ? <AwaitingObject id={state.values.awaiting} /> : null),\n metadata: {\n records: {\n [CollectionType.typename]: {\n createObject: CollectionAction.CREATE,\n placeholder: ['unnamed collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--cards-three--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (collection: CollectionType) =>\n loadObjectReferences(collection, (collection) => [\n ...collection.objects,\n ...Object.values(collection.views),\n ]),\n },\n },\n },\n echo: {\n schema: [CollectionType],\n },\n surface: {\n component: ({ data, role, ...rest }) => {\n switch (role) {\n case 'article':\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n return isSpace(data.object) && data.object.state.get() === SpaceState.SPACE_READY ? (\n <Surface\n data={{ object: data.object.properties[CollectionType.typename], id: data.object.id }}\n role={role}\n {...rest}\n />\n ) : data.object instanceof CollectionType ? (\n {\n node: <CollectionMain collection={data.object} />,\n disposition: 'fallback',\n }\n ) : null;\n // TODO(burdon): Add role name syntax to minimal plugin docs.\n case 'complementary--settings':\n return isSpace(data.subject) ? (\n <SpaceSettingsPanel space={data.subject} />\n ) : isEchoObject(data.subject) ? (\n { node: <DefaultObjectSettings object={data.subject} />, disposition: 'fallback' }\n ) : null;\n case 'dialog':\n if (data.component === 'dxos.org/plugin/space/SpaceSettingsDialog') {\n return (\n <SpaceSettingsDialog\n {...(data.subject as SpaceSettingsDialogProps)}\n createInvitationUrl={createSpaceInvitationUrl}\n />\n );\n } else if (data.component === 'dxos.org/plugin/space/JoinDialog') {\n return <JoinDialog {...(data.subject as JoinPanelProps)} />;\n } else if (data.component === 'dxos.org/plugin/space/CreateSpaceDialog') {\n return <CreateSpaceDialog />;\n } else if (data.component === 'dxos.org/plugin/space/CreateObjectDialog') {\n return (\n <CreateObjectDialog\n {...(data.subject as CreateObjectDialogProps)}\n schemas={schemas}\n navigableCollections={state.values.navigableCollections}\n resolve={metadataPlugin?.provides.metadata.resolver}\n />\n );\n }\n return null;\n case 'popover': {\n if (data.component === 'dxos.org/plugin/space/RenameSpacePopover' && isSpace(data.subject)) {\n return <PopoverRenameSpace space={data.subject} />;\n }\n if (data.component === 'dxos.org/plugin/space/RenameObjectPopover' && isReactiveObject(data.subject)) {\n return <PopoverRenameObject object={data.subject} />;\n }\n return null;\n }\n case 'navtree-item-end': {\n return isReactiveObject(data.object) ? (\n <SmallPresenceLive\n id={data.id as string}\n viewers={state.values.viewersByObject[fullyQualifiedId(data.object)]}\n />\n ) : isSpace(data.object) ? (\n <InlineSyncStatus space={data.object} />\n ) : (\n // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.\n <SmallPresence id={data.id as string} count={0} />\n );\n }\n case 'navbar-end': {\n if (!isEchoObject(data.object) && !isSpace(data.object)) {\n return null;\n }\n\n const space = isSpace(data.object) ? data.object : getSpace(data.object);\n const object = isSpace(data.object)\n ? data.object.state.get() === SpaceState.SPACE_READY\n ? (space?.properties[CollectionType.typename] as CollectionType)\n : undefined\n : data.object;\n\n return space && object\n ? {\n node: (\n <>\n <SpacePresence object={object} />\n {space.properties[COMPOSER_SPACE_LOCK] ? null : <ShareSpaceButton space={space} />}\n </>\n ),\n disposition: 'hoist',\n }\n : null;\n }\n case 'section':\n return data.object instanceof CollectionType ? <CollectionSection collection={data.object} /> : null;\n case 'settings':\n return data.plugin === meta.id ? <SpacePluginSettings settings={settings.values} /> : null;\n case 'menu-footer':\n if (isEchoObject(data.object)) {\n return <MenuFooter object={data.object} />;\n } else {\n return null;\n }\n case 'status': {\n return <SyncStatus />;\n }\n default:\n return null;\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n const metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);\n const graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n\n const client = clientPlugin?.provides.client;\n const dispatch = intentPlugin?.provides.intent.dispatch;\n const resolve = metadataPlugin?.provides.metadata.resolver;\n const graph = graphPlugin?.provides.graph;\n if (!client || !dispatch || !resolve || !graph) {\n return [];\n }\n\n return [\n // Create spaces group node.\n createExtension({\n id: `${SPACE_PLUGIN}/root`,\n filter: (node): node is Node<null> => node.id === 'root',\n connector: () => {\n const isReady = toSignal(\n (onChange) => {\n let defaultSpaceUnsubscribe: UnsubscribeCallback | undefined;\n // No need to unsubscribe because this observable completes when spaces are ready.\n client.spaces.isReady.subscribe((ready) => {\n if (ready) {\n defaultSpaceUnsubscribe = client.spaces.default.state.subscribe(() => onChange()).unsubscribe;\n }\n });\n\n return () => defaultSpaceUnsubscribe?.();\n },\n () => client.spaces.isReady.get() && client.spaces.default.state.get() === SpaceState.SPACE_READY,\n );\n if (!isReady) {\n return [];\n }\n\n return [\n {\n id: SPACES,\n type: SPACES,\n cacheable: ['label', 'role'],\n properties: {\n label: ['spaces label', { ns: SPACE_PLUGIN }],\n testId: 'spacePlugin.spaces',\n role: 'branch',\n disabled: true,\n childrenPersistenceClass: 'echo',\n onRearrangeChildren: async (nextOrder: Space[]) => {\n // NOTE: This is needed to ensure order is updated by next animation frame.\n // TODO(wittjosiah): Is there a better way to do this?\n // If not, graph should be passed as an argument to the extension.\n graph._sortEdges(\n SPACES,\n 'outbound',\n nextOrder.map(({ id }) => id),\n );\n\n const {\n objects: [spacesOrder],\n } = await client.spaces.default.db.query(Filter.schema(Expando, { key: SHARED })).run();\n if (spacesOrder) {\n spacesOrder.order = nextOrder.map(({ id }) => id);\n } else {\n log.warn('spaces order object not found');\n }\n },\n },\n },\n ];\n },\n }),\n\n // Create space nodes.\n createExtension({\n id: SPACES,\n filter: (node): node is Node<null> => node.id === SPACES,\n actions: () => [\n {\n id: SpaceAction.OPEN_CREATE_SPACE,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.OPEN_CREATE_SPACE,\n });\n },\n properties: {\n label: ['create space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n testId: 'spacePlugin.createSpace',\n disposition: 'item',\n className: 'border-t border-separator',\n },\n },\n {\n id: SpaceAction.JOIN,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.JOIN,\n });\n },\n properties: {\n label: ['join space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\n disposition: 'item',\n },\n },\n ],\n connector: () => {\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n\n const isReady = toSignal(\n (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.isReady.get(),\n );\n\n if (!spaces || !isReady) {\n return;\n }\n\n // TODO(wittjosiah): During client reset, accessing default space throws.\n try {\n const [spacesOrder] = memoizeQuery(client.spaces.default, Filter.schema(Expando, { key: SHARED }));\n const order: string[] = spacesOrder?.order ?? [];\n const orderMap = new Map(order.map((id, index) => [id, index]));\n return [\n ...spaces\n .filter((space) => orderMap.has(space.id))\n .sort((a, b) => orderMap.get(a.id)! - orderMap.get(b.id)!),\n ...spaces.filter((space) => !orderMap.has(space.id)),\n ]\n .filter((space) =>\n settings.values.showHidden ? true : space.state.get() !== SpaceState.SPACE_INACTIVE,\n )\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: state.values.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.values.spaceNames,\n resolve,\n }),\n );\n } catch {}\n },\n resolver: ({ id }) => {\n if (id.length !== SPACE_ID_LENGTH) {\n return;\n }\n\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n\n const isReady = toSignal(\n (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.isReady.get(),\n );\n\n if (!spaces || !isReady) {\n return;\n }\n\n const space = spaces.find((space) => space.id === id);\n if (!space) {\n return;\n }\n\n if (space.state.get() === SpaceState.SPACE_INACTIVE) {\n return false;\n } else {\n return constructSpaceNode({\n space,\n navigable: state.values.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.values.spaceNames,\n resolve,\n });\n }\n },\n }),\n\n // Create space actions.\n createExtension({\n id: `${SPACE_PLUGIN}/actions`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n actions: ({ node }) => {\n const space = node.data;\n return constructSpaceActions({\n space,\n dispatch,\n personal: space === client.spaces.default,\n migrating: state.values.sdkMigrationRunning[space.id],\n });\n },\n }),\n\n // Create nodes for objects in the root collection of a space.\n createExtension({\n id: `${SPACE_PLUGIN}/root-collection`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n connector: ({ node }) => {\n const space = node.data;\n const spaceState = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (spaceState !== SpaceState.SPACE_READY) {\n return;\n }\n\n const collection = space.properties[CollectionType.typename] as CollectionType | undefined;\n if (!collection) {\n return;\n }\n\n return collection.objects\n .filter(nonNullable)\n .map((object) =>\n createObjectNode({ object, space, resolve, navigable: state.values.navigableCollections }),\n )\n .filter(nonNullable);\n },\n }),\n\n // Create nodes for objects in a collection or by its fully qualified id.\n createExtension({\n id: `${SPACE_PLUGIN}/objects`,\n filter: (node): node is Node<CollectionType> => node.data instanceof CollectionType,\n connector: ({ node }) => {\n const collection = node.data;\n const space = getSpace(collection);\n if (!space) {\n return;\n }\n\n return collection.objects\n .filter(nonNullable)\n .map((object) =>\n createObjectNode({ object, space, resolve, navigable: state.values.navigableCollections }),\n )\n .filter(nonNullable);\n },\n resolver: ({ id }) => {\n if (id.length !== FQ_ID_LENGTH) {\n return;\n }\n\n const [spaceId, objectId] = id.split(':');\n if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {\n return;\n }\n\n const space = client.spaces.get().find((space) => space.id === spaceId);\n if (!space) {\n return;\n }\n\n const spaceState = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (spaceState !== SpaceState.SPACE_READY) {\n return;\n }\n\n const store = memoize(() => signal(space.db.getObjectById(objectId)), id);\n memoize(() => {\n if (!store.value) {\n void space.db\n .query({ id: objectId })\n .first()\n .then((o) => (store.value = o))\n .catch((err) => log.catch(err, { objectId }));\n }\n }, id);\n const object = store.value;\n if (!object) {\n return;\n }\n\n if (isDeleted(object)) {\n return false;\n } else {\n return createObjectNode({ object, space, resolve, navigable: state.values.navigableCollections });\n }\n },\n }),\n\n // Create collection actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/object-actions`,\n filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),\n actions: ({ node }) => constructObjectActions({ node, dispatch }),\n }),\n\n // Create nodes for object settings.\n createExtension({\n id: `${SPACE_PLUGIN}/settings-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~settings')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--gear--regular';\n\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find(\n (space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY,\n );\n if (!objectId) {\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: SPACE_PLUGIN }]\n : ['unnamed object settings label', { ns: SPACE_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: SPACE_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n ];\n },\n serializer: (plugins) => {\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!dispatch) {\n return [];\n }\n\n return [\n {\n inputType: SPACES,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],\n data: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: () => {\n // No-op.\n },\n },\n {\n inputType: SPACE_TYPE,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.properties.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed space label'],\n data: node.data.properties.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed space label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data) => {\n const result = await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.CREATE,\n data: { name: data.name },\n });\n return result?.data.space;\n },\n },\n {\n inputType: CollectionType.typename,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed collection label'],\n data: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed collection label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data, ancestors) => {\n const space = ancestors.find(isSpace);\n const collection =\n ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ??\n space?.properties[CollectionType.typename];\n if (!space || !collection) {\n return;\n }\n\n const result = await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: {\n target: collection,\n object: create(CollectionType, { name: data.name, objects: [], views: {} }),\n },\n });\n\n return result?.data.object;\n },\n },\n ];\n },\n },\n intent: {\n resolver: async (intent, plugins) => {\n const clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n const client = clientPlugin?.provides.client;\n switch (intent.action) {\n case SpaceAction.WAIT_FOR_OBJECT: {\n state.values.awaiting = intent.data?.id;\n return { data: true };\n }\n\n case SpaceAction.OPEN_CREATE_SPACE: {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/CreateSpaceDialog',\n dialogBlockAlign: 'start',\n subject: intent.data,\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.CREATE: {\n if (!client || !S.is(SpaceForm)(intent.data)) {\n return;\n }\n\n const space = await client.spaces.create({ name: intent.data.name });\n if (intent.data.edgeReplication) {\n await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);\n }\n await space.waitUntilReady();\n const collection = create(CollectionType, { objects: [], views: {} });\n space.properties[CollectionType.typename] = collection;\n\n if (Migrations.versionProperty) {\n space.properties[Migrations.versionProperty] = Migrations.targetVersion;\n }\n\n return {\n data: {\n space,\n id: space.id,\n activeParts: { main: [space.id] },\n },\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.create',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.JOIN: {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/JoinDialog',\n dialogBlockAlign: 'start',\n subject: {\n initialInvitationCode: intent.data?.invitationCode,\n } satisfies Partial<JoinPanelProps>,\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.SHARE: {\n const space = intent.data?.space;\n if (isSpace(space) && !space.properties[COMPOSER_SPACE_LOCK]) {\n const active = navigationPlugin?.provides.location.active;\n const mode = layoutPlugin?.provides.layout.layoutMode;\n const current = active ? firstIdInPart(active, mode === 'solo' ? 'solo' : 'main') : undefined;\n const target = current?.startsWith(space.id) ? current : undefined;\n\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/SpaceSettingsDialog',\n dialogBlockAlign: 'start',\n subject: {\n space,\n target,\n initialTab: 'members',\n createInvitationUrl: createSpaceInvitationUrl,\n } satisfies Partial<SpaceSettingsDialogProps>,\n },\n },\n ],\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.share',\n properties: {\n space: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.LOCK: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n space.properties[COMPOSER_SPACE_LOCK] = true;\n return {\n data: true,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.lock',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.UNLOCK: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n space.properties[COMPOSER_SPACE_LOCK] = false;\n return {\n data: true,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.unlock',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.RENAME: {\n const { caller, space } = intent.data ?? {};\n if (typeof caller === 'string' && isSpace(space)) {\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'popover',\n anchorId: `dxos.org/ui/${caller}/${space.id}`,\n component: 'dxos.org/plugin/space/RenameSpacePopover',\n subject: space,\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.OPEN_SETTINGS: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/SpaceSettingsDialog',\n dialogBlockAlign: 'start',\n subject: {\n space,\n initialTab: 'settings',\n createInvitationUrl: createSpaceInvitationUrl,\n } satisfies Partial<SpaceSettingsDialogProps>,\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.OPEN: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n await space.open();\n return { data: true };\n }\n break;\n }\n\n case SpaceAction.CLOSE: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n await space.close();\n return { data: true };\n }\n break;\n }\n\n case SpaceAction.MIGRATE: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n if (space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {\n state.values.sdkMigrationRunning[space.id] = true;\n await space.internal.migrate();\n state.values.sdkMigrationRunning[space.id] = false;\n }\n const result = await Migrations.migrate(space, intent.data?.version);\n return {\n data: result,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.migrate',\n properties: {\n spaceId: space.id,\n version: intent.data?.version,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.OPEN_CREATE_OBJECT: {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/CreateObjectDialog',\n dialogBlockAlign: 'start',\n subject: intent.data,\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.ADD_OBJECT: {\n const object = intent.data?.object ?? intent.data?.result;\n if (!isReactiveObject(object)) {\n return;\n }\n\n const space = isSpace(intent.data?.target) ? intent.data?.target : getSpace(intent.data?.target);\n if (!space) {\n return;\n }\n\n if (space.db.coreDatabase.getAllObjectIds().length >= SPACE_MAX_OBJECTS) {\n return {\n data: false,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'toast',\n subject: {\n id: `${SPACE_PLUGIN}/space-limit`,\n title: translations[0]['en-US'][SPACE_PLUGIN]['space limit label'],\n description: translations[0]['en-US'][SPACE_PLUGIN]['space limit description'],\n duration: 5_000,\n icon: 'ph--warning--regular',\n actionLabel: translations[0]['en-US'][SPACE_PLUGIN]['remove deleted objects label'],\n actionAlt: translations[0]['en-US'][SPACE_PLUGIN]['remove deleted objects alt'],\n // TODO(wittjosiah): Use OS namespace.\n closeLabel: translations[0]['en-US'][SPACE_PLUGIN]['space limit close label'],\n onAction: () => space.db.coreDatabase.unlinkDeletedObjects(),\n },\n },\n },\n ],\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.limit',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n\n if (intent.data?.target instanceof CollectionType) {\n intent.data?.target.objects.push(object as HasId);\n } else if (isSpace(intent.data?.target)) {\n const collection = space.properties[CollectionType.typename];\n if (collection instanceof CollectionType) {\n collection.objects.push(object as HasId);\n } else {\n // TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.\n const collection = create(CollectionType, { objects: [object as HasId], views: {} });\n space.properties[CollectionType.typename] = collection;\n }\n }\n\n return {\n data: { id: fullyQualifiedId(object), object, activeParts: { main: [fullyQualifiedId(object)] } },\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.object.add',\n properties: {\n spaceId: space.id,\n objectId: object.id,\n typename: getTypename(object),\n },\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.REMOVE_OBJECTS: {\n const objects = intent.data?.objects ?? intent.data?.result;\n invariant(Array.isArray(objects));\n\n // All objects must be a member of the same space.\n const space = getSpace(objects[0]);\n if (!space || !objects.every((obj) => isEchoObject(obj) && getSpace(obj) === space)) {\n return;\n }\n\n const resolve = resolvePlugin(plugins, parseMetadataResolverPlugin)?.provides.metadata.resolver;\n const activeParts = navigationPlugin?.provides.location.active;\n const openObjectIds = new Set<string>(openIds(activeParts ?? {}));\n\n if (!intent.undo && resolve) {\n const parentCollection = intent.data?.collection ?? space.properties[CollectionType.typename];\n const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));\n\n const deletionData = {\n objects,\n parentCollection,\n indices: objects.map((obj) =>\n parentCollection instanceof CollectionType ? parentCollection.objects.indexOf(obj as Expando) : -1,\n ),\n nestedObjectsList,\n wasActive: objects\n .flatMap((obj, i) => [obj, ...nestedObjectsList[i]])\n .map((obj) => fullyQualifiedId(obj))\n .filter((id) => openObjectIds.has(id)),\n };\n\n if (deletionData.wasActive.length > 0) {\n await intentPlugin?.provides.intent.dispatch({\n action: NavigationAction.CLOSE,\n data: {\n activeParts: {\n main: deletionData.wasActive,\n sidebar: deletionData.wasActive,\n },\n },\n });\n }\n\n if (deletionData.parentCollection instanceof CollectionType) {\n [...deletionData.indices]\n .sort((a, b) => b - a)\n .forEach((index: number) => {\n if (index !== -1) {\n deletionData.parentCollection.objects.splice(index, 1);\n }\n });\n }\n\n deletionData.nestedObjectsList.flat().forEach((obj) => {\n space.db.remove(obj);\n });\n objects.forEach((obj) => space.db.remove(obj));\n\n const undoMessageKey = objects.some((obj) => obj instanceof CollectionType)\n ? 'collection deleted label'\n : objects.length > 1\n ? 'objects deleted label'\n : 'object deleted label';\n\n return {\n data: true,\n undoable: {\n // TODO(ZaymonFC): Pluralize if more than one object.\n message: translations[0]['en-US'][SPACE_PLUGIN][undoMessageKey],\n data: deletionData,\n },\n };\n } else {\n const undoData = intent.data;\n if (\n undoData?.objects?.length &&\n undoData.objects.every(isEchoObject) &&\n undoData.parentCollection instanceof CollectionType\n ) {\n // Restore the object to the space.\n const restoredObjects = undoData.objects.map((obj: Expando) => space.db.add(obj));\n\n // Restore nested objects to the space.\n undoData.nestedObjectsList.flat().forEach((obj: Expando) => {\n space.db.add(obj);\n });\n\n undoData.indices.forEach((index: number, i: number) => {\n if (index !== -1) {\n undoData.parentCollection.objects.splice(index, 0, restoredObjects[i] as Expando);\n }\n });\n\n if (undoData.wasActive.length > 0) {\n await intentPlugin?.provides.intent.dispatch({\n action: NavigationAction.OPEN,\n data: { activeParts: { main: undoData.wasActive } },\n });\n }\n\n return { data: true };\n }\n\n return { data: false };\n }\n }\n\n case SpaceAction.RENAME_OBJECT: {\n const object = intent.data?.object ?? intent.data?.result;\n const caller = intent.data?.caller;\n if (isReactiveObject(object) && caller) {\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'popover',\n anchorId: `dxos.org/ui/${caller}/${fullyQualifiedId(object)}`,\n component: 'dxos.org/plugin/space/RenameObjectPopover',\n subject: object,\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.DUPLICATE_OBJECT: {\n const originalObject = intent.data?.object ?? intent.data?.result;\n const resolve = resolvePlugin(plugins, parseMetadataResolverPlugin)?.provides.metadata.resolver;\n const space = isSpace(intent.data?.target) ? intent.data?.target : getSpace(intent.data?.target);\n if (!isEchoObject(originalObject) || !resolve || !space) {\n return;\n }\n\n const newObject = await cloneObject(originalObject, resolve, space);\n return {\n intents: [\n [{ action: SpaceAction.ADD_OBJECT, data: { object: newObject, target: intent.data?.target } }],\n ],\n };\n }\n\n case SpaceAction.TOGGLE_HIDDEN: {\n settings.values.showHidden = intent.data?.state ?? !settings.values.showHidden;\n return { data: true };\n }\n\n case CollectionAction.CREATE: {\n const collection = create(CollectionType, {\n name: intent.data?.name,\n objects: [],\n views: {},\n });\n\n return { data: collection };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CheckCircle, CircleDashed, CircleNotch } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { parseIntentPlugin, useResolvePlugin, parseNavigationPlugin, NavigationAction } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';\nimport { Button, Toast, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\n\nconst WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes\nconst TOAST_TIMEOUT = 240e3; // 4 minutes\n\nexport const AwaitingObject = ({ id }: { id: string }) => {\n const [open, setOpen] = useState(true);\n const [waiting, setWaiting] = useState(true);\n const [found, setFound] = useState(false);\n const { t } = useTranslation(SPACE_PLUGIN);\n const intentPlugin = useResolvePlugin(parseIntentPlugin);\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n\n const client = useClient();\n const objects = useQuery(client.spaces, Filter.all());\n\n useEffect(() => {\n if (!id) {\n return;\n }\n\n const timeout = setTimeout(() => {\n setWaiting(false);\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n () => clearTimeout(timeout);\n }, [id]);\n\n useEffect(() => {\n if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {\n setFound(true);\n\n if (navigationPlugin?.provides.location.active.solo?.[0].id === id) {\n setOpen(false);\n }\n }\n }, [id, objects, intentPlugin]);\n\n const handleClose = async () =>\n intentPlugin?.provides.intent.dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.WAIT_FOR_OBJECT,\n data: { id: undefined },\n });\n\n const handleNavigate = () => {\n void intentPlugin?.provides.intent.dispatch({\n action: NavigationAction.OPEN,\n data: { activeParts: { main: [id] } },\n });\n void handleClose();\n };\n\n return (\n <Toast.Root open={open} duration={TOAST_TIMEOUT} onOpenChange={setOpen}>\n <Toast.Body>\n <Toast.Title classNames='flex items-center gap-2'>\n {found ? (\n <>\n <CheckCircle className={getSize(5)} />\n <span>{t('found object label')}</span>\n </>\n ) : waiting ? (\n <>\n <CircleNotch className={mx(getSize(5), 'animate-spin')} />\n <span>{t('waiting for object label')}</span>\n </>\n ) : (\n <>\n <CircleDashed className={getSize(5)} />\n <span>{t('object not found label')}</span>\n </>\n )}\n </Toast.Title>\n <Toast.Description>\n {t(\n found\n ? 'found object description'\n : waiting\n ? 'waiting for object description'\n : 'object not found description',\n )}\n </Toast.Description>\n </Toast.Body>\n <Toast.Actions>\n {found ? (\n <>\n <Toast.Action altText={t('go to object alt')} asChild>\n <Button variant='primary' onClick={handleNavigate}>\n {t('go to object label')}\n </Button>\n </Toast.Action>\n <Toast.Close asChild>\n <Button onClick={handleClose}>{t('close label', { ns: 'appkit' })}</Button>\n </Toast.Close>\n </>\n ) : (\n <Toast.Close asChild>\n <Button onClick={handleClose}>{t(waiting ? 'close label' : 'confirm label', { ns: 'appkit' })}</Button>\n </Toast.Close>\n )}\n </Toast.Actions>\n </Toast.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useRef } from 'react';\n\nimport { type MetadataResolver, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { type AbstractTypedObject, isReactiveObject, isSpace, useSpaces } from '@dxos/react-client/echo';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';\nimport { SPACE_PLUGIN, SpaceAction } from '../../meta';\nimport { CollectionType } from '../../types';\n\nexport type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'schemas' | 'target' | 'typename' | 'name'> & {\n resolve?: MetadataResolver;\n navigableCollections?: boolean;\n};\n\nexport const CreateObjectDialog = ({\n schemas,\n target,\n typename,\n name,\n navigableCollections,\n resolve,\n}: CreateObjectDialogProps) => {\n const closeRef = useRef<HTMLButtonElement | null>(null);\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const spaces = useSpaces();\n const dispatch = useIntentDispatcher();\n\n const handleCreateObject = useCallback(\n async ({\n schema,\n target: _target,\n name,\n }: {\n schema: AbstractTypedObject;\n target: CreateObjectPanelProps['target'];\n name?: string;\n }) => {\n const target = isSpace(_target) ? (_target.properties[CollectionType.typename] as CollectionType) : _target;\n const createObjectAction = resolve?.(schema.typename)?.createObject;\n if (!createObjectAction || !target) {\n // TODO(wittjosiah): UI feedback.\n return;\n }\n\n // NOTE: Must close before navigating or attention won't follow object.\n closeRef.current?.click();\n\n const result = await dispatch({ action: createObjectAction, data: { name } });\n const object = result?.data;\n if (isReactiveObject(object)) {\n await dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: { target, object },\n },\n ...(!(object instanceof CollectionType) || navigableCollections ? [{ action: NavigationAction.OPEN }] : []),\n ]);\n }\n },\n [dispatch, resolve],\n );\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title>{t('create object dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button ref={closeRef} density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div className='p-4'>\n <CreateObjectPanel\n schemas={schemas}\n spaces={spaces}\n target={target}\n typename={typename}\n name={name}\n defaultSpaceId={client.spaces.default.id}\n resolve={resolve}\n onCreateObject={handleCreateObject}\n />\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { type MetadataResolver } from '@dxos/app-framework';\nimport { type AbstractTypedObject, getObjectAnnotation, S } from '@dxos/echo-schema';\nimport { type SpaceId, type Space, isSpace } from '@dxos/react-client/echo';\nimport { Icon, IconButton, Input, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Form, InputHeader } from '@dxos/react-ui-form';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { nonNullable, type MaybePromise } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../../meta';\nimport { type CollectionType } from '../../types';\nimport { getSpaceDisplayName } from '../../util';\n\nexport type CreateObjectPanelProps = {\n schemas: AbstractTypedObject[];\n spaces: Space[];\n typename?: string;\n target?: Space | CollectionType;\n name?: string;\n defaultSpaceId?: SpaceId;\n resolve?: MetadataResolver;\n onCreateObject?: (params: {\n schema: AbstractTypedObject;\n target: Space | CollectionType;\n name?: string;\n }) => MaybePromise<void>;\n};\n\nexport const CreateObjectPanel = ({\n schemas,\n spaces,\n typename: initialTypename,\n target: initialTarget,\n name: initialName,\n defaultSpaceId,\n resolve,\n onCreateObject,\n}: CreateObjectPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [typename, setTypename] = useState<string | undefined>(initialTypename);\n const [target, setTarget] = useState<Space | CollectionType | undefined>(initialTarget);\n const schema = schemas.find((schema) => getObjectAnnotation(schema)?.typename === typename);\n const options = schemas.map(getObjectAnnotation).filter(nonNullable);\n\n const handleClearSchema = useCallback(() => setTypename(undefined), []);\n const handleClearTarget = useCallback(() => setTarget(undefined), []);\n\n const handleCreateObject = useCallback(\n async ({ name }: { name?: string }) => {\n if (!schema || !target) {\n return;\n }\n\n await onCreateObject?.({ schema, target, name });\n },\n [onCreateObject, schema, target],\n );\n\n // TODO(wittjosiah): All of these inputs should be rolled into a `Form` once it supports the necessary variants.\n const schemaInput = (\n <SearchList.Root label={t('schema input label')} classNames='flex flex-col grow overflow-hidden my-2 px-2'>\n <SearchList.Input\n autoFocus\n data-testid='create-object-form.schema-input'\n placeholder={t('schema input placeholder')}\n classNames='px-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {options.map((option) => (\n <SearchList.Item\n key={option.typename}\n value={t('typename label', { ns: option.typename, defaultValue: option.typename })}\n onSelect={() => setTypename(option.typename)}\n classNames='flex items-center gap-2'\n >\n <span className='flex gap-2 items-center grow truncate'>\n <Icon icon={resolve?.(option.typename).icon ?? 'ph--placeholder--regular'} size={5} />\n {t('typename label', { ns: option.typename, defaultValue: option.typename })}\n </span>\n </SearchList.Item>\n ))}\n </SearchList.Content>\n </SearchList.Root>\n );\n\n const spaceInput = (\n <SearchList.Root label={t('space input label')} classNames='flex flex-col grow overflow-hidden my-2 px-2'>\n <SearchList.Input\n autoFocus\n data-testid='create-object-form.space-input'\n placeholder={t('space input placeholder')}\n classNames='px-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {spaces.map((space) => (\n <SearchList.Item\n key={space.id}\n value={toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}\n onSelect={() => setTarget(space)}\n classNames='flex items-center gap-2'\n >\n <span className='grow truncate'>\n {toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}\n </span>\n </SearchList.Item>\n ))}\n </SearchList.Content>\n </SearchList.Root>\n );\n\n const form = (\n <Form\n autoFocus\n values={{ name: initialName }}\n schema={S.Struct({ name: S.optional(S.String) })}\n testId='create-object-form'\n onSave={handleCreateObject}\n />\n );\n\n return (\n <div role='form' className='flex flex-col gap-2'>\n {target && (\n <div role='none' className='px-2'>\n <Input.Root>\n <InputHeader>\n <Input.Label>\n {t(isSpace(target) ? 'creating in space label' : 'creating in collection label')}\n </Input.Label>\n </InputHeader>\n <div role='none' className='flex gap-2'>\n <Input.TextInput\n disabled\n value={\n isSpace(target)\n ? toLocalizedString(getSpaceDisplayName(target, { personal: target.id === defaultSpaceId }), t)\n : target.name || t('unnamed collection label')\n }\n />\n <IconButton iconOnly icon='ph--x--regular' label={t('clear input label')} onClick={handleClearTarget} />\n </div>\n </Input.Root>\n </div>\n )}\n {schema && (\n <div role='none' className='px-2'>\n <Input.Root>\n <InputHeader>\n <Input.Label>{t('creating object type label')}</Input.Label>\n </InputHeader>\n <div role='none' className='flex gap-2'>\n <Input.TextInput\n disabled\n value={t('typename label', { ns: schema.typename, defaultValue: schema.typename })}\n />\n <IconButton iconOnly icon='ph--x--regular' label={t('clear input label')} onClick={handleClearSchema} />\n </div>\n </Input.Root>\n </div>\n )}\n {!schema ? schemaInput : !target ? spaceInput : form}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IntentDispatcher, type MetadataResolver } from '@dxos/app-framework';\nimport { EXPANDO_TYPENAME, getObjectAnnotation, getTypename, type Expando } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { getSchema, isReactiveObject } from '@dxos/live-object';\nimport { Migrations } from '@dxos/migrations';\nimport {\n ACTION_GROUP_TYPE,\n ACTION_TYPE,\n cleanup,\n getGraph,\n memoize,\n type ActionData,\n type Graph,\n type InvokeParams,\n type Node,\n type NodeArg,\n} from '@dxos/plugin-graph';\nimport {\n Filter,\n fullyQualifiedId,\n getSpace,\n isEchoObject,\n isSpace,\n SpaceState,\n type Echo,\n type FilterSource,\n type Query,\n type QueryOptions,\n type ReactiveEchoObject,\n type Space,\n} from '@dxos/react-client/echo';\n\nimport { SPACE_PLUGIN, SpaceAction } from './meta';\nimport { CollectionType } from './types';\n\nexport const SPACES = `${SPACE_PLUGIN}-spaces`;\nexport const SPACE_TYPE = 'dxos.org/type/Space';\nexport const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';\n// TODO(wittjosiah): Remove.\nexport const SHARED = 'shared-spaces';\n\nconst EMPTY_ARRAY: never[] = [];\n\n/**\n *\n * @param spaceOrEcho\n * @param filter\n * @param options\n * @returns\n */\nexport const memoizeQuery = <T extends ReactiveEchoObject<any>>(\n spaceOrEcho?: Space | Echo,\n filter?: FilterSource<T>,\n options?: QueryOptions,\n): T[] => {\n const key = JSON.stringify({\n space: isSpace(spaceOrEcho) ? spaceOrEcho.id : undefined,\n filter: Filter.from(filter).toProto(),\n });\n\n const query = memoize(\n () =>\n isSpace(spaceOrEcho)\n ? spaceOrEcho.db.query(filter, options)\n : (spaceOrEcho?.query(filter, options) as Query<T> | undefined),\n key,\n );\n const unsubscribe = memoize(() => query?.subscribe(), key);\n cleanup(() => unsubscribe?.());\n\n return query?.objects ?? EMPTY_ARRAY;\n};\n\nexport const getSpaceDisplayName = (\n space: Space,\n { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},\n): string | [string, { ns: string }] => {\n return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0\n ? space.properties.name\n : namesCache[space.id]\n ? namesCache[space.id]\n : personal\n ? ['personal space label', { ns: SPACE_PLUGIN }]\n : ['unnamed space label', { ns: SPACE_PLUGIN }];\n};\n\nconst getCollectionGraphNodePartials = ({\n navigable,\n collection,\n space,\n resolve,\n}: {\n navigable: boolean;\n collection: CollectionType;\n space: Space;\n resolve: MetadataResolver;\n}) => {\n return {\n disabled: !navigable,\n acceptPersistenceClass: new Set(['echo']),\n acceptPersistenceKey: new Set([space.id]),\n role: 'branch',\n onRearrangeChildren: (nextOrder: unknown[]) => {\n // Change on disk.\n collection.objects = nextOrder.filter(isEchoObject);\n },\n onTransferStart: (child: Node<ReactiveEchoObject<any>>, index?: number) => {\n // TODO(wittjosiah): Support transfer between spaces.\n // const childSpace = getSpace(child.data);\n // if (space && childSpace && !childSpace.key.equals(space.key)) {\n // // Create clone of child and add to destination space.\n // const newObject = clone(child.data, {\n // // TODO(wittjosiah): This needs to be generalized and not hardcoded here.\n // additional: [\n // child.data.content,\n // ...(child.data.objects ?? []),\n // ...(child.data.objects ?? []).map((object: TypedObject) => object.content),\n // ],\n // });\n // space.db.add(newObject);\n // collection.objects.push(newObject);\n // } else {\n\n // Add child to destination collection.\n if (!collection.objects.includes(child.data)) {\n if (typeof index !== 'undefined') {\n collection.objects.splice(index, 0, child.data);\n } else {\n collection.objects.push(child.data);\n }\n }\n\n // }\n },\n onTransferEnd: (child: Node<ReactiveEchoObject<any>>, destination: Node) => {\n // Remove child from origin collection.\n const index = collection.objects.indexOf(child.data);\n if (index > -1) {\n collection.objects.splice(index, 1);\n }\n\n // TODO(wittjosiah): Support transfer between spaces.\n // const childSpace = getSpace(child.data);\n // const destinationSpace =\n // destination.data instanceof SpaceProxy ? destination.data : getSpace(destination.data);\n // if (destinationSpace && childSpace && !childSpace.key.equals(destinationSpace.key)) {\n // // Mark child as deleted in origin space.\n // childSpace.db.remove(child.data);\n // }\n },\n onCopy: async (child: Node<ReactiveEchoObject<any>>, index?: number) => {\n // Create clone of child and add to destination space.\n const newObject = await cloneObject(child.data, resolve, space);\n space.db.add(newObject);\n if (typeof index !== 'undefined') {\n collection.objects.splice(index, 0, newObject);\n } else {\n collection.objects.push(newObject);\n }\n },\n };\n};\n\nconst checkPendingMigration = (space: Space) => {\n return (\n space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||\n (space.state.get() === SpaceState.SPACE_READY &&\n !!Migrations.versionProperty &&\n space.properties[Migrations.versionProperty] !== Migrations.targetVersion)\n );\n};\n\nexport const constructSpaceNode = ({\n space,\n navigable = false,\n personal,\n namesCache,\n resolve,\n}: {\n space: Space;\n navigable?: boolean;\n personal?: boolean;\n namesCache?: Record<string, string>;\n resolve: MetadataResolver;\n}) => {\n const hasPendingMigration = checkPendingMigration(space);\n const collection = space.state.get() === SpaceState.SPACE_READY && space.properties[CollectionType.typename];\n const partials =\n space.state.get() === SpaceState.SPACE_READY && collection instanceof CollectionType\n ? getCollectionGraphNodePartials({ collection, space, resolve, navigable })\n : {};\n\n return {\n id: space.id,\n type: SPACE_TYPE,\n cacheable: ['label', 'icon', 'role'],\n data: space,\n properties: {\n ...partials,\n label: getSpaceDisplayName(space, { personal, namesCache }),\n description: space.state.get() === SpaceState.SPACE_READY && space.properties.description,\n icon: 'ph--planet--regular',\n disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,\n testId: 'spacePlugin.space',\n },\n };\n};\n\nexport const constructSpaceActions = ({\n space,\n dispatch,\n personal,\n migrating,\n}: {\n space: Space;\n dispatch: IntentDispatcher;\n personal?: boolean;\n migrating?: boolean;\n}) => {\n const state = space.state.get();\n const hasPendingMigration = checkPendingMigration(space);\n const getId = (id: string) => `${id}/${space.id}`;\n const actions: NodeArg<ActionData>[] = [];\n\n if (hasPendingMigration) {\n actions.push({\n id: getId(SpaceAction.MIGRATE),\n type: ACTION_GROUP_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.MIGRATE, data: { space } });\n },\n properties: {\n label: ['migrate space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--database--regular',\n disposition: 'toolbar',\n disabled: migrating || Migrations.running(space),\n },\n });\n }\n\n if (state === SpaceState.SPACE_READY && !hasPendingMigration) {\n const locked = space.properties[COMPOSER_SPACE_LOCK];\n actions.push(\n {\n id: getId(SpaceAction.OPEN_CREATE_OBJECT),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.OPEN_CREATE_OBJECT, data: { target: space } });\n },\n properties: {\n label: ['create object in space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n testId: 'spacePlugin.createObject',\n },\n },\n {\n id: getId(SpaceAction.SHARE),\n type: ACTION_TYPE,\n data: async () => {\n if (locked) {\n return;\n }\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.SHARE, data: { space } });\n },\n properties: {\n label: ['share space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--users--regular',\n disabled: locked,\n keyBinding: {\n macos: 'meta+.',\n windows: 'alt+.',\n },\n },\n },\n {\n id: locked ? getId(SpaceAction.UNLOCK) : getId(SpaceAction.LOCK),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: locked ? SpaceAction.UNLOCK : SpaceAction.LOCK,\n data: { space },\n });\n },\n properties: {\n label: [locked ? 'unlock space label' : 'lock space label', { ns: SPACE_PLUGIN }],\n icon: locked ? 'ph--lock-simple-open--regular' : 'ph--lock-simple--regular',\n },\n },\n {\n id: getId(SpaceAction.RENAME),\n type: ACTION_TYPE,\n data: async (params: InvokeParams) => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.RENAME, data: { space, ...params } });\n },\n properties: {\n label: ['rename space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--pencil-simple-line--regular',\n keyBinding: {\n macos: 'shift+F6',\n windows: 'shift+F6',\n },\n },\n },\n {\n id: getId(SpaceAction.OPEN_SETTINGS),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.OPEN_SETTINGS, data: { space } });\n },\n properties: {\n label: ['open space settings label', { ns: SPACE_PLUGIN }],\n icon: 'ph--gear--regular',\n },\n },\n );\n }\n\n // TODO(wittjosiah): Consider moving close space into the space settings dialog.\n if (state !== SpaceState.SPACE_INACTIVE && !hasPendingMigration) {\n actions.push({\n id: getId(SpaceAction.CLOSE),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.CLOSE, data: { space } });\n },\n properties: {\n label: ['close space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--x--regular',\n disabled: personal,\n },\n });\n }\n\n if (state === SpaceState.SPACE_INACTIVE) {\n actions.push({\n id: getId(SpaceAction.OPEN),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.OPEN, data: { space } });\n },\n properties: {\n label: ['open space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--clock-counter-clockwise--regular',\n disposition: 'toolbar',\n },\n });\n }\n\n return actions;\n};\n\nexport const createObjectNode = ({\n object,\n space,\n navigable = false,\n resolve,\n}: {\n object: ReactiveEchoObject<any>;\n space: Space;\n navigable?: boolean;\n resolve: MetadataResolver;\n}) => {\n const type = getTypename(object);\n if (!type) {\n return undefined;\n }\n\n const metadata = resolve(type);\n if (Object.keys(metadata).length === 0) {\n return undefined;\n }\n\n const partials =\n object instanceof CollectionType\n ? getCollectionGraphNodePartials({ collection: object, space, resolve, navigable })\n : metadata.graphProps;\n\n return {\n id: fullyQualifiedId(object),\n type,\n cacheable: ['label', 'icon', 'role'],\n data: object,\n properties: {\n ...partials,\n label: metadata.label?.(object) ||\n object.name ||\n metadata.placeholder || ['unnamed object label', { ns: SPACE_PLUGIN }],\n icon: metadata.icon ?? 'ph--placeholder--regular',\n testId: 'spacePlugin.object',\n persistenceClass: 'echo',\n persistenceKey: space?.id,\n },\n };\n};\n\nexport const constructObjectActions = ({\n node,\n dispatch,\n}: {\n node: Node<ReactiveEchoObject<any>>;\n dispatch: IntentDispatcher;\n}) => {\n const object = node.data;\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<ActionData>[] = [\n ...(object instanceof CollectionType\n ? [\n {\n id: getId(SpaceAction.ADD_OBJECT),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.OPEN_CREATE_OBJECT,\n data: { target: object },\n });\n },\n properties: {\n label: ['create object in collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n testId: 'spacePlugin.createObject',\n },\n },\n ]\n : []),\n {\n id: getId(SpaceAction.RENAME_OBJECT),\n type: ACTION_TYPE,\n data: async (params: InvokeParams) => {\n await dispatch({\n action: SpaceAction.RENAME_OBJECT,\n data: { object, ...params },\n });\n },\n properties: {\n label: [\n object instanceof CollectionType ? 'rename collection label' : 'rename object label',\n { ns: SPACE_PLUGIN },\n ],\n icon: 'ph--pencil-simple-line--regular',\n // TODO(wittjosiah): Doesn't work.\n // keyBinding: 'shift+F6',\n testId: 'spacePlugin.renameObject',\n },\n },\n {\n id: getId(SpaceAction.REMOVE_OBJECTS),\n type: ACTION_TYPE,\n data: async () => {\n const graph = getGraph(node);\n const collection = graph\n .nodes(node, { relation: 'inbound' })\n .find(({ data }) => data instanceof CollectionType)?.data;\n await dispatch([\n {\n action: SpaceAction.REMOVE_OBJECTS,\n data: { objects: [object], collection },\n },\n ]);\n },\n properties: {\n label: [\n object instanceof CollectionType ? 'delete collection label' : 'delete object label',\n { ns: SPACE_PLUGIN },\n ],\n icon: 'ph--trash--regular',\n keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',\n testId: 'spacePlugin.deleteObject',\n },\n },\n {\n id: getId('copy-link'),\n type: ACTION_TYPE,\n data: async () => {\n const url = `${window.location.origin}/${fullyQualifiedId(object)}`;\n await navigator.clipboard.writeText(url);\n },\n properties: {\n label: ['copy link label', { ns: SPACE_PLUGIN }],\n icon: 'ph--link--regular',\n testId: 'spacePlugin.copyLink',\n },\n },\n ];\n\n return actions;\n};\n\n/**\n * @deprecated\n */\nexport const getActiveSpace = (graph: Graph, active?: string) => {\n if (!active) {\n return;\n }\n\n const node = graph.findNode(active);\n if (!node || !isReactiveObject(node.data)) {\n return;\n }\n\n return getSpace(node.data);\n};\n\n/**\n * @deprecated This is a temporary solution.\n */\nexport const getNestedObjects = async (\n object: ReactiveEchoObject<any>,\n resolve: MetadataResolver,\n): Promise<ReactiveEchoObject<any>[]> => {\n const type = getTypename(object);\n if (!type) {\n return [];\n }\n\n const metadata = resolve(type);\n const loadReferences = metadata.loadReferences;\n if (typeof loadReferences !== 'function') {\n return [];\n }\n\n const objects: ReactiveEchoObject<any>[] = await loadReferences(object);\n const nested = await Promise.all(objects.map((object) => getNestedObjects(object, resolve)));\n return [...objects, ...nested.flat()];\n};\n\n/**\n * @deprecated Workaround for ECHO not supporting clone.\n */\n// TODO(burdon): Remove.\nexport const cloneObject = async (object: Expando, resolve: MetadataResolver, newSpace: Space): Promise<Expando> => {\n const schema = getSchema(object);\n const typename = schema ? getObjectAnnotation(schema)?.typename ?? EXPANDO_TYPENAME : EXPANDO_TYPENAME;\n const metadata = resolve(typename);\n const serializer = metadata.serializer;\n invariant(serializer, `No serializer for type: ${typename}`);\n const content = await serializer.serialize({ object });\n return serializer.deserialize({ content, space: newSpace, newId: true });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useRef } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { type S } from '@dxos/echo-schema';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { SPACE_PLUGIN, SpaceAction } from '../../meta';\nimport { SpaceForm } from '../../types';\n\ntype FormValues = S.Schema.Type<typeof SpaceForm>;\nconst initialValues: FormValues = { edgeReplication: true };\n\nexport const CreateSpaceDialog = () => {\n const closeRef = useRef<HTMLButtonElement | null>(null);\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n\n const handleCreateSpace = useCallback(\n async (data: FormValues) => {\n const result = await dispatch({\n action: SpaceAction.CREATE,\n data,\n });\n const target = result?.data.space;\n if (target) {\n await dispatch({\n action: SpaceAction.OPEN_CREATE_OBJECT,\n data: { target },\n });\n }\n },\n [dispatch],\n );\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title>{t('create space dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button ref={closeRef} density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div className='p-4'>\n <Form testId='create-space-form' values={initialValues} schema={SpaceForm} onSave={handleCreateSpace} />\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { CollectionType } from '../types';\n\nexport const CollectionMain = ({ collection }: { collection: CollectionType }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <div\n role='none'\n className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}\n data-testid='composer.firstRunMessage'\n >\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'border border-dashed border-neutral-400/50 rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words',\n )}\n >\n {collection.name ?? t('unnamed collection label')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { CollectionType } from '../types';\n\nexport const CollectionSection = ({ collection }: { collection: CollectionType }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n // TODO(wittjosiah): Better placeholder.\n return (\n <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>\n <span className='truncate'>{collection.name ?? t('unnamed collection label')}</span>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ReactiveEchoObject } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport type DefaultObjectSettingsProps = {\n object: ReactiveEchoObject<any>;\n};\n\nexport const DefaultObjectSettings = ({ object }: DefaultObjectSettingsProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n // TODO(burdon): Standardize forms.\n return (\n <div role='form' className='flex flex-col w-full p-2 gap-1'>\n <Input.Root>\n <Input.Label>{t('name label')}</Input.Label>\n <Input.TextInput\n placeholder={t('name placeholder')}\n value={object.name ?? ''}\n onChange={(event) => {\n object.name = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { useSpaces } from '@dxos/react-client/echo';\nimport { type InvitationResult } from '@dxos/react-client/invitations';\nimport { Dialog, useTranslation } from '@dxos/react-ui';\nimport { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport type JoinDialogProps = JoinPanelProps & {\n navigableCollections?: boolean;\n};\n\nexport const JoinDialog = ({ navigableCollections, ...props }: JoinDialogProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const spaces = useSpaces();\n const { graph } = useGraph();\n\n const handleDone = useCallback(\n async (result: InvitationResult | null) => {\n if (result?.spaceKey) {\n await Promise.all([\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'toast',\n subject: {\n id: `${SPACE_PLUGIN}/join-success`,\n duration: 5_000,\n title: t('join success label'),\n closeLabel: t('dismiss label'),\n },\n },\n }),\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n state: false,\n },\n }),\n ]);\n }\n\n const space = spaces.find(({ key }) => result?.spaceKey?.equals(key));\n // TODO(wittjosiah): If navigableCollections is false and there's no target,\n // should try to navigate to the first object of the space replicates.\n // Potentially this could also be done on the inviters side to ensure there's always a target.\n const target = result?.target || (navigableCollections ? space?.id : undefined);\n if (target) {\n // Wait for up to 1 second before navigating to the target node.\n // If the target has not yet replicated, this will trigger a loading toast.\n await graph.waitForPath({ target }).catch(() => {});\n await Promise.all([\n dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: { main: [target] },\n },\n }),\n dispatch({\n action: NavigationAction.EXPOSE,\n data: {\n id: target,\n },\n }),\n ]);\n }\n\n if (space) {\n await dispatch({\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.join',\n properties: {\n spaceId: space.id,\n },\n },\n });\n }\n },\n [dispatch, spaces],\n );\n\n return (\n <Dialog.Content>\n <JoinPanel\n {...props}\n exitActionParent={<Dialog.Close asChild />}\n doneActionParent={<Dialog.Close asChild />}\n onDone={handleDone}\n />\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Planet } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { type ReactiveEchoObject, getSpace } from '@dxos/client/echo';\nimport { useClient } from '@dxos/react-client';\nimport { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { getSpaceDisplayName } from '../util';\n\nexport const MenuFooter = ({ object }: { object: ReactiveEchoObject<any> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = getSpace(object);\n const spaceName = space ? getSpaceDisplayName(space, { personal: client.spaces.default === space }) : '';\n return space ? (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.GroupLabel>{t('menu footer label')}</DropdownMenu.GroupLabel>\n <dl className='pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2'>\n <dt className='uppercase text-[.75em] tracking-wide font-medium mbs-px self-start'>{t('location label')}</dt>\n <dd className='line-clamp-3'>\n <Planet className='inline-block mie-1' />\n {toLocalizedString(spaceName, t)}\n </dd>\n </dl>\n </>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowsCounterClockwise, CheckCircle, Warning } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { type EchoDatabase } from '@dxos/react-client/echo';\nimport { Tooltip, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx, staticPlaceholderText, warningText } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nenum Status {\n PERSISTED_LOCALLY = 0,\n PENDING = 1,\n ERROR = 2,\n}\n\n// TODO(zan): This now has no usages. Remove it?\nexport const PersistenceStatus = ({ db }: { db: EchoDatabase }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [displayMessage, setDisplayMessage] = useState(false);\n const [status, naturalSetStatus] = useState<Status>(Status.PERSISTED_LOCALLY);\n const [prevStatus, setPrevStatus] = useState<Status>(Status.PERSISTED_LOCALLY);\n const _setStatus = debounce(naturalSetStatus, 500);\n\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // return db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setStatus(Status.ERROR);\n // } else if (duration === undefined) {\n // setStatus(Status.PENDING);\n // } else {\n // setStatus(Status.PERSISTED_LOCALLY);\n // }\n // });\n // }, [db]);\n\n useEffect(() => {\n // If this is changed outside the effect it's batched with setStatus and the following condition will never be true.\n setPrevStatus(status);\n\n if (prevStatus !== status && status === Status.PERSISTED_LOCALLY) {\n setDisplayMessage(true);\n const timeout = setTimeout(() => setDisplayMessage(false), 5000);\n return () => clearTimeout(timeout);\n }\n }, [status]); // `prevStatus` omitted from dependency array to prevent timeout from being reset.\n\n switch (status) {\n case Status.ERROR:\n return (\n <div className='flex items-center'>\n <Warning className={mx(getSize(4), 'me-1')} />\n <span className={mx('text-sm', warningText)}>{t('persistence error label')}</span>\n </div>\n );\n case Status.PENDING:\n return (\n <div className='flex items-center'>\n <ArrowsCounterClockwise className={mx(getSize(4), 'me-1')} />\n <span className={mx('text-sm', staticPlaceholderText)}>{t('persistence pending label')}</span>\n </div>\n );\n case Status.PERSISTED_LOCALLY:\n default:\n return (\n <Tooltip.Root delayDuration={400}>\n <Tooltip.Trigger role='status' className='flex items-center'>\n <CheckCircle className={mx(getSize(4), 'me-1')} />\n {displayMessage && (\n <span className={mx('text-sm', staticPlaceholderText)}>{t('persisted locally label')}</span>\n )}\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-10'>\n {t('persisted locally message')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const PopoverRenameObject = ({ object: obj }: { object: ReactiveObject<any> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const doneButton = useRef<HTMLButtonElement>(null);\n // TODO(wittjosiah): Use schema here.\n const object = obj as any;\n // TODO(burdon): Field should not be hardcoded field.\n const [name, setName] = useState(object.name || object.title || '');\n\n const handleDone = useCallback(() => {\n try {\n object.name = name;\n } catch {\n try {\n object.title = name;\n } catch (err) {\n log.error('Failed to rename object', { err });\n }\n }\n }, [object, name]);\n\n return (\n <div role='none' className='p-1 flex gap-2'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.Label srOnly>{t('object name label')}</Input.Label>\n <Input.TextInput\n placeholder={t('object title placeholder')}\n value={name}\n data-testid='spacePlugin.renameObject.input'\n onChange={({ target: { value } }) => setName(value)}\n onKeyDown={({ key }) => key === 'Enter' && doneButton.current?.click()}\n />\n </Input.Root>\n </div>\n <Popover.Close asChild>\n <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>\n {t('done label', { ns: 'os' })}\n </Button>\n </Popover.Close>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const PopoverRenameSpace = ({ space }: { space: Space }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const doneButton = useRef<HTMLButtonElement>(null);\n const [name, setName] = useState(space.properties.name ?? '');\n\n const handleDone = useCallback(() => {\n space.properties.name = name;\n }, [space, name]);\n\n // TODO(thure): Why does the input value need to be uncontrolled to work?\n return (\n <div role='none' className='p-1 flex gap-2'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.Label srOnly>{t('space name label')}</Input.Label>\n <Input.TextInput\n defaultValue={space.properties.name ?? ''}\n placeholder={t('unnamed space label')}\n onChange={({ target: { value } }) => setName(value)}\n // TODO(wittjosiah): Ideally this should access the popover context to close the popover.\n // Currently this is not possible because Radix does not expose the popover context.\n onKeyDown={({ key }) => key === 'Enter' && doneButton.current?.click()}\n />\n </Input.Root>\n </div>\n <Popover.Close asChild>\n <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>\n {t('done label', { ns: 'os' })}\n </Button>\n </Popover.Close>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { type Space } from '@dxos/react-client/echo';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN, SpaceAction } from '../meta';\n\nexport const ShareSpaceButton = ({ space }: { space: Space }) => {\n const dispatch = useIntentDispatcher();\n\n return <ShareSpaceButtonImpl onClick={() => dispatch({ action: SpaceAction.SHARE, data: { space } })} />;\n};\n\n// TODO(wittjosiah): Better way to name pure/impure components?\nexport const ShareSpaceButtonImpl = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <IconButton\n data-testid='spacePlugin.shareSpaceButton'\n icon='ph--users--regular'\n label={t('share space label')}\n onClick={onClick}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { usePlugin } from '@dxos/app-framework';\nimport { generateName } from '@dxos/display-name';\nimport { type Expando } from '@dxos/echo-schema';\nimport { PublicKey, useClient } from '@dxos/react-client';\nimport { getSpace, useMembers, type SpaceMember, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport {\n Avatar,\n AvatarGroup,\n AvatarGroupItem,\n type Size,\n type ThemedClassName,\n Tooltip,\n useTranslation,\n List,\n ListItem,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { AttentionGlyph, useAttention } from '@dxos/react-ui-attention';\nimport { ComplexMap, keyToFallback } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { ObjectViewerProps, SpacePluginProvides } from '../types';\n\n// TODO(thure): Get/derive these values from protocol\nconst REFRESH_INTERVAL = 5000;\nconst ACTIVITY_DURATION = 30_000;\n\n// TODO(thure): This is chiefly meant to satisfy TS & provide an empty map after `deepSignal` interactions.\nconst noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);\n\n// TODO(wittjosiah): Factor out?\nconst getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n\nexport const SpacePresence = ({ object, spaceKey }: { object: Expando; spaceKey?: PublicKey }) => {\n const spacePlugin = usePlugin<SpacePluginProvides>(SPACE_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = spaceKey ? client.spaces.get(spaceKey) : getSpace(object);\n const spaceMembers = useMembers(space?.key);\n\n const [_moment, setMoment] = useState(Date.now());\n\n // NOTE(thure): This is necessary so Presence updates without any underlying data updating.\n useEffect(() => {\n const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, []);\n\n const memberOnline = useCallback((member: SpaceMember) => member.presence === 1, []);\n const memberIsNotSelf = useCallback(\n (member: SpaceMember) => !identity?.identityKey.equals(member.identity.identityKey),\n [identity?.identityKey],\n );\n\n // TODO(thure): Could it be a smell to return early when there are interactions with `deepSignal` later, since it\n // prevents reactivity?\n if (!identity || !spacePlugin || !space) {\n return null;\n }\n\n const spaceState = spacePlugin.provides.space;\n const currentObjectViewers = spaceState.viewersByObject[fullyQualifiedId(object)] ?? noViewers;\n\n const membersForObject = spaceMembers\n .filter((member) => memberOnline(member) && memberIsNotSelf(member))\n .filter((member) => currentObjectViewers.has(member.identity.identityKey))\n .map((member) => {\n const objectView = currentObjectViewers.get(member.identity.identityKey);\n const lastSeen = objectView?.lastSeen ?? -Infinity;\n const currentlyAttended = objectView?.currentlyAttended ?? false;\n\n return {\n ...member,\n currentlyAttended,\n lastSeen,\n };\n })\n .toSorted((a, b) => a.lastSeen - b.lastSeen);\n\n return <FullPresence members={membersForObject} />;\n};\n\nexport type Member = SpaceMember & {\n /**\n * Last time a member was seen on this object.\n */\n lastSeen: number;\n currentlyAttended: boolean;\n};\n\nexport type MemberPresenceProps = ThemedClassName<{\n size?: Size;\n members?: Member[];\n showCount?: boolean;\n onMemberClick?: (member: Member) => void;\n}>;\n\nexport const FullPresence = (props: MemberPresenceProps) => {\n const { size = 9, onMemberClick } = props;\n const members = useDefaultValue(props.members, () => []);\n\n if (members.length === 0) {\n return null;\n }\n\n return (\n <AvatarGroup.Root size={size} classNames='mbs-2 mie-4' data-testid='spacePlugin.presence'>\n {members.slice(0, 3).map((member, i) => (\n <Tooltip.Root key={member.identity.identityKey.toHex()}>\n <Tooltip.Trigger>\n <PrensenceAvatar\n identity={member.identity}\n group\n match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.\n index={members.length - i}\n onClick={() => onMemberClick?.(member)}\n />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n <span>{getName(member.identity)}</span>\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ))}\n\n {members.length > 3 && (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <AvatarGroupItem.Root status='inactive'>\n <Avatar.Frame style={{ zIndex: members.length - 4 }}>\n {/* TODO(wittjosiah): Make text fit. */}\n <Avatar.Fallback text={`+${members.length - 3}`} />\n </Avatar.Frame>\n </AvatarGroupItem.Root>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n <Tooltip.Arrow />\n <List classNames='max-h-56 overflow-y-auto'>\n {members.map((member) => (\n <ListItem.Root\n key={member.identity.identityKey.toHex()}\n classNames='flex gap-2 items-center cursor-pointer mbe-2'\n onClick={() => onMemberClick?.(member)}\n data-testid='identity-list-item'\n >\n {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}\n <PrensenceAvatar identity={member.identity} showName match={member.currentlyAttended} />\n </ListItem.Root>\n ))}\n </List>\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </AvatarGroup.Root>\n );\n};\n\ntype PresenceAvatarProps = {\n identity: Identity;\n showName?: boolean;\n match?: boolean;\n group?: boolean;\n index?: number;\n onClick?: () => void;\n};\n\nconst PrensenceAvatar = ({ identity, showName, match, group, index, onClick }: PresenceAvatarProps) => {\n const Root = group ? AvatarGroupItem.Root : Avatar.Root;\n const status = match ? 'current' : 'active';\n const fallbackValue = keyToFallback(identity.identityKey);\n return (\n <Root status={status} hue={identity.profile?.data?.hue || fallbackValue.hue}>\n <Avatar.Frame\n data-testid='spacePlugin.presence.member'\n data-status={status}\n {...(index ? { style: { zIndex: index } } : {})}\n onClick={() => onClick?.()}\n >\n <Avatar.Fallback text={identity.profile?.data?.emoji || fallbackValue.emoji} />\n </Avatar.Frame>\n {showName && <Avatar.Label classNames='text-sm truncate pli-2'>{getName(identity)}</Avatar.Label>}\n </Root>\n );\n};\n\nexport const SmallPresenceLive = ({\n id,\n viewers,\n}: {\n id?: string;\n viewers?: ComplexMap<PublicKey, ObjectViewerProps>;\n}) => {\n const getActiveViewers = (viewers: ComplexMap<PublicKey, ObjectViewerProps>): ObjectViewerProps[] => {\n const moment = Date.now();\n return Array.from(viewers.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION);\n };\n\n const [activeViewers, setActiveViewers] = useState(viewers ? getActiveViewers(viewers) : []);\n\n useEffect(() => {\n if (viewers) {\n setActiveViewers(getActiveViewers(viewers));\n const interval = setInterval(() => {\n setActiveViewers(getActiveViewers(viewers));\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }\n }, [viewers]);\n\n return <SmallPresence id={id} count={activeViewers.length} />;\n};\n\nexport const SmallPresence = ({ id, count }: { id?: string; count: number }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const { hasAttention, isAncestor, isRelated } = useAttention(id);\n const attention = hasAttention || isAncestor || isRelated;\n\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(wittjosiah): Don't depend on data attribute just pass prop to AttentionGlyph. */}\n <div role='none' className='flex' data-attention={attention}>\n <AttentionGlyph presence={count > 1 ? 'many' : count === 1 ? 'one' : 'none'} classNames='self-center mie-1' />\n </div>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom' classNames='z-[70]'>\n <span>{t('presence label', { count })}</span>\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\nimport { type SpaceSettingsProps } from '../types';\n\nexport const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n\n return (\n <>\n <DeprecatedFormInput label={t('show hidden spaces label')}>\n <Input.Switch\n checked={settings.showHidden}\n onCheckedChange={(checked) =>\n dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.TOGGLE_HIDDEN,\n data: { state: !!checked },\n })\n }\n />\n </DeprecatedFormInput>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Button, Dialog, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsRootProps, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { ClipboardProvider, SpacePanel, type SpacePanelProps } from '@dxos/shell/react';\n\nimport { SpaceSettingsPanel, type SpaceSettingsPanelProps } from './SpaceSettingsPanel';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { COMPOSER_SPACE_LOCK, getSpaceDisplayName } from '../../util';\n\nexport type SpaceSettingsTab = 'members' | 'settings';\n\nexport type SpaceSettingsDialogProps = {\n initialTab?: SpaceSettingsTab;\n namesCache?: Record<string, string>;\n} & SpaceSettingsPanelProps &\n Pick<SpacePanelProps, 'createInvitationUrl' | 'target'>;\n\nexport const SpaceSettingsDialog = ({\n space,\n target,\n createInvitationUrl,\n initialTab = 'members',\n namesCache,\n}: SpaceSettingsDialogProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n const [selected, setSelected] = useState<SpaceSettingsTab>(initialTab);\n const locked = space.properties[COMPOSER_SPACE_LOCK];\n const name = getSpaceDisplayName(space, { personal: client.spaces.default === space, namesCache });\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <Icon\n icon='ph--caret-left--regular'\n size={4}\n classNames={['@md:hidden', tabsActivePart === 'list' && 'invisible']}\n />\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {toLocalizedString(name, t)}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={setSelected as TabsRootProps['onValueChange']}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator'>\n <Tabs.Tablist classNames='flex flex-col max-bs-none min-is-[200px] gap-4 overflow-y-auto'>\n <div role='none' className='flex flex-col ml-1'>\n <Tabs.Tab value='settings'>{t('settings tab label')}</Tabs.Tab>\n <Tabs.Tab value='members' disabled={locked}>\n {t('members tab label')}\n </Tabs.Tab>\n </div>\n </Tabs.Tablist>\n </div>\n\n <Tabs.Tabpanel value='settings' classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <SpaceSettingsPanel space={space} />\n </Tabs.Tabpanel>\n\n {/* TODO(wittjosiah): Weird focus ring when tabpanel is focused. */}\n <Tabs.Tabpanel value='members' classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <ClipboardProvider>\n <SpacePanel space={space} hideHeading target={target} createInvitationUrl={createInvitationUrl} />\n </ClipboardProvider>\n </Tabs.Tabpanel>\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SPACE_PLUGIN } from '../../meta';\n\nexport type SpaceSettingsPanelProps = {\n space: Space;\n};\n\nexport const SpaceSettingsPanel = ({ space }: SpaceSettingsPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n const client = useClient();\n const edgeEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.echoReplicator);\n\n const [edgeReplication, setEdgeReplication] = useState(\n space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED,\n );\n const toggleEdgeReplication = useCallback(\n async (next: boolean) => {\n setEdgeReplication(next);\n await space?.internal\n .setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED)\n .catch((err) => {\n log.catch(err);\n setEdgeReplication(!next);\n });\n },\n [space],\n );\n\n return (\n <div role='form' className='flex flex-col'>\n <DeprecatedFormInput label={t('name label')}>\n <Input.TextInput\n placeholder={t('unnamed space label')}\n value={space.properties.name ?? ''}\n onChange={(event) => {\n space.properties.name = event.target.value;\n }}\n />\n </DeprecatedFormInput>\n {edgeEnabled && (\n <DeprecatedFormInput label={t('edge replication label')}>\n <Input.Switch checked={edgeReplication} onCheckedChange={toggleEdgeReplication} />\n </DeprecatedFormInput>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Icon, useTranslation } from '@dxos/react-ui';\n\nimport { useSpaceSyncState } from './sync-state';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst useEdgeStatus = (): QueryEdgeStatusResponse.EdgeStatus => {\n const [status, setStatus] = useState(QueryEdgeStatusResponse.EdgeStatus.NOT_CONNECTED);\n const client = useClient();\n\n useEffect(() => {\n client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status }) => {\n setStatus(status);\n });\n }, [client]);\n\n return status;\n};\n\nexport const InlineSyncStatus = ({ space }: { space: Space }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n const connectedToEdge = useEdgeStatus() === QueryEdgeStatusResponse.EdgeStatus.CONNECTED;\n // TODO(wittjosiah): This is not reactive.\n const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;\n const syncState = useSpaceSyncState(space);\n if (!connectedToEdge || !edgeSyncEnabled || !syncState || syncState.missingOnLocal === 0) {\n return null;\n }\n\n return (\n <div role='status' aria-label={t('syncing message')} className='flex items-center'>\n <Icon icon='ph--arrows-clockwise--regular' size={3} classNames='animate-spin' />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space, type SpaceId, type SpaceSyncState } from '@dxos/client/echo';\nimport { Context } from '@dxos/context';\nimport { EdgeService } from '@dxos/protocols';\nimport { useClient } from '@dxos/react-client';\n\nexport type Progress = { count: number; total: number };\n\nexport type PeerSyncState = Omit<SpaceSyncState.PeerState, 'peerId'>;\n\nexport type SpaceSyncStateMap = Record<SpaceId, PeerSyncState>;\n\nexport const createEmptyEdgeSyncState = (): PeerSyncState => ({\n missingOnLocal: 0,\n missingOnRemote: 0,\n localDocumentCount: 0,\n remoteDocumentCount: 0,\n differentDocuments: 0,\n});\n\nexport const getSyncSummary = (syncMap: SpaceSyncStateMap): PeerSyncState => {\n return Object.entries(syncMap).reduce<PeerSyncState>((summary, [_spaceId, peerState]) => {\n summary.missingOnLocal += peerState.missingOnLocal;\n summary.missingOnRemote += peerState.missingOnRemote;\n summary.localDocumentCount += peerState.localDocumentCount;\n summary.remoteDocumentCount += peerState.remoteDocumentCount;\n summary.differentDocuments += peerState.differentDocuments;\n return summary;\n }, createEmptyEdgeSyncState());\n};\n\nconst isEdgePeerId = (peerId: string, spaceId: SpaceId) =>\n peerId.startsWith(`${EdgeService.AUTOMERGE_REPLICATOR}:${spaceId}`);\n\n/**\n * Hook Subscribes to sync state for each space.\n */\nexport const useSyncState = (): SpaceSyncStateMap => {\n const client = useClient();\n const [spaceState, setSpaceState] = useState<SpaceSyncStateMap>({});\n\n useEffect(() => {\n const ctx = new Context();\n const createSubscriptions = (spaces: Space[]) => {\n for (const space of spaces) {\n if (spaceState[space.id]) {\n continue;\n }\n\n ctx.onDispose(\n space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {\n const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));\n if (syncState) {\n setSpaceState((spaceState) => ({ ...spaceState, [space.id]: syncState }));\n }\n }),\n );\n }\n };\n\n createSubscriptions(client.spaces.get());\n client.spaces.subscribe((spaces) => {\n createSubscriptions(spaces);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [client]);\n\n return spaceState;\n};\n\n/**\n * Hook Subscribes to sync state for a single space.\n */\n// TODO(wittjosiah): Reconcile w/ useSyncState.\nexport const useSpaceSyncState = (space: Space): PeerSyncState | undefined => {\n const [spaceState, setSpaceState] = useState<PeerSyncState>();\n\n useEffect(() => {\n const ctx = new Context();\n space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {\n const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));\n if (syncState) {\n setSpaceState(syncState);\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [space]);\n\n return spaceState;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { useClient } from '@dxos/react-client';\nimport { type SpaceId } from '@dxos/react-client/echo';\nimport { Icon, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SpaceRowContainer, SYNC_STALLED_TIMEOUT } from './Space';\nimport { createClientSaveTracker } from './save-tracker';\nimport { getIcon, getStatus } from './status';\nimport { type PeerSyncState, type SpaceSyncStateMap, getSyncSummary, useSyncState } from './sync-state';\nimport { SPACE_PLUGIN } from '../../meta';\n\nexport const SyncStatus = () => {\n const client = useClient();\n const state = useSyncState();\n const [saved, setSaved] = useState(true);\n\n useEffect(() => {\n return createClientSaveTracker(client, (state) => {\n setSaved(state === 'saved');\n });\n }, []);\n\n return <SyncStatusIndicator state={state} saved={saved} />;\n};\n\nexport const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: Boolean }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const summary = getSyncSummary(state);\n const offline = Object.values(state).length === 0;\n const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;\n const needsToDownload = summary.differentDocuments > 0 || summary.missingOnLocal > 0;\n const status = getStatus({ offline, saved, needsToUpload, needsToDownload });\n\n const [classNames, setClassNames] = useState<string>();\n useEffect(() => {\n setClassNames(undefined);\n if (offline || (!needsToUpload && !needsToDownload)) {\n return;\n }\n\n const t = setTimeout(() => {\n // TODO(wittjosiah): Use semantic color tokens.\n setClassNames('text-orange-500');\n }, SYNC_STALLED_TIMEOUT);\n return () => clearTimeout(t);\n }, [offline, needsToUpload, needsToDownload]);\n\n const title = t(`${status} label`);\n const icon = <Icon icon={getIcon(status)} size={4} classNames={classNames} />;\n\n if (offline) {\n return <StatusBar.Item title={title}>{icon}</StatusBar.Item>;\n } else {\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <StatusBar.Button title={title}>{icon}</StatusBar.Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content sideOffset={16}>\n <SyncStatusDetail state={state} summary={summary} debug={false} />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n }\n};\n\nexport type SyncStatusDetailProps = ThemedClassName<{\n state: SpaceSyncStateMap;\n summary: PeerSyncState;\n debug?: boolean;\n}>;\n\n// TODO(wittjosiah): This currently does not show `differentDocuments` at all.\nexport const SyncStatusDetail = ({ classNames, state, summary, debug }: SyncStatusDetailProps) => {\n const [showAll, setShowAll] = useState(false);\n const { t } = useTranslation(SPACE_PLUGIN);\n const entries = Object.entries(state)\n .filter(([_, value]) => showAll || value.missingOnLocal + value.missingOnRemote > 0)\n .toSorted(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n\n const handleCheckedChange = useCallback((state: boolean) => setShowAll(state), [setShowAll]);\n\n // TODO(burdon): Normalize to max document count?\n return (\n <div className={mx('flex flex-col gap-3 p-2 text-xs min-w-96', classNames)}>\n <div role='none' className='flex items-center'>\n <h1 className='flex-1'>{t('sync status title')}</h1>\n <div className='flex items-center gap-2'>\n <Input.Root>\n <Input.Label classNames='text-xs'>{t('show all label')}</Input.Label>\n <Input.Checkbox checked={showAll} onCheckedChange={handleCheckedChange} />\n </Input.Root>\n </div>\n </div>\n <div className='flex flex-col gap-2'>\n {entries.length === 0 && (\n <div role='none' className='flex justify-center'>\n {/* TODO(wittjosiah): This text should be updated once status includes different documents. */}\n {t('no sync status label')}\n </div>\n )}\n {entries.map(([spaceId, state]) => (\n <SpaceRowContainer key={spaceId} spaceId={spaceId as SpaceId} state={state} />\n ))}\n </div>\n {debug && <SyntaxHighlighter language='json'>{JSON.stringify(summary, null, 2)}</SyntaxHighlighter>}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type HTMLAttributes, useEffect, useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { type SpaceId, useSpace } from '@dxos/react-client/echo';\nimport { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type Progress, type PeerSyncState } from './sync-state';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { getSpaceDisplayName } from '../../util';\n\nexport const SYNC_STALLED_TIMEOUT = 5_000;\n\n// TODO(wittjosiah): Define sematic color tokens.\nconst styles = {\n barBg: 'bg-neutral-50 dark:bg-green-900 text-black',\n barFg: 'bg-neutral-100 bg-green-500',\n barHover: 'dark:hover:bg-green-500',\n};\n\nconst useActive = (count: number) => {\n const [current, setCurrent] = useState(count);\n const [active, setActive] = useState(false);\n useEffect(() => {\n let t: NodeJS.Timeout | undefined;\n if (count !== current) {\n setActive(true);\n setCurrent(count);\n t && clearTimeout(t);\n t = setTimeout(() => {\n setActive(false);\n }, SYNC_STALLED_TIMEOUT);\n }\n\n return () => {\n setActive(false);\n clearTimeout(t);\n };\n }, [count, current]);\n return active;\n};\n\nexport type SpaceRowContainerProps = Omit<SpaceRowProps, 'spaceName'>;\n\nexport const SpaceRowContainer = ({ spaceId, state }: SpaceRowContainerProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = useSpace(spaceId);\n if (!space) {\n return null;\n }\n\n const spaceName = toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t);\n\n return <SpaceRow spaceId={spaceId} spaceName={spaceName} state={state} />;\n};\n\nexport type SpaceRowProps = {\n spaceId: SpaceId;\n spaceName: string;\n state: PeerSyncState;\n};\n\nexport const SpaceRow = ({\n spaceId,\n spaceName,\n state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote },\n}: SpaceRowProps) => {\n const downActive = useActive(localDocumentCount);\n const upActive = useActive(remoteDocumentCount);\n\n return (\n <div\n className='flex items-center mx-0.5 gap-0.5 cursor-pointer'\n title={spaceId}\n onClick={() => {\n void navigator.clipboard.writeText(spaceId);\n }}\n >\n <span className='is-1/2 truncate'>{spaceName}</span>\n <Icon\n icon='ph--arrow-fat-line-left--regular'\n size={3}\n classNames={mx(downActive && 'animate-[pulse_1s_infinite]')}\n />\n <Candle\n up={{ count: remoteDocumentCount, total: remoteDocumentCount + missingOnRemote }}\n down={{ count: localDocumentCount, total: localDocumentCount + missingOnLocal }}\n title={spaceId}\n />\n <Icon\n icon='ph--arrow-fat-line-right--regular'\n size={3}\n classNames={mx(upActive && 'animate-[pulse_1s_step-start_infinite]')}\n />\n </div>\n );\n};\n\ntype CandleProps = ThemedClassName<Pick<HTMLAttributes<HTMLDivElement>, 'title'>> & { up: Progress; down: Progress };\n\nconst Candle = ({ classNames, up, down }: CandleProps) => {\n return (\n <div className={mx('grid grid-cols-[1fr_2rem_1fr] w-full h-3', classNames)}>\n <Bar classNames='justify-end' {...up} />\n <div className='relative'>\n <div className={mx('absolute inset-0 flex items-center justify-center text-xs', styles.barBg)}>{up.total}</div>\n </div>\n <Bar {...down} />\n </div>\n );\n};\n\nconst Bar = ({ classNames, count, total }: ThemedClassName<Progress>) => {\n let p = (count / total) * 100;\n if (count < total) {\n p = Math.min(p, 95);\n }\n\n return (\n <div className={mx('relative flex w-full', styles.barBg, classNames)}>\n <div className={mx('shrink-0', styles.barFg)} style={{ width: `${p}%` }}></div>\n {count !== total && (\n <div className='absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs'>{count}</div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type UnsubscribeCallback } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { type Space, type SpaceId } from '@dxos/client/echo';\nimport { Context } from '@dxos/context';\n\nexport const createClientSaveTracker = (client: Client, cb: (state: 'saved' | 'saving') => void) => {\n const unsubscribeCallbacks: Record<SpaceId, UnsubscribeCallback> = {};\n const state: Record<SpaceId, 'saved' | 'saving'> = {};\n\n const install = (spaces: Space[]) => {\n for (const space of spaces) {\n if (state[space.id]) {\n continue;\n }\n\n state[space.id] = 'saved';\n unsubscribeCallbacks[space.id] = createSpaceSaveTracker(space, (s) => {\n state[space.id] = s;\n cb(Object.values(state).some((s) => s === 'saving') ? 'saving' : 'saved');\n });\n }\n };\n client.spaces.subscribe((spaces) => {\n install(spaces);\n });\n install(client.spaces.get());\n\n return () => {\n for (const unsubscribe of Object.values(unsubscribeCallbacks)) {\n unsubscribe();\n }\n };\n};\n\nconst createSpaceSaveTracker = (space: Space, cb: (state: 'saved' | 'saving') => void): UnsubscribeCallback => {\n const ctx = new Context();\n\n void space.waitUntilReady().then(() => {\n if (ctx.disposed) {\n return;\n }\n\n let hasUnsavedChanges = false;\n let lastFlushPromise: Promise<void> | undefined;\n space.crud.saveStateChanged.on(ctx, ({ unsavedDocuments }) => {\n hasUnsavedChanges = unsavedDocuments.length > 0;\n });\n space.crud.saveStateChanged.debounce(500).on(ctx, () => {\n if (hasUnsavedChanges) {\n lastFlushPromise = undefined;\n cb('saving');\n } else {\n const flushPromise = space.crud.flush();\n lastFlushPromise = flushPromise;\n void flushPromise.then(() => {\n if (lastFlushPromise === flushPromise) {\n cb('saved');\n }\n });\n }\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport type Status = 'saving locally' | 'downloading' | 'uploading' | 'offline persisted' | 'remote synced';\n\nexport const getStatus = ({\n offline,\n saved,\n needsToUpload,\n needsToDownload,\n}: {\n offline: Boolean;\n saved: Boolean;\n needsToUpload: Boolean;\n needsToDownload: Boolean;\n}): Status => {\n if (!saved) {\n return 'saving locally';\n } else if (!offline && needsToDownload) {\n return 'downloading';\n } else if (!offline && needsToUpload) {\n return 'uploading';\n } else if (offline && !needsToUpload && !needsToDownload) {\n return 'offline persisted';\n } else {\n return 'remote synced';\n }\n};\n\nexport const getIcon = (status: Status) => {\n switch (status) {\n case 'saving locally':\n return 'ph--download--regular';\n case 'downloading':\n return 'ph--cloud-arrow-down--regular';\n case 'uploading':\n return 'ph--cloud-arrow-up--regular';\n case 'offline persisted':\n return 'ph--check-circle--regular';\n case 'remote synced':\n return 'ph--cloud-check--regular';\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SPACE_PLUGIN } from './meta';\nimport { CollectionType } from './types';\n\nexport default [\n {\n 'en-US': {\n [CollectionType.typename]: {\n 'typename label': 'Collection',\n },\n [SPACE_PLUGIN]: {\n 'plugin name': 'Spaces',\n 'first run message': 'Nothing selected.',\n 'create space label': 'Create space',\n 'join space label': 'Join space',\n 'empty space message': 'No documents',\n 'empty tree message': 'No spaces',\n 'unnamed space label': 'New space',\n 'closed space label': 'Closed',\n 'loading space label': 'Loading space…',\n 'lock space label': 'Lock space',\n 'unlock space label': 'Unlock space',\n 'rename space label': 'Rename space',\n 'active space label': 'Active space:',\n 'space name label': 'Space name',\n 'object name label': 'Object name',\n 'close space label': 'Close space',\n 'open space label': 'Open space',\n 'export data label': 'Export data',\n 'import data label': 'Import data',\n 'migrate space label': 'Migrate space',\n 'share space': 'Share space',\n 'save space to disk label': 'Save to disk',\n 'load space from disk label': 'Load from disk',\n 'confirm restore title': 'Overwrite files in this space?',\n 'confirm restore body': 'Restoring from a backup will overwrite the contents of any documents that match.',\n 'upload file message': 'Drag file here or click to browse',\n 'object title placeholder': 'Type a title here…',\n 'personal space label': 'Personal Space',\n 'spaces label': 'Spaces',\n 'show hidden spaces label': 'Show closed spaces',\n 'save files to directory label': 'Save files to disk',\n 'select path label': 'Select path',\n 'rename collection label': 'Rename collection',\n 'rename object label': 'Rename item',\n 'duplicate object label': 'Duplicate item',\n 'delete collection label': 'Delete collection',\n 'delete object label': 'Delete item',\n 'collection deleted label': 'Collection deleted',\n 'object deleted label': 'Item deleted',\n 'objects deleted label': 'Items deleted',\n 'go to object label': 'Open item',\n 'found object label': 'Ready.',\n 'found object description': 'The requested object is now available.',\n 'waiting for object label': 'Loading…',\n 'waiting for object description': 'The requested object is still being synchronized.',\n 'object not found label': 'Nothing found.',\n 'object not found description':\n 'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',\n 'missing object message': 'Object not available.',\n 'missing object description':\n 'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',\n 'create collection label': 'Create collection',\n 'unnamed object label': 'New object',\n 'unnamed collection label': 'New collection',\n 'create object in space label': 'Add to space',\n 'create object in collection label': 'Add to collection',\n 'share space label': 'Share',\n 'space members label': 'Space members',\n 'active space members heading': 'Online ({{count}})',\n 'inactive space members heading': 'Offline ({{count}})',\n 'presence label_zero': 'No other viewers',\n 'presence label_one': '1 other viewer',\n 'presence label_other': '{{count}} other viewers',\n 'persisted locally label': 'Changes saved locally.',\n 'persisted locally message': 'All changes have been saved to disk on this device.',\n 'persistence pending label': 'Saving…',\n 'persistence error label': 'Error saving changes.',\n 'more actions label': 'More actions',\n 'invitations heading': 'Invitations',\n 'keyshortcuts label': 'Keyboard shortcuts',\n 'menu footer label': 'Details',\n 'location label': 'Located in',\n 'space limit label': 'Space Limit Reached',\n 'space limit description':\n 'This space has reached the maximum number of objects for the beta. This limit includes deleted objects currently, but those can be permanently removed with the cleanup action.',\n 'space limit close label': 'Close',\n 'remove deleted objects label': 'Cleanup',\n 'remove deleted objects alt': 'Permanently remove deleted objects to free up space.',\n 'copy link label': 'Copy link',\n 'default on space create label': 'On space create',\n 'sync status title': 'Sync status',\n 'dismiss label': 'Dismiss',\n 'join success label': 'Successfully joined space',\n 'name label': 'Name',\n 'name placeholder': 'Name',\n 'unnamed object settings label': 'Settings',\n 'edge replication label': 'Enable EDGE Replication',\n 'saving locally label': 'Writing to disk',\n 'downloading label': 'Replicating from peers',\n 'uploading label': 'Replicating to peers',\n 'offline persisted label': 'Saved to disk (offline)',\n 'remote synced label': 'Synced with peers',\n 'open settings panel label': 'Show Settings',\n 'open space settings label': 'Space Settings',\n 'members tab label': 'Members',\n 'settings tab label': 'Settings',\n 'syncing message': 'Space syncing',\n 'show all label': 'Show all',\n 'no sync status label': 'No space with missing objects.',\n 'create space dialog title': 'Create Space',\n 'create object dialog title': 'Create Object',\n 'space input placeholder': 'Select space',\n 'schema input placeholder': 'Select object type',\n 'creating object type label': 'Type',\n 'creating in space label': 'In Space',\n 'creating in collection label': 'In Collection',\n 'clear input label': 'Clear',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SpacePlugin } from './SpacePlugin';\n\nexport default SpacePlugin;\n\nexport * from './components';\nexport * from './meta';\nexport * from './types';\nexport * from './util';\nexport { default as translations } from './translations';\n\nexport * from './SpacePlugin';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["signal", "React", "LayoutAction", "NavigationAction", "Surface", "filterPlugins", "findPlugin", "firstIdInPart", "openIds", "parseGraphPlugin", "parseIntentPlugin", "parseLayoutPlugin", "parseMetadataResolverPlugin", "parseNavigationPlugin", "resolvePlugin", "EventSubscriptions", "S", "scheduledEffect", "invariant", "create", "isDeleted", "isReactiveObject", "LocalStorageStore", "log", "Migrations", "parseAttentionPlugin", "parseClientPlugin", "createExtension", "memoize", "toSignal", "ObservabilityAction", "EdgeReplicationSetting", "PublicKey", "Expando", "FQ_ID_LENGTH", "Filter", "OBJECT_ID_LENGTH", "SPACE_ID_LENGTH", "SpaceState", "fullyQualifiedId", "getSpace", "getTypename", "isEchoObject", "isSpace", "loadObjectReferences", "parseFullyQualifiedId", "parseId", "osTranslations", "ComplexMap", "nonNullable", "reduceGroupBy", "CheckCircle", "CircleDashed", "CircleNotch", "React", "useEffect", "useState", "parseIntentPlugin", "useResolvePlugin", "parseNavigationPlugin", "NavigationAction", "useClient", "Filter", "fullyQualifiedId", "useQuery", "Button", "Toast", "useTranslation", "getSize", "mx", "WAIT_FOR_OBJECT_TIMEOUT", "TOAST_TIMEOUT", "AwaitingObject", "id", "open", "setOpen", "useState", "waiting", "setWaiting", "found", "setFound", "t", "useTranslation", "SPACE_PLUGIN", "intentPlugin", "useResolvePlugin", "parseIntentPlugin", "navigationPlugin", "parseNavigationPlugin", "client", "useClient", "objects", "useQuery", "spaces", "Filter", "all", "useEffect", "timeout", "setTimeout", "clearTimeout", "findIndex", "object", "fullyQualifiedId", "provides", "location", "active", "solo", "handleClose", "intent", "dispatch", "plugin", "action", "SpaceAction", "WAIT_FOR_OBJECT", "data", "undefined", "handleNavigate", "NavigationAction", "OPEN", "activeParts", "main", "Toast", "Root", "duration", "onOpenChange", "Body", "Title", "classNames", "CheckCircle", "className", "getSize", "span", "CircleNotch", "mx", "CircleDashed", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "ns", "React", "useCallback", "useRef", "NavigationAction", "useIntentDispatcher", "useClient", "isReactiveObject", "isSpace", "useSpaces", "Button", "Dialog", "Icon", "useTranslation", "React", "useCallback", "useState", "getObjectAnnotation", "S", "isSpace", "Icon", "IconButton", "Input", "toLocalizedString", "useTranslation", "Form", "InputHeader", "SearchList", "nonNullable", "EXPANDO_TYPENAME", "getObjectAnnotation", "getTypename", "invariant", "getSchema", "isReactiveObject", "Migrations", "ACTION_GROUP_TYPE", "ACTION_TYPE", "cleanup", "getGraph", "memoize", "Filter", "fullyQualifiedId", "getSpace", "isEchoObject", "isSpace", "SpaceState", "SPACES", "SPACE_PLUGIN", "SPACE_TYPE", "COMPOSER_SPACE_LOCK", "SHARED", "EMPTY_ARRAY", "memoizeQuery", "spaceOrEcho", "filter", "options", "key", "JSON", "stringify", "space", "isSpace", "id", "undefined", "Filter", "from", "toProto", "query", "memoize", "db", "unsubscribe", "subscribe", "cleanup", "objects", "getSpaceDisplayName", "personal", "namesCache", "state", "get", "SpaceState", "SPACE_READY", "properties", "name", "length", "ns", "getCollectionGraphNodePartials", "navigable", "collection", "resolve", "disabled", "acceptPersistenceClass", "Set", "acceptPersistenceKey", "role", "onRearrangeChildren", "nextOrder", "isEchoObject", "onTransferStart", "child", "index", "includes", "data", "splice", "push", "onTransferEnd", "destination", "indexOf", "onCopy", "newObject", "cloneObject", "add", "checkPendingMigration", "SPACE_REQUIRES_MIGRATION", "Migrations", "versionProperty", "targetVersion", "constructSpaceNode", "hasPendingMigration", "CollectionType", "typename", "partials", "type", "cacheable", "label", "description", "icon", "testId", "constructSpaceActions", "dispatch", "migrating", "getId", "actions", "SpaceAction", "MIGRATE", "ACTION_GROUP_TYPE", "plugin", "action", "disposition", "running", "locked", "OPEN_CREATE_OBJECT", "ACTION_TYPE", "target", "SHARE", "keyBinding", "macos", "windows", "UNLOCK", "LOCK", "RENAME", "params", "OPEN_SETTINGS", "SPACE_INACTIVE", "CLOSE", "OPEN", "createObjectNode", "object", "getTypename", "metadata", "Object", "keys", "graphProps", "fullyQualifiedId", "placeholder", "persistenceClass", "persistenceKey", "constructObjectActions", "node", "ADD_OBJECT", "RENAME_OBJECT", "REMOVE_OBJECTS", "graph", "getGraph", "nodes", "relation", "find", "url", "window", "location", "origin", "navigator", "clipboard", "writeText", "getActiveSpace", "active", "findNode", "isReactiveObject", "getSpace", "getNestedObjects", "loadReferences", "nested", "Promise", "all", "map", "flat", "newSpace", "schema", "getSchema", "getObjectAnnotation", "EXPANDO_TYPENAME", "serializer", "invariant", "content", "serialize", "deserialize", "newId", "CreateObjectPanel", "schemas", "spaces", "typename", "initialTypename", "target", "initialTarget", "name", "initialName", "defaultSpaceId", "resolve", "onCreateObject", "t", "useTranslation", "SPACE_PLUGIN", "setTypename", "useState", "setTarget", "schema", "find", "getObjectAnnotation", "options", "map", "filter", "nonNullable", "handleClearSchema", "useCallback", "undefined", "handleClearTarget", "handleCreateObject", "schemaInput", "React", "SearchList", "Root", "label", "classNames", "Input", "autoFocus", "data-testid", "placeholder", "Content", "option", "Item", "key", "value", "ns", "defaultValue", "onSelect", "span", "className", "Icon", "icon", "size", "spaceInput", "space", "id", "toLocalizedString", "getSpaceDisplayName", "personal", "form", "Form", "values", "S", "Struct", "optional", "String", "testId", "onSave", "div", "role", "InputHeader", "Label", "isSpace", "TextInput", "disabled", "IconButton", "iconOnly", "onClick", "CreateObjectDialog", "schemas", "target", "typename", "name", "navigableCollections", "resolve", "closeRef", "useRef", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "spaces", "useSpaces", "dispatch", "useIntentDispatcher", "handleCreateObject", "useCallback", "schema", "_target", "isSpace", "properties", "CollectionType", "createObjectAction", "createObject", "current", "click", "result", "action", "data", "object", "isReactiveObject", "plugin", "SpaceAction", "ADD_OBJECT", "NavigationAction", "OPEN", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "Close", "asChild", "Button", "ref", "density", "variant", "autoFocus", "Icon", "icon", "size", "CreateObjectPanel", "defaultSpaceId", "default", "id", "onCreateObject", "React", "useCallback", "useRef", "useIntentDispatcher", "Button", "Dialog", "Icon", "useTranslation", "Form", "initialValues", "edgeReplication", "CreateSpaceDialog", "closeRef", "useRef", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "handleCreateSpace", "useCallback", "data", "result", "action", "SpaceAction", "CREATE", "target", "space", "OPEN_CREATE_OBJECT", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "Close", "asChild", "Button", "ref", "density", "variant", "autoFocus", "Icon", "icon", "size", "Form", "testId", "values", "schema", "SpaceForm", "onSave", "React", "useTranslation", "baseSurface", "descriptionText", "mx", "CollectionMain", "collection", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "mx", "baseSurface", "data-testid", "p", "descriptionText", "name", "React", "useTranslation", "CollectionSection", "collection", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "className", "span", "name", "React", "Input", "useTranslation", "DefaultObjectSettings", "object", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "Input", "Root", "Label", "TextInput", "placeholder", "value", "name", "onChange", "event", "target", "React", "useCallback", "LayoutAction", "NavigationAction", "useIntentDispatcher", "useGraph", "ObservabilityAction", "useSpaces", "Dialog", "useTranslation", "JoinPanel", "JoinDialog", "navigableCollections", "props", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "spaces", "useSpaces", "graph", "useGraph", "handleDone", "useCallback", "result", "spaceKey", "Promise", "all", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "subject", "id", "duration", "title", "closeLabel", "state", "space", "find", "key", "equals", "target", "undefined", "waitForPath", "catch", "NavigationAction", "OPEN", "activeParts", "main", "EXPOSE", "ObservabilityAction", "SEND_EVENT", "name", "properties", "spaceId", "React", "Dialog", "Content", "JoinPanel", "exitActionParent", "Close", "asChild", "doneActionParent", "onDone", "Planet", "React", "getSpace", "useClient", "DropdownMenu", "toLocalizedString", "useTranslation", "MenuFooter", "object", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "space", "getSpace", "spaceName", "getSpaceDisplayName", "personal", "spaces", "default", "React", "DropdownMenu", "Separator", "GroupLabel", "dl", "className", "dt", "dd", "Planet", "toLocalizedString", "ArrowsCounterClockwise", "CheckCircle", "Warning", "React", "useEffect", "useState", "debounce", "Tooltip", "useTranslation", "getSize", "mx", "staticPlaceholderText", "warningText", "Status", "PersistenceStatus", "db", "t", "useTranslation", "SPACE_PLUGIN", "displayMessage", "setDisplayMessage", "useState", "status", "naturalSetStatus", "prevStatus", "setPrevStatus", "_setStatus", "debounce", "useEffect", "timeout", "setTimeout", "clearTimeout", "React", "div", "className", "Warning", "mx", "getSize", "span", "warningText", "ArrowsCounterClockwise", "staticPlaceholderText", "Tooltip", "Root", "delayDuration", "Trigger", "role", "CheckCircle", "Portal", "Content", "classNames", "Arrow", "React", "useCallback", "useRef", "useState", "log", "Button", "Input", "Popover", "useTranslation", "PopoverRenameObject", "object", "obj", "t", "useTranslation", "SPACE_PLUGIN", "doneButton", "useRef", "name", "setName", "useState", "title", "handleDone", "useCallback", "err", "log", "error", "React", "div", "role", "className", "Input", "Root", "Label", "srOnly", "TextInput", "placeholder", "value", "data-testid", "onChange", "target", "onKeyDown", "key", "current", "click", "Popover", "Close", "asChild", "Button", "ref", "classNames", "onClick", "ns", "React", "useCallback", "useRef", "useState", "Button", "Input", "Popover", "useTranslation", "PopoverRenameSpace", "space", "t", "useTranslation", "SPACE_PLUGIN", "doneButton", "useRef", "name", "setName", "useState", "properties", "handleDone", "useCallback", "React", "div", "role", "className", "Input", "Root", "Label", "srOnly", "TextInput", "defaultValue", "placeholder", "onChange", "target", "value", "onKeyDown", "key", "current", "click", "Popover", "Close", "asChild", "Button", "ref", "classNames", "onClick", "ns", "React", "useIntentDispatcher", "IconButton", "useTranslation", "ShareSpaceButton", "space", "dispatch", "useIntentDispatcher", "React", "ShareSpaceButtonImpl", "onClick", "action", "SpaceAction", "SHARE", "data", "t", "useTranslation", "SPACE_PLUGIN", "IconButton", "data-testid", "icon", "label", "React", "useCallback", "useEffect", "useState", "usePlugin", "generateName", "PublicKey", "useClient", "getSpace", "useMembers", "fullyQualifiedId", "useIdentity", "Avatar", "AvatarGroup", "AvatarGroupItem", "Tooltip", "useTranslation", "List", "ListItem", "useDefaultValue", "AttentionGlyph", "useAttention", "ComplexMap", "keyToFallback", "REFRESH_INTERVAL", "ACTIVITY_DURATION", "noViewers", "ComplexMap", "PublicKey", "hash", "getName", "identity", "profile", "displayName", "generateName", "identityKey", "toHex", "SpacePresence", "object", "spaceKey", "spacePlugin", "usePlugin", "SPACE_PLUGIN", "client", "useClient", "useIdentity", "space", "spaces", "get", "getSpace", "spaceMembers", "useMembers", "key", "_moment", "setMoment", "useState", "Date", "now", "useEffect", "interval", "setInterval", "clearInterval", "memberOnline", "useCallback", "member", "presence", "memberIsNotSelf", "equals", "spaceState", "provides", "currentObjectViewers", "viewersByObject", "fullyQualifiedId", "membersForObject", "filter", "has", "map", "objectView", "lastSeen", "currentlyAttended", "toSorted", "a", "b", "React", "FullPresence", "members", "props", "size", "onMemberClick", "useDefaultValue", "length", "AvatarGroup", "Root", "classNames", "data-testid", "slice", "i", "Tooltip", "Trigger", "PrensenceAvatar", "group", "match", "index", "onClick", "Portal", "Content", "side", "span", "Arrow", "AvatarGroupItem", "status", "Avatar", "Frame", "style", "zIndex", "Fallback", "text", "List", "ListItem", "showName", "fallbackValue", "keyToFallback", "hue", "data", "data-status", "emoji", "Label", "SmallPresenceLive", "id", "viewers", "getActiveViewers", "moment", "Array", "from", "values", "activeViewers", "setActiveViewers", "SmallPresence", "count", "t", "useTranslation", "hasAttention", "isAncestor", "isRelated", "useAttention", "attention", "asChild", "div", "role", "className", "data-attention", "AttentionGlyph", "React", "useIntentDispatcher", "Input", "useTranslation", "DeprecatedFormInput", "SpacePluginSettings", "settings", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "React", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "showHidden", "onCheckedChange", "plugin", "action", "SpaceAction", "TOGGLE_HIDDEN", "data", "state", "React", "useState", "useClient", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "Tabs", "ClipboardProvider", "SpacePanel", "React", "useCallback", "useState", "log", "EdgeReplicationSetting", "useClient", "Input", "useTranslation", "DeprecatedFormInput", "SpaceSettingsPanel", "space", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "edgeEnabled", "Boolean", "config", "values", "runtime", "edgeFeatures", "echoReplicator", "edgeReplication", "setEdgeReplication", "useState", "internal", "data", "EdgeReplicationSetting", "ENABLED", "toggleEdgeReplication", "useCallback", "next", "setEdgeReplicationPreference", "DISABLED", "catch", "err", "log", "React", "div", "role", "className", "DeprecatedFormInput", "label", "Input", "TextInput", "placeholder", "value", "properties", "name", "onChange", "event", "target", "Switch", "checked", "onCheckedChange", "SpaceSettingsDialog", "space", "target", "createInvitationUrl", "initialTab", "namesCache", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "tabsActivePart", "setTabsActivePart", "useState", "selected", "setSelected", "locked", "properties", "COMPOSER_SPACE_LOCK", "name", "getSpaceDisplayName", "personal", "spaces", "default", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "onClick", "aria-description", "Icon", "icon", "size", "span", "toLocalizedString", "Close", "asChild", "Button", "density", "variant", "autoFocus", "Tabs", "Root", "orientation", "value", "onValueChange", "activePart", "onActivePartChange", "Viewport", "Tablist", "Tab", "disabled", "Tabpanel", "SpaceSettingsPanel", "ClipboardProvider", "SpacePanel", "hideHeading", "React", "useEffect", "useState", "QueryEdgeStatusResponse", "EdgeReplicationSetting", "useClient", "Icon", "useTranslation", "useEffect", "useState", "Context", "EdgeService", "useClient", "createEmptyEdgeSyncState", "missingOnLocal", "missingOnRemote", "localDocumentCount", "remoteDocumentCount", "differentDocuments", "getSyncSummary", "syncMap", "Object", "entries", "reduce", "summary", "_spaceId", "peerState", "isEdgePeerId", "peerId", "spaceId", "startsWith", "AUTOMERGE_REPLICATOR", "useSyncState", "client", "spaceState", "setSpaceState", "ctx", "createSubscriptions", "spaces", "space", "id", "onDispose", "crud", "subscribeToSyncState", "peers", "syncState", "find", "state", "get", "subscribe", "dispose", "useSpaceSyncState", "useEdgeStatus", "status", "setStatus", "useState", "QueryEdgeStatusResponse", "EdgeStatus", "NOT_CONNECTED", "client", "useClient", "useEffect", "services", "EdgeAgentService", "queryEdgeStatus", "subscribe", "InlineSyncStatus", "space", "t", "useTranslation", "SPACE_PLUGIN", "connectedToEdge", "CONNECTED", "edgeSyncEnabled", "internal", "data", "edgeReplication", "EdgeReplicationSetting", "ENABLED", "syncState", "useSpaceSyncState", "missingOnLocal", "React", "div", "role", "aria-label", "className", "Icon", "icon", "size", "classNames", "React", "useCallback", "useEffect", "useState", "StatusBar", "useClient", "Icon", "Input", "Popover", "useTranslation", "SyntaxHighlighter", "mx", "React", "useEffect", "useState", "useClient", "useSpace", "Icon", "toLocalizedString", "useTranslation", "mx", "SYNC_STALLED_TIMEOUT", "styles", "barBg", "barFg", "barHover", "useActive", "count", "current", "setCurrent", "useState", "active", "setActive", "useEffect", "t", "clearTimeout", "setTimeout", "SpaceRowContainer", "spaceId", "state", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "space", "useSpace", "spaceName", "toLocalizedString", "getSpaceDisplayName", "personal", "spaces", "default", "React", "SpaceRow", "localDocumentCount", "remoteDocumentCount", "missingOnLocal", "missingOnRemote", "downActive", "upActive", "div", "className", "title", "onClick", "navigator", "clipboard", "writeText", "span", "Icon", "icon", "size", "classNames", "mx", "Candle", "up", "total", "down", "Bar", "p", "Math", "min", "style", "width", "Context", "createClientSaveTracker", "client", "cb", "unsubscribeCallbacks", "state", "install", "spaces", "space", "id", "createSpaceSaveTracker", "s", "Object", "values", "some", "subscribe", "get", "unsubscribe", "ctx", "waitUntilReady", "then", "disposed", "hasUnsavedChanges", "lastFlushPromise", "crud", "saveStateChanged", "on", "unsavedDocuments", "length", "debounce", "undefined", "flushPromise", "flush", "dispose", "getStatus", "offline", "saved", "needsToUpload", "needsToDownload", "getIcon", "status", "SyncStatus", "client", "useClient", "state", "useSyncState", "saved", "setSaved", "useState", "useEffect", "createClientSaveTracker", "React", "SyncStatusIndicator", "t", "useTranslation", "SPACE_PLUGIN", "summary", "getSyncSummary", "offline", "Object", "values", "length", "needsToUpload", "differentDocuments", "missingOnRemote", "needsToDownload", "missingOnLocal", "status", "getStatus", "classNames", "setClassNames", "undefined", "setTimeout", "SYNC_STALLED_TIMEOUT", "clearTimeout", "title", "icon", "Icon", "getIcon", "size", "StatusBar", "Item", "Popover", "Root", "Trigger", "asChild", "Button", "Portal", "Content", "sideOffset", "SyncStatusDetail", "debug", "showAll", "setShowAll", "entries", "filter", "_", "value", "toSorted", "a", "b", "handleCheckedChange", "useCallback", "div", "className", "mx", "role", "h1", "Input", "Label", "Checkbox", "checked", "onCheckedChange", "map", "spaceId", "SpaceRowContainer", "key", "SyntaxHighlighter", "language", "JSON", "stringify", "CollectionType", "typename", "SPACE_PLUGIN", "ACTIVE_NODE_BROADCAST_INTERVAL", "WAIT_FOR_OBJECT_TIMEOUT", "SPACE_MAX_OBJECTS", "DIRECTORY_TYPE", "parseSpacePlugin", "plugin", "Array", "isArray", "provides", "space", "enabled", "undefined", "SpacePlugin", "invitationUrl", "window", "location", "origin", "invitationParam", "firstRun", "onFirstRun", "settings", "LocalStorageStore", "SPACE_PLUGIN", "state", "awaiting", "spaceNames", "viewersByObject", "viewersByIdentity", "ComplexMap", "PublicKey", "hash", "sdkMigrationRunning", "navigableCollections", "enabledEdgeReplication", "subscriptions", "EventSubscriptions", "spaceSubscriptions", "graphSubscriptions", "Map", "schemas", "clientPlugin", "graphPlugin", "intentPlugin", "layoutPlugin", "navigationPlugin", "attentionPlugin", "metadataPlugin", "createSpaceInvitationUrl", "invitationCode", "baseUrl", "URL", "searchParams", "set", "toString", "onSpaceReady", "client", "dispatch", "intent", "graph", "layout", "attention", "defaultSpace", "spaces", "default", "properties", "COMPOSER_SPACE_LOCK", "objects", "spacesOrder", "db", "query", "Filter", "schema", "Expando", "key", "SHARED", "run", "add", "create", "order", "scheduledEffect", "layoutMode", "soloPart", "active", "solo", "node", "findNode", "id", "length", "FQ_ID_LENGTH", "timeout", "setTimeout", "action", "SpaceAction", "WAIT_FOR_OBJECT", "data", "clearTimeout", "subscribe", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "internal", "migrate", "filter", "SPACE_READY", "forEach", "name", "values", "unsubscribe", "open", "openIds", "closed", "send", "identity", "halo", "idsBySpace", "reduceGroupBy", "spaceId", "parseFullyQualifiedId", "removedBySpace", "has", "added", "removed", "find", "postMessage", "identityKey", "toHex", "attended", "catch", "err", "log", "warn", "message", "interval", "setInterval", "clearInterval", "clear", "listen", "payload", "safeFrom", "currentIdentity", "equals", "lastSeen", "Date", "now", "currentlyAttended", "Set", "delete", "setEdgeReplicationDefault", "Promise", "all", "map", "setEdgeReplicationPreference", "EdgeReplicationSetting", "ENABLED", "meta", "ready", "plugins", "prop", "type", "bool", "allowUndefined", "json", "findPlugin", "resolvePlugin", "parseGraphPlugin", "parseLayoutPlugin", "parseMetadataResolverPlugin", "parseNavigationPlugin", "parseAttentionPlugin", "parseClientPlugin", "parseIntentPlugin", "push", "filterPlugins", "parseSchemaPlugin", "echo", "nonNullable", "reduce", "acc", "addTypes", "system", "handleFirstRun", "CollectionType", "typename", "views", "Migrations", "versionProperty", "targetVersion", "isReady", "waitUntilReady", "wait", "then", "unload", "close", "cb", "translations", "osTranslations", "complementary", "panels", "label", "ns", "icon", "root", "React", "AwaitingObject", "metadata", "records", "createObject", "CollectionAction", "CREATE", "placeholder", "loadReferences", "collection", "loadObjectReferences", "Object", "surface", "component", "role", "rest", "isSpace", "object", "Surface", "CollectionMain", "disposition", "subject", "SpaceSettingsPanel", "isEchoObject", "DefaultObjectSettings", "SpaceSettingsDialog", "createInvitationUrl", "JoinDialog", "CreateSpaceDialog", "CreateObjectDialog", "resolve", "resolver", "PopoverRenameSpace", "isReactiveObject", "PopoverRenameObject", "SmallPresenceLive", "viewers", "fullyQualifiedId", "InlineSyncStatus", "SmallPresence", "count", "getSpace", "SpacePresence", "ShareSpaceButton", "CollectionSection", "SpacePluginSettings", "MenuFooter", "SyncStatus", "builder", "createExtension", "connector", "toSignal", "onChange", "defaultSpaceUnsubscribe", "SPACES", "cacheable", "testId", "disabled", "childrenPersistenceClass", "onRearrangeChildren", "nextOrder", "_sortEdges", "actions", "OPEN_CREATE_SPACE", "className", "JOIN", "memoizeQuery", "orderMap", "index", "sort", "a", "b", "showHidden", "SPACE_INACTIVE", "constructSpaceNode", "navigable", "personal", "namesCache", "SPACE_ID_LENGTH", "constructSpaceActions", "migrating", "spaceState", "createObjectNode", "objectId", "split", "OBJECT_ID_LENGTH", "store", "memoize", "signal", "getObjectById", "value", "first", "o", "isDeleted", "constructObjectActions", "endsWith", "subjectId", "parseId", "showResolvedThreads", "getTypename", "serializer", "inputType", "outputType", "serialize", "deserialize", "SPACE_TYPE", "result", "ancestors", "findLast", "ancestor", "ADD_OBJECT", "target", "intents", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "S", "is", "SpaceForm", "edgeReplication", "activeParts", "main", "ObservabilityAction", "SEND_EVENT", "initialInvitationCode", "SHARE", "mode", "current", "firstIdInPart", "startsWith", "initialTab", "LOCK", "UNLOCK", "RENAME", "caller", "anchorId", "OPEN_SETTINGS", "OPEN", "CLOSE", "MIGRATE", "version", "OPEN_CREATE_OBJECT", "coreDatabase", "getAllObjectIds", "title", "description", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "unlinkDeletedObjects", "REMOVE_OBJECTS", "invariant", "every", "obj", "openObjectIds", "undo", "parentCollection", "nestedObjectsList", "getNestedObjects", "deletionData", "indices", "indexOf", "wasActive", "flatMap", "i", "NavigationAction", "sidebar", "splice", "flat", "remove", "undoMessageKey", "some", "undoable", "undoData", "restoredObjects", "RENAME_OBJECT", "DUPLICATE_OBJECT", "originalObject", "newObject", "cloneObject", "TOGGLE_HIDDEN", "SpacePlugin"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport React from 'react';\n\nimport {\n type GraphProvides,\n type IntentDispatcher,\n type IntentPluginProvides,\n LayoutAction,\n type LayoutProvides,\n type LocationProvides,\n type MetadataResolverProvides,\n NavigationAction,\n type Plugin,\n type PluginDefinition,\n Surface,\n filterPlugins,\n findPlugin,\n firstIdInPart,\n openIds,\n parseGraphPlugin,\n parseIntentPlugin,\n parseLayoutPlugin,\n parseMetadataResolverPlugin,\n parseNavigationPlugin,\n resolvePlugin,\n} from '@dxos/app-framework';\nimport { EventSubscriptions, type Trigger, type UnsubscribeCallback } from '@dxos/async';\nimport { S, type AbstractTypedObject, type HasId } from '@dxos/echo-schema';\nimport { scheduledEffect } from '@dxos/echo-signals/core';\nimport { invariant } from '@dxos/invariant';\nimport { create, isDeleted, isReactiveObject } from '@dxos/live-object';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\nimport { Migrations } from '@dxos/migrations';\nimport { type AttentionPluginProvides, parseAttentionPlugin } from '@dxos/plugin-attention';\nimport { type ClientPluginProvides, parseClientPlugin } from '@dxos/plugin-client';\nimport { type Node, createExtension, memoize, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { type Client, PublicKey } from '@dxos/react-client';\nimport {\n Expando,\n FQ_ID_LENGTH,\n Filter,\n OBJECT_ID_LENGTH,\n type ReactiveEchoObject,\n SPACE_ID_LENGTH,\n type Space,\n SpaceState,\n fullyQualifiedId,\n getSpace,\n getTypename,\n isEchoObject,\n isSpace,\n loadObjectReferences,\n parseFullyQualifiedId,\n parseId,\n} from '@dxos/react-client/echo';\nimport { type JoinPanelProps, osTranslations } from '@dxos/shell/react';\nimport { ComplexMap, nonNullable, reduceGroupBy } from '@dxos/util';\n\nimport {\n AwaitingObject,\n CollectionMain,\n CollectionSection,\n CreateObjectDialog,\n type CreateObjectDialogProps,\n CreateSpaceDialog,\n DefaultObjectSettings,\n JoinDialog,\n InlineSyncStatus,\n MenuFooter,\n PopoverRenameObject,\n PopoverRenameSpace,\n ShareSpaceButton,\n SmallPresence,\n SmallPresenceLive,\n SpacePluginSettings,\n SpacePresence,\n SpaceSettingsDialog,\n SpaceSettingsPanel,\n SyncStatus,\n type SpaceSettingsDialogProps,\n} from './components';\nimport meta, { CollectionAction, SPACE_PLUGIN, SpaceAction } from './meta';\nimport translations from './translations';\nimport {\n CollectionType,\n parseSchemaPlugin,\n SpaceForm,\n type PluginState,\n type SpacePluginProvides,\n type SpaceSettingsProps,\n} from './types';\nimport {\n COMPOSER_SPACE_LOCK,\n SHARED,\n SPACES,\n SPACE_TYPE,\n cloneObject,\n constructObjectActions,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n getNestedObjects,\n memoizeQuery,\n} from './util';\n\nconst ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;\nconst WAIT_FOR_OBJECT_TIMEOUT = 1000;\nconst SPACE_MAX_OBJECTS = 500;\n// https://stackoverflow.com/a/19016910\nconst DIRECTORY_TYPE = 'text/directory';\n\nexport const parseSpacePlugin = (plugin?: Plugin) =>\n Array.isArray((plugin?.provides as any).space?.enabled) ? (plugin as Plugin<SpacePluginProvides>) : undefined;\n\nexport type SpacePluginOptions = {\n /**\n * Base URL for the invitation link.\n */\n invitationUrl?: string;\n\n /**\n * Query parameter for the invitation code.\n */\n invitationParam?: string;\n\n /**\n * Fired when first run logic should be executed.\n *\n * This trigger is invoked once the HALO identity is created but must only be run in one instance of the application.\n * As such it cannot depend directly on the HALO identity event.\n */\n firstRun?: Trigger<void>;\n\n /**\n * Root collection structure is created on application first run if it does not yet exist.\n * This callback is invoked immediately following the creation of the root collection structure.\n *\n * @param params.client DXOS Client\n * @param params.dispatch Function to dispatch intents\n */\n onFirstRun?: (params: { client: Client; dispatch: IntentDispatcher }) => Promise<void>;\n};\n\nexport const SpacePlugin = ({\n invitationUrl = window.location.origin,\n invitationParam = 'spaceInvitationCode',\n firstRun,\n onFirstRun,\n}: SpacePluginOptions = {}): PluginDefinition<SpacePluginProvides> => {\n const settings = new LocalStorageStore<SpaceSettingsProps>(SPACE_PLUGIN, {});\n const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {\n awaiting: undefined,\n spaceNames: {},\n viewersByObject: {},\n // TODO(wittjosiah): Stop using (Complex)Map inside reactive object.\n viewersByIdentity: new ComplexMap(PublicKey.hash),\n sdkMigrationRunning: {},\n navigableCollections: false,\n enabledEdgeReplication: false,\n });\n const subscriptions = new EventSubscriptions();\n const spaceSubscriptions = new EventSubscriptions();\n const graphSubscriptions = new Map<string, UnsubscribeCallback>();\n const schemas: AbstractTypedObject[] = [];\n\n let clientPlugin: Plugin<ClientPluginProvides> | undefined;\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let intentPlugin: Plugin<IntentPluginProvides> | undefined;\n let layoutPlugin: Plugin<LayoutProvides> | undefined;\n let navigationPlugin: Plugin<LocationProvides> | undefined;\n let attentionPlugin: Plugin<AttentionPluginProvides> | undefined;\n let metadataPlugin: Plugin<MetadataResolverProvides> | undefined;\n\n const createSpaceInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationUrl);\n baseUrl.searchParams.set(invitationParam, invitationCode);\n return baseUrl.toString();\n };\n\n const onSpaceReady = async () => {\n if (!clientPlugin || !intentPlugin || !graphPlugin || !navigationPlugin || !layoutPlugin || !attentionPlugin) {\n return;\n }\n\n const client = clientPlugin.provides.client;\n const dispatch = intentPlugin.provides.intent.dispatch;\n const graph = graphPlugin.provides.graph;\n const location = navigationPlugin.provides.location;\n const layout = layoutPlugin.provides.layout;\n const attention = attentionPlugin.provides.attention;\n const defaultSpace = client.spaces.default;\n\n // Initialize space sharing lock in default space.\n if (typeof defaultSpace.properties[COMPOSER_SPACE_LOCK] !== 'boolean') {\n defaultSpace.properties[COMPOSER_SPACE_LOCK] = true;\n }\n\n const {\n objects: [spacesOrder],\n } = await defaultSpace.db.query(Filter.schema(Expando, { key: SHARED })).run();\n if (!spacesOrder) {\n // TODO(wittjosiah): Cannot be a Folder because Spaces are not TypedObjects so can't be saved in the database.\n // Instead, we store order as an array of space ids.\n defaultSpace.db.add(create({ key: SHARED, order: [] }));\n }\n\n // Await missing objects.\n subscriptions.add(\n scheduledEffect(\n () => ({\n layoutMode: layout.layoutMode,\n soloPart: location.active.solo?.[0],\n }),\n ({ layoutMode, soloPart }) => {\n if (layoutMode !== 'solo' || !soloPart) {\n return;\n }\n\n const node = graph.findNode(soloPart.id);\n if (!node && soloPart.id.length === FQ_ID_LENGTH) {\n const timeout = setTimeout(async () => {\n const node = graph.findNode(soloPart.id);\n if (!node) {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.WAIT_FOR_OBJECT,\n data: { id: soloPart.id },\n });\n }\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n return () => clearTimeout(timeout);\n }\n },\n ),\n );\n\n // Cache space names.\n subscriptions.add(\n client.spaces.subscribe(async (spaces) => {\n // TODO(wittjosiah): Remove. This is a hack to be able to migrate the default space properties.\n if (defaultSpace.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {\n await defaultSpace.internal.migrate();\n }\n\n spaces\n .filter((space) => space.state.get() === SpaceState.SPACE_READY)\n .forEach((space) => {\n subscriptions.add(\n scheduledEffect(\n () => ({ name: space.properties.name }),\n ({ name }) => (state.values.spaceNames[space.id] = name),\n ),\n );\n });\n }).unsubscribe,\n );\n\n // Broadcast active node to other peers in the space.\n subscriptions.add(\n scheduledEffect(\n () => ({\n open: openIds(location.active, layout.layoutMode === 'solo' ? ['solo'] : ['main']),\n closed: [...location.closed],\n }),\n ({ open, closed }) => {\n const send = () => {\n const spaces = client.spaces.get();\n const identity = client.halo.identity.get();\n if (identity && location.active) {\n // Group parts by space for efficient messaging.\n const idsBySpace = reduceGroupBy(open, (id) => {\n try {\n const [spaceId] = parseFullyQualifiedId(id);\n return spaceId;\n } catch {\n return null;\n }\n });\n\n const removedBySpace = reduceGroupBy(closed, (id) => {\n try {\n const [spaceId] = parseFullyQualifiedId(id);\n return spaceId;\n } catch {\n return null;\n }\n });\n\n // NOTE: Ensure all spaces are included so that we send the correct `removed` object arrays.\n for (const space of spaces) {\n if (!idsBySpace.has(space.id)) {\n idsBySpace.set(space.id, []);\n }\n }\n\n for (const [spaceId, added] of idsBySpace) {\n const removed = removedBySpace.get(spaceId) ?? [];\n const space = spaces.find((space) => space.id === spaceId);\n if (!space) {\n continue;\n }\n\n void space\n .postMessage('viewing', {\n identityKey: identity.identityKey.toHex(),\n attended: attention.attended ? [...attention.attended] : [],\n added,\n removed,\n })\n // TODO(burdon): This seems defensive; why would this fail? Backoff interval.\n .catch((err) => {\n log.warn('Failed to broadcast active node for presence.', { err: err.message });\n });\n }\n }\n };\n\n send();\n // Send at interval to allow peers to expire entries if they become disconnected.\n const interval = setInterval(() => send(), ACTIVE_NODE_BROADCAST_INTERVAL);\n return () => clearInterval(interval);\n },\n ),\n );\n\n // Listen for active nodes from other peers in the space.\n subscriptions.add(\n client.spaces.subscribe((spaces) => {\n spaceSubscriptions.clear();\n spaces.forEach((space) => {\n spaceSubscriptions.add(\n space.listen('viewing', (message) => {\n const { added, removed, attended } = message.payload;\n\n const identityKey = PublicKey.safeFrom(message.payload.identityKey);\n const currentIdentity = client.halo.identity.get();\n if (\n identityKey &&\n !currentIdentity?.identityKey.equals(identityKey) &&\n Array.isArray(added) &&\n Array.isArray(removed)\n ) {\n added.forEach((id) => {\n if (typeof id === 'string') {\n if (!(id in state.values.viewersByObject)) {\n state.values.viewersByObject[id] = new ComplexMap(PublicKey.hash);\n }\n state.values.viewersByObject[id]!.set(identityKey, {\n lastSeen: Date.now(),\n currentlyAttended: new Set(attended).has(id),\n });\n if (!state.values.viewersByIdentity.has(identityKey)) {\n state.values.viewersByIdentity.set(identityKey, new Set());\n }\n state.values.viewersByIdentity.get(identityKey)!.add(id);\n }\n });\n\n removed.forEach((id) => {\n if (typeof id === 'string') {\n state.values.viewersByObject[id]?.delete(identityKey);\n state.values.viewersByIdentity.get(identityKey)?.delete(id);\n // It’s okay for these to be empty sets/maps, reduces churn.\n }\n });\n }\n }),\n );\n });\n }).unsubscribe,\n );\n };\n\n const setEdgeReplicationDefault = async (client: Client) => {\n try {\n await Promise.all(\n client.spaces.get().map((space) => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED)),\n );\n state.values.enabledEdgeReplication = true;\n } catch (err) {\n log.catch(err);\n }\n };\n\n return {\n meta,\n ready: async (plugins) => {\n settings.prop({ key: 'showHidden', type: LocalStorageStore.bool({ allowUndefined: true }) });\n state\n .prop({ key: 'spaceNames', type: LocalStorageStore.json<Record<string, string>>() })\n .prop({ key: 'enabledEdgeReplication', type: LocalStorageStore.bool() });\n\n // TODO(wittjosiah): Hardcoded due to circular dependency.\n // Should be based on a provides interface.\n if (findPlugin(plugins, 'dxos.org/plugin/stack')) {\n state.values.navigableCollections = true;\n }\n\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n layoutPlugin = resolvePlugin(plugins, parseLayoutPlugin);\n metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);\n navigationPlugin = resolvePlugin(plugins, parseNavigationPlugin);\n attentionPlugin = resolvePlugin(plugins, parseAttentionPlugin);\n clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n if (!clientPlugin || !intentPlugin) {\n return;\n }\n\n const client = clientPlugin.provides.client;\n const dispatch = intentPlugin.provides.intent.dispatch;\n\n schemas.push(\n ...filterPlugins(plugins, parseSchemaPlugin)\n .map((plugin) => plugin.provides.echo.schema)\n .filter(nonNullable)\n .reduce((acc, schema) => {\n return [...acc, ...schema];\n }),\n );\n client.addTypes(schemas);\n filterPlugins(plugins, parseSchemaPlugin).forEach((plugin) => {\n if (plugin.provides.echo.system) {\n client.addTypes(plugin.provides.echo.system);\n }\n });\n\n const handleFirstRun = async () => {\n const defaultSpace = client.spaces.default;\n\n // Create root collection structure.\n defaultSpace.properties[CollectionType.typename] = create(CollectionType, { objects: [], views: {} });\n if (Migrations.versionProperty) {\n defaultSpace.properties[Migrations.versionProperty] = Migrations.targetVersion;\n }\n await onFirstRun?.({ client, dispatch });\n };\n\n subscriptions.add(\n client.spaces.isReady.subscribe(async (ready) => {\n if (ready) {\n await clientPlugin?.provides.client.spaces.default.waitUntilReady();\n if (firstRun) {\n void firstRun?.wait().then(handleFirstRun);\n } else {\n await handleFirstRun();\n }\n\n await onSpaceReady();\n await setEdgeReplicationDefault(client);\n }\n }).unsubscribe,\n );\n },\n unload: async () => {\n settings.close();\n spaceSubscriptions.clear();\n subscriptions.clear();\n graphSubscriptions.forEach((cb) => cb());\n graphSubscriptions.clear();\n },\n provides: {\n space: state.values,\n settings: settings.values,\n translations: [...translations, osTranslations],\n complementary: {\n panels: [\n { id: 'settings', label: ['open settings panel label', { ns: SPACE_PLUGIN }], icon: 'ph--gear--regular' },\n ],\n },\n root: () => (state.values.awaiting ? <AwaitingObject id={state.values.awaiting} /> : null),\n metadata: {\n records: {\n [CollectionType.typename]: {\n createObject: CollectionAction.CREATE,\n placeholder: ['unnamed collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--cards-three--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (collection: CollectionType) =>\n loadObjectReferences(collection, (collection) => [\n ...collection.objects,\n ...Object.values(collection.views),\n ]),\n },\n },\n },\n echo: {\n schema: [CollectionType],\n },\n surface: {\n component: ({ data, role, ...rest }) => {\n switch (role) {\n case 'article':\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n return isSpace(data.object) && data.object.state.get() === SpaceState.SPACE_READY ? (\n <Surface\n data={{ object: data.object.properties[CollectionType.typename], id: data.object.id }}\n role={role}\n {...rest}\n />\n ) : data.object instanceof CollectionType ? (\n {\n node: <CollectionMain collection={data.object} />,\n disposition: 'fallback',\n }\n ) : null;\n // TODO(burdon): Add role name syntax to minimal plugin docs.\n case 'complementary--settings':\n return isSpace(data.subject) ? (\n <SpaceSettingsPanel space={data.subject} />\n ) : isEchoObject(data.subject) ? (\n { node: <DefaultObjectSettings object={data.subject} />, disposition: 'fallback' }\n ) : null;\n case 'dialog':\n if (data.component === 'dxos.org/plugin/space/SpaceSettingsDialog') {\n return (\n <SpaceSettingsDialog\n {...(data.subject as SpaceSettingsDialogProps)}\n createInvitationUrl={createSpaceInvitationUrl}\n />\n );\n } else if (data.component === 'dxos.org/plugin/space/JoinDialog') {\n return <JoinDialog {...(data.subject as JoinPanelProps)} />;\n } else if (data.component === 'dxos.org/plugin/space/CreateSpaceDialog') {\n return <CreateSpaceDialog />;\n } else if (data.component === 'dxos.org/plugin/space/CreateObjectDialog') {\n return (\n <CreateObjectDialog\n {...(data.subject as CreateObjectDialogProps)}\n schemas={schemas}\n navigableCollections={state.values.navigableCollections}\n resolve={metadataPlugin?.provides.metadata.resolver}\n />\n );\n }\n return null;\n case 'popover': {\n if (data.component === 'dxos.org/plugin/space/RenameSpacePopover' && isSpace(data.subject)) {\n return <PopoverRenameSpace space={data.subject} />;\n }\n if (data.component === 'dxos.org/plugin/space/RenameObjectPopover' && isReactiveObject(data.subject)) {\n return <PopoverRenameObject object={data.subject} />;\n }\n return null;\n }\n case 'navtree-item-end': {\n return isReactiveObject(data.object) ? (\n <SmallPresenceLive\n id={data.id as string}\n viewers={state.values.viewersByObject[fullyQualifiedId(data.object)]}\n />\n ) : isSpace(data.object) ? (\n <InlineSyncStatus space={data.object} />\n ) : (\n // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.\n <SmallPresence id={data.id as string} count={0} />\n );\n }\n case 'navbar-end': {\n if (!isEchoObject(data.object) && !isSpace(data.object)) {\n return null;\n }\n\n const space = isSpace(data.object) ? data.object : getSpace(data.object);\n const object = isSpace(data.object)\n ? data.object.state.get() === SpaceState.SPACE_READY\n ? (space?.properties[CollectionType.typename] as CollectionType)\n : undefined\n : data.object;\n\n return space && object\n ? {\n node: (\n <>\n <SpacePresence object={object} />\n {space.properties[COMPOSER_SPACE_LOCK] ? null : <ShareSpaceButton space={space} />}\n </>\n ),\n disposition: 'hoist',\n }\n : null;\n }\n case 'section':\n return data.object instanceof CollectionType ? <CollectionSection collection={data.object} /> : null;\n case 'settings':\n return data.plugin === meta.id ? <SpacePluginSettings settings={settings.values} /> : null;\n case 'menu-footer':\n if (isEchoObject(data.object)) {\n return <MenuFooter object={data.object} />;\n } else {\n return null;\n }\n case 'status': {\n return <SyncStatus />;\n }\n default:\n return null;\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n const metadataPlugin = resolvePlugin(plugins, parseMetadataResolverPlugin);\n const graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n\n const client = clientPlugin?.provides.client;\n const dispatch = intentPlugin?.provides.intent.dispatch;\n const resolve = metadataPlugin?.provides.metadata.resolver;\n const graph = graphPlugin?.provides.graph;\n if (!client || !dispatch || !resolve || !graph) {\n return [];\n }\n\n const spacesNode = {\n id: SPACES,\n type: SPACES,\n cacheable: ['label', 'role'],\n properties: {\n label: ['spaces label', { ns: SPACE_PLUGIN }],\n testId: 'spacePlugin.spaces',\n role: 'branch',\n disabled: true,\n childrenPersistenceClass: 'echo',\n onRearrangeChildren: async (nextOrder: Space[]) => {\n // NOTE: This is needed to ensure order is updated by next animation frame.\n // TODO(wittjosiah): Is there a better way to do this?\n // If not, graph should be passed as an argument to the extension.\n graph._sortEdges(\n SPACES,\n 'outbound',\n nextOrder.map(({ id }) => id),\n );\n\n const {\n objects: [spacesOrder],\n } = await client.spaces.default.db.query(Filter.schema(Expando, { key: SHARED })).run();\n if (spacesOrder) {\n spacesOrder.order = nextOrder.map(({ id }) => id);\n } else {\n log.warn('spaces order object not found');\n }\n },\n },\n };\n\n return [\n // Create spaces group node.\n createExtension({\n id: `${SPACE_PLUGIN}/root`,\n filter: (node): node is Node<null> => node.id === 'root',\n connector: () => [spacesNode],\n resolver: ({ id }) => (id === SPACES ? spacesNode : undefined),\n }),\n\n // Create space nodes.\n createExtension({\n id: SPACES,\n filter: (node): node is Node<null> => node.id === SPACES,\n actions: () => [\n {\n id: SpaceAction.OPEN_CREATE_SPACE,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.OPEN_CREATE_SPACE,\n });\n },\n properties: {\n label: ['create space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n testId: 'spacePlugin.createSpace',\n disposition: 'item',\n className: 'border-t border-separator',\n },\n },\n {\n id: SpaceAction.JOIN,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.JOIN,\n });\n },\n properties: {\n label: ['join space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\n disposition: 'item',\n },\n },\n ],\n connector: () => {\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n\n const isReady = toSignal(\n (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.isReady.get(),\n );\n\n if (!spaces || !isReady) {\n return;\n }\n\n // TODO(wittjosiah): During client reset, accessing default space throws.\n try {\n const [spacesOrder] = memoizeQuery(client.spaces.default, Filter.schema(Expando, { key: SHARED }));\n const order: string[] = spacesOrder?.order ?? [];\n const orderMap = new Map(order.map((id, index) => [id, index]));\n return [\n ...spaces\n .filter((space) => orderMap.has(space.id))\n .sort((a, b) => orderMap.get(a.id)! - orderMap.get(b.id)!),\n ...spaces.filter((space) => !orderMap.has(space.id)),\n ]\n .filter((space) =>\n settings.values.showHidden ? true : space.state.get() !== SpaceState.SPACE_INACTIVE,\n )\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: state.values.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.values.spaceNames,\n resolve,\n }),\n );\n } catch {}\n },\n resolver: ({ id }) => {\n if (id.length !== SPACE_ID_LENGTH) {\n return;\n }\n\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n\n const isReady = toSignal(\n (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.isReady.get(),\n );\n\n if (!spaces || !isReady) {\n return;\n }\n\n const space = spaces.find((space) => space.id === id);\n if (!space) {\n return;\n }\n\n if (space.state.get() === SpaceState.SPACE_INACTIVE) {\n return false;\n } else {\n return constructSpaceNode({\n space,\n navigable: state.values.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.values.spaceNames,\n resolve,\n });\n }\n },\n }),\n\n // Create space actions.\n createExtension({\n id: `${SPACE_PLUGIN}/actions`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n actions: ({ node }) => {\n const space = node.data;\n return constructSpaceActions({\n space,\n dispatch,\n personal: space === client.spaces.default,\n migrating: state.values.sdkMigrationRunning[space.id],\n });\n },\n }),\n\n // Create nodes for objects in the root collection of a space.\n createExtension({\n id: `${SPACE_PLUGIN}/root-collection`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n connector: ({ node }) => {\n const space = node.data;\n const spaceState = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (spaceState !== SpaceState.SPACE_READY) {\n return;\n }\n\n const collection = space.properties[CollectionType.typename] as CollectionType | undefined;\n if (!collection) {\n return;\n }\n\n return collection.objects\n .filter(nonNullable)\n .map((object) =>\n createObjectNode({ object, space, resolve, navigable: state.values.navigableCollections }),\n )\n .filter(nonNullable);\n },\n }),\n\n // Create nodes for objects in a collection or by its fully qualified id.\n createExtension({\n id: `${SPACE_PLUGIN}/objects`,\n filter: (node): node is Node<CollectionType> => node.data instanceof CollectionType,\n connector: ({ node }) => {\n const collection = node.data;\n const space = getSpace(collection);\n if (!space) {\n return;\n }\n\n return collection.objects\n .filter(nonNullable)\n .map((object) =>\n createObjectNode({ object, space, resolve, navigable: state.values.navigableCollections }),\n )\n .filter(nonNullable);\n },\n resolver: ({ id }) => {\n if (id.length !== FQ_ID_LENGTH) {\n return;\n }\n\n const [spaceId, objectId] = id.split(':');\n if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {\n return;\n }\n\n const space = client.spaces.get().find((space) => space.id === spaceId);\n if (!space) {\n return;\n }\n\n const spaceState = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (spaceState !== SpaceState.SPACE_READY) {\n return;\n }\n\n const store = memoize(() => signal(space.db.getObjectById(objectId)), id);\n memoize(() => {\n if (!store.value) {\n void space.db\n .query({ id: objectId })\n .first()\n .then((o) => (store.value = o))\n .catch((err) => log.catch(err, { objectId }));\n }\n }, id);\n const object = store.value;\n if (!object) {\n return;\n }\n\n if (isDeleted(object)) {\n return false;\n } else {\n return createObjectNode({ object, space, resolve, navigable: state.values.navigableCollections });\n }\n },\n }),\n\n // Create collection actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/object-actions`,\n filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),\n actions: ({ node }) => constructObjectActions({ node, dispatch }),\n }),\n\n // Create nodes for object settings.\n createExtension({\n id: `${SPACE_PLUGIN}/settings-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~settings')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--gear--regular';\n\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find(\n (space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY,\n );\n if (!objectId) {\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: SPACE_PLUGIN }]\n : ['unnamed object settings label', { ns: SPACE_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: SPACE_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n ];\n },\n serializer: (plugins) => {\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!dispatch) {\n return [];\n }\n\n return [\n {\n inputType: SPACES,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],\n data: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: () => {\n // No-op.\n },\n },\n {\n inputType: SPACE_TYPE,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.properties.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed space label'],\n data: node.data.properties.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed space label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data) => {\n const result = await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.CREATE,\n data: { name: data.name },\n });\n return result?.data.space;\n },\n },\n {\n inputType: CollectionType.typename,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed collection label'],\n data: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed collection label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data, ancestors) => {\n const space = ancestors.find(isSpace);\n const collection =\n ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ??\n space?.properties[CollectionType.typename];\n if (!space || !collection) {\n return;\n }\n\n const result = await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: {\n target: collection,\n object: create(CollectionType, { name: data.name, objects: [], views: {} }),\n },\n });\n\n return result?.data.object;\n },\n },\n ];\n },\n },\n intent: {\n resolver: async (intent, plugins) => {\n const clientPlugin = resolvePlugin(plugins, parseClientPlugin);\n const client = clientPlugin?.provides.client;\n switch (intent.action) {\n case SpaceAction.WAIT_FOR_OBJECT: {\n state.values.awaiting = intent.data?.id;\n return { data: true };\n }\n\n case SpaceAction.OPEN_CREATE_SPACE: {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/CreateSpaceDialog',\n dialogBlockAlign: 'start',\n subject: intent.data,\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.CREATE: {\n if (!client || !S.is(SpaceForm)(intent.data)) {\n return;\n }\n\n const space = await client.spaces.create({ name: intent.data.name });\n if (intent.data.edgeReplication) {\n await space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED);\n }\n await space.waitUntilReady();\n const collection = create(CollectionType, { objects: [], views: {} });\n space.properties[CollectionType.typename] = collection;\n\n if (Migrations.versionProperty) {\n space.properties[Migrations.versionProperty] = Migrations.targetVersion;\n }\n\n return {\n data: {\n space,\n id: space.id,\n activeParts: { main: [space.id] },\n },\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.create',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.JOIN: {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/JoinDialog',\n dialogBlockAlign: 'start',\n subject: {\n initialInvitationCode: intent.data?.invitationCode,\n onDone: intent.data?.onDone,\n } satisfies Partial<JoinPanelProps>,\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.SHARE: {\n const space = intent.data?.space;\n if (isSpace(space) && !space.properties[COMPOSER_SPACE_LOCK]) {\n const active = navigationPlugin?.provides.location.active;\n const mode = layoutPlugin?.provides.layout.layoutMode;\n const current = active ? firstIdInPart(active, mode === 'solo' ? 'solo' : 'main') : undefined;\n const target = current?.startsWith(space.id) ? current : undefined;\n\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/SpaceSettingsDialog',\n dialogBlockAlign: 'start',\n subject: {\n space,\n target,\n initialTab: 'members',\n createInvitationUrl: createSpaceInvitationUrl,\n } satisfies Partial<SpaceSettingsDialogProps>,\n },\n },\n ],\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.share',\n properties: {\n space: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.LOCK: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n space.properties[COMPOSER_SPACE_LOCK] = true;\n return {\n data: true,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.lock',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.UNLOCK: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n space.properties[COMPOSER_SPACE_LOCK] = false;\n return {\n data: true,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.unlock',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.RENAME: {\n const { caller, space } = intent.data ?? {};\n if (typeof caller === 'string' && isSpace(space)) {\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'popover',\n anchorId: `dxos.org/ui/${caller}/${space.id}`,\n component: 'dxos.org/plugin/space/RenameSpacePopover',\n subject: space,\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.OPEN_SETTINGS: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/SpaceSettingsDialog',\n dialogBlockAlign: 'start',\n subject: {\n space,\n initialTab: 'settings',\n createInvitationUrl: createSpaceInvitationUrl,\n } satisfies Partial<SpaceSettingsDialogProps>,\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.OPEN: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n await space.open();\n return { data: true };\n }\n break;\n }\n\n case SpaceAction.CLOSE: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n await space.close();\n return { data: true };\n }\n break;\n }\n\n case SpaceAction.MIGRATE: {\n const space = intent.data?.space;\n if (isSpace(space)) {\n if (space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {\n state.values.sdkMigrationRunning[space.id] = true;\n await space.internal.migrate();\n state.values.sdkMigrationRunning[space.id] = false;\n }\n const result = await Migrations.migrate(space, intent.data?.version);\n return {\n data: result,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.migrate',\n properties: {\n spaceId: space.id,\n version: intent.data?.version,\n },\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.OPEN_CREATE_OBJECT: {\n return {\n data: true,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/CreateObjectDialog',\n dialogBlockAlign: 'start',\n subject: intent.data,\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.ADD_OBJECT: {\n const object = intent.data?.object ?? intent.data?.result;\n if (!isReactiveObject(object)) {\n return;\n }\n\n const space = isSpace(intent.data?.target) ? intent.data?.target : getSpace(intent.data?.target);\n if (!space) {\n return;\n }\n\n if (space.db.coreDatabase.getAllObjectIds().length >= SPACE_MAX_OBJECTS) {\n return {\n data: false,\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'toast',\n subject: {\n id: `${SPACE_PLUGIN}/space-limit`,\n title: translations[0]['en-US'][SPACE_PLUGIN]['space limit label'],\n description: translations[0]['en-US'][SPACE_PLUGIN]['space limit description'],\n duration: 5_000,\n icon: 'ph--warning--regular',\n actionLabel: translations[0]['en-US'][SPACE_PLUGIN]['remove deleted objects label'],\n actionAlt: translations[0]['en-US'][SPACE_PLUGIN]['remove deleted objects alt'],\n // TODO(wittjosiah): Use OS namespace.\n closeLabel: translations[0]['en-US'][SPACE_PLUGIN]['space limit close label'],\n onAction: () => space.db.coreDatabase.unlinkDeletedObjects(),\n },\n },\n },\n ],\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.limit',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n\n if (intent.data?.target instanceof CollectionType) {\n intent.data?.target.objects.push(object as HasId);\n } else if (isSpace(intent.data?.target)) {\n const collection = space.properties[CollectionType.typename];\n if (collection instanceof CollectionType) {\n collection.objects.push(object as HasId);\n } else {\n // TODO(wittjosiah): Can't add non-echo objects by including in a collection because of types.\n const collection = create(CollectionType, { objects: [object as HasId], views: {} });\n space.properties[CollectionType.typename] = collection;\n }\n }\n\n return {\n data: { id: fullyQualifiedId(object), object, activeParts: { main: [fullyQualifiedId(object)] } },\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.object.add',\n properties: {\n spaceId: space.id,\n objectId: object.id,\n typename: getTypename(object),\n },\n },\n },\n ],\n ],\n };\n }\n\n case SpaceAction.REMOVE_OBJECTS: {\n const objects = intent.data?.objects ?? intent.data?.result;\n invariant(Array.isArray(objects));\n\n // All objects must be a member of the same space.\n const space = getSpace(objects[0]);\n if (!space || !objects.every((obj) => isEchoObject(obj) && getSpace(obj) === space)) {\n return;\n }\n\n const resolve = resolvePlugin(plugins, parseMetadataResolverPlugin)?.provides.metadata.resolver;\n const activeParts = navigationPlugin?.provides.location.active;\n const openObjectIds = new Set<string>(openIds(activeParts ?? {}));\n\n if (!intent.undo && resolve) {\n const parentCollection = intent.data?.collection ?? space.properties[CollectionType.typename];\n const nestedObjectsList = await Promise.all(objects.map((obj) => getNestedObjects(obj, resolve)));\n\n const deletionData = {\n objects,\n parentCollection,\n indices: objects.map((obj) =>\n parentCollection instanceof CollectionType ? parentCollection.objects.indexOf(obj as Expando) : -1,\n ),\n nestedObjectsList,\n wasActive: objects\n .flatMap((obj, i) => [obj, ...nestedObjectsList[i]])\n .map((obj) => fullyQualifiedId(obj))\n .filter((id) => openObjectIds.has(id)),\n };\n\n if (deletionData.wasActive.length > 0) {\n await intentPlugin?.provides.intent.dispatch({\n action: NavigationAction.CLOSE,\n data: {\n activeParts: {\n main: deletionData.wasActive,\n sidebar: deletionData.wasActive,\n },\n },\n });\n }\n\n if (deletionData.parentCollection instanceof CollectionType) {\n [...deletionData.indices]\n .sort((a, b) => b - a)\n .forEach((index: number) => {\n if (index !== -1) {\n deletionData.parentCollection.objects.splice(index, 1);\n }\n });\n }\n\n deletionData.nestedObjectsList.flat().forEach((obj) => {\n space.db.remove(obj);\n });\n objects.forEach((obj) => space.db.remove(obj));\n\n const undoMessageKey = objects.some((obj) => obj instanceof CollectionType)\n ? 'collection deleted label'\n : objects.length > 1\n ? 'objects deleted label'\n : 'object deleted label';\n\n return {\n data: true,\n undoable: {\n // TODO(ZaymonFC): Pluralize if more than one object.\n message: translations[0]['en-US'][SPACE_PLUGIN][undoMessageKey],\n data: deletionData,\n },\n };\n } else {\n const undoData = intent.data;\n if (\n undoData?.objects?.length &&\n undoData.objects.every(isEchoObject) &&\n undoData.parentCollection instanceof CollectionType\n ) {\n // Restore the object to the space.\n const restoredObjects = undoData.objects.map((obj: Expando) => space.db.add(obj));\n\n // Restore nested objects to the space.\n undoData.nestedObjectsList.flat().forEach((obj: Expando) => {\n space.db.add(obj);\n });\n\n undoData.indices.forEach((index: number, i: number) => {\n if (index !== -1) {\n undoData.parentCollection.objects.splice(index, 0, restoredObjects[i] as Expando);\n }\n });\n\n if (undoData.wasActive.length > 0) {\n await intentPlugin?.provides.intent.dispatch({\n action: NavigationAction.OPEN,\n data: { activeParts: { main: undoData.wasActive } },\n });\n }\n\n return { data: true };\n }\n\n return { data: false };\n }\n }\n\n case SpaceAction.RENAME_OBJECT: {\n const object = intent.data?.object ?? intent.data?.result;\n const caller = intent.data?.caller;\n if (isReactiveObject(object) && caller) {\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'popover',\n anchorId: `dxos.org/ui/${caller}/${fullyQualifiedId(object)}`,\n component: 'dxos.org/plugin/space/RenameObjectPopover',\n subject: object,\n },\n },\n ],\n ],\n };\n }\n break;\n }\n\n case SpaceAction.DUPLICATE_OBJECT: {\n const originalObject = intent.data?.object ?? intent.data?.result;\n const resolve = resolvePlugin(plugins, parseMetadataResolverPlugin)?.provides.metadata.resolver;\n const space = isSpace(intent.data?.target) ? intent.data?.target : getSpace(intent.data?.target);\n if (!isEchoObject(originalObject) || !resolve || !space) {\n return;\n }\n\n const newObject = await cloneObject(originalObject, resolve, space);\n return {\n intents: [\n [{ action: SpaceAction.ADD_OBJECT, data: { object: newObject, target: intent.data?.target } }],\n ],\n };\n }\n\n case SpaceAction.TOGGLE_HIDDEN: {\n settings.values.showHidden = intent.data?.state ?? !settings.values.showHidden;\n return { data: true };\n }\n\n case CollectionAction.CREATE: {\n const collection = create(CollectionType, {\n name: intent.data?.name,\n objects: [],\n views: {},\n });\n\n return { data: collection };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CheckCircle, CircleDashed, CircleNotch } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { parseIntentPlugin, useResolvePlugin, parseNavigationPlugin, NavigationAction } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';\nimport { Button, Toast, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\n\nconst WAIT_FOR_OBJECT_TIMEOUT = 180e3; // 3 minutes\nconst TOAST_TIMEOUT = 240e3; // 4 minutes\n\nexport const AwaitingObject = ({ id }: { id: string }) => {\n const [open, setOpen] = useState(true);\n const [waiting, setWaiting] = useState(true);\n const [found, setFound] = useState(false);\n const { t } = useTranslation(SPACE_PLUGIN);\n const intentPlugin = useResolvePlugin(parseIntentPlugin);\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n\n const client = useClient();\n const objects = useQuery(client.spaces, Filter.all());\n\n useEffect(() => {\n if (!id) {\n return;\n }\n\n const timeout = setTimeout(() => {\n setWaiting(false);\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n () => clearTimeout(timeout);\n }, [id]);\n\n useEffect(() => {\n if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {\n setFound(true);\n\n if (navigationPlugin?.provides.location.active.solo?.[0].id === id) {\n setOpen(false);\n }\n }\n }, [id, objects, intentPlugin]);\n\n const handleClose = async () =>\n intentPlugin?.provides.intent.dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.WAIT_FOR_OBJECT,\n data: { id: undefined },\n });\n\n const handleNavigate = () => {\n void intentPlugin?.provides.intent.dispatch({\n action: NavigationAction.OPEN,\n data: { activeParts: { main: [id] } },\n });\n void handleClose();\n };\n\n return (\n <Toast.Root open={open} duration={TOAST_TIMEOUT} onOpenChange={setOpen}>\n <Toast.Body>\n <Toast.Title classNames='flex items-center gap-2'>\n {found ? (\n <>\n <CheckCircle className={getSize(5)} />\n <span>{t('found object label')}</span>\n </>\n ) : waiting ? (\n <>\n <CircleNotch className={mx(getSize(5), 'animate-spin')} />\n <span>{t('waiting for object label')}</span>\n </>\n ) : (\n <>\n <CircleDashed className={getSize(5)} />\n <span>{t('object not found label')}</span>\n </>\n )}\n </Toast.Title>\n <Toast.Description>\n {t(\n found\n ? 'found object description'\n : waiting\n ? 'waiting for object description'\n : 'object not found description',\n )}\n </Toast.Description>\n </Toast.Body>\n <Toast.Actions>\n {found ? (\n <>\n <Toast.Action altText={t('go to object alt')} asChild>\n <Button variant='primary' onClick={handleNavigate}>\n {t('go to object label')}\n </Button>\n </Toast.Action>\n <Toast.Close asChild>\n <Button onClick={handleClose}>{t('close label', { ns: 'appkit' })}</Button>\n </Toast.Close>\n </>\n ) : (\n <Toast.Close asChild>\n <Button onClick={handleClose}>{t(waiting ? 'close label' : 'confirm label', { ns: 'appkit' })}</Button>\n </Toast.Close>\n )}\n </Toast.Actions>\n </Toast.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useRef } from 'react';\n\nimport { type MetadataResolver, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { type AbstractTypedObject, getSpace, isReactiveObject, isSpace, useSpaces } from '@dxos/react-client/echo';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { CreateObjectPanel, type CreateObjectPanelProps } from './CreateObjectPanel';\nimport { SPACE_PLUGIN, SpaceAction } from '../../meta';\nimport { CollectionType } from '../../types';\n\nexport type CreateObjectDialogProps = Pick<CreateObjectPanelProps, 'schemas' | 'target' | 'typename' | 'name'> & {\n resolve?: MetadataResolver;\n navigableCollections?: boolean;\n};\n\nexport const CreateObjectDialog = ({\n schemas,\n target,\n typename,\n name,\n navigableCollections,\n resolve,\n}: CreateObjectDialogProps) => {\n const closeRef = useRef<HTMLButtonElement | null>(null);\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const spaces = useSpaces();\n const dispatch = useIntentDispatcher();\n\n const handleCreateObject = useCallback(\n async ({\n schema,\n target: _target,\n name,\n }: {\n schema: AbstractTypedObject;\n target: CreateObjectPanelProps['target'];\n name?: string;\n }) => {\n const target = isSpace(_target) ? (_target.properties[CollectionType.typename] as CollectionType) : _target;\n const createObjectAction = resolve?.(schema.typename)?.createObject;\n if (!createObjectAction || !target) {\n // TODO(wittjosiah): UI feedback.\n return;\n }\n\n // NOTE: Must close before navigating or attention won't follow object.\n closeRef.current?.click();\n\n const space = isSpace(target) ? target : getSpace(target);\n const result = await dispatch({ action: createObjectAction, data: { name, space } });\n const object = result?.data;\n if (isReactiveObject(object)) {\n await dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: { target, object },\n },\n ...(!(object instanceof CollectionType) || navigableCollections ? [{ action: NavigationAction.OPEN }] : []),\n ]);\n }\n },\n [dispatch, resolve],\n );\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title>{t('create object dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button ref={closeRef} density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div className='p-4'>\n <CreateObjectPanel\n schemas={schemas}\n spaces={spaces}\n target={target}\n typename={typename}\n name={name}\n defaultSpaceId={client.spaces.default.id}\n resolve={resolve}\n onCreateObject={handleCreateObject}\n />\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { type MetadataResolver } from '@dxos/app-framework';\nimport { type AbstractTypedObject, getObjectAnnotation, S } from '@dxos/echo-schema';\nimport { type SpaceId, type Space, isSpace } from '@dxos/react-client/echo';\nimport { Icon, IconButton, Input, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Form, InputHeader } from '@dxos/react-ui-form';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { nonNullable, type MaybePromise } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../../meta';\nimport { type CollectionType } from '../../types';\nimport { getSpaceDisplayName } from '../../util';\n\nexport type CreateObjectPanelProps = {\n schemas: AbstractTypedObject[];\n spaces: Space[];\n typename?: string;\n target?: Space | CollectionType;\n name?: string;\n defaultSpaceId?: SpaceId;\n resolve?: MetadataResolver;\n onCreateObject?: (params: {\n schema: AbstractTypedObject;\n target: Space | CollectionType;\n name?: string;\n }) => MaybePromise<void>;\n};\n\nexport const CreateObjectPanel = ({\n schemas,\n spaces,\n typename: initialTypename,\n target: initialTarget,\n name: initialName,\n defaultSpaceId,\n resolve,\n onCreateObject,\n}: CreateObjectPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [typename, setTypename] = useState<string | undefined>(initialTypename);\n const [target, setTarget] = useState<Space | CollectionType | undefined>(initialTarget);\n const schema = schemas.find((schema) => getObjectAnnotation(schema)?.typename === typename);\n const options = schemas.map(getObjectAnnotation).filter(nonNullable);\n\n const handleClearSchema = useCallback(() => setTypename(undefined), []);\n const handleClearTarget = useCallback(() => setTarget(undefined), []);\n\n const handleCreateObject = useCallback(\n async ({ name }: { name?: string }) => {\n if (!schema || !target) {\n return;\n }\n\n await onCreateObject?.({ schema, target, name });\n },\n [onCreateObject, schema, target],\n );\n\n // TODO(wittjosiah): All of these inputs should be rolled into a `Form` once it supports the necessary variants.\n const schemaInput = (\n <SearchList.Root label={t('schema input label')} classNames='flex flex-col grow overflow-hidden my-2 px-2'>\n <SearchList.Input\n autoFocus\n data-testid='create-object-form.schema-input'\n placeholder={t('schema input placeholder')}\n classNames='px-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {options.map((option) => (\n <SearchList.Item\n key={option.typename}\n value={t('typename label', { ns: option.typename, defaultValue: option.typename })}\n onSelect={() => setTypename(option.typename)}\n classNames='flex items-center gap-2'\n >\n <span className='flex gap-2 items-center grow truncate'>\n <Icon icon={resolve?.(option.typename).icon ?? 'ph--placeholder--regular'} size={5} />\n {t('typename label', { ns: option.typename, defaultValue: option.typename })}\n </span>\n </SearchList.Item>\n ))}\n </SearchList.Content>\n </SearchList.Root>\n );\n\n const spaceInput = (\n <SearchList.Root label={t('space input label')} classNames='flex flex-col grow overflow-hidden my-2 px-2'>\n <SearchList.Input\n autoFocus\n data-testid='create-object-form.space-input'\n placeholder={t('space input placeholder')}\n classNames='px-1 my-2'\n />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {spaces.map((space) => (\n <SearchList.Item\n key={space.id}\n value={toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}\n onSelect={() => setTarget(space)}\n classNames='flex items-center gap-2'\n >\n <span className='grow truncate'>\n {toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}\n </span>\n </SearchList.Item>\n ))}\n </SearchList.Content>\n </SearchList.Root>\n );\n\n const form = (\n <Form\n autoFocus\n values={{ name: initialName }}\n schema={S.Struct({ name: S.optional(S.String) })}\n testId='create-object-form'\n onSave={handleCreateObject}\n />\n );\n\n return (\n <div role='form' className='flex flex-col gap-2'>\n {target && (\n <div role='none' className='px-2'>\n <Input.Root>\n <InputHeader>\n <Input.Label>\n {t(isSpace(target) ? 'creating in space label' : 'creating in collection label')}\n </Input.Label>\n </InputHeader>\n <div role='none' className='flex gap-2'>\n <Input.TextInput\n disabled\n value={\n isSpace(target)\n ? toLocalizedString(getSpaceDisplayName(target, { personal: target.id === defaultSpaceId }), t)\n : target.name || t('unnamed collection label')\n }\n />\n <IconButton iconOnly icon='ph--x--regular' label={t('clear input label')} onClick={handleClearTarget} />\n </div>\n </Input.Root>\n </div>\n )}\n {schema && (\n <div role='none' className='px-2'>\n <Input.Root>\n <InputHeader>\n <Input.Label>{t('creating object type label')}</Input.Label>\n </InputHeader>\n <div role='none' className='flex gap-2'>\n <Input.TextInput\n disabled\n value={t('typename label', { ns: schema.typename, defaultValue: schema.typename })}\n />\n <IconButton iconOnly icon='ph--x--regular' label={t('clear input label')} onClick={handleClearSchema} />\n </div>\n </Input.Root>\n </div>\n )}\n {!schema ? schemaInput : !target ? spaceInput : form}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IntentDispatcher, type MetadataResolver } from '@dxos/app-framework';\nimport { EXPANDO_TYPENAME, getObjectAnnotation, getTypename, type Expando } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { getSchema, isReactiveObject } from '@dxos/live-object';\nimport { Migrations } from '@dxos/migrations';\nimport {\n ACTION_GROUP_TYPE,\n ACTION_TYPE,\n cleanup,\n getGraph,\n memoize,\n type ActionData,\n type Graph,\n type InvokeParams,\n type Node,\n type NodeArg,\n} from '@dxos/plugin-graph';\nimport {\n Filter,\n fullyQualifiedId,\n getSpace,\n isEchoObject,\n isSpace,\n SpaceState,\n type Echo,\n type FilterSource,\n type Query,\n type QueryOptions,\n type ReactiveEchoObject,\n type Space,\n} from '@dxos/react-client/echo';\n\nimport { SPACE_PLUGIN, SpaceAction } from './meta';\nimport { CollectionType } from './types';\n\nexport const SPACES = `${SPACE_PLUGIN}-spaces`;\nexport const SPACE_TYPE = 'dxos.org/type/Space';\nexport const COMPOSER_SPACE_LOCK = 'dxos.org/plugin/space/lock';\n// TODO(wittjosiah): Remove.\nexport const SHARED = 'shared-spaces';\n\nconst EMPTY_ARRAY: never[] = [];\n\n/**\n *\n * @param spaceOrEcho\n * @param filter\n * @param options\n * @returns\n */\nexport const memoizeQuery = <T extends ReactiveEchoObject<any>>(\n spaceOrEcho?: Space | Echo,\n filter?: FilterSource<T>,\n options?: QueryOptions,\n): T[] => {\n const key = JSON.stringify({\n space: isSpace(spaceOrEcho) ? spaceOrEcho.id : undefined,\n filter: Filter.from(filter).toProto(),\n });\n\n const query = memoize(\n () =>\n isSpace(spaceOrEcho)\n ? spaceOrEcho.db.query(filter, options)\n : (spaceOrEcho?.query(filter, options) as Query<T> | undefined),\n key,\n );\n const unsubscribe = memoize(() => query?.subscribe(), key);\n cleanup(() => unsubscribe?.());\n\n return query?.objects ?? EMPTY_ARRAY;\n};\n\nexport const getSpaceDisplayName = (\n space: Space,\n { personal, namesCache = {} }: { personal?: boolean; namesCache?: Record<string, string> } = {},\n): string | [string, { ns: string }] => {\n return space.state.get() === SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0\n ? space.properties.name\n : namesCache[space.id]\n ? namesCache[space.id]\n : personal\n ? ['personal space label', { ns: SPACE_PLUGIN }]\n : ['unnamed space label', { ns: SPACE_PLUGIN }];\n};\n\nconst getCollectionGraphNodePartials = ({\n navigable,\n collection,\n space,\n resolve,\n}: {\n navigable: boolean;\n collection: CollectionType;\n space: Space;\n resolve: MetadataResolver;\n}) => {\n return {\n disabled: !navigable,\n acceptPersistenceClass: new Set(['echo']),\n acceptPersistenceKey: new Set([space.id]),\n role: 'branch',\n onRearrangeChildren: (nextOrder: unknown[]) => {\n // Change on disk.\n collection.objects = nextOrder.filter(isEchoObject);\n },\n onTransferStart: (child: Node<ReactiveEchoObject<any>>, index?: number) => {\n // TODO(wittjosiah): Support transfer between spaces.\n // const childSpace = getSpace(child.data);\n // if (space && childSpace && !childSpace.key.equals(space.key)) {\n // // Create clone of child and add to destination space.\n // const newObject = clone(child.data, {\n // // TODO(wittjosiah): This needs to be generalized and not hardcoded here.\n // additional: [\n // child.data.content,\n // ...(child.data.objects ?? []),\n // ...(child.data.objects ?? []).map((object: TypedObject) => object.content),\n // ],\n // });\n // space.db.add(newObject);\n // collection.objects.push(newObject);\n // } else {\n\n // Add child to destination collection.\n if (!collection.objects.includes(child.data)) {\n if (typeof index !== 'undefined') {\n collection.objects.splice(index, 0, child.data);\n } else {\n collection.objects.push(child.data);\n }\n }\n\n // }\n },\n onTransferEnd: (child: Node<ReactiveEchoObject<any>>, destination: Node) => {\n // Remove child from origin collection.\n const index = collection.objects.indexOf(child.data);\n if (index > -1) {\n collection.objects.splice(index, 1);\n }\n\n // TODO(wittjosiah): Support transfer between spaces.\n // const childSpace = getSpace(child.data);\n // const destinationSpace =\n // destination.data instanceof SpaceProxy ? destination.data : getSpace(destination.data);\n // if (destinationSpace && childSpace && !childSpace.key.equals(destinationSpace.key)) {\n // // Mark child as deleted in origin space.\n // childSpace.db.remove(child.data);\n // }\n },\n onCopy: async (child: Node<ReactiveEchoObject<any>>, index?: number) => {\n // Create clone of child and add to destination space.\n const newObject = await cloneObject(child.data, resolve, space);\n space.db.add(newObject);\n if (typeof index !== 'undefined') {\n collection.objects.splice(index, 0, newObject);\n } else {\n collection.objects.push(newObject);\n }\n },\n };\n};\n\nconst checkPendingMigration = (space: Space) => {\n return (\n space.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION ||\n (space.state.get() === SpaceState.SPACE_READY &&\n !!Migrations.versionProperty &&\n space.properties[Migrations.versionProperty] !== Migrations.targetVersion)\n );\n};\n\nexport const constructSpaceNode = ({\n space,\n navigable = false,\n personal,\n namesCache,\n resolve,\n}: {\n space: Space;\n navigable?: boolean;\n personal?: boolean;\n namesCache?: Record<string, string>;\n resolve: MetadataResolver;\n}) => {\n const hasPendingMigration = checkPendingMigration(space);\n const collection = space.state.get() === SpaceState.SPACE_READY && space.properties[CollectionType.typename];\n const partials =\n space.state.get() === SpaceState.SPACE_READY && collection instanceof CollectionType\n ? getCollectionGraphNodePartials({ collection, space, resolve, navigable })\n : {};\n\n return {\n id: space.id,\n type: SPACE_TYPE,\n cacheable: ['label', 'icon', 'role'],\n data: space,\n properties: {\n ...partials,\n label: getSpaceDisplayName(space, { personal, namesCache }),\n description: space.state.get() === SpaceState.SPACE_READY && space.properties.description,\n icon: 'ph--planet--regular',\n disabled: !navigable || space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,\n testId: 'spacePlugin.space',\n },\n };\n};\n\nexport const constructSpaceActions = ({\n space,\n dispatch,\n personal,\n migrating,\n}: {\n space: Space;\n dispatch: IntentDispatcher;\n personal?: boolean;\n migrating?: boolean;\n}) => {\n const state = space.state.get();\n const hasPendingMigration = checkPendingMigration(space);\n const getId = (id: string) => `${id}/${space.id}`;\n const actions: NodeArg<ActionData>[] = [];\n\n if (hasPendingMigration) {\n actions.push({\n id: getId(SpaceAction.MIGRATE),\n type: ACTION_GROUP_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.MIGRATE, data: { space } });\n },\n properties: {\n label: ['migrate space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--database--regular',\n disposition: 'toolbar',\n disabled: migrating || Migrations.running(space),\n },\n });\n }\n\n if (state === SpaceState.SPACE_READY && !hasPendingMigration) {\n const locked = space.properties[COMPOSER_SPACE_LOCK];\n actions.push(\n {\n id: getId(SpaceAction.OPEN_CREATE_OBJECT),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.OPEN_CREATE_OBJECT, data: { target: space } });\n },\n properties: {\n label: ['create object in space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n testId: 'spacePlugin.createObject',\n },\n },\n {\n id: getId(SpaceAction.SHARE),\n type: ACTION_TYPE,\n data: async () => {\n if (locked) {\n return;\n }\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.SHARE, data: { space } });\n },\n properties: {\n label: ['share space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--users--regular',\n disabled: locked,\n keyBinding: {\n macos: 'meta+.',\n windows: 'alt+.',\n },\n },\n },\n {\n id: locked ? getId(SpaceAction.UNLOCK) : getId(SpaceAction.LOCK),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: locked ? SpaceAction.UNLOCK : SpaceAction.LOCK,\n data: { space },\n });\n },\n properties: {\n label: [locked ? 'unlock space label' : 'lock space label', { ns: SPACE_PLUGIN }],\n icon: locked ? 'ph--lock-simple-open--regular' : 'ph--lock-simple--regular',\n },\n },\n {\n id: getId(SpaceAction.RENAME),\n type: ACTION_TYPE,\n data: async (params: InvokeParams) => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.RENAME, data: { space, ...params } });\n },\n properties: {\n label: ['rename space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--pencil-simple-line--regular',\n keyBinding: {\n macos: 'shift+F6',\n windows: 'shift+F6',\n },\n },\n },\n {\n id: getId(SpaceAction.OPEN_SETTINGS),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.OPEN_SETTINGS, data: { space } });\n },\n properties: {\n label: ['open space settings label', { ns: SPACE_PLUGIN }],\n icon: 'ph--gear--regular',\n },\n },\n );\n }\n\n // TODO(wittjosiah): Consider moving close space into the space settings dialog.\n if (state !== SpaceState.SPACE_INACTIVE && !hasPendingMigration) {\n actions.push({\n id: getId(SpaceAction.CLOSE),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.CLOSE, data: { space } });\n },\n properties: {\n label: ['close space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--x--regular',\n disabled: personal,\n },\n });\n }\n\n if (state === SpaceState.SPACE_INACTIVE) {\n actions.push({\n id: getId(SpaceAction.OPEN),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.OPEN, data: { space } });\n },\n properties: {\n label: ['open space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--clock-counter-clockwise--regular',\n disposition: 'toolbar',\n },\n });\n }\n\n return actions;\n};\n\nexport const createObjectNode = ({\n object,\n space,\n navigable = false,\n resolve,\n}: {\n object: ReactiveEchoObject<any>;\n space: Space;\n navigable?: boolean;\n resolve: MetadataResolver;\n}) => {\n const type = getTypename(object);\n if (!type) {\n return undefined;\n }\n\n const metadata = resolve(type);\n if (Object.keys(metadata).length === 0) {\n return undefined;\n }\n\n const partials =\n object instanceof CollectionType\n ? getCollectionGraphNodePartials({ collection: object, space, resolve, navigable })\n : metadata.graphProps;\n\n return {\n id: fullyQualifiedId(object),\n type,\n cacheable: ['label', 'icon', 'role'],\n data: object,\n properties: {\n ...partials,\n label: metadata.label?.(object) ||\n object.name ||\n metadata.placeholder || ['unnamed object label', { ns: SPACE_PLUGIN }],\n icon: metadata.icon ?? 'ph--placeholder--regular',\n testId: 'spacePlugin.object',\n persistenceClass: 'echo',\n persistenceKey: space?.id,\n },\n };\n};\n\nexport const constructObjectActions = ({\n node,\n dispatch,\n}: {\n node: Node<ReactiveEchoObject<any>>;\n dispatch: IntentDispatcher;\n}) => {\n const object = node.data;\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<ActionData>[] = [\n ...(object instanceof CollectionType\n ? [\n {\n id: getId(SpaceAction.ADD_OBJECT),\n type: ACTION_TYPE,\n data: async () => {\n await dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.OPEN_CREATE_OBJECT,\n data: { target: object },\n });\n },\n properties: {\n label: ['create object in collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n testId: 'spacePlugin.createObject',\n },\n },\n ]\n : []),\n {\n id: getId(SpaceAction.RENAME_OBJECT),\n type: ACTION_TYPE,\n data: async (params: InvokeParams) => {\n await dispatch({\n action: SpaceAction.RENAME_OBJECT,\n data: { object, ...params },\n });\n },\n properties: {\n label: [\n object instanceof CollectionType ? 'rename collection label' : 'rename object label',\n { ns: SPACE_PLUGIN },\n ],\n icon: 'ph--pencil-simple-line--regular',\n // TODO(wittjosiah): Doesn't work.\n // keyBinding: 'shift+F6',\n testId: 'spacePlugin.renameObject',\n },\n },\n {\n id: getId(SpaceAction.REMOVE_OBJECTS),\n type: ACTION_TYPE,\n data: async () => {\n const graph = getGraph(node);\n const collection = graph\n .nodes(node, { relation: 'inbound' })\n .find(({ data }) => data instanceof CollectionType)?.data;\n await dispatch([\n {\n action: SpaceAction.REMOVE_OBJECTS,\n data: { objects: [object], collection },\n },\n ]);\n },\n properties: {\n label: [\n object instanceof CollectionType ? 'delete collection label' : 'delete object label',\n { ns: SPACE_PLUGIN },\n ],\n icon: 'ph--trash--regular',\n keyBinding: object instanceof CollectionType ? undefined : 'shift+meta+Backspace',\n testId: 'spacePlugin.deleteObject',\n },\n },\n {\n id: getId('copy-link'),\n type: ACTION_TYPE,\n data: async () => {\n const url = `${window.location.origin}/${fullyQualifiedId(object)}`;\n await navigator.clipboard.writeText(url);\n },\n properties: {\n label: ['copy link label', { ns: SPACE_PLUGIN }],\n icon: 'ph--link--regular',\n testId: 'spacePlugin.copyLink',\n },\n },\n ];\n\n return actions;\n};\n\n/**\n * @deprecated\n */\nexport const getActiveSpace = (graph: Graph, active?: string) => {\n if (!active) {\n return;\n }\n\n const node = graph.findNode(active);\n if (!node || !isReactiveObject(node.data)) {\n return;\n }\n\n return getSpace(node.data);\n};\n\n/**\n * @deprecated This is a temporary solution.\n */\nexport const getNestedObjects = async (\n object: ReactiveEchoObject<any>,\n resolve: MetadataResolver,\n): Promise<ReactiveEchoObject<any>[]> => {\n const type = getTypename(object);\n if (!type) {\n return [];\n }\n\n const metadata = resolve(type);\n const loadReferences = metadata.loadReferences;\n if (typeof loadReferences !== 'function') {\n return [];\n }\n\n const objects: ReactiveEchoObject<any>[] = await loadReferences(object);\n const nested = await Promise.all(objects.map((object) => getNestedObjects(object, resolve)));\n return [...objects, ...nested.flat()];\n};\n\n/**\n * @deprecated Workaround for ECHO not supporting clone.\n */\n// TODO(burdon): Remove.\nexport const cloneObject = async (object: Expando, resolve: MetadataResolver, newSpace: Space): Promise<Expando> => {\n const schema = getSchema(object);\n const typename = schema ? getObjectAnnotation(schema)?.typename ?? EXPANDO_TYPENAME : EXPANDO_TYPENAME;\n const metadata = resolve(typename);\n const serializer = metadata.serializer;\n invariant(serializer, `No serializer for type: ${typename}`);\n const content = await serializer.serialize({ object });\n return serializer.deserialize({ content, space: newSpace, newId: true });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useRef } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { type S } from '@dxos/echo-schema';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\nimport { Form } from '@dxos/react-ui-form';\n\nimport { SPACE_PLUGIN, SpaceAction } from '../../meta';\nimport { SpaceForm } from '../../types';\n\ntype FormValues = S.Schema.Type<typeof SpaceForm>;\nconst initialValues: FormValues = { edgeReplication: true };\n\nexport const CreateSpaceDialog = () => {\n const closeRef = useRef<HTMLButtonElement | null>(null);\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n\n const handleCreateSpace = useCallback(\n async (data: FormValues) => {\n const result = await dispatch({\n action: SpaceAction.CREATE,\n data,\n });\n const target = result?.data.space;\n if (target) {\n await dispatch({\n action: SpaceAction.OPEN_CREATE_OBJECT,\n data: { target },\n });\n }\n },\n [dispatch],\n );\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title>{t('create space dialog title')}</Dialog.Title>\n <Dialog.Close asChild>\n <Button ref={closeRef} density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <div className='p-4'>\n <Form testId='create-space-form' values={initialValues} schema={SpaceForm} onSave={handleCreateSpace} />\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { CollectionType } from '../types';\n\nexport const CollectionMain = ({ collection }: { collection: CollectionType }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <div\n role='none'\n className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}\n data-testid='composer.firstRunMessage'\n >\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'border border-dashed border-neutral-400/50 rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words',\n )}\n >\n {collection.name ?? t('unnamed collection label')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { CollectionType } from '../types';\n\nexport const CollectionSection = ({ collection }: { collection: CollectionType }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n // TODO(wittjosiah): Better placeholder.\n return (\n <div className='min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center'>\n <span className='truncate'>{collection.name ?? t('unnamed collection label')}</span>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type ReactiveEchoObject } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport type DefaultObjectSettingsProps = {\n object: ReactiveEchoObject<any>;\n};\n\nexport const DefaultObjectSettings = ({ object }: DefaultObjectSettingsProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n // TODO(burdon): Standardize forms.\n return (\n <div role='form' className='flex flex-col w-full p-2 gap-1'>\n <Input.Root>\n <Input.Label>{t('name label')}</Input.Label>\n <Input.TextInput\n placeholder={t('name placeholder')}\n value={object.name ?? ''}\n onChange={(event) => {\n object.name = event.target.value;\n }}\n />\n </Input.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { useSpaces } from '@dxos/react-client/echo';\nimport { type InvitationResult } from '@dxos/react-client/invitations';\nimport { Dialog, useTranslation } from '@dxos/react-ui';\nimport { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport type JoinDialogProps = JoinPanelProps & {\n navigableCollections?: boolean;\n};\n\nexport const JoinDialog = ({ navigableCollections, onDone, ...props }: JoinDialogProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const spaces = useSpaces();\n const { graph } = useGraph();\n\n const handleDone = useCallback(\n async (result: InvitationResult | null) => {\n if (result?.spaceKey) {\n await Promise.all([\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'toast',\n subject: {\n id: `${SPACE_PLUGIN}/join-success`,\n duration: 5_000,\n title: t('join success label'),\n closeLabel: t('dismiss label'),\n },\n },\n }),\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n state: false,\n },\n }),\n ]);\n }\n\n const space = spaces.find(({ key }) => result?.spaceKey?.equals(key));\n // TODO(wittjosiah): If navigableCollections is false and there's no target,\n // should try to navigate to the first object of the space replicates.\n // Potentially this could also be done on the inviters side to ensure there's always a target.\n const target = result?.target || (navigableCollections ? space?.id : undefined);\n if (target) {\n // Wait for up to 1 second before navigating to the target node.\n // If the target has not yet replicated, this will trigger a loading toast.\n await graph.waitForPath({ target }).catch(() => {});\n await Promise.all([\n dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: { main: [target] },\n },\n }),\n dispatch({\n action: NavigationAction.EXPOSE,\n data: {\n id: target,\n },\n }),\n ]);\n }\n\n await onDone?.(result);\n\n if (space) {\n await dispatch({\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.join',\n properties: {\n spaceId: space.id,\n },\n },\n });\n }\n },\n [dispatch, spaces],\n );\n\n return (\n <Dialog.Content>\n <JoinPanel\n {...props}\n exitActionParent={<Dialog.Close asChild />}\n doneActionParent={<Dialog.Close asChild />}\n onDone={handleDone}\n />\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Planet } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { type ReactiveEchoObject, getSpace } from '@dxos/client/echo';\nimport { useClient } from '@dxos/react-client';\nimport { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { getSpaceDisplayName } from '../util';\n\nexport const MenuFooter = ({ object }: { object: ReactiveEchoObject<any> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = getSpace(object);\n const spaceName = space ? getSpaceDisplayName(space, { personal: client.spaces.default === space }) : '';\n return space ? (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.GroupLabel>{t('menu footer label')}</DropdownMenu.GroupLabel>\n <dl className='pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2'>\n <dt className='uppercase text-[.75em] tracking-wide font-medium mbs-px self-start'>{t('location label')}</dt>\n <dd className='line-clamp-3'>\n <Planet className='inline-block mie-1' />\n {toLocalizedString(spaceName, t)}\n </dd>\n </dl>\n </>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowsCounterClockwise, CheckCircle, Warning } from '@phosphor-icons/react';\nimport React, { useEffect, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { type EchoDatabase } from '@dxos/react-client/echo';\nimport { Tooltip, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx, staticPlaceholderText, warningText } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nenum Status {\n PERSISTED_LOCALLY = 0,\n PENDING = 1,\n ERROR = 2,\n}\n\n// TODO(zan): This now has no usages. Remove it?\nexport const PersistenceStatus = ({ db }: { db: EchoDatabase }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [displayMessage, setDisplayMessage] = useState(false);\n const [status, naturalSetStatus] = useState<Status>(Status.PERSISTED_LOCALLY);\n const [prevStatus, setPrevStatus] = useState<Status>(Status.PERSISTED_LOCALLY);\n const _setStatus = debounce(naturalSetStatus, 500);\n\n // TODO(dmaretskyi): Fix this when we have save status for automerge.\n // useEffect(() => {\n // return db.pendingBatch.on(({ duration, error }) => {\n // if (error) {\n // setStatus(Status.ERROR);\n // } else if (duration === undefined) {\n // setStatus(Status.PENDING);\n // } else {\n // setStatus(Status.PERSISTED_LOCALLY);\n // }\n // });\n // }, [db]);\n\n useEffect(() => {\n // If this is changed outside the effect it's batched with setStatus and the following condition will never be true.\n setPrevStatus(status);\n\n if (prevStatus !== status && status === Status.PERSISTED_LOCALLY) {\n setDisplayMessage(true);\n const timeout = setTimeout(() => setDisplayMessage(false), 5000);\n return () => clearTimeout(timeout);\n }\n }, [status]); // `prevStatus` omitted from dependency array to prevent timeout from being reset.\n\n switch (status) {\n case Status.ERROR:\n return (\n <div className='flex items-center'>\n <Warning className={mx(getSize(4), 'me-1')} />\n <span className={mx('text-sm', warningText)}>{t('persistence error label')}</span>\n </div>\n );\n case Status.PENDING:\n return (\n <div className='flex items-center'>\n <ArrowsCounterClockwise className={mx(getSize(4), 'me-1')} />\n <span className={mx('text-sm', staticPlaceholderText)}>{t('persistence pending label')}</span>\n </div>\n );\n case Status.PERSISTED_LOCALLY:\n default:\n return (\n <Tooltip.Root delayDuration={400}>\n <Tooltip.Trigger role='status' className='flex items-center'>\n <CheckCircle className={mx(getSize(4), 'me-1')} />\n {displayMessage && (\n <span className={mx('text-sm', staticPlaceholderText)}>{t('persisted locally label')}</span>\n )}\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-10'>\n {t('persisted locally message')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const PopoverRenameObject = ({ object: obj }: { object: ReactiveObject<any> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const doneButton = useRef<HTMLButtonElement>(null);\n // TODO(wittjosiah): Use schema here.\n const object = obj as any;\n // TODO(burdon): Field should not be hardcoded field.\n const [name, setName] = useState(object.name || object.title || '');\n\n const handleDone = useCallback(() => {\n try {\n object.name = name;\n } catch {\n try {\n object.title = name;\n } catch (err) {\n log.error('Failed to rename object', { err });\n }\n }\n }, [object, name]);\n\n return (\n <div role='none' className='p-1 flex gap-2'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.Label srOnly>{t('object name label')}</Input.Label>\n <Input.TextInput\n placeholder={t('object title placeholder')}\n value={name}\n data-testid='spacePlugin.renameObject.input'\n onChange={({ target: { value } }) => setName(value)}\n onKeyDown={({ key }) => key === 'Enter' && doneButton.current?.click()}\n />\n </Input.Root>\n </div>\n <Popover.Close asChild>\n <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>\n {t('done label', { ns: 'os' })}\n </Button>\n </Popover.Close>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { Button, Input, Popover, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const PopoverRenameSpace = ({ space }: { space: Space }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const doneButton = useRef<HTMLButtonElement>(null);\n const [name, setName] = useState(space.properties.name ?? '');\n\n const handleDone = useCallback(() => {\n space.properties.name = name;\n }, [space, name]);\n\n // TODO(thure): Why does the input value need to be uncontrolled to work?\n return (\n <div role='none' className='p-1 flex gap-2'>\n <div role='none' className='flex-1'>\n <Input.Root>\n <Input.Label srOnly>{t('space name label')}</Input.Label>\n <Input.TextInput\n defaultValue={space.properties.name ?? ''}\n placeholder={t('unnamed space label')}\n onChange={({ target: { value } }) => setName(value)}\n // TODO(wittjosiah): Ideally this should access the popover context to close the popover.\n // Currently this is not possible because Radix does not expose the popover context.\n onKeyDown={({ key }) => key === 'Enter' && doneButton.current?.click()}\n />\n </Input.Root>\n </div>\n <Popover.Close asChild>\n <Button ref={doneButton} classNames='self-stretch' onClick={handleDone}>\n {t('done label', { ns: 'os' })}\n </Button>\n </Popover.Close>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { type Space } from '@dxos/react-client/echo';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN, SpaceAction } from '../meta';\n\nexport const ShareSpaceButton = ({ space }: { space: Space }) => {\n const dispatch = useIntentDispatcher();\n\n return <ShareSpaceButtonImpl onClick={() => dispatch({ action: SpaceAction.SHARE, data: { space } })} />;\n};\n\n// TODO(wittjosiah): Better way to name pure/impure components?\nexport const ShareSpaceButtonImpl = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <IconButton\n data-testid='spacePlugin.shareSpaceButton'\n icon='ph--users--regular'\n label={t('share space label')}\n onClick={onClick}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { usePlugin } from '@dxos/app-framework';\nimport { generateName } from '@dxos/display-name';\nimport { type Expando } from '@dxos/echo-schema';\nimport { PublicKey, useClient } from '@dxos/react-client';\nimport { getSpace, useMembers, type SpaceMember, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport {\n Avatar,\n AvatarGroup,\n AvatarGroupItem,\n type Size,\n type ThemedClassName,\n Tooltip,\n useTranslation,\n List,\n ListItem,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { AttentionGlyph, useAttention } from '@dxos/react-ui-attention';\nimport { ComplexMap, keyToFallback } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport type { ObjectViewerProps, SpacePluginProvides } from '../types';\n\n// TODO(thure): Get/derive these values from protocol\nconst REFRESH_INTERVAL = 5000;\nconst ACTIVITY_DURATION = 30_000;\n\n// TODO(thure): This is chiefly meant to satisfy TS & provide an empty map after `deepSignal` interactions.\nconst noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);\n\n// TODO(wittjosiah): Factor out?\nconst getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n\nexport const SpacePresence = ({ object, spaceKey }: { object: Expando; spaceKey?: PublicKey }) => {\n const spacePlugin = usePlugin<SpacePluginProvides>(SPACE_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = spaceKey ? client.spaces.get(spaceKey) : getSpace(object);\n const spaceMembers = useMembers(space?.key);\n\n const [_moment, setMoment] = useState(Date.now());\n\n // NOTE(thure): This is necessary so Presence updates without any underlying data updating.\n useEffect(() => {\n const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, []);\n\n const memberOnline = useCallback((member: SpaceMember) => member.presence === 1, []);\n const memberIsNotSelf = useCallback(\n (member: SpaceMember) => !identity?.identityKey.equals(member.identity.identityKey),\n [identity?.identityKey],\n );\n\n // TODO(thure): Could it be a smell to return early when there are interactions with `deepSignal` later, since it\n // prevents reactivity?\n if (!identity || !spacePlugin || !space) {\n return null;\n }\n\n const spaceState = spacePlugin.provides.space;\n const currentObjectViewers = spaceState.viewersByObject[fullyQualifiedId(object)] ?? noViewers;\n\n const membersForObject = spaceMembers\n .filter((member) => memberOnline(member) && memberIsNotSelf(member))\n .filter((member) => currentObjectViewers.has(member.identity.identityKey))\n .map((member) => {\n const objectView = currentObjectViewers.get(member.identity.identityKey);\n const lastSeen = objectView?.lastSeen ?? -Infinity;\n const currentlyAttended = objectView?.currentlyAttended ?? false;\n\n return {\n ...member,\n currentlyAttended,\n lastSeen,\n };\n })\n .toSorted((a, b) => a.lastSeen - b.lastSeen);\n\n return <FullPresence members={membersForObject} />;\n};\n\nexport type Member = SpaceMember & {\n /**\n * Last time a member was seen on this object.\n */\n lastSeen: number;\n currentlyAttended: boolean;\n};\n\nexport type MemberPresenceProps = ThemedClassName<{\n size?: Size;\n members?: Member[];\n showCount?: boolean;\n onMemberClick?: (member: Member) => void;\n}>;\n\nexport const FullPresence = (props: MemberPresenceProps) => {\n const { size = 9, onMemberClick } = props;\n const members = useDefaultValue(props.members, () => []);\n\n if (members.length === 0) {\n return null;\n }\n\n return (\n <AvatarGroup.Root size={size} classNames='mbs-2 mie-4' data-testid='spacePlugin.presence'>\n {members.slice(0, 3).map((member, i) => (\n <Tooltip.Root key={member.identity.identityKey.toHex()}>\n <Tooltip.Trigger>\n <PrensenceAvatar\n identity={member.identity}\n group\n match={member.currentlyAttended} // TODO(Zan): Match always true now we're showing 'members viewing current object'.\n index={members.length - i}\n onClick={() => onMemberClick?.(member)}\n />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n <span>{getName(member.identity)}</span>\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ))}\n\n {members.length > 3 && (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <AvatarGroupItem.Root status='inactive'>\n <Avatar.Frame style={{ zIndex: members.length - 4 }}>\n {/* TODO(wittjosiah): Make text fit. */}\n <Avatar.Fallback text={`+${members.length - 3}`} />\n </Avatar.Frame>\n </AvatarGroupItem.Root>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n <Tooltip.Arrow />\n <List classNames='max-h-56 overflow-y-auto'>\n {members.map((member) => (\n <ListItem.Root\n key={member.identity.identityKey.toHex()}\n classNames='flex gap-2 items-center cursor-pointer mbe-2'\n onClick={() => onMemberClick?.(member)}\n data-testid='identity-list-item'\n >\n {/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}\n <PrensenceAvatar identity={member.identity} showName match={member.currentlyAttended} />\n </ListItem.Root>\n ))}\n </List>\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </AvatarGroup.Root>\n );\n};\n\ntype PresenceAvatarProps = {\n identity: Identity;\n showName?: boolean;\n match?: boolean;\n group?: boolean;\n index?: number;\n onClick?: () => void;\n};\n\nconst PrensenceAvatar = ({ identity, showName, match, group, index, onClick }: PresenceAvatarProps) => {\n const Root = group ? AvatarGroupItem.Root : Avatar.Root;\n const status = match ? 'current' : 'active';\n const fallbackValue = keyToFallback(identity.identityKey);\n return (\n <Root status={status} hue={identity.profile?.data?.hue || fallbackValue.hue}>\n <Avatar.Frame\n data-testid='spacePlugin.presence.member'\n data-status={status}\n {...(index ? { style: { zIndex: index } } : {})}\n onClick={() => onClick?.()}\n >\n <Avatar.Fallback text={identity.profile?.data?.emoji || fallbackValue.emoji} />\n </Avatar.Frame>\n {showName && <Avatar.Label classNames='text-sm truncate pli-2'>{getName(identity)}</Avatar.Label>}\n </Root>\n );\n};\n\nexport const SmallPresenceLive = ({\n id,\n viewers,\n}: {\n id?: string;\n viewers?: ComplexMap<PublicKey, ObjectViewerProps>;\n}) => {\n const getActiveViewers = (viewers: ComplexMap<PublicKey, ObjectViewerProps>): ObjectViewerProps[] => {\n const moment = Date.now();\n return Array.from(viewers.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION);\n };\n\n const [activeViewers, setActiveViewers] = useState(viewers ? getActiveViewers(viewers) : []);\n\n useEffect(() => {\n if (viewers) {\n setActiveViewers(getActiveViewers(viewers));\n const interval = setInterval(() => {\n setActiveViewers(getActiveViewers(viewers));\n }, REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }\n }, [viewers]);\n\n return <SmallPresence id={id} count={activeViewers.length} />;\n};\n\nexport const SmallPresence = ({ id, count }: { id?: string; count: number }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const { hasAttention, isAncestor, isRelated } = useAttention(id);\n const attention = hasAttention || isAncestor || isRelated;\n\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(wittjosiah): Don't depend on data attribute just pass prop to AttentionGlyph. */}\n <div role='none' className='flex' data-attention={attention}>\n <AttentionGlyph presence={count > 1 ? 'many' : count === 1 ? 'one' : 'none'} classNames='self-center mie-1' />\n </div>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom' classNames='z-[70]'>\n <span>{t('presence label', { count })}</span>\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\nimport { type SpaceSettingsProps } from '../types';\n\nexport const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n\n return (\n <>\n <DeprecatedFormInput label={t('show hidden spaces label')}>\n <Input.Switch\n checked={settings.showHidden}\n onCheckedChange={(checked) =>\n dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.TOGGLE_HIDDEN,\n data: { state: !!checked },\n })\n }\n />\n </DeprecatedFormInput>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Button, Clipboard, Dialog, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsRootProps, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { SpacePanel, type SpacePanelProps } from '@dxos/shell/react';\n\nimport { SpaceSettingsPanel, type SpaceSettingsPanelProps } from './SpaceSettingsPanel';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { COMPOSER_SPACE_LOCK, getSpaceDisplayName } from '../../util';\n\nexport type SpaceSettingsTab = 'members' | 'settings';\n\nexport type SpaceSettingsDialogProps = {\n initialTab?: SpaceSettingsTab;\n namesCache?: Record<string, string>;\n} & SpaceSettingsPanelProps &\n Pick<SpacePanelProps, 'createInvitationUrl' | 'target'>;\n\nexport const SpaceSettingsDialog = ({\n space,\n target,\n createInvitationUrl,\n initialTab = 'members',\n namesCache,\n}: SpaceSettingsDialogProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n const [selected, setSelected] = useState<SpaceSettingsTab>(initialTab);\n const locked = space.properties[COMPOSER_SPACE_LOCK];\n const name = getSpaceDisplayName(space, { personal: client.spaces.default === space, namesCache });\n\n return (\n // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.\n // Consider factoring it out to the tabs package.\n <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <Icon\n icon='ph--caret-left--regular'\n size={4}\n classNames={['@md:hidden', tabsActivePart === 'list' && 'invisible']}\n />\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {toLocalizedString(name, t)}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n </Dialog.Close>\n </div>\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={setSelected as TabsRootProps['onValueChange']}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator'>\n <Tabs.Tablist classNames='flex flex-col max-bs-none min-is-[200px] gap-4 overflow-y-auto'>\n <div role='none' className='flex flex-col ml-1'>\n <Tabs.Tab value='settings'>{t('settings tab label')}</Tabs.Tab>\n <Tabs.Tab value='members' disabled={locked}>\n {t('members tab label')}\n </Tabs.Tab>\n </div>\n </Tabs.Tablist>\n </div>\n\n <Tabs.Tabpanel value='settings' classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <SpaceSettingsPanel space={space} />\n </Tabs.Tabpanel>\n\n {/* TODO(wittjosiah): Weird focus ring when tabpanel is focused. */}\n <Tabs.Tabpanel value='members' classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Clipboard.Provider>\n <SpacePanel space={space} hideHeading target={target} createInvitationUrl={createInvitationUrl} />\n </Clipboard.Provider>\n </Tabs.Tabpanel>\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { SPACE_PLUGIN } from '../../meta';\n\nexport type SpaceSettingsPanelProps = {\n space: Space;\n};\n\nexport const SpaceSettingsPanel = ({ space }: SpaceSettingsPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n const client = useClient();\n const edgeEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.echoReplicator);\n\n const [edgeReplication, setEdgeReplication] = useState(\n space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED,\n );\n const toggleEdgeReplication = useCallback(\n async (next: boolean) => {\n setEdgeReplication(next);\n await space?.internal\n .setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED)\n .catch((err) => {\n log.catch(err);\n setEdgeReplication(!next);\n });\n },\n [space],\n );\n\n return (\n <div role='form' className='flex flex-col'>\n <DeprecatedFormInput label={t('name label')}>\n <Input.TextInput\n placeholder={t('unnamed space label')}\n value={space.properties.name ?? ''}\n onChange={(event) => {\n space.properties.name = event.target.value;\n }}\n />\n </DeprecatedFormInput>\n {edgeEnabled && (\n <DeprecatedFormInput label={t('edge replication label')}>\n <Input.Switch checked={edgeReplication} onCheckedChange={toggleEdgeReplication} />\n </DeprecatedFormInput>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type CSSProperties, useEffect, useMemo, useState } from 'react';\n\nimport { QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Icon, useTranslation } from '@dxos/react-ui';\n\nimport { useSpaceSyncState } from './sync-state';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst useEdgeStatus = (): QueryEdgeStatusResponse.EdgeStatus => {\n const [status, setStatus] = useState(QueryEdgeStatusResponse.EdgeStatus.NOT_CONNECTED);\n const client = useClient();\n\n useEffect(() => {\n client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status }) => {\n setStatus(status);\n });\n }, [client]);\n\n return status;\n};\n\nexport const InlineSyncStatus = ({ space }: { space: Space }) => {\n const connectedToEdge = useEdgeStatus() === QueryEdgeStatusResponse.EdgeStatus.CONNECTED;\n // TODO(wittjosiah): This is not reactive.\n const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;\n const syncState = useSpaceSyncState(space);\n if (!connectedToEdge || !edgeSyncEnabled || !syncState || syncState.missingOnLocal === 0) {\n return null;\n }\n\n return <InlineSyncStatusIndicator />;\n};\n\nexport const InlineSyncStatusIndicator = () => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const animationProps = useMemo<CSSProperties>(\n () => ({\n // Synchronize animations.\n animationDelay: `-${Date.now() % 2_000}ms`,\n }),\n [],\n );\n\n return (\n <div role='status' aria-label={t('syncing message')} className='flex items-center'>\n <Icon\n icon='ph--circle-notch--regular'\n size={3}\n style={animationProps}\n classNames='text-subdued animate-[spin_2s_linear_infinite]'\n />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space, type SpaceId, type SpaceSyncState } from '@dxos/client/echo';\nimport { Context } from '@dxos/context';\nimport { EdgeService } from '@dxos/protocols';\nimport { useClient } from '@dxos/react-client';\n\nexport type Progress = { count: number; total: number };\n\nexport type PeerSyncState = Omit<SpaceSyncState.PeerState, 'peerId'>;\n\nexport type SpaceSyncStateMap = Record<SpaceId, PeerSyncState>;\n\nexport const createEmptyEdgeSyncState = (): PeerSyncState => ({\n missingOnLocal: 0,\n missingOnRemote: 0,\n localDocumentCount: 0,\n remoteDocumentCount: 0,\n differentDocuments: 0,\n});\n\nexport const getSyncSummary = (syncMap: SpaceSyncStateMap): PeerSyncState => {\n return Object.entries(syncMap).reduce<PeerSyncState>((summary, [_spaceId, peerState]) => {\n summary.missingOnLocal += peerState.missingOnLocal;\n summary.missingOnRemote += peerState.missingOnRemote;\n summary.localDocumentCount += peerState.localDocumentCount;\n summary.remoteDocumentCount += peerState.remoteDocumentCount;\n summary.differentDocuments += peerState.differentDocuments;\n return summary;\n }, createEmptyEdgeSyncState());\n};\n\nconst isEdgePeerId = (peerId: string, spaceId: SpaceId) =>\n peerId.startsWith(`${EdgeService.AUTOMERGE_REPLICATOR}:${spaceId}`);\n\n/**\n * Hook Subscribes to sync state for each space.\n */\nexport const useSyncState = (): SpaceSyncStateMap => {\n const client = useClient();\n const [spaceState, setSpaceState] = useState<SpaceSyncStateMap>({});\n\n useEffect(() => {\n const ctx = new Context();\n const createSubscriptions = (spaces: Space[]) => {\n for (const space of spaces) {\n if (spaceState[space.id]) {\n continue;\n }\n\n ctx.onDispose(\n space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {\n const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));\n if (syncState) {\n setSpaceState((spaceState) => ({ ...spaceState, [space.id]: syncState }));\n }\n }),\n );\n }\n };\n\n createSubscriptions(client.spaces.get());\n client.spaces.subscribe((spaces) => {\n createSubscriptions(spaces);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [client]);\n\n return spaceState;\n};\n\n/**\n * Hook Subscribes to sync state for a single space.\n */\n// TODO(wittjosiah): Reconcile w/ useSyncState.\nexport const useSpaceSyncState = (space: Space): PeerSyncState | undefined => {\n const [spaceState, setSpaceState] = useState<PeerSyncState>();\n\n useEffect(() => {\n const ctx = new Context();\n space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {\n const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));\n if (syncState) {\n setSpaceState(syncState);\n }\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [space]);\n\n return spaceState;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { useClient } from '@dxos/react-client';\nimport { type SpaceId } from '@dxos/react-client/echo';\nimport { Icon, Input, Popover, useTranslation } from '@dxos/react-ui';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SpaceRowContainer, SYNC_STALLED_TIMEOUT } from './Space';\nimport { createClientSaveTracker } from './save-tracker';\nimport { getIcon, getStatus } from './status';\nimport { type PeerSyncState, type SpaceSyncStateMap, getSyncSummary, useSyncState } from './sync-state';\nimport { SPACE_PLUGIN } from '../../meta';\n\nexport const SyncStatus = () => {\n const client = useClient();\n const state = useSyncState();\n const [saved, setSaved] = useState(true);\n\n useEffect(() => {\n return createClientSaveTracker(client, (state) => {\n setSaved(state === 'saved');\n });\n }, []);\n\n return <SyncStatusIndicator state={state} saved={saved} />;\n};\n\nexport const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: Boolean }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const summary = getSyncSummary(state);\n const offline = Object.values(state).length === 0;\n const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;\n const needsToDownload = summary.differentDocuments > 0 || summary.missingOnLocal > 0;\n const status = getStatus({ offline, saved, needsToUpload, needsToDownload });\n\n const [classNames, setClassNames] = useState<string>();\n useEffect(() => {\n setClassNames(undefined);\n if (offline || (!needsToUpload && !needsToDownload)) {\n return;\n }\n\n const t = setTimeout(() => {\n // TODO(wittjosiah): Use semantic color tokens.\n setClassNames('text-orange-500');\n }, SYNC_STALLED_TIMEOUT);\n return () => clearTimeout(t);\n }, [offline, needsToUpload, needsToDownload]);\n\n const title = t(`${status} label`);\n const icon = <Icon icon={getIcon(status)} size={4} classNames={classNames} />;\n\n if (offline) {\n return <StatusBar.Item title={title}>{icon}</StatusBar.Item>;\n } else {\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <StatusBar.Button title={title}>{icon}</StatusBar.Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content sideOffset={16}>\n <SyncStatusDetail state={state} summary={summary} debug={false} />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n }\n};\n\nexport type SyncStatusDetailProps = ThemedClassName<{\n state: SpaceSyncStateMap;\n summary: PeerSyncState;\n debug?: boolean;\n}>;\n\n// TODO(wittjosiah): This currently does not show `differentDocuments` at all.\nexport const SyncStatusDetail = ({ classNames, state, summary, debug }: SyncStatusDetailProps) => {\n const [showAll, setShowAll] = useState(false);\n const { t } = useTranslation(SPACE_PLUGIN);\n const entries = Object.entries(state)\n .filter(([_, value]) => showAll || value.missingOnLocal + value.missingOnRemote > 0)\n .toSorted(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n\n const handleCheckedChange = useCallback((state: boolean) => setShowAll(state), [setShowAll]);\n\n // TODO(burdon): Normalize to max document count?\n return (\n <div className={mx('flex flex-col gap-3 p-2 text-xs min-w-96', classNames)}>\n <div role='none' className='flex items-center'>\n <h1 className='flex-1'>{t('sync status title')}</h1>\n <div className='flex items-center gap-2'>\n <Input.Root>\n <Input.Label classNames='text-xs'>{t('show all label')}</Input.Label>\n <Input.Checkbox checked={showAll} onCheckedChange={handleCheckedChange} />\n </Input.Root>\n </div>\n </div>\n <div className='flex flex-col gap-2'>\n {entries.length === 0 && (\n <div role='none' className='flex justify-center'>\n {/* TODO(wittjosiah): This text should be updated once status includes different documents. */}\n {t('no sync status label')}\n </div>\n )}\n {entries.map(([spaceId, state]) => (\n <SpaceRowContainer key={spaceId} spaceId={spaceId as SpaceId} state={state} />\n ))}\n </div>\n {debug && <SyntaxHighlighter language='json'>{JSON.stringify(summary, null, 2)}</SyntaxHighlighter>}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type HTMLAttributes, useEffect, useState } from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { type SpaceId, useSpace } from '@dxos/react-client/echo';\nimport { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type Progress, type PeerSyncState } from './sync-state';\nimport { SPACE_PLUGIN } from '../../meta';\nimport { getSpaceDisplayName } from '../../util';\n\nexport const SYNC_STALLED_TIMEOUT = 5_000;\n\n// TODO(wittjosiah): Define sematic color tokens.\nconst styles = {\n barBg: 'bg-neutral-50 dark:bg-green-900 text-black',\n barFg: 'bg-neutral-100 bg-green-500',\n barHover: 'dark:hover:bg-green-500',\n};\n\nconst useActive = (count: number) => {\n const [current, setCurrent] = useState(count);\n const [active, setActive] = useState(false);\n useEffect(() => {\n let t: NodeJS.Timeout | undefined;\n if (count !== current) {\n setActive(true);\n setCurrent(count);\n t && clearTimeout(t);\n t = setTimeout(() => {\n setActive(false);\n }, SYNC_STALLED_TIMEOUT);\n }\n\n return () => {\n setActive(false);\n clearTimeout(t);\n };\n }, [count, current]);\n return active;\n};\n\nexport type SpaceRowContainerProps = Omit<SpaceRowProps, 'spaceName'>;\n\nexport const SpaceRowContainer = ({ spaceId, state }: SpaceRowContainerProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = useSpace(spaceId);\n if (!space) {\n return null;\n }\n\n const spaceName = toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t);\n\n return <SpaceRow spaceId={spaceId} spaceName={spaceName} state={state} />;\n};\n\nexport type SpaceRowProps = {\n spaceId: SpaceId;\n spaceName: string;\n state: PeerSyncState;\n};\n\nexport const SpaceRow = ({\n spaceId,\n spaceName,\n state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote },\n}: SpaceRowProps) => {\n const downActive = useActive(localDocumentCount);\n const upActive = useActive(remoteDocumentCount);\n\n return (\n <div\n className='flex items-center mx-0.5 gap-0.5 cursor-pointer'\n title={spaceId}\n onClick={() => {\n void navigator.clipboard.writeText(spaceId);\n }}\n >\n <span className='is-1/2 truncate'>{spaceName}</span>\n <Icon\n icon='ph--arrow-fat-line-left--regular'\n size={3}\n classNames={mx(downActive && 'animate-[pulse_1s_infinite]')}\n />\n <Candle\n up={{ count: remoteDocumentCount, total: remoteDocumentCount + missingOnRemote }}\n down={{ count: localDocumentCount, total: localDocumentCount + missingOnLocal }}\n title={spaceId}\n />\n <Icon\n icon='ph--arrow-fat-line-right--regular'\n size={3}\n classNames={mx(upActive && 'animate-[pulse_1s_step-start_infinite]')}\n />\n </div>\n );\n};\n\ntype CandleProps = ThemedClassName<Pick<HTMLAttributes<HTMLDivElement>, 'title'>> & { up: Progress; down: Progress };\n\nconst Candle = ({ classNames, up, down }: CandleProps) => {\n return (\n <div className={mx('grid grid-cols-[1fr_2rem_1fr] w-full h-3', classNames)}>\n <Bar classNames='justify-end' {...up} />\n <div className='relative'>\n <div className={mx('absolute inset-0 flex items-center justify-center text-xs', styles.barBg)}>{up.total}</div>\n </div>\n <Bar {...down} />\n </div>\n );\n};\n\nconst Bar = ({ classNames, count, total }: ThemedClassName<Progress>) => {\n let p = (count / total) * 100;\n if (count < total) {\n p = Math.min(p, 95);\n }\n\n return (\n <div className={mx('relative flex w-full', styles.barBg, classNames)}>\n <div className={mx('shrink-0', styles.barFg)} style={{ width: `${p}%` }}></div>\n {count !== total && (\n <div className='absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs'>{count}</div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type UnsubscribeCallback } from '@dxos/async';\nimport { type Client } from '@dxos/client';\nimport { type Space, type SpaceId } from '@dxos/client/echo';\nimport { Context } from '@dxos/context';\n\nexport const createClientSaveTracker = (client: Client, cb: (state: 'saved' | 'saving') => void) => {\n const unsubscribeCallbacks: Record<SpaceId, UnsubscribeCallback> = {};\n const state: Record<SpaceId, 'saved' | 'saving'> = {};\n\n const install = (spaces: Space[]) => {\n for (const space of spaces) {\n if (state[space.id]) {\n continue;\n }\n\n state[space.id] = 'saved';\n unsubscribeCallbacks[space.id] = createSpaceSaveTracker(space, (s) => {\n state[space.id] = s;\n cb(Object.values(state).some((s) => s === 'saving') ? 'saving' : 'saved');\n });\n }\n };\n client.spaces.subscribe((spaces) => {\n install(spaces);\n });\n install(client.spaces.get());\n\n return () => {\n for (const unsubscribe of Object.values(unsubscribeCallbacks)) {\n unsubscribe();\n }\n };\n};\n\nconst createSpaceSaveTracker = (space: Space, cb: (state: 'saved' | 'saving') => void): UnsubscribeCallback => {\n const ctx = new Context();\n\n void space.waitUntilReady().then(() => {\n if (ctx.disposed) {\n return;\n }\n\n let hasUnsavedChanges = false;\n let lastFlushPromise: Promise<void> | undefined;\n space.crud.saveStateChanged.on(ctx, ({ unsavedDocuments }) => {\n hasUnsavedChanges = unsavedDocuments.length > 0;\n });\n space.crud.saveStateChanged.debounce(500).on(ctx, () => {\n if (hasUnsavedChanges) {\n lastFlushPromise = undefined;\n cb('saving');\n } else {\n const flushPromise = space.crud.flush();\n lastFlushPromise = flushPromise;\n void flushPromise.then(() => {\n if (lastFlushPromise === flushPromise) {\n cb('saved');\n }\n });\n }\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport type Status = 'saving locally' | 'downloading' | 'uploading' | 'offline persisted' | 'remote synced';\n\nexport const getStatus = ({\n offline,\n saved,\n needsToUpload,\n needsToDownload,\n}: {\n offline: Boolean;\n saved: Boolean;\n needsToUpload: Boolean;\n needsToDownload: Boolean;\n}): Status => {\n if (!saved) {\n return 'saving locally';\n } else if (!offline && needsToDownload) {\n return 'downloading';\n } else if (!offline && needsToUpload) {\n return 'uploading';\n } else if (offline && !needsToUpload && !needsToDownload) {\n return 'offline persisted';\n } else {\n return 'remote synced';\n }\n};\n\nexport const getIcon = (status: Status) => {\n switch (status) {\n case 'saving locally':\n return 'ph--download--regular';\n case 'downloading':\n return 'ph--cloud-arrow-down--regular';\n case 'uploading':\n return 'ph--cloud-arrow-up--regular';\n case 'offline persisted':\n return 'ph--check-circle--regular';\n case 'remote synced':\n return 'ph--cloud-check--regular';\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SPACE_PLUGIN } from './meta';\nimport { CollectionType } from './types';\n\nexport default [\n {\n 'en-US': {\n [CollectionType.typename]: {\n 'typename label': 'Collection',\n },\n [SPACE_PLUGIN]: {\n 'plugin name': 'Spaces',\n 'first run message': 'Nothing selected.',\n 'create space label': 'Create space',\n 'join space label': 'Join space',\n 'empty space message': 'No documents',\n 'empty tree message': 'No spaces',\n 'unnamed space label': 'New space',\n 'closed space label': 'Closed',\n 'loading space label': 'Loading space…',\n 'lock space label': 'Lock space',\n 'unlock space label': 'Unlock space',\n 'rename space label': 'Rename space',\n 'active space label': 'Active space:',\n 'space name label': 'Space name',\n 'object name label': 'Object name',\n 'close space label': 'Close space',\n 'open space label': 'Open space',\n 'export data label': 'Export data',\n 'import data label': 'Import data',\n 'migrate space label': 'Migrate space',\n 'share space': 'Share space',\n 'save space to disk label': 'Save to disk',\n 'load space from disk label': 'Load from disk',\n 'confirm restore title': 'Overwrite files in this space?',\n 'confirm restore body': 'Restoring from a backup will overwrite the contents of any documents that match.',\n 'upload file message': 'Drag file here or click to browse',\n 'object title placeholder': 'Type a title here…',\n 'personal space label': 'Personal Space',\n 'spaces label': 'Spaces',\n 'show hidden spaces label': 'Show closed spaces',\n 'save files to directory label': 'Save files to disk',\n 'select path label': 'Select path',\n 'rename collection label': 'Rename collection',\n 'rename object label': 'Rename item',\n 'duplicate object label': 'Duplicate item',\n 'delete collection label': 'Delete collection',\n 'delete object label': 'Delete item',\n 'collection deleted label': 'Collection deleted',\n 'object deleted label': 'Item deleted',\n 'objects deleted label': 'Items deleted',\n 'go to object label': 'Open item',\n 'found object label': 'Ready.',\n 'found object description': 'The requested object is now available.',\n 'waiting for object label': 'Loading…',\n 'waiting for object description': 'The requested object is still being synchronized.',\n 'object not found label': 'Nothing found.',\n 'object not found description':\n 'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',\n 'missing object message': 'Object not available.',\n 'missing object description':\n 'The requested object has not been found yet. Ensure there are enough peers online in the space with an updated copy.',\n 'create collection label': 'Create collection',\n 'unnamed object label': 'New object',\n 'unnamed collection label': 'New collection',\n 'create object in space label': 'Add to space',\n 'create object in collection label': 'Add to collection',\n 'share space label': 'Share',\n 'space members label': 'Space members',\n 'active space members heading': 'Online ({{count}})',\n 'inactive space members heading': 'Offline ({{count}})',\n 'presence label_zero': 'No other viewers',\n 'presence label_one': '1 other viewer',\n 'presence label_other': '{{count}} other viewers',\n 'persisted locally label': 'Changes saved locally.',\n 'persisted locally message': 'All changes have been saved to disk on this device.',\n 'persistence pending label': 'Saving…',\n 'persistence error label': 'Error saving changes.',\n 'more actions label': 'More actions',\n 'invitations heading': 'Invitations',\n 'keyshortcuts label': 'Keyboard shortcuts',\n 'menu footer label': 'Details',\n 'location label': 'Located in',\n 'space limit label': 'Space Limit Reached',\n 'space limit description':\n 'This space has reached the maximum number of objects for the beta. This limit includes deleted objects currently, but those can be permanently removed with the cleanup action.',\n 'space limit close label': 'Close',\n 'remove deleted objects label': 'Cleanup',\n 'remove deleted objects alt': 'Permanently remove deleted objects to free up space.',\n 'copy link label': 'Copy link',\n 'default on space create label': 'On space create',\n 'sync status title': 'Sync status',\n 'dismiss label': 'Dismiss',\n 'join success label': 'Successfully joined space',\n 'name label': 'Name',\n 'name placeholder': 'Name',\n 'unnamed object settings label': 'Settings',\n 'edge replication label': 'Enable EDGE Replication',\n 'saving locally label': 'Writing to disk',\n 'downloading label': 'Replicating from peers',\n 'uploading label': 'Replicating to peers',\n 'offline persisted label': 'Saved to disk (offline)',\n 'remote synced label': 'Synced with peers',\n 'open settings panel label': 'Show Settings',\n 'open space settings label': 'Space Settings',\n 'members tab label': 'Members',\n 'settings tab label': 'Settings',\n 'syncing message': 'Space syncing',\n 'show all label': 'Show all',\n 'no sync status label': 'No space with missing objects.',\n 'create space dialog title': 'Create Space',\n 'create object dialog title': 'Create Object',\n 'space input placeholder': 'Select space',\n 'schema input placeholder': 'Select object type',\n 'creating object type label': 'Type',\n 'creating in space label': 'In Space',\n 'creating in collection label': 'In Collection',\n 'clear input label': 'Clear',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SpacePlugin } from './SpacePlugin';\n\nexport default SpacePlugin;\n\nexport * from './components';\nexport * from './meta';\nexport * from './types';\nexport * from './util';\nexport { default as translations } from './translations';\n\nexport * from './SpacePlugin';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["signal", "React", "LayoutAction", "NavigationAction", "Surface", "filterPlugins", "findPlugin", "firstIdInPart", "openIds", "parseGraphPlugin", "parseIntentPlugin", "parseLayoutPlugin", "parseMetadataResolverPlugin", "parseNavigationPlugin", "resolvePlugin", "EventSubscriptions", "S", "scheduledEffect", "invariant", "create", "isDeleted", "isReactiveObject", "LocalStorageStore", "log", "Migrations", "parseAttentionPlugin", "parseClientPlugin", "createExtension", "memoize", "toSignal", "ObservabilityAction", "EdgeReplicationSetting", "PublicKey", "Expando", "FQ_ID_LENGTH", "Filter", "OBJECT_ID_LENGTH", "SPACE_ID_LENGTH", "SpaceState", "fullyQualifiedId", "getSpace", "getTypename", "isEchoObject", "isSpace", "loadObjectReferences", "parseFullyQualifiedId", "parseId", "osTranslations", "ComplexMap", "nonNullable", "reduceGroupBy", "CheckCircle", "CircleDashed", "CircleNotch", "React", "useEffect", "useState", "parseIntentPlugin", "useResolvePlugin", "parseNavigationPlugin", "NavigationAction", "useClient", "Filter", "fullyQualifiedId", "useQuery", "Button", "Toast", "useTranslation", "getSize", "mx", "WAIT_FOR_OBJECT_TIMEOUT", "TOAST_TIMEOUT", "AwaitingObject", "id", "open", "setOpen", "useState", "waiting", "setWaiting", "found", "setFound", "t", "useTranslation", "SPACE_PLUGIN", "intentPlugin", "useResolvePlugin", "parseIntentPlugin", "navigationPlugin", "parseNavigationPlugin", "client", "useClient", "objects", "useQuery", "spaces", "Filter", "all", "useEffect", "timeout", "setTimeout", "clearTimeout", "findIndex", "object", "fullyQualifiedId", "provides", "location", "active", "solo", "handleClose", "intent", "dispatch", "plugin", "action", "SpaceAction", "WAIT_FOR_OBJECT", "data", "undefined", "handleNavigate", "NavigationAction", "OPEN", "activeParts", "main", "Toast", "Root", "duration", "onOpenChange", "Body", "Title", "classNames", "CheckCircle", "className", "getSize", "span", "CircleNotch", "mx", "CircleDashed", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "ns", "React", "useCallback", "useRef", "NavigationAction", "useIntentDispatcher", "useClient", "getSpace", "isReactiveObject", "isSpace", "useSpaces", "Button", "Dialog", "Icon", "useTranslation", "React", "useCallback", "useState", "getObjectAnnotation", "S", "isSpace", "Icon", "IconButton", "Input", "toLocalizedString", "useTranslation", "Form", "InputHeader", "SearchList", "nonNullable", "EXPANDO_TYPENAME", "getObjectAnnotation", "getTypename", "invariant", "getSchema", "isReactiveObject", "Migrations", "ACTION_GROUP_TYPE", "ACTION_TYPE", "cleanup", "getGraph", "memoize", "Filter", "fullyQualifiedId", "getSpace", "isEchoObject", "isSpace", "SpaceState", "SPACES", "SPACE_PLUGIN", "SPACE_TYPE", "COMPOSER_SPACE_LOCK", "SHARED", "EMPTY_ARRAY", "memoizeQuery", "spaceOrEcho", "filter", "options", "key", "JSON", "stringify", "space", "isSpace", "id", "undefined", "Filter", "from", "toProto", "query", "memoize", "db", "unsubscribe", "subscribe", "cleanup", "objects", "getSpaceDisplayName", "personal", "namesCache", "state", "get", "SpaceState", "SPACE_READY", "properties", "name", "length", "ns", "getCollectionGraphNodePartials", "navigable", "collection", "resolve", "disabled", "acceptPersistenceClass", "Set", "acceptPersistenceKey", "role", "onRearrangeChildren", "nextOrder", "isEchoObject", "onTransferStart", "child", "index", "includes", "data", "splice", "push", "onTransferEnd", "destination", "indexOf", "onCopy", "newObject", "cloneObject", "add", "checkPendingMigration", "SPACE_REQUIRES_MIGRATION", "Migrations", "versionProperty", "targetVersion", "constructSpaceNode", "hasPendingMigration", "CollectionType", "typename", "partials", "type", "cacheable", "label", "description", "icon", "testId", "constructSpaceActions", "dispatch", "migrating", "getId", "actions", "SpaceAction", "MIGRATE", "ACTION_GROUP_TYPE", "plugin", "action", "disposition", "running", "locked", "OPEN_CREATE_OBJECT", "ACTION_TYPE", "target", "SHARE", "keyBinding", "macos", "windows", "UNLOCK", "LOCK", "RENAME", "params", "OPEN_SETTINGS", "SPACE_INACTIVE", "CLOSE", "OPEN", "createObjectNode", "object", "getTypename", "metadata", "Object", "keys", "graphProps", "fullyQualifiedId", "placeholder", "persistenceClass", "persistenceKey", "constructObjectActions", "node", "ADD_OBJECT", "RENAME_OBJECT", "REMOVE_OBJECTS", "graph", "getGraph", "nodes", "relation", "find", "url", "window", "location", "origin", "navigator", "clipboard", "writeText", "getActiveSpace", "active", "findNode", "isReactiveObject", "getSpace", "getNestedObjects", "loadReferences", "nested", "Promise", "all", "map", "flat", "newSpace", "schema", "getSchema", "getObjectAnnotation", "EXPANDO_TYPENAME", "serializer", "invariant", "content", "serialize", "deserialize", "newId", "CreateObjectPanel", "schemas", "spaces", "typename", "initialTypename", "target", "initialTarget", "name", "initialName", "defaultSpaceId", "resolve", "onCreateObject", "t", "useTranslation", "SPACE_PLUGIN", "setTypename", "useState", "setTarget", "schema", "find", "getObjectAnnotation", "options", "map", "filter", "nonNullable", "handleClearSchema", "useCallback", "undefined", "handleClearTarget", "handleCreateObject", "schemaInput", "React", "SearchList", "Root", "label", "classNames", "Input", "autoFocus", "data-testid", "placeholder", "Content", "option", "Item", "key", "value", "ns", "defaultValue", "onSelect", "span", "className", "Icon", "icon", "size", "spaceInput", "space", "id", "toLocalizedString", "getSpaceDisplayName", "personal", "form", "Form", "values", "S", "Struct", "optional", "String", "testId", "onSave", "div", "role", "InputHeader", "Label", "isSpace", "TextInput", "disabled", "IconButton", "iconOnly", "onClick", "CreateObjectDialog", "schemas", "target", "typename", "name", "navigableCollections", "resolve", "closeRef", "useRef", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "spaces", "useSpaces", "dispatch", "useIntentDispatcher", "handleCreateObject", "useCallback", "schema", "_target", "isSpace", "properties", "CollectionType", "createObjectAction", "createObject", "current", "click", "space", "getSpace", "result", "action", "data", "object", "isReactiveObject", "plugin", "SpaceAction", "ADD_OBJECT", "NavigationAction", "OPEN", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "Close", "asChild", "Button", "ref", "density", "variant", "autoFocus", "Icon", "icon", "size", "CreateObjectPanel", "defaultSpaceId", "default", "id", "onCreateObject", "React", "useCallback", "useRef", "useIntentDispatcher", "Button", "Dialog", "Icon", "useTranslation", "Form", "initialValues", "edgeReplication", "CreateSpaceDialog", "closeRef", "useRef", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "handleCreateSpace", "useCallback", "data", "result", "action", "SpaceAction", "CREATE", "target", "space", "OPEN_CREATE_OBJECT", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "Close", "asChild", "Button", "ref", "density", "variant", "autoFocus", "Icon", "icon", "size", "Form", "testId", "values", "schema", "SpaceForm", "onSave", "React", "useTranslation", "baseSurface", "descriptionText", "mx", "CollectionMain", "collection", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "mx", "baseSurface", "data-testid", "p", "descriptionText", "name", "React", "useTranslation", "CollectionSection", "collection", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "className", "span", "name", "React", "Input", "useTranslation", "DefaultObjectSettings", "object", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "Input", "Root", "Label", "TextInput", "placeholder", "value", "name", "onChange", "event", "target", "React", "useCallback", "LayoutAction", "NavigationAction", "useIntentDispatcher", "useGraph", "ObservabilityAction", "useSpaces", "Dialog", "useTranslation", "JoinPanel", "JoinDialog", "navigableCollections", "onDone", "props", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "spaces", "useSpaces", "graph", "useGraph", "handleDone", "useCallback", "result", "spaceKey", "Promise", "all", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "subject", "id", "duration", "title", "closeLabel", "state", "space", "find", "key", "equals", "target", "undefined", "waitForPath", "catch", "NavigationAction", "OPEN", "activeParts", "main", "EXPOSE", "ObservabilityAction", "SEND_EVENT", "name", "properties", "spaceId", "React", "Dialog", "Content", "JoinPanel", "exitActionParent", "Close", "asChild", "doneActionParent", "Planet", "React", "getSpace", "useClient", "DropdownMenu", "toLocalizedString", "useTranslation", "MenuFooter", "object", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "space", "getSpace", "spaceName", "getSpaceDisplayName", "personal", "spaces", "default", "React", "DropdownMenu", "Separator", "GroupLabel", "dl", "className", "dt", "dd", "Planet", "toLocalizedString", "ArrowsCounterClockwise", "CheckCircle", "Warning", "React", "useEffect", "useState", "debounce", "Tooltip", "useTranslation", "getSize", "mx", "staticPlaceholderText", "warningText", "Status", "PersistenceStatus", "db", "t", "useTranslation", "SPACE_PLUGIN", "displayMessage", "setDisplayMessage", "useState", "status", "naturalSetStatus", "prevStatus", "setPrevStatus", "_setStatus", "debounce", "useEffect", "timeout", "setTimeout", "clearTimeout", "React", "div", "className", "Warning", "mx", "getSize", "span", "warningText", "ArrowsCounterClockwise", "staticPlaceholderText", "Tooltip", "Root", "delayDuration", "Trigger", "role", "CheckCircle", "Portal", "Content", "classNames", "Arrow", "React", "useCallback", "useRef", "useState", "log", "Button", "Input", "Popover", "useTranslation", "PopoverRenameObject", "object", "obj", "t", "useTranslation", "SPACE_PLUGIN", "doneButton", "useRef", "name", "setName", "useState", "title", "handleDone", "useCallback", "err", "log", "error", "React", "div", "role", "className", "Input", "Root", "Label", "srOnly", "TextInput", "placeholder", "value", "data-testid", "onChange", "target", "onKeyDown", "key", "current", "click", "Popover", "Close", "asChild", "Button", "ref", "classNames", "onClick", "ns", "React", "useCallback", "useRef", "useState", "Button", "Input", "Popover", "useTranslation", "PopoverRenameSpace", "space", "t", "useTranslation", "SPACE_PLUGIN", "doneButton", "useRef", "name", "setName", "useState", "properties", "handleDone", "useCallback", "React", "div", "role", "className", "Input", "Root", "Label", "srOnly", "TextInput", "defaultValue", "placeholder", "onChange", "target", "value", "onKeyDown", "key", "current", "click", "Popover", "Close", "asChild", "Button", "ref", "classNames", "onClick", "ns", "React", "useIntentDispatcher", "IconButton", "useTranslation", "ShareSpaceButton", "space", "dispatch", "useIntentDispatcher", "React", "ShareSpaceButtonImpl", "onClick", "action", "SpaceAction", "SHARE", "data", "t", "useTranslation", "SPACE_PLUGIN", "IconButton", "data-testid", "icon", "label", "React", "useCallback", "useEffect", "useState", "usePlugin", "generateName", "PublicKey", "useClient", "getSpace", "useMembers", "fullyQualifiedId", "useIdentity", "Avatar", "AvatarGroup", "AvatarGroupItem", "Tooltip", "useTranslation", "List", "ListItem", "useDefaultValue", "AttentionGlyph", "useAttention", "ComplexMap", "keyToFallback", "REFRESH_INTERVAL", "ACTIVITY_DURATION", "noViewers", "ComplexMap", "PublicKey", "hash", "getName", "identity", "profile", "displayName", "generateName", "identityKey", "toHex", "SpacePresence", "object", "spaceKey", "spacePlugin", "usePlugin", "SPACE_PLUGIN", "client", "useClient", "useIdentity", "space", "spaces", "get", "getSpace", "spaceMembers", "useMembers", "key", "_moment", "setMoment", "useState", "Date", "now", "useEffect", "interval", "setInterval", "clearInterval", "memberOnline", "useCallback", "member", "presence", "memberIsNotSelf", "equals", "spaceState", "provides", "currentObjectViewers", "viewersByObject", "fullyQualifiedId", "membersForObject", "filter", "has", "map", "objectView", "lastSeen", "currentlyAttended", "toSorted", "a", "b", "React", "FullPresence", "members", "props", "size", "onMemberClick", "useDefaultValue", "length", "AvatarGroup", "Root", "classNames", "data-testid", "slice", "i", "Tooltip", "Trigger", "PrensenceAvatar", "group", "match", "index", "onClick", "Portal", "Content", "side", "span", "Arrow", "AvatarGroupItem", "status", "Avatar", "Frame", "style", "zIndex", "Fallback", "text", "List", "ListItem", "showName", "fallbackValue", "keyToFallback", "hue", "data", "data-status", "emoji", "Label", "SmallPresenceLive", "id", "viewers", "getActiveViewers", "moment", "Array", "from", "values", "activeViewers", "setActiveViewers", "SmallPresence", "count", "t", "useTranslation", "hasAttention", "isAncestor", "isRelated", "useAttention", "attention", "asChild", "div", "role", "className", "data-attention", "AttentionGlyph", "React", "useIntentDispatcher", "Input", "useTranslation", "DeprecatedFormInput", "SpacePluginSettings", "settings", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "React", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "showHidden", "onCheckedChange", "plugin", "action", "SpaceAction", "TOGGLE_HIDDEN", "data", "state", "React", "useState", "useClient", "Button", "Clipboard", "Dialog", "Icon", "toLocalizedString", "useTranslation", "Tabs", "SpacePanel", "React", "useCallback", "useState", "log", "EdgeReplicationSetting", "useClient", "Input", "useTranslation", "DeprecatedFormInput", "SpaceSettingsPanel", "space", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "edgeEnabled", "Boolean", "config", "values", "runtime", "edgeFeatures", "echoReplicator", "edgeReplication", "setEdgeReplication", "useState", "internal", "data", "EdgeReplicationSetting", "ENABLED", "toggleEdgeReplication", "useCallback", "next", "setEdgeReplicationPreference", "DISABLED", "catch", "err", "log", "React", "div", "role", "className", "DeprecatedFormInput", "label", "Input", "TextInput", "placeholder", "value", "properties", "name", "onChange", "event", "target", "Switch", "checked", "onCheckedChange", "SpaceSettingsDialog", "space", "target", "createInvitationUrl", "initialTab", "namesCache", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "tabsActivePart", "setTabsActivePart", "useState", "selected", "setSelected", "locked", "properties", "COMPOSER_SPACE_LOCK", "name", "getSpaceDisplayName", "personal", "spaces", "default", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "onClick", "aria-description", "Icon", "icon", "size", "span", "toLocalizedString", "Close", "asChild", "Button", "density", "variant", "autoFocus", "Tabs", "Root", "orientation", "value", "onValueChange", "activePart", "onActivePartChange", "Viewport", "Tablist", "Tab", "disabled", "Tabpanel", "SpaceSettingsPanel", "Clipboard", "Provider", "SpacePanel", "hideHeading", "React", "useEffect", "useMemo", "useState", "QueryEdgeStatusResponse", "EdgeReplicationSetting", "useClient", "Icon", "useTranslation", "useEffect", "useState", "Context", "EdgeService", "useClient", "createEmptyEdgeSyncState", "missingOnLocal", "missingOnRemote", "localDocumentCount", "remoteDocumentCount", "differentDocuments", "getSyncSummary", "syncMap", "Object", "entries", "reduce", "summary", "_spaceId", "peerState", "isEdgePeerId", "peerId", "spaceId", "startsWith", "AUTOMERGE_REPLICATOR", "useSyncState", "client", "spaceState", "setSpaceState", "ctx", "createSubscriptions", "spaces", "space", "id", "onDispose", "crud", "subscribeToSyncState", "peers", "syncState", "find", "state", "get", "subscribe", "dispose", "useSpaceSyncState", "useEdgeStatus", "status", "setStatus", "useState", "QueryEdgeStatusResponse", "EdgeStatus", "NOT_CONNECTED", "client", "useClient", "useEffect", "services", "EdgeAgentService", "queryEdgeStatus", "subscribe", "InlineSyncStatus", "space", "connectedToEdge", "CONNECTED", "edgeSyncEnabled", "internal", "data", "edgeReplication", "EdgeReplicationSetting", "ENABLED", "syncState", "useSpaceSyncState", "missingOnLocal", "React", "InlineSyncStatusIndicator", "t", "useTranslation", "SPACE_PLUGIN", "animationProps", "useMemo", "animationDelay", "Date", "now", "div", "role", "aria-label", "className", "Icon", "icon", "size", "style", "classNames", "React", "useCallback", "useEffect", "useState", "StatusBar", "useClient", "Icon", "Input", "Popover", "useTranslation", "SyntaxHighlighter", "mx", "React", "useEffect", "useState", "useClient", "useSpace", "Icon", "toLocalizedString", "useTranslation", "mx", "SYNC_STALLED_TIMEOUT", "styles", "barBg", "barFg", "barHover", "useActive", "count", "current", "setCurrent", "useState", "active", "setActive", "useEffect", "t", "clearTimeout", "setTimeout", "SpaceRowContainer", "spaceId", "state", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "space", "useSpace", "spaceName", "toLocalizedString", "getSpaceDisplayName", "personal", "spaces", "default", "React", "SpaceRow", "localDocumentCount", "remoteDocumentCount", "missingOnLocal", "missingOnRemote", "downActive", "upActive", "div", "className", "title", "onClick", "navigator", "clipboard", "writeText", "span", "Icon", "icon", "size", "classNames", "mx", "Candle", "up", "total", "down", "Bar", "p", "Math", "min", "style", "width", "Context", "createClientSaveTracker", "client", "cb", "unsubscribeCallbacks", "state", "install", "spaces", "space", "id", "createSpaceSaveTracker", "s", "Object", "values", "some", "subscribe", "get", "unsubscribe", "ctx", "waitUntilReady", "then", "disposed", "hasUnsavedChanges", "lastFlushPromise", "crud", "saveStateChanged", "on", "unsavedDocuments", "length", "debounce", "undefined", "flushPromise", "flush", "dispose", "getStatus", "offline", "saved", "needsToUpload", "needsToDownload", "getIcon", "status", "SyncStatus", "client", "useClient", "state", "useSyncState", "saved", "setSaved", "useState", "useEffect", "createClientSaveTracker", "React", "SyncStatusIndicator", "t", "useTranslation", "SPACE_PLUGIN", "summary", "getSyncSummary", "offline", "Object", "values", "length", "needsToUpload", "differentDocuments", "missingOnRemote", "needsToDownload", "missingOnLocal", "status", "getStatus", "classNames", "setClassNames", "undefined", "setTimeout", "SYNC_STALLED_TIMEOUT", "clearTimeout", "title", "icon", "Icon", "getIcon", "size", "StatusBar", "Item", "Popover", "Root", "Trigger", "asChild", "Button", "Portal", "Content", "sideOffset", "SyncStatusDetail", "debug", "showAll", "setShowAll", "entries", "filter", "_", "value", "toSorted", "a", "b", "handleCheckedChange", "useCallback", "div", "className", "mx", "role", "h1", "Input", "Label", "Checkbox", "checked", "onCheckedChange", "map", "spaceId", "SpaceRowContainer", "key", "SyntaxHighlighter", "language", "JSON", "stringify", "CollectionType", "typename", "SPACE_PLUGIN", "ACTIVE_NODE_BROADCAST_INTERVAL", "WAIT_FOR_OBJECT_TIMEOUT", "SPACE_MAX_OBJECTS", "DIRECTORY_TYPE", "parseSpacePlugin", "plugin", "Array", "isArray", "provides", "space", "enabled", "undefined", "SpacePlugin", "invitationUrl", "window", "location", "origin", "invitationParam", "firstRun", "onFirstRun", "settings", "LocalStorageStore", "SPACE_PLUGIN", "state", "awaiting", "spaceNames", "viewersByObject", "viewersByIdentity", "ComplexMap", "PublicKey", "hash", "sdkMigrationRunning", "navigableCollections", "enabledEdgeReplication", "subscriptions", "EventSubscriptions", "spaceSubscriptions", "graphSubscriptions", "Map", "schemas", "clientPlugin", "graphPlugin", "intentPlugin", "layoutPlugin", "navigationPlugin", "attentionPlugin", "metadataPlugin", "createSpaceInvitationUrl", "invitationCode", "baseUrl", "URL", "searchParams", "set", "toString", "onSpaceReady", "client", "dispatch", "intent", "graph", "layout", "attention", "defaultSpace", "spaces", "default", "properties", "COMPOSER_SPACE_LOCK", "objects", "spacesOrder", "db", "query", "Filter", "schema", "Expando", "key", "SHARED", "run", "add", "create", "order", "scheduledEffect", "layoutMode", "soloPart", "active", "solo", "node", "findNode", "id", "length", "FQ_ID_LENGTH", "timeout", "setTimeout", "action", "SpaceAction", "WAIT_FOR_OBJECT", "data", "clearTimeout", "subscribe", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "internal", "migrate", "filter", "SPACE_READY", "forEach", "name", "values", "unsubscribe", "open", "openIds", "closed", "send", "identity", "halo", "idsBySpace", "reduceGroupBy", "spaceId", "parseFullyQualifiedId", "removedBySpace", "has", "added", "removed", "find", "postMessage", "identityKey", "toHex", "attended", "catch", "err", "log", "warn", "message", "interval", "setInterval", "clearInterval", "clear", "listen", "payload", "safeFrom", "currentIdentity", "equals", "lastSeen", "Date", "now", "currentlyAttended", "Set", "delete", "setEdgeReplicationDefault", "Promise", "all", "map", "setEdgeReplicationPreference", "EdgeReplicationSetting", "ENABLED", "meta", "ready", "plugins", "prop", "type", "bool", "allowUndefined", "json", "findPlugin", "resolvePlugin", "parseGraphPlugin", "parseLayoutPlugin", "parseMetadataResolverPlugin", "parseNavigationPlugin", "parseAttentionPlugin", "parseClientPlugin", "parseIntentPlugin", "push", "filterPlugins", "parseSchemaPlugin", "echo", "nonNullable", "reduce", "acc", "addTypes", "system", "handleFirstRun", "CollectionType", "typename", "views", "Migrations", "versionProperty", "targetVersion", "isReady", "waitUntilReady", "wait", "then", "unload", "close", "cb", "translations", "osTranslations", "complementary", "panels", "label", "ns", "icon", "root", "React", "AwaitingObject", "metadata", "records", "createObject", "CollectionAction", "CREATE", "placeholder", "loadReferences", "collection", "loadObjectReferences", "Object", "surface", "component", "role", "rest", "isSpace", "object", "Surface", "CollectionMain", "disposition", "subject", "SpaceSettingsPanel", "isEchoObject", "DefaultObjectSettings", "SpaceSettingsDialog", "createInvitationUrl", "JoinDialog", "CreateSpaceDialog", "CreateObjectDialog", "resolve", "resolver", "PopoverRenameSpace", "isReactiveObject", "PopoverRenameObject", "SmallPresenceLive", "viewers", "fullyQualifiedId", "InlineSyncStatus", "SmallPresence", "count", "getSpace", "SpacePresence", "ShareSpaceButton", "CollectionSection", "SpacePluginSettings", "MenuFooter", "SyncStatus", "builder", "spacesNode", "SPACES", "cacheable", "testId", "disabled", "childrenPersistenceClass", "onRearrangeChildren", "nextOrder", "_sortEdges", "createExtension", "connector", "actions", "OPEN_CREATE_SPACE", "className", "JOIN", "toSignal", "onChange", "memoizeQuery", "orderMap", "index", "sort", "a", "b", "showHidden", "SPACE_INACTIVE", "constructSpaceNode", "navigable", "personal", "namesCache", "SPACE_ID_LENGTH", "constructSpaceActions", "migrating", "spaceState", "createObjectNode", "objectId", "split", "OBJECT_ID_LENGTH", "store", "memoize", "signal", "getObjectById", "value", "first", "o", "isDeleted", "constructObjectActions", "endsWith", "subjectId", "parseId", "showResolvedThreads", "getTypename", "serializer", "inputType", "outputType", "serialize", "deserialize", "SPACE_TYPE", "result", "ancestors", "findLast", "ancestor", "ADD_OBJECT", "target", "intents", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "S", "is", "SpaceForm", "edgeReplication", "activeParts", "main", "ObservabilityAction", "SEND_EVENT", "initialInvitationCode", "onDone", "SHARE", "mode", "current", "firstIdInPart", "startsWith", "initialTab", "LOCK", "UNLOCK", "RENAME", "caller", "anchorId", "OPEN_SETTINGS", "OPEN", "CLOSE", "MIGRATE", "version", "OPEN_CREATE_OBJECT", "coreDatabase", "getAllObjectIds", "title", "description", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "unlinkDeletedObjects", "REMOVE_OBJECTS", "invariant", "every", "obj", "openObjectIds", "undo", "parentCollection", "nestedObjectsList", "getNestedObjects", "deletionData", "indices", "indexOf", "wasActive", "flatMap", "i", "NavigationAction", "sidebar", "splice", "flat", "remove", "undoMessageKey", "some", "undoable", "undoData", "restoredObjects", "RENAME_OBJECT", "DUPLICATE_OBJECT", "originalObject", "newObject", "cloneObject", "TOGGLE_HIDDEN", "SpacePlugin"]
|
|
7
7
|
}
|