@dxos/plugin-space 0.6.12 → 0.6.13-main.548ca8d

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.
Files changed (91) hide show
  1. package/dist/lib/browser/{chunk-LZEGRS7H.mjs → chunk-AVLRQF6L.mjs} +1 -1
  2. package/dist/lib/browser/chunk-AVLRQF6L.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-DTVUOG2C.mjs → chunk-QK5I2EPF.mjs} +23 -4
  4. package/dist/lib/browser/chunk-QK5I2EPF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +592 -246
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/meta.mjs +1 -1
  9. package/dist/lib/browser/types/index.mjs +7 -3
  10. package/dist/lib/node/{chunk-CVZPI2P3.cjs → chunk-HE2GHO6Z.cjs} +29 -8
  11. package/dist/lib/node/chunk-HE2GHO6Z.cjs.map +7 -0
  12. package/dist/lib/node/{chunk-6CNYF6YU.cjs → chunk-P4XUXM7Y.cjs} +4 -4
  13. package/dist/lib/node/chunk-P4XUXM7Y.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +812 -469
  15. package/dist/lib/node/index.cjs.map +4 -4
  16. package/dist/lib/node/meta.cjs +5 -5
  17. package/dist/lib/node/meta.cjs.map +1 -1
  18. package/dist/lib/node/meta.json +1 -1
  19. package/dist/lib/node/types/index.cjs +14 -10
  20. package/dist/lib/node/types/index.cjs.map +2 -2
  21. package/dist/lib/node-esm/chunk-2TR4WD6U.mjs +116 -0
  22. package/dist/lib/node-esm/chunk-2TR4WD6U.mjs.map +7 -0
  23. package/dist/lib/node-esm/chunk-YPQGKWHJ.mjs +37 -0
  24. package/dist/lib/node-esm/chunk-YPQGKWHJ.mjs.map +7 -0
  25. package/dist/lib/node-esm/index.mjs +2987 -0
  26. package/dist/lib/node-esm/index.mjs.map +7 -0
  27. package/dist/lib/node-esm/meta.json +1 -0
  28. package/dist/lib/node-esm/meta.mjs +14 -0
  29. package/dist/lib/node-esm/meta.mjs.map +7 -0
  30. package/dist/lib/node-esm/types/index.mjs +26 -0
  31. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  32. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  33. package/dist/types/src/components/FallbackSettings.d.ts +8 -0
  34. package/dist/types/src/components/FallbackSettings.d.ts.map +1 -0
  35. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  36. package/dist/types/src/components/SaveStatus.d.ts +3 -0
  37. package/dist/types/src/components/SaveStatus.d.ts.map +1 -0
  38. package/dist/types/src/components/ShareSpaceButton.stories.d.ts +4 -0
  39. package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/SpaceMain/SpaceMain.d.ts.map +1 -1
  41. package/dist/types/src/components/SpacePresence.stories.d.ts +4 -0
  42. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  43. package/dist/types/src/components/SpaceSettings.d.ts.map +1 -1
  44. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +13 -0
  45. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -0
  46. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +117 -0
  47. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -0
  48. package/dist/types/src/components/SyncStatus/index.d.ts +2 -0
  49. package/dist/types/src/components/SyncStatus/index.d.ts.map +1 -0
  50. package/dist/types/src/components/SyncStatus/types.d.ts +14 -0
  51. package/dist/types/src/components/SyncStatus/types.d.ts.map +1 -0
  52. package/dist/types/src/components/index.d.ts +3 -2
  53. package/dist/types/src/components/index.d.ts.map +1 -1
  54. package/dist/types/src/meta.d.ts.map +1 -1
  55. package/dist/types/src/translations.d.ts +4 -0
  56. package/dist/types/src/translations.d.ts.map +1 -1
  57. package/dist/types/src/types/thread.d.ts +14 -0
  58. package/dist/types/src/types/thread.d.ts.map +1 -1
  59. package/dist/types/src/types/types.d.ts +18 -1
  60. package/dist/types/src/types/types.d.ts.map +1 -1
  61. package/dist/types/src/util.d.ts +1 -4
  62. package/dist/types/src/util.d.ts.map +1 -1
  63. package/package.json +44 -36
  64. package/src/SpacePlugin.tsx +145 -83
  65. package/src/components/FallbackSettings.tsx +35 -0
  66. package/src/components/MenuFooter.tsx +1 -0
  67. package/src/components/SaveStatus.tsx +95 -0
  68. package/src/components/SpaceMain/SpaceMain.tsx +1 -22
  69. package/src/components/SpacePresence.tsx +1 -1
  70. package/src/components/SpaceSettings.tsx +32 -3
  71. package/src/components/SyncStatus/SyncStatus.stories.tsx +62 -0
  72. package/src/components/SyncStatus/SyncStatus.tsx +188 -0
  73. package/src/components/SyncStatus/index.ts +5 -0
  74. package/src/components/SyncStatus/types.ts +77 -0
  75. package/src/components/index.ts +3 -2
  76. package/src/meta.ts +3 -1
  77. package/src/translations.ts +4 -0
  78. package/src/types/collection.ts +1 -1
  79. package/src/types/thread.ts +11 -1
  80. package/src/types/types.ts +25 -1
  81. package/src/util.tsx +15 -50
  82. package/dist/lib/browser/chunk-DTVUOG2C.mjs.map +0 -7
  83. package/dist/lib/browser/chunk-LZEGRS7H.mjs.map +0 -7
  84. package/dist/lib/node/chunk-6CNYF6YU.cjs.map +0 -7
  85. package/dist/lib/node/chunk-CVZPI2P3.cjs.map +0 -7
  86. package/dist/types/src/components/EmptySpace.d.ts +0 -3
  87. package/dist/types/src/components/EmptySpace.d.ts.map +0 -1
  88. package/dist/types/src/components/EmptyTree.d.ts +0 -3
  89. package/dist/types/src/components/EmptyTree.d.ts.map +0 -1
  90. package/src/components/EmptySpace.tsx +0 -25
  91. package/src/components/EmptyTree.tsx +0 -25
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/SpacePlugin.tsx", "../../../src/components/AwaitingObject.tsx", "../../../src/components/CollectionMain.tsx", "../../../src/components/CollectionSection.tsx", "../../../src/components/EmptySpace.tsx", "../../../src/components/EmptyTree.tsx", "../../../src/components/MenuFooter.tsx", "../../../src/util.tsx", "../../../src/components/MissingObject.tsx", "../../../src/components/PersistenceStatus.tsx", "../../../src/components/PopoverRenameObject.tsx", "../../../src/components/PopoverRenameSpace.tsx", "../../../src/components/ShareSpaceButton.tsx", "../../../src/components/SpaceMain/SpaceMain.tsx", "../../../src/components/SpaceMain/SpaceMembersSection.tsx", "../../../src/components/SpacePresence.tsx", "../../../src/components/SpaceSettings.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type IconProps, Plus, SignIn, CardsThree, Warning } from '@phosphor-icons/react';\nimport { effect, signal } from '@preact/signals-core';\nimport React from 'react';\n\nimport {\n type IntentDispatcher,\n type IntentPluginProvides,\n LayoutAction,\n Surface,\n type LocationProvides,\n NavigationAction,\n type Plugin,\n type PluginDefinition,\n openIds,\n firstIdInPart,\n parseIntentPlugin,\n parseNavigationPlugin,\n parseMetadataResolverPlugin,\n resolvePlugin,\n parseGraphPlugin,\n} from '@dxos/app-framework';\nimport { EventSubscriptions, type Trigger, type UnsubscribeCallback } from '@dxos/async';\nimport { type Identifiable, isReactiveObject, type EchoReactiveObject } from '@dxos/echo-schema';\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 { createExtension, isGraphNode, memoize, type Node, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { type Client, PublicKey } from '@dxos/react-client';\nimport {\n type PropertiesTypeProps,\n type Space,\n create,\n Expando,\n Filter,\n fullyQualifiedId,\n getSpace,\n getTypename,\n isEchoObject,\n isSpace,\n loadObjectReferences,\n SpaceState,\n} from '@dxos/react-client/echo';\nimport { Dialog } from '@dxos/react-ui';\nimport { InvitationManager, type InvitationManagerProps, osTranslations, ClipboardProvider } from '@dxos/shell/react';\nimport { ComplexMap, nonNullable, reduceGroupBy } from '@dxos/util';\n\nimport {\n AwaitingObject,\n CollectionMain,\n CollectionSection,\n EmptySpace,\n EmptyTree,\n MenuFooter,\n MissingObject,\n PopoverRenameObject,\n PopoverRenameSpace,\n ShareSpaceButton,\n SmallPresence,\n SmallPresenceLive,\n SpacePresence,\n SpaceSettings,\n} from './components';\nimport meta, { SPACE_PLUGIN, SpaceAction } from './meta';\nimport translations from './translations';\nimport { CollectionType, type SpacePluginProvides, type SpaceSettingsProps, type PluginState } from './types';\nimport {\n COMPOSER_SPACE_LOCK,\n SHARED,\n SPACES,\n SPACE_TYPE,\n cloneObject,\n constructObjectActionGroups,\n constructObjectActions,\n constructSpaceActionGroups,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n getNestedObjects,\n memoizeQuery,\n} from './util';\n\nconst ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;\nconst OBJECT_ID_LENGTH = 60; // 33 (space id) + 26 (object id) + 1 (separator).\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 * 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 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 viewersByIdentity: new ComplexMap(PublicKey.hash),\n sdkMigrationRunning: {},\n });\n const subscriptions = new EventSubscriptions();\n const spaceSubscriptions = new EventSubscriptions();\n const graphSubscriptions = new Map<string, UnsubscribeCallback>();\n\n let clientPlugin: Plugin<ClientPluginProvides> | undefined;\n let intentPlugin: Plugin<IntentPluginProvides> | undefined;\n let navigationPlugin: Plugin<LocationProvides> | undefined;\n let attentionPlugin: Plugin<AttentionPluginProvides> | undefined;\n\n const onSpaceReady = async () => {\n if (!clientPlugin || !navigationPlugin || !attentionPlugin) {\n return;\n }\n\n const client = clientPlugin.provides.client;\n const location = navigationPlugin.provides.location;\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 // 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 effect(() => {\n state.values.spaceNames[space.id] = space.properties.name;\n }),\n );\n });\n }).unsubscribe,\n );\n\n // Broadcast active node to other peers in the space.\n subscriptions.add(\n effect(() => {\n const send = () => {\n const spaces = client.spaces.get();\n const identity = client.halo.identity.get();\n if (identity && location.active) {\n const ids = openIds(location.active);\n\n // Group parts by space for efficient messaging.\n const idsBySpace = reduceGroupBy(ids, (id) => {\n const [spaceId] = id.split(':'); // TODO(burdon): Factor out.\n return spaceId;\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, ids] of idsBySpace) {\n const space = spaces.find((space) => space.id === spaceId);\n if (!space) {\n continue;\n }\n\n const removed = location.closed ? [location.closed].flat() : [];\n\n void space\n .postMessage('viewing', {\n identityKey: identity.identityKey.toHex(),\n attended: attention.attended ? [...attention.attended] : [],\n added: ids,\n // TODO(Zan): When we re-open a part, we should remove it from the removed list in the navigation plugin.\n removed: removed.filter((id) => !ids.includes(id)),\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 const interval = setInterval(() => send(), ACTIVE_NODE_BROADCAST_INTERVAL);\n return () => clearInterval(interval);\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 if (identityKey && Array.isArray(added) && Array.isArray(removed)) {\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 return {\n meta,\n ready: async (plugins) => {\n settings.prop({\n key: 'showHidden',\n storageKey: 'show-hidden',\n type: LocalStorageStore.bool({ allowUndefined: true }),\n });\n\n state.prop({\n key: 'spaceNames',\n storageKey: 'space-names',\n type: LocalStorageStore.json<Record<string, string>>(),\n });\n\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 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 // No need to unsubscribe because this observable completes when spaces are ready.\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 }\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 root: () => (state.values.awaiting ? <AwaitingObject id={state.values.awaiting} /> : null),\n metadata: {\n records: {\n [CollectionType.typename]: {\n placeholder: ['unnamed collection label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <CardsThree {...props} />,\n iconSymbol: '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 const primary = data.active ?? data.object;\n switch (role) {\n case 'article':\n case 'main':\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n return isSpace(primary) && primary.state.get() === SpaceState.SPACE_READY ? (\n <Surface data={{ active: primary.properties[CollectionType.typename] }} role={role} {...rest} />\n ) : primary instanceof CollectionType ? (\n { node: <CollectionMain collection={primary} />, disposition: 'fallback' }\n ) : typeof primary === 'string' && primary.length === OBJECT_ID_LENGTH ? (\n <MissingObject id={primary} />\n ) : null;\n // TODO(burdon): Add role name syntax to minimal plugin docs.\n case 'tree--empty':\n switch (true) {\n case data.plugin === SPACE_PLUGIN:\n return <EmptyTree />;\n case isGraphNode(data.activeNode) && isSpace(data.activeNode.data):\n return <EmptySpace />;\n default:\n return null;\n }\n case 'dialog':\n if (data.component === 'dxos.org/plugin/space/InvitationManagerDialog') {\n return (\n <Dialog.Content>\n <ClipboardProvider>\n <InvitationManager active {...(data.subject as InvitationManagerProps)} />\n </ClipboardProvider>\n </Dialog.Content>\n );\n } else {\n return null;\n }\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 case 'presence--glyph': {\n return isReactiveObject(data.object) ? (\n <SmallPresenceLive viewers={state.values.viewersByObject[fullyQualifiedId(data.object)]} />\n ) : (\n <SmallPresence count={0} />\n );\n }\n case 'navbar-start': {\n return null;\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 return space && object\n ? {\n node: (\n <>\n <SpacePresence object={object} />\n {space.properties[COMPOSER_SPACE_LOCK] ? null : <ShareSpaceButton spaceId={space.id} />}\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 ? <SpaceSettings settings={settings.values} /> : null;\n case 'menu-footer':\n if (!isEchoObject(data.object)) {\n return null;\n } else {\n return <MenuFooter object={data.object} />;\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\n if (!graph || !dispatch || !resolve || !client) {\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 properties: {\n label: ['spaces label', { ns: SPACE_PLUGIN }],\n palette: 'teal',\n testId: 'spacePlugin.spaces',\n role: 'branch',\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.CREATE,\n data: async () => {\n await dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.CREATE,\n },\n {\n action: NavigationAction.OPEN,\n },\n ]);\n },\n properties: {\n label: ['create space label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <Plus {...props} />,\n iconSymbol: 'ph--plus--regular',\n disposition: 'toolbar',\n testId: 'spacePlugin.createSpace',\n },\n },\n {\n id: SpaceAction.JOIN,\n data: async () => {\n await dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.JOIN,\n },\n {\n action: NavigationAction.OPEN,\n },\n ]);\n },\n properties: {\n label: ['join space label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <SignIn {...props} />,\n iconSymbol: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\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 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 personal: space === client.spaces.default,\n namesCache: state.values.spaceNames,\n resolve,\n }),\n );\n },\n }),\n\n // Find an object by its fully qualified id.\n createExtension({\n id: `${SPACE_PLUGIN}/objects`,\n resolver: ({ id }) => {\n const [spaceId, objectId] = id.split(':');\n const space = client.spaces.get().find((space) => space.id === spaceId);\n if (!space) {\n return;\n }\n\n const state = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (state !== 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.loadObjectById(objectId).then((o) => (store.value = o));\n }\n }, id);\n const object = store.value;\n if (!object) {\n return;\n }\n\n return createObjectNode({ object, space, resolve });\n },\n }),\n\n // Create space actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/actions`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n actionGroups: ({ node }) => constructSpaceActionGroups({ space: node.data, dispatch }),\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 state = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (state !== 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) => createObjectNode({ object, space, resolve }))\n .filter(nonNullable);\n },\n }),\n\n // Create collection actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/object-actions`,\n filter: (node): node is Node<EchoReactiveObject<any>> => isEchoObject(node.data),\n actionGroups: ({ node }) => constructObjectActionGroups({ object: node.data, dispatch }),\n actions: ({ node }) => constructObjectActions({ node, dispatch }),\n }),\n\n // Create nodes for objects in collections.\n createExtension({\n id: `${SPACE_PLUGIN}/collection-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) => createObjectNode({ object, space, resolve }))\n .filter(nonNullable);\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.CREATE: {\n if (!client) {\n return;\n }\n\n const space = await client.spaces.create(intent.data as PropertiesTypeProps);\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: { space, id: space.id, 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 if (client) {\n const { space } = await client.shell.joinSpace({ invitationCode: intent.data?.invitationCode });\n if (space) {\n return {\n data: { space, id: space.id, activeParts: { main: [space.id] } },\n\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.join',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n }\n break;\n }\n\n case SpaceAction.SHARE: {\n const spaceId = intent.data?.spaceId;\n if (clientPlugin && typeof spaceId === 'string') {\n if (!navigationPlugin?.provides.location.active) {\n return;\n }\n const target = firstIdInPart(navigationPlugin?.provides.location.active, 'main');\n const result = await clientPlugin.provides.client.shell.shareSpace({ spaceId, target });\n return {\n data: result,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.share',\n properties: {\n spaceId,\n members: result.members?.length,\n error: result.error?.message,\n cancelled: result.cancelled,\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: {\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.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: (props: IconProps) => <Warning {...props} />,\n iconSymbol: '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 Identifiable);\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 Identifiable);\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 Identifiable], views: {} });\n space.properties[CollectionType.typename] = collection;\n }\n }\n\n return {\n data: { id: object.id, 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_OBJECT: {\n const object = intent.data?.object ?? intent.data?.result;\n const space = getSpace(object);\n if (!(isEchoObject(object) && 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 // Capture the current state for undo.\n const parentCollection = intent.data?.collection ?? space.properties[CollectionType.typename];\n const nestedObjects = await getNestedObjects(object, resolve);\n const deletionData = {\n object,\n parentCollection,\n index:\n parentCollection instanceof CollectionType\n ? parentCollection.objects.indexOf(object as Expando)\n : -1,\n nestedObjects,\n wasActive: [object, ...nestedObjects]\n .map((obj) => fullyQualifiedId(obj))\n .filter((id) => openObjectIds.has(id)),\n };\n\n // If the item is active, navigate to \"nowhere\" to avoid navigating to a removed item.\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 complementary: deletionData.wasActive,\n },\n },\n });\n }\n\n if (parentCollection instanceof CollectionType) {\n // TODO(Zan): Is there a nicer way to do this without casting to Expando?\n const index = parentCollection.objects.indexOf(object as Expando);\n if (index !== -1) {\n parentCollection.objects.splice(index, 1);\n }\n }\n\n // If the object is a collection, also delete its nested objects.\n deletionData.nestedObjects.forEach((obj) => {\n space.db.remove(obj);\n });\n space.db.remove(object);\n\n const undoMessageKey =\n object instanceof CollectionType ? 'collection deleted label' : 'object deleted label';\n\n return {\n data: true,\n undoable: {\n // Consider using a translation key here.\n message: translations[0]['en-US'][SPACE_PLUGIN][undoMessageKey],\n data: deletionData,\n },\n };\n } else {\n const undoData = intent.data;\n if (undoData && isEchoObject(undoData.object) && undoData.parentCollection instanceof CollectionType) {\n // Restore the object to the space.\n const restoredObject = space.db.add(undoData.object);\n\n // Restore nested objects if the object was a collection.\n undoData.nestedObjects.forEach((obj: Expando) => {\n space.db.add(obj);\n });\n\n // Restore the object to its original position in the collection.\n if (undoData.index !== -1) {\n undoData.parentCollection.objects.splice(undoData.index, 0, restoredObject as Expando);\n }\n\n // Restore active state if it was active before removal.\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 if (!isEchoObject(originalObject) || !resolve) {\n return;\n }\n\n const newObject = await cloneObject(originalObject, resolve);\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 },\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 { 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);\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 === 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 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 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const EmptySpace = () => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <div\n role='none'\n className={mx(\n 'p-2 mli-2 mbe-2 text-center border border-dashed border-neutral-400/50 rounded-lg',\n descriptionText,\n )}\n >\n {t('empty space message')}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const EmptyTree = () => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <div\n role='none'\n className={mx(\n 'p-2 mli-2 mbe-2 text-center border border-dashed border-neutral-400/50 rounded-lg',\n descriptionText,\n )}\n >\n {t('empty tree message')}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { Planet } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { getSpace } from '@dxos/client/echo';\nimport type { EchoReactiveObject } from '@dxos/echo-schema';\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: EchoReactiveObject<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 2023 DXOS.org\n//\n\nimport {\n CardsThree,\n Database,\n PencilSimpleLine,\n Planet,\n Plus,\n Trash,\n Users,\n X,\n ClockCounterClockwise,\n type IconProps,\n LockSimpleOpen,\n LockSimple,\n Placeholder,\n Link,\n} from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { type MetadataResolver, NavigationAction, type IntentDispatcher } from '@dxos/app-framework';\nimport {\n type EchoReactiveObject,\n create,\n isReactiveObject,\n getTypename,\n type Expando,\n getSchema,\n getEchoObjectAnnotation,\n EXPANDO_TYPENAME,\n} from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Migrations } from '@dxos/migrations';\nimport {\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n actionGroupSymbol,\n type ActionData,\n type Graph,\n type Node,\n type InvokeParams,\n type NodeArg,\n getGraph,\n cleanup,\n memoize,\n} from '@dxos/plugin-graph';\nimport {\n SpaceState,\n fullyQualifiedId,\n getSpace,\n isEchoObject,\n isSpace,\n type Echo,\n type FilterSource,\n type Query,\n type QueryOptions,\n type Space,\n} from '@dxos/react-client/echo';\n\nimport { SpaceAction, SPACE_PLUGIN } 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 EchoReactiveObject<any>>(\n spaceOrEcho?: Space | Echo,\n filter?: FilterSource<T>,\n options?: QueryOptions,\n): T[] => {\n const key = isSpace(spaceOrEcho) ? spaceOrEcho.id : undefined;\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 collection,\n space,\n resolve,\n}: {\n collection: CollectionType;\n space: Space;\n resolve: MetadataResolver;\n}) => {\n return {\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<EchoReactiveObject<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<EchoReactiveObject<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<EchoReactiveObject<any>>, index?: number) => {\n // Create clone of child and add to destination space.\n const newObject = await cloneObject(child.data, resolve);\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 personal,\n namesCache,\n resolve,\n}: {\n space: Space;\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 })\n : {};\n\n return {\n id: space.id,\n type: SPACE_TYPE,\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: (props: IconProps) => <Planet {...props} />,\n iconSymbol: 'ph--planet--regular',\n disabled: space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,\n testId: 'spacePlugin.space',\n },\n };\n};\n\nexport const constructSpaceActionGroups = ({ space, dispatch }: { space: Space; dispatch: IntentDispatcher }) => {\n const state = space.state.get();\n const hasPendingMigration = checkPendingMigration(space);\n const getId = (id: string) => `${id}/${space.id}`;\n\n if (state !== SpaceState.SPACE_READY || hasPendingMigration) {\n return [];\n }\n\n const collection = space.properties[CollectionType.typename];\n const actions: NodeArg<typeof actionGroupSymbol>[] = [\n {\n id: getId(SpaceAction.ADD_OBJECT),\n type: ACTION_GROUP_TYPE,\n data: actionGroupSymbol,\n properties: {\n label: ['create object in space label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <Plus {...props} />,\n iconSymbol: 'ph--plus--regular',\n disposition: 'toolbar',\n // TODO(wittjosiah): This is currently a navtree feature. Address this with cmd+k integration.\n // mainAreaDisposition: 'in-flow',\n menuType: 'searchList',\n testId: 'spacePlugin.createObject',\n },\n nodes: [\n {\n id: getId(SpaceAction.ADD_OBJECT.replace('object', 'collection')),\n type: ACTION_TYPE,\n data: () =>\n dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: { target: collection, object: create(CollectionType, { objects: [], views: {} }) },\n },\n {\n action: NavigationAction.OPEN,\n },\n ]),\n properties: {\n label: ['create collection label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <CardsThree {...props} />,\n iconSymbol: 'ph--cards-three--regular',\n testId: 'spacePlugin.createCollection',\n },\n },\n ],\n },\n ];\n\n return actions;\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: (props: IconProps) => <Database {...props} />,\n iconSymbol: 'ph--database--regular',\n disposition: 'toolbar',\n mainAreaDisposition: 'in-flow',\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.SHARE),\n type: ACTION_TYPE,\n data: async () => {\n if (locked) {\n return;\n }\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.SHARE, data: { spaceId: space.id } });\n },\n properties: {\n label: ['share space label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <Users {...props} />,\n iconSymbol: 'ph--users--regular',\n disabled: locked,\n keyBinding: {\n macos: 'meta+.',\n windows: 'alt+.',\n },\n mainAreaDisposition: 'absent',\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\n ? (props: IconProps) => <LockSimpleOpen {...props} />\n : (props: IconProps) => <LockSimple {...props} />,\n iconSymbol: 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: (props: IconProps) => <PencilSimpleLine {...props} />,\n iconSymbol: 'ph--pencil-simple-line--regular',\n keyBinding: {\n macos: 'shift+F6',\n windows: 'shift+F6',\n },\n mainAreaDisposition: 'absent',\n },\n },\n );\n }\n\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: (props: IconProps) => <X {...props} />,\n iconSymbol: 'ph--x--regular',\n mainAreaDisposition: 'menu',\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: (props: IconProps) => <ClockCounterClockwise {...props} />,\n iconSymbol: 'ph--clock-counter-clockwise--regular',\n disposition: 'toolbar',\n mainAreaDisposition: 'in-flow',\n },\n });\n }\n\n return actions;\n};\n\nexport const createObjectNode = ({\n object,\n space,\n resolve,\n}: {\n object: EchoReactiveObject<any>;\n space: Space;\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 })\n : metadata.graphProps;\n\n return {\n id: fullyQualifiedId(object),\n type,\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 ?? (() => <Placeholder />),\n iconSymbol: metadata.iconSymbol ?? 'ph--placeholder--regular',\n testId: 'spacePlugin.object',\n persistenceClass: 'echo',\n persistenceKey: space?.id,\n },\n };\n};\n\nexport const constructObjectActionGroups = ({\n object,\n dispatch,\n}: {\n object: EchoReactiveObject<any>;\n dispatch: IntentDispatcher;\n}) => {\n if (!(object instanceof CollectionType)) {\n return [];\n }\n\n const collection = object;\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<typeof actionGroupSymbol>[] = [\n {\n id: getId(SpaceAction.ADD_OBJECT),\n type: ACTION_GROUP_TYPE,\n data: actionGroupSymbol,\n properties: {\n label: ['create object in collection label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <Plus {...props} />,\n iconSymbol: 'ph--plus--regular',\n disposition: 'toolbar',\n // TODO(wittjosiah): This is currently a navtree feature. Address this with cmd+k integration.\n // mainAreaDisposition: 'in-flow',\n menuType: 'searchList',\n testId: 'spacePlugin.createObject',\n },\n nodes: [\n {\n id: getId(SpaceAction.ADD_OBJECT.replace('object', 'collection')),\n type: ACTION_TYPE,\n data: () =>\n dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: { target: collection, object: create(CollectionType, { objects: [], views: {} }) },\n },\n {\n action: NavigationAction.OPEN,\n },\n ]),\n properties: {\n label: ['create collection label', { ns: SPACE_PLUGIN }],\n icon: (props: IconProps) => <CardsThree {...props} />,\n iconSymbol: 'ph--cards-three--regular',\n testId: 'spacePlugin.createCollection',\n },\n },\n ],\n },\n ];\n\n return actions;\n};\n\nexport const constructObjectActions = ({\n node,\n dispatch,\n}: {\n node: Node<EchoReactiveObject<any>>;\n dispatch: IntentDispatcher;\n}) => {\n const object = node.data;\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<ActionData>[] = [\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: (props: IconProps) => <PencilSimpleLine {...props} />,\n iconSymbol: '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_OBJECT),\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_OBJECT,\n data: { 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: (props: IconProps) => <Trash {...props} />,\n iconSymbol: '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: (props: IconProps) => <Link {...props} />,\n iconSymbol: '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: EchoReactiveObject<any>,\n resolve: MetadataResolver,\n): Promise<EchoReactiveObject<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: EchoReactiveObject<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): Promise<Expando> => {\n const schema = getSchema(object);\n const typename = schema ? getEchoObjectAnnotation(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, newId: true });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { parseIntentPlugin, useResolvePlugin } from '@dxos/app-framework';\nimport { Status, useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\n\nconst WAIT_FOR_OBJECT_TIMEOUT = 1_000;\n\nexport const MissingObject = ({ id }: { id: string }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [waiting, setWaiting] = useState(false);\n const intentPlugin = useResolvePlugin(parseIntentPlugin);\n\n useEffect(() => {\n if (!intentPlugin) {\n return;\n }\n\n const timeout = setTimeout(async () => {\n setWaiting(true);\n await intentPlugin.provides.intent.dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.WAIT_FOR_OBJECT,\n data: { id },\n });\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n return () => clearTimeout(timeout);\n }, [intentPlugin, id]);\n\n return (\n <div role='none' className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}>\n {waiting ? (\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'border border-dashed border-neutral-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg',\n )}\n >\n {t('missing object message')}\n </p>\n ) : (\n <Status indeterminate aria-label='Initializing' />\n )}\n </div>\n );\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/echo-schema';\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 { Button, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN, SpaceAction } from '../meta';\n\nexport const ShareSpaceButton = ({ spaceId }: { spaceId: string }) => {\n const dispatch = useIntentDispatcher();\n\n return <ShareSpaceButtonImpl onClick={() => dispatch({ action: SpaceAction.SHARE, data: { spaceId } })} />;\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 <Button data-testid='spacePlugin.shareSpaceButton' onClick={onClick} classNames='mli-1'>\n {t('share space label')}\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Command } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { type Action } from '@dxos/plugin-graph';\nimport { SpaceState, type Space } from '@dxos/react-client/echo';\nimport { Button, Main, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { getSize, mx, topbarBlockPaddingStart } from '@dxos/react-ui-theme';\nimport { ClipboardProvider } from '@dxos/shell/react';\n\nimport { SpaceMembersSection } from './SpaceMembersSection';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst _InFlowSpaceActions = ({ actionsMap }: { actionsMap: Record<string, Action> }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <section className='mbe-4 col-start-2 col-end-4 md:col-end-7 grid gap-2 auto-rows-min grid-cols-[repeat(auto-fill,minmax(8rem,1fr))]'>\n {Object.entries(actionsMap)\n .filter(([_, { properties }]) => properties?.mainAreaDisposition === 'in-flow')\n .map(([actionId, { data: invoke, properties }]) => {\n const Icon = properties?.icon;\n const label = properties?.label;\n return (\n <Button key={actionId} classNames='block text-center plb-2 font-normal'>\n {Icon && <Icon size={5} className='mli-auto' />}\n <p>{toLocalizedString(label, t)}</p>\n </Button>\n );\n })}\n </section>\n );\n};\n\nconst KeyShortcuts = () => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <section className='mbe-4 col-span-4 md:col-start-5 md:col-end-7 grid grid-cols-subgrid gap-y-2 auto-rows-min'>\n <h2 className='contents'>\n <Command weight='duotone' className={mx(getSize(5), 'place-self-center')} />\n <span className='text-lg col-span-2 md:col-span-1'>{t('keyshortcuts label')}</span>\n </h2>\n <div role='none' className='col-start-2 col-end-4 md:col-end-5 pie-2'>\n <Surface role='keyshortcuts' />\n </div>\n </section>\n );\n};\n\nconst spaceMainLayout =\n 'grid gap-y-2 auto-rows-min before:bs-2 before:col-span-5 grid-cols-[var(--rail-size)_var(--rail-size)_1fr_var(--rail-size)] md:grid-cols-[var(--rail-size)_var(--rail-size)_minmax(max-content,1fr)_var(--rail-size)_var(--rail-size)_minmax(max-content,2fr)_var(--rail-size)]';\n\n/**\n * @deprecated\n */\n// TODO(wittjosiah): Remove this and re-use space members section as a deck column.\nexport const SpaceMain = ({ space, role }: { space: Space; role: 'main' | 'article' }) => {\n // const { graph } = useGraph();\n // const _actionsMap = graph.findNode(space.key.toHex())?.actionsMap;\n const state = space.state.get();\n const ready = state === SpaceState.SPACE_READY;\n const Root = role === 'main' ? Main.Content : 'div';\n return (\n <ClipboardProvider>\n <Root\n {...(role === 'main'\n ? { classNames: [topbarBlockPaddingStart, 'min-bs-dvh', spaceMainLayout] }\n : { role: 'none', className: mx(topbarBlockPaddingStart, 'row-span-2', spaceMainLayout) })}\n data-testid={`spacePlugin.${role}`}\n data-isready={ready ? 'true' : 'false'}\n >\n {/* {actionsMap && <InFlowSpaceActions actionsMap={actionsMap} />} */}\n {ready && <SpaceMembersSection space={space} />}\n <KeyShortcuts />\n </Root>\n </ClipboardProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CaretDown, Check, UserPlus, UsersThree } from '@phosphor-icons/react';\nimport React, { useCallback, useState } from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { type Space, useMembers, SpaceMember, useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { Invitation } from '@dxos/react-client/invitations';\nimport { Button, ButtonGroup, DropdownMenu, List, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\nimport { InvitationListItem, IdentityListItem } from '@dxos/shell/react';\n\nimport { SPACE_PLUGIN } from '../../meta';\n\n// TODO(thure): Sync with shell?\nconst activeActionKeyStorageKey = 'dxos:react-shell/space-manager/active-action';\n\nconst Presence = SpaceMember.PresenceState;\n\nconst handleCreateInvitationUrl = (invitationCode: string) => `${origin}?spaceInvitationCode=${invitationCode}`;\n\nconst SpaceMemberList = ({ members }: { members: SpaceMember[] }) => {\n return members.length > 0 ? (\n <List classNames='col-start-2 col-end-5 gap-y-1 grid grid-cols-subgrid items-center'>\n {members.map((member) => (\n <IdentityListItem\n classNames='contents'\n key={member.identity.identityKey.toHex()}\n identity={member.identity}\n presence={member.presence}\n />\n ))}\n </List>\n ) : null;\n};\n\nexport const SpaceMembersSection = ({ space }: { space: Space }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const invitations = useSpaceInvitations(space.key);\n const { dispatch } = useIntent();\n\n const handleCloseDialog = () =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', state: false },\n });\n\n const handleInvitationSelect = ({\n invitation: invitationObservable,\n }: {\n invitation: CancellableInvitationObservable;\n }) => {\n const invitation = invitationObservable.get();\n void dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/InvitationManagerDialog',\n subject: {\n invitationUrl: handleCreateInvitationUrl(InvitationEncoder.encode(invitation)),\n send: handleCloseDialog,\n status: invitation.state,\n type: invitation.type,\n authCode: invitation.authCode,\n id: invitation.invitationId,\n },\n },\n });\n };\n\n const inviteActions = {\n inviteOne: {\n label: t('invite one label', { ns: 'os' }),\n description: t('invite one description', { ns: 'os' }),\n icon: UserPlus,\n onClick: useCallback(() => {\n space.share?.({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.SHARED_SECRET,\n });\n }, [space]),\n },\n inviteMany: {\n label: t('invite many label', { ns: 'os' }),\n description: t('invite many description', { ns: 'os' }),\n icon: UsersThree,\n onClick: useCallback(() => {\n space.share?.({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n }, [space]),\n },\n };\n\n const [activeActionKey, setInternalActiveActionKey] = useState<keyof typeof inviteActions>(\n (localStorage.getItem(activeActionKeyStorageKey) as keyof typeof inviteActions) ?? 'inviteOne',\n );\n const setActiveActionKey = (nextKey: keyof typeof inviteActions) => {\n setInternalActiveActionKey(nextKey);\n localStorage.setItem(activeActionKeyStorageKey, nextKey);\n };\n\n const activeAction = inviteActions[activeActionKey as keyof typeof inviteActions] ?? {};\n\n // TODO(thure): Simplify when Object.groupBy() is supported by Safari\n // https://caniuse.com/mdn-javascript_builtins_object_groupby\n const members = useMembers(space.key).reduce(\n (acc: Record<SpaceMember.PresenceState, SpaceMember[]>, member) => {\n acc[member.presence].push(member);\n return acc;\n },\n {\n [Presence.ONLINE]: [],\n [Presence.OFFLINE]: [],\n },\n );\n\n return (\n <section className='mbe-4 col-span-3 grid gap-y-2 grid-cols-subgrid auto-rows-min'>\n <h2 className='contents'>\n <UsersThree weight='duotone' className={mx(getSize(5), 'place-self-center')} />\n <span className='text-lg col-span-2'>{t('space members label')}</span>\n </h2>\n <h3 className='col-start-2 col-span-3 text-sm italic text-description'>{t('invitations heading')}</h3>\n {invitations.length > 0 && (\n <List classNames='col-start-2 col-span-2 gap-y-2 grid grid-cols-[var(--rail-size)_1fr_var(--rail-action)_var(--rail-action)]'>\n {invitations.map((invitation) => (\n <InvitationListItem\n reverseEffects\n classNames='pis-0 pie-0 gap-0 col-span-4 grid grid-cols-subgrid'\n key={invitation.get().invitationId}\n invitation={invitation}\n send={handleInvitationSelect}\n createInvitationUrl={handleCreateInvitationUrl}\n />\n ))}\n </List>\n )}\n <ButtonGroup classNames='col-start-2 col-end-4 grid grid-cols-[1fr_var(--rail-action)] place-self-grow gap-px'>\n <Button classNames='gap-2' onClick={activeAction.onClick}>\n <activeAction.icon className={getSize(5)} />\n <span>{t(activeAction.label, { ns: 'os' })}</span>\n </Button>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button classNames='pli-0'>\n <CaretDown className={getSize(4)} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {Object.entries(inviteActions).map(([id, action]) => {\n return (\n <DropdownMenu.CheckboxItem\n key={id}\n aria-labelledby={`${id}__label`}\n aria-describedby={`${id}__description`}\n checked={activeActionKey === id}\n onCheckedChange={(checked) => checked && setActiveActionKey(id as keyof typeof inviteActions)}\n classNames='gap-2'\n >\n {action.icon && <action.icon className={getSize(5)} />}\n <div role='none' className='flex-1 min-is-0 space-b-1'>\n <p id={`${id}__label`}>{t(action.label, { ns: 'os' })}</p>\n {action.description && (\n <p id={`${id}__description`} className={descriptionText}>\n {t(action.description, { ns: 'os' })}\n </p>\n )}\n </div>\n <DropdownMenu.ItemIndicator asChild>\n <Check className={getSize(4)} />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.CheckboxItem>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </ButtonGroup>\n {members[Presence.ONLINE].length + members[Presence.OFFLINE].length < 1 ? (\n <p className={mx(descriptionText, 'text-center is-full mlb-2')}>\n {t('empty space members message', { ns: 'os' })}\n </p>\n ) : (\n <>\n <h3 className='col-start-2 col-end-5 text-sm italic text-description'>\n {t('active space members heading', { count: members[Presence.ONLINE].length })}\n </h3>\n <SpaceMemberList members={members[Presence.ONLINE]} />\n <h3 className='col-start-2 col-end-5 text-sm italic text-description'>\n {t('inactive space members heading', { count: members[Presence.OFFLINE].length })}\n </h3>\n <SpaceMemberList members={members[Presence.OFFLINE]} />\n </>\n )}\n </section>\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 useDensityContext,\n useTranslation,\n List,\n ListItem,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { AttentionGlyph } 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 density = useDensityContext();\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 density === 'fine' ? (\n <SmallPresence count={membersForObject.length} />\n ) : (\n <FullPresence members={membersForObject} />\n );\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 = ({ viewers }: { viewers?: ComplexMap<PublicKey, ObjectViewerProps> }) => {\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 activeViewers = viewers\n ? Array.from(viewers.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION)\n : [];\n\n return <SmallPresence count={activeViewers.length} />;\n};\n\nexport const SmallPresence = ({ count }: { count: number }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <AttentionGlyph presence={count > 1 ? 'many' : count === 1 ? 'one' : 'none'} classNames='self-center mie-1' />\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 { SettingsValue } from '@dxos/plugin-settings';\nimport { Input, useTranslation } from '@dxos/react-ui';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\nimport { type SpaceSettingsProps } from '../types';\n\nexport const SpaceSettings = ({ settings }: { settings: SpaceSettingsProps }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n\n return (\n <>\n <SettingsValue 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 </SettingsValue>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SPACE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SPACE_PLUGIN]: {\n 'plugin name': 'Spaces',\n 'first run message': 'Nothing selected.',\n 'create space label': 'Create a new space',\n 'join space label': 'Join a 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 '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 },\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": ["Plus", "SignIn", "CardsThree", "Warning", "effect", "signal", "React", "LayoutAction", "Surface", "NavigationAction", "openIds", "firstIdInPart", "parseIntentPlugin", "parseNavigationPlugin", "parseMetadataResolverPlugin", "resolvePlugin", "parseGraphPlugin", "EventSubscriptions", "isReactiveObject", "LocalStorageStore", "log", "Migrations", "parseAttentionPlugin", "parseClientPlugin", "createExtension", "isGraphNode", "memoize", "toSignal", "ObservabilityAction", "PublicKey", "create", "Expando", "Filter", "fullyQualifiedId", "getSpace", "getTypename", "isEchoObject", "isSpace", "loadObjectReferences", "SpaceState", "Dialog", "InvitationManager", "osTranslations", "ClipboardProvider", "ComplexMap", "nonNullable", "reduceGroupBy", "CheckCircle", "CircleDashed", "CircleNotch", "React", "useEffect", "useState", "parseIntentPlugin", "useResolvePlugin", "parseNavigationPlugin", "NavigationAction", "useClient", "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", "useEffect", "timeout", "setTimeout", "clearTimeout", "findIndex", "object", "fullyQualifiedId", "provides", "location", "active", "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", "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", "useTranslation", "descriptionText", "mx", "EmptySpace", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "mx", "descriptionText", "React", "useTranslation", "descriptionText", "mx", "EmptyTree", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "mx", "descriptionText", "Planet", "React", "getSpace", "useClient", "DropdownMenu", "toLocalizedString", "useTranslation", "CardsThree", "Database", "PencilSimpleLine", "Planet", "Plus", "Trash", "Users", "X", "ClockCounterClockwise", "LockSimpleOpen", "LockSimple", "Placeholder", "Link", "React", "NavigationAction", "create", "isReactiveObject", "getTypename", "getSchema", "getEchoObjectAnnotation", "EXPANDO_TYPENAME", "invariant", "Migrations", "ACTION_TYPE", "ACTION_GROUP_TYPE", "actionGroupSymbol", "getGraph", "cleanup", "memoize", "SpaceState", "fullyQualifiedId", "getSpace", "isEchoObject", "isSpace", "SPACES", "SPACE_PLUGIN", "SPACE_TYPE", "COMPOSER_SPACE_LOCK", "SHARED", "EMPTY_ARRAY", "memoizeQuery", "spaceOrEcho", "filter", "options", "key", "isSpace", "id", "undefined", "query", "memoize", "db", "unsubscribe", "subscribe", "cleanup", "objects", "getSpaceDisplayName", "space", "personal", "namesCache", "state", "get", "SpaceState", "SPACE_READY", "properties", "name", "length", "ns", "getCollectionGraphNodePartials", "collection", "resolve", "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", "label", "description", "icon", "props", "React", "Planet", "iconSymbol", "disabled", "testId", "constructSpaceActionGroups", "dispatch", "getId", "actions", "SpaceAction", "ADD_OBJECT", "ACTION_GROUP_TYPE", "actionGroupSymbol", "Plus", "disposition", "menuType", "nodes", "replace", "ACTION_TYPE", "plugin", "action", "target", "object", "create", "views", "NavigationAction", "OPEN", "CardsThree", "constructSpaceActions", "migrating", "MIGRATE", "Database", "mainAreaDisposition", "running", "locked", "SHARE", "spaceId", "Users", "keyBinding", "macos", "windows", "UNLOCK", "LOCK", "LockSimpleOpen", "LockSimple", "RENAME", "params", "PencilSimpleLine", "SPACE_INACTIVE", "CLOSE", "X", "ClockCounterClockwise", "createObjectNode", "getTypename", "metadata", "Object", "keys", "graphProps", "fullyQualifiedId", "placeholder", "Placeholder", "persistenceClass", "persistenceKey", "constructObjectActionGroups", "constructObjectActions", "node", "RENAME_OBJECT", "REMOVE_OBJECT", "graph", "getGraph", "relation", "find", "Trash", "url", "window", "location", "origin", "navigator", "clipboard", "writeText", "Link", "getActiveSpace", "active", "findNode", "isReactiveObject", "getSpace", "getNestedObjects", "loadReferences", "nested", "Promise", "all", "map", "flat", "schema", "getSchema", "getEchoObjectAnnotation", "EXPANDO_TYPENAME", "serializer", "invariant", "content", "serialize", "deserialize", "newId", "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", "React", "useEffect", "useState", "parseIntentPlugin", "useResolvePlugin", "Status", "useTranslation", "baseSurface", "descriptionText", "mx", "WAIT_FOR_OBJECT_TIMEOUT", "MissingObject", "id", "t", "useTranslation", "SPACE_PLUGIN", "waiting", "setWaiting", "useState", "intentPlugin", "useResolvePlugin", "parseIntentPlugin", "useEffect", "timeout", "setTimeout", "provides", "intent", "dispatch", "plugin", "action", "SpaceAction", "WAIT_FOR_OBJECT", "data", "clearTimeout", "React", "div", "role", "className", "mx", "baseSurface", "p", "descriptionText", "Status", "indeterminate", "aria-label", "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", "Button", "useTranslation", "ShareSpaceButton", "spaceId", "dispatch", "useIntentDispatcher", "React", "ShareSpaceButtonImpl", "onClick", "action", "SpaceAction", "SHARE", "data", "t", "useTranslation", "SPACE_PLUGIN", "Button", "data-testid", "classNames", "Command", "React", "Surface", "SpaceState", "Button", "Main", "useTranslation", "toLocalizedString", "getSize", "mx", "topbarBlockPaddingStart", "ClipboardProvider", "CaretDown", "Check", "UserPlus", "UsersThree", "React", "useCallback", "useState", "LayoutAction", "useIntent", "useMembers", "SpaceMember", "useSpaceInvitations", "InvitationEncoder", "Invitation", "Button", "ButtonGroup", "DropdownMenu", "List", "useTranslation", "descriptionText", "getSize", "mx", "InvitationListItem", "IdentityListItem", "activeActionKeyStorageKey", "Presence", "SpaceMember", "PresenceState", "handleCreateInvitationUrl", "invitationCode", "origin", "SpaceMemberList", "members", "length", "React", "List", "classNames", "map", "member", "IdentityListItem", "key", "identity", "identityKey", "toHex", "presence", "SpaceMembersSection", "space", "t", "useTranslation", "SPACE_PLUGIN", "invitations", "useSpaceInvitations", "dispatch", "useIntent", "handleCloseDialog", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "handleInvitationSelect", "invitation", "invitationObservable", "get", "component", "subject", "invitationUrl", "InvitationEncoder", "encode", "send", "status", "type", "authCode", "id", "invitationId", "inviteActions", "inviteOne", "label", "ns", "description", "icon", "UserPlus", "onClick", "useCallback", "share", "Invitation", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "SHARED_SECRET", "inviteMany", "UsersThree", "NONE", "multiUse", "activeActionKey", "setInternalActiveActionKey", "useState", "localStorage", "getItem", "setActiveActionKey", "nextKey", "setItem", "activeAction", "useMembers", "reduce", "acc", "push", "ONLINE", "OFFLINE", "section", "className", "h2", "weight", "mx", "getSize", "span", "h3", "InvitationListItem", "reverseEffects", "createInvitationUrl", "ButtonGroup", "Button", "DropdownMenu", "Root", "Trigger", "asChild", "CaretDown", "Content", "Viewport", "Object", "entries", "CheckboxItem", "aria-labelledby", "aria-describedby", "checked", "onCheckedChange", "div", "role", "p", "descriptionText", "ItemIndicator", "Check", "Arrow", "count", "KeyShortcuts", "t", "useTranslation", "SPACE_PLUGIN", "React", "section", "className", "h2", "Command", "weight", "mx", "getSize", "span", "div", "role", "Surface", "spaceMainLayout", "SpaceMain", "space", "state", "get", "ready", "SpaceState", "SPACE_READY", "Root", "Main", "Content", "ClipboardProvider", "classNames", "topbarBlockPaddingStart", "data-testid", "data-isready", "SpaceMembersSection", "React", "useCallback", "useEffect", "useState", "usePlugin", "generateName", "PublicKey", "useClient", "getSpace", "useMembers", "fullyQualifiedId", "useIdentity", "Avatar", "AvatarGroup", "AvatarGroupItem", "Tooltip", "useDensityContext", "useTranslation", "List", "ListItem", "useDefaultValue", "AttentionGlyph", "ComplexMap", "keyToFallback", "REFRESH_INTERVAL", "ACTIVITY_DURATION", "noViewers", "ComplexMap", "PublicKey", "hash", "getName", "identity", "profile", "displayName", "generateName", "identityKey", "toHex", "SpacePresence", "object", "spaceKey", "density", "useDensityContext", "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", "SmallPresence", "count", "length", "FullPresence", "members", "props", "size", "onMemberClick", "useDefaultValue", "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", "viewers", "moment", "activeViewers", "Array", "from", "values", "t", "useTranslation", "asChild", "AttentionGlyph", "React", "useIntentDispatcher", "SettingsValue", "Input", "useTranslation", "SpaceSettings", "settings", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "React", "SettingsValue", "label", "Input", "Switch", "checked", "showHidden", "onCheckedChange", "plugin", "action", "SpaceAction", "TOGGLE_HIDDEN", "data", "state", "SPACE_PLUGIN", "ACTIVE_NODE_BROADCAST_INTERVAL", "OBJECT_ID_LENGTH", "SPACE_MAX_OBJECTS", "DIRECTORY_TYPE", "parseSpacePlugin", "plugin", "Array", "isArray", "provides", "space", "enabled", "undefined", "SpacePlugin", "firstRun", "onFirstRun", "settings", "LocalStorageStore", "SPACE_PLUGIN", "state", "awaiting", "spaceNames", "viewersByObject", "viewersByIdentity", "ComplexMap", "PublicKey", "hash", "sdkMigrationRunning", "subscriptions", "EventSubscriptions", "spaceSubscriptions", "graphSubscriptions", "Map", "clientPlugin", "intentPlugin", "navigationPlugin", "attentionPlugin", "onSpaceReady", "client", "location", "attention", "defaultSpace", "spaces", "default", "properties", "COMPOSER_SPACE_LOCK", "objects", "spacesOrder", "db", "query", "Filter", "schema", "Expando", "key", "SHARED", "run", "add", "create", "order", "subscribe", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "internal", "migrate", "filter", "SPACE_READY", "forEach", "effect", "values", "id", "name", "unsubscribe", "send", "identity", "halo", "active", "ids", "openIds", "idsBySpace", "reduceGroupBy", "spaceId", "split", "has", "set", "find", "removed", "closed", "flat", "postMessage", "identityKey", "toHex", "attended", "added", "includes", "catch", "err", "log", "warn", "message", "interval", "setInterval", "clearInterval", "clear", "listen", "payload", "safeFrom", "lastSeen", "Date", "now", "currentlyAttended", "Set", "delete", "meta", "ready", "plugins", "prop", "storageKey", "type", "bool", "allowUndefined", "json", "resolvePlugin", "parseNavigationPlugin", "parseAttentionPlugin", "parseClientPlugin", "parseIntentPlugin", "dispatch", "intent", "handleFirstRun", "CollectionType", "typename", "views", "Migrations", "versionProperty", "targetVersion", "isReady", "waitUntilReady", "wait", "then", "unload", "close", "cb", "translations", "osTranslations", "root", "React", "AwaitingObject", "metadata", "records", "placeholder", "ns", "icon", "props", "CardsThree", "iconSymbol", "loadReferences", "collection", "loadObjectReferences", "Object", "echo", "surface", "component", "data", "role", "rest", "primary", "object", "isSpace", "Surface", "node", "CollectionMain", "disposition", "length", "MissingObject", "EmptyTree", "isGraphNode", "activeNode", "EmptySpace", "Dialog", "Content", "ClipboardProvider", "InvitationManager", "subject", "PopoverRenameSpace", "isReactiveObject", "PopoverRenameObject", "SmallPresenceLive", "viewers", "fullyQualifiedId", "SmallPresence", "count", "isEchoObject", "getSpace", "SpacePresence", "ShareSpaceButton", "CollectionSection", "SpaceSettings", "MenuFooter", "graph", "builder", "metadataPlugin", "parseMetadataResolverPlugin", "graphPlugin", "parseGraphPlugin", "resolve", "resolver", "createExtension", "connector", "toSignal", "onChange", "defaultSpaceUnsubscribe", "SPACES", "label", "palette", "testId", "childrenPersistenceClass", "onRearrangeChildren", "nextOrder", "_sortEdges", "map", "actions", "SpaceAction", "CREATE", "action", "NavigationAction", "OPEN", "Plus", "JOIN", "SignIn", "memoizeQuery", "orderMap", "index", "sort", "a", "b", "showHidden", "SPACE_INACTIVE", "constructSpaceNode", "personal", "namesCache", "objectId", "store", "memoize", "signal", "getObjectById", "value", "loadObjectById", "o", "createObjectNode", "actionGroups", "constructSpaceActionGroups", "constructSpaceActions", "migrating", "nonNullable", "constructObjectActionGroups", "constructObjectActions", "serializer", "inputType", "outputType", "serialize", "deserialize", "SPACE_TYPE", "result", "ancestors", "findLast", "ancestor", "ADD_OBJECT", "target", "WAIT_FOR_OBJECT", "activeParts", "main", "intents", "ObservabilityAction", "SEND_EVENT", "shell", "joinSpace", "invitationCode", "SHARE", "firstIdInPart", "shareSpace", "members", "error", "cancelled", "LOCK", "UNLOCK", "RENAME", "caller", "LayoutAction", "SET_LAYOUT", "element", "anchorId", "open", "CLOSE", "MIGRATE", "version", "coreDatabase", "getAllObjectIds", "title", "description", "duration", "Warning", "actionLabel", "actionAlt", "closeLabel", "onAction", "unlinkDeletedObjects", "push", "getTypename", "REMOVE_OBJECT", "openObjectIds", "undo", "parentCollection", "nestedObjects", "getNestedObjects", "deletionData", "indexOf", "wasActive", "obj", "sidebar", "complementary", "splice", "remove", "undoMessageKey", "undoable", "undoData", "restoredObject", "RENAME_OBJECT", "DUPLICATE_OBJECT", "originalObject", "newObject", "cloneObject", "TOGGLE_HIDDEN", "SpacePlugin"]
3
+ "sources": ["../../../src/SpacePlugin.tsx", "../../../src/components/AwaitingObject.tsx", "../../../src/components/CollectionMain.tsx", "../../../src/components/CollectionSection.tsx", "../../../src/components/FallbackSettings.tsx", "../../../src/components/MenuFooter.tsx", "../../../src/util.tsx", "../../../src/components/MissingObject.tsx", "../../../src/components/PersistenceStatus.tsx", "../../../src/components/PopoverRenameObject.tsx", "../../../src/components/PopoverRenameSpace.tsx", "../../../src/components/ShareSpaceButton.tsx", "../../../src/components/SpaceMain/SpaceMain.tsx", "../../../src/components/SpaceMain/SpaceMembersSection.tsx", "../../../src/components/SpacePresence.tsx", "../../../src/components/SpaceSettings.tsx", "../../../src/components/SaveStatus.tsx", "../../../src/components/SyncStatus/SyncStatus.tsx", "../../../src/components/SyncStatus/types.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 IntentDispatcher,\n type IntentPluginProvides,\n LayoutAction,\n type LocationProvides,\n NavigationAction,\n type Plugin,\n type PluginDefinition,\n Surface,\n firstIdInPart,\n openIds,\n parseGraphPlugin,\n parseIntentPlugin,\n parseMetadataResolverPlugin,\n parseNavigationPlugin,\n resolvePlugin,\n} from '@dxos/app-framework';\nimport { EventSubscriptions, type Trigger, type UnsubscribeCallback } from '@dxos/async';\nimport { type EchoReactiveObject, type Identifiable, isReactiveObject } from '@dxos/echo-schema';\nimport { scheduledEffect } from '@dxos/echo-signals/core';\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 { type Client, PublicKey } from '@dxos/react-client';\nimport {\n Expando,\n Filter,\n type PropertiesTypeProps,\n type Space,\n SpaceState,\n create,\n fullyQualifiedId,\n getSpace,\n getTypename,\n isEchoObject,\n isSpace,\n loadObjectReferences,\n parseFullyQualifiedId,\n} from '@dxos/react-client/echo';\nimport { Dialog } from '@dxos/react-ui';\nimport { ClipboardProvider, InvitationManager, type InvitationManagerProps, osTranslations } from '@dxos/shell/react';\nimport { ComplexMap, nonNullable, reduceGroupBy } from '@dxos/util';\n\nimport {\n AwaitingObject,\n CollectionMain,\n CollectionSection,\n FallbackSettings,\n MenuFooter,\n MissingObject,\n PopoverRenameObject,\n PopoverRenameSpace,\n SaveStatus,\n ShareSpaceButton,\n SmallPresence,\n SmallPresenceLive,\n SpacePresence,\n SpaceSettings,\n SyncStatus,\n} from './components';\nimport meta, { SPACE_PLUGIN, SpaceAction } from './meta';\nimport translations from './translations';\nimport { CollectionType, type PluginState, type SpacePluginProvides, type SpaceSettingsProps } from './types';\nimport {\n COMPOSER_SPACE_LOCK,\n SHARED,\n SPACES,\n SPACE_TYPE,\n cloneObject,\n constructObjectActionGroups,\n constructObjectActions,\n constructSpaceActionGroups,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n getNestedObjects,\n memoizeQuery,\n} from './util';\n\nconst ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;\nconst OBJECT_ID_LENGTH = 60; // 33 (space id) + 26 (object id) + 1 (separator).\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 * 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 firstRun,\n onFirstRun,\n}: SpacePluginOptions = {}): PluginDefinition<SpacePluginProvides> => {\n const settings = new LocalStorageStore<SpaceSettingsProps>(SPACE_PLUGIN, {\n onSpaceCreate: 'dxos.org/plugin/markdown/action/create',\n });\n const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {\n awaiting: undefined,\n spaceNames: {},\n viewersByObject: {},\n viewersByIdentity: new ComplexMap(PublicKey.hash),\n sdkMigrationRunning: {},\n });\n const subscriptions = new EventSubscriptions();\n const spaceSubscriptions = new EventSubscriptions();\n const graphSubscriptions = new Map<string, UnsubscribeCallback>();\n\n let clientPlugin: Plugin<ClientPluginProvides> | undefined;\n let intentPlugin: Plugin<IntentPluginProvides> | undefined;\n let navigationPlugin: Plugin<LocationProvides> | undefined;\n let attentionPlugin: Plugin<AttentionPluginProvides> | undefined;\n\n const onSpaceReady = async () => {\n if (!clientPlugin || !navigationPlugin || !attentionPlugin) {\n return;\n }\n\n const client = clientPlugin.provides.client;\n const location = navigationPlugin.provides.location;\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 // 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 ids: openIds(location.active),\n removed: location.closed ? [location.closed].flat() : [],\n }),\n ({ ids, removed }) => {\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(ids, (id) => {\n const [spaceId] = id.split(':'); // TODO(burdon): Factor out.\n return spaceId;\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, ids] of idsBySpace) {\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: ids,\n // TODO(Zan): When we re-open a part, we should remove it from the removed list in the navigation plugin.\n removed: removed.filter((id) => !ids.includes(id)),\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 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 if (identityKey && Array.isArray(added) && Array.isArray(removed)) {\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 return {\n meta,\n ready: async (plugins) => {\n settings.prop({\n key: 'showHidden',\n storageKey: 'show-hidden',\n type: LocalStorageStore.bool({ allowUndefined: true }),\n });\n\n state.prop({\n key: 'spaceNames',\n storageKey: 'space-names',\n type: LocalStorageStore.json<Record<string, string>>(),\n });\n\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 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 // No need to unsubscribe because this observable completes when spaces are ready.\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 }\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 root: () => (state.values.awaiting ? <AwaitingObject id={state.values.awaiting} /> : null),\n metadata: {\n records: {\n [CollectionType.typename]: {\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 const primary = data.active ?? data.object;\n switch (role) {\n case 'article':\n case 'main':\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n return isSpace(primary) && primary.state.get() === SpaceState.SPACE_READY ? (\n <Surface\n data={{ active: primary.properties[CollectionType.typename], id: primary.id }}\n role={role}\n {...rest}\n />\n ) : primary instanceof CollectionType ? (\n { node: <CollectionMain collection={primary} />, disposition: 'fallback' }\n ) : typeof primary === 'string' && primary.length === OBJECT_ID_LENGTH ? (\n <MissingObject id={primary} />\n ) : null;\n case 'complementary--settings':\n return isEchoObject(data.subject) ? <FallbackSettings object={data.subject} /> : null;\n case 'dialog':\n if (data.component === 'dxos.org/plugin/space/InvitationManagerDialog') {\n return (\n <Dialog.Content>\n <ClipboardProvider>\n <InvitationManager active {...(data.subject as InvitationManagerProps)} />\n </ClipboardProvider>\n </Dialog.Content>\n );\n } else {\n return null;\n }\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 // TODO(burdon): Add role name syntax to minimal plugin docs.\n case 'presence--glyph': {\n return isReactiveObject(data.object) ? (\n <SmallPresenceLive viewers={state.values.viewersByObject[fullyQualifiedId(data.object)]} />\n ) : (\n <SmallPresence count={0} />\n );\n }\n case 'navbar-start': {\n return null;\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 return space && object\n ? {\n node: (\n <>\n <SpacePresence object={object} />\n {space.properties[COMPOSER_SPACE_LOCK] ? null : <ShareSpaceButton spaceId={space.id} />}\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 ? <SpaceSettings settings={settings.values} /> : null;\n case 'menu-footer':\n if (!isEchoObject(data.object)) {\n return null;\n } else {\n return <MenuFooter object={data.object} />;\n }\n case 'status': {\n return (\n <>\n <SyncStatus />\n <SaveStatus />\n </>\n );\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\n if (!graph || !dispatch || !resolve || !client) {\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 properties: {\n label: ['spaces label', { ns: SPACE_PLUGIN }],\n palette: 'teal',\n testId: 'spacePlugin.spaces',\n role: 'branch',\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.CREATE,\n data: async () => {\n await dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.CREATE,\n },\n {\n action: NavigationAction.OPEN,\n },\n ]);\n },\n properties: {\n label: ['create space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n testId: 'spacePlugin.createSpace',\n },\n },\n {\n id: SpaceAction.JOIN,\n data: async () => {\n await dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.JOIN,\n },\n {\n action: NavigationAction.OPEN,\n },\n ]);\n },\n properties: {\n label: ['join space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\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 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 personal: space === client.spaces.default,\n namesCache: state.values.spaceNames,\n resolve,\n }),\n );\n },\n }),\n\n // Find an object by its fully qualified id.\n createExtension({\n id: `${SPACE_PLUGIN}/objects`,\n resolver: ({ id }) => {\n const [spaceId, objectId] = id.split(':');\n const space = client.spaces.get().find((space) => space.id === spaceId);\n if (!space) {\n return;\n }\n\n const state = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (state !== 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.loadObjectById(objectId).then((o) => (store.value = o));\n }\n }, id);\n const object = store.value;\n if (!object) {\n return;\n }\n\n return createObjectNode({ object, space, resolve });\n },\n }),\n\n // Create space actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/actions`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n actionGroups: ({ node }) => constructSpaceActionGroups({ space: node.data, dispatch }),\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 state = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (state !== 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) => createObjectNode({ object, space, resolve }))\n .filter(nonNullable);\n },\n }),\n\n // Create collection actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/object-actions`,\n filter: (node): node is Node<EchoReactiveObject<any>> => isEchoObject(node.data),\n actionGroups: ({ node }) => constructObjectActionGroups({ object: node.data, dispatch }),\n actions: ({ node }) => constructObjectActions({ node, dispatch }),\n }),\n\n // Create nodes for objects in collections.\n createExtension({\n id: `${SPACE_PLUGIN}/collection-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) => createObjectNode({ object, space, resolve }))\n .filter(nonNullable);\n },\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 [subjectId] = id.split('~');\n const [spaceId, objectId] = parseFullyQualifiedId(subjectId);\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = toSignal(\n (onChange) => {\n const timeout = setTimeout(async () => {\n await space?.db.loadObjectById(objectId);\n onChange();\n });\n\n return () => clearTimeout(timeout);\n },\n () => space?.db.getObjectById(objectId),\n subjectId,\n );\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: 'orphan-settings-for-subject',\n data: null,\n properties: {\n icon: 'ph--gear--regular',\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.CREATE: {\n if (!client) {\n return;\n }\n\n const space = await client.spaces.create(intent.data as PropertiesTypeProps);\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: { space, id: space.id, activeParts: { main: [space.id] } },\n\n intents: [\n ...(settings.values.onSpaceCreate\n ? [\n [\n { action: settings.values.onSpaceCreate, data: { space } },\n { action: SpaceAction.ADD_OBJECT, data: { target: space } },\n { action: NavigationAction.EXPOSE },\n ],\n ]\n : []),\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 if (client) {\n const { space } = await client.shell.joinSpace({ invitationCode: intent.data?.invitationCode });\n if (space) {\n return {\n data: { space, id: space.id, activeParts: { main: [space.id] } },\n\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.join',\n properties: {\n spaceId: space.id,\n },\n },\n },\n ],\n ],\n };\n }\n }\n break;\n }\n\n case SpaceAction.SHARE: {\n const spaceId = intent.data?.spaceId;\n if (clientPlugin && typeof spaceId === 'string') {\n if (!navigationPlugin?.provides.location.active) {\n return;\n }\n const target = firstIdInPart(navigationPlugin?.provides.location.active, 'main');\n const result = await clientPlugin.provides.client.shell.shareSpace({ spaceId, target });\n return {\n data: result,\n intents: [\n [\n {\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name: 'space.share',\n properties: {\n spaceId,\n members: result.members?.length,\n error: result.error?.message,\n cancelled: result.cancelled,\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: {\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.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 Identifiable);\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 Identifiable);\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 Identifiable], 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_OBJECT: {\n const object = intent.data?.object ?? intent.data?.result;\n const space = getSpace(object);\n if (!(isEchoObject(object) && 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 // Capture the current state for undo.\n const parentCollection = intent.data?.collection ?? space.properties[CollectionType.typename];\n const nestedObjects = await getNestedObjects(object, resolve);\n const deletionData = {\n object,\n parentCollection,\n index:\n parentCollection instanceof CollectionType\n ? parentCollection.objects.indexOf(object as Expando)\n : -1,\n nestedObjects,\n wasActive: [object, ...nestedObjects]\n .map((obj) => fullyQualifiedId(obj))\n .filter((id) => openObjectIds.has(id)),\n };\n\n // If the item is active, navigate to \"nowhere\" to avoid navigating to a removed item.\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 (parentCollection instanceof CollectionType) {\n // TODO(Zan): Is there a nicer way to do this without casting to Expando?\n const index = parentCollection.objects.indexOf(object as Expando);\n if (index !== -1) {\n parentCollection.objects.splice(index, 1);\n }\n }\n\n // If the object is a collection, also delete its nested objects.\n deletionData.nestedObjects.forEach((obj) => {\n space.db.remove(obj);\n });\n space.db.remove(object);\n\n const undoMessageKey =\n object instanceof CollectionType ? 'collection deleted label' : 'object deleted label';\n\n return {\n data: true,\n undoable: {\n // Consider using a translation key here.\n message: translations[0]['en-US'][SPACE_PLUGIN][undoMessageKey],\n data: deletionData,\n },\n };\n } else {\n const undoData = intent.data;\n if (undoData && isEchoObject(undoData.object) && undoData.parentCollection instanceof CollectionType) {\n // Restore the object to the space.\n const restoredObject = space.db.add(undoData.object);\n\n // Restore nested objects if the object was a collection.\n undoData.nestedObjects.forEach((obj: Expando) => {\n space.db.add(obj);\n });\n\n // Restore the object to its original position in the collection.\n if (undoData.index !== -1) {\n undoData.parentCollection.objects.splice(undoData.index, 0, restoredObject as Expando);\n }\n\n // Restore active state if it was active before removal.\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 if (!isEchoObject(originalObject) || !resolve) {\n return;\n }\n\n const newObject = await cloneObject(originalObject, resolve);\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 },\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 { 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);\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 === 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 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 EchoReactiveObject } from '@dxos/echo-schema';\nimport { Input, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\ntype FallbackSettingsProps = {\n object: EchoReactiveObject<any>;\n};\n\nexport const FallbackSettings = ({ object }: FallbackSettingsProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <div role='form' className='p-3 flex flex-col gap-2'>\n <div role='none' className='space-b-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 </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Planet } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { getSpace } from '@dxos/client/echo';\nimport type { EchoReactiveObject } from '@dxos/echo-schema';\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: EchoReactiveObject<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 2023 DXOS.org\n//\n\nimport { type MetadataResolver, NavigationAction, type IntentDispatcher } from '@dxos/app-framework';\nimport {\n type EchoReactiveObject,\n create,\n isReactiveObject,\n getTypename,\n type Expando,\n getSchema,\n getEchoObjectAnnotation,\n EXPANDO_TYPENAME,\n} from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Migrations } from '@dxos/migrations';\nimport {\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n actionGroupSymbol,\n type ActionData,\n type Graph,\n type Node,\n type InvokeParams,\n type NodeArg,\n getGraph,\n cleanup,\n memoize,\n} from '@dxos/plugin-graph';\nimport {\n SpaceState,\n fullyQualifiedId,\n getSpace,\n isEchoObject,\n isSpace,\n type Echo,\n type FilterSource,\n type Query,\n type QueryOptions,\n type Space,\n} from '@dxos/react-client/echo';\n\nimport { SpaceAction, SPACE_PLUGIN } 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 EchoReactiveObject<any>>(\n spaceOrEcho?: Space | Echo,\n filter?: FilterSource<T>,\n options?: QueryOptions,\n): T[] => {\n const key = isSpace(spaceOrEcho) ? spaceOrEcho.id : undefined;\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 collection,\n space,\n resolve,\n}: {\n collection: CollectionType;\n space: Space;\n resolve: MetadataResolver;\n}) => {\n return {\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<EchoReactiveObject<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<EchoReactiveObject<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<EchoReactiveObject<any>>, index?: number) => {\n // Create clone of child and add to destination space.\n const newObject = await cloneObject(child.data, resolve);\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 personal,\n namesCache,\n resolve,\n}: {\n space: Space;\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 })\n : {};\n\n return {\n id: space.id,\n type: SPACE_TYPE,\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: space.state.get() !== SpaceState.SPACE_READY || hasPendingMigration,\n testId: 'spacePlugin.space',\n },\n };\n};\n\nexport const constructSpaceActionGroups = ({ space, dispatch }: { space: Space; dispatch: IntentDispatcher }) => {\n const state = space.state.get();\n const hasPendingMigration = checkPendingMigration(space);\n const getId = (id: string) => `${id}/${space.id}`;\n\n if (state !== SpaceState.SPACE_READY || hasPendingMigration) {\n return [];\n }\n\n const collection = space.properties[CollectionType.typename];\n const actions: NodeArg<typeof actionGroupSymbol>[] = [\n {\n id: getId(SpaceAction.ADD_OBJECT),\n type: ACTION_GROUP_TYPE,\n data: actionGroupSymbol,\n properties: {\n label: ['create object in space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n // TODO(wittjosiah): This is currently a navtree feature. Address this with cmd+k integration.\n // mainAreaDisposition: 'in-flow',\n menuType: 'searchList',\n testId: 'spacePlugin.createObject',\n },\n nodes: [\n {\n id: getId(SpaceAction.ADD_OBJECT.replace('object', 'collection')),\n type: ACTION_TYPE,\n data: () =>\n dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: { target: collection, object: create(CollectionType, { objects: [], views: {} }) },\n },\n {\n action: NavigationAction.OPEN,\n },\n ]),\n properties: {\n label: ['create collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--cards-three--regular',\n testId: 'spacePlugin.createCollection',\n },\n },\n ],\n },\n ];\n\n return actions;\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 mainAreaDisposition: 'in-flow',\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.SHARE),\n type: ACTION_TYPE,\n data: async () => {\n if (locked) {\n return;\n }\n await dispatch({ plugin: SPACE_PLUGIN, action: SpaceAction.SHARE, data: { spaceId: space.id } });\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 mainAreaDisposition: 'absent',\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 mainAreaDisposition: 'absent',\n },\n },\n );\n }\n\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 mainAreaDisposition: 'menu',\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 mainAreaDisposition: 'in-flow',\n },\n });\n }\n\n return actions;\n};\n\nexport const createObjectNode = ({\n object,\n space,\n resolve,\n}: {\n object: EchoReactiveObject<any>;\n space: Space;\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 })\n : metadata.graphProps;\n\n return {\n id: fullyQualifiedId(object),\n type,\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 constructObjectActionGroups = ({\n object,\n dispatch,\n}: {\n object: EchoReactiveObject<any>;\n dispatch: IntentDispatcher;\n}) => {\n if (!(object instanceof CollectionType)) {\n return [];\n }\n\n const collection = object;\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<typeof actionGroupSymbol>[] = [\n {\n id: getId(SpaceAction.ADD_OBJECT),\n type: ACTION_GROUP_TYPE,\n data: actionGroupSymbol,\n properties: {\n label: ['create object in collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n disposition: 'toolbar',\n // TODO(wittjosiah): This is currently a navtree feature. Address this with cmd+k integration.\n // mainAreaDisposition: 'in-flow',\n menuType: 'searchList',\n testId: 'spacePlugin.createObject',\n },\n nodes: [\n {\n id: getId(SpaceAction.ADD_OBJECT.replace('object', 'collection')),\n type: ACTION_TYPE,\n data: () =>\n dispatch([\n {\n plugin: SPACE_PLUGIN,\n action: SpaceAction.ADD_OBJECT,\n data: { target: collection, object: create(CollectionType, { objects: [], views: {} }) },\n },\n {\n action: NavigationAction.OPEN,\n },\n ]),\n properties: {\n label: ['create collection label', { ns: SPACE_PLUGIN }],\n icon: 'ph--cards-three--regular',\n testId: 'spacePlugin.createCollection',\n },\n },\n ],\n },\n ];\n\n return actions;\n};\n\nexport const constructObjectActions = ({\n node,\n dispatch,\n}: {\n node: Node<EchoReactiveObject<any>>;\n dispatch: IntentDispatcher;\n}) => {\n const object = node.data;\n const getId = (id: string) => `${id}/${fullyQualifiedId(object)}`;\n const actions: NodeArg<ActionData>[] = [\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_OBJECT),\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_OBJECT,\n data: { 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: EchoReactiveObject<any>,\n resolve: MetadataResolver,\n): Promise<EchoReactiveObject<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: EchoReactiveObject<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): Promise<Expando> => {\n const schema = getSchema(object);\n const typename = schema ? getEchoObjectAnnotation(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, newId: true });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { parseIntentPlugin, useResolvePlugin } from '@dxos/app-framework';\nimport { Status, useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\n\nconst WAIT_FOR_OBJECT_TIMEOUT = 1_000;\n\nexport const MissingObject = ({ id }: { id: string }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const [waiting, setWaiting] = useState(false);\n const intentPlugin = useResolvePlugin(parseIntentPlugin);\n\n useEffect(() => {\n if (!intentPlugin) {\n return;\n }\n\n const timeout = setTimeout(async () => {\n setWaiting(true);\n await intentPlugin.provides.intent.dispatch({\n plugin: SPACE_PLUGIN,\n action: SpaceAction.WAIT_FOR_OBJECT,\n data: { id },\n });\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n return () => clearTimeout(timeout);\n }, [intentPlugin, id]);\n\n return (\n <div role='none' className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}>\n {waiting ? (\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'border border-dashed border-neutral-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg',\n )}\n >\n {t('missing object message')}\n </p>\n ) : (\n <Status indeterminate aria-label='Initializing' />\n )}\n </div>\n );\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/echo-schema';\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 { Button, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN, SpaceAction } from '../meta';\n\nexport const ShareSpaceButton = ({ spaceId }: { spaceId: string }) => {\n const dispatch = useIntentDispatcher();\n\n return <ShareSpaceButtonImpl onClick={() => dispatch({ action: SpaceAction.SHARE, data: { spaceId } })} />;\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 <Button data-testid='spacePlugin.shareSpaceButton' onClick={onClick} classNames='mli-1'>\n {t('share space label')}\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Command } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { SpaceState, type Space } from '@dxos/react-client/echo';\nimport { Main, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx, topbarBlockPaddingStart } from '@dxos/react-ui-theme';\nimport { ClipboardProvider } from '@dxos/shell/react';\n\nimport { SpaceMembersSection } from './SpaceMembersSection';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst KeyShortcuts = () => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <section className='mbe-4 col-span-4 md:col-start-5 md:col-end-7 grid grid-cols-subgrid gap-y-2 auto-rows-min'>\n <h2 className='contents'>\n <Command weight='duotone' className={mx(getSize(5), 'place-self-center')} />\n <span className='text-lg col-span-2 md:col-span-1'>{t('keyshortcuts label')}</span>\n </h2>\n <div role='none' className='col-start-2 col-end-4 md:col-end-5 pie-2'>\n <Surface role='keyshortcuts' />\n </div>\n </section>\n );\n};\n\nconst spaceMainLayout =\n 'grid gap-y-2 auto-rows-min before:bs-2 before:col-span-5 grid-cols-[var(--rail-size)_var(--rail-size)_1fr_var(--rail-size)] md:grid-cols-[var(--rail-size)_var(--rail-size)_minmax(max-content,1fr)_var(--rail-size)_var(--rail-size)_minmax(max-content,2fr)_var(--rail-size)]';\n\n/**\n * @deprecated\n */\n// TODO(wittjosiah): Remove this and re-use space members section as a deck column.\nexport const SpaceMain = ({ space, role }: { space: Space; role: 'main' | 'article' }) => {\n // const { graph } = useGraph();\n // const _actionsMap = graph.findNode(space.key.toHex())?.actionsMap;\n const state = space.state.get();\n const ready = state === SpaceState.SPACE_READY;\n const Root = role === 'main' ? Main.Content : 'div';\n return (\n <ClipboardProvider>\n <Root\n {...(role === 'main'\n ? { classNames: [topbarBlockPaddingStart, 'min-bs-dvh', spaceMainLayout] }\n : { role: 'none', className: mx(topbarBlockPaddingStart, 'row-span-2', spaceMainLayout) })}\n data-testid={`spacePlugin.${role}`}\n data-isready={ready ? 'true' : 'false'}\n >\n {/* {actionsMap && <InFlowSpaceActions actionsMap={actionsMap} />} */}\n {ready && <SpaceMembersSection space={space} />}\n <KeyShortcuts />\n </Root>\n </ClipboardProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CaretDown, Check, UserPlus, UsersThree } from '@phosphor-icons/react';\nimport React, { useCallback, useState } from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { type Space, useMembers, SpaceMember, useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { Invitation } from '@dxos/react-client/invitations';\nimport { Button, ButtonGroup, DropdownMenu, List, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\nimport { InvitationListItem, IdentityListItem } from '@dxos/shell/react';\n\nimport { SPACE_PLUGIN } from '../../meta';\n\n// TODO(thure): Sync with shell?\nconst activeActionKeyStorageKey = 'dxos:react-shell/space-manager/active-action';\n\nconst Presence = SpaceMember.PresenceState;\n\nconst handleCreateInvitationUrl = (invitationCode: string) => `${origin}?spaceInvitationCode=${invitationCode}`;\n\nconst SpaceMemberList = ({ members }: { members: SpaceMember[] }) => {\n return members.length > 0 ? (\n <List classNames='col-start-2 col-end-5 gap-y-1 grid grid-cols-subgrid items-center'>\n {members.map((member) => (\n <IdentityListItem\n classNames='contents'\n key={member.identity.identityKey.toHex()}\n identity={member.identity}\n presence={member.presence}\n />\n ))}\n </List>\n ) : null;\n};\n\nexport const SpaceMembersSection = ({ space }: { space: Space }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const invitations = useSpaceInvitations(space.key);\n const { dispatch } = useIntent();\n\n const handleCloseDialog = () =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', state: false },\n });\n\n const handleInvitationSelect = ({\n invitation: invitationObservable,\n }: {\n invitation: CancellableInvitationObservable;\n }) => {\n const invitation = invitationObservable.get();\n void dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/space/InvitationManagerDialog',\n subject: {\n invitationUrl: handleCreateInvitationUrl(InvitationEncoder.encode(invitation)),\n send: handleCloseDialog,\n status: invitation.state,\n type: invitation.type,\n authCode: invitation.authCode,\n id: invitation.invitationId,\n },\n },\n });\n };\n\n const inviteActions = {\n inviteOne: {\n label: t('invite one label', { ns: 'os' }),\n description: t('invite one description', { ns: 'os' }),\n icon: UserPlus,\n onClick: useCallback(() => {\n space.share?.({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.SHARED_SECRET,\n });\n }, [space]),\n },\n inviteMany: {\n label: t('invite many label', { ns: 'os' }),\n description: t('invite many description', { ns: 'os' }),\n icon: UsersThree,\n onClick: useCallback(() => {\n space.share?.({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n }, [space]),\n },\n };\n\n const [activeActionKey, setInternalActiveActionKey] = useState<keyof typeof inviteActions>(\n (localStorage.getItem(activeActionKeyStorageKey) as keyof typeof inviteActions) ?? 'inviteOne',\n );\n const setActiveActionKey = (nextKey: keyof typeof inviteActions) => {\n setInternalActiveActionKey(nextKey);\n localStorage.setItem(activeActionKeyStorageKey, nextKey);\n };\n\n const activeAction = inviteActions[activeActionKey as keyof typeof inviteActions] ?? {};\n\n // TODO(thure): Simplify when Object.groupBy() is supported by Safari\n // https://caniuse.com/mdn-javascript_builtins_object_groupby\n const members = useMembers(space.key).reduce(\n (acc: Record<SpaceMember.PresenceState, SpaceMember[]>, member) => {\n acc[member.presence].push(member);\n return acc;\n },\n {\n [Presence.ONLINE]: [],\n [Presence.OFFLINE]: [],\n },\n );\n\n return (\n <section className='mbe-4 col-span-3 grid gap-y-2 grid-cols-subgrid auto-rows-min'>\n <h2 className='contents'>\n <UsersThree weight='duotone' className={mx(getSize(5), 'place-self-center')} />\n <span className='text-lg col-span-2'>{t('space members label')}</span>\n </h2>\n <h3 className='col-start-2 col-span-3 text-sm italic text-description'>{t('invitations heading')}</h3>\n {invitations.length > 0 && (\n <List classNames='col-start-2 col-span-2 gap-y-2 grid grid-cols-[var(--rail-size)_1fr_var(--rail-action)_var(--rail-action)]'>\n {invitations.map((invitation) => (\n <InvitationListItem\n reverseEffects\n classNames='pis-0 pie-0 gap-0 col-span-4 grid grid-cols-subgrid'\n key={invitation.get().invitationId}\n invitation={invitation}\n send={handleInvitationSelect}\n createInvitationUrl={handleCreateInvitationUrl}\n />\n ))}\n </List>\n )}\n <ButtonGroup classNames='col-start-2 col-end-4 grid grid-cols-[1fr_var(--rail-action)] place-self-grow gap-px'>\n <Button classNames='gap-2' onClick={activeAction.onClick}>\n <activeAction.icon className={getSize(5)} />\n <span>{t(activeAction.label, { ns: 'os' })}</span>\n </Button>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button classNames='pli-0'>\n <CaretDown className={getSize(4)} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {Object.entries(inviteActions).map(([id, action]) => {\n return (\n <DropdownMenu.CheckboxItem\n key={id}\n aria-labelledby={`${id}__label`}\n aria-describedby={`${id}__description`}\n checked={activeActionKey === id}\n onCheckedChange={(checked) => checked && setActiveActionKey(id as keyof typeof inviteActions)}\n classNames='gap-2'\n >\n {action.icon && <action.icon className={getSize(5)} />}\n <div role='none' className='flex-1 min-is-0 space-b-1'>\n <p id={`${id}__label`}>{t(action.label, { ns: 'os' })}</p>\n {action.description && (\n <p id={`${id}__description`} className={descriptionText}>\n {t(action.description, { ns: 'os' })}\n </p>\n )}\n </div>\n <DropdownMenu.ItemIndicator asChild>\n <Check className={getSize(4)} />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.CheckboxItem>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </ButtonGroup>\n {members[Presence.ONLINE].length + members[Presence.OFFLINE].length < 1 ? (\n <p className={mx(descriptionText, 'text-center is-full mlb-2')}>\n {t('empty space members message', { ns: 'os' })}\n </p>\n ) : (\n <>\n <h3 className='col-start-2 col-end-5 text-sm italic text-description'>\n {t('active space members heading', { count: members[Presence.ONLINE].length })}\n </h3>\n <SpaceMemberList members={members[Presence.ONLINE]} />\n <h3 className='col-start-2 col-end-5 text-sm italic text-description'>\n {t('inactive space members heading', { count: members[Presence.OFFLINE].length })}\n </h3>\n <SpaceMemberList members={members[Presence.OFFLINE]} />\n </>\n )}\n </section>\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 useDensityContext,\n useTranslation,\n List,\n ListItem,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { AttentionGlyph } 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 density = useDensityContext();\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 density === 'fine' ? (\n <SmallPresence count={membersForObject.length} />\n ) : (\n <FullPresence members={membersForObject} />\n );\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 = ({ viewers }: { viewers?: ComplexMap<PublicKey, ObjectViewerProps> }) => {\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 activeViewers = viewers\n ? Array.from(viewers.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION)\n : [];\n\n return <SmallPresence count={activeViewers.length} />;\n};\n\nexport const SmallPresence = ({ count }: { count: number }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <AttentionGlyph presence={count > 1 ? 'many' : count === 1 ? 'one' : 'none'} classNames='self-center mie-1' />\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, useResolvePlugins } from '@dxos/app-framework';\nimport { SettingsValue } from '@dxos/plugin-settings';\nimport { Input, Select, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { SpaceAction, SPACE_PLUGIN } from '../meta';\nimport { parseSpaceInitPlugin, type SpaceSettingsProps } from '../types';\n\nexport const SpaceSettings = ({ settings }: { settings: SpaceSettingsProps }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const plugins = useResolvePlugins(parseSpaceInitPlugin);\n\n return (\n <>\n <SettingsValue 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 </SettingsValue>\n\n <SettingsValue label={t('default on space create label')}>\n <Select.Root\n value={settings.onSpaceCreate}\n onValueChange={(value) => {\n settings.onSpaceCreate = value;\n }}\n >\n <Select.TriggerButton />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {plugins.map(\n ({\n provides: {\n space: { onSpaceCreate },\n },\n }) => (\n <Select.Option key={onSpaceCreate.action} value={onSpaceCreate.action}>\n {toLocalizedString(onSpaceCreate.label, t)}\n </Select.Option>\n ),\n )}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </SettingsValue>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\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';\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { useClient } from '@dxos/react-client';\nimport { Icon, useTranslation } from '@dxos/react-ui';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const SaveStatus = () => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const [state, setState] = useState<'saved' | 'saving'>('saved');\n useEffect(() => {\n return createClientSaveTracker(client, (state) => {\n setState(state);\n });\n }, []);\n\n return (\n <StatusBar.Item title={state === 'saving' ? t('saving label') : t('saved label')}>\n <Icon icon={state === 'saving' ? 'ph--arrows-clockwise--regular' : 'ph--check-circle--regular'} size={4} />\n </StatusBar.Item>\n );\n};\n\nconst 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\nimport React, { type HTMLAttributes, useEffect, useState } from 'react';\n\nimport { StatusBar } from '@dxos/plugin-status-bar';\nimport { Icon, 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 { type Progress, type PeerSyncState, type SpaceSyncStateMap, getSyncSummary, useSyncState } from './types';\nimport { SPACE_PLUGIN } from '../../meta';\n\nconst SYNC_STALLED_TIMEOUT = 5_000;\n\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\nexport const SyncStatus = () => {\n const state = useSyncState();\n return <SyncStatusIndicator state={state} />;\n};\n\nexport const SyncStatusIndicator = ({ state }: { state: SpaceSyncStateMap }) => {\n const summary = getSyncSummary(state);\n const offline = false;\n\n const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;\n const needsToDownload = summary.differentDocuments > 0 || summary.missingOnLocal > 0;\n const [classNames, setClassNames] = useState<string>();\n useEffect(() => {\n setClassNames(undefined);\n if (!needsToUpload && !needsToDownload) {\n return;\n }\n\n const t = setTimeout(() => {\n setClassNames('text-orange-500');\n }, SYNC_STALLED_TIMEOUT);\n return () => clearTimeout(t);\n }, [needsToUpload, needsToDownload]);\n\n return (\n <StatusBar.Item>\n <Popover.Root>\n <Popover.Trigger>\n <Icon\n icon={\n offline\n ? 'ph--cloud-x--regular'\n : needsToUpload\n ? 'ph--cloud-arrow-up--regular'\n : needsToDownload\n ? 'ph--cloud-arrow-down--regular'\n : 'ph--cloud-check--regular'\n }\n size={4}\n classNames={classNames}\n />\n </Popover.Trigger>\n <Popover.Content>\n <SyncStatusDetail state={state} summary={summary} debug={false} />\n </Popover.Content>\n </Popover.Root>\n </StatusBar.Item>\n );\n};\n\nexport const SyncStatusDetail = ({\n classNames,\n state,\n summary,\n debug,\n}: ThemedClassName<{\n state: SpaceSyncStateMap;\n summary: PeerSyncState;\n debug?: boolean;\n}>) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const entries = Object.entries(state).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n\n // TODO(burdon): Normalize to max document count?\n return (\n <div className={mx('flex flex-col text-xs min-w-[16rem]', classNames)}>\n <h1 className='p-2'>{t('sync status title')}</h1>\n <div className='flex flex-col gap-[2px] my-[2px]'>\n {entries.map(([spaceId, state]) => (\n <SpaceRow key={spaceId} spaceId={spaceId} state={state} />\n ))}\n </div>\n {debug && <SyntaxHighlighter language='json'>{JSON.stringify(summary, null, 2)}</SyntaxHighlighter>}\n </div>\n );\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\nconst SpaceRow = ({\n spaceId,\n state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote },\n}: {\n spaceId: string;\n state: PeerSyncState;\n}) => {\n const downActive = useActive(localDocumentCount);\n const upActive = useActive(remoteDocumentCount);\n\n return (\n <div\n className={mx('flex items-center mx-[2px] gap-[2px] cursor-pointer', styles.barHover)}\n title={spaceId}\n onClick={() => {\n void navigator.clipboard.writeText(spaceId);\n }}\n >\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 { 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// Copyright 2023 DXOS.org\n//\n\nimport { SPACE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SPACE_PLUGIN]: {\n 'plugin name': 'Spaces',\n 'first run message': 'Nothing selected.',\n 'create space label': 'Create a new space',\n 'join space label': 'Join a 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 '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 'name label': 'Name',\n 'name placeholder': 'Name',\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", "firstIdInPart", "openIds", "parseGraphPlugin", "parseIntentPlugin", "parseMetadataResolverPlugin", "parseNavigationPlugin", "resolvePlugin", "EventSubscriptions", "isReactiveObject", "scheduledEffect", "LocalStorageStore", "log", "Migrations", "parseAttentionPlugin", "parseClientPlugin", "createExtension", "memoize", "toSignal", "ObservabilityAction", "PublicKey", "Expando", "Filter", "SpaceState", "create", "fullyQualifiedId", "getSpace", "getTypename", "isEchoObject", "isSpace", "loadObjectReferences", "parseFullyQualifiedId", "Dialog", "ClipboardProvider", "InvitationManager", "osTranslations", "ComplexMap", "nonNullable", "reduceGroupBy", "CheckCircle", "CircleDashed", "CircleNotch", "React", "useEffect", "useState", "parseIntentPlugin", "useResolvePlugin", "parseNavigationPlugin", "NavigationAction", "useClient", "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", "useEffect", "timeout", "setTimeout", "clearTimeout", "findIndex", "object", "fullyQualifiedId", "provides", "location", "active", "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", "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", "FallbackSettings", "object", "t", "useTranslation", "SPACE_PLUGIN", "React", "div", "role", "className", "Input", "Root", "Label", "TextInput", "placeholder", "value", "name", "onChange", "event", "target", "Planet", "React", "getSpace", "useClient", "DropdownMenu", "toLocalizedString", "useTranslation", "NavigationAction", "create", "isReactiveObject", "getTypename", "getSchema", "getEchoObjectAnnotation", "EXPANDO_TYPENAME", "invariant", "Migrations", "ACTION_TYPE", "ACTION_GROUP_TYPE", "actionGroupSymbol", "getGraph", "cleanup", "memoize", "SpaceState", "fullyQualifiedId", "getSpace", "isEchoObject", "isSpace", "SPACES", "SPACE_PLUGIN", "SPACE_TYPE", "COMPOSER_SPACE_LOCK", "SHARED", "EMPTY_ARRAY", "memoizeQuery", "spaceOrEcho", "filter", "options", "key", "isSpace", "id", "undefined", "query", "memoize", "db", "unsubscribe", "subscribe", "cleanup", "objects", "getSpaceDisplayName", "space", "personal", "namesCache", "state", "get", "SpaceState", "SPACE_READY", "properties", "name", "length", "ns", "getCollectionGraphNodePartials", "collection", "resolve", "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", "label", "description", "icon", "disabled", "testId", "constructSpaceActionGroups", "dispatch", "getId", "actions", "SpaceAction", "ADD_OBJECT", "ACTION_GROUP_TYPE", "actionGroupSymbol", "disposition", "menuType", "nodes", "replace", "ACTION_TYPE", "plugin", "action", "target", "object", "create", "views", "NavigationAction", "OPEN", "constructSpaceActions", "migrating", "MIGRATE", "mainAreaDisposition", "running", "locked", "SHARE", "spaceId", "keyBinding", "macos", "windows", "UNLOCK", "LOCK", "RENAME", "params", "SPACE_INACTIVE", "CLOSE", "createObjectNode", "getTypename", "metadata", "Object", "keys", "graphProps", "fullyQualifiedId", "placeholder", "persistenceClass", "persistenceKey", "constructObjectActionGroups", "constructObjectActions", "node", "RENAME_OBJECT", "REMOVE_OBJECT", "graph", "getGraph", "relation", "find", "url", "window", "location", "origin", "navigator", "clipboard", "writeText", "getActiveSpace", "active", "findNode", "isReactiveObject", "getSpace", "getNestedObjects", "loadReferences", "nested", "Promise", "all", "map", "flat", "schema", "getSchema", "getEchoObjectAnnotation", "EXPANDO_TYPENAME", "serializer", "invariant", "content", "serialize", "deserialize", "newId", "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", "React", "useEffect", "useState", "parseIntentPlugin", "useResolvePlugin", "Status", "useTranslation", "baseSurface", "descriptionText", "mx", "WAIT_FOR_OBJECT_TIMEOUT", "MissingObject", "id", "t", "useTranslation", "SPACE_PLUGIN", "waiting", "setWaiting", "useState", "intentPlugin", "useResolvePlugin", "parseIntentPlugin", "useEffect", "timeout", "setTimeout", "provides", "intent", "dispatch", "plugin", "action", "SpaceAction", "WAIT_FOR_OBJECT", "data", "clearTimeout", "React", "div", "role", "className", "mx", "baseSurface", "p", "descriptionText", "Status", "indeterminate", "aria-label", "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", "Button", "useTranslation", "ShareSpaceButton", "spaceId", "dispatch", "useIntentDispatcher", "React", "ShareSpaceButtonImpl", "onClick", "action", "SpaceAction", "SHARE", "data", "t", "useTranslation", "SPACE_PLUGIN", "Button", "data-testid", "classNames", "Command", "React", "Surface", "SpaceState", "Main", "useTranslation", "getSize", "mx", "topbarBlockPaddingStart", "ClipboardProvider", "CaretDown", "Check", "UserPlus", "UsersThree", "React", "useCallback", "useState", "LayoutAction", "useIntent", "useMembers", "SpaceMember", "useSpaceInvitations", "InvitationEncoder", "Invitation", "Button", "ButtonGroup", "DropdownMenu", "List", "useTranslation", "descriptionText", "getSize", "mx", "InvitationListItem", "IdentityListItem", "activeActionKeyStorageKey", "Presence", "SpaceMember", "PresenceState", "handleCreateInvitationUrl", "invitationCode", "origin", "SpaceMemberList", "members", "length", "React", "List", "classNames", "map", "member", "IdentityListItem", "key", "identity", "identityKey", "toHex", "presence", "SpaceMembersSection", "space", "t", "useTranslation", "SPACE_PLUGIN", "invitations", "useSpaceInvitations", "dispatch", "useIntent", "handleCloseDialog", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "handleInvitationSelect", "invitation", "invitationObservable", "get", "component", "subject", "invitationUrl", "InvitationEncoder", "encode", "send", "status", "type", "authCode", "id", "invitationId", "inviteActions", "inviteOne", "label", "ns", "description", "icon", "UserPlus", "onClick", "useCallback", "share", "Invitation", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "SHARED_SECRET", "inviteMany", "UsersThree", "NONE", "multiUse", "activeActionKey", "setInternalActiveActionKey", "useState", "localStorage", "getItem", "setActiveActionKey", "nextKey", "setItem", "activeAction", "useMembers", "reduce", "acc", "push", "ONLINE", "OFFLINE", "section", "className", "h2", "weight", "mx", "getSize", "span", "h3", "InvitationListItem", "reverseEffects", "createInvitationUrl", "ButtonGroup", "Button", "DropdownMenu", "Root", "Trigger", "asChild", "CaretDown", "Content", "Viewport", "Object", "entries", "CheckboxItem", "aria-labelledby", "aria-describedby", "checked", "onCheckedChange", "div", "role", "p", "descriptionText", "ItemIndicator", "Check", "Arrow", "count", "KeyShortcuts", "t", "useTranslation", "SPACE_PLUGIN", "React", "section", "className", "h2", "Command", "weight", "mx", "getSize", "span", "div", "role", "Surface", "spaceMainLayout", "SpaceMain", "space", "state", "get", "ready", "SpaceState", "SPACE_READY", "Root", "Main", "Content", "ClipboardProvider", "classNames", "topbarBlockPaddingStart", "data-testid", "data-isready", "SpaceMembersSection", "React", "useCallback", "useEffect", "useState", "usePlugin", "generateName", "PublicKey", "useClient", "getSpace", "useMembers", "fullyQualifiedId", "useIdentity", "Avatar", "AvatarGroup", "AvatarGroupItem", "Tooltip", "useDensityContext", "useTranslation", "List", "ListItem", "useDefaultValue", "AttentionGlyph", "ComplexMap", "keyToFallback", "REFRESH_INTERVAL", "ACTIVITY_DURATION", "noViewers", "ComplexMap", "PublicKey", "hash", "getName", "identity", "profile", "displayName", "generateName", "identityKey", "toHex", "SpacePresence", "object", "spaceKey", "density", "useDensityContext", "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", "SmallPresence", "count", "length", "FullPresence", "members", "props", "size", "onMemberClick", "useDefaultValue", "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", "viewers", "moment", "activeViewers", "Array", "from", "values", "t", "useTranslation", "asChild", "AttentionGlyph", "React", "useIntentDispatcher", "useResolvePlugins", "SettingsValue", "Input", "Select", "toLocalizedString", "useTranslation", "SpaceSettings", "settings", "t", "useTranslation", "SPACE_PLUGIN", "dispatch", "useIntentDispatcher", "plugins", "useResolvePlugins", "parseSpaceInitPlugin", "React", "SettingsValue", "label", "Input", "Switch", "checked", "showHidden", "onCheckedChange", "plugin", "action", "SpaceAction", "TOGGLE_HIDDEN", "data", "state", "Select", "Root", "value", "onSpaceCreate", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "map", "provides", "space", "Option", "key", "toLocalizedString", "React", "useEffect", "useState", "Context", "StatusBar", "useClient", "Icon", "useTranslation", "SaveStatus", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "state", "setState", "useState", "useEffect", "createClientSaveTracker", "React", "StatusBar", "Item", "title", "Icon", "icon", "size", "cb", "unsubscribeCallbacks", "install", "spaces", "space", "id", "createSpaceSaveTracker", "s", "Object", "values", "some", "subscribe", "get", "unsubscribe", "ctx", "Context", "waitUntilReady", "then", "disposed", "hasUnsavedChanges", "lastFlushPromise", "crud", "saveStateChanged", "on", "unsavedDocuments", "length", "debounce", "undefined", "flushPromise", "flush", "dispose", "React", "useEffect", "useState", "StatusBar", "Icon", "Popover", "useTranslation", "SyntaxHighlighter", "mx", "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", "SYNC_STALLED_TIMEOUT", "styles", "barBg", "barFg", "barHover", "SyncStatus", "state", "useSyncState", "React", "SyncStatusIndicator", "summary", "getSyncSummary", "offline", "needsToUpload", "differentDocuments", "missingOnRemote", "needsToDownload", "missingOnLocal", "classNames", "setClassNames", "useState", "useEffect", "undefined", "t", "setTimeout", "clearTimeout", "StatusBar", "Item", "Popover", "Root", "Trigger", "Icon", "icon", "size", "Content", "SyncStatusDetail", "debug", "useTranslation", "SPACE_PLUGIN", "entries", "Object", "sort", "a", "b", "div", "className", "mx", "h1", "map", "spaceId", "SpaceRow", "key", "SyntaxHighlighter", "language", "JSON", "stringify", "useActive", "count", "current", "setCurrent", "active", "setActive", "localDocumentCount", "remoteDocumentCount", "downActive", "upActive", "title", "onClick", "navigator", "clipboard", "writeText", "Candle", "up", "total", "down", "Bar", "p", "Math", "min", "style", "width", "SPACE_PLUGIN", "ACTIVE_NODE_BROADCAST_INTERVAL", "OBJECT_ID_LENGTH", "SPACE_MAX_OBJECTS", "DIRECTORY_TYPE", "parseSpacePlugin", "plugin", "Array", "isArray", "provides", "space", "enabled", "undefined", "SpacePlugin", "firstRun", "onFirstRun", "settings", "LocalStorageStore", "SPACE_PLUGIN", "onSpaceCreate", "state", "awaiting", "spaceNames", "viewersByObject", "viewersByIdentity", "ComplexMap", "PublicKey", "hash", "sdkMigrationRunning", "subscriptions", "EventSubscriptions", "spaceSubscriptions", "graphSubscriptions", "Map", "clientPlugin", "intentPlugin", "navigationPlugin", "attentionPlugin", "onSpaceReady", "client", "location", "attention", "defaultSpace", "spaces", "default", "properties", "COMPOSER_SPACE_LOCK", "objects", "spacesOrder", "db", "query", "Filter", "schema", "Expando", "key", "SHARED", "run", "add", "create", "order", "subscribe", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "internal", "migrate", "filter", "SPACE_READY", "forEach", "scheduledEffect", "name", "values", "id", "unsubscribe", "ids", "openIds", "active", "removed", "closed", "flat", "send", "identity", "halo", "idsBySpace", "reduceGroupBy", "spaceId", "split", "has", "set", "find", "postMessage", "identityKey", "toHex", "attended", "added", "includes", "catch", "err", "log", "warn", "message", "interval", "setInterval", "clearInterval", "clear", "listen", "payload", "safeFrom", "lastSeen", "Date", "now", "currentlyAttended", "Set", "delete", "meta", "ready", "plugins", "prop", "storageKey", "type", "bool", "allowUndefined", "json", "resolvePlugin", "parseNavigationPlugin", "parseAttentionPlugin", "parseClientPlugin", "parseIntentPlugin", "dispatch", "intent", "handleFirstRun", "CollectionType", "typename", "views", "Migrations", "versionProperty", "targetVersion", "isReady", "waitUntilReady", "wait", "then", "unload", "close", "cb", "translations", "osTranslations", "root", "React", "AwaitingObject", "metadata", "records", "placeholder", "ns", "icon", "loadReferences", "collection", "loadObjectReferences", "Object", "echo", "surface", "component", "data", "role", "rest", "primary", "object", "isSpace", "Surface", "node", "CollectionMain", "disposition", "length", "MissingObject", "isEchoObject", "subject", "FallbackSettings", "Dialog", "Content", "ClipboardProvider", "InvitationManager", "PopoverRenameSpace", "isReactiveObject", "PopoverRenameObject", "SmallPresenceLive", "viewers", "fullyQualifiedId", "SmallPresence", "count", "getSpace", "SpacePresence", "ShareSpaceButton", "CollectionSection", "SpaceSettings", "MenuFooter", "SyncStatus", "SaveStatus", "graph", "builder", "metadataPlugin", "parseMetadataResolverPlugin", "graphPlugin", "parseGraphPlugin", "resolve", "resolver", "createExtension", "connector", "toSignal", "onChange", "defaultSpaceUnsubscribe", "SPACES", "label", "palette", "testId", "childrenPersistenceClass", "onRearrangeChildren", "nextOrder", "_sortEdges", "map", "actions", "SpaceAction", "CREATE", "action", "NavigationAction", "OPEN", "JOIN", "memoizeQuery", "orderMap", "index", "sort", "a", "b", "showHidden", "SPACE_INACTIVE", "constructSpaceNode", "personal", "namesCache", "objectId", "store", "memoize", "signal", "getObjectById", "value", "loadObjectById", "o", "createObjectNode", "actionGroups", "constructSpaceActionGroups", "constructSpaceActions", "migrating", "nonNullable", "constructObjectActionGroups", "constructObjectActions", "endsWith", "subjectId", "parseFullyQualifiedId", "timeout", "setTimeout", "clearTimeout", "getTypename", "serializer", "inputType", "outputType", "serialize", "deserialize", "SPACE_TYPE", "result", "ancestors", "findLast", "ancestor", "ADD_OBJECT", "target", "WAIT_FOR_OBJECT", "activeParts", "main", "intents", "EXPOSE", "ObservabilityAction", "SEND_EVENT", "shell", "joinSpace", "invitationCode", "SHARE", "firstIdInPart", "shareSpace", "members", "error", "cancelled", "LOCK", "UNLOCK", "RENAME", "caller", "LayoutAction", "SET_LAYOUT", "element", "anchorId", "open", "CLOSE", "MIGRATE", "version", "coreDatabase", "getAllObjectIds", "title", "description", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "unlinkDeletedObjects", "push", "REMOVE_OBJECT", "openObjectIds", "undo", "parentCollection", "nestedObjects", "getNestedObjects", "deletionData", "indexOf", "wasActive", "obj", "sidebar", "splice", "remove", "undoMessageKey", "undoable", "undoData", "restoredObject", "RENAME_OBJECT", "DUPLICATE_OBJECT", "originalObject", "newObject", "cloneObject", "TOGGLE_HIDDEN", "SpacePlugin"]
7
7
  }